Переглянути джерело

Almost a complete rewrite, part 1.

lllllllillllllillll 11 місяців тому
батько
коміт
622318c461
100 змінених файлів з 85896 додано та 31343 видалено
  1. 31 49
      controllers/account.js
  2. 47 583
      controllers/apps.js
  3. 56 445
      controllers/dashboard.js
  4. 43 69
      controllers/images.js
  5. 22 81
      controllers/login.js
  6. 27 79
      controllers/networks.js
  7. 71 0
      controllers/preferences.js
  8. 56 108
      controllers/register.js
  9. 30 172
      controllers/settings.js
  10. 0 34
      controllers/supporters.js
  11. 25 37
      controllers/syslogs.js
  12. 35 17
      controllers/users.js
  13. 22 108
      controllers/volumes.js
  14. 249 0
      database/config.js
  15. 0 272
      database/models.js
  16. BIN
      database/sessions.sqlite
  17. BIN
      database/settings.sqlite
  18. 14 0
      languages/chinese.json
  19. 59 325
      package-lock.json
  20. 4 8
      package.json
  21. 276 0
      public/css/demo.css
  22. 2 2
      public/css/demo.min.css
  23. 276 0
      public/css/demo.rtl.css
  24. 8 0
      public/css/demo.rtl.min.css
  25. 59 27
      public/css/dweebui.css
  26. 10 0
      public/css/tabler-social.css
  27. 8 0
      public/css/tabler-social.min.css
  28. 10 0
      public/css/tabler-social.rtl.css
  29. 8 0
      public/css/tabler-social.rtl.min.css
  30. 25813 0
      public/css/tabler.css
  31. 2 28571
      public/css/tabler.min.css
  32. 25777 0
      public/css/tabler.rtl.css
  33. 8 0
      public/css/tabler.rtl.min.css
  34. 3 3
      public/js/demo-theme.js
  35. 9 0
      public/js/demo-theme.min.js
  36. 2 2
      public/js/demo.js
  37. 2 2
      public/js/demo.min.js
  38. 27 0
      public/js/dweebui.js
  39. 282 347
      public/js/htmx-sse.js
  40. 0 0
      public/js/htmx.min.js
  41. 8 0
      public/js/tabler.esm.js
  42. 8 0
      public/js/tabler.esm.min.js
  43. 13 0
      public/js/tabler.js
  44. 2 2
      public/js/tabler.min.js
  45. 13728 0
      public/libs/apexcharts/dist/apexcharts.js
  46. 6314 0
      public/libs/bootstrap/dist/js/bootstrap.bundle.js
  47. 0 0
      public/libs/bootstrap/dist/js/bootstrap.bundle.js.map
  48. 5 0
      public/libs/bootstrap/dist/js/bootstrap.bundle.min.js
  49. 0 0
      public/libs/bootstrap/dist/js/bootstrap.bundle.min.js.map
  50. 4447 0
      public/libs/bootstrap/dist/js/bootstrap.esm.js
  51. 0 0
      public/libs/bootstrap/dist/js/bootstrap.esm.js.map
  52. 5 0
      public/libs/bootstrap/dist/js/bootstrap.esm.min.js
  53. 0 0
      public/libs/bootstrap/dist/js/bootstrap.esm.min.js.map
  54. 4494 0
      public/libs/bootstrap/dist/js/bootstrap.js
  55. 0 0
      public/libs/bootstrap/dist/js/bootstrap.js.map
  56. 5 0
      public/libs/bootstrap/dist/js/bootstrap.min.js
  57. 0 0
      public/libs/bootstrap/dist/js/bootstrap.min.js.map
  58. 66 0
      public/libs/countup.js/dist/countUp.d.ts
  59. 300 0
      public/libs/countup.js/dist/countUp.js
  60. 0 0
      public/libs/countup.js/dist/countUp.min.js
  61. 0 0
      public/libs/countup.js/dist/countUp.umd.js
  62. 26 0
      public/libs/countup.js/dist/requestAnimationFrame.polyfill.js
  63. 1 0
      public/libs/dropzone/dist/basic.css
  64. 1 0
      public/libs/dropzone/dist/basic.css.map
  65. 0 0
      public/libs/dropzone/dist/dropzone-min.js
  66. 0 0
      public/libs/dropzone/dist/dropzone-min.js.map
  67. 0 0
      public/libs/dropzone/dist/dropzone.css
  68. 1 0
      public/libs/dropzone/dist/dropzone.css.map
  69. 129 0
      public/libs/dropzone/dist/dropzone.js
  70. 0 0
      public/libs/dropzone/dist/dropzone.js.map
  71. 74 0
      public/libs/dropzone/dist/dropzone.mjs
  72. 0 0
      public/libs/dropzone/dist/dropzone.mjs.map
  73. 21 0
      public/libs/fslightbox/LICENSE
  74. 68 0
      public/libs/fslightbox/README.md
  75. 0 0
      public/libs/fslightbox/index.js
  76. 38 0
      public/libs/fslightbox/package.json
  77. 2318 0
      public/libs/jsvectormap/dist/js/jsvectormap.js
  78. 0 0
      public/libs/jsvectormap/dist/js/jsvectormap.min.js
  79. 0 0
      public/libs/jsvectormap/dist/maps/world-merc.js
  80. 0 0
      public/libs/jsvectormap/dist/maps/world.js
  81. 11 0
      public/libs/litepicker/dist/bundle.js
  82. 11 0
      public/libs/litepicker/dist/css/litepicker.css
  83. 12 0
      public/libs/litepicker/dist/css/plugins/keyboardnav.js.css
  84. 133 0
      public/libs/litepicker/dist/css/plugins/mobilefriendly.js.css
  85. 54 0
      public/libs/litepicker/dist/css/plugins/multiselect.js.css
  86. 81 0
      public/libs/litepicker/dist/css/plugins/ranges.js.css
  87. 11 0
      public/libs/litepicker/dist/js/main.js
  88. 11 0
      public/libs/litepicker/dist/litepicker.amd.js
  89. 11 0
      public/libs/litepicker/dist/litepicker.commonjs2.js
  90. 11 0
      public/libs/litepicker/dist/litepicker.js
  91. 11 0
      public/libs/litepicker/dist/litepicker.umd.js
  92. 11 0
      public/libs/litepicker/dist/nocss/litepicker.amd.js
  93. 11 0
      public/libs/litepicker/dist/nocss/litepicker.commonjs2.js
  94. 11 0
      public/libs/litepicker/dist/nocss/litepicker.js
  95. 11 0
      public/libs/litepicker/dist/nocss/litepicker.umd.js
  96. 10 0
      public/libs/litepicker/dist/nocss/plugins/keyboardnav.js
  97. 10 0
      public/libs/litepicker/dist/nocss/plugins/mobilefriendly.js
  98. 10 0
      public/libs/litepicker/dist/nocss/plugins/multiselect.js
  99. 10 0
      public/libs/litepicker/dist/nocss/plugins/ranges.js
  100. 10 0
      public/libs/litepicker/dist/plugins/keyboardnav.js

+ 31 - 49
controllers/account.js

@@ -1,54 +1,36 @@
-import { User } from "../database/models.js";
-
-const no_auth = process.env.NO_AUTH || false;
-
-export const Account = async (req, res) => {
-    
-    if (no_auth && req.hostname == 'localhost') { 
-        res.render("account", {
-            first_name: 'Localhost',
-            last_name: 'Localhost',
-            username: 'Localhost',
-            id: 0,
-            email: 'admin@localhost',
-            role: 'admin',
-            avatar: 'L',
-            alert: '',
-            link1: '',
-            link2: '',
-            link3: '',
-            link4: '',
-            link5: '',
-            link6: '',
-            link7: '',
-            link8: '',
-            link9: '',
-
-        });
-        return;
-    }
-    
-    let user = await User.findOne({ where: { userID: req.session.userID }});
-
-    res.render("account", {
-        first_name: user.name,
-        last_name: user.name,
+import { User, ServerSettings } from '../database/config.js';
+import { Alert, getLanguage, Navbar } from '../utils/system.js';
+
+export const Account = async function(req,res){
+
+    let container_links = await ServerSettings.findOne({ where: {key: 'container_links'}});
+    let user_registration = await ServerSettings.findOne({ where: {key: 'user_registration'}});
+
+
+    let user = await User.findOne({ where: {userID: req.session.userID}});
+
+    res.render("account",{ 
+        alert: '',
+        name: user.name,
         username: req.session.username,
-        id: user.id,
         email: user.email,
-        role: user.role,
-        avatar: req.session.username.charAt(0).toUpperCase(),
-        alert: '',
-        link1: '',
-        link2: '',
-        link3: '',
-        link4: '',
-        link5: '',
-        link6: '',
-        link7: '',
-        link8: '',
-        link9: '',
+        avatar: user.avatar,
+        role: req.session.role,
+        navbar: await Navbar(req),
     });
+}
 
 
-}
+
+export const submitAccount = async function(req,res){
+
+    console.log(req.body);
+
+    res.render("account",{
+        alert: '',
+        username: req.session.username,
+        role: req.session.role,
+        navbar: await Navbar(req),
+    });
+
+}

+ 47 - 583
controllers/apps.js

@@ -1,605 +1,69 @@
 import { readFileSync, readdirSync, renameSync, mkdirSync, unlinkSync, existsSync } from 'fs';
-import { parse } from 'yaml';
-import multer from 'multer';
-import AdmZip from 'adm-zip';
+import { Alert, getLanguage, Navbar } from '../utils/system.js';
 
-const upload = multer({storage: multer.diskStorage({
-  destination: function (req, file, cb) { cb(null, 'templates/tmp/') },
-  filename: function (req, file, cb) { cb(null, file.originalname) },
-})});
+export const Apps = async function(req,res){
 
-let alert = '';
-let templates_global = '';
-let json_templates = '';
-let remove_button = '';
+    let { page, template } = req.params;
 
-export const Apps = async (req, res) => {
-  
-  let page = Number(req.params.page) || 1;
-  let template_param = req.params.template || 'default';
+    let file = '';
+    let templates = [];
 
-  if ((template_param != 'default') && (template_param != 'compose')) {
-    remove_button = `<a href="/remove_template/${template_param}" class="btn" hx-confirm="Are you sure you want to remove this template?">Remove</a>`;
-  } else {
-    remove_button = '';
-  }
-
-  json_templates = '';
-  let json_files = readdirSync('templates/json/');
-  for (let i = 0; i < json_files.length; i++) {
-    if (json_files[i] != 'default.json') {
-      let filename = json_files[i].split('.')[0];
-      let link = `<li><a class="dropdown-item" href="/apps/1/${filename}">${filename}</a></li>`
-      json_templates += link;
-    }
-  }
-
-  let apps_list = '';
-  let app_count = '';
-  
-  let list_start = (page - 1) * 28;
-  let list_end = (page * 28);
-  let last_page = '';
-
-  let pages = `<li class="page-item"><a class="page-link" href="/apps/1/${template_param}">1</a></li>
-                <li class="page-item"><a class="page-link" href="/apps/2/${template_param}">2</a></li>
-                <li class="page-item"><a class="page-link" href="/apps/3/${template_param}">3</a></li>
-                <li class="page-item"><a class="page-link" href="/apps/4/${template_param}">4</a></li>
-                <li class="page-item"><a class="page-link" href="/apps/5/${template_param}">5</a></li>`
-
-
-  let prev = '/apps/' + (page - 1) + '/' + template_param;
-  let next = '/apps/' + (page + 1) + '/' + template_param;
-  if (page == 1) { prev = '/apps/' + (page) + '/' + template_param; }
-  if (page == last_page) { next = '/apps/' + (page) + '/' + template_param;}
-
-
-  if (template_param == 'compose') {
-    let compose_files = readdirSync('templates/compose/');
+    if (!page) { page = 1; }
+    if (!template) { template = 'default'; }
     
-    app_count = compose_files.length;
-    last_page = Math.ceil(compose_files.length/28);
-
-    compose_files.forEach(file => {
-      if (file == '.gitignore') { return; }
-
-      let compose = readFileSync(`templates/compose/${file}/compose.yaml`, 'utf8');
-      let compose_data = parse(compose);
-      let service_name = Object.keys(compose_data.services)
-      let container = compose_data.services[service_name].container_name;
-      let image = compose_data.services[service_name].image;
-
-      let appCard = readFileSync('./views/partials/appCard.html', 'utf8');
-      appCard = appCard.replace(/AppName/g, service_name);
-      appCard = appCard.replace(/AppShortName/g, service_name);
-      appCard = appCard.replace(/AppDesc/g, 'Compose File');
-      appCard = appCard.replace(/AppLogo/g, `https://raw.githubusercontent.com/lllllllillllllillll/DweebUI-Icons/main/${service_name}.png`);
-      appCard = appCard.replace(/AppCategories/g, '<span class="badge bg-orange-lt">Compose</span> ');
-      appCard = appCard.replace(/AppType/g, 'compose');
-      apps_list += appCard;
-    });
-  } else {
-
-      let template_file = readFileSync(`./templates/json/${template_param}.json`);
-      let templates = JSON.parse(template_file).templates;
-      templates = templates.sort((a, b) => { if (a.name < b.name) { return -1; } });
-      app_count = templates.length; 
-
-      templates_global = templates;
-
-      apps_list = '';
-      for (let i = list_start; i < list_end && i < templates.length; i++) {
-          let appCard = readFileSync('./views/partials/appCard.html', 'utf8');
-          let name = templates[i].name || templates[i].title.toLowerCase();
-          let title = templates[i].title || templates[i].name;
-          let desc = templates[i].description.slice(0, 60) + "...";
-          let description = templates[i].description.replaceAll(". ", ".\n") || "no description available";
-          let note = templates[i].note ? templates[i].note.replaceAll(". ", ".\n") : "no notes available";
-          let image = templates[i].image;
-          let logo = templates[i].logo;
-          let categories = '';
-          // set data.catagories to 'other' if data.catagories is empty or undefined
-          if (templates[i].categories == null || templates[i].categories == undefined || templates[i].categories == '') {
-              templates[i].categories = ['Other'];
-          }
-          // loop through the categories and add the badge to the card
-          for (let j = 0; j < templates[i].categories.length; j++) {
-            categories += CatagoryColor(templates[i].categories[j]);
-          }
-          appCard = appCard.replace(/AppName/g, name);
-          appCard = appCard.replace(/AppTitle/g, title);
-          appCard = appCard.replace(/AppShortName/g, name);
-          appCard = appCard.replace(/AppDesc/g, desc);
-          appCard = appCard.replace(/AppLogo/g, logo);
-          appCard = appCard.replace(/AppCategories/g, categories);
-          appCard = appCard.replace(/AppType/g, 'json');
-          apps_list += appCard;
-      }
+    try {   // Try to read the template file
+        file = readFileSync(`./appdata/templates/${template}.json`);
+        templates = JSON.parse(file).templates;
+            // Sort the templates by name
+        templates = templates.sort((a, b) => { if (a.name < b.name) { return -1; } });
+    } 
+    catch {
+        console.log(`Template ${template} not found`);
     }
 
-  
-    
-
-
-  res.render("apps", {
-    username: req.session.username,
-    role: req.session.role,
-    avatar: req.session.username.charAt(0).toUpperCase(),
-    list_start: list_start + 1,
-    list_end: list_end,
-    app_count: app_count,
-    prev: prev,
-    next: next,
-    apps_list: apps_list,
-    alert: alert,
-    template_list: '',
-    json_templates: json_templates,
-    pages: pages,
-    remove_button: remove_button,
-    link1: '',
-    link2: '',
-    link3: '',
-    link4: '',
-    link5: '',
-    link6: '',
-    link7: '',
-    link8: '',
-    link9: '',
-  });
-  alert = '';
-}
-
-export const removeTemplate = async (req, res) => {
-  let template = req.params.template;
-  unlinkSync(`templates/json/${template}.json`);
-  res.redirect('/apps');
-}
-
-
-export const appSearch = async (req, res) => {
-
-  let search = req.body.search;
-
-  let page = Number(req.params.page) || 1;
-
-  let template_param = req.params.template || 'default';
-
-  let template_file = readFileSync(`./templates/json/${template_param}.json`);
+    let apps_list = '';
 
-  let templates = JSON.parse(template_file).templates;
-
-  templates = templates.sort((a, b) => {
-      if (a.name < b.name) { return -1; }
-  });
-
-  let pages = `<li class="page-item"><a class="page-link" href="/apps/1/${template_param}">1</a></li>
-  <li class="page-item"><a class="page-link" href="/apps/2/${template_param}">2</a></li>
-  <li class="page-item"><a class="page-link" href="/apps/3/${template_param}">3</a></li>
-  <li class="page-item"><a class="page-link" href="/apps/4/${template_param}">4</a></li>
-  <li class="page-item"><a class="page-link" href="/apps/5/${template_param}">5</a></li>`
-
-  
-  let list_start = (page-1)*28;
-  let list_end = (page*28);
-  let last_page = Math.ceil(templates.length/28);
-  let prev = '/apps/' + (page-1);
-  let next = '/apps/' + (page+1);
-  if (page == 1) { prev = '/apps/' + (page); }
-  if (page == last_page) { next = '/apps/' + (page); }
-
-
-  let apps_list = '';
-  let results = [];
-  let [cat_1, cat_2, cat_3] = ['','',''];
-
-  function searchTemplates(terms) {
-    terms = terms.toLowerCase();
     for (let i = 0; i < templates.length; i++) {
-      if (templates[i].categories) {
-        if (templates[i].categories[0]) {
-          cat_1 = (templates[i].categories[0]).toLowerCase();
-        }
-        if (templates[i].categories[1]) {
-          cat_2 = (templates[i].categories[1]).toLowerCase();
-        }
-        if (templates[i].categories[2]) {
-          cat_3 = (templates[i].categories[2]).toLowerCase();
-        }
-      }
-      if ((templates[i].description.includes(terms)) || (templates[i].name.includes(terms)) || (templates[i].title.includes(terms)) || (cat_1.includes(terms)) || (cat_2.includes(terms)) || (cat_3.includes(terms))){
-          results.push(templates[i]);
-      }
-    }
-  }
-  searchTemplates(search);
-
-  for (let i = 0; i < results.length; i++) {
-    let appCard = readFileSync('./views/partials/appCard.html', 'utf8');
-    let name = results[i].name || results[i].title.toLowerCase();
-    let desc = results[i].description.slice(0, 60) + "...";
-    let description = results[i].description.replaceAll(". ", ".\n") || "no description available";
-    let note = results[i].note ? results[i].note.replaceAll(". ", ".\n") : "no notes available";
-    let image = results[i].image;
-    let logo = results[i].logo;let categories = '';
-    // set data.catagories to 'other' if data.catagories is empty or undefined
-    if (results[i].categories == null || results[i].categories == undefined || results[i].categories == '') {
-      results[i].categories = ['Other'];
-    }
-    // loop through the categories and add the badge to the card
-    for (let j = 0; j < results[i].categories.length; j++) {
-      categories += CatagoryColor(results[i].categories[j]);
+        let app_card = readFileSync('./views/partials/app_card.html', 'utf8');
+        app_card = app_card.replace(/AppShortName/g, templates[i].name);
+        app_card = app_card.replace(/AppIcon/g, templates[i].logo);
+        apps_list += app_card;
     }
-    appCard = appCard.replace(/AppName/g, name);
-    appCard = appCard.replace(/AppShortName/g, name);
-    appCard = appCard.replace(/AppDesc/g, desc);
-    appCard = appCard.replace(/AppLogo/g, logo);
-    appCard = appCard.replace(/AppCategories/g, categories);
-    appCard = appCard.replace(/AppType/g, 'json');
 
-    apps_list += appCard;
-  }
-  res.render("apps", {
-      username: req.session.username,
-      role: req.session.role,
-      avatar: req.session.username.charAt(0).toUpperCase(),
-      list_start: list_start + 1,
-      list_end: list_end,
-      app_count: results.length,
-      prev: prev,
-      next: next,
-      apps_list: apps_list,
-      alert: alert,
-      template_list: '',
-      json_templates: json_templates,
-      pages: pages,
-      remove_button: remove_button,
-      link1: '',
-      link2: '',
-      link3: '',
-      link4: '',
-      link5: '',
-      link6: '',
-      link7: '',
-      link8: '',
-      link9: '',
-  });
-}
-
-
-function CatagoryColor(category) {
-  switch (category) {
-    case 'Other':
-      return '<span class="badge bg-blue-lt">Other</span> ';
-    case 'Productivity':
-      return '<span class="badge bg-blue-lt">Productivity</span> ';
-    case 'Tools':
-      return '<span class="badge bg-blue-lt">Tools</span> ';
-    case 'Dashboard':
-      return '<span class="badge bg-blue-lt">Dashboard</span> ';
-    case 'Communication':
-      return '<span class="badge bg-azure-lt">Communication</span> ';
-    case 'Media':
-      return '<span class="badge bg-azure-lt">Media</span> ';
-    case 'CMS':
-      return '<span class="badge bg-azure-lt">CMS</span> ';
-    case 'Monitoring':
-      return '<span class="badge bg-indigo-lt">Monitoring</span> ';
-    case 'LDAP':
-      return '<span class="badge bg-purple-lt">LDAP</span> ';
-    case 'Arr':
-      return '<span class="badge bg-purple-lt">Arr</span> ';
-    case 'Database':
-      return '<span class="badge bg-red-lt">Database</span> ';
-    case 'Paid':
-      return '<span class="badge bg-red-lt" title="This is a paid product or contains paid features.">Paid</span> ';
-    case 'Gaming':
-      return '<span class="badge bg-pink-lt">Gaming</span> ';
-    case 'Finance':
-      return '<span class="badge bg-orange-lt">Finance</span> ';
-    case 'Networking':
-      return '<span class="badge bg-yellow-lt">Networking</span> ';
-    case 'Authentication':
-      return '<span class="badge bg-lime-lt">Authentication</span> ';
-    case 'Development':
-      return '<span class="badge bg-green-lt">Development</span> ';
-    case 'Media Server':
-      return '<span class="badge bg-teal-lt">Media Server</span> ';
-    case 'Downloaders':
-      return '<span class="badge bg-cyan-lt">Downloaders</span> ';
-    default:
-      return ''; // default to other if the category is not recognized
-  }
-}
-
-export const InstallModal = async (req, res) => {
-  let input = req.header('hx-trigger-name');
-  let type = req.header('hx-trigger');
-
-  if (type == 'compose') {
-    let compose = readFileSync(`templates/compose/${input}/compose.yaml`, 'utf8');
-    let modal = readFileSync('./views/modals/compose.html', 'utf8');
-    modal = modal.replace(/AppName/g, input);
-    modal = modal.replace(/COMPOSE_CONTENT/g, compose);
-    res.send(modal);
-    return;
-  } else {
-    let result = templates_global.find(t => t.name == input);
-    let name = result.name || result.title.toLowerCase();
-    let short_name = name.slice(0, 25) + "...";
-    let desc = result.description.replaceAll(". ", ".\n") || "no description available";
-    let short_desc = desc.slice(0, 60) + "...";
-    let modal_name = name.replaceAll(" ", "-");
-    let form_id = name.replaceAll("-", "_");
-    let note = result.note ? result.note.replaceAll(". ", ".\n") : "no notes available";
-    let command = result.command ? result.command : "";
-    let command_check = command ? "checked" : "";
-    let privileged = result.privileged || "";
-    let privileged_check = privileged ? "checked" : "";
-    let repository = result.repository || "";
-    let image = result.image || "";
-    let net_host, net_bridge, net_docker = '';
-    let net_name = 'AppBridge';
-    let restart_policy = result.restart_policy || 'unless-stopped';
-    
-    switch (result.network) {
-      case 'host':
-        net_host = 'checked';
-        break;
-      case 'bridge':
-        net_bridge = 'checked';
-        net_name = result.network;
-        break;
-      default:
-        net_docker = 'checked';
-    }
-
-    if (repository != "") {
-      image = (`${repository.url}/raw/master/${repository.stackfile}`);
-    }
-
-    let [ports_data, volumes_data, env_data, label_data] = [[], [], [], []];
-
-    for (let i = 0; i < 12; i++) {
-      
-      // Get port details
-      try {
-        let ports = result.ports[i];
-        let port_check = ports ? "checked" : "";
-        let port_external = ports.split(":")[0] ? ports.split(":")[0] : ports.split("/")[0];
-        let port_internal = ports.split(":")[1] ? ports.split(":")[1].split("/")[0] : ports.split("/")[0];
-        let port_protocol = ports.split("/")[1] ? ports.split("/")[1] : "";
-
-        // remove /tcp or /udp from port_external if it exists
-        if (port_external.includes("/")) {
-          port_external = port_external.split("/")[0];
-        }
-        
-        ports_data.push({
-          check: port_check,
-          external: port_external,
-          internal: port_internal,
-          protocol: port_protocol
-        });
-      } catch {
-          ports_data.push({
-            check: "",
-            external: "",
-            internal: "",
-            protocol: ""
-          });
-      }
-
-      // Get volume details
-      try {
-        let volumes = result.volumes[i];
-        let volume_check = volumes ? "checked" : "";
-        let volume_bind = volumes.bind ? volumes.bind : "";
-        let volume_container = volumes.container ? volumes.container.split(":")[0] : "";
-        let volume_readwrite = "rw";
-
-        if (volumes.readonly == true) {
-          volume_readwrite = "ro";
-        }
-
-        volumes_data.push({
-          check: volume_check,
-          bind: volume_bind,
-          container: volume_container,
-          readwrite: volume_readwrite
-        });
-      } catch {
-        volumes_data.push({
-          check: "",
-          bind: "",
-          container: "",
-          readwrite: ""
-        });
-      }
-
-      // Get environment details
-      try {
-        let env = result.env[i];
-        let env_check = "";
-        let env_default = env.default ? env.default : "";
-        if (env.set) { env_default = env.set;}
-        let env_description = env.description ? env.description : "";
-        let env_label = env.label ? env.label : "";
-        let env_name = env.name ? env.name : "";
-
-        env_data.push({
-          check: env_check,
-          default: env_default,
-          description: env_description,
-          label: env_label,
-          name: env_name
-        });
-      } catch {
-        env_data.push({
-          check: "",
-          default: "",
-          description: "",
-          label: "",
-          name: ""
-        });
-      }
-
-      // Get label details
-      try {
-        let label = result.labels[i];
-        let label_check = "";
-        let label_name = label.name ? label.name : "";
-        let label_value = label.value ? label.value : "";
-
-        label_data.push({
-          check: label_check,
-          name: label_name,
-          value: label_value
-        });
-      } catch {
-        label_data.push({
-          check: "",
-          name: "",
-          value: ""
-        });
-      }
-
-    }
-    
-    let modal = readFileSync('./views/modals/json.html', 'utf8');
-    modal = modal.replace(/AppName/g, name);
-    modal = modal.replace(/AppNote/g, note);
-    modal = modal.replace(/AppImage/g, image);
-    modal = modal.replace(/RestartPolicy/g, restart_policy);
-    modal = modal.replace(/NetHost/g, net_host);
-    modal = modal.replace(/NetBridge/g, net_bridge);
-    modal = modal.replace(/NetDocker/g, net_docker);
-    modal = modal.replace(/NetName/g, net_name);
-    modal = modal.replace(/ModalName/g, modal_name);
-    modal = modal.replace(/FormId/g, form_id);
-    modal = modal.replace(/CommandCheck/g, command_check);
-    modal = modal.replace(/CommandValue/g, command);
-    modal = modal.replace(/PrivilegedCheck/g, privileged_check);
-
-
-    for (let i = 0; i < 12; i++) {
-      modal = modal.replaceAll(`Port${i}Check`, ports_data[i].check);
-      modal = modal.replaceAll(`Port${i}External`, ports_data[i].external);
-      modal = modal.replaceAll(`Port${i}Internal`, ports_data[i].internal);
-      modal = modal.replaceAll(`Port${i}Protocol`, ports_data[i].protocol);
-
-      modal = modal.replaceAll(`Volume${i}Check`, volumes_data[i].check);
-      modal = modal.replaceAll(`Volume${i}Bind`, volumes_data[i].bind);
-      modal = modal.replaceAll(`Volume${i}Container`, volumes_data[i].container);
-      modal = modal.replaceAll(`Volume${i}RW`, volumes_data[i].readwrite);
-      
-      modal = modal.replaceAll(`Env${i}Check`, env_data[i].check);
-      modal = modal.replaceAll(`Env${i}Default`, env_data[i].default);
-      modal = modal.replaceAll(`Env${i}Description`, env_data[i].description);
-      modal = modal.replaceAll(`Env${i}Label`, env_data[i].label);
-      modal = modal.replaceAll(`Env${i}Name`, env_data[i].name);
-
-      modal = modal.replaceAll(`Label${i}Check`, label_data[i].check);
-      modal = modal.replaceAll(`Label${i}Name`, label_data[i].name);
-      modal = modal.replaceAll(`Label${i}Value`, label_data[i].value);
-    }
-  res.send(modal);
-  }
+    let app_count = `1 - 28 of ${templates.length} Apps`;
+
+    res.render("apps",{ 
+        alert: '',
+        username: req.session.username,
+        role: req.session.role,
+        app_count: app_count,
+        remove_button: '',
+        json_templates: '',
+        apps_list: apps_list,
+        prev: '',
+        next: '',
+        pages: '',
+        navbar: await Navbar(req),
+    });
 }
 
 
-export const LearnMore = async (req, res) => {
-  let name = req.header('hx-trigger-name');
-  let id = req.header('hx-trigger');
-
-  if (id == 'compose') {
-    let modal = readFileSync('./views/modals/learnmore.html', 'utf8');
-    modal = modal.replace(/AppName/g, name);
-    modal = modal.replace(/AppDesc/g, 'Compose File');
-    res.send(modal);
-    return;
-  }
-  
-  let result = templates_global.find(t => t.name == name);
-  
-  let modal = readFileSync('./views/modals/learnmore.html', 'utf8');
-  modal = modal.replace(/AppName/g, result.title);
-  modal = modal.replace(/AppDesc/g, result.description);
-
-  res.send(modal);
-}
 
+export const submitApps = async function(req,res){
 
-export const ImportModal = async (req, res) => {
-  let modal = readFileSync('./views/modals/import.html', 'utf8');
-  res.send(modal);
-}
+    // console.log(req.body);
 
+    let trigger_name = req.header('hx-trigger-name');
+    let trigger_id = req.header('hx-trigger');
 
-export const Upload = (req, res) => {
-  upload.array('files', 10)(req, res, () => {
+    console.log(`trigger_name: ${trigger_name} - trigger_id: ${trigger_id}`);
 
-    alert = `<div class="alert alert-success alert-dismissible mb-0 py-2" role="alert">
-              <div class="d-flex">
-                <div><svg xmlns="http://www.w3.org/2000/svg" class="icon alert-icon" width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"></path><path d="M5 12l5 5l10 -10"></path></svg> </div>
-                <div>Template(s) Uploaded!</div>
-              </div>
-              <a class="btn-close" data-bs-dismiss="alert" aria-label="close" style="padding-top: 0.5rem;"></a>
-            </div>`;
 
-            
-    let exists_alert = `<div class="alert alert-danger alert-dismissible mb-0 py-2" role="alert">
-              <div class="d-flex">
-              <div><svg xmlns="http://www.w3.org/2000/svg" class="icon alert-icon" width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"></path><path d="M5 12l5 5l10 -10"></path></svg> </div>
-              <div>Template already exists</div>
-            </div>
-            <a class="btn-close" data-bs-dismiss="alert" aria-label="close" style="padding-top: 0.5rem;"></a>
-          </div>`;
-    
-    let files = readdirSync('templates/tmp/');
+    res.render("apps",{
+        alert: '',
+        username: req.session.username,
+        role: req.session.role,
+        navbar: await Navbar(req),
+    });
 
-    for (let i = 0; i < files.length; i++) {
-      
-      if (files[i].endsWith('.zip')) {
-        let zip = new AdmZip(`templates/tmp/${files[i]}`);
-        zip.extractAllTo('templates/compose', true);
-        unlinkSync(`templates/tmp/${files[i]}`);
-      } else if (files[i].endsWith('.json')) {
-        if (existsSync(`templates/json/${files[i]}`)) {
-          unlinkSync(`templates/tmp/${files[i]}`);
-          alert = exists_alert;
-          res.redirect('/apps');
-          return;
-        }
-        renameSync(`templates/tmp/${files[i]}`, `templates/json/${files[i]}`);
-      } else if (files[i].endsWith('.yml')) {
-        let compose = readFileSync(`templates/tmp/${files[i]}`, 'utf8');
-        let compose_data = parse(compose);
-        let service_name = Object.keys(compose_data.services);
-        if (existsSync(`templates/compose/${service_name}`)) {
-          unlinkSync(`templates/tmp/${files[i]}`);
-          alert = exists_alert;
-          res.redirect('/apps');
-          return;
-        }
-        mkdirSync(`templates/compose/${service_name}`);
-        renameSync(`templates/tmp/${files[i]}`, `templates/compose/${service_name}/compose.yaml`);
-      } else if (files[i].endsWith('.yaml')) {
-        let compose = readFileSync(`templates/tmp/${files[i]}`, 'utf8');
-        let compose_data = parse(compose);
-        let service_name = Object.keys(compose_data.services);
-        if (existsSync(`templates/compose/${service_name}`)) {
-          unlinkSync(`templates/tmp/${files[i]}`);
-          alert = exists_alert;
-          res.redirect('/apps');
-          return;
-        }
-        mkdirSync(`templates/compose/${service_name}`);
-        renameSync(`templates/tmp/${files[i]}`, `templates/compose/${service_name}/compose.yaml`);
-      } else {
-        // unsupported file type
-        unlinkSync(`templates/tmp/${files[i]}`);
-      }
-    }   
-    res.redirect('/apps');
-  });
-};
+}

+ 56 - 445
controllers/dashboard.js

@@ -1,348 +1,74 @@
-import { Readable } from 'stream';
+import { currentLoad, mem, networkStats, fsSize } from 'systeminformation';
+import { containerList, containerInspect } from '../utils/docker.js';
 import { readFileSync } from 'fs';
-import { currentLoad, mem, networkStats, fsSize, dockerContainerStats } from 'systeminformation';
-import { Permission, User, ServerSettings } from '../database/models.js';
-import { Op } from 'sequelize';
-import { docker, containerList, containerInspect } from '../utils/docker.js';
+import { User } from '../database/config.js';
+import { Alert, getLanguage, Navbar } from '../utils/system.js';
 
-let [ hidden, alert, newCards, stats ] = [ '', '', '', {} ];
-let logString = '';
+export const Dashboard = async function(req,res){
 
+    let container_list = '';
 
-export const Dashboard = async (req, res) => {
-    const { host } = req.params;
-    let { link1, link2, link3, link4, link5, link6, link7, link8, link9 } = ['', '', '', '', '', '', '', '', ''];
-    // if (host) { console.log(`Viewing Host: ${host}`); } else { console.log('Viewing Host: 1'); }
+    let containers = await containerList();
+    for (let container of containers) {
+        let details = await containerInspect(container.containerID);
+        let container_card = readFileSync('./views/partials/container_card.html', 'utf8');
 
-    res.render("dashboard", {
-        username: req.session.username,
-        avatar: req.session.username.charAt(0).toUpperCase(),
-        role: req.session.role,
-        alert: req.session.alert,
-        link1: link1,
-        link2: link2,
-        link3: link3,
-        link4: link4,
-        link5: link5,
-        link6: '',
-        link7: '',
-        link8: '',
-        link9: '',
-    });
-}
-
-
-export const DashboardAction = async (req, res) => {
-    let name = req.header('hx-trigger-name');
-    let value = req.header('hx-trigger');
-    const { action } = req.params;
-    let modal = '';
-    console.log(`Action: ${action} Name: ${name} Value: ${value}`);
-
-    if (req.body.search) { 
-        console.log(req.body.search);
-        res.send('search');
-        return;
-    }
-
-    if (action == 'get_containers') {
-        res.send(newCards);
-        newCards = '';
-        return;
-    }
-    
-    // Creates the permissions modal 
-    if (action == 'permissions') {
-        // To capitalize the title
-        let title = name.charAt(0).toUpperCase() + name.slice(1);
-        // Empty the permissions list
-        let permissions_list = '';
-        // Get the container ID
-        let container = docker.getContainer(name);
-        let containerInfo = await container.inspect();
-        let container_id = containerInfo.Id;
-        // Get the body of the permissions modal
-        let permissions_modal = readFileSync('./views/modals/permissions.html', 'utf8');
-        // Replace the title and container name in the modal
-        permissions_modal = permissions_modal.replace(/PermissionsTitle/g, title);
-        permissions_modal = permissions_modal.replace(/PermissionsContainer/g, name);
-        permissions_modal = permissions_modal.replace(/ContainerID/g, container_id);
-        // Get a list of all users
-        let users = await User.findAll({ attributes: ['username', 'userID']});
-        // Loop through each user to check what permissions they have
-        for (let i = 0; i < users.length; i++) {
-            // Get the user_permissions form
-            let user_permissions = readFileSync('./views/partials/user_permissions.html', 'utf8');
-            // Check if the user has any permissions for the container
-            let exists = await Permission.findOne({ where: { containerID: container_id, userID: users[i].userID }});
-            // Create an entry if one doesn't exist
-            if (!exists) { const newPermission = await Permission.create({ containerName: name, containerID: container_id, username: users[i].username, userID: users[i].userID }); }
-            // Get the permissions for the user
-            let permissions = await Permission.findOne({ where: { containerID: container_id, userID: users[i].userID }});
-            // Fill in the form values
-            if (permissions.uninstall == true) { user_permissions = user_permissions.replace(/data-UninstallCheck/g, 'checked'); }
-            if (permissions.edit == true) { user_permissions = user_permissions.replace(/data-EditCheck/g, 'checked'); }
-            if (permissions.upgrade == true) { user_permissions = user_permissions.replace(/data-UpgradeCheck/g, 'checked'); }
-            if (permissions.start == true) { user_permissions = user_permissions.replace(/data-StartCheck/g, 'checked'); }
-            if (permissions.stop == true) { user_permissions = user_permissions.replace(/data-StopCheck/g, 'checked'); }
-            if (permissions.pause == true) { user_permissions = user_permissions.replace(/data-PauseCheck/g, 'checked'); }
-            if (permissions.restart == true) { user_permissions = user_permissions.replace(/data-RestartCheck/g, 'checked'); }
-            if (permissions.logs == true) { user_permissions = user_permissions.replace(/data-LogsCheck/g, 'checked'); }
-            if (permissions.view == true) { user_permissions = user_permissions.replace(/data-ViewCheck/g, 'checked'); }
-            user_permissions = user_permissions.replace(/EntryNumber/g, i);
-            user_permissions = user_permissions.replace(/EntryNumber/g, i);
-            user_permissions = user_permissions.replace(/EntryNumber/g, i);
-            user_permissions = user_permissions.replace(/PermissionsUsername/g, users[i].username);
-            user_permissions = user_permissions.replace(/PermissionsUsername/g, users[i].username);
-            user_permissions = user_permissions.replace(/PermissionsUsername/g, users[i].username);
-            user_permissions = user_permissions.replace(/PermissionsContainer/g, name);
-            user_permissions = user_permissions.replace(/PermissionsContainer/g, name);
-            user_permissions = user_permissions.replace(/PermissionsContainer/g, name);
-            user_permissions = user_permissions.replace(/PermissionsUserID/g, users[i].userID);
-            user_permissions = user_permissions.replace(/PermissionsID/g, container_id);
-            // Add the user entry to the permissions list
-            permissions_list += user_permissions;
+        if (details.name.length > 17) {
+            details.name = details.name.substring(0, 17) + '...';
         }
-        // Insert the user list into the permissions modal
-        permissions_modal = permissions_modal.replace(/PermissionsList/g, permissions_list);
-        // Send the permissions modal
-        res.send(permissions_modal);
-        return;
-    }
 
+        // Capitalize the first letter of the name
+        details.name = details.name.charAt(0).toUpperCase() + details.name.slice(1);
+
+
+        let state = details.state;
+        let state_color = '';
+
+        switch (state) {
+            case 'running':
+                state_color = 'green';
+                break;
+            case 'exited':
+                state = 'stopped';
+                state_color = 'red';
+                break;
+            case 'paused':
+                state_color = 'orange';
+                break;
+            case 'installing':
+                state_color = 'blue';
+                break;
+        }
 
-    switch (action) {
-        case 'uninstall':
-            modal = readFileSync('./views/modals/uninstall.html', 'utf8');
-            modal = modal.replace(/AppName/g, name);
-            res.send(modal);
-            return;
-        case 'details':
-            modal = readFileSync('./views/modals/details.html', 'utf8');
-            let details = await containerInfo(name);
-            modal = modal.replace(/AppName/g, details.name);
-            modal = modal.replace(/AppImage/g, details.image);
-            for (let i = 0; i <= 6; i++) {
-                modal = modal.replaceAll(`Port${i}Check`, details.ports[i]?.check || '');
-                modal = modal.replaceAll(`Port${i}External`, details.ports[i]?.external || '');
-                modal = modal.replaceAll(`Port${i}Internal`, details.ports[i]?.internal || '');
-                modal = modal.replaceAll(`Port${i}Protocol`, details.ports[i]?.protocol || '');
-            }
-            for (let i = 0; i <= 6; i++) {
-                modal = modal.replaceAll(`Vol${i}Source`, details.volumes[i]?.Source || '');
-                modal = modal.replaceAll(`Vol${i}Destination`, details.volumes[i]?.Destination || '');
-                modal = modal.replaceAll(`Vol${i}RW`, details.volumes[i]?.RW || '');
-            }
-            for (let i = 0; i <= 19; i++) {
-                modal = modal.replaceAll(`Label${i}Key`, Object.keys(details.labels)[i] || '');
-                modal = modal.replaceAll(`Label${i}Value`, Object.values(details.labels)[i] || '');
-            }
-            // console.log(details.env);
-            for (let i = 0; i <= 19; i++) {
-                modal = modal.replaceAll(`Env${i}Key`, details.env[i]?.split('=')[0] || '');
-                modal = modal.replaceAll(`Env${i}Value`, details.env[i]?.split('=')[1] || '');
-            }
-            res.send(modal);
-            return;
-        case 'card':
-            // Check which cards the user has permissions for
-            await userCards(req.session);
-            // Remove the container if it isn't in the user's list
-            if (!req.session.container_list.find(c => c.container === name)) {
-                res.send('');
-                return;
-            } else {
-                // Get the container information and send the updated card
-                let details = await containerInfo(value);
-                let card = await createCard(details);
-                res.send(card);
-                return;
-            }
-        case 'logs':
-            logString = '';
-            let options = { follow: false, stdout: true, stderr: false, timestamps: true };
-            console.log(`Getting logs for ${name}`);
-            docker.getContainer(name).logs(options, function (err, stream) {
-                if (err) { console.log(`some error getting logs`); return; }
-                const readableStream = Readable.from(stream);
-                readableStream.on('data', function (chunk) {
-                    logString += chunk.toString('utf8');
-                });
-                readableStream.on('end', function () {
-                    res.send(`<pre>${logString}</pre>`);
-                });
-            });
-            return;
-        case 'alert':
-            req.session.alert = '';
-            res.send('');
-            return;
-    }
-}
-
+        container_card = container_card.replace(/AppName/g, details.name);
+        container_card = container_card.replace(/AppService/g, details.service);
+        container_card = container_card.replace(/AppState/g, state);
+        container_card = container_card.replace(/StateColor/g, state_color);
 
+        if (details.external_port == 0 && details.internal_port == 0) {
+            container_card = container_card.replace(/AppPorts/g, ``);
+        } else {
+            container_card = container_card.replace(/AppPorts/g, `${details.external_port}:${details.internal_port}`);
+        }
 
-async function createCard (details) {
-    let { containerName, containerID, containerState } = details;
-    // console.log(`Creating card for ${containerName} ID: ${containerID} Service: ${containerService} State: ${containerState}`);
-    let container = await containerInspect(containerID);
 
-    let shortname = containerName.slice(0, 10) + '...';
-    let trigger = 'data-hx-trigger="load, every 3s"';
-    let state = containerState;
-    let state_color = '';
-    let app_icon = container.service;
-    let links = await ServerSettings.findOne({ where: {key: 'links'}});
-    if (!links) { links = { value: 'localhost' }; }
-    switch (state) {
-        case 'running':
-            state_color = 'green';
-            break;
-        case 'exited':
-            state = 'stopped';
-            state_color = 'red';
-            trigger = 'data-hx-trigger="load"';
-            break;
-        case 'paused':
-            state_color = 'orange';
-            trigger = 'data-hx-trigger="load"';
-            break;
-        case 'installing':
-            state_color = 'blue';
-            trigger = 'data-hx-trigger="load"';
-            break;
+        container_list += container_card;
     }
-    let card  = readFileSync('./views/partials/containerFull.html', 'utf8');
-    card = card.replace(/AppName/g, containerName);
-    card = card.replace(/AppID/g, containerID);
-    card = card.replace(/AppShortName/g, shortname);
-    card = card.replace(/AppIcon/g, app_icon);
-    card = card.replace(/AppState/g, state);
-    card = card.replace(/StateColor/g, state_color);
-    card = card.replace(/AppLink/g, links.value);
-    card = card.replace(/ChartName/g, containerName.replace(/-/g, ''));
-    card = card.replace(/AppNameState/g, `${containerName}State`);
-    card = card.replace(/data-trigger=""/, trigger);
-    
-    // Show nothing if there are no ports exposed.
-    if ((container.external_port == 0) && (container.internal_port == 0)) { card = card.replace(/AppPorts/g, ''); } 
-    else { card = card.replace(/AppPorts/g, `${container.external_port}:${container.internal_port}`); }
-    
-    return card;
-}
-
 
-// Creates a list of containers that the user should be able to see.
-async function updateLists(session, host) {
-    // Create an empty container list.
-    session.container_list = [];
-    // Check what containers the user has hidden.
-    let hidden = await Permission.findAll({ where: { userID: session.userID, hide: true }, attributes: ['containerID'], raw: true });
-    // Check which containers the user has permissions for.
-    let visable = await Permission.findAll({ where: { userID: session.userID, [Op.or]: [{ uninstall: true }, { edit: true }, { upgrade: true }, { start: true }, { stop: true }, { pause: true }, { restart: true }, { logs: true }, { view: true }] }, attributes: ['containerID'], raw: true});
-    let containers = await containerList(host);
-    // Loop through the list of containers.
-    for (let i = 0; i < containers.length; i++) {
-        // Get the container ID.
-        let containerID = containers[i].containerID;
-        // Skip the container if it's ID is in the hidden list.
-        if (hidden.includes(containerID)) { console.log('skipped hidden container'); continue; }
-        // If the user is admin and they don't have it hidden, add it to the list.
-        if (session.role == 'admin') { session.container_list.push({ containerName: containers[i].containerName, containerID: containerID, containerState: containers[i].containerState }); }
-        // Add the container if it's ID is in the visable list.
-        else if (visable.includes(containerID)){ session.container_list.push({ containerName: containers[i].containerName, containerID: containerID, containerState: containers[i].containerState }); }
-    }
-    // Create the lists if they don't exist.
-    if (!session.sent_list) { session.sent_list = []; }
-    if (!session.update_list) { session.update_list = []; }
-    if (!session.new_cards) { session.new_cards = []; }
 
-    session.new_cards = [];
-    session.update_list = [];
-    // Loop through the containers list
-    session.container_list.forEach(info => {
-        // Get the containerID and state
-        let { containerName, containerID, containerState } = info;
-        // Check if the containerID is in the sent list
-        let sent = session.sent_list.find(c => c.containerID === containerID);
-        // If it's not in the sent list, add it to the new cards list.
-        if (!sent) { session.new_cards.push({ containerName, containerID, containerState }); }
-        // If it is in the sent list, check if the state has changed.
-        else if (sent.containerState !== containerState) { session.update_list.push({ containerName, containerID, containerState }); }
-    });
-    // Loop through the sent list to see if any containers have been removed
-    session.sent_list.forEach(info => {
-        let { containerName, containerID, containerState } = info;
-        let exists = session.container_list.find(c => c.containerID === containerID);
-        if (!exists) { session.update_list.push({ containerName, containerID, containerState }); }
-    });
+    res.render("dashboard",{ 
+        alert: '',
+        username: req.session.username,
+        role: req.session.role,
+        container_list: container_list,
+        navbar: await Navbar(req),
+    }); 
 }
 
 
 
-// HTMX server-side events
-export const SSE = async (req, res) => {
-    let running = false;
-    let skipped_events = 0;
-    
-    // Set the headers
-    res.writeHead(200, { 'Content-Type': 'text/event-stream', 'Cache-Control': 'no-cache', 'Connection': 'keep-alive' });
-
-    // Updates req.session.container_list with the containers the user can see.
-    await newEvent();
-
-    // Event trigger with debounce
-
-    async function newEvent() {
-        if (!running) {
-            console.log('[Docker event]');
-            running = true;
-            // Update the container lists
-            await updateLists(req.session, 'host');
-            // Check if the container_list is the same as the sent_list
-            if ((JSON.stringify(req.session.container_list) != JSON.stringify(req.session.sent_list))) { 
-                console.log('Updating dashboard');
-                // New card
-                for (let i = 0; i < req.session.new_cards.length; i++) {
-                    console.log('SSE event: new card');
-                    let card = await createCard(req.session.new_cards[i]);
-                    newCards += card;
-                    req.session.alert = '';
-                }
-                // Card needs to be updated
-                for (let i = 0; i < req.session.update_list.length; i++) {
-                    console.log(`SSE event: update card ${req.session.update_list[i].containerName} ${req.session.update_list[i].containerID}`);
-                    res.write(`event: ${req.session.update_list[i].containerID}\n`);
-                    res.write(`data: 'update cards'\n\n`);
-                }
-
-                res.write(`event: update\n`);
-                res.write(`data: 'update cards'\n\n`);
-                req.session.sent_list = req.session.container_list.slice();
-            }
-
-            // res.write(`event: update\n`);
-            // res.write(`data: 'update cards'\n\n`);
-            
-            setTimeout(() => {
-                running = false;
-                // console.log(`Skipped ${skipped_events} events`);
-                skipped_events = 0;
-            }, 300);
-        } else { skipped_events++; }
-    }
-
-    // Listens for docker events
-    docker.getEvents({}, function (err, data) {
-        data.on('data', function () {
-            newEvent();
-        });
-    }); 
-};
-
-
 // Server metrics (CPU, RAM, TX, RX, DISK)
-export const Stats = async (req, res) => {
+export const ServerMetrics = async (req, res) => {
     let name = req.header('hx-trigger-name');
     let color = req.header('hx-trigger');
     let value = 0;
@@ -369,124 +95,9 @@ export const Stats = async (req, res) => {
     res.send(info);
 }
 
-// Imported by utils/install.js
-export async function addAlert (session, type, message) {
-    session.alert = `<div class="alert alert-${type} alert-dismissible py-2 mb-0" role="alert" id="alert">
-                        <div class="d-flex">
-                            <div class="spinner-border text-info nav-link">
-                                <span class="visually-hidden">Loading...</span>
-                            </div>
-                            <div>
-                              ${message}
-                            </div>
-                        </div>
-                        <button class="btn-close" data-hx-post="/dashboard/alert" data-hx-trigger="click" data-hx-target="#alert" data-hx-swap="outerHTML" style="padding-top: 0.5rem;"></button>
-                    </div>`;
-}
 
-// Update container permissions.
-export const UpdatePermissions = async (req, res) => {
-    let { userID, container, containerID, reset_permissions } = req.body;
-    let id = req.header('hx-trigger');
-    // console.log(`User: ${userID} Container: ${container} ContainerID: ${containerID} Reset: ${reset_permissions}`);
-    if (reset_permissions) {
-        await Permission.update({ uninstall: false, edit: false, upgrade: false, start: false, stop: false, pause: false, restart: false, logs: false, view: false }, { where: { containerID: containerID} });
-        return;
-    }
-    await Permission.update({ uninstall: false, edit: false, upgrade: false, start: false, stop: false, pause: false, restart: false, logs: false, view: false}, { where: { containerID: containerID, userID: userID } });
-    Object.keys(req.body).forEach(async function(key) {
-        if (key != 'user' && key != 'container') {
-            let permissions = req.body[key];
-            if (permissions.includes('uninstall')) { await Permission.update({ uninstall: true }, { where: { containerID: containerID, userID: userID}}); }  
-            if (permissions.includes('edit')) { await Permission.update({ edit: true }, { where: { containerID: containerID, userID: userID}}); }   
-            if (permissions.includes('upgrade')) { await Permission.update({ upgrade: true }, { where: { containerID: containerID, userID: userID}}); }   
-            if (permissions.includes('start')) { await Permission.update({ start: true }, { where: { containerID: containerID, userID: userID}}); }   
-            if (permissions.includes('stop')) { await Permission.update({ stop: true }, { where: { containerID: containerID, userID: userID}}); }   
-            if (permissions.includes('pause')) { await Permission.update({ pause: true }, { where: { containerID: containerID, userID: userID}}); }   
-            if (permissions.includes('restart')) { await Permission.update({ restart: true }, { where: { containerID: containerID, userID: userID}}); }   
-            if (permissions.includes('logs')) { await Permission.update({ logs: true }, { where: { containerID: containerID, userID: userID}}); }
-            if (permissions.includes('view')) { await Permission.update({ view: true }, { where: { containerID: containerID, userID: userID}}); }
-        }  
-    });
-    if (id == 'submit') {
-        res.send('<button class="btn" type="button" id="confirmed" hx-post="/updatePermissions" hx-swap="outerHTML" hx-trigger="load delay:2s">Update ✔️</button>');
-        return;
-    } else if (id == 'confirmed') {
-        res.send('<button class="btn" type="button" id="submit" hx-post="/updatePermissions" hx-vals="#updatePermissions" hx-swap="outerHTML">Update  </button>');
-        return;
-    }
-}
-
-// Container charts
-export const Chart = async (req, res) => {
-    let name = req.header('hx-trigger-name');
-    if (!stats[name]) { stats[name] = { cpuArray: Array(15).fill(0), ramArray: Array(15).fill(0) }; }
-    const info = await dockerContainerStats(name);
-    stats[name].cpuArray.push(Math.round(info[0].cpuPercent));
-    stats[name].ramArray.push(Math.round(info[0].memPercent));
-    stats[name].cpuArray = stats[name].cpuArray.slice(-15);
-    stats[name].ramArray = stats[name].ramArray.slice(-15);
-    let chart = `
-        <script>
-            ${name}chart.updateSeries([{data: [${stats[name].cpuArray}]}, {data: [${stats[name].ramArray}]}])
-        </script>`
-    res.send(chart);
-}
-
-// Container actions (start, stop, pause, restart, hide)
-export const ContainerAction = async (req, res) => {
-    // Assign values
-    let container_name = req.header('hx-trigger-name');
-    let container_id = req.header('hx-trigger');
-    let action = req.params.action;
-
-    console.log(`Container: ${container_name} ID: ${container_id} Action: ${action}`);
-
-    // Reset the view
-    if (container_id == 'reset') { 
-        console.log('Resetting view'); 
-        await Permission.update({ hide: false }, { where: { userID: req.session.userID } });
-        res.send('ok'); 
-        return;
-    }
-    // Inspect the container
-    let container = docker.getContainer(container_id);
-    let containerInfo = await container.inspect();
-    let state = containerInfo.State.Status;
-    // console.log(`Container: ${container_name} ID: ${container_id} State: ${state} Action: ${action}`);
-    // Displays container state (starting, stopping, restarting, pausing)
-    function status (state) {
-        return(`<span class="text-yellow align-items-center lh-1"><svg xmlns="http://www.w3.org/2000/svg" class="icon-tabler icon-tabler-point-filled" width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"> <path stroke="none" d="M0 0h24v24H0z" fill="none"></path> <path d="M12 7a5 5 0 1 1 -4.995 5.217l-.005 -.217l.005 -.217a5 5 0 0 1 4.995 -4.783z" stroke-width="0" fill="currentColor"></path></svg>
-                        ${state}
-                </span>`);
-    }
-    // Perform the action
-    if ((action == 'start') && (state == 'exited')) {
-        await container.start();
-        res.send(status('starting'));
-    } else if ((action == 'start') && (state == 'paused')) {
-        await container.unpause();
-        res.send(status('starting'));
-    } else if ((action == 'stop') && (state != 'exited')) {
-        await container.stop();
-        res.send(status('stopping'));
-    } else if ((action == 'pause') && (state == 'paused')) {
-        await container.unpause();
-        res.send(status('starting'));
-    }   else if ((action == 'pause') && (state == 'running')) {
-        await container.pause();
-        res.send(status('pausing'));
-    } else if (action == 'restart') {
-        await container.restart();
-        res.send(status('restarting'));
-    } else if (action == 'hide') {
-        let exists = await Permission.findOne({ where: { containerID: container_id, userID: req.session.userID }});
-        if (!exists) { const newPermission = await Permission.create({ containerName: container_name, containerID: container_id, username: req.session.username, userID: req.session.userID, hide: true }); }
-        else { exists.update({ hide: true }); }
-        // Array of hidden containers
-        hidden = await Permission.findAll({ where: { userID: req.session.userID, hide: true}}, { attributes: ['containerID'] });
-        // Map the container IDs
-        hidden = hidden.map((container) => container.containerID);
-        res.send("ok");
-    }
+export const submitDashboard = async function(req,res){
+    console.log(req.body);
+    res.send('ok');
+    return;
 }

+ 43 - 69
controllers/images.js

@@ -1,68 +1,32 @@
-import { docker } from '../utils/docker.js';
-import { addAlert } from './dashboard.js';
+import { Alert, getLanguage, Navbar } from '../utils/system.js';
+import { containerList, imageList } from '../utils/docker.js';
 
-export const Images = async function(req, res) {
+export const Images = async function(req,res){
 
-    let action = req.params.action;
-
-    console.log(req.params.host);
-
-    if (action == "remove") {
-        let images = req.body.select;
-
-        if (typeof(images) == 'string') {
-            images = [images];
-        }
-
-        for (let i = 0; i < images.length; i++) {
-            if (images[i] != 'on') {
-                try {
-                    console.log(`Removing image: ${images[i]}`);
-                    let image = docker.getImage(images[i]);
-                    await image.remove();
-                } catch (error) {
-                    console.log(`Unable to remove image: ${images[i]}`);
-                }
-            }
-        }
-        res.redirect("/images");
-        return;
-    } else if (action == "add") {
-        let image = req.body.image;
-        let tag = req.body.tag || 'latest';
-
-        try {
-            console.log(`Pulling image: ${image}:${tag}`);
-            await docker.pull(`${image}:${tag}`);
-        } catch (error) {
-            console.log(`Unable to pull image: ${image}:${tag}`);
-        }
-        res.redirect("/images");
-        return;
-    }
-
-    let containers = await docker.listContainers({ all: true });
     let container_images = [];
+
+    let containers = await containerList();
     for (let i = 0; i < containers.length; i++) {
         container_images.push(containers[i].Image);
     }
 
-    let images = await docker.listImages({ all: true });
+    let images = await imageList();
 
+    // Top of the table
     let image_list = `
-    <thead>
-        <tr>
-            <th class="w-1"><input class="form-check-input m-0 align-middle" name="select" type="checkbox" aria-label="Select all" onclick="selectAll()"></th>
-            <th><label class="table-sort" data-sort="sort-name">Name</label></th>
-            <th><label class="table-sort" data-sort="sort-type">Tag</label></th>
-            <th><label class="table-sort" data-sort="sort-city">ID</label></th>
-            <th><label class="table-sort" data-sort="sort-score">Status</label></th>
-            <th><label class="table-sort" data-sort="sort-date">Created</label></th>
-            <th><label class="table-sort" data-sort="sort-quantity">Size</label></th>
-            <th><label class="table-sort" data-sort="sort-progress">Action</label></th>
-        </tr>
-    </thead>
-    <tbody class="table-tbody">`
+        <thead>
+            <tr>
+                <th class="w-1"><input class="form-check-input m-0 align-middle" name="select" type="checkbox" aria-label="Select all" onclick="selectAll()"></th>
+                <th><label class="table-sort" data-sort="sort-name">Name</label></th>
+                <th><label class="table-sort" data-sort="sort-type">Tag</label></th>
+                <th><label class="table-sort" data-sort="sort-city">ID</label></th>
+                <th><label class="table-sort" data-sort="sort-score">Status</label></th>
+                <th><label class="table-sort" data-sort="sort-date">Created</label></th>
+                <th><label class="table-sort" data-sort="sort-quantity">Size</label></th>
+                <th><label class="table-sort" data-sort="sort-progress">Action</label></th>
+            </tr>
+        </thead>
+        <tbody class="table-tbody">`
 
 
     for (let i = 0; i < images.length; i++) {
@@ -101,23 +65,33 @@ export const Images = async function(req, res) {
     
     image_list += `</tbody>`
 
-    
-    res.render("images", {
+    res.render("images",{ 
+        alert: '',
         username: req.session.username,
         role: req.session.role,
-        avatar: req.session.username.charAt(0).toUpperCase(),
+        image_count: '',
         image_list: image_list,
-        image_count: images.length,
+        navbar: await Navbar(req),
+    });
+}
+
+
+
+export const submitImages = async function(req,res){
+
+    // console.log(req.body);
+
+    let trigger_name = req.header('hx-trigger-name');
+    let trigger_id = req.header('hx-trigger');
+
+    console.log(`trigger_name: ${trigger_name} - trigger_id: ${trigger_id}`);
+
+
+    res.render("images",{
         alert: '',
-        link1: '',
-        link2: '',
-        link3: '',
-        link4: '',
-        link5: '',
-        link6: '',
-        link7: '',
-        link8: '',
-        link9: '',
+        username: req.session.username,
+        role: req.session.role,
+        navbar: await Navbar(req),
     });
 
 }

+ 22 - 81
controllers/login.js

@@ -1,96 +1,37 @@
 import bcrypt from 'bcrypt';
-import { User, Syslog } from '../database/models.js';
-
-// Environment variable to disable authentication.
-const no_auth = process.env.NO_AUTH || false;
+import { User, Syslog } from '../database/config.js';
 
 
 export const Login = function(req,res){
-    if (req.session.username) { res.redirect("/dashboard"); }
-    else { res.render("login",{ "error":"", }); }
+    if (req.session.userID) { res.redirect("/dashboard"); }
+    else { res.render("login",{ 
+        "error":"", 
+    }); }
 }
 
-
-export const Logout = function(req,res){
-    req.session.destroy(() => {
-        res.redirect("/login");
-    });
-}
-
-
 export const submitLogin = async function(req,res){
+    const { password } = req.body;
+    let email = req.body.email.toLowerCase();
 
-    // Grab values from the form.
-    let { email, password } = req.body;
-
-    // Convert the email to lowercase.
-    email = email.toLowerCase();
-
-    // Create an admin session if NO_AUTH is enabled and the user is on localhost.
-    if (no_auth && req.hostname == 'localhost') { 
-        req.session.username = 'Localhost';
-        req.session.userID = '';
-        req.session.role = 'admin';
-        res.redirect("/dashboard");
-        return;
-    }
-
-    // Check that all fields are filled out.
-    if (!email || !password) {
-        res.render("login",{
-            "error":"Please fill in all fields.",
-        });
-        return;
-    }
+    let error = '';
+    if (!email || !password) { error = "Invalid credentials."; }
 
-    // Check that the user exists.
     let user = await User.findOne({ where: { email: email }});
-    if (!user) {
-        res.render("login",{
-            "error":"Invalid credentials.",
-        });
-        return;
-    }
 
-    // Check that the password is correct.
-    let password_check = await bcrypt.compare( password, user.password);
+    if (!user || !await bcrypt.compare(password, user.password)) { error = "Invalid credentials."; }
 
-    // If the password is incorrect, log the failed login attempt.
-    if (!password_check) {
-        res.render("login",{
-            "error":"Invalid credentials.",
-        });
-        const syslog = await Syslog.create({
-            user: null,
-            email: email,
-            event: "Bad Login",
-            message: "Invalid password",
-            ip: req.socket.remoteAddress
-        });
-        return;
+    if (error) { res.render("login",{ "error":error }); return; }
+    else {
+        req.session.username = user.username;
+        req.session.userID = user.userID;
+        req.session.role = user.role;
+        res.redirect("/dashboard");
     }
-
-    // Successful login. Create the user session.
-    req.session.username = user.username;
-    req.session.userID = user.userID;
-    req.session.role = user.role;
-
-    // Update the last login time.
-    let date = new Date();
-    let new_login = date.toLocaleString();
-    await User.update({ lastLogin: new_login }, { where: { userID: user.userID}});
-
-    // Create a login entry.
-    const syslog = await Syslog.create({
-        user: req.session.username,
-        email: email,
-        event: "Successful Login",
-        message: "User logged in successfully",
-        ip: req.socket.remoteAddress
-    });
-    
-    // Redirect to the dashboard.
-    res.redirect("/dashboard");
+  
 }
 
-
+export const Logout = function(req,res){
+    req.session.destroy(() => {
+        res.redirect("/login");
+    });
+}

+ 27 - 79
controllers/networks.js

@@ -1,90 +1,38 @@
-import { docker } from '../utils/docker.js';
+import { Alert, getLanguage, Navbar } from '../utils/system.js';
 
+export const Networks = async function(req,res){
+
+
+    res.render("networks",{ 
+        alert: '',
+        username: req.session.username,
+        role: req.session.role,
+        network_count: '',
+        network_list: '',
+        navbar: await Navbar(req),
+    });
+}
 
-export const Networks = async function(req, res) {
-    let container_networks = [];
-    let network_name = '';
 
-    console.log(req.params.host);
 
-    // List all containers
-    let containers = await docker.listContainers({ all: true });
-    // Loop through the containers to find out which networks are being used
-    for (let i = 0; i < containers.length; i++) {
-        // console.log(Object.keys(containers[i].NetworkSettings.Networks)[0]);
-        try { network_name += containers[i].HostConfig.NetworkMode; } catch {}
-        try { container_networks.push(containers[i].NetworkSettings.Networks[network_name].NetworkID); } catch {}
-    }
-    // List all networks
-    let networks = await docker.listNetworks({ all: true });
-    // Uses template literals to build the networks table
-    let network_list = `
-        <thead>
-            <tr>
-                <th class="w-1"><input class="form-check-input m-0 align-middle" name="select" type="checkbox" aria-label="Select all" onclick="selectAll()"></th>
-                <th><label class="table-sort" data-sort="sort-name">Name</label></th>
-                <th><label class="table-sort" data-sort="sort-city">ID</label></th>
-                <th><label class="table-sort" data-sort="sort-score">Status</label></th>
-                <th><label class="table-sort" data-sort="sort-date">Created</label></th>
-                <th><label class="table-sort" data-sort="sort-progress">Action</label></th>
-            </tr>
-        </thead>
-        <tbody class="table-tbody">`
+export const submitNetworks = async function(req,res){
 
-    for (let i = 0; i < networks.length; i++) {
-        let status = '';
-        // Check if the network is in use
-        try { if (container_networks.includes(networks[i].Id)) { status = `In use`; } } catch {}
-        // Create the row for the network entry
-        let details = `
-            <tr>
-                <td><input class="form-check-input m-0 align-middle" name="select" value="${networks[i].Id}" type="checkbox" aria-label="Select"></td>
-                <td class="sort-name">${networks[i].Name}</td>
-                <td class="sort-city">${networks[i].Id}</td>
-                <td class="sort-score text-green">${status}</td>
-                <td class="sort-date" data-date="1628122643">${networks[i].Created}</td>
-                <td class="text-end"><a class="btn" href="#">Details</a></td>
-            </tr>`
-            // Add the row to the network list
-            network_list += details;
-    }
-    network_list += `</tbody>`
+    // console.log(req.body);
 
-    res.render("networks", {
+    let trigger_name = req.header('hx-trigger-name');
+    let trigger_id = req.header('hx-trigger');
+
+    console.log(`trigger_name: ${trigger_name} - trigger_id: ${trigger_id}`);
+
+
+
+    res.render("networks",{
+        alert: '',
         username: req.session.username,
         role: req.session.role,
-        avatar: req.session.username.charAt(0).toUpperCase(),
-        network_list: network_list,
-        network_count: networks.length,
-        alert: '',
-        link1: '',
-        link2: '',
-        link3: '',
-        link4: '',
-        link5: '',
-        link6: '',
-        link7: '',
-        link8: '',
-        link9: '',
+        network_count: '',
+        network_list: '',
+        navbar: await Navbar(req),
     });
-}
 
-export const removeNetwork = async function(req, res) {
-    // Grab the list of networks
-    let networks = req.body.select;
-    // Make sure the value is an array
-    if (typeof(networks) == 'string') { networks = [networks]; }
-    // Loop through the array
-    for (let i = 0; i < networks.length; i++) {
-        if (networks[i] != 'on') {
-            try {
-                let network = docker.getNetwork(networks[i]);
-                await network.remove();
-            } 
-            catch {
-                console.log(`Unable to remove network: ${networks[i]}`);
-            }
-        }
-    }
-    res.redirect("/networks");
 }

+ 71 - 0
controllers/preferences.js

@@ -0,0 +1,71 @@
+import { ServerSettings, User } from '../database/config.js';
+import { Alert, getLanguage, Navbar, Capitalize } from '../utils/system.js';
+
+export const Preferences = async function(req,res){
+
+    let language = await getLanguage(req);
+    let Language = Capitalize(language);
+    let selected = `<option value="${language}" selected hidden>${Language}</option>`;
+
+    let user = await User.findOne({ where: { userID: req.session.userID }});
+    let preferences = JSON.parse(user.preferences);
+    let hide_profile = preferences.hide_profile;
+
+    let checked = '';
+    if (hide_profile == true) { checked = 'checked'; }
+
+    res.render("preferences",{ 
+        alert: '',
+        username: req.session.username,
+        role: req.session.role,
+        navbar: await Navbar(req),
+        selected: selected,
+        hide_profile: checked,
+
+    });
+}
+
+
+
+export const submitPreferences = async function(req,res){
+
+    let { language_input, hidden_input } = req.body;
+
+    let trigger_name = req.header('hx-trigger-name');
+    let trigger_id = req.header('hx-trigger');
+
+    // console.log(`trigger_name: ${trigger_name} - trigger_id: ${trigger_id}`);
+
+    if (hidden_input == 'on') { hidden_input = true; } else { hidden_input = false; }
+
+    let user_preferences = {
+        language: language_input,
+        hide_profile: hidden_input,
+    };
+
+    if (language_input != undefined && hidden_input != undefined) {
+        await User.update({ preferences: JSON.stringify(user_preferences) }, { where: { userID: req.session.userID }});
+    }
+
+    // [HTMX Triggered] Changes the update button.
+    if(trigger_id == 'preferences'){
+        res.send(`<button class="btn btn-success" hx-post="/preferences" hx-trigger="load delay:2s" hx-swap="outerHTML" id="submit" hx-target="#submit">Updated</button>`);
+        return;
+    } else if (trigger_id == 'submit'){
+        res.send(`<button class="btn btn-primary" id="submit" form="preferences">Update</button>`);
+        return;
+    }
+
+    let language = await getLanguage(req);
+    let Language = Capitalize(language);
+    let selected = `<option value="${language}" selected hidden>${Language}</option>`;
+
+    res.render("preferences",{
+        alert: '',
+        username: req.session.username,
+        role: req.session.role,
+        navbar: await Navbar(req),
+        selected: selected,
+    });
+
+}

+ 56 - 108
controllers/register.js

@@ -1,135 +1,83 @@
-import bcrypt from 'bcrypt';
-import { User, Syslog, Permission, ServerSettings } from '../database/models.js';
+import bcrypt from "bcrypt";
+import { Op } from "sequelize";
+import { User, ServerSettings } from "../database/config.js";
 
 
-export const Register = async function (req,res) {
+export const Register = async function(req,res){
 
     // Redirect to dashboard if user is already logged in.
-    if(req.session.user){ res.redirect("/dashboard"); return; } 
-
-    // Continue to registration page if no users have been created.
-    let users = await User.count();
-    if (users == 0) {
-        const disable_passphrase = await ServerSettings.create({ key: 'registration', value: ''});
-        res.render("register",{
-            "error": "Creating admin account. Leave passphrase blank.",
-        });
+    if (req.session.username) { res.redirect("/dashboard"); }
+
+    let secret_input = '';
+    let registration_secret = await ServerSettings.findOne({ where: { key: 'registration' }}).value;
+
+    // Input field for secret if one has been set.
+    if (registration_secret) {
+        secret_input = `<div class="mb-3"><label class="form-label">Secret</label>
+                                <div class="input-group input-group-flat">
+                                    <input type="text" class="form-control" autocomplete="off" name="secret">
+                                </div>
+                            </div>`}
+
+    // If there are no users, or a registration secret has not been set, display the registration page.
+    if ((await User.count() == 0) || (registration_secret == '')) {
+        res.render("register",{ 
+            "error": "",
+            "reg_secret": secret_input,
+        }); 
     } else {
-        // Check if registration is enabled.
-        let registration = await ServerSettings.findOne({ where: {key: 'registration'}});
-        if (registration.value == 'off') {
-            res.render("login",{
-                "error":"User registration is disabled.",
-            });
-        } else {
-            res.render("register",{
-                "error":"",
-            });
-        }
+        res.render("login", { 
+            "error": "User registration is disabled." 
+        });
     }
 }
 
+export const submitRegister = async function(req,res){
 
-export const submitRegister = async function (req,res) {
+    const { name, username, password, confirm, secret } = req.body;
+    let email = req.body.email.toLowerCase();
 
-    // Grab values from the form.
-    let { name, username, email, password1, password2, passphrase } = req.body;
+    let registration_secret = await ServerSettings.findOne({ where: { key: 'registration' }}).value;
 
-    // Convert the email to lowercase.
-    email = email.toLowerCase();
-
-    // Get the registration passphrase.
-    let registration_passphrase = await ServerSettings.findOne({ where: { key: 'registration' }});
-    registration_passphrase = registration_passphrase.value;
-
-    // Create a log entry if the form is submitted with an invalid passphrase.
-    if (passphrase != registration_passphrase) {
-        const syslog = await Syslog.create({
-            user: username,
-            email: email,
-            event: "Failed Registration",
-            message: "Invalid secret",
-            ip: req.socket.remoteAddress
-        });
-        res.render("register",{
-            "error":"Invalid passphrase",
-        });
-        return;
-    }
-
-    // Check that all fields are filled out correctly.
-    if ((!name || !username || !email || !password1 || !password2) || (password1 != password2)) {
-        res.render("register",{
-            "error":"Missing field or password mismatch.",
-        });
-        return;
-    }
+    let error = '';
+    if (!name || !username || !email || !password || !confirm) { error = "All fields are required"; } 
+    else if (password !== confirm) { error = "Passwords do not match"; }
+    else if (registration_secret && secret !== registration_secret) { error = "Invalid secret"; }
+    else if (await User.findOne({ where: { [Op.or]: [{ username: username }, { email: email }] }})) { error = "Username or email already exists"; }
 
-    // Make sure the username and email are unique.
-    let existing_username = await User.findOne({ where: {username:username}});
-    let existing_email = await User.findOne({ where: {email:email}});
-    if (existing_username || existing_email) {
-        res.render("register",{
-            "error":"Username or email already exists.",
-        });
+    if (error) {
+        res.render("register", { "error": error });
         return;
     }
 
-    // Make the user an admin and disable registration if there are no other users.
-    async function userRole () {
-        let userCount = await User.count();
-        if (userCount == 0) { 
-            await ServerSettings.update({ value: 'off' }, { where: { key: 'registration' }}); 
-            return "admin"; 
-        } else { 
-            return "user"; 
-        }
+    // Returns 'admin' if no users have been created.
+    async function Role() {
+        if (await User.count() == 0) { return "admin"; }
+        else { return "user"; }
     }
 
     // Create the user.
-    const user = await User.create({ 
+    await User.create({
         name: name,
         username: username,
         email: email,
-        password: bcrypt.hashSync(password1,10),
-        role: await userRole(),
-        group: 'all',
+        password: bcrypt.hashSync(password, 10),
+        role: await Role(),
+        preferences: JSON.stringify({ language: "english", hidden_profile: false }),
         lastLogin: new Date().toLocaleString(),
     });
 
-    // make sure the user was created and get the UUID.
-    let newUser = await User.findOne({ where: { email: email }});
-    let match = await bcrypt.compare( password1, newUser.password);
-
-    if (match) {  
-        // Create the user session.
-        req.session.username = newUser.username;
-        req.session.userID = newUser.userID;
-        req.session.role = newUser.role;
-
-        // Create an entry in the permissions table.
-        await Permission.create({ username: req.session.username, userID: req.session.userID });
-
-        // Create a log entry.
-        const syslog = await Syslog.create({
-            user: req.session.username,
-            email: email,
-            event: "Successful Registration",
-            message: "User registered successfully",
-            ip: req.socket.remoteAddress
-        });
+    // Make sure the user was created and get the UUID.
+    let user = await User.findOne({ where: { email: email }});
+    let match = await bcrypt.compare(password, user.password);
+    if (match) {
+        console.log(`User ${username} created`);
+        req.session.username = user.username;
+        req.session.userID = user.userID;
+        req.session.role = user.role;
         res.redirect("/dashboard");
     } else {
-        // Create a log entry.
-        const syslog = await Syslog.create({
-            user: req.session.username,
-            email: email,
-            event: "Failed Registration",
-            message: "User not created",
-            ip: req.socket.remoteAddress
-        });
-        res.render("register",{
-            "error":"User not created",
-        });
+        res.render("register", { "error": "Error. User not created" });
     }
-}
+}
+

+ 30 - 172
controllers/settings.js

@@ -1,192 +1,50 @@
-import { readFileSync } from 'fs';  
-import { ServerSettings } from '../database/models.js';
+import { ServerSettings } from '../database/config.js';
+import { Alert, getLanguage, Navbar } from '../utils/system.js';
 
+export const Settings = async function(req,res){
 
-export const Settings = async (req, res) => {
+    let container_links = await ServerSettings.findOne({ where: {key: 'container_links'}});
+    let user_registration = await ServerSettings.findOne({ where: {key: 'user_registration'}});
 
-    let settings = readFileSync('views/partials/settings.html', 'utf8');
 
-    let links = await ServerSettings.findOne({ where: {key: 'links'}});
-    try {
-        if (links.value != 'localhost' && links.value != '') {
-            settings = settings.replaceAll('data-LinkMode', 'checked');
-            settings = settings.replaceAll('data-LinkValue', `value="${links.value}"`);
-        }
-    } catch {
-        console.log(`Container Links: No Value Set`)
-    }
-        
-    let registration = await ServerSettings.findOne({ where: {key: 'registration'}});
-    try {
-        if (registration.value != 'off' && registration.value != '') {
-            settings = settings.replaceAll('data-UserReg', 'checked');
-            settings = settings.replaceAll('data-Passphrase', `value="${registration.value}"`);
-        }
-    } catch {
-        console.log(`User Registration: No Value Set`);
-    }
-
-    async function hostInfo(host) {
-        let info = await ServerSettings.findOne({ where: {key: host}});
-        try {
-            if (info.value != 'off' && info.value != '') {
-                let values = info.value.split(',');
-                return { tag: values[0], ip: values[1], port: values[2] };
-            }
-        } catch {
-            console.log(`${host}: No Value Set`);
-        }
-    }
-    
-    let host2 = await hostInfo('host2');
-    if (host2) {
-        settings = settings.replaceAll('data-Host2', 'checked');
-        settings = settings.replaceAll('data-Tag2', `value="${host2.tag}"`);
-        settings = settings.replaceAll('data-Ip2', `value="${host2.ip}"`);
-        settings = settings.replaceAll('data-Port2', `value="${host2.port}"`);
-    }
-    
-    let host3 = await hostInfo('host3');
-    if (host3) {
-        settings = settings.replaceAll('data-Host3', 'checked');
-        settings = settings.replaceAll('data-Tag3', `value="${host3.tag}"`);
-        settings = settings.replaceAll('data-Ip3', `value="${host3.ip}"`);
-        settings = settings.replaceAll('data-Port3', `value="${host3.port}"`);
-    }
-
-    let host4 = await hostInfo('host4');
-    if (host4) {
-        settings = settings.replaceAll('data-Host4', 'checked');
-        settings = settings.replaceAll('data-Tag4', `value="${host4.tag}"`);
-        settings = settings.replaceAll('data-Ip4', `value="${host4.ip}"`);
-        settings = settings.replaceAll('data-Port4', `value="${host4.port}"`);
-    }
-
-
-    res.render("settings", {
+    res.render("settings",{ 
+        alert: '',
         username: req.session.username,
         role: req.session.role,
-        avatar: req.session.username.charAt(0).toUpperCase(),
-        alert: '',
-        settings: settings,
-        link1: '',
-        link2: '',
-        link3: '',
-        link4: '',
-        link5: '',
-        link6: '',
-        link7: '',
-        link8: '',
-        link9: '',
+        user_registration: 'checked',
+        registration_secret: 'some-long-secret',
+        container_links: 'checked',
+        link_url: 'mydomain.com',
+        navbar: await Navbar(req),
     });
 }
 
 
-export const updateSettings = async (req, res) => {
 
-    let trigger = req.header('hx-trigger');
-    if (trigger == 'updated') {
-        let update = `<button class="btn btn-primary" id="submit" hx-trigger="click" hx-post="/settings" hx-swap="outerHTML" hx-target="#submit">
-						Update
-					</button>`
-        res.send(update);
-        return;
-    }
+export const submitSettings = async function(req,res){
 
-    // Container links
-    let { link_mode, link } = req.body;
-    if (link_mode) {
-        let exists = await ServerSettings.findOne({ where: {key: 'links'}});
-        if (exists) {
-            const setting = await ServerSettings.update({value: link}, {where: {key: 'links'}});
-        } else {
-            const newSetting = await ServerSettings.create({ key: 'links', value: link});
-        }
-        console.log('Custom links on');
-    }   else if (!link_mode) {
-        let exists = await ServerSettings.findOne({ where: {key: 'links'}});
-        if (exists) {
-            const setting = await ServerSettings.update({value: 'localhost'}, {where: {key: 'links'}});
-        }
-        console.log('Custom links off');
-    }
+    console.log(req.body);
 
-    // User registration
-    let { user_registration, passphrase} = req.body;
-    if (user_registration) {
-        let exists = await ServerSettings.findOne({ where: {key: 'registration'}});
-        if (exists) {
-            const setting = await ServerSettings.update({value: passphrase}, {where: {key: 'registration'}});
-        } else {
-            const newSetting = await ServerSettings.create({ key: 'registration', value: passphrase});
-        }
-        console.log('registration on');
-    } else if (!user_registration) {
-        let exists = await ServerSettings.findOne({ where: {key: 'registration'}});
-        if (exists) {
-            const setting = await ServerSettings.update({value: 'off'}, {where: {key: 'registration'}});
-        }
-        console.log('registration off');
-    }
+    let trigger_name = req.header('hx-trigger-name');
+    let trigger_id = req.header('hx-trigger');
 
-    // Host 2
-    let { host2, tag2, ip2, port2 } = req.body;
-    if (host2) {
-        let exists = await ServerSettings.findOne({ where: {key: 'host2'}});
-        if (exists) {
-            const setting = await ServerSettings.update({value: `${tag2},${ip2},${port2}`}, {where: {key: 'host2'}});
-        }   else {
-            const newSetting = await ServerSettings.create({ key: 'host2', value: `${tag2},${ip2},${port2}`});
-        }   
-        console.log('host2 on');
-    } else if (!host2) {
-        let exists = await ServerSettings.findOne({ where: {key: 'host2'}});
-        if (exists) {
-            const setting = await ServerSettings.update({value: 'off'}, {where: {key: 'host2'}});
-        }
-        console.log('host2 off');
-    }
+    console.log(`trigger_name: ${trigger_name} - trigger_id: ${trigger_id}`);
 
-    // Host 3
-    let { host3, tag3, ip3, port3 } = req.body;
-    if (host3) {
-        let exists = await ServerSettings.findOne({ where: {key: 'host3'}});
-        if (exists) {
-            const setting = await ServerSettings.update({value: `${tag3},${ip3},${port3}`}, {where: {key: 'host3'}});
-        }   else {
-            const newSetting = await ServerSettings.create({ key: 'host3', value: `${tag3},${ip3},${port3}`});
-        }   
-        console.log('host3 on');
-    } else if (!host3) {
-        let exists = await ServerSettings.findOne({ where: {key: 'host3'}});
-        if (exists) {
-            const setting = await ServerSettings.update({value: 'off'}, {where: {key: 'host3'}});
-        }
-        console.log('host3 off');
-    }
 
-    // Host 4
-    let { host4, tag4, ip4, port4 } = req.body;
-    if (host4) {
-        let exists = await ServerSettings.findOne({ where: {key: 'host4'}});
-        if (exists) {
-            const setting = await ServerSettings.update({value: `${tag4},${ip4},${port4}`}, {where: {key: 'host4'}});
-        } else {
-            const newSetting = await ServerSettings.create({ key: 'host4', value: `${tag4},${ip4},${port4}`});
-        }
-        console.log('host4 on');
-    } else if (!host4) {
-        let exists = await ServerSettings.findOne({ where: {key: 'host4'}});
-        if (exists) {
-            const setting = await ServerSettings.update({value: 'off'}, {where: {key: 'host4'}});
-        }
-        console.log('host4 off');
+    // [HTMX Triggered] Changes the update button.
+    if(trigger_id == 'settings'){
+        res.send(`<button class="btn btn-success" hx-post="/settings" hx-trigger="load delay:2s" hx-swap="outerHTML" id="submit" hx-target="#submit">Updated</button>`);
+        return;
+    } else if (trigger_id == 'submit'){
+        res.send(`<button class="btn btn-primary" id="submit" form="settings">Update</button>`);
+        return;
     }
 
+    res.render("settings",{
+        alert: '',
+        username: req.session.username,
+        role: req.session.role,
+        navbar: await Navbar(req),
+    });
 
-    let success = `<button class="btn btn-success" id="updated" hx-trigger="load delay:2s" hx-post="/settings" hx-swap="outerHTML" hx-target="#updated">
-					Update
-					</button>`
-
-    res.send(success);
 }

+ 0 - 34
controllers/supporters.js

@@ -1,34 +0,0 @@
-export const Supporters = async (req, res) => {
-    
-    
-
-    res.render("supporters", {
-        
-        username: req.session.username,
-        role: req.session.role,
-        avatar: req.session.username.charAt(0).toUpperCase(),
-        alert: '',
-        link1: '',
-        link2: '',
-        link3: '',
-        link4: '',
-        link5: '',
-        link6: '',
-        link7: '',
-        link8: '',
-        link9: '',
-    });
-
-
-}
-
-
-let thanks = 0;
-export const Thanks = async (req, res) => {
-    thanks++;
-    let data = thanks.toString();
-    if (thanks > 999) {
-        data = 'Did you really click 1000 times?!';
-    }
-    res.send(data);
-}

+ 25 - 37
controllers/syslogs.js

@@ -1,46 +1,34 @@
-import { Syslog } from '../database/models.js';
+import { ServerSettings } from '../database/config.js';
+import { Alert, getLanguage, Navbar } from '../utils/system.js';
 
-export const Syslogs = async function(req, res) {
+export const Syslogs = async function(req,res){
 
-    let logs = '';
 
-    const syslogs = await Syslog.findAll({
-        order: [
-            ['id', 'DESC']
-        ]
+    res.render("syslogs",{ 
+        alert: '',
+        username: req.session.username,
+        role: req.session.role,
+        navbar: await Navbar(req),
     });
+}
+
+
+
+export const submitSyslogs = async function(req,res){
+
+    // console.log(req.body);
+
+    let trigger_name = req.header('hx-trigger-name');
+    let trigger_id = req.header('hx-trigger');
+
+    console.log(`trigger_name: ${trigger_name} - trigger_id: ${trigger_id}`);
+
 
-    for (const log of syslogs) {
-        let date = (log.createdAt).toDateString();
-        let time = (log.createdAt).toLocaleTimeString();
-        let datetime = `${time} ${date}`;
-
-        logs += `<tr>
-                    <td class="sort-id">${log.id}</td>
-                    <td class="sort-user">${log.user}</td>
-                    <td class="sort-email">${log.email}</td>
-                    <td class="sort-event">${log.event}</td>
-                    <td class="sort-message">${log.message}</td>
-                    <td class="sort-ip">${log.ip}</td>
-                    <td class="sort-datetime">${datetime}</td>
-                </tr>`
-    }
-    
-    res.render("syslogs", {
-        username: req.session.username || 'Dev',
-        role: req.session.role || 'Dev',
-        avatar: req.session.username.charAt(0).toUpperCase(),
-        logs: logs,
+    res.render("syslogs",{
         alert: '',
-        link1: '',
-        link2: '',
-        link3: '',
-        link4: '',
-        link5: '',
-        link6: '',
-        link7: '',
-        link8: '',
-        link9: '',
+        username: req.session.username,
+        role: req.session.role,
+        navbar: await Navbar(req),
     });
 
 }

+ 35 - 17
controllers/users.js

@@ -1,7 +1,8 @@
-import { User } from '../database/models.js';
+import { ServerSettings, User } from '../database/config.js';
+import { Alert, getLanguage, Navbar } from '../utils/system.js';
+
+export const Users = async function(req,res){
 
-export const Users = async (req, res) => {
-   
     let user_list = `
     <tr>
         <th><input class="form-check-input" type="checkbox"></th>
@@ -30,8 +31,6 @@ export const Users = async (req, res) => {
             active = '<span class="badge badge-outline text-grey" title="User has not logged-in within the last 30 days.">Inactive</span>';
         }
 
-
-
         let info = `
         <tr>
             <td><input class="form-check-input" type="checkbox"></td>
@@ -50,22 +49,41 @@ export const Users = async (req, res) => {
         user_list += info;
     });
 
-
-    res.render("users", {
+    res.render("users",{ 
+        alert: '',
         username: req.session.username,
         role: req.session.role,
-        avatar: req.session.username.charAt(0).toUpperCase(),
         user_list: user_list,
+        navbar: await Navbar(req),
+    });
+}
+
+
+
+export const submitUsers = async function(req,res){
+
+    // console.log(req.body);
+
+    let trigger_name = req.header('hx-trigger-name');
+    let trigger_id = req.header('hx-trigger');
+
+    console.log(`trigger_name: ${trigger_name} - trigger_id: ${trigger_id}`);
+
+
+    // [HTMX Triggered] Changes the update button.
+    if(trigger_id == 'settings'){
+        res.send(`<button class="btn btn-success" hx-post="/settings" hx-trigger="load delay:2s" hx-swap="outerHTML" id="submit" hx-target="#submit">Updated</button>`);
+        return;
+    } else if (trigger_id == 'submit'){
+        res.send(`<button class="btn btn-primary" id="submit" form="settings">Update</button>`);
+        return;
+    }
+
+    res.render("users",{
         alert: '',
-        link1: '',
-        link2: '',
-        link3: '',
-        link4: '',
-        link5: '',
-        link6: '',
-        link7: '',
-        link8: '',
-        link9: '',
+        username: req.session.username,
+        role: req.session.role,
+        navbar: await Navbar(req),
     });
 
 }

+ 22 - 108
controllers/volumes.js

@@ -1,123 +1,37 @@
-import { docker } from '../utils/docker.js';
+import { Alert, getLanguage, Navbar } from '../utils/system.js';
 
-export const Volumes = async function(req, res) {
-    let container_volumes = [];
-    let volume_list = '';
+export const Volumes = async function(req,res){
 
-    console.log(req.params.host);
 
-    // Table header
-    volume_list = `<thead>
-                        <tr>
-                            <th class="w-1"><input class="form-check-input m-0 align-middle" name="select" type="checkbox" aria-label="Select all" onclick="selectAll()"></th>
-                            <th><label class="table-sort" data-sort="sort-type">Type</label></th>
-                            <th><label class="table-sort" data-sort="sort-name">Name</label></th>
-                            <th><label class="table-sort" data-sort="sort-city">Mount point</label></th>
-                            <th><label class="table-sort" data-sort="sort-score">Status</label></th>
-                            <th><label class="table-sort" data-sort="sort-date">Created</label></th>
-                            <th><label class="table-sort" data-sort="sort-quantity">Size</label></th>
-                            <th><label class="table-sort" data-sort="sort-progress">Action</label></th>
-                        </tr>
-                    </thead>
-                    <tbody class="table-tbody">`
+    res.render("volumes",{ 
+        alert: '',
+        username: req.session.username,
+        role: req.session.role,
+        volume_count: '',
+        volume_list: '',
+        navbar: await Navbar(req),
+    });
+}
 
-    // List all containers
-    let containers = await docker.listContainers({ all: true });
 
-    // Get the first 6 volumes from each container
-    for (let i = 0; i < containers.length; i++) {
-        try { container_volumes.push({type: containers[i].Mounts[0].Type, source: containers[i].Mounts[0].Source}); } catch { } 
-        try { container_volumes.push({type: containers[i].Mounts[1].Type, source: containers[i].Mounts[1].Source}); } catch { }
-        try { container_volumes.push({type: containers[i].Mounts[2].Type, source: containers[i].Mounts[2].Source}); } catch { }
-        try { container_volumes.push({type: containers[i].Mounts[3].Type, source: containers[i].Mounts[3].Source}); } catch { }
-        try { container_volumes.push({type: containers[i].Mounts[4].Type, source: containers[i].Mounts[4].Source}); } catch { }
-        try { container_volumes.push({type: containers[i].Mounts[5].Type, source: containers[i].Mounts[5].Source}); } catch { }
-    }
-    
-    // List ALL volumes
-    let list = await docker.listVolumes({ all: true });
-    let volumes = list.Volumes;
 
-    // Create a table row for each volume
-    for (let i = 0; i < volumes.length; i++) {
-        let volume = volumes[i];
-        let name = "" + volume.Name;
-        let mount = "" + volume.Mountpoint;
-        let type = "Bind";
+export const submitVolumes = async function(req,res){
 
-        // Check if the volume is being used by any of the containers
-        let status = '';
-        if (container_volumes.some(volume => volume.source === mount)) { status = "In use"; }
-        if (container_volumes.some(volume => volume.source === mount && volume.type === 'volume')) { type = "Volume"; }
+    // console.log(req.body);
 
-        let row = `
-        <tr>
-            <td><input class="form-check-input m-0 align-middle" name="select" value="${name}" type="checkbox" aria-label="Select"></td>
-            <td class="sort-type">${type}</td>
-            <td class="sort-name">${name}</td>
-            <td class="sort-city">${mount}</td>
-            <td class="sort-score text-green">${status}</td>
-            <td class="sort-date" data-date="1628122643">${volume.CreatedAt}</td>
-            <td class="sort-quantity">MB</td>
-            <td class="text-end"><a class="btn" href="#">Details</a></td>
-        </tr>`
-    
-        volume_list += row;    
-    }
+    let trigger_name = req.header('hx-trigger-name');
+    let trigger_id = req.header('hx-trigger');
 
-    volume_list += `</tbody>`
+    console.log(`trigger_name: ${trigger_name} - trigger_id: ${trigger_id}`);
 
-    
-    res.render("volumes", {
+
+    res.render("volumes",{
+        alert: '',
         username: req.session.username,
         role: req.session.role,
-        avatar: req.session.username.charAt(0).toUpperCase(),
-        volume_list: volume_list,
-        volume_count: volumes.length,
-        alert: '',
-        link1: '',
-        link2: '',
-        link3: '',
-        link4: '',
-        link5: '',
-        link6: '',
-        link7: '',
-        link8: '',
-        link9: '',
+        volume_count: '',
+        volume_list: '',
+        navbar: await Navbar(req),
     });
 
-}
-
-export const addVolume = async function(req, res) {
-    
-    let volume = req.body.volume;
-
-    docker.createVolume({
-        Name: volume
-    });
-    res.redirect("/volumes");
-}
-
-
-export const removeVolume = async function(req, res) {
-    let volumes = req.body.select;
-    
-    if (typeof(volumes) == 'string') {
-        volumes = [volumes];
-    }
-
-    for (let i = 0; i < volumes.length; i++) {
-        
-        if (volumes[i] != 'on') {
-            try {
-                console.log(`Removing volume: ${volumes[i]}`);
-                let volume = docker.getVolume(volumes[i]);
-                await volume.remove();
-            } catch (error) {
-                console.log(`Unable to remove volume: ${volumes[i]}`);
-            }
-        }
-    }
-
-    res.redirect("/volumes");
 }

+ 249 - 0
database/config.js

@@ -0,0 +1,249 @@
+import session from 'express-session';
+import SessionSequelize from 'connect-session-sequelize';
+import { Sequelize, DataTypes} from 'sequelize';
+import { readFileSync } from 'fs';
+
+const SECURE = process.env.HTTPS || false;
+
+// Session store
+const SequelizeStore = SessionSequelize(session.Store);
+const sessionData = new Sequelize('database', 'username', 'password', {
+    dialect: 'sqlite',
+    storage: 'database/sessions.sqlite',
+    logging: false,
+});
+const SessionStore = new SequelizeStore({ db: sessionData });
+
+export const sessionMiddleware = session({
+  secret: 'not keyboard cat',
+  store: SessionStore,
+  resave: false,
+  saveUninitialized: false,
+  cookie: {
+      secure: SECURE,
+      httpOnly: SECURE,
+      maxAge: 3600000 * 8,
+  },
+});
+
+// Server settings
+const settings = new Sequelize('database', 'username', 'password', {
+    dialect: 'sqlite',
+    storage: 'database/settings.sqlite',
+    logging: false,
+});
+const SettingsDB = new SequelizeStore({ db: settings });
+
+// Display package information
+let package_info = readFileSync(`package.json`, 'utf8');
+package_info = JSON.parse(package_info);
+console.log('');
+console.log(`\x1b[33mDweebUI v${package_info.version}\x1b[0m`);
+console.log(`\x1b[33mAuthor: ${package_info.author}\x1b[0m`);
+console.log(`\x1b[33mLicense: ${package_info.license}\x1b[0m`);
+console.log(`\x1b[33mDescription: ${package_info.description}\x1b[0m`);
+console.log('');
+
+// Test database connection
+try {
+    await sessionData.authenticate();
+    await settings.authenticate();
+    sessionData.sync();
+    settings.sync();
+    console.log(`\x1b[32mDatabase connection established.\x1b[0m`);
+} catch (error) {
+    console.error('\x1b[31mDatabase connection failed:', error, '\x1b[0m');
+}
+
+// Models
+export const User = settings.define('User', {
+    id: {
+      type: DataTypes.INTEGER,
+      autoIncrement: true,
+      primaryKey: true
+    },
+    name: {
+      type: DataTypes.STRING
+    },
+    userID: {
+      type: DataTypes.UUID,
+      defaultValue: DataTypes.UUIDV4,
+    },
+    username: {
+      type: DataTypes.STRING,
+      allowNull: false
+    },
+    email: {
+      type: DataTypes.STRING,
+      allowNull: false
+    },
+    password: {
+      type: DataTypes.STRING,
+      allowNull: false
+    },
+    role: {
+      type: DataTypes.STRING
+    },
+    group: {
+      type: DataTypes.STRING
+    },
+    avatar: {
+      type: DataTypes.STRING
+    },
+    lastLogin: {
+      type: DataTypes.STRING
+    },
+    preferences : {
+      type: DataTypes.STRING
+    },
+});
+  
+export const Permission = settings.define('Permission', {
+  id: {
+    type: DataTypes.INTEGER,
+    autoIncrement: true,
+    primaryKey: true
+  },
+  containerName: {
+    type: DataTypes.STRING,
+  },
+  containerID: {
+    type: DataTypes.STRING,
+  },
+  username: {
+    type: DataTypes.STRING,
+    allowNull: false
+  },
+  userID: {
+    type: DataTypes.STRING,
+    allowNull: false
+  },
+  install: {
+    type: DataTypes.STRING,
+    defaultValue: false
+  },
+  uninstall: {
+    type: DataTypes.STRING,
+    defaultValue: false
+  },
+  edit: {
+    type: DataTypes.STRING,
+    defaultValue: false
+  },
+  upgrade: {
+    type: DataTypes.STRING,
+    defaultValue: false
+  },
+  start: {
+    type: DataTypes.STRING,
+    defaultValue: false
+  },
+  stop: {
+    type: DataTypes.STRING,
+    defaultValue: false
+  },
+  restart: {
+    type: DataTypes.STRING,
+    defaultValue: false
+  },
+  pause: {
+    type: DataTypes.STRING,
+    defaultValue: false
+  },
+  logs: {
+    type: DataTypes.STRING,
+    defaultValue: false
+  },
+  hide: {
+    type: DataTypes.STRING,
+    defaultValue: false
+  },
+  reset_view: {
+    type: DataTypes.STRING,
+    defaultValue: false
+  },
+  view: {
+    type: DataTypes.STRING,
+    defaultValue: false
+  },
+  options: {
+    type: DataTypes.STRING,
+    defaultValue: false
+  },
+});
+
+export const Syslog = settings.define('Syslog', {
+  id: {
+    type: DataTypes.INTEGER,
+    autoIncrement: true,
+    primaryKey: true
+  },
+  username: {
+    type: DataTypes.STRING
+  },
+  email: {
+    type: DataTypes.STRING
+  },
+  event: {
+    type: DataTypes.STRING,
+    allowNull: false
+  },
+  message: {
+    type: DataTypes.STRING,
+    allowNull: false
+  },
+  ip : {
+    type: DataTypes.STRING
+  },
+  options : {
+    type: DataTypes.STRING
+  },
+});
+
+export const Notification = settings.define('Notification', {
+  id: {
+    type: DataTypes.INTEGER,
+    autoIncrement: true,
+    primaryKey: true
+  },
+  title: {
+    type: DataTypes.STRING
+  },
+  message: {
+    type: DataTypes.STRING
+  },
+  icon: {
+    type: DataTypes.STRING,
+  },
+  color: {
+    type: DataTypes.STRING,
+  },
+  read: {
+    type: DataTypes.STRING,
+  },
+  createdAt : {
+    type: DataTypes.STRING
+  },
+  createdBy : {
+    type: DataTypes.STRING
+  },
+  options : {
+    type: DataTypes.STRING
+  },
+});
+
+export const ServerSettings = settings.define('ServerSettings', {
+  id: {
+    type: DataTypes.INTEGER,
+    autoIncrement: true,
+    primaryKey: true
+  },
+  key: {
+    type: DataTypes.STRING,
+    allowNull: false
+  },
+  value: {
+    type: DataTypes.STRING,
+    allowNull: true
+  }
+});

+ 0 - 272
database/models.js

@@ -1,272 +0,0 @@
-import { Sequelize, DataTypes } from 'sequelize';
-
-
-export const sequelize = new Sequelize({ 
-  dialect: 'sqlite',
-  storage: './database/db.sqlite',
-  logging: false,
-});
-
-export const User = sequelize.define('User', {
-  id: {
-    type: DataTypes.INTEGER,
-    autoIncrement: true,
-    primaryKey: true
-  },
-  name: {
-    type: DataTypes.STRING
-  },
-  userID: {
-    type: DataTypes.UUID,
-    defaultValue: DataTypes.UUIDV4,
-  },
-  username: {
-    type: DataTypes.STRING,
-    allowNull: false
-  },
-  email: {
-    type: DataTypes.STRING,
-    allowNull: false
-  },
-  password: {
-    type: DataTypes.STRING,
-    allowNull: false
-  },
-  role: {
-    type: DataTypes.STRING
-  },
-  group: {
-    type: DataTypes.STRING
-  },
-  avatar: {
-    type: DataTypes.STRING
-  },
-  lastLogin: {
-    type: DataTypes.STRING
-  }
-});
-
-export const Container = sequelize.define('Container', {
-    id: {
-        type: DataTypes.INTEGER,
-        autoIncrement: true,
-        primaryKey: true
-    },
-    name: {
-        type: DataTypes.STRING,
-        allowNull: false
-    },
-    visibility: {
-        type: DataTypes.STRING
-    },
-    service: {
-        type: DataTypes.STRING
-    },
-    state: {
-        type: DataTypes.STRING
-    },
-    image: {
-        type: DataTypes.STRING
-    },
-    external_port: {
-        type: DataTypes.STRING
-    },
-    internal_port: {
-        type: DataTypes.STRING
-    },
-    ports: {
-        type: DataTypes.STRING
-    },
-    volumes: {
-        type: DataTypes.STRING
-    },
-    environment_variables: {
-        type: DataTypes.STRING
-    },
-    labels: {
-        type: DataTypes.STRING
-    },
-    IPv4: {
-        type: DataTypes.STRING
-    },
-    style: {
-        type: DataTypes.STRING
-    },
-    cpu: {
-        // stores the last 15 values from dockerContainerStats
-        type: DataTypes.STRING
-    },
-    ram: {
-        // stores the last 15 values from dockerContainerStats
-        type: DataTypes.STRING
-    },
-  });
-
-export const Permission = sequelize.define('Permission', {
-  id: {
-    type: DataTypes.INTEGER,
-    autoIncrement: true,
-    primaryKey: true
-  },
-  containerName: {
-    type: DataTypes.STRING,
-  },
-  containerID: {
-    type: DataTypes.STRING,
-  },
-  username: {
-    type: DataTypes.STRING,
-    allowNull: false
-  },
-  userID: {
-    type: DataTypes.STRING,
-    allowNull: false
-  },
-  install: {
-    type: DataTypes.STRING,
-    defaultValue: false
-  },
-  uninstall: {
-    type: DataTypes.STRING,
-    defaultValue: false
-  },
-  edit: {
-    type: DataTypes.STRING,
-    defaultValue: false
-  },
-  upgrade: {
-    type: DataTypes.STRING,
-    defaultValue: false
-  },
-  start: {
-    type: DataTypes.STRING,
-    defaultValue: false
-  },
-  stop: {
-    type: DataTypes.STRING,
-    defaultValue: false
-  },
-  restart: {
-    type: DataTypes.STRING,
-    defaultValue: false
-  },
-  pause: {
-    type: DataTypes.STRING,
-    defaultValue: false
-  },
-  logs: {
-    type: DataTypes.STRING,
-    defaultValue: false
-  },
-  hide: {
-    type: DataTypes.STRING,
-    defaultValue: false
-  },
-  reset_view: {
-    type: DataTypes.STRING,
-    defaultValue: false
-  },
-  view: {
-    type: DataTypes.STRING,
-    defaultValue: false
-  },
-});
-
-export const Syslog = sequelize.define('Syslog', {
-  id: {
-    type: DataTypes.INTEGER,
-    autoIncrement: true,
-    primaryKey: true
-  },
-  user: {
-    type: DataTypes.STRING
-  },
-  email: {
-    type: DataTypes.STRING
-  },
-  event: {
-    type: DataTypes.STRING,
-    allowNull: false
-  },
-  message: {
-    type: DataTypes.STRING,
-    allowNull: false
-  },
-  ip : {
-    type: DataTypes.STRING
-  },
-});
-
-export const Notification = sequelize.define('Notification', {
-  id: {
-    type: DataTypes.INTEGER,
-    autoIncrement: true,
-    primaryKey: true
-  },
-  title: {
-    type: DataTypes.STRING
-  },
-  message: {
-    type: DataTypes.STRING
-  },
-  icon: {
-    type: DataTypes.STRING,
-  },
-  color: {
-    type: DataTypes.STRING,
-  },
-  read: {
-    type: DataTypes.STRING,
-  },
-  createdAt : {
-    type: DataTypes.STRING
-  },
-  createdBy : {
-    type: DataTypes.STRING
-  },
-});
-
-export const ServerSettings = sequelize.define('ServerSettings', {
-  id: {
-    type: DataTypes.INTEGER,
-    autoIncrement: true,
-    primaryKey: true
-  },
-  key: {
-    type: DataTypes.STRING,
-    allowNull: false
-  },
-  value: {
-    type: DataTypes.STRING,
-    allowNull: true
-  }
-});
-
-export const UserSettings = sequelize.define('UserSettings', {
-  id: {
-    type: DataTypes.INTEGER,
-    autoIncrement: true,
-    primaryKey: true
-  },
-  userID: {
-    type: DataTypes.STRING,
-    allowNull: false
-  },
-  key: {
-    type: DataTypes.STRING,
-    allowNull: false
-  },
-  value: {
-    type: DataTypes.STRING,
-    allowNull: false
-  }
-});
-
-export const Variables = sequelize.define('Variables', {
-  find: {
-    type: DataTypes.STRING,
-  },
-  replace: {
-    type: DataTypes.STRING,
-  }
-});

BIN
database/sessions.sqlite


BIN
database/settings.sqlite


+ 14 - 0
languages/chinese.json

@@ -0,0 +1,14 @@
+{
+    "Dashboard": "仪表盘",
+    "Images": "镜像",
+    "Volumes": "存储卷",
+    "Networks": "网络",
+    "Apps": "应用商店",
+    "Users": "用户",
+    "Syslogs": "系统日志",
+    "Account": "设置",
+    "Notifications": "",
+    "Preferences": "",
+    "Settings": "设置",
+    "Logout": ""
+}

+ 59 - 325
package-lock.json

@@ -1,27 +1,23 @@
 {
-  "name": "dweebui",
-  "version": "0.60",
+  "name": "test",
+  "version": "1.0.0",
   "lockfileVersion": 3,
   "requires": true,
   "packages": {
     "": {
-      "name": "dweebui",
-      "version": "0.60",
-      "license": "MIT",
+      "name": "test",
+      "version": "1.0.0",
+      "license": "ISC",
       "dependencies": {
-        "adm-zip": "^0.5.14",
         "bcrypt": "^5.1.1",
+        "connect-session-sequelize": "^7.1.7",
         "dockerode": "^4.0.2",
-        "dockerode-compose": "^1.4.0",
         "ejs": "^3.1.10",
         "express": "^4.19.2",
         "express-session": "^1.18.0",
-        "memorystore": "^1.6.7",
-        "multer": "^1.4.5-lts.1",
         "sequelize": "^6.37.3",
         "sqlite3": "^5.1.7",
-        "systeminformation": "^5.22.11",
-        "yaml": "^2.4.5"
+        "systeminformation": "^5.22.11"
       }
     },
     "node_modules/@balena/dockerignore": {
@@ -78,18 +74,6 @@
         "node": ">=10"
       }
     },
-    "node_modules/@npmcli/move-file/node_modules/mkdirp": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
-      "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==",
-      "optional": true,
-      "bin": {
-        "mkdirp": "bin/cmd.js"
-      },
-      "engines": {
-        "node": ">=10"
-      }
-    },
     "node_modules/@tootallnate/once": {
       "version": "1.1.2",
       "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz",
@@ -113,17 +97,17 @@
       "integrity": "sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g=="
     },
     "node_modules/@types/node": {
-      "version": "20.14.2",
-      "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.2.tgz",
-      "integrity": "sha512-xyu6WAMVwv6AKFLB+e/7ySZVr/0zLCzOa7rSpq6jNwpqOrUbcACDWC+53d4n2QHOnDou0fbIsg8wZu/sxrnI4Q==",
+      "version": "20.14.12",
+      "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.12.tgz",
+      "integrity": "sha512-r7wNXakLeSsGT0H1AU863vS2wa5wBOK4bWMjZz2wj+8nBx+m5PeIn0k8AloSLpRuiwdRQZwarZqHE4FNArPuJQ==",
       "dependencies": {
         "undici-types": "~5.26.4"
       }
     },
     "node_modules/@types/validator": {
-      "version": "13.11.10",
-      "resolved": "https://registry.npmjs.org/@types/validator/-/validator-13.11.10.tgz",
-      "integrity": "sha512-e2PNXoXLr6Z+dbfx5zSh9TRlXJrELycxiaXznp4S5+D2M3b9bqJEitNHA5923jhnB2zzFiZHa2f0SI1HoIahpg=="
+      "version": "13.12.0",
+      "resolved": "https://registry.npmjs.org/@types/validator/-/validator-13.12.0.tgz",
+      "integrity": "sha512-nH45Lk7oPIJ1RVOF6JgFI6Dy0QpHEzq4QecZhvguxYPDwT8c93prCMqAtiIttm39voZ+DDR+qkNnMpJmMBRqag=="
     },
     "node_modules/abbrev": {
       "version": "1.1.1",
@@ -142,14 +126,6 @@
         "node": ">= 0.6"
       }
     },
-    "node_modules/adm-zip": {
-      "version": "0.5.14",
-      "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.5.14.tgz",
-      "integrity": "sha512-DnyqqifT4Jrcvb8USYjp6FHtBpEIz1mnXu6pTRHZ0RL69LbQYiO+0lDFg5+OKA7U29oWSs3a/i8fhn8ZcceIWg==",
-      "engines": {
-        "node": ">=12.0"
-      }
-    },
     "node_modules/agent-base": {
       "version": "6.0.2",
       "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz",
@@ -208,11 +184,6 @@
         "url": "https://github.com/chalk/ansi-styles?sponsor=1"
       }
     },
-    "node_modules/append-field": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/append-field/-/append-field-1.0.0.tgz",
-      "integrity": "sha512-klpgFSWLW1ZEs8svjfb7g4qWY0YS5imI82dTg+QahUvJ8YqAY0P10Uk8tTyh9ZGuYEZEMaeJYCF5BFuX552hsw=="
-    },
     "node_modules/aproba": {
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz",
@@ -231,11 +202,6 @@
         "node": ">=10"
       }
     },
-    "node_modules/argparse": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
-      "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="
-    },
     "node_modules/array-flatten": {
       "version": "1.1.1",
       "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
@@ -385,11 +351,6 @@
         "ieee754": "^1.1.13"
       }
     },
-    "node_modules/buffer-from": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
-      "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ=="
-    },
     "node_modules/buildcheck": {
       "version": "0.0.6",
       "resolved": "https://registry.npmjs.org/buildcheck/-/buildcheck-0.0.6.tgz",
@@ -399,17 +360,6 @@
         "node": ">=10.0.0"
       }
     },
-    "node_modules/busboy": {
-      "version": "1.6.0",
-      "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz",
-      "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==",
-      "dependencies": {
-        "streamsearch": "^1.1.0"
-      },
-      "engines": {
-        "node": ">=10.16.0"
-      }
-    },
     "node_modules/bytes": {
       "version": "3.1.2",
       "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz",
@@ -447,36 +397,6 @@
         "node": ">= 10"
       }
     },
-    "node_modules/cacache/node_modules/lru-cache": {
-      "version": "6.0.0",
-      "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
-      "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
-      "optional": true,
-      "dependencies": {
-        "yallist": "^4.0.0"
-      },
-      "engines": {
-        "node": ">=10"
-      }
-    },
-    "node_modules/cacache/node_modules/mkdirp": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
-      "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==",
-      "optional": true,
-      "bin": {
-        "mkdirp": "bin/cmd.js"
-      },
-      "engines": {
-        "node": ">=10"
-      }
-    },
-    "node_modules/cacache/node_modules/yallist": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
-      "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
-      "optional": true
-    },
     "node_modules/call-bind": {
       "version": "1.0.7",
       "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz",
@@ -556,45 +476,18 @@
       "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
       "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="
     },
-    "node_modules/concat-stream": {
-      "version": "1.6.2",
-      "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
-      "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
-      "engines": [
-        "node >= 0.8"
-      ],
-      "dependencies": {
-        "buffer-from": "^1.0.0",
-        "inherits": "^2.0.3",
-        "readable-stream": "^2.2.2",
-        "typedarray": "^0.0.6"
-      }
-    },
-    "node_modules/concat-stream/node_modules/readable-stream": {
-      "version": "2.3.8",
-      "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz",
-      "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
-      "dependencies": {
-        "core-util-is": "~1.0.0",
-        "inherits": "~2.0.3",
-        "isarray": "~1.0.0",
-        "process-nextick-args": "~2.0.0",
-        "safe-buffer": "~5.1.1",
-        "string_decoder": "~1.1.1",
-        "util-deprecate": "~1.0.1"
-      }
-    },
-    "node_modules/concat-stream/node_modules/safe-buffer": {
-      "version": "5.1.2",
-      "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
-      "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
-    },
-    "node_modules/concat-stream/node_modules/string_decoder": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
-      "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+    "node_modules/connect-session-sequelize": {
+      "version": "7.1.7",
+      "resolved": "https://registry.npmjs.org/connect-session-sequelize/-/connect-session-sequelize-7.1.7.tgz",
+      "integrity": "sha512-Wqq7rg0w+9bOVs6jC0nhZnssXJ3+iKNlDVWn2JfBuBPoY7oYaxzxfBKeUYrX6dHt3OWEWbZV6LJvapwi76iBQQ==",
       "dependencies": {
-        "safe-buffer": "~5.1.0"
+        "debug": "^4.1.1"
+      },
+      "engines": {
+        "node": ">= 10"
+      },
+      "peerDependencies": {
+        "sequelize": ">= 6.1.0"
       }
     },
     "node_modules/console-control-strings": {
@@ -634,11 +527,6 @@
       "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
       "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ=="
     },
-    "node_modules/core-util-is": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz",
-      "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ=="
-    },
     "node_modules/cpu-features": {
       "version": "0.0.10",
       "resolved": "https://registry.npmjs.org/cpu-features/-/cpu-features-0.0.10.tgz",
@@ -654,9 +542,9 @@
       }
     },
     "node_modules/debug": {
-      "version": "4.3.5",
-      "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz",
-      "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==",
+      "version": "4.3.6",
+      "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz",
+      "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==",
       "dependencies": {
         "ms": "2.1.2"
       },
@@ -764,32 +652,6 @@
         "node": ">= 8.0"
       }
     },
-    "node_modules/dockerode-compose": {
-      "version": "1.4.0",
-      "resolved": "https://registry.npmjs.org/dockerode-compose/-/dockerode-compose-1.4.0.tgz",
-      "integrity": "sha512-6x5ZlK06H+cgoTR4ffucqN5kWVvxNvxwTLcHQUZcegCJBEDGrdzXMOEGDMsxbHwiLtLo2dNwG0eZK7B2RfEWSw==",
-      "dependencies": {
-        "dockerode": "^4.0.0",
-        "js-yaml": "^4.0.0",
-        "tar-fs": "^2.1.1"
-      }
-    },
-    "node_modules/dockerode-compose/node_modules/chownr": {
-      "version": "1.1.4",
-      "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz",
-      "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg=="
-    },
-    "node_modules/dockerode-compose/node_modules/tar-fs": {
-      "version": "2.1.1",
-      "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz",
-      "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==",
-      "dependencies": {
-        "chownr": "^1.1.1",
-        "mkdirp-classic": "^0.5.2",
-        "pump": "^3.0.0",
-        "tar-stream": "^2.1.4"
-      }
-    },
     "node_modules/dottie": {
       "version": "2.0.6",
       "resolved": "https://registry.npmjs.org/dottie/-/dottie-2.0.6.tgz",
@@ -1418,11 +1280,6 @@
       "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==",
       "optional": true
     },
-    "node_modules/isarray": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
-      "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ=="
-    },
     "node_modules/isexe": {
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
@@ -1430,9 +1287,9 @@
       "optional": true
     },
     "node_modules/jake": {
-      "version": "10.9.1",
-      "resolved": "https://registry.npmjs.org/jake/-/jake-10.9.1.tgz",
-      "integrity": "sha512-61btcOHNnLnsOdtLgA5efqQWjnSi/vow5HbI7HMdKKWqvrKR1bLK3BPlJn9gcSaP2ewuamUSMB5XEy76KUIS2w==",
+      "version": "10.9.2",
+      "resolved": "https://registry.npmjs.org/jake/-/jake-10.9.2.tgz",
+      "integrity": "sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA==",
       "dependencies": {
         "async": "^3.2.3",
         "chalk": "^4.0.2",
@@ -1446,17 +1303,6 @@
         "node": ">=10"
       }
     },
-    "node_modules/js-yaml": {
-      "version": "4.1.0",
-      "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
-      "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
-      "dependencies": {
-        "argparse": "^2.0.1"
-      },
-      "bin": {
-        "js-yaml": "bin/js-yaml.js"
-      }
-    },
     "node_modules/jsbn": {
       "version": "1.1.0",
       "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz",
@@ -1469,12 +1315,15 @@
       "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
     },
     "node_modules/lru-cache": {
-      "version": "4.1.5",
-      "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz",
-      "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==",
+      "version": "6.0.0",
+      "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
+      "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
+      "optional": true,
       "dependencies": {
-        "pseudomap": "^1.0.2",
-        "yallist": "^2.1.2"
+        "yallist": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=10"
       }
     },
     "node_modules/make-dir": {
@@ -1526,24 +1375,6 @@
         "node": ">= 10"
       }
     },
-    "node_modules/make-fetch-happen/node_modules/lru-cache": {
-      "version": "6.0.0",
-      "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
-      "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
-      "optional": true,
-      "dependencies": {
-        "yallist": "^4.0.0"
-      },
-      "engines": {
-        "node": ">=10"
-      }
-    },
-    "node_modules/make-fetch-happen/node_modules/yallist": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
-      "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
-      "optional": true
-    },
     "node_modules/media-typer": {
       "version": "0.3.0",
       "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
@@ -1552,18 +1383,6 @@
         "node": ">= 0.6"
       }
     },
-    "node_modules/memorystore": {
-      "version": "1.6.7",
-      "resolved": "https://registry.npmjs.org/memorystore/-/memorystore-1.6.7.tgz",
-      "integrity": "sha512-OZnmNY/NDrKohPQ+hxp0muBcBKrzKNtHr55DbqSx9hLsYVNnomSAMRAtI7R64t3gf3ID7tHQA7mG4oL3Hu9hdw==",
-      "dependencies": {
-        "debug": "^4.3.0",
-        "lru-cache": "^4.0.3"
-      },
-      "engines": {
-        "node": ">=0.10"
-      }
-    },
     "node_modules/merge-descriptors": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
@@ -1713,11 +1532,6 @@
         "node": ">=8"
       }
     },
-    "node_modules/minipass/node_modules/yallist": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
-      "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
-    },
     "node_modules/minizlib": {
       "version": "2.1.2",
       "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz",
@@ -1730,20 +1544,15 @@
         "node": ">= 8"
       }
     },
-    "node_modules/minizlib/node_modules/yallist": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
-      "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
-    },
     "node_modules/mkdirp": {
-      "version": "0.5.6",
-      "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz",
-      "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==",
-      "dependencies": {
-        "minimist": "^1.2.6"
-      },
+      "version": "1.0.4",
+      "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
+      "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==",
       "bin": {
         "mkdirp": "bin/cmd.js"
+      },
+      "engines": {
+        "node": ">=10"
       }
     },
     "node_modules/mkdirp-classic": {
@@ -1775,23 +1584,6 @@
       "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
       "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
     },
-    "node_modules/multer": {
-      "version": "1.4.5-lts.1",
-      "resolved": "https://registry.npmjs.org/multer/-/multer-1.4.5-lts.1.tgz",
-      "integrity": "sha512-ywPWvcDMeH+z9gQq5qYHCCy+ethsk4goepZ45GLD63fOu0YcNecQxi64nDs3qluZB+murG3/D4dJ7+dGctcCQQ==",
-      "dependencies": {
-        "append-field": "^1.0.0",
-        "busboy": "^1.0.0",
-        "concat-stream": "^1.5.2",
-        "mkdirp": "^0.5.4",
-        "object-assign": "^4.1.1",
-        "type-is": "^1.6.4",
-        "xtend": "^4.0.0"
-      },
-      "engines": {
-        "node": ">= 6.0.0"
-      }
-    },
     "node_modules/nan": {
       "version": "2.20.0",
       "resolved": "https://registry.npmjs.org/nan/-/nan-2.20.0.tgz",
@@ -1955,9 +1747,12 @@
       }
     },
     "node_modules/object-inspect": {
-      "version": "1.13.1",
-      "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz",
-      "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==",
+      "version": "1.13.2",
+      "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz",
+      "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==",
+      "engines": {
+        "node": ">= 0.4"
+      },
       "funding": {
         "url": "https://github.com/sponsors/ljharb"
       }
@@ -2055,11 +1850,6 @@
         "node": ">=10"
       }
     },
-    "node_modules/process-nextick-args": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
-      "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="
-    },
     "node_modules/promise-inflight": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz",
@@ -2091,11 +1881,6 @@
         "node": ">= 0.10"
       }
     },
-    "node_modules/pseudomap": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz",
-      "integrity": "sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ=="
-    },
     "node_modules/pump": {
       "version": "3.0.0",
       "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
@@ -2230,9 +2015,9 @@
       "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
     },
     "node_modules/semver": {
-      "version": "7.6.2",
-      "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz",
-      "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==",
+      "version": "7.6.3",
+      "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
+      "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==",
       "bin": {
         "semver": "bin/semver.js"
       },
@@ -2528,12 +2313,9 @@
       }
     },
     "node_modules/sqlite3/node_modules/node-addon-api": {
-      "version": "7.1.0",
-      "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.0.tgz",
-      "integrity": "sha512-mNcltoe1R8o7STTegSOHdnJNN7s5EUvhoS7ShnTHDyOSd+8H+UdWODq6qSv67PjC8Zc5JRT8+oLAMCr0SIXw7g==",
-      "engines": {
-        "node": "^16 || ^18 || >= 20"
-      }
+      "version": "7.1.1",
+      "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz",
+      "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ=="
     },
     "node_modules/ssh2": {
       "version": "1.15.0",
@@ -2572,14 +2354,6 @@
         "node": ">= 0.8"
       }
     },
-    "node_modules/streamsearch": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz",
-      "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==",
-      "engines": {
-        "node": ">=10.0.0"
-      }
-    },
     "node_modules/string_decoder": {
       "version": "1.3.0",
       "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
@@ -2711,22 +2485,6 @@
         "node": ">=8"
       }
     },
-    "node_modules/tar/node_modules/mkdirp": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
-      "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==",
-      "bin": {
-        "mkdirp": "bin/cmd.js"
-      },
-      "engines": {
-        "node": ">=10"
-      }
-    },
-    "node_modules/tar/node_modules/yallist": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
-      "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
-    },
     "node_modules/toidentifier": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz",
@@ -2773,11 +2531,6 @@
         "node": ">= 0.6"
       }
     },
-    "node_modules/typedarray": {
-      "version": "0.0.6",
-      "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
-      "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA=="
-    },
     "node_modules/uid-safe": {
       "version": "2.1.5",
       "resolved": "https://registry.npmjs.org/uid-safe/-/uid-safe-2.1.5.tgz",
@@ -2907,29 +2660,10 @@
       "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
       "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="
     },
-    "node_modules/xtend": {
-      "version": "4.0.2",
-      "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
-      "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==",
-      "engines": {
-        "node": ">=0.4"
-      }
-    },
     "node_modules/yallist": {
-      "version": "2.1.2",
-      "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
-      "integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A=="
-    },
-    "node_modules/yaml": {
-      "version": "2.4.5",
-      "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.4.5.tgz",
-      "integrity": "sha512-aBx2bnqDzVOyNKfsysjA2ms5ZlnjSAW2eG3/L5G/CSujfjLJTJsEw1bGw8kCf04KodQWk1pxlGnZ56CRxiawmg==",
-      "bin": {
-        "yaml": "bin.mjs"
-      },
-      "engines": {
-        "node": ">= 14"
-      }
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+      "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
     }
   }
 }

+ 4 - 8
package.json

@@ -1,7 +1,6 @@
 {
   "name": "dweebui",
-  "version": "0.60",
-  "description": "Free and Open-Source WebUI For Managing Your Containers.",
+  "version": "0.70.401",
   "main": "server.js",
   "type": "module",
   "scripts": {
@@ -11,19 +10,16 @@
   "keywords": [],
   "author": "lllllllillllllillll",
   "license": "MIT",
+  "description": "DweebUI is a WebUI for managing your containers. Simple setup, a dynamically updating dashboard, and a multi-user permission system.",
   "dependencies": {
-    "adm-zip": "^0.5.14",
     "bcrypt": "^5.1.1",
+    "connect-session-sequelize": "^7.1.7",
     "dockerode": "^4.0.2",
-    "dockerode-compose": "^1.4.0",
     "ejs": "^3.1.10",
     "express": "^4.19.2",
     "express-session": "^1.18.0",
-    "memorystore": "^1.6.7",
-    "multer": "^1.4.5-lts.1",
     "sequelize": "^6.37.3",
     "sqlite3": "^5.1.7",
-    "systeminformation": "^5.22.11",
-    "yaml": "^2.4.5"
+    "systeminformation": "^5.22.11"
   }
 }

+ 276 - 0
public/css/demo.css

@@ -0,0 +1,276 @@
+/*!
+* Tabler v1.0.0-beta20 (https://tabler.io)
+* @version 1.0.0-beta20
+* @link https://tabler.io
+* Copyright 2018-2023 The Tabler Authors
+* Copyright 2018-2023 codecalm.net Paweł Kuna
+* Licensed under MIT (https://github.com/tabler/tabler/blob/master/LICENSE)
+*/
+/* prettier-ignore */
+/* prettier-ignore */
+pre.highlight,
+.highlight pre {
+  max-height: 30rem;
+  margin: 1.5rem 0;
+  overflow: auto;
+  border-radius: var(--tblr-border-radius);
+}
+pre.highlight,
+.highlight pre {
+  scrollbar-color: rgba(var(--tblr-scrollbar-color, var(--tblr-body-color-rgb)), 0.16) transparent;
+}
+pre.highlight::-webkit-scrollbar,
+.highlight pre::-webkit-scrollbar {
+  width: 1rem;
+  height: 1rem;
+  -webkit-transition: background 0.3s;
+  transition: background 0.3s;
+}
+@media (prefers-reduced-motion: reduce) {
+  pre.highlight::-webkit-scrollbar,
+  .highlight pre::-webkit-scrollbar {
+    -webkit-transition: none;
+    transition: none;
+  }
+}
+pre.highlight::-webkit-scrollbar-thumb,
+.highlight pre::-webkit-scrollbar-thumb {
+  border-radius: 1rem;
+  border: 5px solid transparent;
+  box-shadow: inset 0 0 0 1rem rgba(var(--tblr-scrollbar-color, var(--tblr-body-color-rgb)), 0.16);
+}
+pre.highlight::-webkit-scrollbar-track,
+.highlight pre::-webkit-scrollbar-track {
+  background: transparent;
+}
+pre.highlight:hover::-webkit-scrollbar-thumb,
+.highlight pre:hover::-webkit-scrollbar-thumb {
+  box-shadow: inset 0 0 0 1rem rgba(var(--tblr-scrollbar-color, var(--tblr-body-color-rgb)), 0.32);
+}
+pre.highlight::-webkit-scrollbar-corner,
+.highlight pre::-webkit-scrollbar-corner {
+  background: transparent;
+}
+
+.highlight {
+  margin: 0;
+}
+.highlight code > * {
+  margin: 0 !important;
+  padding: 0 !important;
+}
+.highlight .c, .highlight .c1 {
+  color: #a0aec0;
+}
+.highlight .nt, .highlight .nc, .highlight .nx {
+  color: #ff8383;
+}
+.highlight .na, .highlight .p {
+  color: #ffe484;
+}
+.highlight .s, .highlight .dl, .highlight .s2 {
+  color: #b5f4a5;
+}
+.highlight .k {
+  color: #93ddfd;
+}
+.highlight .s1, .highlight .mi {
+  color: #d9a9ff;
+}
+
+.example {
+  padding: 2rem;
+  margin: 1rem 0 2rem;
+  border: var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color);
+  border-radius: 3px 3px 0 0;
+  position: relative;
+  min-height: 12rem;
+  display: flex;
+  align-items: center;
+  overflow-x: auto;
+}
+
+.example-centered {
+  justify-content: center;
+}
+.example-centered .example-content {
+  flex: 0 auto;
+}
+
+.example-content {
+  font-size: 0.875rem;
+  line-height: 1.4285714286;
+  color: var(--tblr-body-color);
+  flex: 1;
+  max-width: 100%;
+}
+.example-content .page-header {
+  margin-bottom: 0;
+}
+
+.example-bg {
+  background: #f6f8fb;
+}
+
+.example-code {
+  margin: 2rem 0;
+  border: var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color);
+  border-top: none;
+}
+.example-code pre {
+  margin: 0;
+  border: 0;
+  border-radius: 0 0 3px 3px;
+}
+.example + .example-code {
+  margin-top: -2rem;
+}
+
+.example-column {
+  margin: 0 auto;
+}
+.example-column > .card:last-of-type {
+  margin-bottom: 0;
+}
+
+.example-column-1 {
+  max-width: 26rem;
+}
+
+.example-column-2 {
+  max-width: 52rem;
+}
+
+.example-modal-backdrop {
+  background: #182433;
+  opacity: 0.24;
+  position: absolute;
+  width: 100%;
+  left: 0;
+  top: 0;
+  height: 100%;
+  border-radius: 2px 2px 0 0;
+}
+
+.card-sponsor {
+  background: var(--tblr-primary-lt) no-repeat center/100% 100%;
+  border-color: var(--tblr-primary);
+  min-height: 316px;
+}
+
+.dropdown-menu-demo {
+  display: inline-block;
+  width: 100%;
+  position: relative;
+  top: 0;
+  margin-bottom: 1rem !important;
+}
+
+.demo-icon-preview {
+  position: -webkit-sticky;
+  position: sticky;
+  top: 0;
+}
+.demo-icon-preview svg,
+.demo-icon-preview i {
+  width: 15rem;
+  height: 15rem;
+  font-size: 15rem;
+  stroke-width: 1.5;
+  margin: 0 auto;
+  display: block;
+}
+@media (max-width: 575.98px) {
+  .demo-icon-preview svg,
+  .demo-icon-preview i {
+    width: 10rem;
+    height: 10rem;
+    font-size: 10rem;
+  }
+}
+
+.demo-icon-preview-icon pre {
+  margin: 0;
+  -webkit-user-select: all;
+     -moz-user-select: all;
+          user-select: all;
+}
+
+.demo-dividers > p {
+  opacity: 0.2;
+  -webkit-user-select: none;
+     -moz-user-select: none;
+      -ms-user-select: none;
+          user-select: none;
+}
+
+.demo-icons-list {
+  display: flex;
+  flex-wrap: wrap;
+  padding: 0;
+  margin: 0 -2px -1px 0;
+  list-style: none;
+}
+.demo-icons-list > * {
+  flex: 1 0 4rem;
+}
+
+.demo-icons-list-wrap {
+  overflow: hidden;
+}
+
+.demo-icons-list-item {
+  display: flex;
+  flex-direction: column;
+  align-items: center;
+  justify-content: center;
+  aspect-ratio: 1;
+  text-align: center;
+  padding: 0.5rem;
+  border-right: var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color);
+  border-bottom: var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color);
+  color: inherit;
+  cursor: pointer;
+}
+.demo-icons-list-item .icon {
+  width: 1.5rem;
+  height: 1.5rem;
+  font-size: 1.5rem;
+}
+.demo-icons-list-item:hover {
+  text-decoration: none;
+}
+
+.settings-btn {
+  position: fixed;
+  right: -1px;
+  top: 10rem;
+  border-top-right-radius: 0;
+  border-bottom-right-radius: 0;
+  box-shadow: rgba(var(--tblr-body-color-rgb), 0.04) 0 2px 4px 0;
+}
+
+.settings-scheme {
+  display: inline-block;
+  border-radius: 50%;
+  height: 3rem;
+  width: 3rem;
+  position: relative;
+  border: var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color);
+  box-shadow: rgba(var(--tblr-body-color-rgb), 0.04) 0 2px 4px 0;
+}
+.settings-scheme-light {
+  background: linear-gradient(135deg, #ffffff 50%, #fcfdfe 50%);
+}
+.settings-scheme-mixed {
+  background-image: linear-gradient(135deg, #182433 50%, #fff 50%);
+}
+.settings-scheme-transparent {
+  background: #fcfdfe;
+}
+.settings-scheme-dark {
+  background: #182433;
+}
+.settings-scheme-colored {
+  background-image: linear-gradient(135deg, var(--tblr-primary) 50%, #fcfdfe 50%);
+}

+ 2 - 2
public/css/demo.min.css

@@ -1,6 +1,6 @@
 /*!
-* Tabler v1.0.0-beta19 (https://tabler.io)
-* @version 1.0.0-beta19
+* Tabler v1.0.0-beta20 (https://tabler.io)
+* @version 1.0.0-beta20
 * @link https://tabler.io
 * Copyright 2018-2023 The Tabler Authors
 * Copyright 2018-2023 codecalm.net Paweł Kuna

+ 276 - 0
public/css/demo.rtl.css

@@ -0,0 +1,276 @@
+/*!
+* Tabler v1.0.0-beta20 (https://tabler.io)
+* @version 1.0.0-beta20
+* @link https://tabler.io
+* Copyright 2018-2023 The Tabler Authors
+* Copyright 2018-2023 codecalm.net Paweł Kuna
+* Licensed under MIT (https://github.com/tabler/tabler/blob/master/LICENSE)
+*/
+/* prettier-ignore */
+/* prettier-ignore */
+pre.highlight,
+.highlight pre {
+  max-height: 30rem;
+  margin: 1.5rem 0;
+  overflow: auto;
+  border-radius: var(--tblr-border-radius);
+}
+pre.highlight,
+.highlight pre {
+  scrollbar-color: rgba(var(--tblr-scrollbar-color, var(--tblr-body-color-rgb)), 0.16) transparent;
+}
+pre.highlight::-webkit-scrollbar,
+.highlight pre::-webkit-scrollbar {
+  width: 1rem;
+  height: 1rem;
+  -webkit-transition: background 0.3s;
+  transition: background 0.3s;
+}
+@media (prefers-reduced-motion: reduce) {
+  pre.highlight::-webkit-scrollbar,
+  .highlight pre::-webkit-scrollbar {
+    -webkit-transition: none;
+    transition: none;
+  }
+}
+pre.highlight::-webkit-scrollbar-thumb,
+.highlight pre::-webkit-scrollbar-thumb {
+  border-radius: 1rem;
+  border: 5px solid transparent;
+  box-shadow: inset 0 0 0 1rem rgba(var(--tblr-scrollbar-color, var(--tblr-body-color-rgb)), 0.16);
+}
+pre.highlight::-webkit-scrollbar-track,
+.highlight pre::-webkit-scrollbar-track {
+  background: transparent;
+}
+pre.highlight:hover::-webkit-scrollbar-thumb,
+.highlight pre:hover::-webkit-scrollbar-thumb {
+  box-shadow: inset 0 0 0 1rem rgba(var(--tblr-scrollbar-color, var(--tblr-body-color-rgb)), 0.32);
+}
+pre.highlight::-webkit-scrollbar-corner,
+.highlight pre::-webkit-scrollbar-corner {
+  background: transparent;
+}
+
+.highlight {
+  margin: 0;
+}
+.highlight code > * {
+  margin: 0 !important;
+  padding: 0 !important;
+}
+.highlight .c, .highlight .c1 {
+  color: #a0aec0;
+}
+.highlight .nt, .highlight .nc, .highlight .nx {
+  color: #ff8383;
+}
+.highlight .na, .highlight .p {
+  color: #ffe484;
+}
+.highlight .s, .highlight .dl, .highlight .s2 {
+  color: #b5f4a5;
+}
+.highlight .k {
+  color: #93ddfd;
+}
+.highlight .s1, .highlight .mi {
+  color: #d9a9ff;
+}
+
+.example {
+  padding: 2rem;
+  margin: 1rem 0 2rem;
+  border: var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color);
+  border-radius: 3px 3px 0 0;
+  position: relative;
+  min-height: 12rem;
+  display: flex;
+  align-items: center;
+  overflow-x: auto;
+}
+
+.example-centered {
+  justify-content: center;
+}
+.example-centered .example-content {
+  flex: 0 auto;
+}
+
+.example-content {
+  font-size: 0.875rem;
+  line-height: 1.4285714286;
+  color: var(--tblr-body-color);
+  flex: 1;
+  max-width: 100%;
+}
+.example-content .page-header {
+  margin-bottom: 0;
+}
+
+.example-bg {
+  background: #f6f8fb;
+}
+
+.example-code {
+  margin: 2rem 0;
+  border: var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color);
+  border-top: none;
+}
+.example-code pre {
+  margin: 0;
+  border: 0;
+  border-radius: 0 0 3px 3px;
+}
+.example + .example-code {
+  margin-top: -2rem;
+}
+
+.example-column {
+  margin: 0 auto;
+}
+.example-column > .card:last-of-type {
+  margin-bottom: 0;
+}
+
+.example-column-1 {
+  max-width: 26rem;
+}
+
+.example-column-2 {
+  max-width: 52rem;
+}
+
+.example-modal-backdrop {
+  background: #182433;
+  opacity: 0.24;
+  position: absolute;
+  width: 100%;
+  right: 0;
+  top: 0;
+  height: 100%;
+  border-radius: 2px 2px 0 0;
+}
+
+.card-sponsor {
+  background: var(--tblr-primary-lt) no-repeat center/100% 100%;
+  border-color: var(--tblr-primary);
+  min-height: 316px;
+}
+
+.dropdown-menu-demo {
+  display: inline-block;
+  width: 100%;
+  position: relative;
+  top: 0;
+  margin-bottom: 1rem !important;
+}
+
+.demo-icon-preview {
+  position: -webkit-sticky;
+  position: sticky;
+  top: 0;
+}
+.demo-icon-preview svg,
+.demo-icon-preview i {
+  width: 15rem;
+  height: 15rem;
+  font-size: 15rem;
+  stroke-width: 1.5;
+  margin: 0 auto;
+  display: block;
+}
+@media (max-width: 575.98px) {
+  .demo-icon-preview svg,
+  .demo-icon-preview i {
+    width: 10rem;
+    height: 10rem;
+    font-size: 10rem;
+  }
+}
+
+.demo-icon-preview-icon pre {
+  margin: 0;
+  -webkit-user-select: all;
+     -moz-user-select: all;
+          user-select: all;
+}
+
+.demo-dividers > p {
+  opacity: 0.2;
+  -webkit-user-select: none;
+     -moz-user-select: none;
+      -ms-user-select: none;
+          user-select: none;
+}
+
+.demo-icons-list {
+  display: flex;
+  flex-wrap: wrap;
+  padding: 0;
+  margin: 0 0 -1px -2px;
+  list-style: none;
+}
+.demo-icons-list > * {
+  flex: 1 0 4rem;
+}
+
+.demo-icons-list-wrap {
+  overflow: hidden;
+}
+
+.demo-icons-list-item {
+  display: flex;
+  flex-direction: column;
+  align-items: center;
+  justify-content: center;
+  aspect-ratio: 1;
+  text-align: center;
+  padding: 0.5rem;
+  border-left: var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color);
+  border-bottom: var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color);
+  color: inherit;
+  cursor: pointer;
+}
+.demo-icons-list-item .icon {
+  width: 1.5rem;
+  height: 1.5rem;
+  font-size: 1.5rem;
+}
+.demo-icons-list-item:hover {
+  text-decoration: none;
+}
+
+.settings-btn {
+  position: fixed;
+  left: -1px;
+  top: 10rem;
+  border-top-left-radius: 0;
+  border-bottom-left-radius: 0;
+  box-shadow: rgba(var(--tblr-body-color-rgb), 0.04) 0 2px 4px 0;
+}
+
+.settings-scheme {
+  display: inline-block;
+  border-radius: 50%;
+  height: 3rem;
+  width: 3rem;
+  position: relative;
+  border: var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color);
+  box-shadow: rgba(var(--tblr-body-color-rgb), 0.04) 0 2px 4px 0;
+}
+.settings-scheme-light {
+  background: linear-gradient(-135deg, #ffffff 50%, #fcfdfe 50%);
+}
+.settings-scheme-mixed {
+  background-image: linear-gradient(-135deg, #182433 50%, #fff 50%);
+}
+.settings-scheme-transparent {
+  background: #fcfdfe;
+}
+.settings-scheme-dark {
+  background: #182433;
+}
+.settings-scheme-colored {
+  background-image: linear-gradient(-135deg, var(--tblr-primary) 50%, #fcfdfe 50%);
+}

Різницю між файлами не показано, бо вона завелика
+ 8 - 0
public/css/demo.rtl.min.css


+ 59 - 27
public/css/meters.css → public/css/dweebui.css

@@ -92,33 +92,65 @@
   .nostripes > span::after {
     background-image: none;
   }
+
+
+
+  .container-stamp {
+    --tblr-stamp-size: 8rem;
+    position: absolute;
+    bottom: 0;
+    left: 0;
+    width: calc(var(--tblr-stamp-size) * 1);
+    height: calc(var(--tblr-stamp-size) * 1);
+    max-height: 100%;
+    border-top-right-radius: 4px;
+    opacity: 0.2;
+    overflow: hidden;
+    pointer-events: none;
+  }
   
-  .border {
-    --tblr-card-spacer-y: 1rem;
-    --tblr-card-spacer-x: 1.5rem;
-    --tblr-card-title-spacer-y: 1.25rem;
-    --tblr-card-border-width: var(--tblr-border-width);
-    --tblr-card-border-color: var(--tblr-border-color);
-    --tblr-card-border-radius: var(--tblr-border-radius);
-    --tblr-card-box-shadow: var(--tblr-shadow-card);
-    --tblr-card-inner-border-radius: calc(var(--tblr-border-radius) - (var(--tblr-border-width)));
-    --tblr-card-cap-padding-y: 1rem;
-    --tblr-card-cap-padding-x: 1.5rem;
-    --tblr-card-cap-bg: var(--tblr-bg-surface-tertiary);
-    --tblr-card-cap-color: inherit;
-    --tblr-card-color: inherit;
-    --tblr-card-bg: var(--tblr-bg-surface);
-    --tblr-card-img-overlay-padding: 1rem;
-    --tblr-card-group-margin: 1.5rem;
-    position: relative;
+  .container-action {
+    padding: 0;
+    border: 0;
+    color: var(--tblr-secondary);
+    display: inline-flex;
+    width: 1.5rem;
+    height: 1.5rem;
+    align-items: center;
+    justify-content: center;
+    border-radius: var(--tblr-border-radius);
+    background: transparent;
+  }
+  .container-action:after {
+    content: none;
+  }
+  .container-action:focus {
+    outline: none;
+    box-shadow: none;
+  }
+  .container-action:hover, .container-action.show {
+    color: var(--tblr-body-color);
+    background: var(--tblr-active-bg);
+  }
+  .container-action.show {
+    color: var(--tblr-primary);
+  }
+  .container-action .icon {
+    margin: 0;
+    width: 1.25rem;
+    height: 1.25rem;
+    font-size: 1.25rem;
+    stroke-width: 1;
+  }
+  
+  .container-actions {
     display: flex;
-    flex-direction: column;
-    min-width: 0;
-    height: var(--tblr-card-height);
-    word-wrap: break-word;
-    background-color: var(--tblr-card-bg);
-    background-clip: border-box;
-    border: var(--tblr-card-border-width) solid var(--tblr-card-border-color);
-    border-radius: var(--tblr-card-border-radius);
+  }
 
-}
+  .modal-content {
+    border: 1px solid grey;
+  }
+  
+  .accordion-item {
+    border: 1px solid grey;
+  }

+ 10 - 0
public/css/tabler-social.css

@@ -0,0 +1,10 @@
+/*!
+* Tabler v1.0.0-beta20 (https://tabler.io)
+* @version 1.0.0-beta20
+* @link https://tabler.io
+* Copyright 2018-2023 The Tabler Authors
+* Copyright 2018-2023 codecalm.net Paweł Kuna
+* Licensed under MIT (https://github.com/tabler/tabler/blob/master/LICENSE)
+*/
+/* prettier-ignore */
+/* prettier-ignore */

+ 8 - 0
public/css/tabler-social.min.css

@@ -0,0 +1,8 @@
+/*!
+* Tabler v1.0.0-beta20 (https://tabler.io)
+* @version 1.0.0-beta20
+* @link https://tabler.io
+* Copyright 2018-2023 The Tabler Authors
+* Copyright 2018-2023 codecalm.net Paweł Kuna
+* Licensed under MIT (https://github.com/tabler/tabler/blob/master/LICENSE)
+*/

+ 10 - 0
public/css/tabler-social.rtl.css

@@ -0,0 +1,10 @@
+/*!
+* Tabler v1.0.0-beta20 (https://tabler.io)
+* @version 1.0.0-beta20
+* @link https://tabler.io
+* Copyright 2018-2023 The Tabler Authors
+* Copyright 2018-2023 codecalm.net Paweł Kuna
+* Licensed under MIT (https://github.com/tabler/tabler/blob/master/LICENSE)
+*/
+/* prettier-ignore */
+/* prettier-ignore */

+ 8 - 0
public/css/tabler-social.rtl.min.css

@@ -0,0 +1,8 @@
+/*!
+* Tabler v1.0.0-beta20 (https://tabler.io)
+* @version 1.0.0-beta20
+* @link https://tabler.io
+* Copyright 2018-2023 The Tabler Authors
+* Copyright 2018-2023 codecalm.net Paweł Kuna
+* Licensed under MIT (https://github.com/tabler/tabler/blob/master/LICENSE)
+*/

+ 25813 - 0
public/css/tabler.css

@@ -0,0 +1,25813 @@
+/*!
+* Tabler v1.0.0-beta20 (https://tabler.io)
+* @version 1.0.0-beta20
+* @link https://tabler.io
+* Copyright 2018-2023 The Tabler Authors
+* Copyright 2018-2023 codecalm.net Paweł Kuna
+* Licensed under MIT (https://github.com/tabler/tabler/blob/master/LICENSE)
+*/
+@charset "UTF-8";
+/* prettier-ignore */
+/* prettier-ignore */
+:root,
+[data-bs-theme=light] {
+  --tblr-blue: #0054a6;
+  --tblr-indigo: #4263eb;
+  --tblr-purple: #ae3ec9;
+  --tblr-pink: #d6336c;
+  --tblr-red: #d63939;
+  --tblr-orange: #f76707;
+  --tblr-yellow: #f59f00;
+  --tblr-green: #2fb344;
+  --tblr-teal: #0ca678;
+  --tblr-cyan: #17a2b8;
+  --tblr-black: #000000;
+  --tblr-white: #ffffff;
+  --tblr-gray: #667382;
+  --tblr-gray-dark: #182433;
+  --tblr-gray-100: #f6f8fb;
+  --tblr-gray-200: #eef1f4;
+  --tblr-gray-300: #dadfe5;
+  --tblr-gray-400: #bbc3cd;
+  --tblr-gray-500: #929dab;
+  --tblr-gray-600: #667382;
+  --tblr-gray-700: #3a4859;
+  --tblr-gray-800: #182433;
+  --tblr-gray-900: #040a11;
+  --tblr-primary: #0054a6;
+  --tblr-secondary: #667382;
+  --tblr-success: #2fb344;
+  --tblr-info: #4299e1;
+  --tblr-warning: #f76707;
+  --tblr-danger: #d63939;
+  --tblr-light: #fcfdfe;
+  --tblr-dark: #182433;
+  --tblr-muted: #667382;
+  --tblr-blue: #0054a6;
+  --tblr-azure: #4299e1;
+  --tblr-indigo: #4263eb;
+  --tblr-purple: #ae3ec9;
+  --tblr-pink: #d6336c;
+  --tblr-red: #d63939;
+  --tblr-orange: #f76707;
+  --tblr-yellow: #f59f00;
+  --tblr-lime: #74b816;
+  --tblr-green: #2fb344;
+  --tblr-teal: #0ca678;
+  --tblr-cyan: #17a2b8;
+  --tblr-facebook: #1877f2;
+  --tblr-twitter: #1da1f2;
+  --tblr-linkedin: #0a66c2;
+  --tblr-google: #dc4e41;
+  --tblr-youtube: #ff0000;
+  --tblr-vimeo: #1ab7ea;
+  --tblr-dribbble: #ea4c89;
+  --tblr-github: #181717;
+  --tblr-instagram: #e4405f;
+  --tblr-pinterest: #bd081c;
+  --tblr-vk: #6383a8;
+  --tblr-rss: #ffa500;
+  --tblr-flickr: #0063dc;
+  --tblr-bitbucket: #0052cc;
+  --tblr-tabler: #0054a6;
+  --tblr-primary-rgb: 0, 84, 166;
+  --tblr-secondary-rgb: 102, 115, 130;
+  --tblr-success-rgb: 47, 179, 68;
+  --tblr-info-rgb: 66, 153, 225;
+  --tblr-warning-rgb: 247, 103, 7;
+  --tblr-danger-rgb: 214, 57, 57;
+  --tblr-light-rgb: 252, 253, 254;
+  --tblr-dark-rgb: 24, 36, 51;
+  --tblr-muted-rgb: 102, 115, 130;
+  --tblr-blue-rgb: 0, 84, 166;
+  --tblr-azure-rgb: 66, 153, 225;
+  --tblr-indigo-rgb: 66, 99, 235;
+  --tblr-purple-rgb: 174, 62, 201;
+  --tblr-pink-rgb: 214, 51, 108;
+  --tblr-red-rgb: 214, 57, 57;
+  --tblr-orange-rgb: 247, 103, 7;
+  --tblr-yellow-rgb: 245, 159, 0;
+  --tblr-lime-rgb: 116, 184, 22;
+  --tblr-green-rgb: 47, 179, 68;
+  --tblr-teal-rgb: 12, 166, 120;
+  --tblr-cyan-rgb: 23, 162, 184;
+  --tblr-facebook-rgb: 24, 119, 242;
+  --tblr-twitter-rgb: 29, 161, 242;
+  --tblr-linkedin-rgb: 10, 102, 194;
+  --tblr-google-rgb: 220, 78, 65;
+  --tblr-youtube-rgb: 255, 0, 0;
+  --tblr-vimeo-rgb: 26, 183, 234;
+  --tblr-dribbble-rgb: 234, 76, 137;
+  --tblr-github-rgb: 24, 23, 23;
+  --tblr-instagram-rgb: 228, 64, 95;
+  --tblr-pinterest-rgb: 189, 8, 28;
+  --tblr-vk-rgb: 99, 131, 168;
+  --tblr-rss-rgb: 255, 165, 0;
+  --tblr-flickr-rgb: 0, 99, 220;
+  --tblr-bitbucket-rgb: 0, 82, 204;
+  --tblr-tabler-rgb: 0, 84, 166;
+  --tblr-primary-text-emphasis: #002242;
+  --tblr-secondary-text-emphasis: #292e34;
+  --tblr-success-text-emphasis: #13481b;
+  --tblr-info-text-emphasis: #1a3d5a;
+  --tblr-warning-text-emphasis: #632903;
+  --tblr-danger-text-emphasis: #561717;
+  --tblr-light-text-emphasis: #3a4859;
+  --tblr-dark-text-emphasis: #3a4859;
+  --tblr-primary-bg-subtle: #ccdded;
+  --tblr-secondary-bg-subtle: #e0e3e6;
+  --tblr-success-bg-subtle: #d5f0da;
+  --tblr-info-bg-subtle: #d9ebf9;
+  --tblr-warning-bg-subtle: #fde1cd;
+  --tblr-danger-bg-subtle: #f7d7d7;
+  --tblr-light-bg-subtle: #fbfcfd;
+  --tblr-dark-bg-subtle: #bbc3cd;
+  --tblr-primary-border-subtle: #99bbdb;
+  --tblr-secondary-border-subtle: #c2c7cd;
+  --tblr-success-border-subtle: #ace1b4;
+  --tblr-info-border-subtle: #b3d6f3;
+  --tblr-warning-border-subtle: #fcc29c;
+  --tblr-danger-border-subtle: #efb0b0;
+  --tblr-light-border-subtle: #eef1f4;
+  --tblr-dark-border-subtle: #929dab;
+  --tblr-white-rgb: 255, 255, 255;
+  --tblr-black-rgb: 0, 0, 0;
+  --tblr-font-sans-serif:    -apple-system, BlinkMacSystemFont, San Francisco, Segoe UI, Roboto, Helvetica Neue, sans-serif;
+  --tblr-font-monospace:  Menlo, Monaco, Consolas, Liberation Mono, Courier New, monospace;
+  --tblr-gradient: linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));
+  --tblr-body-font-family: var(--tblr-font-sans-serif);
+  --tblr-body-font-size: 0.875rem;
+  --tblr-body-font-weight: 400;
+  --tblr-body-line-height: 1.4285714286;
+  --tblr-body-color: #182433;
+  --tblr-body-color-rgb: 24, 36, 51;
+  --tblr-body-bg: #f6f8fb;
+  --tblr-body-bg-rgb: 246, 248, 251;
+  --tblr-emphasis-color: #182433;
+  --tblr-emphasis-color-rgb: 24, 36, 51;
+  --tblr-secondary-color: rgba(24, 36, 51, 0.75);
+  --tblr-secondary-color-rgb: 24, 36, 51;
+  --tblr-secondary-bg: #eef1f4;
+  --tblr-secondary-bg-rgb: 238, 241, 244;
+  --tblr-tertiary-color: rgba(24, 36, 51, 0.5);
+  --tblr-tertiary-color-rgb: 24, 36, 51;
+  --tblr-tertiary-bg: #f6f8fb;
+  --tblr-tertiary-bg-rgb: 246, 248, 251;
+  --tblr-heading-color: inherit;
+  --tblr-link-color: #0054a6;
+  --tblr-link-color-rgb: 0, 84, 166;
+  --tblr-link-decoration: none;
+  --tblr-link-hover-color: #004385;
+  --tblr-link-hover-color-rgb: 0, 67, 133;
+  --tblr-link-hover-decoration: underline;
+  --tblr-code-color: var(--tblr-gray-600);
+  --tblr-highlight-bg: #fdeccc;
+  --tblr-border-width: 1px;
+  --tblr-border-style: solid;
+  --tblr-border-color: #dadfe5;
+  --tblr-border-color-translucent: rgba(4, 32, 69, 0.14);
+  --tblr-border-radius: 4px;
+  --tblr-border-radius-sm: 2px;
+  --tblr-border-radius-lg: 8px;
+  --tblr-border-radius-xl: 1rem;
+  --tblr-border-radius-xxl: 2rem;
+  --tblr-border-radius-2xl: var(--tblr-border-radius-xxl);
+  --tblr-border-radius-pill: 100rem;
+  --tblr-box-shadow: rgba(var(--tblr-body-color-rgb), 0.04) 0 2px 4px 0;
+  --tblr-box-shadow-sm: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075);
+  --tblr-box-shadow-lg: 0 1rem 3rem rgba(0, 0, 0, 0.175);
+  --tblr-box-shadow-inset: 0 0 transparent;
+  --tblr-focus-ring-width: 0.25rem;
+  --tblr-focus-ring-opacity: 0.25;
+  --tblr-focus-ring-color: rgba(var(--tblr-primary-rgb), 0.25);
+  --tblr-form-valid-color: #2fb344;
+  --tblr-form-valid-border-color: #2fb344;
+  --tblr-form-invalid-color: #d63939;
+  --tblr-form-invalid-border-color: #d63939;
+}
+
+[data-bs-theme=dark], body[data-bs-theme=dark] [data-bs-theme=light] {
+  color-scheme: dark;
+  --tblr-body-color: #fcfdfe;
+  --tblr-body-color-rgb: 252, 253, 254;
+  --tblr-body-bg: #040a11;
+  --tblr-body-bg-rgb: 4, 10, 17;
+  --tblr-emphasis-color: #ffffff;
+  --tblr-emphasis-color-rgb: 255, 255, 255;
+  --tblr-secondary-color: rgba(252, 253, 254, 0.75);
+  --tblr-secondary-color-rgb: 252, 253, 254;
+  --tblr-secondary-bg: #182433;
+  --tblr-secondary-bg-rgb: 24, 36, 51;
+  --tblr-tertiary-color: rgba(252, 253, 254, 0.5);
+  --tblr-tertiary-color-rgb: 252, 253, 254;
+  --tblr-tertiary-bg: #0e1722;
+  --tblr-tertiary-bg-rgb: 14, 23, 34;
+  --tblr-primary-text-emphasis: #6698ca;
+  --tblr-secondary-text-emphasis: #a3abb4;
+  --tblr-success-text-emphasis: #82d18f;
+  --tblr-info-text-emphasis: #8ec2ed;
+  --tblr-warning-text-emphasis: #faa46a;
+  --tblr-danger-text-emphasis: #e68888;
+  --tblr-light-text-emphasis: #f6f8fb;
+  --tblr-dark-text-emphasis: #dadfe5;
+  --tblr-primary-bg-subtle: #001121;
+  --tblr-secondary-bg-subtle: #14171a;
+  --tblr-success-bg-subtle: #09240e;
+  --tblr-info-bg-subtle: #0d1f2d;
+  --tblr-warning-bg-subtle: #311501;
+  --tblr-danger-bg-subtle: #2b0b0b;
+  --tblr-light-bg-subtle: #182433;
+  --tblr-dark-bg-subtle: #0c121a;
+  --tblr-primary-border-subtle: #003264;
+  --tblr-secondary-border-subtle: #3d454e;
+  --tblr-success-border-subtle: #1c6b29;
+  --tblr-info-border-subtle: #285c87;
+  --tblr-warning-border-subtle: #943e04;
+  --tblr-danger-border-subtle: #802222;
+  --tblr-light-border-subtle: #3a4859;
+  --tblr-dark-border-subtle: #182433;
+  --tblr-heading-color: inherit;
+  --tblr-link-color: #6698ca;
+  --tblr-link-hover-color: #85add5;
+  --tblr-link-color-rgb: 102, 152, 202;
+  --tblr-link-hover-color-rgb: 133, 173, 213;
+  --tblr-code-color: var(--tblr-gray-300);
+  --tblr-border-color: #1f2e41;
+  --tblr-border-color-translucent: rgba(72, 110, 149, 0.14);
+  --tblr-form-valid-color: #82d18f;
+  --tblr-form-valid-border-color: #82d18f;
+  --tblr-form-invalid-color: #e68888;
+  --tblr-form-invalid-border-color: #e68888;
+}
+
+*,
+*::before,
+*::after {
+  box-sizing: border-box;
+}
+
+@media (prefers-reduced-motion: no-preference) {
+  :root {
+    scroll-behavior: smooth;
+  }
+}
+
+body {
+  margin: 0;
+  font-family: var(--tblr-body-font-family);
+  font-size: var(--tblr-body-font-size);
+  font-weight: var(--tblr-body-font-weight);
+  line-height: var(--tblr-body-line-height);
+  color: var(--tblr-body-color);
+  text-align: var(--tblr-body-text-align);
+  background-color: var(--tblr-body-bg);
+  -webkit-text-size-adjust: 100%;
+  -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
+}
+
+hr, .hr {
+  margin: 2rem 0;
+  color: inherit;
+  border: 0;
+  border-top: var(--tblr-border-width) solid;
+  opacity: 0.16;
+}
+
+h6, .h6, h5, .h5, h4, .h4, h3, .h3, h2, .h2, h1, .h1 {
+  margin-top: 0;
+  margin-bottom: var(--tblr-spacer);
+  font-weight: var(--tblr-font-weight-bold);
+  line-height: 1.2;
+  color: var(--tblr-heading-color);
+}
+
+h1, .h1 {
+  font-size: 1.5rem;
+}
+
+h2, .h2 {
+  font-size: 1.25rem;
+}
+
+h3, .h3 {
+  font-size: 1rem;
+}
+
+h4, .h4 {
+  font-size: 0.875rem;
+}
+
+h5, .h5 {
+  font-size: 0.75rem;
+}
+
+h6, .h6 {
+  font-size: 0.625rem;
+}
+
+p {
+  margin-top: 0;
+  margin-bottom: 1rem;
+}
+
+abbr[title] {
+  -webkit-text-decoration: underline dotted;
+          text-decoration: underline dotted;
+  cursor: help;
+  -webkit-text-decoration-skip-ink: none;
+          text-decoration-skip-ink: none;
+}
+
+address {
+  margin-bottom: 1rem;
+  font-style: normal;
+  line-height: inherit;
+}
+
+ol,
+ul {
+  padding-left: 2rem;
+}
+
+ol,
+ul,
+dl {
+  margin-top: 0;
+  margin-bottom: 1rem;
+}
+
+ol ol,
+ul ul,
+ol ul,
+ul ol {
+  margin-bottom: 0;
+}
+
+dt {
+  font-weight: 600;
+}
+
+dd {
+  margin-bottom: 0.5rem;
+  margin-left: 0;
+}
+
+blockquote {
+  margin: 0 0 1rem;
+}
+
+b,
+strong {
+  font-weight: bolder;
+}
+
+small, .small {
+  font-size: 85.714285%;
+}
+
+mark, .mark {
+  padding: 0.1875em;
+  background-color: var(--tblr-highlight-bg);
+}
+
+sub,
+sup {
+  position: relative;
+  font-size: 0.75em;
+  line-height: 0;
+  vertical-align: baseline;
+}
+
+sub {
+  bottom: -0.25em;
+}
+
+sup {
+  top: -0.5em;
+}
+
+a {
+  color: rgba(var(--tblr-link-color-rgb), var(--tblr-link-opacity, 1));
+  text-decoration: none;
+}
+a:hover {
+  --tblr-link-color-rgb: var(--tblr-link-hover-color-rgb);
+  text-decoration: underline;
+}
+
+a:not([href]):not([class]), a:not([href]):not([class]):hover {
+  color: inherit;
+  text-decoration: none;
+}
+
+pre,
+code,
+kbd,
+samp {
+  font-family: var(--tblr-font-monospace);
+  font-size: 1em;
+}
+
+pre {
+  display: block;
+  margin-top: 0;
+  margin-bottom: 1rem;
+  overflow: auto;
+  font-size: 85.714285%;
+  color: var(--tblr-light);
+}
+pre code {
+  font-size: inherit;
+  color: inherit;
+  word-break: normal;
+}
+
+code {
+  font-size: 85.714285%;
+  color: var(--tblr-code-color);
+  word-wrap: break-word;
+}
+a > code {
+  color: inherit;
+}
+
+kbd {
+  padding: 0.25rem 0.5rem;
+  font-size: var(--tblr-font-size-h5);
+  color: var(--tblr-text-secondary-dark);
+  background-color: var(--tblr-code-bg);
+  border-radius: 2px;
+}
+kbd kbd {
+  padding: 0;
+  font-size: 1em;
+}
+
+figure {
+  margin: 0 0 1rem;
+}
+
+img,
+svg {
+  vertical-align: middle;
+}
+
+table {
+  caption-side: bottom;
+  border-collapse: collapse;
+}
+
+caption {
+  padding-top: 0.75rem;
+  padding-bottom: 0.75rem;
+  color: var(--tblr-secondary-color);
+  text-align: left;
+}
+
+th {
+  text-align: inherit;
+  text-align: -webkit-match-parent;
+}
+
+thead,
+tbody,
+tfoot,
+tr,
+td,
+th {
+  border-color: inherit;
+  border-style: solid;
+  border-width: 0;
+}
+
+label {
+  display: inline-block;
+}
+
+button {
+  border-radius: 0;
+}
+
+button:focus:not(:focus-visible) {
+  outline: 0;
+}
+
+input,
+button,
+select,
+optgroup,
+textarea {
+  margin: 0;
+  font-family: inherit;
+  font-size: inherit;
+  line-height: inherit;
+}
+
+button,
+select {
+  text-transform: none;
+}
+
+[role=button] {
+  cursor: pointer;
+}
+
+select {
+  word-wrap: normal;
+}
+select:disabled {
+  opacity: 1;
+}
+
+[list]:not([type=date]):not([type=datetime-local]):not([type=month]):not([type=week]):not([type=time])::-webkit-calendar-picker-indicator {
+  display: none !important;
+}
+
+button,
+[type=button],
+[type=reset],
+[type=submit] {
+  -webkit-appearance: button;
+}
+button:not(:disabled),
+[type=button]:not(:disabled),
+[type=reset]:not(:disabled),
+[type=submit]:not(:disabled) {
+  cursor: pointer;
+}
+
+::-moz-focus-inner {
+  padding: 0;
+  border-style: none;
+}
+
+textarea {
+  resize: vertical;
+}
+
+fieldset {
+  min-width: 0;
+  padding: 0;
+  margin: 0;
+  border: 0;
+}
+
+legend {
+  float: left;
+  width: 100%;
+  padding: 0;
+  margin-bottom: 0.5rem;
+  font-size: 1.5rem;
+  line-height: inherit;
+}
+legend + * {
+  clear: left;
+}
+
+::-webkit-datetime-edit-fields-wrapper,
+::-webkit-datetime-edit-text,
+::-webkit-datetime-edit-minute,
+::-webkit-datetime-edit-hour-field,
+::-webkit-datetime-edit-day-field,
+::-webkit-datetime-edit-month-field,
+::-webkit-datetime-edit-year-field {
+  padding: 0;
+}
+
+::-webkit-inner-spin-button {
+  height: auto;
+}
+
+[type=search] {
+  -webkit-appearance: textfield;
+  outline-offset: -2px;
+}
+
+/* rtl:raw:
+[type="tel"],
+[type="url"],
+[type="email"],
+[type="number"] {
+  direction: ltr;
+}
+*/
+::-webkit-search-decoration {
+  -webkit-appearance: none;
+}
+
+::-webkit-color-swatch-wrapper {
+  padding: 0;
+}
+
+::-webkit-file-upload-button {
+  font: inherit;
+  -webkit-appearance: button;
+}
+
+::file-selector-button {
+  font: inherit;
+  -webkit-appearance: button;
+}
+
+output {
+  display: inline-block;
+}
+
+iframe {
+  border: 0;
+}
+
+summary {
+  display: list-item;
+  cursor: pointer;
+}
+
+progress {
+  vertical-align: baseline;
+}
+
+[hidden] {
+  display: none !important;
+}
+
+.lead {
+  font-size: 0.875rem;
+  font-weight: var(--tblr-font-weight-normal);
+}
+
+.display-1 {
+  font-size: 5rem;
+  font-weight: 300;
+  line-height: 1.2;
+}
+
+.display-2 {
+  font-size: 4.5rem;
+  font-weight: 300;
+  line-height: 1.2;
+}
+
+.display-3 {
+  font-size: 4rem;
+  font-weight: 300;
+  line-height: 1.2;
+}
+
+.display-4 {
+  font-size: 3.5rem;
+  font-weight: 300;
+  line-height: 1.2;
+}
+
+.display-5 {
+  font-size: 3rem;
+  font-weight: 300;
+  line-height: 1.2;
+}
+
+.display-6 {
+  font-size: 2rem;
+  font-weight: 300;
+  line-height: 1.2;
+}
+
+.list-unstyled {
+  padding-left: 0;
+  list-style: none;
+}
+
+.list-inline {
+  padding-left: 0;
+  list-style: none;
+}
+
+.list-inline-item {
+  display: inline-block;
+}
+.list-inline-item:not(:last-child) {
+  margin-right: 0.5rem;
+}
+
+.initialism {
+  font-size: 85.714285%;
+  text-transform: uppercase;
+}
+
+.blockquote {
+  margin-bottom: 1rem;
+  font-size: 0.875rem;
+}
+.blockquote > :last-child {
+  margin-bottom: 0;
+}
+
+.blockquote-footer {
+  margin-top: -1rem;
+  margin-bottom: 1rem;
+  font-size: 85.714285%;
+  color: #667382;
+}
+.blockquote-footer::before {
+  content: "— ";
+}
+
+.img-fluid {
+  max-width: 100%;
+  height: auto;
+}
+
+.img-thumbnail {
+  padding: 0.25rem;
+  background-color: var(--tblr-body-bg);
+  border: var(--tblr-border-width) solid var(--tblr-border-color);
+  border-radius: var(--tblr-border-radius);
+  box-shadow: var(--tblr-box-shadow-sm);
+  max-width: 100%;
+  height: auto;
+}
+
+.figure {
+  display: inline-block;
+}
+
+.figure-img {
+  margin-bottom: 0.5rem;
+  line-height: 1;
+}
+
+.figure-caption {
+  font-size: 85.714285%;
+  color: var(--tblr-secondary-color);
+}
+
+.container,
+.container-fluid,
+.container-xxl,
+.container-xl,
+.container-lg,
+.container-md,
+.container-sm {
+  --tblr-gutter-x: calc(var(--tblr-page-padding) * 2);
+  --tblr-gutter-y: 0;
+  width: 100%;
+  padding-right: calc(var(--tblr-gutter-x) * 0.5);
+  padding-left: calc(var(--tblr-gutter-x) * 0.5);
+  margin-right: auto;
+  margin-left: auto;
+}
+
+@media (min-width: 576px) {
+  .container-sm, .container {
+    max-width: 540px;
+  }
+}
+@media (min-width: 768px) {
+  .container-md, .container-sm, .container {
+    max-width: 720px;
+  }
+}
+@media (min-width: 992px) {
+  .container-lg, .container-md, .container-sm, .container {
+    max-width: 960px;
+  }
+}
+@media (min-width: 1200px) {
+  .container-xl, .container-lg, .container-md, .container-sm, .container {
+    max-width: 1140px;
+  }
+}
+@media (min-width: 1400px) {
+  .container-xxl, .container-xl, .container-lg, .container-md, .container-sm, .container {
+    max-width: 1320px;
+  }
+}
+:root {
+  --tblr-breakpoint-xs: 0;
+  --tblr-breakpoint-sm: 576px;
+  --tblr-breakpoint-md: 768px;
+  --tblr-breakpoint-lg: 992px;
+  --tblr-breakpoint-xl: 1200px;
+  --tblr-breakpoint-xxl: 1400px;
+}
+
+.row {
+  --tblr-gutter-x: var(--tblr-page-padding);
+  --tblr-gutter-y: 0;
+  display: flex;
+  flex-wrap: wrap;
+  margin-top: calc(-1 * var(--tblr-gutter-y));
+  margin-right: calc(-0.5 * var(--tblr-gutter-x));
+  margin-left: calc(-0.5 * var(--tblr-gutter-x));
+}
+.row > * {
+  flex-shrink: 0;
+  width: 100%;
+  max-width: 100%;
+  padding-right: calc(var(--tblr-gutter-x) * 0.5);
+  padding-left: calc(var(--tblr-gutter-x) * 0.5);
+  margin-top: var(--tblr-gutter-y);
+}
+
+.grid {
+  display: grid;
+  grid-template-rows: repeat(var(--tblr-rows, 1), 1fr);
+  grid-template-columns: repeat(var(--tblr-columns, 12), 1fr);
+  gap: var(--tblr-gap, var(--tblr-page-padding));
+}
+.grid .g-col-1 {
+  grid-column: auto/span 1;
+}
+.grid .g-col-2 {
+  grid-column: auto/span 2;
+}
+.grid .g-col-3 {
+  grid-column: auto/span 3;
+}
+.grid .g-col-4 {
+  grid-column: auto/span 4;
+}
+.grid .g-col-5 {
+  grid-column: auto/span 5;
+}
+.grid .g-col-6 {
+  grid-column: auto/span 6;
+}
+.grid .g-col-7 {
+  grid-column: auto/span 7;
+}
+.grid .g-col-8 {
+  grid-column: auto/span 8;
+}
+.grid .g-col-9 {
+  grid-column: auto/span 9;
+}
+.grid .g-col-10 {
+  grid-column: auto/span 10;
+}
+.grid .g-col-11 {
+  grid-column: auto/span 11;
+}
+.grid .g-col-12 {
+  grid-column: auto/span 12;
+}
+.grid .g-start-1 {
+  grid-column-start: 1;
+}
+.grid .g-start-2 {
+  grid-column-start: 2;
+}
+.grid .g-start-3 {
+  grid-column-start: 3;
+}
+.grid .g-start-4 {
+  grid-column-start: 4;
+}
+.grid .g-start-5 {
+  grid-column-start: 5;
+}
+.grid .g-start-6 {
+  grid-column-start: 6;
+}
+.grid .g-start-7 {
+  grid-column-start: 7;
+}
+.grid .g-start-8 {
+  grid-column-start: 8;
+}
+.grid .g-start-9 {
+  grid-column-start: 9;
+}
+.grid .g-start-10 {
+  grid-column-start: 10;
+}
+.grid .g-start-11 {
+  grid-column-start: 11;
+}
+@media (min-width: 576px) {
+  .grid .g-col-sm-1 {
+    grid-column: auto/span 1;
+  }
+  .grid .g-col-sm-2 {
+    grid-column: auto/span 2;
+  }
+  .grid .g-col-sm-3 {
+    grid-column: auto/span 3;
+  }
+  .grid .g-col-sm-4 {
+    grid-column: auto/span 4;
+  }
+  .grid .g-col-sm-5 {
+    grid-column: auto/span 5;
+  }
+  .grid .g-col-sm-6 {
+    grid-column: auto/span 6;
+  }
+  .grid .g-col-sm-7 {
+    grid-column: auto/span 7;
+  }
+  .grid .g-col-sm-8 {
+    grid-column: auto/span 8;
+  }
+  .grid .g-col-sm-9 {
+    grid-column: auto/span 9;
+  }
+  .grid .g-col-sm-10 {
+    grid-column: auto/span 10;
+  }
+  .grid .g-col-sm-11 {
+    grid-column: auto/span 11;
+  }
+  .grid .g-col-sm-12 {
+    grid-column: auto/span 12;
+  }
+  .grid .g-start-sm-1 {
+    grid-column-start: 1;
+  }
+  .grid .g-start-sm-2 {
+    grid-column-start: 2;
+  }
+  .grid .g-start-sm-3 {
+    grid-column-start: 3;
+  }
+  .grid .g-start-sm-4 {
+    grid-column-start: 4;
+  }
+  .grid .g-start-sm-5 {
+    grid-column-start: 5;
+  }
+  .grid .g-start-sm-6 {
+    grid-column-start: 6;
+  }
+  .grid .g-start-sm-7 {
+    grid-column-start: 7;
+  }
+  .grid .g-start-sm-8 {
+    grid-column-start: 8;
+  }
+  .grid .g-start-sm-9 {
+    grid-column-start: 9;
+  }
+  .grid .g-start-sm-10 {
+    grid-column-start: 10;
+  }
+  .grid .g-start-sm-11 {
+    grid-column-start: 11;
+  }
+}
+@media (min-width: 768px) {
+  .grid .g-col-md-1 {
+    grid-column: auto/span 1;
+  }
+  .grid .g-col-md-2 {
+    grid-column: auto/span 2;
+  }
+  .grid .g-col-md-3 {
+    grid-column: auto/span 3;
+  }
+  .grid .g-col-md-4 {
+    grid-column: auto/span 4;
+  }
+  .grid .g-col-md-5 {
+    grid-column: auto/span 5;
+  }
+  .grid .g-col-md-6 {
+    grid-column: auto/span 6;
+  }
+  .grid .g-col-md-7 {
+    grid-column: auto/span 7;
+  }
+  .grid .g-col-md-8 {
+    grid-column: auto/span 8;
+  }
+  .grid .g-col-md-9 {
+    grid-column: auto/span 9;
+  }
+  .grid .g-col-md-10 {
+    grid-column: auto/span 10;
+  }
+  .grid .g-col-md-11 {
+    grid-column: auto/span 11;
+  }
+  .grid .g-col-md-12 {
+    grid-column: auto/span 12;
+  }
+  .grid .g-start-md-1 {
+    grid-column-start: 1;
+  }
+  .grid .g-start-md-2 {
+    grid-column-start: 2;
+  }
+  .grid .g-start-md-3 {
+    grid-column-start: 3;
+  }
+  .grid .g-start-md-4 {
+    grid-column-start: 4;
+  }
+  .grid .g-start-md-5 {
+    grid-column-start: 5;
+  }
+  .grid .g-start-md-6 {
+    grid-column-start: 6;
+  }
+  .grid .g-start-md-7 {
+    grid-column-start: 7;
+  }
+  .grid .g-start-md-8 {
+    grid-column-start: 8;
+  }
+  .grid .g-start-md-9 {
+    grid-column-start: 9;
+  }
+  .grid .g-start-md-10 {
+    grid-column-start: 10;
+  }
+  .grid .g-start-md-11 {
+    grid-column-start: 11;
+  }
+}
+@media (min-width: 992px) {
+  .grid .g-col-lg-1 {
+    grid-column: auto/span 1;
+  }
+  .grid .g-col-lg-2 {
+    grid-column: auto/span 2;
+  }
+  .grid .g-col-lg-3 {
+    grid-column: auto/span 3;
+  }
+  .grid .g-col-lg-4 {
+    grid-column: auto/span 4;
+  }
+  .grid .g-col-lg-5 {
+    grid-column: auto/span 5;
+  }
+  .grid .g-col-lg-6 {
+    grid-column: auto/span 6;
+  }
+  .grid .g-col-lg-7 {
+    grid-column: auto/span 7;
+  }
+  .grid .g-col-lg-8 {
+    grid-column: auto/span 8;
+  }
+  .grid .g-col-lg-9 {
+    grid-column: auto/span 9;
+  }
+  .grid .g-col-lg-10 {
+    grid-column: auto/span 10;
+  }
+  .grid .g-col-lg-11 {
+    grid-column: auto/span 11;
+  }
+  .grid .g-col-lg-12 {
+    grid-column: auto/span 12;
+  }
+  .grid .g-start-lg-1 {
+    grid-column-start: 1;
+  }
+  .grid .g-start-lg-2 {
+    grid-column-start: 2;
+  }
+  .grid .g-start-lg-3 {
+    grid-column-start: 3;
+  }
+  .grid .g-start-lg-4 {
+    grid-column-start: 4;
+  }
+  .grid .g-start-lg-5 {
+    grid-column-start: 5;
+  }
+  .grid .g-start-lg-6 {
+    grid-column-start: 6;
+  }
+  .grid .g-start-lg-7 {
+    grid-column-start: 7;
+  }
+  .grid .g-start-lg-8 {
+    grid-column-start: 8;
+  }
+  .grid .g-start-lg-9 {
+    grid-column-start: 9;
+  }
+  .grid .g-start-lg-10 {
+    grid-column-start: 10;
+  }
+  .grid .g-start-lg-11 {
+    grid-column-start: 11;
+  }
+}
+@media (min-width: 1200px) {
+  .grid .g-col-xl-1 {
+    grid-column: auto/span 1;
+  }
+  .grid .g-col-xl-2 {
+    grid-column: auto/span 2;
+  }
+  .grid .g-col-xl-3 {
+    grid-column: auto/span 3;
+  }
+  .grid .g-col-xl-4 {
+    grid-column: auto/span 4;
+  }
+  .grid .g-col-xl-5 {
+    grid-column: auto/span 5;
+  }
+  .grid .g-col-xl-6 {
+    grid-column: auto/span 6;
+  }
+  .grid .g-col-xl-7 {
+    grid-column: auto/span 7;
+  }
+  .grid .g-col-xl-8 {
+    grid-column: auto/span 8;
+  }
+  .grid .g-col-xl-9 {
+    grid-column: auto/span 9;
+  }
+  .grid .g-col-xl-10 {
+    grid-column: auto/span 10;
+  }
+  .grid .g-col-xl-11 {
+    grid-column: auto/span 11;
+  }
+  .grid .g-col-xl-12 {
+    grid-column: auto/span 12;
+  }
+  .grid .g-start-xl-1 {
+    grid-column-start: 1;
+  }
+  .grid .g-start-xl-2 {
+    grid-column-start: 2;
+  }
+  .grid .g-start-xl-3 {
+    grid-column-start: 3;
+  }
+  .grid .g-start-xl-4 {
+    grid-column-start: 4;
+  }
+  .grid .g-start-xl-5 {
+    grid-column-start: 5;
+  }
+  .grid .g-start-xl-6 {
+    grid-column-start: 6;
+  }
+  .grid .g-start-xl-7 {
+    grid-column-start: 7;
+  }
+  .grid .g-start-xl-8 {
+    grid-column-start: 8;
+  }
+  .grid .g-start-xl-9 {
+    grid-column-start: 9;
+  }
+  .grid .g-start-xl-10 {
+    grid-column-start: 10;
+  }
+  .grid .g-start-xl-11 {
+    grid-column-start: 11;
+  }
+}
+@media (min-width: 1400px) {
+  .grid .g-col-xxl-1 {
+    grid-column: auto/span 1;
+  }
+  .grid .g-col-xxl-2 {
+    grid-column: auto/span 2;
+  }
+  .grid .g-col-xxl-3 {
+    grid-column: auto/span 3;
+  }
+  .grid .g-col-xxl-4 {
+    grid-column: auto/span 4;
+  }
+  .grid .g-col-xxl-5 {
+    grid-column: auto/span 5;
+  }
+  .grid .g-col-xxl-6 {
+    grid-column: auto/span 6;
+  }
+  .grid .g-col-xxl-7 {
+    grid-column: auto/span 7;
+  }
+  .grid .g-col-xxl-8 {
+    grid-column: auto/span 8;
+  }
+  .grid .g-col-xxl-9 {
+    grid-column: auto/span 9;
+  }
+  .grid .g-col-xxl-10 {
+    grid-column: auto/span 10;
+  }
+  .grid .g-col-xxl-11 {
+    grid-column: auto/span 11;
+  }
+  .grid .g-col-xxl-12 {
+    grid-column: auto/span 12;
+  }
+  .grid .g-start-xxl-1 {
+    grid-column-start: 1;
+  }
+  .grid .g-start-xxl-2 {
+    grid-column-start: 2;
+  }
+  .grid .g-start-xxl-3 {
+    grid-column-start: 3;
+  }
+  .grid .g-start-xxl-4 {
+    grid-column-start: 4;
+  }
+  .grid .g-start-xxl-5 {
+    grid-column-start: 5;
+  }
+  .grid .g-start-xxl-6 {
+    grid-column-start: 6;
+  }
+  .grid .g-start-xxl-7 {
+    grid-column-start: 7;
+  }
+  .grid .g-start-xxl-8 {
+    grid-column-start: 8;
+  }
+  .grid .g-start-xxl-9 {
+    grid-column-start: 9;
+  }
+  .grid .g-start-xxl-10 {
+    grid-column-start: 10;
+  }
+  .grid .g-start-xxl-11 {
+    grid-column-start: 11;
+  }
+}
+
+.col {
+  flex: 1 0 0%;
+}
+
+.row-cols-auto > * {
+  flex: 0 0 auto;
+  width: auto;
+}
+
+.row-cols-1 > * {
+  flex: 0 0 auto;
+  width: 100%;
+}
+
+.row-cols-2 > * {
+  flex: 0 0 auto;
+  width: 50%;
+}
+
+.row-cols-3 > * {
+  flex: 0 0 auto;
+  width: 33.3333333333%;
+}
+
+.row-cols-4 > * {
+  flex: 0 0 auto;
+  width: 25%;
+}
+
+.row-cols-5 > * {
+  flex: 0 0 auto;
+  width: 20%;
+}
+
+.row-cols-6 > * {
+  flex: 0 0 auto;
+  width: 16.6666666667%;
+}
+
+.col-auto {
+  flex: 0 0 auto;
+  width: auto;
+}
+
+.col-1 {
+  flex: 0 0 auto;
+  width: 8.33333333%;
+}
+
+.col-2 {
+  flex: 0 0 auto;
+  width: 16.66666667%;
+}
+
+.col-3 {
+  flex: 0 0 auto;
+  width: 25%;
+}
+
+.col-4 {
+  flex: 0 0 auto;
+  width: 33.33333333%;
+}
+
+.col-5 {
+  flex: 0 0 auto;
+  width: 41.66666667%;
+}
+
+.col-6 {
+  flex: 0 0 auto;
+  width: 50%;
+}
+
+.col-7 {
+  flex: 0 0 auto;
+  width: 58.33333333%;
+}
+
+.col-8 {
+  flex: 0 0 auto;
+  width: 66.66666667%;
+}
+
+.col-9 {
+  flex: 0 0 auto;
+  width: 75%;
+}
+
+.col-10 {
+  flex: 0 0 auto;
+  width: 83.33333333%;
+}
+
+.col-11 {
+  flex: 0 0 auto;
+  width: 91.66666667%;
+}
+
+.col-12 {
+  flex: 0 0 auto;
+  width: 100%;
+}
+
+.offset-1 {
+  margin-left: 8.33333333%;
+}
+
+.offset-2 {
+  margin-left: 16.66666667%;
+}
+
+.offset-3 {
+  margin-left: 25%;
+}
+
+.offset-4 {
+  margin-left: 33.33333333%;
+}
+
+.offset-5 {
+  margin-left: 41.66666667%;
+}
+
+.offset-6 {
+  margin-left: 50%;
+}
+
+.offset-7 {
+  margin-left: 58.33333333%;
+}
+
+.offset-8 {
+  margin-left: 66.66666667%;
+}
+
+.offset-9 {
+  margin-left: 75%;
+}
+
+.offset-10 {
+  margin-left: 83.33333333%;
+}
+
+.offset-11 {
+  margin-left: 91.66666667%;
+}
+
+.g-0,
+.gx-0 {
+  --tblr-gutter-x: 0;
+}
+
+.g-0,
+.gy-0 {
+  --tblr-gutter-y: 0;
+}
+
+.g-1,
+.gx-1 {
+  --tblr-gutter-x: 0.25rem;
+}
+
+.g-1,
+.gy-1 {
+  --tblr-gutter-y: 0.25rem;
+}
+
+.g-2,
+.gx-2 {
+  --tblr-gutter-x: 0.5rem;
+}
+
+.g-2,
+.gy-2 {
+  --tblr-gutter-y: 0.5rem;
+}
+
+.g-3,
+.gx-3 {
+  --tblr-gutter-x: 1rem;
+}
+
+.g-3,
+.gy-3 {
+  --tblr-gutter-y: 1rem;
+}
+
+.g-4,
+.gx-4 {
+  --tblr-gutter-x: 1.5rem;
+}
+
+.g-4,
+.gy-4 {
+  --tblr-gutter-y: 1.5rem;
+}
+
+.g-5,
+.gx-5 {
+  --tblr-gutter-x: 2rem;
+}
+
+.g-5,
+.gy-5 {
+  --tblr-gutter-y: 2rem;
+}
+
+.g-6,
+.gx-6 {
+  --tblr-gutter-x: 3rem;
+}
+
+.g-6,
+.gy-6 {
+  --tblr-gutter-y: 3rem;
+}
+
+.g-7,
+.gx-7 {
+  --tblr-gutter-x: 5rem;
+}
+
+.g-7,
+.gy-7 {
+  --tblr-gutter-y: 5rem;
+}
+
+.g-8,
+.gx-8 {
+  --tblr-gutter-x: 8rem;
+}
+
+.g-8,
+.gy-8 {
+  --tblr-gutter-y: 8rem;
+}
+
+@media (min-width: 576px) {
+  .col-sm {
+    flex: 1 0 0%;
+  }
+  .row-cols-sm-auto > * {
+    flex: 0 0 auto;
+    width: auto;
+  }
+  .row-cols-sm-1 > * {
+    flex: 0 0 auto;
+    width: 100%;
+  }
+  .row-cols-sm-2 > * {
+    flex: 0 0 auto;
+    width: 50%;
+  }
+  .row-cols-sm-3 > * {
+    flex: 0 0 auto;
+    width: 33.3333333333%;
+  }
+  .row-cols-sm-4 > * {
+    flex: 0 0 auto;
+    width: 25%;
+  }
+  .row-cols-sm-5 > * {
+    flex: 0 0 auto;
+    width: 20%;
+  }
+  .row-cols-sm-6 > * {
+    flex: 0 0 auto;
+    width: 16.6666666667%;
+  }
+  .col-sm-auto {
+    flex: 0 0 auto;
+    width: auto;
+  }
+  .col-sm-1 {
+    flex: 0 0 auto;
+    width: 8.33333333%;
+  }
+  .col-sm-2 {
+    flex: 0 0 auto;
+    width: 16.66666667%;
+  }
+  .col-sm-3 {
+    flex: 0 0 auto;
+    width: 25%;
+  }
+  .col-sm-4 {
+    flex: 0 0 auto;
+    width: 33.33333333%;
+  }
+  .col-sm-5 {
+    flex: 0 0 auto;
+    width: 41.66666667%;
+  }
+  .col-sm-6 {
+    flex: 0 0 auto;
+    width: 50%;
+  }
+  .col-sm-7 {
+    flex: 0 0 auto;
+    width: 58.33333333%;
+  }
+  .col-sm-8 {
+    flex: 0 0 auto;
+    width: 66.66666667%;
+  }
+  .col-sm-9 {
+    flex: 0 0 auto;
+    width: 75%;
+  }
+  .col-sm-10 {
+    flex: 0 0 auto;
+    width: 83.33333333%;
+  }
+  .col-sm-11 {
+    flex: 0 0 auto;
+    width: 91.66666667%;
+  }
+  .col-sm-12 {
+    flex: 0 0 auto;
+    width: 100%;
+  }
+  .offset-sm-0 {
+    margin-left: 0;
+  }
+  .offset-sm-1 {
+    margin-left: 8.33333333%;
+  }
+  .offset-sm-2 {
+    margin-left: 16.66666667%;
+  }
+  .offset-sm-3 {
+    margin-left: 25%;
+  }
+  .offset-sm-4 {
+    margin-left: 33.33333333%;
+  }
+  .offset-sm-5 {
+    margin-left: 41.66666667%;
+  }
+  .offset-sm-6 {
+    margin-left: 50%;
+  }
+  .offset-sm-7 {
+    margin-left: 58.33333333%;
+  }
+  .offset-sm-8 {
+    margin-left: 66.66666667%;
+  }
+  .offset-sm-9 {
+    margin-left: 75%;
+  }
+  .offset-sm-10 {
+    margin-left: 83.33333333%;
+  }
+  .offset-sm-11 {
+    margin-left: 91.66666667%;
+  }
+  .g-sm-0,
+  .gx-sm-0 {
+    --tblr-gutter-x: 0;
+  }
+  .g-sm-0,
+  .gy-sm-0 {
+    --tblr-gutter-y: 0;
+  }
+  .g-sm-1,
+  .gx-sm-1 {
+    --tblr-gutter-x: 0.25rem;
+  }
+  .g-sm-1,
+  .gy-sm-1 {
+    --tblr-gutter-y: 0.25rem;
+  }
+  .g-sm-2,
+  .gx-sm-2 {
+    --tblr-gutter-x: 0.5rem;
+  }
+  .g-sm-2,
+  .gy-sm-2 {
+    --tblr-gutter-y: 0.5rem;
+  }
+  .g-sm-3,
+  .gx-sm-3 {
+    --tblr-gutter-x: 1rem;
+  }
+  .g-sm-3,
+  .gy-sm-3 {
+    --tblr-gutter-y: 1rem;
+  }
+  .g-sm-4,
+  .gx-sm-4 {
+    --tblr-gutter-x: 1.5rem;
+  }
+  .g-sm-4,
+  .gy-sm-4 {
+    --tblr-gutter-y: 1.5rem;
+  }
+  .g-sm-5,
+  .gx-sm-5 {
+    --tblr-gutter-x: 2rem;
+  }
+  .g-sm-5,
+  .gy-sm-5 {
+    --tblr-gutter-y: 2rem;
+  }
+  .g-sm-6,
+  .gx-sm-6 {
+    --tblr-gutter-x: 3rem;
+  }
+  .g-sm-6,
+  .gy-sm-6 {
+    --tblr-gutter-y: 3rem;
+  }
+  .g-sm-7,
+  .gx-sm-7 {
+    --tblr-gutter-x: 5rem;
+  }
+  .g-sm-7,
+  .gy-sm-7 {
+    --tblr-gutter-y: 5rem;
+  }
+  .g-sm-8,
+  .gx-sm-8 {
+    --tblr-gutter-x: 8rem;
+  }
+  .g-sm-8,
+  .gy-sm-8 {
+    --tblr-gutter-y: 8rem;
+  }
+}
+@media (min-width: 768px) {
+  .col-md {
+    flex: 1 0 0%;
+  }
+  .row-cols-md-auto > * {
+    flex: 0 0 auto;
+    width: auto;
+  }
+  .row-cols-md-1 > * {
+    flex: 0 0 auto;
+    width: 100%;
+  }
+  .row-cols-md-2 > * {
+    flex: 0 0 auto;
+    width: 50%;
+  }
+  .row-cols-md-3 > * {
+    flex: 0 0 auto;
+    width: 33.3333333333%;
+  }
+  .row-cols-md-4 > * {
+    flex: 0 0 auto;
+    width: 25%;
+  }
+  .row-cols-md-5 > * {
+    flex: 0 0 auto;
+    width: 20%;
+  }
+  .row-cols-md-6 > * {
+    flex: 0 0 auto;
+    width: 16.6666666667%;
+  }
+  .col-md-auto {
+    flex: 0 0 auto;
+    width: auto;
+  }
+  .col-md-1 {
+    flex: 0 0 auto;
+    width: 8.33333333%;
+  }
+  .col-md-2 {
+    flex: 0 0 auto;
+    width: 16.66666667%;
+  }
+  .col-md-3 {
+    flex: 0 0 auto;
+    width: 25%;
+  }
+  .col-md-4 {
+    flex: 0 0 auto;
+    width: 33.33333333%;
+  }
+  .col-md-5 {
+    flex: 0 0 auto;
+    width: 41.66666667%;
+  }
+  .col-md-6 {
+    flex: 0 0 auto;
+    width: 50%;
+  }
+  .col-md-7 {
+    flex: 0 0 auto;
+    width: 58.33333333%;
+  }
+  .col-md-8 {
+    flex: 0 0 auto;
+    width: 66.66666667%;
+  }
+  .col-md-9 {
+    flex: 0 0 auto;
+    width: 75%;
+  }
+  .col-md-10 {
+    flex: 0 0 auto;
+    width: 83.33333333%;
+  }
+  .col-md-11 {
+    flex: 0 0 auto;
+    width: 91.66666667%;
+  }
+  .col-md-12 {
+    flex: 0 0 auto;
+    width: 100%;
+  }
+  .offset-md-0 {
+    margin-left: 0;
+  }
+  .offset-md-1 {
+    margin-left: 8.33333333%;
+  }
+  .offset-md-2 {
+    margin-left: 16.66666667%;
+  }
+  .offset-md-3 {
+    margin-left: 25%;
+  }
+  .offset-md-4 {
+    margin-left: 33.33333333%;
+  }
+  .offset-md-5 {
+    margin-left: 41.66666667%;
+  }
+  .offset-md-6 {
+    margin-left: 50%;
+  }
+  .offset-md-7 {
+    margin-left: 58.33333333%;
+  }
+  .offset-md-8 {
+    margin-left: 66.66666667%;
+  }
+  .offset-md-9 {
+    margin-left: 75%;
+  }
+  .offset-md-10 {
+    margin-left: 83.33333333%;
+  }
+  .offset-md-11 {
+    margin-left: 91.66666667%;
+  }
+  .g-md-0,
+  .gx-md-0 {
+    --tblr-gutter-x: 0;
+  }
+  .g-md-0,
+  .gy-md-0 {
+    --tblr-gutter-y: 0;
+  }
+  .g-md-1,
+  .gx-md-1 {
+    --tblr-gutter-x: 0.25rem;
+  }
+  .g-md-1,
+  .gy-md-1 {
+    --tblr-gutter-y: 0.25rem;
+  }
+  .g-md-2,
+  .gx-md-2 {
+    --tblr-gutter-x: 0.5rem;
+  }
+  .g-md-2,
+  .gy-md-2 {
+    --tblr-gutter-y: 0.5rem;
+  }
+  .g-md-3,
+  .gx-md-3 {
+    --tblr-gutter-x: 1rem;
+  }
+  .g-md-3,
+  .gy-md-3 {
+    --tblr-gutter-y: 1rem;
+  }
+  .g-md-4,
+  .gx-md-4 {
+    --tblr-gutter-x: 1.5rem;
+  }
+  .g-md-4,
+  .gy-md-4 {
+    --tblr-gutter-y: 1.5rem;
+  }
+  .g-md-5,
+  .gx-md-5 {
+    --tblr-gutter-x: 2rem;
+  }
+  .g-md-5,
+  .gy-md-5 {
+    --tblr-gutter-y: 2rem;
+  }
+  .g-md-6,
+  .gx-md-6 {
+    --tblr-gutter-x: 3rem;
+  }
+  .g-md-6,
+  .gy-md-6 {
+    --tblr-gutter-y: 3rem;
+  }
+  .g-md-7,
+  .gx-md-7 {
+    --tblr-gutter-x: 5rem;
+  }
+  .g-md-7,
+  .gy-md-7 {
+    --tblr-gutter-y: 5rem;
+  }
+  .g-md-8,
+  .gx-md-8 {
+    --tblr-gutter-x: 8rem;
+  }
+  .g-md-8,
+  .gy-md-8 {
+    --tblr-gutter-y: 8rem;
+  }
+}
+@media (min-width: 992px) {
+  .col-lg {
+    flex: 1 0 0%;
+  }
+  .row-cols-lg-auto > * {
+    flex: 0 0 auto;
+    width: auto;
+  }
+  .row-cols-lg-1 > * {
+    flex: 0 0 auto;
+    width: 100%;
+  }
+  .row-cols-lg-2 > * {
+    flex: 0 0 auto;
+    width: 50%;
+  }
+  .row-cols-lg-3 > * {
+    flex: 0 0 auto;
+    width: 33.3333333333%;
+  }
+  .row-cols-lg-4 > * {
+    flex: 0 0 auto;
+    width: 25%;
+  }
+  .row-cols-lg-5 > * {
+    flex: 0 0 auto;
+    width: 20%;
+  }
+  .row-cols-lg-6 > * {
+    flex: 0 0 auto;
+    width: 16.6666666667%;
+  }
+  .col-lg-auto {
+    flex: 0 0 auto;
+    width: auto;
+  }
+  .col-lg-1 {
+    flex: 0 0 auto;
+    width: 8.33333333%;
+  }
+  .col-lg-2 {
+    flex: 0 0 auto;
+    width: 16.66666667%;
+  }
+  .col-lg-3 {
+    flex: 0 0 auto;
+    width: 25%;
+  }
+  .col-lg-4 {
+    flex: 0 0 auto;
+    width: 33.33333333%;
+  }
+  .col-lg-5 {
+    flex: 0 0 auto;
+    width: 41.66666667%;
+  }
+  .col-lg-6 {
+    flex: 0 0 auto;
+    width: 50%;
+  }
+  .col-lg-7 {
+    flex: 0 0 auto;
+    width: 58.33333333%;
+  }
+  .col-lg-8 {
+    flex: 0 0 auto;
+    width: 66.66666667%;
+  }
+  .col-lg-9 {
+    flex: 0 0 auto;
+    width: 75%;
+  }
+  .col-lg-10 {
+    flex: 0 0 auto;
+    width: 83.33333333%;
+  }
+  .col-lg-11 {
+    flex: 0 0 auto;
+    width: 91.66666667%;
+  }
+  .col-lg-12 {
+    flex: 0 0 auto;
+    width: 100%;
+  }
+  .offset-lg-0 {
+    margin-left: 0;
+  }
+  .offset-lg-1 {
+    margin-left: 8.33333333%;
+  }
+  .offset-lg-2 {
+    margin-left: 16.66666667%;
+  }
+  .offset-lg-3 {
+    margin-left: 25%;
+  }
+  .offset-lg-4 {
+    margin-left: 33.33333333%;
+  }
+  .offset-lg-5 {
+    margin-left: 41.66666667%;
+  }
+  .offset-lg-6 {
+    margin-left: 50%;
+  }
+  .offset-lg-7 {
+    margin-left: 58.33333333%;
+  }
+  .offset-lg-8 {
+    margin-left: 66.66666667%;
+  }
+  .offset-lg-9 {
+    margin-left: 75%;
+  }
+  .offset-lg-10 {
+    margin-left: 83.33333333%;
+  }
+  .offset-lg-11 {
+    margin-left: 91.66666667%;
+  }
+  .g-lg-0,
+  .gx-lg-0 {
+    --tblr-gutter-x: 0;
+  }
+  .g-lg-0,
+  .gy-lg-0 {
+    --tblr-gutter-y: 0;
+  }
+  .g-lg-1,
+  .gx-lg-1 {
+    --tblr-gutter-x: 0.25rem;
+  }
+  .g-lg-1,
+  .gy-lg-1 {
+    --tblr-gutter-y: 0.25rem;
+  }
+  .g-lg-2,
+  .gx-lg-2 {
+    --tblr-gutter-x: 0.5rem;
+  }
+  .g-lg-2,
+  .gy-lg-2 {
+    --tblr-gutter-y: 0.5rem;
+  }
+  .g-lg-3,
+  .gx-lg-3 {
+    --tblr-gutter-x: 1rem;
+  }
+  .g-lg-3,
+  .gy-lg-3 {
+    --tblr-gutter-y: 1rem;
+  }
+  .g-lg-4,
+  .gx-lg-4 {
+    --tblr-gutter-x: 1.5rem;
+  }
+  .g-lg-4,
+  .gy-lg-4 {
+    --tblr-gutter-y: 1.5rem;
+  }
+  .g-lg-5,
+  .gx-lg-5 {
+    --tblr-gutter-x: 2rem;
+  }
+  .g-lg-5,
+  .gy-lg-5 {
+    --tblr-gutter-y: 2rem;
+  }
+  .g-lg-6,
+  .gx-lg-6 {
+    --tblr-gutter-x: 3rem;
+  }
+  .g-lg-6,
+  .gy-lg-6 {
+    --tblr-gutter-y: 3rem;
+  }
+  .g-lg-7,
+  .gx-lg-7 {
+    --tblr-gutter-x: 5rem;
+  }
+  .g-lg-7,
+  .gy-lg-7 {
+    --tblr-gutter-y: 5rem;
+  }
+  .g-lg-8,
+  .gx-lg-8 {
+    --tblr-gutter-x: 8rem;
+  }
+  .g-lg-8,
+  .gy-lg-8 {
+    --tblr-gutter-y: 8rem;
+  }
+}
+@media (min-width: 1200px) {
+  .col-xl {
+    flex: 1 0 0%;
+  }
+  .row-cols-xl-auto > * {
+    flex: 0 0 auto;
+    width: auto;
+  }
+  .row-cols-xl-1 > * {
+    flex: 0 0 auto;
+    width: 100%;
+  }
+  .row-cols-xl-2 > * {
+    flex: 0 0 auto;
+    width: 50%;
+  }
+  .row-cols-xl-3 > * {
+    flex: 0 0 auto;
+    width: 33.3333333333%;
+  }
+  .row-cols-xl-4 > * {
+    flex: 0 0 auto;
+    width: 25%;
+  }
+  .row-cols-xl-5 > * {
+    flex: 0 0 auto;
+    width: 20%;
+  }
+  .row-cols-xl-6 > * {
+    flex: 0 0 auto;
+    width: 16.6666666667%;
+  }
+  .col-xl-auto {
+    flex: 0 0 auto;
+    width: auto;
+  }
+  .col-xl-1 {
+    flex: 0 0 auto;
+    width: 8.33333333%;
+  }
+  .col-xl-2 {
+    flex: 0 0 auto;
+    width: 16.66666667%;
+  }
+  .col-xl-3 {
+    flex: 0 0 auto;
+    width: 25%;
+  }
+  .col-xl-4 {
+    flex: 0 0 auto;
+    width: 33.33333333%;
+  }
+  .col-xl-5 {
+    flex: 0 0 auto;
+    width: 41.66666667%;
+  }
+  .col-xl-6 {
+    flex: 0 0 auto;
+    width: 50%;
+  }
+  .col-xl-7 {
+    flex: 0 0 auto;
+    width: 58.33333333%;
+  }
+  .col-xl-8 {
+    flex: 0 0 auto;
+    width: 66.66666667%;
+  }
+  .col-xl-9 {
+    flex: 0 0 auto;
+    width: 75%;
+  }
+  .col-xl-10 {
+    flex: 0 0 auto;
+    width: 83.33333333%;
+  }
+  .col-xl-11 {
+    flex: 0 0 auto;
+    width: 91.66666667%;
+  }
+  .col-xl-12 {
+    flex: 0 0 auto;
+    width: 100%;
+  }
+  .offset-xl-0 {
+    margin-left: 0;
+  }
+  .offset-xl-1 {
+    margin-left: 8.33333333%;
+  }
+  .offset-xl-2 {
+    margin-left: 16.66666667%;
+  }
+  .offset-xl-3 {
+    margin-left: 25%;
+  }
+  .offset-xl-4 {
+    margin-left: 33.33333333%;
+  }
+  .offset-xl-5 {
+    margin-left: 41.66666667%;
+  }
+  .offset-xl-6 {
+    margin-left: 50%;
+  }
+  .offset-xl-7 {
+    margin-left: 58.33333333%;
+  }
+  .offset-xl-8 {
+    margin-left: 66.66666667%;
+  }
+  .offset-xl-9 {
+    margin-left: 75%;
+  }
+  .offset-xl-10 {
+    margin-left: 83.33333333%;
+  }
+  .offset-xl-11 {
+    margin-left: 91.66666667%;
+  }
+  .g-xl-0,
+  .gx-xl-0 {
+    --tblr-gutter-x: 0;
+  }
+  .g-xl-0,
+  .gy-xl-0 {
+    --tblr-gutter-y: 0;
+  }
+  .g-xl-1,
+  .gx-xl-1 {
+    --tblr-gutter-x: 0.25rem;
+  }
+  .g-xl-1,
+  .gy-xl-1 {
+    --tblr-gutter-y: 0.25rem;
+  }
+  .g-xl-2,
+  .gx-xl-2 {
+    --tblr-gutter-x: 0.5rem;
+  }
+  .g-xl-2,
+  .gy-xl-2 {
+    --tblr-gutter-y: 0.5rem;
+  }
+  .g-xl-3,
+  .gx-xl-3 {
+    --tblr-gutter-x: 1rem;
+  }
+  .g-xl-3,
+  .gy-xl-3 {
+    --tblr-gutter-y: 1rem;
+  }
+  .g-xl-4,
+  .gx-xl-4 {
+    --tblr-gutter-x: 1.5rem;
+  }
+  .g-xl-4,
+  .gy-xl-4 {
+    --tblr-gutter-y: 1.5rem;
+  }
+  .g-xl-5,
+  .gx-xl-5 {
+    --tblr-gutter-x: 2rem;
+  }
+  .g-xl-5,
+  .gy-xl-5 {
+    --tblr-gutter-y: 2rem;
+  }
+  .g-xl-6,
+  .gx-xl-6 {
+    --tblr-gutter-x: 3rem;
+  }
+  .g-xl-6,
+  .gy-xl-6 {
+    --tblr-gutter-y: 3rem;
+  }
+  .g-xl-7,
+  .gx-xl-7 {
+    --tblr-gutter-x: 5rem;
+  }
+  .g-xl-7,
+  .gy-xl-7 {
+    --tblr-gutter-y: 5rem;
+  }
+  .g-xl-8,
+  .gx-xl-8 {
+    --tblr-gutter-x: 8rem;
+  }
+  .g-xl-8,
+  .gy-xl-8 {
+    --tblr-gutter-y: 8rem;
+  }
+}
+@media (min-width: 1400px) {
+  .col-xxl {
+    flex: 1 0 0%;
+  }
+  .row-cols-xxl-auto > * {
+    flex: 0 0 auto;
+    width: auto;
+  }
+  .row-cols-xxl-1 > * {
+    flex: 0 0 auto;
+    width: 100%;
+  }
+  .row-cols-xxl-2 > * {
+    flex: 0 0 auto;
+    width: 50%;
+  }
+  .row-cols-xxl-3 > * {
+    flex: 0 0 auto;
+    width: 33.3333333333%;
+  }
+  .row-cols-xxl-4 > * {
+    flex: 0 0 auto;
+    width: 25%;
+  }
+  .row-cols-xxl-5 > * {
+    flex: 0 0 auto;
+    width: 20%;
+  }
+  .row-cols-xxl-6 > * {
+    flex: 0 0 auto;
+    width: 16.6666666667%;
+  }
+  .col-xxl-auto {
+    flex: 0 0 auto;
+    width: auto;
+  }
+  .col-xxl-1 {
+    flex: 0 0 auto;
+    width: 8.33333333%;
+  }
+  .col-xxl-2 {
+    flex: 0 0 auto;
+    width: 16.66666667%;
+  }
+  .col-xxl-3 {
+    flex: 0 0 auto;
+    width: 25%;
+  }
+  .col-xxl-4 {
+    flex: 0 0 auto;
+    width: 33.33333333%;
+  }
+  .col-xxl-5 {
+    flex: 0 0 auto;
+    width: 41.66666667%;
+  }
+  .col-xxl-6 {
+    flex: 0 0 auto;
+    width: 50%;
+  }
+  .col-xxl-7 {
+    flex: 0 0 auto;
+    width: 58.33333333%;
+  }
+  .col-xxl-8 {
+    flex: 0 0 auto;
+    width: 66.66666667%;
+  }
+  .col-xxl-9 {
+    flex: 0 0 auto;
+    width: 75%;
+  }
+  .col-xxl-10 {
+    flex: 0 0 auto;
+    width: 83.33333333%;
+  }
+  .col-xxl-11 {
+    flex: 0 0 auto;
+    width: 91.66666667%;
+  }
+  .col-xxl-12 {
+    flex: 0 0 auto;
+    width: 100%;
+  }
+  .offset-xxl-0 {
+    margin-left: 0;
+  }
+  .offset-xxl-1 {
+    margin-left: 8.33333333%;
+  }
+  .offset-xxl-2 {
+    margin-left: 16.66666667%;
+  }
+  .offset-xxl-3 {
+    margin-left: 25%;
+  }
+  .offset-xxl-4 {
+    margin-left: 33.33333333%;
+  }
+  .offset-xxl-5 {
+    margin-left: 41.66666667%;
+  }
+  .offset-xxl-6 {
+    margin-left: 50%;
+  }
+  .offset-xxl-7 {
+    margin-left: 58.33333333%;
+  }
+  .offset-xxl-8 {
+    margin-left: 66.66666667%;
+  }
+  .offset-xxl-9 {
+    margin-left: 75%;
+  }
+  .offset-xxl-10 {
+    margin-left: 83.33333333%;
+  }
+  .offset-xxl-11 {
+    margin-left: 91.66666667%;
+  }
+  .g-xxl-0,
+  .gx-xxl-0 {
+    --tblr-gutter-x: 0;
+  }
+  .g-xxl-0,
+  .gy-xxl-0 {
+    --tblr-gutter-y: 0;
+  }
+  .g-xxl-1,
+  .gx-xxl-1 {
+    --tblr-gutter-x: 0.25rem;
+  }
+  .g-xxl-1,
+  .gy-xxl-1 {
+    --tblr-gutter-y: 0.25rem;
+  }
+  .g-xxl-2,
+  .gx-xxl-2 {
+    --tblr-gutter-x: 0.5rem;
+  }
+  .g-xxl-2,
+  .gy-xxl-2 {
+    --tblr-gutter-y: 0.5rem;
+  }
+  .g-xxl-3,
+  .gx-xxl-3 {
+    --tblr-gutter-x: 1rem;
+  }
+  .g-xxl-3,
+  .gy-xxl-3 {
+    --tblr-gutter-y: 1rem;
+  }
+  .g-xxl-4,
+  .gx-xxl-4 {
+    --tblr-gutter-x: 1.5rem;
+  }
+  .g-xxl-4,
+  .gy-xxl-4 {
+    --tblr-gutter-y: 1.5rem;
+  }
+  .g-xxl-5,
+  .gx-xxl-5 {
+    --tblr-gutter-x: 2rem;
+  }
+  .g-xxl-5,
+  .gy-xxl-5 {
+    --tblr-gutter-y: 2rem;
+  }
+  .g-xxl-6,
+  .gx-xxl-6 {
+    --tblr-gutter-x: 3rem;
+  }
+  .g-xxl-6,
+  .gy-xxl-6 {
+    --tblr-gutter-y: 3rem;
+  }
+  .g-xxl-7,
+  .gx-xxl-7 {
+    --tblr-gutter-x: 5rem;
+  }
+  .g-xxl-7,
+  .gy-xxl-7 {
+    --tblr-gutter-y: 5rem;
+  }
+  .g-xxl-8,
+  .gx-xxl-8 {
+    --tblr-gutter-x: 8rem;
+  }
+  .g-xxl-8,
+  .gy-xxl-8 {
+    --tblr-gutter-y: 8rem;
+  }
+}
+.table, .markdown > table {
+  --tblr-table-color-type: initial;
+  --tblr-table-bg-type: initial;
+  --tblr-table-color-state: initial;
+  --tblr-table-bg-state: initial;
+  --tblr-table-color: inherit;
+  --tblr-table-bg: transparent;
+  --tblr-table-border-color: var(--tblr-border-color-translucent);
+  --tblr-table-accent-bg: transparent;
+  --tblr-table-striped-color: inherit;
+  --tblr-table-striped-bg: var(--tblr-bg-surface-tertiary);
+  --tblr-table-active-color: inherit;
+  --tblr-table-active-bg: rgba(0, 0, 0, 0.1);
+  --tblr-table-hover-color: inherit;
+  --tblr-table-hover-bg: rgba(0, 0, 0, 0.075);
+  width: 100%;
+  margin-bottom: 1rem;
+  vertical-align: top;
+  border-color: var(--tblr-table-border-color);
+}
+.table > :not(caption) > * > *, .markdown > table > :not(caption) > * > * {
+  padding: 0.75rem 0.75rem;
+  color: var(--tblr-table-color-state, var(--tblr-table-color-type, var(--tblr-table-color)));
+  background-color: var(--tblr-table-bg);
+  border-bottom-width: var(--tblr-border-width);
+  box-shadow: inset 0 0 0 9999px var(--tblr-table-bg-state, var(--tblr-table-bg-type, var(--tblr-table-accent-bg)));
+}
+.table > tbody, .markdown > table > tbody {
+  vertical-align: inherit;
+}
+.table > thead, .markdown > table > thead {
+  vertical-align: bottom;
+}
+
+.table-group-divider {
+  border-top: calc(var(--tblr-border-width) * 2) solid var(--tblr-border-color-translucent);
+}
+
+.caption-top {
+  caption-side: top;
+}
+
+.table-sm > :not(caption) > * > * {
+  padding: 0.25rem 0.25rem;
+}
+
+.table-bordered > :not(caption) > *, .markdown > table > :not(caption) > * {
+  border-width: var(--tblr-border-width) 0;
+}
+.table-bordered > :not(caption) > * > *, .markdown > table > :not(caption) > * > * {
+  border-width: 0 var(--tblr-border-width);
+}
+
+.table-borderless > :not(caption) > * > * {
+  border-bottom-width: 0;
+}
+.table-borderless > :not(:first-child) {
+  border-top-width: 0;
+}
+
+.table-striped > tbody > tr:nth-of-type(even) > * {
+  --tblr-table-color-type: var(--tblr-table-striped-color);
+  --tblr-table-bg-type: var(--tblr-table-striped-bg);
+}
+
+.table-striped-columns > :not(caption) > tr > :nth-child(even) {
+  --tblr-table-color-type: var(--tblr-table-striped-color);
+  --tblr-table-bg-type: var(--tblr-table-striped-bg);
+}
+
+.table-active {
+  --tblr-table-color-state: var(--tblr-table-active-color);
+  --tblr-table-bg-state: var(--tblr-table-active-bg);
+}
+
+.table-hover > tbody > tr:hover > * {
+  --tblr-table-color-state: var(--tblr-table-hover-color);
+  --tblr-table-bg-state: var(--tblr-table-hover-bg);
+}
+
+.table-primary {
+  --tblr-table-color: #182433;
+  --tblr-table-bg: #ccdded;
+  --tblr-table-border-color: #bacbda;
+  --tblr-table-striped-bg: #c3d4e4;
+  --tblr-table-striped-color: #182433;
+  --tblr-table-active-bg: #bacbda;
+  --tblr-table-active-color: #fcfdfe;
+  --tblr-table-hover-bg: #bfcfdf;
+  --tblr-table-hover-color: #fcfdfe;
+  color: var(--tblr-table-color);
+  border-color: var(--tblr-table-border-color);
+}
+
+.table-secondary {
+  --tblr-table-color: #182433;
+  --tblr-table-bg: #e0e3e6;
+  --tblr-table-border-color: #ccd0d4;
+  --tblr-table-striped-bg: #d6d9dd;
+  --tblr-table-striped-color: #182433;
+  --tblr-table-active-bg: #ccd0d4;
+  --tblr-table-active-color: #fcfdfe;
+  --tblr-table-hover-bg: #d1d5d9;
+  --tblr-table-hover-color: #182433;
+  color: var(--tblr-table-color);
+  border-color: var(--tblr-table-border-color);
+}
+
+.table-success {
+  --tblr-table-color: #182433;
+  --tblr-table-bg: #d5f0da;
+  --tblr-table-border-color: #c2dcc9;
+  --tblr-table-striped-bg: #cce6d2;
+  --tblr-table-striped-color: #182433;
+  --tblr-table-active-bg: #c2dcc9;
+  --tblr-table-active-color: #182433;
+  --tblr-table-hover-bg: #c7e1cd;
+  --tblr-table-hover-color: #182433;
+  color: var(--tblr-table-color);
+  border-color: var(--tblr-table-border-color);
+}
+
+.table-info {
+  --tblr-table-color: #182433;
+  --tblr-table-bg: #d9ebf9;
+  --tblr-table-border-color: #c6d7e5;
+  --tblr-table-striped-bg: #cfe1ef;
+  --tblr-table-striped-color: #182433;
+  --tblr-table-active-bg: #c6d7e5;
+  --tblr-table-active-color: #182433;
+  --tblr-table-hover-bg: #cbdcea;
+  --tblr-table-hover-color: #182433;
+  color: var(--tblr-table-color);
+  border-color: var(--tblr-table-border-color);
+}
+
+.table-warning {
+  --tblr-table-color: #182433;
+  --tblr-table-bg: #fde1cd;
+  --tblr-table-border-color: #e6cebe;
+  --tblr-table-striped-bg: #f2d8c5;
+  --tblr-table-striped-color: #182433;
+  --tblr-table-active-bg: #e6cebe;
+  --tblr-table-active-color: #182433;
+  --tblr-table-hover-bg: #ecd3c1;
+  --tblr-table-hover-color: #182433;
+  color: var(--tblr-table-color);
+  border-color: var(--tblr-table-border-color);
+}
+
+.table-danger {
+  --tblr-table-color: #182433;
+  --tblr-table-bg: #f7d7d7;
+  --tblr-table-border-color: #e1c5c7;
+  --tblr-table-striped-bg: #eccecf;
+  --tblr-table-striped-color: #182433;
+  --tblr-table-active-bg: #e1c5c7;
+  --tblr-table-active-color: #fcfdfe;
+  --tblr-table-hover-bg: #e6cacb;
+  --tblr-table-hover-color: #fcfdfe;
+  color: var(--tblr-table-color);
+  border-color: var(--tblr-table-border-color);
+}
+
+.table-light {
+  --tblr-table-color: #182433;
+  --tblr-table-bg: #fcfdfe;
+  --tblr-table-border-color: #e5e7ea;
+  --tblr-table-striped-bg: #f1f2f4;
+  --tblr-table-striped-color: #182433;
+  --tblr-table-active-bg: #e5e7ea;
+  --tblr-table-active-color: #182433;
+  --tblr-table-hover-bg: #ebedef;
+  --tblr-table-hover-color: #182433;
+  color: var(--tblr-table-color);
+  border-color: var(--tblr-table-border-color);
+}
+
+.table-dark {
+  --tblr-table-color: #fcfdfe;
+  --tblr-table-bg: #182433;
+  --tblr-table-border-color: #2f3a47;
+  --tblr-table-striped-bg: #232f3d;
+  --tblr-table-striped-color: #fcfdfe;
+  --tblr-table-active-bg: #2f3a47;
+  --tblr-table-active-color: #fcfdfe;
+  --tblr-table-hover-bg: #293442;
+  --tblr-table-hover-color: #fcfdfe;
+  color: var(--tblr-table-color);
+  border-color: var(--tblr-table-border-color);
+}
+
+.table-responsive {
+  overflow-x: auto;
+  -webkit-overflow-scrolling: touch;
+}
+
+@media (max-width: 575.98px) {
+  .table-responsive-sm {
+    overflow-x: auto;
+    -webkit-overflow-scrolling: touch;
+  }
+}
+@media (max-width: 767.98px) {
+  .table-responsive-md {
+    overflow-x: auto;
+    -webkit-overflow-scrolling: touch;
+  }
+}
+@media (max-width: 991.98px) {
+  .table-responsive-lg {
+    overflow-x: auto;
+    -webkit-overflow-scrolling: touch;
+  }
+}
+@media (max-width: 1199.98px) {
+  .table-responsive-xl {
+    overflow-x: auto;
+    -webkit-overflow-scrolling: touch;
+  }
+}
+@media (max-width: 1399.98px) {
+  .table-responsive-xxl {
+    overflow-x: auto;
+    -webkit-overflow-scrolling: touch;
+  }
+}
+.form-label {
+  margin-bottom: 0.5rem;
+  font-size: 0.875rem;
+  font-weight: var(--tblr-font-weight-medium);
+}
+
+.col-form-label {
+  padding-top: calc(0.5625rem + var(--tblr-border-width));
+  padding-bottom: calc(0.5625rem + var(--tblr-border-width));
+  margin-bottom: 0;
+  font-size: inherit;
+  font-weight: var(--tblr-font-weight-medium);
+  line-height: 1.4285714286;
+}
+
+.col-form-label-lg {
+  padding-top: calc(0.5rem + var(--tblr-border-width));
+  padding-bottom: calc(0.5rem + var(--tblr-border-width));
+  font-size: 1.25rem;
+}
+
+.col-form-label-sm {
+  padding-top: calc(0.125rem + var(--tblr-border-width));
+  padding-bottom: calc(0.125rem + var(--tblr-border-width));
+  font-size: 0.75rem;
+}
+
+.form-text {
+  margin-top: 0.25rem;
+  font-size: 85.714285%;
+  color: var(--tblr-secondary-color);
+}
+
+.form-control {
+  display: block;
+  width: 100%;
+  padding: 0.5625rem 0.75rem;
+  font-family: var(--tblr-font-sans-serif);
+  font-size: 0.875rem;
+  font-weight: 400;
+  line-height: 1.4285714286;
+  color: var(--tblr-body-color);
+  -webkit-appearance: none;
+     -moz-appearance: none;
+          appearance: none;
+  background-color: var(--tblr-bg-forms);
+  background-clip: padding-box;
+  border: var(--tblr-border-width) solid var(--tblr-border-color);
+  border-radius: var(--tblr-border-radius);
+  box-shadow: var(--tblr-box-shadow-input);
+  transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
+}
+@media (prefers-reduced-motion: reduce) {
+  .form-control {
+    transition: none;
+  }
+}
+.form-control[type=file] {
+  overflow: hidden;
+}
+.form-control[type=file]:not(:disabled):not([readonly]) {
+  cursor: pointer;
+}
+.form-control:focus {
+  color: var(--tblr-body-color);
+  background-color: var(--tblr-bg-forms);
+  border-color: #80aad3;
+  outline: 0;
+  box-shadow: var(--tblr-box-shadow-input), 0 0 0 0.25rem rgba(var(--tblr-primary-rgb), 0.25);
+}
+.form-control::-webkit-date-and-time-value {
+  min-width: 85px;
+  height: 1.4285714286em;
+  margin: 0;
+}
+.form-control::-webkit-datetime-edit {
+  display: block;
+  padding: 0;
+}
+.form-control::-webkit-input-placeholder {
+  color: #929dab;
+  opacity: 1;
+}
+.form-control:-ms-input-placeholder {
+  color: #929dab;
+  opacity: 1;
+}
+.form-control::-ms-input-placeholder {
+  color: #929dab;
+  opacity: 1;
+}
+.form-control::placeholder {
+  color: #929dab;
+  opacity: 1;
+}
+.form-control:disabled {
+  background-color: var(--tblr-bg-surface-secondary);
+  opacity: 1;
+}
+.form-control::-webkit-file-upload-button {
+  padding: 0.5625rem 0.75rem;
+  margin: -0.5625rem -0.75rem;
+  -webkit-margin-end: 0.75rem;
+          margin-inline-end: 0.75rem;
+  color: var(--tblr-body-color);
+  background-color: var(--tblr-tertiary-bg);
+  pointer-events: none;
+  border-color: inherit;
+  border-style: solid;
+  border-width: 0;
+  border-inline-end-width: var(--tblr-border-width);
+  border-radius: 0;
+  -webkit-transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
+  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
+}
+.form-control::file-selector-button {
+  padding: 0.5625rem 0.75rem;
+  margin: -0.5625rem -0.75rem;
+  -webkit-margin-end: 0.75rem;
+          margin-inline-end: 0.75rem;
+  color: var(--tblr-body-color);
+  background-color: var(--tblr-tertiary-bg);
+  pointer-events: none;
+  border-color: inherit;
+  border-style: solid;
+  border-width: 0;
+  border-inline-end-width: var(--tblr-border-width);
+  border-radius: 0;
+  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
+}
+@media (prefers-reduced-motion: reduce) {
+  .form-control::-webkit-file-upload-button {
+    -webkit-transition: none;
+    transition: none;
+  }
+  .form-control::file-selector-button {
+    transition: none;
+  }
+}
+.form-control:hover:not(:disabled):not([readonly])::-webkit-file-upload-button {
+  background-color: var(--tblr-secondary-bg);
+}
+.form-control:hover:not(:disabled):not([readonly])::file-selector-button {
+  background-color: var(--tblr-secondary-bg);
+}
+
+.form-control-plaintext {
+  display: block;
+  width: 100%;
+  padding: 0.5625rem 0;
+  margin-bottom: 0;
+  line-height: 1.4285714286;
+  color: var(--tblr-body-color);
+  background-color: transparent;
+  border: solid transparent;
+  border-width: var(--tblr-border-width) 0;
+}
+.form-control-plaintext:focus {
+  outline: 0;
+}
+.form-control-plaintext.form-control-sm, .form-control-plaintext.form-control-lg {
+  padding-right: 0;
+  padding-left: 0;
+}
+
+.form-control-sm {
+  min-height: calc(1.4285714286em + 0.25rem + calc(var(--tblr-border-width) * 2));
+  padding: 0.125rem 0.25rem;
+  font-size: 0.75rem;
+  border-radius: var(--tblr-border-radius-sm);
+}
+.form-control-sm::-webkit-file-upload-button {
+  padding: 0.125rem 0.25rem;
+  margin: -0.125rem -0.25rem;
+  -webkit-margin-end: 0.25rem;
+          margin-inline-end: 0.25rem;
+}
+.form-control-sm::file-selector-button {
+  padding: 0.125rem 0.25rem;
+  margin: -0.125rem -0.25rem;
+  -webkit-margin-end: 0.25rem;
+          margin-inline-end: 0.25rem;
+}
+
+.form-control-lg {
+  min-height: calc(1.4285714286em + 1rem + calc(var(--tblr-border-width) * 2));
+  padding: 0.5rem 0.75rem;
+  font-size: 1.25rem;
+  border-radius: var(--tblr-border-radius-lg);
+}
+.form-control-lg::-webkit-file-upload-button {
+  padding: 0.5rem 0.75rem;
+  margin: -0.5rem -0.75rem;
+  -webkit-margin-end: 0.75rem;
+          margin-inline-end: 0.75rem;
+}
+.form-control-lg::file-selector-button {
+  padding: 0.5rem 0.75rem;
+  margin: -0.5rem -0.75rem;
+  -webkit-margin-end: 0.75rem;
+          margin-inline-end: 0.75rem;
+}
+
+textarea.form-control {
+  min-height: calc(1.4285714286em + 1.125rem + calc(var(--tblr-border-width) * 2));
+}
+textarea.form-control-sm {
+  min-height: calc(1.4285714286em + 0.25rem + calc(var(--tblr-border-width) * 2));
+}
+textarea.form-control-lg {
+  min-height: calc(1.4285714286em + 1rem + calc(var(--tblr-border-width) * 2));
+}
+
+.form-control-color {
+  width: 3rem;
+  height: calc(1.4285714286em + 1.125rem + calc(var(--tblr-border-width) * 2));
+  padding: 0.5625rem;
+}
+.form-control-color:not(:disabled):not([readonly]) {
+  cursor: pointer;
+}
+.form-control-color::-moz-color-swatch {
+  border: 0 !important;
+  border-radius: var(--tblr-border-radius);
+}
+.form-control-color::-webkit-color-swatch {
+  border: 0 !important;
+  border-radius: var(--tblr-border-radius);
+}
+.form-control-color.form-control-sm {
+  height: calc(1.4285714286em + 0.25rem + calc(var(--tblr-border-width) * 2));
+}
+.form-control-color.form-control-lg {
+  height: calc(1.4285714286em + 1rem + calc(var(--tblr-border-width) * 2));
+}
+
+.form-select {
+  --tblr-form-select-bg-img: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23929dab' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e");
+  display: block;
+  width: 100%;
+  padding: 0.5625rem 2.25rem 0.5625rem 0.75rem;
+  font-family: var(--tblr-font-sans-serif);
+  font-size: 0.875rem;
+  font-weight: 400;
+  line-height: 1.4285714286;
+  color: var(--tblr-body-color);
+  -webkit-appearance: none;
+     -moz-appearance: none;
+          appearance: none;
+  background-color: var(--tblr-bg-forms);
+  background-image: var(--tblr-form-select-bg-img), var(--tblr-form-select-bg-icon, none);
+  background-repeat: no-repeat;
+  background-position: right 0.75rem center;
+  background-size: 16px 12px;
+  border: var(--tblr-border-width) solid var(--tblr-border-color);
+  border-radius: var(--tblr-border-radius);
+  box-shadow: var(--tblr-box-shadow-input);
+  transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
+}
+@media (prefers-reduced-motion: reduce) {
+  .form-select {
+    transition: none;
+  }
+}
+.form-select:focus {
+  border-color: #80aad3;
+  outline: 0;
+  box-shadow: var(--tblr-box-shadow-input), 0 0 0 0.25rem rgba(var(--tblr-primary-rgb), 0.25);
+}
+.form-select[multiple], .form-select[size]:not([size="1"]) {
+  padding-right: 0.75rem;
+  background-image: none;
+}
+.form-select:disabled {
+  background-color: var(--tblr-bg-surface-secondary);
+}
+.form-select:-moz-focusring {
+  color: transparent;
+  text-shadow: 0 0 0 var(--tblr-body-color);
+}
+
+.form-select-sm {
+  padding-top: 0.125rem;
+  padding-bottom: 0.125rem;
+  padding-left: 0.25rem;
+  font-size: 0.75rem;
+  border-radius: var(--tblr-border-radius-sm);
+}
+
+.form-select-lg {
+  padding-top: 0.5rem;
+  padding-bottom: 0.5rem;
+  padding-left: 0.75rem;
+  font-size: 1.25rem;
+  border-radius: var(--tblr-border-radius-lg);
+}
+
+[data-bs-theme=dark] .form-select, body[data-bs-theme=dark] [data-bs-theme=light] .form-select {
+  --tblr-form-select-bg-img: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23fcfdfe' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e");
+}
+
+.form-check {
+  display: block;
+  min-height: 1.25rem;
+  padding-left: 2rem;
+  margin-bottom: 0.75rem;
+}
+.form-check .form-check-input {
+  float: left;
+  margin-left: -2rem;
+}
+
+.form-check-reverse {
+  padding-right: 2rem;
+  padding-left: 0;
+  text-align: right;
+}
+.form-check-reverse .form-check-input {
+  float: right;
+  margin-right: -2rem;
+  margin-left: 0;
+}
+
+.form-check-input {
+  --tblr-form-check-bg: var(--tblr-bg-forms);
+  width: 1.25rem;
+  height: 1.25rem;
+  margin-top: 0.0892857143rem;
+  vertical-align: top;
+  -webkit-appearance: none;
+     -moz-appearance: none;
+          appearance: none;
+  background-color: var(--tblr-form-check-bg);
+  background-image: var(--tblr-form-check-bg-image);
+  background-repeat: no-repeat;
+  background-position: center;
+  background-size: contain;
+  border: var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent);
+  -webkit-print-color-adjust: exact;
+     color-adjust: exact;
+          print-color-adjust: exact;
+}
+.form-check-input[type=checkbox] {
+  border-radius: var(--tblr-border-radius);
+}
+.form-check-input[type=radio] {
+  border-radius: 50%;
+}
+.form-check-input:active {
+  filter: brightness(90%);
+}
+.form-check-input:focus {
+  border-color: #80aad3;
+  outline: 0;
+  box-shadow: 0 0 0 0.25rem rgba(var(--tblr-primary-rgb), 0.25);
+}
+.form-check-input:checked {
+  background-color: var(--tblr-primary);
+  border-color: var(--tblr-border-color-translucent);
+}
+.form-check-input:checked[type=checkbox] {
+  --tblr-form-check-bg-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' width='16' height='16'%3e%3cpath fill='none' stroke='%23ffffff' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M4 8.5l2.5 2.5l5.5 -5.5'/%3e%3c/svg%3e");
+}
+.form-check-input:checked[type=radio] {
+  --tblr-form-check-bg-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3ccircle r='3' fill='%23ffffff' cx='8' cy='8' /%3e%3c/svg%3e");
+}
+.form-check-input[type=checkbox]:indeterminate {
+  background-color: var(--tblr-primary);
+  border-color: var(--tblr-primary);
+  --tblr-form-check-bg-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23ffffff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/%3e%3c/svg%3e");
+}
+.form-check-input:disabled {
+  pointer-events: none;
+  filter: none;
+  opacity: 0.5;
+}
+.form-check-input[disabled] ~ .form-check-label, .form-check-input:disabled ~ .form-check-label {
+  cursor: default;
+  opacity: 0.7;
+}
+
+.form-switch {
+  padding-left: 2.5rem;
+}
+.form-switch .form-check-input {
+  --tblr-form-switch-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23dadfe5'/%3e%3c/svg%3e");
+  width: 2rem;
+  margin-left: -2.5rem;
+  background-image: var(--tblr-form-switch-bg);
+  background-position: left center;
+  border-radius: 2rem;
+  transition: background-position 0.15s ease-in-out;
+}
+@media (prefers-reduced-motion: reduce) {
+  .form-switch .form-check-input {
+    transition: none;
+  }
+}
+.form-switch .form-check-input:focus {
+  --tblr-form-switch-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%2380aad3'/%3e%3c/svg%3e");
+}
+.form-switch .form-check-input:checked {
+  background-position: right center;
+  --tblr-form-switch-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23ffffff'/%3e%3c/svg%3e");
+}
+.form-switch.form-check-reverse {
+  padding-right: 2.5rem;
+  padding-left: 0;
+}
+.form-switch.form-check-reverse .form-check-input {
+  margin-right: -2.5rem;
+  margin-left: 0;
+}
+
+.form-check-inline {
+  display: inline-block;
+  margin-right: 1rem;
+}
+
+.btn-check {
+  position: absolute;
+  clip: rect(0, 0, 0, 0);
+  pointer-events: none;
+}
+.btn-check[disabled] + .btn, .btn-check:disabled + .btn {
+  pointer-events: none;
+  filter: none;
+  opacity: 0.4;
+}
+
+[data-bs-theme=dark] .form-switch .form-check-input:not(:checked):not(:focus) {
+  --tblr-form-switch-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%28255, 255, 255, 0.25%29'/%3e%3c/svg%3e");
+}
+
+.form-range {
+  width: 100%;
+  height: 1.25rem;
+  padding: 0;
+  -webkit-appearance: none;
+     -moz-appearance: none;
+          appearance: none;
+  background-color: transparent;
+}
+.form-range:focus {
+  outline: 0;
+}
+.form-range:focus::-webkit-slider-thumb {
+  box-shadow: 0 0 0 1px #f6f8fb, 0 0 0 0.25rem rgba(var(--tblr-primary-rgb), 0.25);
+}
+.form-range:focus::-moz-range-thumb {
+  box-shadow: 0 0 0 1px #f6f8fb, 0 0 0 0.25rem rgba(var(--tblr-primary-rgb), 0.25);
+}
+.form-range::-moz-focus-outer {
+  border: 0;
+}
+.form-range::-webkit-slider-thumb {
+  width: 1rem;
+  height: 1rem;
+  margin-top: -0.375rem;
+  -webkit-appearance: none;
+          appearance: none;
+  background-color: var(--tblr-primary);
+  border: 2px var(--tblr-border-style) #ffffff;
+  border-radius: 1rem;
+  box-shadow: 0 0.1rem 0.25rem rgba(0, 0, 0, 0.1);
+  -webkit-transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
+  transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
+}
+@media (prefers-reduced-motion: reduce) {
+  .form-range::-webkit-slider-thumb {
+    -webkit-transition: none;
+    transition: none;
+  }
+}
+.form-range::-webkit-slider-thumb:active {
+  background-color: #b3cce4;
+}
+.form-range::-webkit-slider-runnable-track {
+  width: 100%;
+  height: 0.25rem;
+  color: transparent;
+  cursor: pointer;
+  background-color: var(--tblr-border-color);
+  border-color: transparent;
+  border-radius: 1rem;
+  box-shadow: 0 0 transparent;
+}
+.form-range::-moz-range-thumb {
+  width: 1rem;
+  height: 1rem;
+  -moz-appearance: none;
+       appearance: none;
+  background-color: var(--tblr-primary);
+  border: 2px var(--tblr-border-style) #ffffff;
+  border-radius: 1rem;
+  box-shadow: 0 0.1rem 0.25rem rgba(0, 0, 0, 0.1);
+  -moz-transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
+  transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
+}
+@media (prefers-reduced-motion: reduce) {
+  .form-range::-moz-range-thumb {
+    -moz-transition: none;
+    transition: none;
+  }
+}
+.form-range::-moz-range-thumb:active {
+  background-color: #b3cce4;
+}
+.form-range::-moz-range-track {
+  width: 100%;
+  height: 0.25rem;
+  color: transparent;
+  cursor: pointer;
+  background-color: var(--tblr-border-color);
+  border-color: transparent;
+  border-radius: 1rem;
+  box-shadow: 0 0 transparent;
+}
+.form-range:disabled {
+  pointer-events: none;
+}
+.form-range:disabled::-webkit-slider-thumb {
+  background-color: var(--tblr-secondary-color);
+}
+.form-range:disabled::-moz-range-thumb {
+  background-color: var(--tblr-secondary-color);
+}
+
+.form-floating {
+  position: relative;
+}
+.form-floating > .form-control,
+.form-floating > .form-control-plaintext,
+.form-floating > .form-select {
+  height: calc(3.5rem + calc(var(--tblr-border-width) * 2));
+  min-height: calc(3.5rem + calc(var(--tblr-border-width) * 2));
+  line-height: 1.25;
+}
+.form-floating > label {
+  position: absolute;
+  top: 0;
+  left: 0;
+  z-index: 2;
+  height: 100%;
+  padding: 1rem 0.75rem;
+  overflow: hidden;
+  text-align: start;
+  text-overflow: ellipsis;
+  white-space: nowrap;
+  pointer-events: none;
+  border: var(--tblr-border-width) solid transparent;
+  transform-origin: 0 0;
+  transition: opacity 0.1s ease-in-out, transform 0.1s ease-in-out;
+}
+@media (prefers-reduced-motion: reduce) {
+  .form-floating > label {
+    transition: none;
+  }
+}
+.form-floating > .form-control,
+.form-floating > .form-control-plaintext {
+  padding: 1rem 0.75rem;
+}
+.form-floating > .form-control::-webkit-input-placeholder, .form-floating > .form-control-plaintext::-webkit-input-placeholder {
+  color: transparent;
+}
+.form-floating > .form-control:-ms-input-placeholder, .form-floating > .form-control-plaintext:-ms-input-placeholder {
+  color: transparent;
+}
+.form-floating > .form-control::-ms-input-placeholder, .form-floating > .form-control-plaintext::-ms-input-placeholder {
+  color: transparent;
+}
+.form-floating > .form-control::placeholder,
+.form-floating > .form-control-plaintext::placeholder {
+  color: transparent;
+}
+.form-floating > .form-control:not(:-ms-input-placeholder), .form-floating > .form-control-plaintext:not(:-ms-input-placeholder) {
+  padding-top: 1.625rem;
+  padding-bottom: 0.625rem;
+}
+.form-floating > .form-control:focus, .form-floating > .form-control:not(:placeholder-shown),
+.form-floating > .form-control-plaintext:focus,
+.form-floating > .form-control-plaintext:not(:placeholder-shown) {
+  padding-top: 1.625rem;
+  padding-bottom: 0.625rem;
+}
+.form-floating > .form-control:-webkit-autofill,
+.form-floating > .form-control-plaintext:-webkit-autofill {
+  padding-top: 1.625rem;
+  padding-bottom: 0.625rem;
+}
+.form-floating > .form-select {
+  padding-top: 1.625rem;
+  padding-bottom: 0.625rem;
+}
+.form-floating > .form-control:not(:-ms-input-placeholder) ~ label {
+  color: rgba(var(--tblr-body-color-rgb), 0.65);
+  transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);
+}
+.form-floating > .form-control:focus ~ label,
+.form-floating > .form-control:not(:placeholder-shown) ~ label,
+.form-floating > .form-control-plaintext ~ label,
+.form-floating > .form-select ~ label {
+  color: rgba(var(--tblr-body-color-rgb), 0.65);
+  transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);
+}
+.form-floating > .form-control:not(:-ms-input-placeholder) ~ label::after {
+  position: absolute;
+  inset: 1rem 0.375rem;
+  z-index: -1;
+  height: 1.5em;
+  content: "";
+  background-color: var(--tblr-bg-forms);
+  border-radius: var(--tblr-border-radius);
+}
+.form-floating > .form-control:focus ~ label::after,
+.form-floating > .form-control:not(:placeholder-shown) ~ label::after,
+.form-floating > .form-control-plaintext ~ label::after,
+.form-floating > .form-select ~ label::after {
+  position: absolute;
+  inset: 1rem 0.375rem;
+  z-index: -1;
+  height: 1.5em;
+  content: "";
+  background-color: var(--tblr-bg-forms);
+  border-radius: var(--tblr-border-radius);
+}
+.form-floating > .form-control:-webkit-autofill ~ label {
+  color: rgba(var(--tblr-body-color-rgb), 0.65);
+  transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);
+}
+.form-floating > .form-control-plaintext ~ label {
+  border-width: var(--tblr-border-width) 0;
+}
+.form-floating > :disabled ~ label,
+.form-floating > .form-control:disabled ~ label {
+  color: #667382;
+}
+.form-floating > :disabled ~ label::after,
+.form-floating > .form-control:disabled ~ label::after {
+  background-color: var(--tblr-bg-surface-secondary);
+}
+
+.input-group {
+  position: relative;
+  display: flex;
+  flex-wrap: wrap;
+  align-items: stretch;
+  width: 100%;
+}
+.input-group > .form-control,
+.input-group > .form-select,
+.input-group > .form-floating {
+  position: relative;
+  flex: 1 1 auto;
+  width: 1%;
+  min-width: 0;
+}
+.input-group > .form-control:focus,
+.input-group > .form-select:focus,
+.input-group > .form-floating:focus-within {
+  z-index: 5;
+}
+.input-group .btn {
+  position: relative;
+  z-index: 2;
+}
+.input-group .btn:focus {
+  z-index: 5;
+}
+
+.input-group-text {
+  display: flex;
+  align-items: center;
+  padding: 0.5625rem 0.75rem;
+  font-size: 0.875rem;
+  font-weight: 400;
+  line-height: 1.4285714286;
+  color: var(--tblr-secondary);
+  text-align: center;
+  white-space: nowrap;
+  background-color: var(--tblr-bg-surface-secondary);
+  border: var(--tblr-border-width) solid var(--tblr-border-color);
+  border-radius: var(--tblr-border-radius);
+}
+
+.input-group-lg > .form-control,
+.input-group-lg > .form-select,
+.input-group-lg > .input-group-text,
+.input-group-lg > .btn {
+  padding: 0.5rem 0.75rem;
+  font-size: 1.25rem;
+  border-radius: var(--tblr-border-radius-lg);
+}
+
+.input-group-sm > .form-control,
+.input-group-sm > .form-select,
+.input-group-sm > .input-group-text,
+.input-group-sm > .btn {
+  padding: 0.125rem 0.25rem;
+  font-size: 0.75rem;
+  border-radius: var(--tblr-border-radius-sm);
+}
+
+.input-group-lg > .form-select,
+.input-group-sm > .form-select {
+  padding-right: 3rem;
+}
+
+.input-group:not(.has-validation) > :not(:last-child):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating),
+.input-group:not(.has-validation) > .dropdown-toggle:nth-last-child(n+3),
+.input-group:not(.has-validation) > .form-floating:not(:last-child) > .form-control,
+.input-group:not(.has-validation) > .form-floating:not(:last-child) > .form-select {
+  border-top-right-radius: 0;
+  border-bottom-right-radius: 0;
+}
+.input-group.has-validation > :nth-last-child(n+3):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating),
+.input-group.has-validation > .dropdown-toggle:nth-last-child(n+4),
+.input-group.has-validation > .form-floating:nth-last-child(n+3) > .form-control,
+.input-group.has-validation > .form-floating:nth-last-child(n+3) > .form-select {
+  border-top-right-radius: 0;
+  border-bottom-right-radius: 0;
+}
+.input-group > :not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback) {
+  margin-left: calc(var(--tblr-border-width) * -1);
+  border-top-left-radius: 0;
+  border-bottom-left-radius: 0;
+}
+.input-group > .form-floating:not(:first-child) > .form-control,
+.input-group > .form-floating:not(:first-child) > .form-select {
+  border-top-left-radius: 0;
+  border-bottom-left-radius: 0;
+}
+
+.valid-feedback {
+  display: none;
+  width: 100%;
+  margin-top: 0.25rem;
+  font-size: 85.714285%;
+  color: var(--tblr-form-valid-color);
+}
+
+.valid-tooltip {
+  position: absolute;
+  top: 100%;
+  z-index: 5;
+  display: none;
+  max-width: 100%;
+  padding: var(--tblr-spacer-2) var(--tblr-spacer-2);
+  margin-top: 0.1rem;
+  font-size: 0.765625rem;
+  color: #fff;
+  background-color: var(--tblr-success);
+  border-radius: var(--tblr-border-radius);
+}
+
+.was-validated :valid ~ .valid-feedback,
+.was-validated :valid ~ .valid-tooltip,
+.is-valid ~ .valid-feedback,
+.is-valid ~ .valid-tooltip {
+  display: block;
+}
+
+.was-validated .form-control:valid, .form-control.is-valid {
+  border-color: var(--tblr-form-valid-border-color);
+  padding-right: calc(1.4285714286em + 1.125rem);
+  background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%232fb344' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3e%3cpolyline points='20 6 9 17 4 12'%3e%3c/polyline%3e%3c/svg%3e");
+  background-repeat: no-repeat;
+  background-position: right calc(0.3571428572em + 0.28125rem) center;
+  background-size: calc(0.7142857143em + 0.5625rem) calc(0.7142857143em + 0.5625rem);
+}
+.was-validated .form-control:valid:focus, .form-control.is-valid:focus {
+  border-color: var(--tblr-form-valid-border-color);
+  box-shadow: 0 0 0 0.25rem rgba(var(--tblr-success-rgb), 0.25);
+}
+
+.was-validated textarea.form-control:valid, textarea.form-control.is-valid {
+  padding-right: calc(1.4285714286em + 1.125rem);
+  background-position: top calc(0.3571428572em + 0.28125rem) right calc(0.3571428572em + 0.28125rem);
+}
+
+.was-validated .form-select:valid, .form-select.is-valid {
+  border-color: var(--tblr-form-valid-border-color);
+}
+.was-validated .form-select:valid:not([multiple]):not([size]), .was-validated .form-select:valid:not([multiple])[size="1"], .form-select.is-valid:not([multiple]):not([size]), .form-select.is-valid:not([multiple])[size="1"] {
+  --tblr-form-select-bg-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%232fb344' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3e%3cpolyline points='20 6 9 17 4 12'%3e%3c/polyline%3e%3c/svg%3e");
+  padding-right: 4.125rem;
+  background-position: right 0.75rem center, center right 2.25rem;
+  background-size: 16px 12px, calc(0.7142857143em + 0.5625rem) calc(0.7142857143em + 0.5625rem);
+}
+.was-validated .form-select:valid:focus, .form-select.is-valid:focus {
+  border-color: var(--tblr-form-valid-border-color);
+  box-shadow: 0 0 0 0.25rem rgba(var(--tblr-success-rgb), 0.25);
+}
+
+.was-validated .form-control-color:valid, .form-control-color.is-valid {
+  width: calc(3rem + calc(1.4285714286em + 1.125rem));
+}
+
+.was-validated .form-check-input:valid, .form-check-input.is-valid {
+  border-color: var(--tblr-form-valid-border-color);
+}
+.was-validated .form-check-input:valid:checked, .form-check-input.is-valid:checked {
+  background-color: var(--tblr-form-valid-color);
+}
+.was-validated .form-check-input:valid:focus, .form-check-input.is-valid:focus {
+  box-shadow: 0 0 0 0.25rem rgba(var(--tblr-success-rgb), 0.25);
+}
+.was-validated .form-check-input:valid ~ .form-check-label, .form-check-input.is-valid ~ .form-check-label {
+  color: var(--tblr-form-valid-color);
+}
+
+.form-check-inline .form-check-input ~ .valid-feedback {
+  margin-left: 0.5em;
+}
+
+.was-validated .input-group > .form-control:not(:focus):valid, .input-group > .form-control:not(:focus).is-valid,
+.was-validated .input-group > .form-select:not(:focus):valid,
+.input-group > .form-select:not(:focus).is-valid,
+.was-validated .input-group > .form-floating:not(:focus-within):valid,
+.input-group > .form-floating:not(:focus-within).is-valid {
+  z-index: 3;
+}
+
+.invalid-feedback {
+  display: none;
+  width: 100%;
+  margin-top: 0.25rem;
+  font-size: 85.714285%;
+  color: var(--tblr-form-invalid-color);
+}
+
+.invalid-tooltip {
+  position: absolute;
+  top: 100%;
+  z-index: 5;
+  display: none;
+  max-width: 100%;
+  padding: var(--tblr-spacer-2) var(--tblr-spacer-2);
+  margin-top: 0.1rem;
+  font-size: 0.765625rem;
+  color: #fff;
+  background-color: var(--tblr-danger);
+  border-radius: var(--tblr-border-radius);
+}
+
+.was-validated :invalid ~ .invalid-feedback,
+.was-validated :invalid ~ .invalid-tooltip,
+.is-invalid ~ .invalid-feedback,
+.is-invalid ~ .invalid-tooltip {
+  display: block;
+}
+
+.was-validated .form-control:invalid, .form-control.is-invalid {
+  border-color: var(--tblr-form-invalid-border-color);
+  padding-right: calc(1.4285714286em + 1.125rem);
+  background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23d63939' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3e%3cline x1='18' y1='6' x2='6' y2='18'%3e%3c/line%3e%3cline x1='6' y1='6' x2='18' y2='18'%3e%3c/line%3e%3c/svg%3e");
+  background-repeat: no-repeat;
+  background-position: right calc(0.3571428572em + 0.28125rem) center;
+  background-size: calc(0.7142857143em + 0.5625rem) calc(0.7142857143em + 0.5625rem);
+}
+.was-validated .form-control:invalid:focus, .form-control.is-invalid:focus {
+  border-color: var(--tblr-form-invalid-border-color);
+  box-shadow: 0 0 0 0.25rem rgba(var(--tblr-danger-rgb), 0.25);
+}
+
+.was-validated textarea.form-control:invalid, textarea.form-control.is-invalid {
+  padding-right: calc(1.4285714286em + 1.125rem);
+  background-position: top calc(0.3571428572em + 0.28125rem) right calc(0.3571428572em + 0.28125rem);
+}
+
+.was-validated .form-select:invalid, .form-select.is-invalid {
+  border-color: var(--tblr-form-invalid-border-color);
+}
+.was-validated .form-select:invalid:not([multiple]):not([size]), .was-validated .form-select:invalid:not([multiple])[size="1"], .form-select.is-invalid:not([multiple]):not([size]), .form-select.is-invalid:not([multiple])[size="1"] {
+  --tblr-form-select-bg-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23d63939' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3e%3cline x1='18' y1='6' x2='6' y2='18'%3e%3c/line%3e%3cline x1='6' y1='6' x2='18' y2='18'%3e%3c/line%3e%3c/svg%3e");
+  padding-right: 4.125rem;
+  background-position: right 0.75rem center, center right 2.25rem;
+  background-size: 16px 12px, calc(0.7142857143em + 0.5625rem) calc(0.7142857143em + 0.5625rem);
+}
+.was-validated .form-select:invalid:focus, .form-select.is-invalid:focus {
+  border-color: var(--tblr-form-invalid-border-color);
+  box-shadow: 0 0 0 0.25rem rgba(var(--tblr-danger-rgb), 0.25);
+}
+
+.was-validated .form-control-color:invalid, .form-control-color.is-invalid {
+  width: calc(3rem + calc(1.4285714286em + 1.125rem));
+}
+
+.was-validated .form-check-input:invalid, .form-check-input.is-invalid {
+  border-color: var(--tblr-form-invalid-border-color);
+}
+.was-validated .form-check-input:invalid:checked, .form-check-input.is-invalid:checked {
+  background-color: var(--tblr-form-invalid-color);
+}
+.was-validated .form-check-input:invalid:focus, .form-check-input.is-invalid:focus {
+  box-shadow: 0 0 0 0.25rem rgba(var(--tblr-danger-rgb), 0.25);
+}
+.was-validated .form-check-input:invalid ~ .form-check-label, .form-check-input.is-invalid ~ .form-check-label {
+  color: var(--tblr-form-invalid-color);
+}
+
+.form-check-inline .form-check-input ~ .invalid-feedback {
+  margin-left: 0.5em;
+}
+
+.was-validated .input-group > .form-control:not(:focus):invalid, .input-group > .form-control:not(:focus).is-invalid,
+.was-validated .input-group > .form-select:not(:focus):invalid,
+.input-group > .form-select:not(:focus).is-invalid,
+.was-validated .input-group > .form-floating:not(:focus-within):invalid,
+.input-group > .form-floating:not(:focus-within).is-invalid {
+  z-index: 4;
+}
+
+.btn {
+  --tblr-btn-padding-x: 1rem;
+  --tblr-btn-padding-y: 0.5625rem;
+  --tblr-btn-font-family: var(--tblr-font-sans-serif);
+  --tblr-btn-font-size: 0.875rem;
+  --tblr-btn-font-weight: var(--tblr-font-weight-medium);
+  --tblr-btn-line-height: 1.4285714286;
+  --tblr-btn-color: var(--tblr-body-color);
+  --tblr-btn-bg: transparent;
+  --tblr-btn-border-width: var(--tblr-border-width);
+  --tblr-btn-border-color: transparent;
+  --tblr-btn-border-radius: var(--tblr-border-radius);
+  --tblr-btn-hover-border-color: transparent;
+  --tblr-btn-box-shadow: var(--tblr-box-shadow-input);
+  --tblr-btn-disabled-opacity: 0.4;
+  --tblr-btn-focus-box-shadow: 0 0 0 0.25rem rgba(var(--tblr-btn-focus-shadow-rgb), .5);
+  display: inline-block;
+  padding: var(--tblr-btn-padding-y) var(--tblr-btn-padding-x);
+  font-family: var(--tblr-btn-font-family);
+  font-size: var(--tblr-btn-font-size);
+  font-weight: var(--tblr-btn-font-weight);
+  line-height: var(--tblr-btn-line-height);
+  color: var(--tblr-btn-color);
+  text-align: center;
+  vertical-align: middle;
+  cursor: pointer;
+  -webkit-user-select: none;
+     -moz-user-select: none;
+      -ms-user-select: none;
+          user-select: none;
+  border: var(--tblr-btn-border-width) solid var(--tblr-btn-border-color);
+  border-radius: var(--tblr-btn-border-radius);
+  background-color: var(--tblr-btn-bg);
+  box-shadow: var(--tblr-btn-box-shadow);
+  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
+}
+@media (prefers-reduced-motion: reduce) {
+  .btn {
+    transition: none;
+  }
+}
+.btn:hover {
+  color: var(--tblr-btn-hover-color);
+  text-decoration: none;
+  background-color: var(--tblr-btn-hover-bg);
+  border-color: var(--tblr-btn-hover-border-color);
+}
+.btn-check + .btn:hover {
+  color: var(--tblr-btn-color);
+  background-color: var(--tblr-btn-bg);
+  border-color: var(--tblr-btn-border-color);
+}
+.btn:focus-visible {
+  color: var(--tblr-btn-hover-color);
+  background-color: var(--tblr-btn-hover-bg);
+  border-color: var(--tblr-btn-hover-border-color);
+  outline: 0;
+  box-shadow: var(--tblr-btn-box-shadow), var(--tblr-btn-focus-box-shadow);
+}
+.btn-check:focus-visible + .btn {
+  border-color: var(--tblr-btn-hover-border-color);
+  outline: 0;
+  box-shadow: var(--tblr-btn-box-shadow), var(--tblr-btn-focus-box-shadow);
+}
+.btn-check:checked + .btn, :not(.btn-check) + .btn:active, .btn:first-child:active, .btn.active, .btn.show {
+  color: var(--tblr-btn-active-color);
+  background-color: var(--tblr-btn-active-bg);
+  border-color: var(--tblr-btn-active-border-color);
+  box-shadow: var(--tblr-btn-active-shadow);
+}
+.btn-check:checked + .btn:focus-visible, :not(.btn-check) + .btn:active:focus-visible, .btn:first-child:active:focus-visible, .btn.active:focus-visible, .btn.show:focus-visible {
+  box-shadow: var(--tblr-btn-active-shadow), var(--tblr-btn-focus-box-shadow);
+}
+.btn:disabled, .btn.disabled, fieldset:disabled .btn {
+  color: var(--tblr-btn-disabled-color);
+  pointer-events: none;
+  background-color: var(--tblr-btn-disabled-bg);
+  border-color: var(--tblr-btn-disabled-border-color);
+  opacity: var(--tblr-btn-disabled-opacity);
+  box-shadow: none;
+}
+
+.btn-link {
+  --tblr-btn-font-weight: 400;
+  --tblr-btn-color: var(--tblr-link-color);
+  --tblr-btn-bg: transparent;
+  --tblr-btn-border-color: transparent;
+  --tblr-btn-hover-color: var(--tblr-link-hover-color);
+  --tblr-btn-hover-border-color: transparent;
+  --tblr-btn-active-color: var(--tblr-link-hover-color);
+  --tblr-btn-active-border-color: transparent;
+  --tblr-btn-disabled-color: #667382;
+  --tblr-btn-disabled-border-color: transparent;
+  --tblr-btn-box-shadow: 0 0 0 #000;
+  --tblr-btn-focus-shadow-rgb: 38, 109, 179;
+  text-decoration: none;
+}
+.btn-link:hover, .btn-link:focus-visible {
+  text-decoration: underline;
+}
+.btn-link:focus-visible {
+  color: var(--tblr-btn-color);
+}
+.btn-link:hover {
+  color: var(--tblr-btn-hover-color);
+}
+
+.btn-lg, .btn-group-lg > .btn {
+  --tblr-btn-padding-y: 0.5rem;
+  --tblr-btn-padding-x: 0.75rem;
+  --tblr-btn-font-size: 1.25rem;
+  --tblr-btn-border-radius: var(--tblr-border-radius-lg);
+}
+
+.btn-sm, .btn-group-sm > .btn {
+  --tblr-btn-padding-y: 0.125rem;
+  --tblr-btn-padding-x: 0.25rem;
+  --tblr-btn-font-size: 0.75rem;
+  --tblr-btn-border-radius: var(--tblr-border-radius-sm);
+}
+
+.fade {
+  transition: opacity 0.15s linear;
+}
+@media (prefers-reduced-motion: reduce) {
+  .fade {
+    transition: none;
+  }
+}
+.fade:not(.show) {
+  opacity: 0;
+}
+
+.collapse:not(.show) {
+  display: none;
+}
+
+.collapsing {
+  height: 0;
+  overflow: hidden;
+  transition: height 0.35s ease;
+}
+@media (prefers-reduced-motion: reduce) {
+  .collapsing {
+    transition: none;
+  }
+}
+.collapsing.collapse-horizontal {
+  width: 0;
+  height: auto;
+  transition: width 0.35s ease;
+}
+@media (prefers-reduced-motion: reduce) {
+  .collapsing.collapse-horizontal {
+    transition: none;
+  }
+}
+
+.dropup,
+.dropend,
+.dropdown,
+.dropstart,
+.dropup-center,
+.dropdown-center {
+  position: relative;
+}
+
+.dropdown-toggle {
+  white-space: nowrap;
+}
+.dropdown-toggle:after {
+  content: "";
+  display: inline-block;
+  vertical-align: 0.306em;
+  width: 0.36em;
+  height: 0.36em;
+  border-bottom: 1px var(--tblr-border-style);
+  border-left: 1px var(--tblr-border-style);
+  margin-right: 0.1em;
+  margin-left: 0.4em;
+  transform: rotate(-45deg);
+}
+
+.dropdown-menu {
+  --tblr-dropdown-zindex: 1000;
+  --tblr-dropdown-min-width: 11rem;
+  --tblr-dropdown-padding-x: 0;
+  --tblr-dropdown-padding-y: 0.25rem;
+  --tblr-dropdown-spacer: 1px;
+  --tblr-dropdown-font-size: 0.875rem;
+  --tblr-dropdown-color: var(--tblr-body-color);
+  --tblr-dropdown-bg: var(--tblr-bg-surface);
+  --tblr-dropdown-border-color: var(--tblr-border-color-translucent);
+  --tblr-dropdown-border-radius: var(--tblr-border-radius);
+  --tblr-dropdown-border-width: var(--tblr-border-width);
+  --tblr-dropdown-inner-border-radius: calc(var(--tblr-border-radius) - var(--tblr-border-width));
+  --tblr-dropdown-divider-bg: var(--tblr-border-color-translucent);
+  --tblr-dropdown-divider-margin-y: var(--tblr-spacer);
+  --tblr-dropdown-box-shadow: var(--tblr-box-shadow-dropdown);
+  --tblr-dropdown-link-color: inherit;
+  --tblr-dropdown-link-hover-color: inherit;
+  --tblr-dropdown-link-hover-bg: rgba(var(--tblr-text-secondary-rgb), 0.04);
+  --tblr-dropdown-link-active-color: var(--tblr-primary);
+  --tblr-dropdown-link-active-bg: var(--tblr-active-bg);
+  --tblr-dropdown-link-disabled-color: var(--tblr-tertiary-color);
+  --tblr-dropdown-item-padding-x: 0.75rem;
+  --tblr-dropdown-item-padding-y: 0.5rem;
+  --tblr-dropdown-header-color: #667382;
+  --tblr-dropdown-header-padding-x: 0.75rem;
+  --tblr-dropdown-header-padding-y: 0.25rem;
+  position: absolute;
+  z-index: var(--tblr-dropdown-zindex);
+  display: none;
+  min-width: var(--tblr-dropdown-min-width);
+  padding: var(--tblr-dropdown-padding-y) var(--tblr-dropdown-padding-x);
+  margin: 0;
+  font-size: var(--tblr-dropdown-font-size);
+  color: var(--tblr-dropdown-color);
+  text-align: left;
+  list-style: none;
+  background-color: var(--tblr-dropdown-bg);
+  background-clip: padding-box;
+  border: var(--tblr-dropdown-border-width) solid var(--tblr-dropdown-border-color);
+  border-radius: var(--tblr-dropdown-border-radius);
+  box-shadow: var(--tblr-dropdown-box-shadow);
+}
+.dropdown-menu[data-bs-popper] {
+  top: 100%;
+  left: 0;
+  margin-top: var(--tblr-dropdown-spacer);
+}
+
+.dropdown-menu-start {
+  --bs-position: start;
+}
+.dropdown-menu-start[data-bs-popper] {
+  right: auto;
+  left: 0;
+}
+
+.dropdown-menu-end {
+  --bs-position: end;
+}
+.dropdown-menu-end[data-bs-popper] {
+  right: 0;
+  left: auto;
+}
+
+@media (min-width: 576px) {
+  .dropdown-menu-sm-start {
+    --bs-position: start;
+  }
+  .dropdown-menu-sm-start[data-bs-popper] {
+    right: auto;
+    left: 0;
+  }
+  .dropdown-menu-sm-end {
+    --bs-position: end;
+  }
+  .dropdown-menu-sm-end[data-bs-popper] {
+    right: 0;
+    left: auto;
+  }
+}
+@media (min-width: 768px) {
+  .dropdown-menu-md-start {
+    --bs-position: start;
+  }
+  .dropdown-menu-md-start[data-bs-popper] {
+    right: auto;
+    left: 0;
+  }
+  .dropdown-menu-md-end {
+    --bs-position: end;
+  }
+  .dropdown-menu-md-end[data-bs-popper] {
+    right: 0;
+    left: auto;
+  }
+}
+@media (min-width: 992px) {
+  .dropdown-menu-lg-start {
+    --bs-position: start;
+  }
+  .dropdown-menu-lg-start[data-bs-popper] {
+    right: auto;
+    left: 0;
+  }
+  .dropdown-menu-lg-end {
+    --bs-position: end;
+  }
+  .dropdown-menu-lg-end[data-bs-popper] {
+    right: 0;
+    left: auto;
+  }
+}
+@media (min-width: 1200px) {
+  .dropdown-menu-xl-start {
+    --bs-position: start;
+  }
+  .dropdown-menu-xl-start[data-bs-popper] {
+    right: auto;
+    left: 0;
+  }
+  .dropdown-menu-xl-end {
+    --bs-position: end;
+  }
+  .dropdown-menu-xl-end[data-bs-popper] {
+    right: 0;
+    left: auto;
+  }
+}
+@media (min-width: 1400px) {
+  .dropdown-menu-xxl-start {
+    --bs-position: start;
+  }
+  .dropdown-menu-xxl-start[data-bs-popper] {
+    right: auto;
+    left: 0;
+  }
+  .dropdown-menu-xxl-end {
+    --bs-position: end;
+  }
+  .dropdown-menu-xxl-end[data-bs-popper] {
+    right: 0;
+    left: auto;
+  }
+}
+.dropup .dropdown-menu[data-bs-popper] {
+  top: auto;
+  bottom: 100%;
+  margin-top: 0;
+  margin-bottom: var(--tblr-dropdown-spacer);
+}
+.dropup .dropdown-toggle:after {
+  content: "";
+  display: inline-block;
+  vertical-align: 0.306em;
+  width: 0.36em;
+  height: 0.36em;
+  border-bottom: 1px var(--tblr-border-style);
+  border-left: 1px var(--tblr-border-style);
+  margin-right: 0.1em;
+  margin-left: 0.4em;
+  transform: rotate(135deg);
+}
+
+.dropend .dropdown-menu[data-bs-popper] {
+  top: 0;
+  right: auto;
+  left: 100%;
+  margin-top: 0;
+  margin-left: var(--tblr-dropdown-spacer);
+}
+.dropend .dropdown-toggle:after {
+  content: "";
+  display: inline-block;
+  vertical-align: 0.306em;
+  width: 0.36em;
+  height: 0.36em;
+  border-bottom: 1px var(--tblr-border-style);
+  border-left: 1px var(--tblr-border-style);
+  margin-right: 0.1em;
+  margin-left: 0.4em;
+  transform: rotate(-135deg);
+}
+.dropend .dropdown-toggle::after {
+  vertical-align: 0;
+}
+
+.dropstart .dropdown-menu[data-bs-popper] {
+  top: 0;
+  right: 100%;
+  left: auto;
+  margin-top: 0;
+  margin-right: var(--tblr-dropdown-spacer);
+}
+.dropstart .dropdown-toggle:after {
+  content: "";
+  display: inline-block;
+  vertical-align: 0.306em;
+  width: 0.36em;
+  height: 0.36em;
+  border-bottom: 1px var(--tblr-border-style);
+  border-left: 1px var(--tblr-border-style);
+  margin-right: 0.1em;
+  margin-left: 0.4em;
+  transform: rotate(45deg);
+}
+.dropstart .dropdown-toggle::before {
+  vertical-align: 0;
+}
+
+.dropdown-divider {
+  height: 0;
+  margin: var(--tblr-dropdown-divider-margin-y) 0;
+  overflow: hidden;
+  border-top: 1px solid var(--tblr-dropdown-divider-bg);
+  opacity: 1;
+}
+
+.dropdown-item {
+  display: block;
+  width: 100%;
+  padding: var(--tblr-dropdown-item-padding-y) var(--tblr-dropdown-item-padding-x);
+  clear: both;
+  font-weight: 400;
+  color: var(--tblr-dropdown-link-color);
+  text-align: inherit;
+  white-space: nowrap;
+  background-color: transparent;
+  border: 0;
+  border-radius: var(--tblr-dropdown-item-border-radius, 0);
+}
+.dropdown-item:hover, .dropdown-item:focus {
+  color: var(--tblr-dropdown-link-hover-color);
+  text-decoration: none;
+  background-color: var(--tblr-dropdown-link-hover-bg);
+}
+.dropdown-item.active, .dropdown-item:active {
+  color: var(--tblr-dropdown-link-active-color);
+  text-decoration: none;
+  background-color: var(--tblr-dropdown-link-active-bg);
+}
+.dropdown-item.disabled, .dropdown-item:disabled {
+  color: var(--tblr-dropdown-link-disabled-color);
+  pointer-events: none;
+  background-color: transparent;
+}
+
+.dropdown-menu.show {
+  display: block;
+}
+
+.dropdown-header {
+  display: block;
+  padding: var(--tblr-dropdown-header-padding-y) var(--tblr-dropdown-header-padding-x);
+  margin-bottom: 0;
+  font-size: 0.765625rem;
+  color: var(--tblr-dropdown-header-color);
+  white-space: nowrap;
+}
+
+.dropdown-item-text {
+  display: block;
+  padding: var(--tblr-dropdown-item-padding-y) var(--tblr-dropdown-item-padding-x);
+  color: var(--tblr-dropdown-link-color);
+}
+
+.dropdown-menu-dark {
+  --tblr-dropdown-color: #dadfe5;
+  --tblr-dropdown-bg: #182433;
+  --tblr-dropdown-border-color: var(--tblr-border-color-translucent);
+  --tblr-dropdown-box-shadow: ;
+  --tblr-dropdown-link-color: #dadfe5;
+  --tblr-dropdown-link-hover-color: #ffffff;
+  --tblr-dropdown-divider-bg: var(--tblr-border-color-translucent);
+  --tblr-dropdown-link-hover-bg: rgba(255, 255, 255, 0.15);
+  --tblr-dropdown-link-active-color: var(--tblr-primary);
+  --tblr-dropdown-link-active-bg: var(--tblr-active-bg);
+  --tblr-dropdown-link-disabled-color: #929dab;
+  --tblr-dropdown-header-color: #929dab;
+}
+
+.btn-group,
+.btn-group-vertical {
+  position: relative;
+  display: inline-flex;
+  vertical-align: middle;
+}
+.btn-group > .btn,
+.btn-group-vertical > .btn {
+  position: relative;
+  flex: 1 1 auto;
+}
+.btn-group > .btn-check:checked + .btn,
+.btn-group > .btn-check:focus + .btn,
+.btn-group > .btn:hover,
+.btn-group > .btn:focus,
+.btn-group > .btn:active,
+.btn-group > .btn.active,
+.btn-group-vertical > .btn-check:checked + .btn,
+.btn-group-vertical > .btn-check:focus + .btn,
+.btn-group-vertical > .btn:hover,
+.btn-group-vertical > .btn:focus,
+.btn-group-vertical > .btn:active,
+.btn-group-vertical > .btn.active {
+  z-index: 1;
+}
+
+.btn-toolbar {
+  display: flex;
+  flex-wrap: wrap;
+  justify-content: flex-start;
+}
+.btn-toolbar .input-group {
+  width: auto;
+}
+
+.btn-group {
+  border-radius: var(--tblr-border-radius);
+}
+.btn-group > :not(.btn-check:first-child) + .btn,
+.btn-group > .btn-group:not(:first-child) {
+  margin-left: calc(var(--tblr-border-width) * -1);
+}
+.btn-group > .btn:not(:last-child):not(.dropdown-toggle),
+.btn-group > .btn.dropdown-toggle-split:first-child,
+.btn-group > .btn-group:not(:last-child) > .btn {
+  border-top-right-radius: 0;
+  border-bottom-right-radius: 0;
+}
+.btn-group > .btn:nth-child(n+3),
+.btn-group > :not(.btn-check) + .btn,
+.btn-group > .btn-group:not(:first-child) > .btn {
+  border-top-left-radius: 0;
+  border-bottom-left-radius: 0;
+}
+
+.dropdown-toggle-split {
+  padding-right: 0.75rem;
+  padding-left: 0.75rem;
+}
+.dropdown-toggle-split::after, .dropup .dropdown-toggle-split::after, .dropend .dropdown-toggle-split::after {
+  margin-left: 0;
+}
+.dropstart .dropdown-toggle-split::before {
+  margin-right: 0;
+}
+
+.btn-sm + .dropdown-toggle-split, .btn-group-sm > .btn + .dropdown-toggle-split {
+  padding-right: 0.1875rem;
+  padding-left: 0.1875rem;
+}
+
+.btn-lg + .dropdown-toggle-split, .btn-group-lg > .btn + .dropdown-toggle-split {
+  padding-right: 0.5625rem;
+  padding-left: 0.5625rem;
+}
+
+.btn-group.show .dropdown-toggle {
+  box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
+}
+.btn-group.show .dropdown-toggle.btn-link {
+  box-shadow: none;
+}
+
+.btn-group-vertical {
+  flex-direction: column;
+  align-items: flex-start;
+  justify-content: center;
+}
+.btn-group-vertical > .btn,
+.btn-group-vertical > .btn-group {
+  width: 100%;
+}
+.btn-group-vertical > .btn:not(:first-child),
+.btn-group-vertical > .btn-group:not(:first-child) {
+  margin-top: calc(var(--tblr-border-width) * -1);
+}
+.btn-group-vertical > .btn:not(:last-child):not(.dropdown-toggle),
+.btn-group-vertical > .btn-group:not(:last-child) > .btn {
+  border-bottom-right-radius: 0;
+  border-bottom-left-radius: 0;
+}
+.btn-group-vertical > .btn ~ .btn,
+.btn-group-vertical > .btn-group:not(:first-child) > .btn {
+  border-top-left-radius: 0;
+  border-top-right-radius: 0;
+}
+
+.nav {
+  --tblr-nav-link-padding-x: 0.75rem;
+  --tblr-nav-link-padding-y: 0.5rem;
+  --tblr-nav-link-font-weight: ;
+  --tblr-nav-link-color: var(--tblr-secondary);
+  --tblr-nav-link-hover-color: var(--tblr-link-hover-color);
+  --tblr-nav-link-disabled-color: var(--tblr-disabled-color);
+  display: flex;
+  flex-wrap: wrap;
+  padding-left: 0;
+  margin-bottom: 0;
+  list-style: none;
+}
+
+.nav-link {
+  display: block;
+  padding: var(--tblr-nav-link-padding-y) var(--tblr-nav-link-padding-x);
+  font-size: var(--tblr-nav-link-font-size);
+  font-weight: var(--tblr-nav-link-font-weight);
+  color: var(--tblr-nav-link-color);
+  background: none;
+  border: 0;
+  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out;
+}
+@media (prefers-reduced-motion: reduce) {
+  .nav-link {
+    transition: none;
+  }
+}
+.nav-link:hover, .nav-link:focus {
+  color: var(--tblr-nav-link-hover-color);
+  text-decoration: none;
+}
+.nav-link:focus-visible {
+  outline: 0;
+  box-shadow: 0 0 0 0.25rem rgba(var(--tblr-primary-rgb), 0.25);
+}
+.nav-link.disabled, .nav-link:disabled {
+  color: var(--tblr-nav-link-disabled-color);
+  pointer-events: none;
+  cursor: default;
+}
+
+.nav-tabs {
+  --tblr-nav-tabs-border-width: var(--tblr-border-width);
+  --tblr-nav-tabs-border-color: var(--tblr-border-color);
+  --tblr-nav-tabs-border-radius: var(--tblr-border-radius);
+  --tblr-nav-tabs-link-hover-border-color: var(--tblr-border-color) var(--tblr-border-color) var(--tblr-border-color);
+  --tblr-nav-tabs-link-active-color: var(--tblr-body-color);
+  --tblr-nav-tabs-link-active-bg: var(--tblr-body-bg);
+  --tblr-nav-tabs-link-active-border-color: var(--tblr-border-color) var(--tblr-border-color) var(--tblr-border-color);
+  border-bottom: var(--tblr-nav-tabs-border-width) solid var(--tblr-nav-tabs-border-color);
+}
+.nav-tabs .nav-link {
+  margin-bottom: calc(-1 * var(--tblr-nav-tabs-border-width));
+  border: var(--tblr-nav-tabs-border-width) solid transparent;
+  border-top-left-radius: var(--tblr-nav-tabs-border-radius);
+  border-top-right-radius: var(--tblr-nav-tabs-border-radius);
+}
+.nav-tabs .nav-link:hover, .nav-tabs .nav-link:focus {
+  isolation: isolate;
+  border-color: var(--tblr-nav-tabs-link-hover-border-color);
+}
+.nav-tabs .nav-link.active,
+.nav-tabs .nav-item.show .nav-link {
+  color: var(--tblr-nav-tabs-link-active-color);
+  background-color: var(--tblr-nav-tabs-link-active-bg);
+  border-color: var(--tblr-nav-tabs-link-active-border-color);
+}
+.nav-tabs .dropdown-menu {
+  margin-top: calc(-1 * var(--tblr-nav-tabs-border-width));
+  border-top-left-radius: 0;
+  border-top-right-radius: 0;
+}
+
+.nav-pills {
+  --tblr-nav-pills-border-radius: var(--tblr-border-radius);
+  --tblr-nav-pills-link-active-color: var(--tblr-primary);
+  --tblr-nav-pills-link-active-bg: var(--tblr-active-bg);
+}
+.nav-pills .nav-link {
+  border-radius: var(--tblr-nav-pills-border-radius);
+}
+.nav-pills .nav-link.active,
+.nav-pills .show > .nav-link {
+  color: var(--tblr-nav-pills-link-active-color);
+  background-color: var(--tblr-nav-pills-link-active-bg);
+}
+
+.nav-underline {
+  --tblr-nav-underline-gap: 1rem;
+  --tblr-nav-underline-border-width: 0.125rem;
+  --tblr-nav-underline-link-active-color: var(--tblr-emphasis-color);
+  gap: var(--tblr-nav-underline-gap);
+}
+.nav-underline .nav-link {
+  padding-right: 0;
+  padding-left: 0;
+  border-bottom: var(--tblr-nav-underline-border-width) solid transparent;
+}
+.nav-underline .nav-link:hover, .nav-underline .nav-link:focus {
+  border-bottom-color: currentcolor;
+}
+.nav-underline .nav-link.active,
+.nav-underline .show > .nav-link {
+  font-weight: 600;
+  color: var(--tblr-nav-underline-link-active-color);
+  border-bottom-color: currentcolor;
+}
+
+.nav-fill > .nav-link,
+.nav-fill .nav-item {
+  flex: 1 1 auto;
+  text-align: center;
+}
+
+.nav-justified > .nav-link,
+.nav-justified .nav-item {
+  flex-basis: 0;
+  flex-grow: 1;
+  text-align: center;
+}
+
+.nav-fill .nav-item .nav-link,
+.nav-justified .nav-item .nav-link {
+  width: 100%;
+}
+
+.tab-content > .tab-pane {
+  display: none;
+}
+.tab-content > .active {
+  display: block;
+}
+
+.navbar {
+  --tblr-navbar-padding-x: 0;
+  --tblr-navbar-padding-y: 0.25rem;
+  --tblr-navbar-color: var(--tblr-body-color);
+  --tblr-navbar-hover-color: rgba(var(--tblr-emphasis-color-rgb), 0.8);
+  --tblr-navbar-disabled-color: var(--tblr-disabled-color);
+  --tblr-navbar-active-color: var(--tblr-body-color) color;
+  --tblr-navbar-brand-padding-y: 0.5rem;
+  --tblr-navbar-brand-margin-end: 1rem;
+  --tblr-navbar-brand-font-size: 1.25rem;
+  --tblr-navbar-brand-color: var(--tblr-body-color);
+  --tblr-navbar-brand-hover-color: var(--tblr-body-color) color;
+  --tblr-navbar-nav-link-padding-x: 0.75rem;
+  --tblr-navbar-toggler-padding-y: 0;
+  --tblr-navbar-toggler-padding-x: 0;
+  --tblr-navbar-toggler-font-size: 1rem;
+  --tblr-navbar-toggler-icon-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%2824, 36, 51, 0.75%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e");
+  --tblr-navbar-toggler-border-color: rgba(var(--tblr-emphasis-color-rgb), 0.15);
+  --tblr-navbar-toggler-border-radius: var(--tblr-border-radius);
+  --tblr-navbar-toggler-focus-width: 0;
+  --tblr-navbar-toggler-transition: box-shadow 0.15s ease-in-out;
+  position: relative;
+  display: flex;
+  flex-wrap: wrap;
+  align-items: center;
+  justify-content: space-between;
+  padding: var(--tblr-navbar-padding-y) var(--tblr-navbar-padding-x);
+}
+.navbar > .container,
+.navbar > .container-fluid,
+.navbar > .container-sm,
+.navbar > .container-md,
+.navbar > .container-lg,
+.navbar > .container-xl,
+.navbar > .container-xxl {
+  display: flex;
+  flex-wrap: inherit;
+  align-items: center;
+  justify-content: space-between;
+}
+.navbar-brand {
+  padding-top: var(--tblr-navbar-brand-padding-y);
+  padding-bottom: var(--tblr-navbar-brand-padding-y);
+  margin-right: var(--tblr-navbar-brand-margin-end);
+  font-size: var(--tblr-navbar-brand-font-size);
+  color: var(--tblr-navbar-brand-color);
+  white-space: nowrap;
+}
+.navbar-brand:hover, .navbar-brand:focus {
+  color: var(--tblr-navbar-brand-hover-color);
+  text-decoration: none;
+}
+
+.navbar-nav {
+  --tblr-nav-link-padding-x: 0;
+  --tblr-nav-link-padding-y: 0.5rem;
+  --tblr-nav-link-font-weight: ;
+  --tblr-nav-link-color: var(--tblr-navbar-color);
+  --tblr-nav-link-hover-color: var(--tblr-navbar-hover-color);
+  --tblr-nav-link-disabled-color: var(--tblr-navbar-disabled-color);
+  display: flex;
+  flex-direction: column;
+  padding-left: 0;
+  margin-bottom: 0;
+  list-style: none;
+}
+.navbar-nav .nav-link.active, .navbar-nav .nav-link.show {
+  color: var(--tblr-navbar-active-color);
+}
+.navbar-nav .dropdown-menu {
+  position: static;
+}
+
+.navbar-text {
+  padding-top: 0.5rem;
+  padding-bottom: 0.5rem;
+  color: var(--tblr-navbar-color);
+}
+.navbar-text a,
+.navbar-text a:hover,
+.navbar-text a:focus {
+  color: var(--tblr-navbar-active-color);
+}
+
+.navbar-collapse {
+  flex-basis: 100%;
+  flex-grow: 1;
+  align-items: center;
+}
+
+.navbar-toggler {
+  padding: var(--tblr-navbar-toggler-padding-y) var(--tblr-navbar-toggler-padding-x);
+  font-size: var(--tblr-navbar-toggler-font-size);
+  line-height: 1;
+  color: var(--tblr-navbar-color);
+  background-color: transparent;
+  border: var(--tblr-border-width) solid var(--tblr-navbar-toggler-border-color);
+  border-radius: var(--tblr-navbar-toggler-border-radius);
+  transition: var(--tblr-navbar-toggler-transition);
+}
+@media (prefers-reduced-motion: reduce) {
+  .navbar-toggler {
+    transition: none;
+  }
+}
+.navbar-toggler:hover {
+  text-decoration: none;
+}
+.navbar-toggler:focus {
+  text-decoration: none;
+  outline: 0;
+  box-shadow: 0 0 0 var(--tblr-navbar-toggler-focus-width);
+}
+
+.navbar-toggler-icon {
+  display: inline-block;
+  width: 1.5em;
+  height: 1.5em;
+  vertical-align: middle;
+  background-image: var(--tblr-navbar-toggler-icon-bg);
+  background-repeat: no-repeat;
+  background-position: center;
+  background-size: 100%;
+}
+
+.navbar-nav-scroll {
+  max-height: var(--tblr-scroll-height, 75vh);
+  overflow-y: auto;
+}
+
+@media (min-width: 576px) {
+  .navbar-expand-sm {
+    flex-wrap: nowrap;
+    justify-content: flex-start;
+  }
+  .navbar-expand-sm .navbar-nav {
+    flex-direction: row;
+  }
+  .navbar-expand-sm .navbar-nav .dropdown-menu {
+    position: absolute;
+  }
+  .navbar-expand-sm .navbar-nav .nav-link {
+    padding-right: var(--tblr-navbar-nav-link-padding-x);
+    padding-left: var(--tblr-navbar-nav-link-padding-x);
+  }
+  .navbar-expand-sm .navbar-nav-scroll {
+    overflow: visible;
+  }
+  .navbar-expand-sm .navbar-collapse {
+    display: flex !important;
+    flex-basis: auto;
+  }
+  .navbar-expand-sm .navbar-toggler {
+    display: none;
+  }
+  .navbar-expand-sm .offcanvas {
+    position: static;
+    z-index: auto;
+    flex-grow: 1;
+    width: auto !important;
+    height: auto !important;
+    visibility: visible !important;
+    background-color: transparent !important;
+    border: 0 !important;
+    transform: none !important;
+    box-shadow: none;
+    transition: none;
+  }
+  .navbar-expand-sm .offcanvas .offcanvas-header {
+    display: none;
+  }
+  .navbar-expand-sm .offcanvas .offcanvas-body {
+    display: flex;
+    flex-grow: 0;
+    padding: 0;
+    overflow-y: visible;
+  }
+}
+@media (min-width: 768px) {
+  .navbar-expand-md {
+    flex-wrap: nowrap;
+    justify-content: flex-start;
+  }
+  .navbar-expand-md .navbar-nav {
+    flex-direction: row;
+  }
+  .navbar-expand-md .navbar-nav .dropdown-menu {
+    position: absolute;
+  }
+  .navbar-expand-md .navbar-nav .nav-link {
+    padding-right: var(--tblr-navbar-nav-link-padding-x);
+    padding-left: var(--tblr-navbar-nav-link-padding-x);
+  }
+  .navbar-expand-md .navbar-nav-scroll {
+    overflow: visible;
+  }
+  .navbar-expand-md .navbar-collapse {
+    display: flex !important;
+    flex-basis: auto;
+  }
+  .navbar-expand-md .navbar-toggler {
+    display: none;
+  }
+  .navbar-expand-md .offcanvas {
+    position: static;
+    z-index: auto;
+    flex-grow: 1;
+    width: auto !important;
+    height: auto !important;
+    visibility: visible !important;
+    background-color: transparent !important;
+    border: 0 !important;
+    transform: none !important;
+    box-shadow: none;
+    transition: none;
+  }
+  .navbar-expand-md .offcanvas .offcanvas-header {
+    display: none;
+  }
+  .navbar-expand-md .offcanvas .offcanvas-body {
+    display: flex;
+    flex-grow: 0;
+    padding: 0;
+    overflow-y: visible;
+  }
+}
+@media (min-width: 992px) {
+  .navbar-expand-lg {
+    flex-wrap: nowrap;
+    justify-content: flex-start;
+  }
+  .navbar-expand-lg .navbar-nav {
+    flex-direction: row;
+  }
+  .navbar-expand-lg .navbar-nav .dropdown-menu {
+    position: absolute;
+  }
+  .navbar-expand-lg .navbar-nav .nav-link {
+    padding-right: var(--tblr-navbar-nav-link-padding-x);
+    padding-left: var(--tblr-navbar-nav-link-padding-x);
+  }
+  .navbar-expand-lg .navbar-nav-scroll {
+    overflow: visible;
+  }
+  .navbar-expand-lg .navbar-collapse {
+    display: flex !important;
+    flex-basis: auto;
+  }
+  .navbar-expand-lg .navbar-toggler {
+    display: none;
+  }
+  .navbar-expand-lg .offcanvas {
+    position: static;
+    z-index: auto;
+    flex-grow: 1;
+    width: auto !important;
+    height: auto !important;
+    visibility: visible !important;
+    background-color: transparent !important;
+    border: 0 !important;
+    transform: none !important;
+    box-shadow: none;
+    transition: none;
+  }
+  .navbar-expand-lg .offcanvas .offcanvas-header {
+    display: none;
+  }
+  .navbar-expand-lg .offcanvas .offcanvas-body {
+    display: flex;
+    flex-grow: 0;
+    padding: 0;
+    overflow-y: visible;
+  }
+}
+@media (min-width: 1200px) {
+  .navbar-expand-xl {
+    flex-wrap: nowrap;
+    justify-content: flex-start;
+  }
+  .navbar-expand-xl .navbar-nav {
+    flex-direction: row;
+  }
+  .navbar-expand-xl .navbar-nav .dropdown-menu {
+    position: absolute;
+  }
+  .navbar-expand-xl .navbar-nav .nav-link {
+    padding-right: var(--tblr-navbar-nav-link-padding-x);
+    padding-left: var(--tblr-navbar-nav-link-padding-x);
+  }
+  .navbar-expand-xl .navbar-nav-scroll {
+    overflow: visible;
+  }
+  .navbar-expand-xl .navbar-collapse {
+    display: flex !important;
+    flex-basis: auto;
+  }
+  .navbar-expand-xl .navbar-toggler {
+    display: none;
+  }
+  .navbar-expand-xl .offcanvas {
+    position: static;
+    z-index: auto;
+    flex-grow: 1;
+    width: auto !important;
+    height: auto !important;
+    visibility: visible !important;
+    background-color: transparent !important;
+    border: 0 !important;
+    transform: none !important;
+    box-shadow: none;
+    transition: none;
+  }
+  .navbar-expand-xl .offcanvas .offcanvas-header {
+    display: none;
+  }
+  .navbar-expand-xl .offcanvas .offcanvas-body {
+    display: flex;
+    flex-grow: 0;
+    padding: 0;
+    overflow-y: visible;
+  }
+}
+@media (min-width: 1400px) {
+  .navbar-expand-xxl {
+    flex-wrap: nowrap;
+    justify-content: flex-start;
+  }
+  .navbar-expand-xxl .navbar-nav {
+    flex-direction: row;
+  }
+  .navbar-expand-xxl .navbar-nav .dropdown-menu {
+    position: absolute;
+  }
+  .navbar-expand-xxl .navbar-nav .nav-link {
+    padding-right: var(--tblr-navbar-nav-link-padding-x);
+    padding-left: var(--tblr-navbar-nav-link-padding-x);
+  }
+  .navbar-expand-xxl .navbar-nav-scroll {
+    overflow: visible;
+  }
+  .navbar-expand-xxl .navbar-collapse {
+    display: flex !important;
+    flex-basis: auto;
+  }
+  .navbar-expand-xxl .navbar-toggler {
+    display: none;
+  }
+  .navbar-expand-xxl .offcanvas {
+    position: static;
+    z-index: auto;
+    flex-grow: 1;
+    width: auto !important;
+    height: auto !important;
+    visibility: visible !important;
+    background-color: transparent !important;
+    border: 0 !important;
+    transform: none !important;
+    box-shadow: none;
+    transition: none;
+  }
+  .navbar-expand-xxl .offcanvas .offcanvas-header {
+    display: none;
+  }
+  .navbar-expand-xxl .offcanvas .offcanvas-body {
+    display: flex;
+    flex-grow: 0;
+    padding: 0;
+    overflow-y: visible;
+  }
+}
+.navbar-expand {
+  flex-wrap: nowrap;
+  justify-content: flex-start;
+}
+.navbar-expand .navbar-nav {
+  flex-direction: row;
+}
+.navbar-expand .navbar-nav .dropdown-menu {
+  position: absolute;
+}
+.navbar-expand .navbar-nav .nav-link {
+  padding-right: var(--tblr-navbar-nav-link-padding-x);
+  padding-left: var(--tblr-navbar-nav-link-padding-x);
+}
+.navbar-expand .navbar-nav-scroll {
+  overflow: visible;
+}
+.navbar-expand .navbar-collapse {
+  display: flex !important;
+  flex-basis: auto;
+}
+.navbar-expand .navbar-toggler {
+  display: none;
+}
+.navbar-expand .offcanvas {
+  position: static;
+  z-index: auto;
+  flex-grow: 1;
+  width: auto !important;
+  height: auto !important;
+  visibility: visible !important;
+  background-color: transparent !important;
+  border: 0 !important;
+  transform: none !important;
+  box-shadow: none;
+  transition: none;
+}
+.navbar-expand .offcanvas .offcanvas-header {
+  display: none;
+}
+.navbar-expand .offcanvas .offcanvas-body {
+  display: flex;
+  flex-grow: 0;
+  padding: 0;
+  overflow-y: visible;
+}
+
+.navbar-dark,
+.navbar[data-bs-theme=dark],
+body[data-bs-theme=dark] .navbar[data-bs-theme=light] {
+  --tblr-navbar-color: rgba(255, 255, 255, 0.7);
+  --tblr-navbar-hover-color: rgba(255, 255, 255, 0.75);
+  --tblr-navbar-disabled-color: var(--tblr-disabled-color);
+  --tblr-navbar-active-color: #ffffff;
+  --tblr-navbar-brand-color: #ffffff;
+  --tblr-navbar-brand-hover-color: #ffffff;
+  --tblr-navbar-toggler-border-color: rgba(255, 255, 255, 0.1);
+  --tblr-navbar-toggler-icon-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.7%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e");
+}
+
+[data-bs-theme=dark] .navbar-toggler-icon, body[data-bs-theme=dark] [data-bs-theme=light] .navbar-toggler-icon {
+  --tblr-navbar-toggler-icon-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.7%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e");
+}
+
+.card {
+  --tblr-card-spacer-y: 1.25rem;
+  --tblr-card-spacer-x: 1.25rem;
+  --tblr-card-title-spacer-y: 1.25rem;
+  --tblr-card-title-color: ;
+  --tblr-card-subtitle-color: ;
+  --tblr-card-border-width: var(--tblr-border-width);
+  --tblr-card-border-color: var(--tblr-border-color-translucent);
+  --tblr-card-border-radius: var(--tblr-border-radius);
+  --tblr-card-box-shadow: var(--tblr-shadow-card);
+  --tblr-card-inner-border-radius: calc(var(--tblr-border-radius) - (var(--tblr-border-width)));
+  --tblr-card-cap-padding-y: 1.25rem;
+  --tblr-card-cap-padding-x: 1.25rem;
+  --tblr-card-cap-bg: var(--tblr-bg-surface-tertiary);
+  --tblr-card-cap-color: inherit;
+  --tblr-card-height: ;
+  --tblr-card-color: inherit;
+  --tblr-card-bg: var(--tblr-bg-surface);
+  --tblr-card-img-overlay-padding: 1rem;
+  --tblr-card-group-margin: 1.5rem;
+  position: relative;
+  display: flex;
+  flex-direction: column;
+  min-width: 0;
+  height: var(--tblr-card-height);
+  color: var(--tblr-body-color);
+  word-wrap: break-word;
+  background-color: var(--tblr-card-bg);
+  background-clip: border-box;
+  border: var(--tblr-card-border-width) solid var(--tblr-card-border-color);
+  border-radius: var(--tblr-card-border-radius);
+  box-shadow: var(--tblr-card-box-shadow);
+}
+.card > hr, .card > .hr {
+  margin-right: 0;
+  margin-left: 0;
+}
+.card > .list-group {
+  border-top: inherit;
+  border-bottom: inherit;
+}
+.card > .list-group:first-child {
+  border-top-width: 0;
+  border-top-left-radius: var(--tblr-card-inner-border-radius);
+  border-top-right-radius: var(--tblr-card-inner-border-radius);
+}
+.card > .list-group:last-child {
+  border-bottom-width: 0;
+  border-bottom-right-radius: var(--tblr-card-inner-border-radius);
+  border-bottom-left-radius: var(--tblr-card-inner-border-radius);
+}
+.card > .card-header + .list-group,
+.card > .list-group + .card-footer {
+  border-top: 0;
+}
+
+.card-body {
+  flex: 1 1 auto;
+  padding: var(--tblr-card-spacer-y) var(--tblr-card-spacer-x);
+  color: var(--tblr-card-color);
+}
+
+.card-title {
+  margin-bottom: var(--tblr-card-title-spacer-y);
+  color: var(--tblr-card-title-color);
+}
+
+.card-subtitle {
+  margin-top: calc(-0.5 * var(--tblr-card-title-spacer-y));
+  margin-bottom: 0;
+  color: var(--tblr-card-subtitle-color);
+}
+
+.card-text:last-child {
+  margin-bottom: 0;
+}
+
+.card-link:hover {
+  text-decoration: none;
+}
+.card-link + .card-link {
+  margin-left: var(--tblr-card-spacer-x);
+}
+
+.card-header {
+  padding: var(--tblr-card-cap-padding-y) var(--tblr-card-cap-padding-x);
+  margin-bottom: 0;
+  color: var(--tblr-card-cap-color);
+  background-color: var(--tblr-card-cap-bg);
+  border-bottom: var(--tblr-card-border-width) solid var(--tblr-card-border-color);
+}
+.card-header:first-child {
+  border-radius: var(--tblr-card-inner-border-radius) var(--tblr-card-inner-border-radius) 0 0;
+}
+
+.card-footer {
+  padding: var(--tblr-card-cap-padding-y) var(--tblr-card-cap-padding-x);
+  color: var(--tblr-card-cap-color);
+  background-color: var(--tblr-card-cap-bg);
+  border-top: var(--tblr-card-border-width) solid var(--tblr-card-border-color);
+}
+.card-footer:last-child {
+  border-radius: 0 0 var(--tblr-card-inner-border-radius) var(--tblr-card-inner-border-radius);
+}
+
+.card-header-tabs {
+  margin-right: calc(-0.5 * var(--tblr-card-cap-padding-x));
+  margin-bottom: calc(-1 * var(--tblr-card-cap-padding-y));
+  margin-left: calc(-0.5 * var(--tblr-card-cap-padding-x));
+  border-bottom: 0;
+}
+.card-header-tabs .nav-link.active {
+  background-color: var(--tblr-card-bg);
+  border-bottom-color: var(--tblr-card-bg);
+}
+
+.card-header-pills {
+  margin-right: calc(-0.5 * var(--tblr-card-cap-padding-x));
+  margin-left: calc(-0.5 * var(--tblr-card-cap-padding-x));
+}
+
+.card-img-overlay {
+  position: absolute;
+  top: 0;
+  right: 0;
+  bottom: 0;
+  left: 0;
+  padding: var(--tblr-card-img-overlay-padding);
+  border-radius: var(--tblr-card-inner-border-radius);
+}
+
+.card-img,
+.card-img-top,
+.card-img-bottom {
+  width: 100%;
+}
+
+.card-img,
+.card-img-top {
+  border-top-left-radius: var(--tblr-card-inner-border-radius);
+  border-top-right-radius: var(--tblr-card-inner-border-radius);
+}
+
+.card-img,
+.card-img-bottom {
+  border-bottom-right-radius: var(--tblr-card-inner-border-radius);
+  border-bottom-left-radius: var(--tblr-card-inner-border-radius);
+}
+
+.card-group > .card {
+  margin-bottom: var(--tblr-card-group-margin);
+}
+@media (min-width: 576px) {
+  .card-group {
+    display: flex;
+    flex-flow: row wrap;
+  }
+  .card-group > .card {
+    flex: 1 0 0%;
+    margin-bottom: 0;
+  }
+  .card-group > .card + .card {
+    margin-left: 0;
+    border-left: 0;
+  }
+  .card-group > .card:not(:last-child) {
+    border-top-right-radius: 0;
+    border-bottom-right-radius: 0;
+  }
+  .card-group > .card:not(:last-child) .card-img-top,
+  .card-group > .card:not(:last-child) .card-header {
+    border-top-right-radius: 0;
+  }
+  .card-group > .card:not(:last-child) .card-img-bottom,
+  .card-group > .card:not(:last-child) .card-footer {
+    border-bottom-right-radius: 0;
+  }
+  .card-group > .card:not(:first-child) {
+    border-top-left-radius: 0;
+    border-bottom-left-radius: 0;
+  }
+  .card-group > .card:not(:first-child) .card-img-top,
+  .card-group > .card:not(:first-child) .card-header {
+    border-top-left-radius: 0;
+  }
+  .card-group > .card:not(:first-child) .card-img-bottom,
+  .card-group > .card:not(:first-child) .card-footer {
+    border-bottom-left-radius: 0;
+  }
+}
+
+.accordion {
+  --tblr-accordion-color: var(--tblr-body-color);
+  --tblr-accordion-bg: transparent;
+  --tblr-accordion-transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, border-radius 0.15s ease;
+  --tblr-accordion-border-color: var(--tblr-border-color-translucent);
+  --tblr-accordion-border-width: var(--tblr-border-width);
+  --tblr-accordion-border-radius: var(--tblr-border-radius);
+  --tblr-accordion-inner-border-radius: calc(var(--tblr-border-radius) - (var(--tblr-border-width)));
+  --tblr-accordion-btn-padding-x: 1.25rem;
+  --tblr-accordion-btn-padding-y: 1rem;
+  --tblr-accordion-btn-color: var(--tblr-body-color);
+  --tblr-accordion-btn-bg: transparent;
+  --tblr-accordion-btn-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23182433'%3e%3cpath 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'/%3e%3c/svg%3e");
+  --tblr-accordion-btn-icon-width: 1rem;
+  --tblr-accordion-btn-icon-transform: rotate(-180deg);
+  --tblr-accordion-btn-icon-transition: transform 0.2s ease-in-out;
+  --tblr-accordion-btn-active-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23002242'%3e%3cpath 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'/%3e%3c/svg%3e");
+  --tblr-accordion-btn-focus-border-color: var(--tblr-border-color-translucent);
+  --tblr-accordion-btn-focus-box-shadow: 0 0 0 0.25rem rgba(var(--tblr-primary-rgb), 0.25);
+  --tblr-accordion-body-padding-x: 1.25rem;
+  --tblr-accordion-body-padding-y: 1rem;
+  --tblr-accordion-active-color: inherit;
+  --tblr-accordion-active-bg: transparent;
+}
+
+.accordion-button {
+  position: relative;
+  display: flex;
+  align-items: center;
+  width: 100%;
+  padding: var(--tblr-accordion-btn-padding-y) var(--tblr-accordion-btn-padding-x);
+  font-size: 0.875rem;
+  color: var(--tblr-accordion-btn-color);
+  text-align: left;
+  background-color: var(--tblr-accordion-btn-bg);
+  border: 0;
+  border-radius: 0;
+  overflow-anchor: none;
+  transition: var(--tblr-accordion-transition);
+}
+@media (prefers-reduced-motion: reduce) {
+  .accordion-button {
+    transition: none;
+  }
+}
+.accordion-button:not(.collapsed) {
+  color: var(--tblr-accordion-active-color);
+  background-color: var(--tblr-accordion-active-bg);
+  box-shadow: inset 0 calc(-1 * var(--tblr-accordion-border-width)) 0 var(--tblr-accordion-border-color);
+}
+.accordion-button:not(.collapsed)::after {
+  background-image: var(--tblr-accordion-btn-active-icon);
+  transform: var(--tblr-accordion-btn-icon-transform);
+}
+.accordion-button::after {
+  flex-shrink: 0;
+  width: var(--tblr-accordion-btn-icon-width);
+  height: var(--tblr-accordion-btn-icon-width);
+  margin-left: auto;
+  content: "";
+  background-image: var(--tblr-accordion-btn-icon);
+  background-repeat: no-repeat;
+  background-size: var(--tblr-accordion-btn-icon-width);
+  transition: var(--tblr-accordion-btn-icon-transition);
+}
+@media (prefers-reduced-motion: reduce) {
+  .accordion-button::after {
+    transition: none;
+  }
+}
+.accordion-button:hover {
+  z-index: 2;
+}
+.accordion-button:focus {
+  z-index: 3;
+  border-color: var(--tblr-accordion-btn-focus-border-color);
+  outline: 0;
+  box-shadow: var(--tblr-accordion-btn-focus-box-shadow);
+}
+
+.accordion-header {
+  margin-bottom: 0;
+}
+
+.accordion-item {
+  color: var(--tblr-accordion-color);
+  background-color: var(--tblr-accordion-bg);
+  border: var(--tblr-accordion-border-width) solid var(--tblr-accordion-border-color);
+}
+.accordion-item:first-of-type {
+  border-top-left-radius: var(--tblr-accordion-border-radius);
+  border-top-right-radius: var(--tblr-accordion-border-radius);
+}
+.accordion-item:first-of-type .accordion-button {
+  border-top-left-radius: var(--tblr-accordion-inner-border-radius);
+  border-top-right-radius: var(--tblr-accordion-inner-border-radius);
+}
+.accordion-item:not(:first-of-type) {
+  border-top: 0;
+}
+.accordion-item:last-of-type {
+  border-bottom-right-radius: var(--tblr-accordion-border-radius);
+  border-bottom-left-radius: var(--tblr-accordion-border-radius);
+}
+.accordion-item:last-of-type .accordion-button.collapsed {
+  border-bottom-right-radius: var(--tblr-accordion-inner-border-radius);
+  border-bottom-left-radius: var(--tblr-accordion-inner-border-radius);
+}
+.accordion-item:last-of-type .accordion-collapse {
+  border-bottom-right-radius: var(--tblr-accordion-border-radius);
+  border-bottom-left-radius: var(--tblr-accordion-border-radius);
+}
+
+.accordion-body {
+  padding: var(--tblr-accordion-body-padding-y) var(--tblr-accordion-body-padding-x);
+}
+
+.accordion-flush .accordion-collapse {
+  border-width: 0;
+}
+.accordion-flush .accordion-item {
+  border-right: 0;
+  border-left: 0;
+  border-radius: 0;
+}
+.accordion-flush .accordion-item:first-child {
+  border-top: 0;
+}
+.accordion-flush .accordion-item:last-child {
+  border-bottom: 0;
+}
+.accordion-flush .accordion-item .accordion-button, .accordion-flush .accordion-item .accordion-button.collapsed {
+  border-radius: 0;
+}
+
+[data-bs-theme=dark] .accordion-button::after {
+  --tblr-accordion-btn-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%236698ca'%3e%3cpath 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'/%3e%3c/svg%3e");
+  --tblr-accordion-btn-active-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%236698ca'%3e%3cpath 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'/%3e%3c/svg%3e");
+}
+
+.breadcrumb {
+  --tblr-breadcrumb-padding-x: 0;
+  --tblr-breadcrumb-padding-y: 0;
+  --tblr-breadcrumb-margin-bottom: 1rem;
+  --tblr-breadcrumb-bg: ;
+  --tblr-breadcrumb-border-radius: ;
+  --tblr-breadcrumb-divider-color: var(--tblr-secondary);
+  --tblr-breadcrumb-item-padding-x: 0.5rem;
+  --tblr-breadcrumb-item-active-color: inherit;
+  display: flex;
+  flex-wrap: wrap;
+  padding: var(--tblr-breadcrumb-padding-y) var(--tblr-breadcrumb-padding-x);
+  margin-bottom: var(--tblr-breadcrumb-margin-bottom);
+  font-size: var(--tblr-breadcrumb-font-size);
+  list-style: none;
+  background-color: var(--tblr-breadcrumb-bg);
+  border-radius: var(--tblr-breadcrumb-border-radius);
+}
+
+.breadcrumb-item + .breadcrumb-item {
+  padding-left: var(--tblr-breadcrumb-item-padding-x);
+}
+.breadcrumb-item + .breadcrumb-item::before {
+  float: left;
+  padding-right: var(--tblr-breadcrumb-item-padding-x);
+  color: var(--tblr-breadcrumb-divider-color);
+  content: var(--tblr-breadcrumb-divider, "/") /* rtl: var(--tblr-breadcrumb-divider, "/") */;
+}
+.breadcrumb-item.active {
+  color: var(--tblr-breadcrumb-item-active-color);
+}
+
+.pagination {
+  --tblr-pagination-padding-x: 0.25rem;
+  --tblr-pagination-padding-y: 0.25rem;
+  --tblr-pagination-font-size: 0.875rem;
+  --tblr-pagination-color: var(--tblr-secondary);
+  --tblr-pagination-bg: transparent;
+  --tblr-pagination-border-width: 0;
+  --tblr-pagination-border-color: var(--tblr-border-color);
+  --tblr-pagination-border-radius: var(--tblr-border-radius);
+  --tblr-pagination-hover-color: var(--tblr-link-hover-color);
+  --tblr-pagination-hover-bg: var(--tblr-tertiary-bg);
+  --tblr-pagination-hover-border-color: var(--tblr-border-color);
+  --tblr-pagination-focus-color: var(--tblr-link-hover-color);
+  --tblr-pagination-focus-bg: var(--tblr-secondary-bg);
+  --tblr-pagination-focus-box-shadow: 0 0 0 0.25rem rgba(var(--tblr-primary-rgb), 0.25);
+  --tblr-pagination-active-color: #ffffff;
+  --tblr-pagination-active-bg: var(--tblr-primary);
+  --tblr-pagination-active-border-color: var(--tblr-primary);
+  --tblr-pagination-disabled-color: var(--tblr-disabled-color);
+  --tblr-pagination-disabled-bg: transparent;
+  --tblr-pagination-disabled-border-color: var(--tblr-border-color);
+  display: flex;
+  padding-left: 0;
+  list-style: none;
+}
+
+.page-link {
+  position: relative;
+  display: block;
+  padding: var(--tblr-pagination-padding-y) var(--tblr-pagination-padding-x);
+  font-size: var(--tblr-pagination-font-size);
+  color: var(--tblr-pagination-color);
+  background-color: var(--tblr-pagination-bg);
+  border: var(--tblr-pagination-border-width) solid var(--tblr-pagination-border-color);
+  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
+}
+@media (prefers-reduced-motion: reduce) {
+  .page-link {
+    transition: none;
+  }
+}
+.page-link:hover {
+  z-index: 2;
+  color: var(--tblr-pagination-hover-color);
+  text-decoration: none;
+  background-color: var(--tblr-pagination-hover-bg);
+  border-color: var(--tblr-pagination-hover-border-color);
+}
+.page-link:focus {
+  z-index: 3;
+  color: var(--tblr-pagination-focus-color);
+  background-color: var(--tblr-pagination-focus-bg);
+  outline: 0;
+  box-shadow: var(--tblr-pagination-focus-box-shadow);
+}
+.page-link.active, .active > .page-link {
+  z-index: 3;
+  color: var(--tblr-pagination-active-color);
+  background-color: var(--tblr-pagination-active-bg);
+  border-color: var(--tblr-pagination-active-border-color);
+}
+.page-link.disabled, .disabled > .page-link {
+  color: var(--tblr-pagination-disabled-color);
+  pointer-events: none;
+  background-color: var(--tblr-pagination-disabled-bg);
+  border-color: var(--tblr-pagination-disabled-border-color);
+}
+
+.page-item:not(:first-child) .page-link {
+  margin-left: calc(0 * -1);
+}
+.page-item:first-child .page-link {
+  border-top-left-radius: var(--tblr-pagination-border-radius);
+  border-bottom-left-radius: var(--tblr-pagination-border-radius);
+}
+.page-item:last-child .page-link {
+  border-top-right-radius: var(--tblr-pagination-border-radius);
+  border-bottom-right-radius: var(--tblr-pagination-border-radius);
+}
+
+.pagination-lg {
+  --tblr-pagination-padding-x: 1.5rem;
+  --tblr-pagination-padding-y: 0.75rem;
+  --tblr-pagination-font-size: 1.09375rem;
+  --tblr-pagination-border-radius: var(--tblr-border-radius-lg);
+}
+
+.pagination-sm {
+  --tblr-pagination-padding-x: 0.5rem;
+  --tblr-pagination-padding-y: 0.25rem;
+  --tblr-pagination-font-size: 0.765625rem;
+  --tblr-pagination-border-radius: var(--tblr-border-radius-sm);
+}
+
+.badge {
+  --tblr-badge-padding-x: 0.5em;
+  --tblr-badge-padding-y: 0.25em;
+  --tblr-badge-font-size: 85.714285%;
+  --tblr-badge-font-weight: var(--tblr-font-weight-medium);
+  --tblr-badge-color: var(--tblr-secondary);
+  --tblr-badge-border-radius: var(--tblr-border-radius);
+  display: inline-block;
+  padding: var(--tblr-badge-padding-y) var(--tblr-badge-padding-x);
+  font-size: var(--tblr-badge-font-size);
+  font-weight: var(--tblr-badge-font-weight);
+  line-height: 1;
+  color: var(--tblr-badge-color);
+  text-align: center;
+  white-space: nowrap;
+  vertical-align: baseline;
+  border-radius: var(--tblr-badge-border-radius);
+}
+.badge:empty {
+  display: none;
+}
+
+.btn .badge {
+  position: relative;
+  top: -1px;
+}
+
+.alert {
+  --tblr-alert-bg: transparent;
+  --tblr-alert-padding-x: 1rem;
+  --tblr-alert-padding-y: 0.75rem;
+  --tblr-alert-margin-bottom: 1rem;
+  --tblr-alert-color: inherit;
+  --tblr-alert-border-color: transparent;
+  --tblr-alert-border: var(--tblr-border-width) solid var(--tblr-alert-border-color);
+  --tblr-alert-border-radius: var(--tblr-border-radius);
+  --tblr-alert-link-color: inherit;
+  position: relative;
+  padding: var(--tblr-alert-padding-y) var(--tblr-alert-padding-x);
+  margin-bottom: var(--tblr-alert-margin-bottom);
+  color: var(--tblr-alert-color);
+  background-color: var(--tblr-alert-bg);
+  border: var(--tblr-alert-border);
+  border-radius: var(--tblr-alert-border-radius);
+}
+
+.alert-heading {
+  color: inherit;
+}
+
+.alert-link {
+  font-weight: var(--tblr-font-weight-bold);
+  color: var(--tblr-alert-link-color);
+}
+
+.alert-dismissible {
+  padding-right: 3rem;
+}
+.alert-dismissible .btn-close {
+  position: absolute;
+  top: 0;
+  right: 0;
+  z-index: 2;
+  padding: 0.9375rem 1rem;
+}
+
+.alert-primary {
+  --tblr-alert-color: var(--tblr-primary-text-emphasis);
+  --tblr-alert-bg: var(--tblr-primary-bg-subtle);
+  --tblr-alert-border-color: var(--tblr-primary-border-subtle);
+  --tblr-alert-link-color: var(--tblr-primary-text-emphasis);
+}
+
+.alert-secondary {
+  --tblr-alert-color: var(--tblr-secondary-text-emphasis);
+  --tblr-alert-bg: var(--tblr-secondary-bg-subtle);
+  --tblr-alert-border-color: var(--tblr-secondary-border-subtle);
+  --tblr-alert-link-color: var(--tblr-secondary-text-emphasis);
+}
+
+.alert-success {
+  --tblr-alert-color: var(--tblr-success-text-emphasis);
+  --tblr-alert-bg: var(--tblr-success-bg-subtle);
+  --tblr-alert-border-color: var(--tblr-success-border-subtle);
+  --tblr-alert-link-color: var(--tblr-success-text-emphasis);
+}
+
+.alert-info {
+  --tblr-alert-color: var(--tblr-info-text-emphasis);
+  --tblr-alert-bg: var(--tblr-info-bg-subtle);
+  --tblr-alert-border-color: var(--tblr-info-border-subtle);
+  --tblr-alert-link-color: var(--tblr-info-text-emphasis);
+}
+
+.alert-warning {
+  --tblr-alert-color: var(--tblr-warning-text-emphasis);
+  --tblr-alert-bg: var(--tblr-warning-bg-subtle);
+  --tblr-alert-border-color: var(--tblr-warning-border-subtle);
+  --tblr-alert-link-color: var(--tblr-warning-text-emphasis);
+}
+
+.alert-danger {
+  --tblr-alert-color: var(--tblr-danger-text-emphasis);
+  --tblr-alert-bg: var(--tblr-danger-bg-subtle);
+  --tblr-alert-border-color: var(--tblr-danger-border-subtle);
+  --tblr-alert-link-color: var(--tblr-danger-text-emphasis);
+}
+
+.alert-light {
+  --tblr-alert-color: var(--tblr-light-text-emphasis);
+  --tblr-alert-bg: var(--tblr-light-bg-subtle);
+  --tblr-alert-border-color: var(--tblr-light-border-subtle);
+  --tblr-alert-link-color: var(--tblr-light-text-emphasis);
+}
+
+.alert-dark {
+  --tblr-alert-color: var(--tblr-dark-text-emphasis);
+  --tblr-alert-bg: var(--tblr-dark-bg-subtle);
+  --tblr-alert-border-color: var(--tblr-dark-border-subtle);
+  --tblr-alert-link-color: var(--tblr-dark-text-emphasis);
+}
+
+.alert-muted {
+  --tblr-alert-color: var(--tblr-muted-text-emphasis);
+  --tblr-alert-bg: var(--tblr-muted-bg-subtle);
+  --tblr-alert-border-color: var(--tblr-muted-border-subtle);
+  --tblr-alert-link-color: var(--tblr-muted-text-emphasis);
+}
+
+.alert-blue {
+  --tblr-alert-color: var(--tblr-blue-text-emphasis);
+  --tblr-alert-bg: var(--tblr-blue-bg-subtle);
+  --tblr-alert-border-color: var(--tblr-blue-border-subtle);
+  --tblr-alert-link-color: var(--tblr-blue-text-emphasis);
+}
+
+.alert-azure {
+  --tblr-alert-color: var(--tblr-azure-text-emphasis);
+  --tblr-alert-bg: var(--tblr-azure-bg-subtle);
+  --tblr-alert-border-color: var(--tblr-azure-border-subtle);
+  --tblr-alert-link-color: var(--tblr-azure-text-emphasis);
+}
+
+.alert-indigo {
+  --tblr-alert-color: var(--tblr-indigo-text-emphasis);
+  --tblr-alert-bg: var(--tblr-indigo-bg-subtle);
+  --tblr-alert-border-color: var(--tblr-indigo-border-subtle);
+  --tblr-alert-link-color: var(--tblr-indigo-text-emphasis);
+}
+
+.alert-purple {
+  --tblr-alert-color: var(--tblr-purple-text-emphasis);
+  --tblr-alert-bg: var(--tblr-purple-bg-subtle);
+  --tblr-alert-border-color: var(--tblr-purple-border-subtle);
+  --tblr-alert-link-color: var(--tblr-purple-text-emphasis);
+}
+
+.alert-pink {
+  --tblr-alert-color: var(--tblr-pink-text-emphasis);
+  --tblr-alert-bg: var(--tblr-pink-bg-subtle);
+  --tblr-alert-border-color: var(--tblr-pink-border-subtle);
+  --tblr-alert-link-color: var(--tblr-pink-text-emphasis);
+}
+
+.alert-red {
+  --tblr-alert-color: var(--tblr-red-text-emphasis);
+  --tblr-alert-bg: var(--tblr-red-bg-subtle);
+  --tblr-alert-border-color: var(--tblr-red-border-subtle);
+  --tblr-alert-link-color: var(--tblr-red-text-emphasis);
+}
+
+.alert-orange {
+  --tblr-alert-color: var(--tblr-orange-text-emphasis);
+  --tblr-alert-bg: var(--tblr-orange-bg-subtle);
+  --tblr-alert-border-color: var(--tblr-orange-border-subtle);
+  --tblr-alert-link-color: var(--tblr-orange-text-emphasis);
+}
+
+.alert-yellow {
+  --tblr-alert-color: var(--tblr-yellow-text-emphasis);
+  --tblr-alert-bg: var(--tblr-yellow-bg-subtle);
+  --tblr-alert-border-color: var(--tblr-yellow-border-subtle);
+  --tblr-alert-link-color: var(--tblr-yellow-text-emphasis);
+}
+
+.alert-lime {
+  --tblr-alert-color: var(--tblr-lime-text-emphasis);
+  --tblr-alert-bg: var(--tblr-lime-bg-subtle);
+  --tblr-alert-border-color: var(--tblr-lime-border-subtle);
+  --tblr-alert-link-color: var(--tblr-lime-text-emphasis);
+}
+
+.alert-green {
+  --tblr-alert-color: var(--tblr-green-text-emphasis);
+  --tblr-alert-bg: var(--tblr-green-bg-subtle);
+  --tblr-alert-border-color: var(--tblr-green-border-subtle);
+  --tblr-alert-link-color: var(--tblr-green-text-emphasis);
+}
+
+.alert-teal {
+  --tblr-alert-color: var(--tblr-teal-text-emphasis);
+  --tblr-alert-bg: var(--tblr-teal-bg-subtle);
+  --tblr-alert-border-color: var(--tblr-teal-border-subtle);
+  --tblr-alert-link-color: var(--tblr-teal-text-emphasis);
+}
+
+.alert-cyan {
+  --tblr-alert-color: var(--tblr-cyan-text-emphasis);
+  --tblr-alert-bg: var(--tblr-cyan-bg-subtle);
+  --tblr-alert-border-color: var(--tblr-cyan-border-subtle);
+  --tblr-alert-link-color: var(--tblr-cyan-text-emphasis);
+}
+
+.alert-facebook {
+  --tblr-alert-color: var(--tblr-facebook-text-emphasis);
+  --tblr-alert-bg: var(--tblr-facebook-bg-subtle);
+  --tblr-alert-border-color: var(--tblr-facebook-border-subtle);
+  --tblr-alert-link-color: var(--tblr-facebook-text-emphasis);
+}
+
+.alert-twitter {
+  --tblr-alert-color: var(--tblr-twitter-text-emphasis);
+  --tblr-alert-bg: var(--tblr-twitter-bg-subtle);
+  --tblr-alert-border-color: var(--tblr-twitter-border-subtle);
+  --tblr-alert-link-color: var(--tblr-twitter-text-emphasis);
+}
+
+.alert-linkedin {
+  --tblr-alert-color: var(--tblr-linkedin-text-emphasis);
+  --tblr-alert-bg: var(--tblr-linkedin-bg-subtle);
+  --tblr-alert-border-color: var(--tblr-linkedin-border-subtle);
+  --tblr-alert-link-color: var(--tblr-linkedin-text-emphasis);
+}
+
+.alert-google {
+  --tblr-alert-color: var(--tblr-google-text-emphasis);
+  --tblr-alert-bg: var(--tblr-google-bg-subtle);
+  --tblr-alert-border-color: var(--tblr-google-border-subtle);
+  --tblr-alert-link-color: var(--tblr-google-text-emphasis);
+}
+
+.alert-youtube {
+  --tblr-alert-color: var(--tblr-youtube-text-emphasis);
+  --tblr-alert-bg: var(--tblr-youtube-bg-subtle);
+  --tblr-alert-border-color: var(--tblr-youtube-border-subtle);
+  --tblr-alert-link-color: var(--tblr-youtube-text-emphasis);
+}
+
+.alert-vimeo {
+  --tblr-alert-color: var(--tblr-vimeo-text-emphasis);
+  --tblr-alert-bg: var(--tblr-vimeo-bg-subtle);
+  --tblr-alert-border-color: var(--tblr-vimeo-border-subtle);
+  --tblr-alert-link-color: var(--tblr-vimeo-text-emphasis);
+}
+
+.alert-dribbble {
+  --tblr-alert-color: var(--tblr-dribbble-text-emphasis);
+  --tblr-alert-bg: var(--tblr-dribbble-bg-subtle);
+  --tblr-alert-border-color: var(--tblr-dribbble-border-subtle);
+  --tblr-alert-link-color: var(--tblr-dribbble-text-emphasis);
+}
+
+.alert-github {
+  --tblr-alert-color: var(--tblr-github-text-emphasis);
+  --tblr-alert-bg: var(--tblr-github-bg-subtle);
+  --tblr-alert-border-color: var(--tblr-github-border-subtle);
+  --tblr-alert-link-color: var(--tblr-github-text-emphasis);
+}
+
+.alert-instagram {
+  --tblr-alert-color: var(--tblr-instagram-text-emphasis);
+  --tblr-alert-bg: var(--tblr-instagram-bg-subtle);
+  --tblr-alert-border-color: var(--tblr-instagram-border-subtle);
+  --tblr-alert-link-color: var(--tblr-instagram-text-emphasis);
+}
+
+.alert-pinterest {
+  --tblr-alert-color: var(--tblr-pinterest-text-emphasis);
+  --tblr-alert-bg: var(--tblr-pinterest-bg-subtle);
+  --tblr-alert-border-color: var(--tblr-pinterest-border-subtle);
+  --tblr-alert-link-color: var(--tblr-pinterest-text-emphasis);
+}
+
+.alert-vk {
+  --tblr-alert-color: var(--tblr-vk-text-emphasis);
+  --tblr-alert-bg: var(--tblr-vk-bg-subtle);
+  --tblr-alert-border-color: var(--tblr-vk-border-subtle);
+  --tblr-alert-link-color: var(--tblr-vk-text-emphasis);
+}
+
+.alert-rss {
+  --tblr-alert-color: var(--tblr-rss-text-emphasis);
+  --tblr-alert-bg: var(--tblr-rss-bg-subtle);
+  --tblr-alert-border-color: var(--tblr-rss-border-subtle);
+  --tblr-alert-link-color: var(--tblr-rss-text-emphasis);
+}
+
+.alert-flickr {
+  --tblr-alert-color: var(--tblr-flickr-text-emphasis);
+  --tblr-alert-bg: var(--tblr-flickr-bg-subtle);
+  --tblr-alert-border-color: var(--tblr-flickr-border-subtle);
+  --tblr-alert-link-color: var(--tblr-flickr-text-emphasis);
+}
+
+.alert-bitbucket {
+  --tblr-alert-color: var(--tblr-bitbucket-text-emphasis);
+  --tblr-alert-bg: var(--tblr-bitbucket-bg-subtle);
+  --tblr-alert-border-color: var(--tblr-bitbucket-border-subtle);
+  --tblr-alert-link-color: var(--tblr-bitbucket-text-emphasis);
+}
+
+.alert-tabler {
+  --tblr-alert-color: var(--tblr-tabler-text-emphasis);
+  --tblr-alert-bg: var(--tblr-tabler-bg-subtle);
+  --tblr-alert-border-color: var(--tblr-tabler-border-subtle);
+  --tblr-alert-link-color: var(--tblr-tabler-text-emphasis);
+}
+
+@keyframes progress-bar-stripes {
+  0% {
+    background-position-x: 0.5rem;
+  }
+}
+.progress,
+.progress-stacked {
+  --tblr-progress-height: 0.5rem;
+  --tblr-progress-font-size: 0.65625rem;
+  --tblr-progress-bg: var(--tblr-border-color);
+  --tblr-progress-border-radius: var(--tblr-border-radius);
+  --tblr-progress-box-shadow: var(--tblr-box-shadow-inset);
+  --tblr-progress-bar-color: #ffffff;
+  --tblr-progress-bar-bg: var(--tblr-primary);
+  --tblr-progress-bar-transition: width 0.6s ease;
+  display: flex;
+  height: var(--tblr-progress-height);
+  overflow: hidden;
+  font-size: var(--tblr-progress-font-size);
+  background-color: var(--tblr-progress-bg);
+  border-radius: var(--tblr-progress-border-radius);
+  box-shadow: var(--tblr-progress-box-shadow);
+}
+
+.progress-bar {
+  display: flex;
+  flex-direction: column;
+  justify-content: center;
+  overflow: hidden;
+  color: var(--tblr-progress-bar-color);
+  text-align: center;
+  white-space: nowrap;
+  background-color: var(--tblr-progress-bar-bg);
+  transition: var(--tblr-progress-bar-transition);
+}
+@media (prefers-reduced-motion: reduce) {
+  .progress-bar {
+    transition: none;
+  }
+}
+
+.progress-bar-striped {
+  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+  background-size: var(--tblr-progress-height) var(--tblr-progress-height);
+}
+
+.progress-stacked > .progress {
+  overflow: visible;
+}
+
+.progress-stacked > .progress > .progress-bar {
+  width: 100%;
+}
+
+.progress-bar-animated {
+  animation: 1s linear infinite progress-bar-stripes;
+}
+@media (prefers-reduced-motion: reduce) {
+  .progress-bar-animated {
+    animation: none;
+  }
+}
+
+.list-group {
+  --tblr-list-group-color: var(--tblr-body-color);
+  --tblr-list-group-bg: inherit;
+  --tblr-list-group-border-color: var(--tblr-border-color);
+  --tblr-list-group-border-width: var(--tblr-border-width);
+  --tblr-list-group-border-radius: var(--tblr-border-radius);
+  --tblr-list-group-item-padding-x: 1.25rem;
+  --tblr-list-group-item-padding-y: 1.25rem;
+  --tblr-list-group-action-color: inherit;
+  --tblr-list-group-action-hover-color: var(--tblr-emphasis-color);
+  --tblr-list-group-action-hover-bg: rgba(var(--tblr-text-secondary-rgb), 0.04);
+  --tblr-list-group-action-active-color: var(--tblr-body-color);
+  --tblr-list-group-action-active-bg: var(--tblr-secondary-bg);
+  --tblr-list-group-disabled-color: var(--tblr-secondary-color);
+  --tblr-list-group-disabled-bg: inherit;
+  --tblr-list-group-active-color: inherit;
+  --tblr-list-group-active-bg: var(--tblr-active-bg);
+  --tblr-list-group-active-border-color: var(--tblr-border-color);
+  display: flex;
+  flex-direction: column;
+  padding-left: 0;
+  margin-bottom: 0;
+  border-radius: var(--tblr-list-group-border-radius);
+}
+
+.list-group-numbered {
+  list-style-type: none;
+  counter-reset: section;
+}
+.list-group-numbered > .list-group-item::before {
+  content: counters(section, ".") ". ";
+  counter-increment: section;
+}
+
+.list-group-item-action {
+  width: 100%;
+  color: var(--tblr-list-group-action-color);
+  text-align: inherit;
+}
+.list-group-item-action:hover, .list-group-item-action:focus {
+  z-index: 1;
+  color: var(--tblr-list-group-action-hover-color);
+  text-decoration: none;
+  background-color: var(--tblr-list-group-action-hover-bg);
+}
+.list-group-item-action:active {
+  color: var(--tblr-list-group-action-active-color);
+  background-color: var(--tblr-list-group-action-active-bg);
+}
+
+.list-group-item {
+  position: relative;
+  display: block;
+  padding: var(--tblr-list-group-item-padding-y) var(--tblr-list-group-item-padding-x);
+  color: var(--tblr-list-group-color);
+  background-color: var(--tblr-list-group-bg);
+  border: var(--tblr-list-group-border-width) solid var(--tblr-list-group-border-color);
+}
+.list-group-item:first-child {
+  border-top-left-radius: inherit;
+  border-top-right-radius: inherit;
+}
+.list-group-item:last-child {
+  border-bottom-right-radius: inherit;
+  border-bottom-left-radius: inherit;
+}
+.list-group-item.disabled, .list-group-item:disabled {
+  color: var(--tblr-list-group-disabled-color);
+  pointer-events: none;
+  background-color: var(--tblr-list-group-disabled-bg);
+}
+.list-group-item.active {
+  z-index: 2;
+  color: var(--tblr-list-group-active-color);
+  background-color: var(--tblr-list-group-active-bg);
+  border-color: var(--tblr-list-group-active-border-color);
+}
+.list-group-item + .list-group-item {
+  border-top-width: 0;
+}
+.list-group-item + .list-group-item.active {
+  margin-top: calc(-1 * var(--tblr-list-group-border-width));
+  border-top-width: var(--tblr-list-group-border-width);
+}
+
+.list-group-horizontal {
+  flex-direction: row;
+}
+.list-group-horizontal > .list-group-item:first-child:not(:last-child) {
+  border-bottom-left-radius: var(--tblr-list-group-border-radius);
+  border-top-right-radius: 0;
+}
+.list-group-horizontal > .list-group-item:last-child:not(:first-child) {
+  border-top-right-radius: var(--tblr-list-group-border-radius);
+  border-bottom-left-radius: 0;
+}
+.list-group-horizontal > .list-group-item.active {
+  margin-top: 0;
+}
+.list-group-horizontal > .list-group-item + .list-group-item {
+  border-top-width: var(--tblr-list-group-border-width);
+  border-left-width: 0;
+}
+.list-group-horizontal > .list-group-item + .list-group-item.active {
+  margin-left: calc(-1 * var(--tblr-list-group-border-width));
+  border-left-width: var(--tblr-list-group-border-width);
+}
+
+@media (min-width: 576px) {
+  .list-group-horizontal-sm {
+    flex-direction: row;
+  }
+  .list-group-horizontal-sm > .list-group-item:first-child:not(:last-child) {
+    border-bottom-left-radius: var(--tblr-list-group-border-radius);
+    border-top-right-radius: 0;
+  }
+  .list-group-horizontal-sm > .list-group-item:last-child:not(:first-child) {
+    border-top-right-radius: var(--tblr-list-group-border-radius);
+    border-bottom-left-radius: 0;
+  }
+  .list-group-horizontal-sm > .list-group-item.active {
+    margin-top: 0;
+  }
+  .list-group-horizontal-sm > .list-group-item + .list-group-item {
+    border-top-width: var(--tblr-list-group-border-width);
+    border-left-width: 0;
+  }
+  .list-group-horizontal-sm > .list-group-item + .list-group-item.active {
+    margin-left: calc(-1 * var(--tblr-list-group-border-width));
+    border-left-width: var(--tblr-list-group-border-width);
+  }
+}
+@media (min-width: 768px) {
+  .list-group-horizontal-md {
+    flex-direction: row;
+  }
+  .list-group-horizontal-md > .list-group-item:first-child:not(:last-child) {
+    border-bottom-left-radius: var(--tblr-list-group-border-radius);
+    border-top-right-radius: 0;
+  }
+  .list-group-horizontal-md > .list-group-item:last-child:not(:first-child) {
+    border-top-right-radius: var(--tblr-list-group-border-radius);
+    border-bottom-left-radius: 0;
+  }
+  .list-group-horizontal-md > .list-group-item.active {
+    margin-top: 0;
+  }
+  .list-group-horizontal-md > .list-group-item + .list-group-item {
+    border-top-width: var(--tblr-list-group-border-width);
+    border-left-width: 0;
+  }
+  .list-group-horizontal-md > .list-group-item + .list-group-item.active {
+    margin-left: calc(-1 * var(--tblr-list-group-border-width));
+    border-left-width: var(--tblr-list-group-border-width);
+  }
+}
+@media (min-width: 992px) {
+  .list-group-horizontal-lg {
+    flex-direction: row;
+  }
+  .list-group-horizontal-lg > .list-group-item:first-child:not(:last-child) {
+    border-bottom-left-radius: var(--tblr-list-group-border-radius);
+    border-top-right-radius: 0;
+  }
+  .list-group-horizontal-lg > .list-group-item:last-child:not(:first-child) {
+    border-top-right-radius: var(--tblr-list-group-border-radius);
+    border-bottom-left-radius: 0;
+  }
+  .list-group-horizontal-lg > .list-group-item.active {
+    margin-top: 0;
+  }
+  .list-group-horizontal-lg > .list-group-item + .list-group-item {
+    border-top-width: var(--tblr-list-group-border-width);
+    border-left-width: 0;
+  }
+  .list-group-horizontal-lg > .list-group-item + .list-group-item.active {
+    margin-left: calc(-1 * var(--tblr-list-group-border-width));
+    border-left-width: var(--tblr-list-group-border-width);
+  }
+}
+@media (min-width: 1200px) {
+  .list-group-horizontal-xl {
+    flex-direction: row;
+  }
+  .list-group-horizontal-xl > .list-group-item:first-child:not(:last-child) {
+    border-bottom-left-radius: var(--tblr-list-group-border-radius);
+    border-top-right-radius: 0;
+  }
+  .list-group-horizontal-xl > .list-group-item:last-child:not(:first-child) {
+    border-top-right-radius: var(--tblr-list-group-border-radius);
+    border-bottom-left-radius: 0;
+  }
+  .list-group-horizontal-xl > .list-group-item.active {
+    margin-top: 0;
+  }
+  .list-group-horizontal-xl > .list-group-item + .list-group-item {
+    border-top-width: var(--tblr-list-group-border-width);
+    border-left-width: 0;
+  }
+  .list-group-horizontal-xl > .list-group-item + .list-group-item.active {
+    margin-left: calc(-1 * var(--tblr-list-group-border-width));
+    border-left-width: var(--tblr-list-group-border-width);
+  }
+}
+@media (min-width: 1400px) {
+  .list-group-horizontal-xxl {
+    flex-direction: row;
+  }
+  .list-group-horizontal-xxl > .list-group-item:first-child:not(:last-child) {
+    border-bottom-left-radius: var(--tblr-list-group-border-radius);
+    border-top-right-radius: 0;
+  }
+  .list-group-horizontal-xxl > .list-group-item:last-child:not(:first-child) {
+    border-top-right-radius: var(--tblr-list-group-border-radius);
+    border-bottom-left-radius: 0;
+  }
+  .list-group-horizontal-xxl > .list-group-item.active {
+    margin-top: 0;
+  }
+  .list-group-horizontal-xxl > .list-group-item + .list-group-item {
+    border-top-width: var(--tblr-list-group-border-width);
+    border-left-width: 0;
+  }
+  .list-group-horizontal-xxl > .list-group-item + .list-group-item.active {
+    margin-left: calc(-1 * var(--tblr-list-group-border-width));
+    border-left-width: var(--tblr-list-group-border-width);
+  }
+}
+.list-group-flush {
+  border-radius: 0;
+}
+.list-group-flush > .list-group-item {
+  border-width: 0 0 var(--tblr-list-group-border-width);
+}
+.list-group-flush > .list-group-item:last-child {
+  border-bottom-width: 0;
+}
+
+.list-group-item-primary {
+  --tblr-list-group-color: var(--tblr-primary-text-emphasis);
+  --tblr-list-group-bg: var(--tblr-primary-bg-subtle);
+  --tblr-list-group-border-color: var(--tblr-primary-border-subtle);
+  --tblr-list-group-action-hover-color: var(--tblr-emphasis-color);
+  --tblr-list-group-action-hover-bg: var(--tblr-primary-border-subtle);
+  --tblr-list-group-action-active-color: var(--tblr-emphasis-color);
+  --tblr-list-group-action-active-bg: var(--tblr-primary-border-subtle);
+  --tblr-list-group-active-color: var(--tblr-primary-bg-subtle);
+  --tblr-list-group-active-bg: var(--tblr-primary-text-emphasis);
+  --tblr-list-group-active-border-color: var(--tblr-primary-text-emphasis);
+}
+
+.list-group-item-secondary {
+  --tblr-list-group-color: var(--tblr-secondary-text-emphasis);
+  --tblr-list-group-bg: var(--tblr-secondary-bg-subtle);
+  --tblr-list-group-border-color: var(--tblr-secondary-border-subtle);
+  --tblr-list-group-action-hover-color: var(--tblr-emphasis-color);
+  --tblr-list-group-action-hover-bg: var(--tblr-secondary-border-subtle);
+  --tblr-list-group-action-active-color: var(--tblr-emphasis-color);
+  --tblr-list-group-action-active-bg: var(--tblr-secondary-border-subtle);
+  --tblr-list-group-active-color: var(--tblr-secondary-bg-subtle);
+  --tblr-list-group-active-bg: var(--tblr-secondary-text-emphasis);
+  --tblr-list-group-active-border-color: var(--tblr-secondary-text-emphasis);
+}
+
+.list-group-item-success {
+  --tblr-list-group-color: var(--tblr-success-text-emphasis);
+  --tblr-list-group-bg: var(--tblr-success-bg-subtle);
+  --tblr-list-group-border-color: var(--tblr-success-border-subtle);
+  --tblr-list-group-action-hover-color: var(--tblr-emphasis-color);
+  --tblr-list-group-action-hover-bg: var(--tblr-success-border-subtle);
+  --tblr-list-group-action-active-color: var(--tblr-emphasis-color);
+  --tblr-list-group-action-active-bg: var(--tblr-success-border-subtle);
+  --tblr-list-group-active-color: var(--tblr-success-bg-subtle);
+  --tblr-list-group-active-bg: var(--tblr-success-text-emphasis);
+  --tblr-list-group-active-border-color: var(--tblr-success-text-emphasis);
+}
+
+.list-group-item-info {
+  --tblr-list-group-color: var(--tblr-info-text-emphasis);
+  --tblr-list-group-bg: var(--tblr-info-bg-subtle);
+  --tblr-list-group-border-color: var(--tblr-info-border-subtle);
+  --tblr-list-group-action-hover-color: var(--tblr-emphasis-color);
+  --tblr-list-group-action-hover-bg: var(--tblr-info-border-subtle);
+  --tblr-list-group-action-active-color: var(--tblr-emphasis-color);
+  --tblr-list-group-action-active-bg: var(--tblr-info-border-subtle);
+  --tblr-list-group-active-color: var(--tblr-info-bg-subtle);
+  --tblr-list-group-active-bg: var(--tblr-info-text-emphasis);
+  --tblr-list-group-active-border-color: var(--tblr-info-text-emphasis);
+}
+
+.list-group-item-warning {
+  --tblr-list-group-color: var(--tblr-warning-text-emphasis);
+  --tblr-list-group-bg: var(--tblr-warning-bg-subtle);
+  --tblr-list-group-border-color: var(--tblr-warning-border-subtle);
+  --tblr-list-group-action-hover-color: var(--tblr-emphasis-color);
+  --tblr-list-group-action-hover-bg: var(--tblr-warning-border-subtle);
+  --tblr-list-group-action-active-color: var(--tblr-emphasis-color);
+  --tblr-list-group-action-active-bg: var(--tblr-warning-border-subtle);
+  --tblr-list-group-active-color: var(--tblr-warning-bg-subtle);
+  --tblr-list-group-active-bg: var(--tblr-warning-text-emphasis);
+  --tblr-list-group-active-border-color: var(--tblr-warning-text-emphasis);
+}
+
+.list-group-item-danger {
+  --tblr-list-group-color: var(--tblr-danger-text-emphasis);
+  --tblr-list-group-bg: var(--tblr-danger-bg-subtle);
+  --tblr-list-group-border-color: var(--tblr-danger-border-subtle);
+  --tblr-list-group-action-hover-color: var(--tblr-emphasis-color);
+  --tblr-list-group-action-hover-bg: var(--tblr-danger-border-subtle);
+  --tblr-list-group-action-active-color: var(--tblr-emphasis-color);
+  --tblr-list-group-action-active-bg: var(--tblr-danger-border-subtle);
+  --tblr-list-group-active-color: var(--tblr-danger-bg-subtle);
+  --tblr-list-group-active-bg: var(--tblr-danger-text-emphasis);
+  --tblr-list-group-active-border-color: var(--tblr-danger-text-emphasis);
+}
+
+.list-group-item-light {
+  --tblr-list-group-color: var(--tblr-light-text-emphasis);
+  --tblr-list-group-bg: var(--tblr-light-bg-subtle);
+  --tblr-list-group-border-color: var(--tblr-light-border-subtle);
+  --tblr-list-group-action-hover-color: var(--tblr-emphasis-color);
+  --tblr-list-group-action-hover-bg: var(--tblr-light-border-subtle);
+  --tblr-list-group-action-active-color: var(--tblr-emphasis-color);
+  --tblr-list-group-action-active-bg: var(--tblr-light-border-subtle);
+  --tblr-list-group-active-color: var(--tblr-light-bg-subtle);
+  --tblr-list-group-active-bg: var(--tblr-light-text-emphasis);
+  --tblr-list-group-active-border-color: var(--tblr-light-text-emphasis);
+}
+
+.list-group-item-dark {
+  --tblr-list-group-color: var(--tblr-dark-text-emphasis);
+  --tblr-list-group-bg: var(--tblr-dark-bg-subtle);
+  --tblr-list-group-border-color: var(--tblr-dark-border-subtle);
+  --tblr-list-group-action-hover-color: var(--tblr-emphasis-color);
+  --tblr-list-group-action-hover-bg: var(--tblr-dark-border-subtle);
+  --tblr-list-group-action-active-color: var(--tblr-emphasis-color);
+  --tblr-list-group-action-active-bg: var(--tblr-dark-border-subtle);
+  --tblr-list-group-active-color: var(--tblr-dark-bg-subtle);
+  --tblr-list-group-active-bg: var(--tblr-dark-text-emphasis);
+  --tblr-list-group-active-border-color: var(--tblr-dark-text-emphasis);
+}
+
+.list-group-item-muted {
+  --tblr-list-group-color: var(--tblr-muted-text-emphasis);
+  --tblr-list-group-bg: var(--tblr-muted-bg-subtle);
+  --tblr-list-group-border-color: var(--tblr-muted-border-subtle);
+  --tblr-list-group-action-hover-color: var(--tblr-emphasis-color);
+  --tblr-list-group-action-hover-bg: var(--tblr-muted-border-subtle);
+  --tblr-list-group-action-active-color: var(--tblr-emphasis-color);
+  --tblr-list-group-action-active-bg: var(--tblr-muted-border-subtle);
+  --tblr-list-group-active-color: var(--tblr-muted-bg-subtle);
+  --tblr-list-group-active-bg: var(--tblr-muted-text-emphasis);
+  --tblr-list-group-active-border-color: var(--tblr-muted-text-emphasis);
+}
+
+.list-group-item-blue {
+  --tblr-list-group-color: var(--tblr-blue-text-emphasis);
+  --tblr-list-group-bg: var(--tblr-blue-bg-subtle);
+  --tblr-list-group-border-color: var(--tblr-blue-border-subtle);
+  --tblr-list-group-action-hover-color: var(--tblr-emphasis-color);
+  --tblr-list-group-action-hover-bg: var(--tblr-blue-border-subtle);
+  --tblr-list-group-action-active-color: var(--tblr-emphasis-color);
+  --tblr-list-group-action-active-bg: var(--tblr-blue-border-subtle);
+  --tblr-list-group-active-color: var(--tblr-blue-bg-subtle);
+  --tblr-list-group-active-bg: var(--tblr-blue-text-emphasis);
+  --tblr-list-group-active-border-color: var(--tblr-blue-text-emphasis);
+}
+
+.list-group-item-azure {
+  --tblr-list-group-color: var(--tblr-azure-text-emphasis);
+  --tblr-list-group-bg: var(--tblr-azure-bg-subtle);
+  --tblr-list-group-border-color: var(--tblr-azure-border-subtle);
+  --tblr-list-group-action-hover-color: var(--tblr-emphasis-color);
+  --tblr-list-group-action-hover-bg: var(--tblr-azure-border-subtle);
+  --tblr-list-group-action-active-color: var(--tblr-emphasis-color);
+  --tblr-list-group-action-active-bg: var(--tblr-azure-border-subtle);
+  --tblr-list-group-active-color: var(--tblr-azure-bg-subtle);
+  --tblr-list-group-active-bg: var(--tblr-azure-text-emphasis);
+  --tblr-list-group-active-border-color: var(--tblr-azure-text-emphasis);
+}
+
+.list-group-item-indigo {
+  --tblr-list-group-color: var(--tblr-indigo-text-emphasis);
+  --tblr-list-group-bg: var(--tblr-indigo-bg-subtle);
+  --tblr-list-group-border-color: var(--tblr-indigo-border-subtle);
+  --tblr-list-group-action-hover-color: var(--tblr-emphasis-color);
+  --tblr-list-group-action-hover-bg: var(--tblr-indigo-border-subtle);
+  --tblr-list-group-action-active-color: var(--tblr-emphasis-color);
+  --tblr-list-group-action-active-bg: var(--tblr-indigo-border-subtle);
+  --tblr-list-group-active-color: var(--tblr-indigo-bg-subtle);
+  --tblr-list-group-active-bg: var(--tblr-indigo-text-emphasis);
+  --tblr-list-group-active-border-color: var(--tblr-indigo-text-emphasis);
+}
+
+.list-group-item-purple {
+  --tblr-list-group-color: var(--tblr-purple-text-emphasis);
+  --tblr-list-group-bg: var(--tblr-purple-bg-subtle);
+  --tblr-list-group-border-color: var(--tblr-purple-border-subtle);
+  --tblr-list-group-action-hover-color: var(--tblr-emphasis-color);
+  --tblr-list-group-action-hover-bg: var(--tblr-purple-border-subtle);
+  --tblr-list-group-action-active-color: var(--tblr-emphasis-color);
+  --tblr-list-group-action-active-bg: var(--tblr-purple-border-subtle);
+  --tblr-list-group-active-color: var(--tblr-purple-bg-subtle);
+  --tblr-list-group-active-bg: var(--tblr-purple-text-emphasis);
+  --tblr-list-group-active-border-color: var(--tblr-purple-text-emphasis);
+}
+
+.list-group-item-pink {
+  --tblr-list-group-color: var(--tblr-pink-text-emphasis);
+  --tblr-list-group-bg: var(--tblr-pink-bg-subtle);
+  --tblr-list-group-border-color: var(--tblr-pink-border-subtle);
+  --tblr-list-group-action-hover-color: var(--tblr-emphasis-color);
+  --tblr-list-group-action-hover-bg: var(--tblr-pink-border-subtle);
+  --tblr-list-group-action-active-color: var(--tblr-emphasis-color);
+  --tblr-list-group-action-active-bg: var(--tblr-pink-border-subtle);
+  --tblr-list-group-active-color: var(--tblr-pink-bg-subtle);
+  --tblr-list-group-active-bg: var(--tblr-pink-text-emphasis);
+  --tblr-list-group-active-border-color: var(--tblr-pink-text-emphasis);
+}
+
+.list-group-item-red {
+  --tblr-list-group-color: var(--tblr-red-text-emphasis);
+  --tblr-list-group-bg: var(--tblr-red-bg-subtle);
+  --tblr-list-group-border-color: var(--tblr-red-border-subtle);
+  --tblr-list-group-action-hover-color: var(--tblr-emphasis-color);
+  --tblr-list-group-action-hover-bg: var(--tblr-red-border-subtle);
+  --tblr-list-group-action-active-color: var(--tblr-emphasis-color);
+  --tblr-list-group-action-active-bg: var(--tblr-red-border-subtle);
+  --tblr-list-group-active-color: var(--tblr-red-bg-subtle);
+  --tblr-list-group-active-bg: var(--tblr-red-text-emphasis);
+  --tblr-list-group-active-border-color: var(--tblr-red-text-emphasis);
+}
+
+.list-group-item-orange {
+  --tblr-list-group-color: var(--tblr-orange-text-emphasis);
+  --tblr-list-group-bg: var(--tblr-orange-bg-subtle);
+  --tblr-list-group-border-color: var(--tblr-orange-border-subtle);
+  --tblr-list-group-action-hover-color: var(--tblr-emphasis-color);
+  --tblr-list-group-action-hover-bg: var(--tblr-orange-border-subtle);
+  --tblr-list-group-action-active-color: var(--tblr-emphasis-color);
+  --tblr-list-group-action-active-bg: var(--tblr-orange-border-subtle);
+  --tblr-list-group-active-color: var(--tblr-orange-bg-subtle);
+  --tblr-list-group-active-bg: var(--tblr-orange-text-emphasis);
+  --tblr-list-group-active-border-color: var(--tblr-orange-text-emphasis);
+}
+
+.list-group-item-yellow {
+  --tblr-list-group-color: var(--tblr-yellow-text-emphasis);
+  --tblr-list-group-bg: var(--tblr-yellow-bg-subtle);
+  --tblr-list-group-border-color: var(--tblr-yellow-border-subtle);
+  --tblr-list-group-action-hover-color: var(--tblr-emphasis-color);
+  --tblr-list-group-action-hover-bg: var(--tblr-yellow-border-subtle);
+  --tblr-list-group-action-active-color: var(--tblr-emphasis-color);
+  --tblr-list-group-action-active-bg: var(--tblr-yellow-border-subtle);
+  --tblr-list-group-active-color: var(--tblr-yellow-bg-subtle);
+  --tblr-list-group-active-bg: var(--tblr-yellow-text-emphasis);
+  --tblr-list-group-active-border-color: var(--tblr-yellow-text-emphasis);
+}
+
+.list-group-item-lime {
+  --tblr-list-group-color: var(--tblr-lime-text-emphasis);
+  --tblr-list-group-bg: var(--tblr-lime-bg-subtle);
+  --tblr-list-group-border-color: var(--tblr-lime-border-subtle);
+  --tblr-list-group-action-hover-color: var(--tblr-emphasis-color);
+  --tblr-list-group-action-hover-bg: var(--tblr-lime-border-subtle);
+  --tblr-list-group-action-active-color: var(--tblr-emphasis-color);
+  --tblr-list-group-action-active-bg: var(--tblr-lime-border-subtle);
+  --tblr-list-group-active-color: var(--tblr-lime-bg-subtle);
+  --tblr-list-group-active-bg: var(--tblr-lime-text-emphasis);
+  --tblr-list-group-active-border-color: var(--tblr-lime-text-emphasis);
+}
+
+.list-group-item-green {
+  --tblr-list-group-color: var(--tblr-green-text-emphasis);
+  --tblr-list-group-bg: var(--tblr-green-bg-subtle);
+  --tblr-list-group-border-color: var(--tblr-green-border-subtle);
+  --tblr-list-group-action-hover-color: var(--tblr-emphasis-color);
+  --tblr-list-group-action-hover-bg: var(--tblr-green-border-subtle);
+  --tblr-list-group-action-active-color: var(--tblr-emphasis-color);
+  --tblr-list-group-action-active-bg: var(--tblr-green-border-subtle);
+  --tblr-list-group-active-color: var(--tblr-green-bg-subtle);
+  --tblr-list-group-active-bg: var(--tblr-green-text-emphasis);
+  --tblr-list-group-active-border-color: var(--tblr-green-text-emphasis);
+}
+
+.list-group-item-teal {
+  --tblr-list-group-color: var(--tblr-teal-text-emphasis);
+  --tblr-list-group-bg: var(--tblr-teal-bg-subtle);
+  --tblr-list-group-border-color: var(--tblr-teal-border-subtle);
+  --tblr-list-group-action-hover-color: var(--tblr-emphasis-color);
+  --tblr-list-group-action-hover-bg: var(--tblr-teal-border-subtle);
+  --tblr-list-group-action-active-color: var(--tblr-emphasis-color);
+  --tblr-list-group-action-active-bg: var(--tblr-teal-border-subtle);
+  --tblr-list-group-active-color: var(--tblr-teal-bg-subtle);
+  --tblr-list-group-active-bg: var(--tblr-teal-text-emphasis);
+  --tblr-list-group-active-border-color: var(--tblr-teal-text-emphasis);
+}
+
+.list-group-item-cyan {
+  --tblr-list-group-color: var(--tblr-cyan-text-emphasis);
+  --tblr-list-group-bg: var(--tblr-cyan-bg-subtle);
+  --tblr-list-group-border-color: var(--tblr-cyan-border-subtle);
+  --tblr-list-group-action-hover-color: var(--tblr-emphasis-color);
+  --tblr-list-group-action-hover-bg: var(--tblr-cyan-border-subtle);
+  --tblr-list-group-action-active-color: var(--tblr-emphasis-color);
+  --tblr-list-group-action-active-bg: var(--tblr-cyan-border-subtle);
+  --tblr-list-group-active-color: var(--tblr-cyan-bg-subtle);
+  --tblr-list-group-active-bg: var(--tblr-cyan-text-emphasis);
+  --tblr-list-group-active-border-color: var(--tblr-cyan-text-emphasis);
+}
+
+.list-group-item-facebook {
+  --tblr-list-group-color: var(--tblr-facebook-text-emphasis);
+  --tblr-list-group-bg: var(--tblr-facebook-bg-subtle);
+  --tblr-list-group-border-color: var(--tblr-facebook-border-subtle);
+  --tblr-list-group-action-hover-color: var(--tblr-emphasis-color);
+  --tblr-list-group-action-hover-bg: var(--tblr-facebook-border-subtle);
+  --tblr-list-group-action-active-color: var(--tblr-emphasis-color);
+  --tblr-list-group-action-active-bg: var(--tblr-facebook-border-subtle);
+  --tblr-list-group-active-color: var(--tblr-facebook-bg-subtle);
+  --tblr-list-group-active-bg: var(--tblr-facebook-text-emphasis);
+  --tblr-list-group-active-border-color: var(--tblr-facebook-text-emphasis);
+}
+
+.list-group-item-twitter {
+  --tblr-list-group-color: var(--tblr-twitter-text-emphasis);
+  --tblr-list-group-bg: var(--tblr-twitter-bg-subtle);
+  --tblr-list-group-border-color: var(--tblr-twitter-border-subtle);
+  --tblr-list-group-action-hover-color: var(--tblr-emphasis-color);
+  --tblr-list-group-action-hover-bg: var(--tblr-twitter-border-subtle);
+  --tblr-list-group-action-active-color: var(--tblr-emphasis-color);
+  --tblr-list-group-action-active-bg: var(--tblr-twitter-border-subtle);
+  --tblr-list-group-active-color: var(--tblr-twitter-bg-subtle);
+  --tblr-list-group-active-bg: var(--tblr-twitter-text-emphasis);
+  --tblr-list-group-active-border-color: var(--tblr-twitter-text-emphasis);
+}
+
+.list-group-item-linkedin {
+  --tblr-list-group-color: var(--tblr-linkedin-text-emphasis);
+  --tblr-list-group-bg: var(--tblr-linkedin-bg-subtle);
+  --tblr-list-group-border-color: var(--tblr-linkedin-border-subtle);
+  --tblr-list-group-action-hover-color: var(--tblr-emphasis-color);
+  --tblr-list-group-action-hover-bg: var(--tblr-linkedin-border-subtle);
+  --tblr-list-group-action-active-color: var(--tblr-emphasis-color);
+  --tblr-list-group-action-active-bg: var(--tblr-linkedin-border-subtle);
+  --tblr-list-group-active-color: var(--tblr-linkedin-bg-subtle);
+  --tblr-list-group-active-bg: var(--tblr-linkedin-text-emphasis);
+  --tblr-list-group-active-border-color: var(--tblr-linkedin-text-emphasis);
+}
+
+.list-group-item-google {
+  --tblr-list-group-color: var(--tblr-google-text-emphasis);
+  --tblr-list-group-bg: var(--tblr-google-bg-subtle);
+  --tblr-list-group-border-color: var(--tblr-google-border-subtle);
+  --tblr-list-group-action-hover-color: var(--tblr-emphasis-color);
+  --tblr-list-group-action-hover-bg: var(--tblr-google-border-subtle);
+  --tblr-list-group-action-active-color: var(--tblr-emphasis-color);
+  --tblr-list-group-action-active-bg: var(--tblr-google-border-subtle);
+  --tblr-list-group-active-color: var(--tblr-google-bg-subtle);
+  --tblr-list-group-active-bg: var(--tblr-google-text-emphasis);
+  --tblr-list-group-active-border-color: var(--tblr-google-text-emphasis);
+}
+
+.list-group-item-youtube {
+  --tblr-list-group-color: var(--tblr-youtube-text-emphasis);
+  --tblr-list-group-bg: var(--tblr-youtube-bg-subtle);
+  --tblr-list-group-border-color: var(--tblr-youtube-border-subtle);
+  --tblr-list-group-action-hover-color: var(--tblr-emphasis-color);
+  --tblr-list-group-action-hover-bg: var(--tblr-youtube-border-subtle);
+  --tblr-list-group-action-active-color: var(--tblr-emphasis-color);
+  --tblr-list-group-action-active-bg: var(--tblr-youtube-border-subtle);
+  --tblr-list-group-active-color: var(--tblr-youtube-bg-subtle);
+  --tblr-list-group-active-bg: var(--tblr-youtube-text-emphasis);
+  --tblr-list-group-active-border-color: var(--tblr-youtube-text-emphasis);
+}
+
+.list-group-item-vimeo {
+  --tblr-list-group-color: var(--tblr-vimeo-text-emphasis);
+  --tblr-list-group-bg: var(--tblr-vimeo-bg-subtle);
+  --tblr-list-group-border-color: var(--tblr-vimeo-border-subtle);
+  --tblr-list-group-action-hover-color: var(--tblr-emphasis-color);
+  --tblr-list-group-action-hover-bg: var(--tblr-vimeo-border-subtle);
+  --tblr-list-group-action-active-color: var(--tblr-emphasis-color);
+  --tblr-list-group-action-active-bg: var(--tblr-vimeo-border-subtle);
+  --tblr-list-group-active-color: var(--tblr-vimeo-bg-subtle);
+  --tblr-list-group-active-bg: var(--tblr-vimeo-text-emphasis);
+  --tblr-list-group-active-border-color: var(--tblr-vimeo-text-emphasis);
+}
+
+.list-group-item-dribbble {
+  --tblr-list-group-color: var(--tblr-dribbble-text-emphasis);
+  --tblr-list-group-bg: var(--tblr-dribbble-bg-subtle);
+  --tblr-list-group-border-color: var(--tblr-dribbble-border-subtle);
+  --tblr-list-group-action-hover-color: var(--tblr-emphasis-color);
+  --tblr-list-group-action-hover-bg: var(--tblr-dribbble-border-subtle);
+  --tblr-list-group-action-active-color: var(--tblr-emphasis-color);
+  --tblr-list-group-action-active-bg: var(--tblr-dribbble-border-subtle);
+  --tblr-list-group-active-color: var(--tblr-dribbble-bg-subtle);
+  --tblr-list-group-active-bg: var(--tblr-dribbble-text-emphasis);
+  --tblr-list-group-active-border-color: var(--tblr-dribbble-text-emphasis);
+}
+
+.list-group-item-github {
+  --tblr-list-group-color: var(--tblr-github-text-emphasis);
+  --tblr-list-group-bg: var(--tblr-github-bg-subtle);
+  --tblr-list-group-border-color: var(--tblr-github-border-subtle);
+  --tblr-list-group-action-hover-color: var(--tblr-emphasis-color);
+  --tblr-list-group-action-hover-bg: var(--tblr-github-border-subtle);
+  --tblr-list-group-action-active-color: var(--tblr-emphasis-color);
+  --tblr-list-group-action-active-bg: var(--tblr-github-border-subtle);
+  --tblr-list-group-active-color: var(--tblr-github-bg-subtle);
+  --tblr-list-group-active-bg: var(--tblr-github-text-emphasis);
+  --tblr-list-group-active-border-color: var(--tblr-github-text-emphasis);
+}
+
+.list-group-item-instagram {
+  --tblr-list-group-color: var(--tblr-instagram-text-emphasis);
+  --tblr-list-group-bg: var(--tblr-instagram-bg-subtle);
+  --tblr-list-group-border-color: var(--tblr-instagram-border-subtle);
+  --tblr-list-group-action-hover-color: var(--tblr-emphasis-color);
+  --tblr-list-group-action-hover-bg: var(--tblr-instagram-border-subtle);
+  --tblr-list-group-action-active-color: var(--tblr-emphasis-color);
+  --tblr-list-group-action-active-bg: var(--tblr-instagram-border-subtle);
+  --tblr-list-group-active-color: var(--tblr-instagram-bg-subtle);
+  --tblr-list-group-active-bg: var(--tblr-instagram-text-emphasis);
+  --tblr-list-group-active-border-color: var(--tblr-instagram-text-emphasis);
+}
+
+.list-group-item-pinterest {
+  --tblr-list-group-color: var(--tblr-pinterest-text-emphasis);
+  --tblr-list-group-bg: var(--tblr-pinterest-bg-subtle);
+  --tblr-list-group-border-color: var(--tblr-pinterest-border-subtle);
+  --tblr-list-group-action-hover-color: var(--tblr-emphasis-color);
+  --tblr-list-group-action-hover-bg: var(--tblr-pinterest-border-subtle);
+  --tblr-list-group-action-active-color: var(--tblr-emphasis-color);
+  --tblr-list-group-action-active-bg: var(--tblr-pinterest-border-subtle);
+  --tblr-list-group-active-color: var(--tblr-pinterest-bg-subtle);
+  --tblr-list-group-active-bg: var(--tblr-pinterest-text-emphasis);
+  --tblr-list-group-active-border-color: var(--tblr-pinterest-text-emphasis);
+}
+
+.list-group-item-vk {
+  --tblr-list-group-color: var(--tblr-vk-text-emphasis);
+  --tblr-list-group-bg: var(--tblr-vk-bg-subtle);
+  --tblr-list-group-border-color: var(--tblr-vk-border-subtle);
+  --tblr-list-group-action-hover-color: var(--tblr-emphasis-color);
+  --tblr-list-group-action-hover-bg: var(--tblr-vk-border-subtle);
+  --tblr-list-group-action-active-color: var(--tblr-emphasis-color);
+  --tblr-list-group-action-active-bg: var(--tblr-vk-border-subtle);
+  --tblr-list-group-active-color: var(--tblr-vk-bg-subtle);
+  --tblr-list-group-active-bg: var(--tblr-vk-text-emphasis);
+  --tblr-list-group-active-border-color: var(--tblr-vk-text-emphasis);
+}
+
+.list-group-item-rss {
+  --tblr-list-group-color: var(--tblr-rss-text-emphasis);
+  --tblr-list-group-bg: var(--tblr-rss-bg-subtle);
+  --tblr-list-group-border-color: var(--tblr-rss-border-subtle);
+  --tblr-list-group-action-hover-color: var(--tblr-emphasis-color);
+  --tblr-list-group-action-hover-bg: var(--tblr-rss-border-subtle);
+  --tblr-list-group-action-active-color: var(--tblr-emphasis-color);
+  --tblr-list-group-action-active-bg: var(--tblr-rss-border-subtle);
+  --tblr-list-group-active-color: var(--tblr-rss-bg-subtle);
+  --tblr-list-group-active-bg: var(--tblr-rss-text-emphasis);
+  --tblr-list-group-active-border-color: var(--tblr-rss-text-emphasis);
+}
+
+.list-group-item-flickr {
+  --tblr-list-group-color: var(--tblr-flickr-text-emphasis);
+  --tblr-list-group-bg: var(--tblr-flickr-bg-subtle);
+  --tblr-list-group-border-color: var(--tblr-flickr-border-subtle);
+  --tblr-list-group-action-hover-color: var(--tblr-emphasis-color);
+  --tblr-list-group-action-hover-bg: var(--tblr-flickr-border-subtle);
+  --tblr-list-group-action-active-color: var(--tblr-emphasis-color);
+  --tblr-list-group-action-active-bg: var(--tblr-flickr-border-subtle);
+  --tblr-list-group-active-color: var(--tblr-flickr-bg-subtle);
+  --tblr-list-group-active-bg: var(--tblr-flickr-text-emphasis);
+  --tblr-list-group-active-border-color: var(--tblr-flickr-text-emphasis);
+}
+
+.list-group-item-bitbucket {
+  --tblr-list-group-color: var(--tblr-bitbucket-text-emphasis);
+  --tblr-list-group-bg: var(--tblr-bitbucket-bg-subtle);
+  --tblr-list-group-border-color: var(--tblr-bitbucket-border-subtle);
+  --tblr-list-group-action-hover-color: var(--tblr-emphasis-color);
+  --tblr-list-group-action-hover-bg: var(--tblr-bitbucket-border-subtle);
+  --tblr-list-group-action-active-color: var(--tblr-emphasis-color);
+  --tblr-list-group-action-active-bg: var(--tblr-bitbucket-border-subtle);
+  --tblr-list-group-active-color: var(--tblr-bitbucket-bg-subtle);
+  --tblr-list-group-active-bg: var(--tblr-bitbucket-text-emphasis);
+  --tblr-list-group-active-border-color: var(--tblr-bitbucket-text-emphasis);
+}
+
+.list-group-item-tabler {
+  --tblr-list-group-color: var(--tblr-tabler-text-emphasis);
+  --tblr-list-group-bg: var(--tblr-tabler-bg-subtle);
+  --tblr-list-group-border-color: var(--tblr-tabler-border-subtle);
+  --tblr-list-group-action-hover-color: var(--tblr-emphasis-color);
+  --tblr-list-group-action-hover-bg: var(--tblr-tabler-border-subtle);
+  --tblr-list-group-action-active-color: var(--tblr-emphasis-color);
+  --tblr-list-group-action-active-bg: var(--tblr-tabler-border-subtle);
+  --tblr-list-group-active-color: var(--tblr-tabler-bg-subtle);
+  --tblr-list-group-active-bg: var(--tblr-tabler-text-emphasis);
+  --tblr-list-group-active-border-color: var(--tblr-tabler-text-emphasis);
+}
+
+.btn-close {
+  --tblr-btn-close-color: #182433;
+  --tblr-btn-close-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23182433'%3e%3cpath 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'/%3e%3c/svg%3e");
+  --tblr-btn-close-opacity: 0.4;
+  --tblr-btn-close-hover-opacity: 0.75;
+  --tblr-btn-close-focus-shadow: 0 0 0 0.25rem rgba(var(--tblr-primary-rgb), 0.25);
+  --tblr-btn-close-focus-opacity: 1;
+  --tblr-btn-close-disabled-opacity: 0.25;
+  --tblr-btn-close-white-filter: invert(1) grayscale(100%) brightness(200%);
+  box-sizing: content-box;
+  width: 1em;
+  height: 1em;
+  padding: 0.25em 0.25em;
+  color: var(--tblr-btn-close-color);
+  background: transparent var(--tblr-btn-close-bg) center/1em auto no-repeat;
+  border: 0;
+  border-radius: 4px;
+  opacity: var(--tblr-btn-close-opacity);
+}
+.btn-close:hover {
+  color: var(--tblr-btn-close-color);
+  text-decoration: none;
+  opacity: var(--tblr-btn-close-hover-opacity);
+}
+.btn-close:focus {
+  outline: 0;
+  box-shadow: var(--tblr-btn-close-focus-shadow);
+  opacity: var(--tblr-btn-close-focus-opacity);
+}
+.btn-close:disabled, .btn-close.disabled {
+  pointer-events: none;
+  -webkit-user-select: none;
+     -moz-user-select: none;
+      -ms-user-select: none;
+          user-select: none;
+  opacity: var(--tblr-btn-close-disabled-opacity);
+}
+
+.btn-close-white {
+  filter: var(--tblr-btn-close-white-filter);
+}
+
+[data-bs-theme=dark] .btn-close, body[data-bs-theme=dark] [data-bs-theme=light] .btn-close {
+  filter: var(--tblr-btn-close-white-filter);
+}
+
+.toast {
+  --tblr-toast-zindex: 1090;
+  --tblr-toast-padding-x: 0.75rem;
+  --tblr-toast-padding-y: 0.5rem;
+  --tblr-toast-spacing: calc(var(--tblr-page-padding) * 2);
+  --tblr-toast-max-width: 350px;
+  --tblr-toast-font-size: 0.875rem;
+  --tblr-toast-color: ;
+  --tblr-toast-bg: rgba(var(--tblr-body-bg-rgb), 0.85);
+  --tblr-toast-border-width: var(--tblr-border-width);
+  --tblr-toast-border-color: var(--tblr-border-color);
+  --tblr-toast-border-radius: var(--tblr-border-radius);
+  --tblr-toast-box-shadow: var(--tblr-box-shadow);
+  --tblr-toast-header-color: var(--tblr-secondary);
+  --tblr-toast-header-bg: rgba(var(--tblr-body-bg-rgb), 0.85);
+  --tblr-toast-header-border-color: var(--tblr-border-color);
+  width: var(--tblr-toast-max-width);
+  max-width: 100%;
+  font-size: var(--tblr-toast-font-size);
+  color: var(--tblr-toast-color);
+  pointer-events: auto;
+  background-color: var(--tblr-toast-bg);
+  background-clip: padding-box;
+  border: var(--tblr-toast-border-width) solid var(--tblr-toast-border-color);
+  box-shadow: var(--tblr-toast-box-shadow);
+  border-radius: var(--tblr-toast-border-radius);
+}
+.toast.showing {
+  opacity: 0;
+}
+.toast:not(.show) {
+  display: none;
+}
+
+.toast-container {
+  --tblr-toast-zindex: 1090;
+  position: absolute;
+  z-index: var(--tblr-toast-zindex);
+  width: -webkit-max-content;
+  width: -moz-max-content;
+  width: max-content;
+  max-width: 100%;
+  pointer-events: none;
+}
+.toast-container > :not(:last-child) {
+  margin-bottom: var(--tblr-toast-spacing);
+}
+
+.toast-header {
+  display: flex;
+  align-items: center;
+  padding: var(--tblr-toast-padding-y) var(--tblr-toast-padding-x);
+  color: var(--tblr-toast-header-color);
+  background-color: var(--tblr-toast-header-bg);
+  background-clip: padding-box;
+  border-bottom: var(--tblr-toast-border-width) solid var(--tblr-toast-header-border-color);
+  border-top-left-radius: calc(var(--tblr-toast-border-radius) - var(--tblr-toast-border-width));
+  border-top-right-radius: calc(var(--tblr-toast-border-radius) - var(--tblr-toast-border-width));
+}
+.toast-header .btn-close {
+  margin-right: calc(-0.5 * var(--tblr-toast-padding-x));
+  margin-left: var(--tblr-toast-padding-x);
+}
+
+.toast-body {
+  padding: var(--tblr-toast-padding-x);
+  word-wrap: break-word;
+}
+
+.modal {
+  --tblr-modal-zindex: 1055;
+  --tblr-modal-width: 540px;
+  --tblr-modal-padding: 1.5rem;
+  --tblr-modal-margin: 0.5rem;
+  --tblr-modal-color: ;
+  --tblr-modal-bg: var(--tblr-bg-surface);
+  --tblr-modal-border-color: transparent;
+  --tblr-modal-border-width: var(--tblr-border-width);
+  --tblr-modal-border-radius: var(--tblr-border-radius-lg);
+  --tblr-modal-box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075);
+  --tblr-modal-inner-border-radius: calc(var(--tblr-modal-border-radius) - 1px);
+  --tblr-modal-header-padding-x: 1.5rem;
+  --tblr-modal-header-padding-y: 1.5rem;
+  --tblr-modal-header-padding: 1.5rem;
+  --tblr-modal-header-border-color: var(--tblr-border-color);
+  --tblr-modal-header-border-width: var(--tblr-border-width);
+  --tblr-modal-title-line-height: 1.4285714286;
+  --tblr-modal-footer-gap: 0.75rem;
+  --tblr-modal-footer-bg: var(--tblr-bg-surface-tertiary);
+  --tblr-modal-footer-border-color: var(--tblr-border-color);
+  --tblr-modal-footer-border-width: var(--tblr-border-width);
+  position: fixed;
+  top: 0;
+  left: 0;
+  z-index: var(--tblr-modal-zindex);
+  display: none;
+  width: 100%;
+  height: 100%;
+  overflow-x: hidden;
+  overflow-y: auto;
+  outline: 0;
+}
+
+.modal-dialog {
+  position: relative;
+  width: auto;
+  margin: var(--tblr-modal-margin);
+  pointer-events: none;
+}
+.modal.fade .modal-dialog {
+  transition: transform 0.3s ease-out;
+  transform: translate(0, -1rem);
+}
+@media (prefers-reduced-motion: reduce) {
+  .modal.fade .modal-dialog {
+    transition: none;
+  }
+}
+.modal.show .modal-dialog {
+  transform: none;
+}
+.modal.modal-static .modal-dialog {
+  transform: scale(1.02);
+}
+
+.modal-dialog-scrollable {
+  height: calc(100% - var(--tblr-modal-margin) * 2);
+}
+.modal-dialog-scrollable .modal-content {
+  max-height: 100%;
+  overflow: hidden;
+}
+.modal-dialog-scrollable .modal-body {
+  overflow-y: auto;
+}
+
+.modal-dialog-centered {
+  display: flex;
+  align-items: center;
+  min-height: calc(100% - var(--tblr-modal-margin) * 2);
+}
+
+.modal-content {
+  position: relative;
+  display: flex;
+  flex-direction: column;
+  width: 100%;
+  color: var(--tblr-modal-color);
+  pointer-events: auto;
+  background-color: var(--tblr-modal-bg);
+  background-clip: padding-box;
+  border: var(--tblr-modal-border-width) solid var(--tblr-modal-border-color);
+  border-radius: var(--tblr-modal-border-radius);
+  box-shadow: var(--tblr-modal-box-shadow);
+  outline: 0;
+}
+
+.modal-backdrop {
+  --tblr-backdrop-zindex: 1050;
+  --tblr-backdrop-bg: #182433;
+  --tblr-backdrop-opacity: 0.24;
+  position: fixed;
+  top: 0;
+  left: 0;
+  z-index: var(--tblr-backdrop-zindex);
+  width: 100vw;
+  height: 100vh;
+  background-color: var(--tblr-backdrop-bg);
+}
+.modal-backdrop.fade {
+  opacity: 0;
+}
+.modal-backdrop.show {
+  opacity: var(--tblr-backdrop-opacity);
+}
+
+.modal-header {
+  display: flex;
+  flex-shrink: 0;
+  align-items: center;
+  justify-content: space-between;
+  padding: var(--tblr-modal-header-padding);
+  border-bottom: var(--tblr-modal-header-border-width) solid var(--tblr-modal-header-border-color);
+  border-top-left-radius: var(--tblr-modal-inner-border-radius);
+  border-top-right-radius: var(--tblr-modal-inner-border-radius);
+}
+.modal-header .btn-close {
+  padding: calc(var(--tblr-modal-header-padding-y) * 0.5) calc(var(--tblr-modal-header-padding-x) * 0.5);
+  margin: calc(-0.5 * var(--tblr-modal-header-padding-y)) calc(-0.5 * var(--tblr-modal-header-padding-x)) calc(-0.5 * var(--tblr-modal-header-padding-y)) auto;
+}
+
+.modal-title {
+  margin-bottom: 0;
+  line-height: var(--tblr-modal-title-line-height);
+}
+
+.modal-body {
+  position: relative;
+  flex: 1 1 auto;
+  padding: var(--tblr-modal-padding);
+}
+
+.modal-footer {
+  display: flex;
+  flex-shrink: 0;
+  flex-wrap: wrap;
+  align-items: center;
+  justify-content: flex-end;
+  padding: calc(var(--tblr-modal-padding) - var(--tblr-modal-footer-gap) * 0.5);
+  background-color: var(--tblr-modal-footer-bg);
+  border-top: var(--tblr-modal-footer-border-width) solid var(--tblr-modal-footer-border-color);
+  border-bottom-right-radius: var(--tblr-modal-inner-border-radius);
+  border-bottom-left-radius: var(--tblr-modal-inner-border-radius);
+}
+.modal-footer > * {
+  margin: calc(var(--tblr-modal-footer-gap) * 0.5);
+}
+
+@media (min-width: 576px) {
+  .modal {
+    --tblr-modal-margin: 1.75rem;
+    --tblr-modal-box-shadow: rgba(var(--tblr-body-color-rgb), 0.04) 0 2px 4px 0;
+  }
+  .modal-dialog {
+    max-width: var(--tblr-modal-width);
+    margin-right: auto;
+    margin-left: auto;
+  }
+  .modal-sm {
+    --tblr-modal-width: 380px;
+  }
+}
+@media (min-width: 992px) {
+  .modal-lg,
+  .modal-xl {
+    --tblr-modal-width: 720px;
+  }
+}
+@media (min-width: 1200px) {
+  .modal-xl {
+    --tblr-modal-width: 1140px;
+  }
+}
+.modal-fullscreen {
+  width: 100vw;
+  max-width: none;
+  height: 100%;
+  margin: 0;
+}
+.modal-fullscreen .modal-content {
+  height: 100%;
+  border: 0;
+  border-radius: 0;
+}
+.modal-fullscreen .modal-header,
+.modal-fullscreen .modal-footer {
+  border-radius: 0;
+}
+.modal-fullscreen .modal-body {
+  overflow-y: auto;
+}
+
+@media (max-width: 575.98px) {
+  .modal-fullscreen-sm-down {
+    width: 100vw;
+    max-width: none;
+    height: 100%;
+    margin: 0;
+  }
+  .modal-fullscreen-sm-down .modal-content {
+    height: 100%;
+    border: 0;
+    border-radius: 0;
+  }
+  .modal-fullscreen-sm-down .modal-header,
+  .modal-fullscreen-sm-down .modal-footer {
+    border-radius: 0;
+  }
+  .modal-fullscreen-sm-down .modal-body {
+    overflow-y: auto;
+  }
+}
+@media (max-width: 767.98px) {
+  .modal-fullscreen-md-down {
+    width: 100vw;
+    max-width: none;
+    height: 100%;
+    margin: 0;
+  }
+  .modal-fullscreen-md-down .modal-content {
+    height: 100%;
+    border: 0;
+    border-radius: 0;
+  }
+  .modal-fullscreen-md-down .modal-header,
+  .modal-fullscreen-md-down .modal-footer {
+    border-radius: 0;
+  }
+  .modal-fullscreen-md-down .modal-body {
+    overflow-y: auto;
+  }
+}
+@media (max-width: 991.98px) {
+  .modal-fullscreen-lg-down {
+    width: 100vw;
+    max-width: none;
+    height: 100%;
+    margin: 0;
+  }
+  .modal-fullscreen-lg-down .modal-content {
+    height: 100%;
+    border: 0;
+    border-radius: 0;
+  }
+  .modal-fullscreen-lg-down .modal-header,
+  .modal-fullscreen-lg-down .modal-footer {
+    border-radius: 0;
+  }
+  .modal-fullscreen-lg-down .modal-body {
+    overflow-y: auto;
+  }
+}
+@media (max-width: 1199.98px) {
+  .modal-fullscreen-xl-down {
+    width: 100vw;
+    max-width: none;
+    height: 100%;
+    margin: 0;
+  }
+  .modal-fullscreen-xl-down .modal-content {
+    height: 100%;
+    border: 0;
+    border-radius: 0;
+  }
+  .modal-fullscreen-xl-down .modal-header,
+  .modal-fullscreen-xl-down .modal-footer {
+    border-radius: 0;
+  }
+  .modal-fullscreen-xl-down .modal-body {
+    overflow-y: auto;
+  }
+}
+@media (max-width: 1399.98px) {
+  .modal-fullscreen-xxl-down {
+    width: 100vw;
+    max-width: none;
+    height: 100%;
+    margin: 0;
+  }
+  .modal-fullscreen-xxl-down .modal-content {
+    height: 100%;
+    border: 0;
+    border-radius: 0;
+  }
+  .modal-fullscreen-xxl-down .modal-header,
+  .modal-fullscreen-xxl-down .modal-footer {
+    border-radius: 0;
+  }
+  .modal-fullscreen-xxl-down .modal-body {
+    overflow-y: auto;
+  }
+}
+.tooltip {
+  --tblr-tooltip-zindex: 1080;
+  --tblr-tooltip-max-width: 200px;
+  --tblr-tooltip-padding-x: var(--tblr-spacer-2);
+  --tblr-tooltip-padding-y: var(--tblr-spacer-2);
+  --tblr-tooltip-margin: ;
+  --tblr-tooltip-font-size: 0.765625rem;
+  --tblr-tooltip-color: var(--tblr-light);
+  --tblr-tooltip-bg: var(--tblr-bg-surface-dark);
+  --tblr-tooltip-border-radius: var(--tblr-border-radius);
+  --tblr-tooltip-opacity: 0.9;
+  --tblr-tooltip-arrow-width: 0.8rem;
+  --tblr-tooltip-arrow-height: 0.4rem;
+  z-index: var(--tblr-tooltip-zindex);
+  display: block;
+  margin: var(--tblr-tooltip-margin);
+  font-family: var(--tblr-font-sans-serif);
+  font-style: normal;
+  font-weight: 400;
+  line-height: 1.4285714286;
+  text-align: left;
+  text-align: start;
+  text-decoration: none;
+  text-shadow: none;
+  text-transform: none;
+  letter-spacing: normal;
+  word-break: normal;
+  white-space: normal;
+  word-spacing: normal;
+  line-break: auto;
+  font-size: var(--tblr-tooltip-font-size);
+  word-wrap: break-word;
+  opacity: 0;
+}
+.tooltip.show {
+  opacity: var(--tblr-tooltip-opacity);
+}
+.tooltip .tooltip-arrow {
+  display: block;
+  width: var(--tblr-tooltip-arrow-width);
+  height: var(--tblr-tooltip-arrow-height);
+}
+.tooltip .tooltip-arrow::before {
+  position: absolute;
+  content: "";
+  border-color: transparent;
+  border-style: solid;
+}
+
+.bs-tooltip-top .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow {
+  bottom: calc(-1 * var(--tblr-tooltip-arrow-height));
+}
+.bs-tooltip-top .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow::before {
+  top: -1px;
+  border-width: var(--tblr-tooltip-arrow-height) calc(var(--tblr-tooltip-arrow-width) * 0.5) 0;
+  border-top-color: var(--tblr-tooltip-bg);
+}
+
+/* rtl:begin:ignore */
+.bs-tooltip-end .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow {
+  left: calc(-1 * var(--tblr-tooltip-arrow-height));
+  width: var(--tblr-tooltip-arrow-height);
+  height: var(--tblr-tooltip-arrow-width);
+}
+.bs-tooltip-end .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow::before {
+  right: -1px;
+  border-width: calc(var(--tblr-tooltip-arrow-width) * 0.5) var(--tblr-tooltip-arrow-height) calc(var(--tblr-tooltip-arrow-width) * 0.5) 0;
+  border-right-color: var(--tblr-tooltip-bg);
+}
+
+/* rtl:end:ignore */
+.bs-tooltip-bottom .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow {
+  top: calc(-1 * var(--tblr-tooltip-arrow-height));
+}
+.bs-tooltip-bottom .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow::before {
+  bottom: -1px;
+  border-width: 0 calc(var(--tblr-tooltip-arrow-width) * 0.5) var(--tblr-tooltip-arrow-height);
+  border-bottom-color: var(--tblr-tooltip-bg);
+}
+
+/* rtl:begin:ignore */
+.bs-tooltip-start .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow {
+  right: calc(-1 * var(--tblr-tooltip-arrow-height));
+  width: var(--tblr-tooltip-arrow-height);
+  height: var(--tblr-tooltip-arrow-width);
+}
+.bs-tooltip-start .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow::before {
+  left: -1px;
+  border-width: calc(var(--tblr-tooltip-arrow-width) * 0.5) 0 calc(var(--tblr-tooltip-arrow-width) * 0.5) var(--tblr-tooltip-arrow-height);
+  border-left-color: var(--tblr-tooltip-bg);
+}
+
+/* rtl:end:ignore */
+.tooltip-inner {
+  max-width: var(--tblr-tooltip-max-width);
+  padding: var(--tblr-tooltip-padding-y) var(--tblr-tooltip-padding-x);
+  color: var(--tblr-tooltip-color);
+  text-align: center;
+  background-color: var(--tblr-tooltip-bg);
+  border-radius: var(--tblr-tooltip-border-radius);
+}
+
+.popover {
+  --tblr-popover-zindex: 1070;
+  --tblr-popover-max-width: 276px;
+  --tblr-popover-font-size: 0.765625rem;
+  --tblr-popover-bg: var(--tblr-bg-surface);
+  --tblr-popover-border-width: var(--tblr-border-width);
+  --tblr-popover-border-color: var(--tblr-border-color);
+  --tblr-popover-border-radius: var(--tblr-border-radius-lg);
+  --tblr-popover-inner-border-radius: calc(var(--tblr-border-radius-lg) - var(--tblr-border-width));
+  --tblr-popover-box-shadow: rgba(var(--tblr-body-color-rgb), 0.04) 0 2px 4px 0;
+  --tblr-popover-header-padding-x: 1rem;
+  --tblr-popover-header-padding-y: 0.5rem;
+  --tblr-popover-header-font-size: 0.875rem;
+  --tblr-popover-header-color: inherit;
+  --tblr-popover-header-bg: transparent;
+  --tblr-popover-body-padding-x: 1rem;
+  --tblr-popover-body-padding-y: 1rem;
+  --tblr-popover-body-color: inherit;
+  --tblr-popover-arrow-width: 1rem;
+  --tblr-popover-arrow-height: 0.5rem;
+  --tblr-popover-arrow-border: var(--tblr-popover-border-color);
+  z-index: var(--tblr-popover-zindex);
+  display: block;
+  max-width: var(--tblr-popover-max-width);
+  font-family: var(--tblr-font-sans-serif);
+  font-style: normal;
+  font-weight: 400;
+  line-height: 1.4285714286;
+  text-align: left;
+  text-align: start;
+  text-decoration: none;
+  text-shadow: none;
+  text-transform: none;
+  letter-spacing: normal;
+  word-break: normal;
+  white-space: normal;
+  word-spacing: normal;
+  line-break: auto;
+  font-size: var(--tblr-popover-font-size);
+  word-wrap: break-word;
+  background-color: var(--tblr-popover-bg);
+  background-clip: padding-box;
+  border: var(--tblr-popover-border-width) solid var(--tblr-popover-border-color);
+  border-radius: var(--tblr-popover-border-radius);
+  box-shadow: var(--tblr-popover-box-shadow);
+}
+.popover .popover-arrow {
+  display: block;
+  width: var(--tblr-popover-arrow-width);
+  height: var(--tblr-popover-arrow-height);
+}
+.popover .popover-arrow::before, .popover .popover-arrow::after {
+  position: absolute;
+  display: block;
+  content: "";
+  border-color: transparent;
+  border-style: solid;
+  border-width: 0;
+}
+
+.bs-popover-top > .popover-arrow, .bs-popover-auto[data-popper-placement^=top] > .popover-arrow {
+  bottom: calc(-1 * (var(--tblr-popover-arrow-height)) - var(--tblr-popover-border-width));
+}
+.bs-popover-top > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=top] > .popover-arrow::before, .bs-popover-top > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=top] > .popover-arrow::after {
+  border-width: var(--tblr-popover-arrow-height) calc(var(--tblr-popover-arrow-width) * 0.5) 0;
+}
+.bs-popover-top > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=top] > .popover-arrow::before {
+  bottom: 0;
+  border-top-color: var(--tblr-popover-arrow-border);
+}
+.bs-popover-top > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=top] > .popover-arrow::after {
+  bottom: var(--tblr-popover-border-width);
+  border-top-color: var(--tblr-popover-bg);
+}
+
+/* rtl:begin:ignore */
+.bs-popover-end > .popover-arrow, .bs-popover-auto[data-popper-placement^=right] > .popover-arrow {
+  left: calc(-1 * (var(--tblr-popover-arrow-height)) - var(--tblr-popover-border-width));
+  width: var(--tblr-popover-arrow-height);
+  height: var(--tblr-popover-arrow-width);
+}
+.bs-popover-end > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=right] > .popover-arrow::before, .bs-popover-end > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=right] > .popover-arrow::after {
+  border-width: calc(var(--tblr-popover-arrow-width) * 0.5) var(--tblr-popover-arrow-height) calc(var(--tblr-popover-arrow-width) * 0.5) 0;
+}
+.bs-popover-end > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=right] > .popover-arrow::before {
+  left: 0;
+  border-right-color: var(--tblr-popover-arrow-border);
+}
+.bs-popover-end > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=right] > .popover-arrow::after {
+  left: var(--tblr-popover-border-width);
+  border-right-color: var(--tblr-popover-bg);
+}
+
+/* rtl:end:ignore */
+.bs-popover-bottom > .popover-arrow, .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow {
+  top: calc(-1 * (var(--tblr-popover-arrow-height)) - var(--tblr-popover-border-width));
+}
+.bs-popover-bottom > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow::before, .bs-popover-bottom > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow::after {
+  border-width: 0 calc(var(--tblr-popover-arrow-width) * 0.5) var(--tblr-popover-arrow-height);
+}
+.bs-popover-bottom > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow::before {
+  top: 0;
+  border-bottom-color: var(--tblr-popover-arrow-border);
+}
+.bs-popover-bottom > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow::after {
+  top: var(--tblr-popover-border-width);
+  border-bottom-color: var(--tblr-popover-bg);
+}
+.bs-popover-bottom .popover-header::before, .bs-popover-auto[data-popper-placement^=bottom] .popover-header::before {
+  position: absolute;
+  top: 0;
+  left: 50%;
+  display: block;
+  width: var(--tblr-popover-arrow-width);
+  margin-left: calc(-0.5 * var(--tblr-popover-arrow-width));
+  content: "";
+  border-bottom: var(--tblr-popover-border-width) solid var(--tblr-popover-header-bg);
+}
+
+/* rtl:begin:ignore */
+.bs-popover-start > .popover-arrow, .bs-popover-auto[data-popper-placement^=left] > .popover-arrow {
+  right: calc(-1 * (var(--tblr-popover-arrow-height)) - var(--tblr-popover-border-width));
+  width: var(--tblr-popover-arrow-height);
+  height: var(--tblr-popover-arrow-width);
+}
+.bs-popover-start > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=left] > .popover-arrow::before, .bs-popover-start > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=left] > .popover-arrow::after {
+  border-width: calc(var(--tblr-popover-arrow-width) * 0.5) 0 calc(var(--tblr-popover-arrow-width) * 0.5) var(--tblr-popover-arrow-height);
+}
+.bs-popover-start > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=left] > .popover-arrow::before {
+  right: 0;
+  border-left-color: var(--tblr-popover-arrow-border);
+}
+.bs-popover-start > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=left] > .popover-arrow::after {
+  right: var(--tblr-popover-border-width);
+  border-left-color: var(--tblr-popover-bg);
+}
+
+/* rtl:end:ignore */
+.popover-header {
+  padding: var(--tblr-popover-header-padding-y) var(--tblr-popover-header-padding-x);
+  margin-bottom: 0;
+  font-size: var(--tblr-popover-header-font-size);
+  color: var(--tblr-popover-header-color);
+  background-color: var(--tblr-popover-header-bg);
+  border-bottom: var(--tblr-popover-border-width) solid var(--tblr-popover-border-color);
+  border-top-left-radius: var(--tblr-popover-inner-border-radius);
+  border-top-right-radius: var(--tblr-popover-inner-border-radius);
+}
+.popover-header:empty {
+  display: none;
+}
+
+.popover-body {
+  padding: var(--tblr-popover-body-padding-y) var(--tblr-popover-body-padding-x);
+  color: var(--tblr-popover-body-color);
+}
+
+.carousel {
+  position: relative;
+}
+
+.carousel.pointer-event {
+  touch-action: pan-y;
+}
+
+.carousel-inner {
+  position: relative;
+  width: 100%;
+  overflow: hidden;
+}
+.carousel-inner::after {
+  display: block;
+  clear: both;
+  content: "";
+}
+
+.carousel-item {
+  position: relative;
+  display: none;
+  float: left;
+  width: 100%;
+  margin-right: -100%;
+  -webkit-backface-visibility: hidden;
+          backface-visibility: hidden;
+  transition: transform 0.6s ease-in-out;
+}
+@media (prefers-reduced-motion: reduce) {
+  .carousel-item {
+    transition: none;
+  }
+}
+
+.carousel-item.active,
+.carousel-item-next,
+.carousel-item-prev {
+  display: block;
+}
+
+.carousel-item-next:not(.carousel-item-start),
+.active.carousel-item-end {
+  transform: translateX(100%);
+}
+
+.carousel-item-prev:not(.carousel-item-end),
+.active.carousel-item-start {
+  transform: translateX(-100%);
+}
+
+.carousel-fade .carousel-item {
+  opacity: 0;
+  transition-property: opacity;
+  transform: none;
+}
+.carousel-fade .carousel-item.active,
+.carousel-fade .carousel-item-next.carousel-item-start,
+.carousel-fade .carousel-item-prev.carousel-item-end {
+  z-index: 1;
+  opacity: 1;
+}
+.carousel-fade .active.carousel-item-start,
+.carousel-fade .active.carousel-item-end {
+  z-index: 0;
+  opacity: 0;
+  transition: opacity 0s 0.6s;
+}
+@media (prefers-reduced-motion: reduce) {
+  .carousel-fade .active.carousel-item-start,
+  .carousel-fade .active.carousel-item-end {
+    transition: none;
+  }
+}
+
+.carousel-control-prev,
+.carousel-control-next {
+  position: absolute;
+  top: 0;
+  bottom: 0;
+  z-index: 1;
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  width: 15%;
+  padding: 0;
+  color: #ffffff;
+  text-align: center;
+  background: none;
+  border: 0;
+  opacity: 0.5;
+  transition: opacity 0.15s ease;
+}
+@media (prefers-reduced-motion: reduce) {
+  .carousel-control-prev,
+  .carousel-control-next {
+    transition: none;
+  }
+}
+.carousel-control-prev:hover, .carousel-control-prev:focus,
+.carousel-control-next:hover,
+.carousel-control-next:focus {
+  color: #ffffff;
+  text-decoration: none;
+  outline: 0;
+  opacity: 0.9;
+}
+
+.carousel-control-prev {
+  left: 0;
+}
+
+.carousel-control-next {
+  right: 0;
+}
+
+.carousel-control-prev-icon,
+.carousel-control-next-icon {
+  display: inline-block;
+  width: 1.5rem;
+  height: 1.5rem;
+  background-repeat: no-repeat;
+  background-position: 50%;
+  background-size: 100% 100%;
+}
+
+/* rtl:options: {
+  "autoRename": true,
+  "stringMap":[ {
+    "name"    : "prev-next",
+    "search"  : "prev",
+    "replace" : "next"
+  } ]
+} */
+.carousel-control-prev-icon {
+  background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23ffffff' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3e%3cpolyline points='15 18 9 12 15 6'%3e%3c/polyline%3e%3c/svg%3e");
+}
+
+.carousel-control-next-icon {
+  background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23ffffff' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3e%3cpolyline points='9 18 15 12 9 6'%3e%3c/polyline%3e%3c/svg%3e");
+}
+
+.carousel-indicators {
+  position: absolute;
+  right: 0;
+  bottom: 0;
+  left: 0;
+  z-index: 2;
+  display: flex;
+  justify-content: center;
+  padding: 0;
+  margin-right: 15%;
+  margin-bottom: 1rem;
+  margin-left: 15%;
+}
+.carousel-indicators [data-bs-target] {
+  box-sizing: content-box;
+  flex: 0 1 auto;
+  width: 30px;
+  height: 3px;
+  padding: 0;
+  margin-right: 3px;
+  margin-left: 3px;
+  text-indent: -999px;
+  cursor: pointer;
+  background-color: #ffffff;
+  background-clip: padding-box;
+  border: 0;
+  border-top: 10px solid transparent;
+  border-bottom: 10px solid transparent;
+  opacity: 0.5;
+  transition: opacity 0.6s ease;
+}
+@media (prefers-reduced-motion: reduce) {
+  .carousel-indicators [data-bs-target] {
+    transition: none;
+  }
+}
+.carousel-indicators .active {
+  opacity: 1;
+}
+
+.carousel-caption {
+  position: absolute;
+  right: 15%;
+  bottom: 1.25rem;
+  left: 15%;
+  padding-top: 1.25rem;
+  padding-bottom: 1.25rem;
+  color: #ffffff;
+  text-align: center;
+}
+
+.carousel-dark .carousel-control-prev-icon,
+.carousel-dark .carousel-control-next-icon {
+  filter: invert(1) grayscale(100);
+}
+.carousel-dark .carousel-indicators [data-bs-target] {
+  background-color: #000000;
+}
+.carousel-dark .carousel-caption {
+  color: #000000;
+}
+
+[data-bs-theme=dark] .carousel .carousel-control-prev-icon,
+[data-bs-theme=dark] .carousel .carousel-control-next-icon, [data-bs-theme=dark].carousel .carousel-control-prev-icon,
+[data-bs-theme=dark].carousel .carousel-control-next-icon {
+  filter: invert(1) grayscale(100);
+}
+[data-bs-theme=dark] .carousel .carousel-indicators [data-bs-target], [data-bs-theme=dark].carousel .carousel-indicators [data-bs-target] {
+  background-color: #000000;
+}
+[data-bs-theme=dark] .carousel .carousel-caption, [data-bs-theme=dark].carousel .carousel-caption {
+  color: #000000;
+}
+
+.spinner-grow,
+.spinner-border {
+  display: inline-block;
+  width: var(--tblr-spinner-width);
+  height: var(--tblr-spinner-height);
+  vertical-align: var(--tblr-spinner-vertical-align);
+  border-radius: 50%;
+  animation: var(--tblr-spinner-animation-speed) linear infinite var(--tblr-spinner-animation-name);
+}
+
+@keyframes spinner-border {
+  to {
+    transform: rotate(360deg) /* rtl:ignore */;
+  }
+}
+.spinner-border {
+  --tblr-spinner-width: 1.5rem;
+  --tblr-spinner-height: 1.5rem;
+  --tblr-spinner-vertical-align: -0.125em;
+  --tblr-spinner-border-width: 2px;
+  --tblr-spinner-animation-speed: 0.75s;
+  --tblr-spinner-animation-name: spinner-border;
+  border: var(--tblr-spinner-border-width) solid currentcolor;
+  border-right-color: transparent;
+}
+
+.spinner-border-sm {
+  --tblr-spinner-width: 1rem;
+  --tblr-spinner-height: 1rem;
+  --tblr-spinner-border-width: 1px;
+}
+
+@keyframes spinner-grow {
+  0% {
+    transform: scale(0);
+  }
+  50% {
+    opacity: 1;
+    transform: none;
+  }
+}
+.spinner-grow {
+  --tblr-spinner-width: 1.5rem;
+  --tblr-spinner-height: 1.5rem;
+  --tblr-spinner-vertical-align: -0.125em;
+  --tblr-spinner-animation-speed: 0.75s;
+  --tblr-spinner-animation-name: spinner-grow;
+  background-color: currentcolor;
+  opacity: 0;
+}
+
+.spinner-grow-sm {
+  --tblr-spinner-width: 1rem;
+  --tblr-spinner-height: 1rem;
+}
+
+@media (prefers-reduced-motion: reduce) {
+  .spinner-border,
+  .spinner-grow {
+    --tblr-spinner-animation-speed: 1.5s;
+  }
+}
+.offcanvas, .offcanvas-xxl, .offcanvas-xl, .offcanvas-lg, .offcanvas-md, .offcanvas-sm {
+  --tblr-offcanvas-zindex: 1045;
+  --tblr-offcanvas-width: 400px;
+  --tblr-offcanvas-height: 30vh;
+  --tblr-offcanvas-padding-x: 1.5rem;
+  --tblr-offcanvas-padding-y: 1.5rem;
+  --tblr-offcanvas-color: var(--tblr-body-color);
+  --tblr-offcanvas-bg: var(--tblr-bg-surface);
+  --tblr-offcanvas-border-width: var(--tblr-border-width);
+  --tblr-offcanvas-border-color: var(--tblr-border-color);
+  --tblr-offcanvas-box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075);
+  --tblr-offcanvas-transition: transform 0.3s ease-in-out;
+  --tblr-offcanvas-title-line-height: 1.4285714286;
+}
+
+@media (max-width: 575.98px) {
+  .offcanvas-sm {
+    position: fixed;
+    bottom: 0;
+    z-index: var(--tblr-offcanvas-zindex);
+    display: flex;
+    flex-direction: column;
+    max-width: 100%;
+    color: var(--tblr-offcanvas-color);
+    visibility: hidden;
+    background-color: var(--tblr-offcanvas-bg);
+    background-clip: padding-box;
+    outline: 0;
+    box-shadow: var(--tblr-offcanvas-box-shadow);
+    transition: var(--tblr-offcanvas-transition);
+  }
+}
+@media (max-width: 575.98px) and (prefers-reduced-motion: reduce) {
+  .offcanvas-sm {
+    transition: none;
+  }
+}
+@media (max-width: 575.98px) {
+  .offcanvas-sm.offcanvas-start {
+    top: 0;
+    left: 0;
+    width: var(--tblr-offcanvas-width);
+    border-right: var(--tblr-offcanvas-border-width) solid var(--tblr-offcanvas-border-color);
+    transform: translateX(-100%);
+  }
+  .offcanvas-sm.offcanvas-end {
+    top: 0;
+    right: 0;
+    width: var(--tblr-offcanvas-width);
+    border-left: var(--tblr-offcanvas-border-width) solid var(--tblr-offcanvas-border-color);
+    transform: translateX(100%);
+  }
+  .offcanvas-sm.offcanvas-top {
+    top: 0;
+    right: 0;
+    left: 0;
+    height: var(--tblr-offcanvas-height);
+    max-height: 100%;
+    border-bottom: var(--tblr-offcanvas-border-width) solid var(--tblr-offcanvas-border-color);
+    transform: translateY(-100%);
+  }
+  .offcanvas-sm.offcanvas-bottom {
+    right: 0;
+    left: 0;
+    height: var(--tblr-offcanvas-height);
+    max-height: 100%;
+    border-top: var(--tblr-offcanvas-border-width) solid var(--tblr-offcanvas-border-color);
+    transform: translateY(100%);
+  }
+  .offcanvas-sm.showing, .offcanvas-sm.show:not(.hiding) {
+    transform: none;
+  }
+  .offcanvas-sm.showing, .offcanvas-sm.hiding, .offcanvas-sm.show {
+    visibility: visible;
+  }
+}
+@media (min-width: 576px) {
+  .offcanvas-sm {
+    --tblr-offcanvas-height: auto;
+    --tblr-offcanvas-border-width: 0;
+    background-color: transparent !important;
+  }
+  .offcanvas-sm .offcanvas-header {
+    display: none;
+  }
+  .offcanvas-sm .offcanvas-body {
+    display: flex;
+    flex-grow: 0;
+    padding: 0;
+    overflow-y: visible;
+    background-color: transparent !important;
+  }
+}
+
+@media (max-width: 767.98px) {
+  .offcanvas-md {
+    position: fixed;
+    bottom: 0;
+    z-index: var(--tblr-offcanvas-zindex);
+    display: flex;
+    flex-direction: column;
+    max-width: 100%;
+    color: var(--tblr-offcanvas-color);
+    visibility: hidden;
+    background-color: var(--tblr-offcanvas-bg);
+    background-clip: padding-box;
+    outline: 0;
+    box-shadow: var(--tblr-offcanvas-box-shadow);
+    transition: var(--tblr-offcanvas-transition);
+  }
+}
+@media (max-width: 767.98px) and (prefers-reduced-motion: reduce) {
+  .offcanvas-md {
+    transition: none;
+  }
+}
+@media (max-width: 767.98px) {
+  .offcanvas-md.offcanvas-start {
+    top: 0;
+    left: 0;
+    width: var(--tblr-offcanvas-width);
+    border-right: var(--tblr-offcanvas-border-width) solid var(--tblr-offcanvas-border-color);
+    transform: translateX(-100%);
+  }
+  .offcanvas-md.offcanvas-end {
+    top: 0;
+    right: 0;
+    width: var(--tblr-offcanvas-width);
+    border-left: var(--tblr-offcanvas-border-width) solid var(--tblr-offcanvas-border-color);
+    transform: translateX(100%);
+  }
+  .offcanvas-md.offcanvas-top {
+    top: 0;
+    right: 0;
+    left: 0;
+    height: var(--tblr-offcanvas-height);
+    max-height: 100%;
+    border-bottom: var(--tblr-offcanvas-border-width) solid var(--tblr-offcanvas-border-color);
+    transform: translateY(-100%);
+  }
+  .offcanvas-md.offcanvas-bottom {
+    right: 0;
+    left: 0;
+    height: var(--tblr-offcanvas-height);
+    max-height: 100%;
+    border-top: var(--tblr-offcanvas-border-width) solid var(--tblr-offcanvas-border-color);
+    transform: translateY(100%);
+  }
+  .offcanvas-md.showing, .offcanvas-md.show:not(.hiding) {
+    transform: none;
+  }
+  .offcanvas-md.showing, .offcanvas-md.hiding, .offcanvas-md.show {
+    visibility: visible;
+  }
+}
+@media (min-width: 768px) {
+  .offcanvas-md {
+    --tblr-offcanvas-height: auto;
+    --tblr-offcanvas-border-width: 0;
+    background-color: transparent !important;
+  }
+  .offcanvas-md .offcanvas-header {
+    display: none;
+  }
+  .offcanvas-md .offcanvas-body {
+    display: flex;
+    flex-grow: 0;
+    padding: 0;
+    overflow-y: visible;
+    background-color: transparent !important;
+  }
+}
+
+@media (max-width: 991.98px) {
+  .offcanvas-lg {
+    position: fixed;
+    bottom: 0;
+    z-index: var(--tblr-offcanvas-zindex);
+    display: flex;
+    flex-direction: column;
+    max-width: 100%;
+    color: var(--tblr-offcanvas-color);
+    visibility: hidden;
+    background-color: var(--tblr-offcanvas-bg);
+    background-clip: padding-box;
+    outline: 0;
+    box-shadow: var(--tblr-offcanvas-box-shadow);
+    transition: var(--tblr-offcanvas-transition);
+  }
+}
+@media (max-width: 991.98px) and (prefers-reduced-motion: reduce) {
+  .offcanvas-lg {
+    transition: none;
+  }
+}
+@media (max-width: 991.98px) {
+  .offcanvas-lg.offcanvas-start {
+    top: 0;
+    left: 0;
+    width: var(--tblr-offcanvas-width);
+    border-right: var(--tblr-offcanvas-border-width) solid var(--tblr-offcanvas-border-color);
+    transform: translateX(-100%);
+  }
+  .offcanvas-lg.offcanvas-end {
+    top: 0;
+    right: 0;
+    width: var(--tblr-offcanvas-width);
+    border-left: var(--tblr-offcanvas-border-width) solid var(--tblr-offcanvas-border-color);
+    transform: translateX(100%);
+  }
+  .offcanvas-lg.offcanvas-top {
+    top: 0;
+    right: 0;
+    left: 0;
+    height: var(--tblr-offcanvas-height);
+    max-height: 100%;
+    border-bottom: var(--tblr-offcanvas-border-width) solid var(--tblr-offcanvas-border-color);
+    transform: translateY(-100%);
+  }
+  .offcanvas-lg.offcanvas-bottom {
+    right: 0;
+    left: 0;
+    height: var(--tblr-offcanvas-height);
+    max-height: 100%;
+    border-top: var(--tblr-offcanvas-border-width) solid var(--tblr-offcanvas-border-color);
+    transform: translateY(100%);
+  }
+  .offcanvas-lg.showing, .offcanvas-lg.show:not(.hiding) {
+    transform: none;
+  }
+  .offcanvas-lg.showing, .offcanvas-lg.hiding, .offcanvas-lg.show {
+    visibility: visible;
+  }
+}
+@media (min-width: 992px) {
+  .offcanvas-lg {
+    --tblr-offcanvas-height: auto;
+    --tblr-offcanvas-border-width: 0;
+    background-color: transparent !important;
+  }
+  .offcanvas-lg .offcanvas-header {
+    display: none;
+  }
+  .offcanvas-lg .offcanvas-body {
+    display: flex;
+    flex-grow: 0;
+    padding: 0;
+    overflow-y: visible;
+    background-color: transparent !important;
+  }
+}
+
+@media (max-width: 1199.98px) {
+  .offcanvas-xl {
+    position: fixed;
+    bottom: 0;
+    z-index: var(--tblr-offcanvas-zindex);
+    display: flex;
+    flex-direction: column;
+    max-width: 100%;
+    color: var(--tblr-offcanvas-color);
+    visibility: hidden;
+    background-color: var(--tblr-offcanvas-bg);
+    background-clip: padding-box;
+    outline: 0;
+    box-shadow: var(--tblr-offcanvas-box-shadow);
+    transition: var(--tblr-offcanvas-transition);
+  }
+}
+@media (max-width: 1199.98px) and (prefers-reduced-motion: reduce) {
+  .offcanvas-xl {
+    transition: none;
+  }
+}
+@media (max-width: 1199.98px) {
+  .offcanvas-xl.offcanvas-start {
+    top: 0;
+    left: 0;
+    width: var(--tblr-offcanvas-width);
+    border-right: var(--tblr-offcanvas-border-width) solid var(--tblr-offcanvas-border-color);
+    transform: translateX(-100%);
+  }
+  .offcanvas-xl.offcanvas-end {
+    top: 0;
+    right: 0;
+    width: var(--tblr-offcanvas-width);
+    border-left: var(--tblr-offcanvas-border-width) solid var(--tblr-offcanvas-border-color);
+    transform: translateX(100%);
+  }
+  .offcanvas-xl.offcanvas-top {
+    top: 0;
+    right: 0;
+    left: 0;
+    height: var(--tblr-offcanvas-height);
+    max-height: 100%;
+    border-bottom: var(--tblr-offcanvas-border-width) solid var(--tblr-offcanvas-border-color);
+    transform: translateY(-100%);
+  }
+  .offcanvas-xl.offcanvas-bottom {
+    right: 0;
+    left: 0;
+    height: var(--tblr-offcanvas-height);
+    max-height: 100%;
+    border-top: var(--tblr-offcanvas-border-width) solid var(--tblr-offcanvas-border-color);
+    transform: translateY(100%);
+  }
+  .offcanvas-xl.showing, .offcanvas-xl.show:not(.hiding) {
+    transform: none;
+  }
+  .offcanvas-xl.showing, .offcanvas-xl.hiding, .offcanvas-xl.show {
+    visibility: visible;
+  }
+}
+@media (min-width: 1200px) {
+  .offcanvas-xl {
+    --tblr-offcanvas-height: auto;
+    --tblr-offcanvas-border-width: 0;
+    background-color: transparent !important;
+  }
+  .offcanvas-xl .offcanvas-header {
+    display: none;
+  }
+  .offcanvas-xl .offcanvas-body {
+    display: flex;
+    flex-grow: 0;
+    padding: 0;
+    overflow-y: visible;
+    background-color: transparent !important;
+  }
+}
+
+@media (max-width: 1399.98px) {
+  .offcanvas-xxl {
+    position: fixed;
+    bottom: 0;
+    z-index: var(--tblr-offcanvas-zindex);
+    display: flex;
+    flex-direction: column;
+    max-width: 100%;
+    color: var(--tblr-offcanvas-color);
+    visibility: hidden;
+    background-color: var(--tblr-offcanvas-bg);
+    background-clip: padding-box;
+    outline: 0;
+    box-shadow: var(--tblr-offcanvas-box-shadow);
+    transition: var(--tblr-offcanvas-transition);
+  }
+}
+@media (max-width: 1399.98px) and (prefers-reduced-motion: reduce) {
+  .offcanvas-xxl {
+    transition: none;
+  }
+}
+@media (max-width: 1399.98px) {
+  .offcanvas-xxl.offcanvas-start {
+    top: 0;
+    left: 0;
+    width: var(--tblr-offcanvas-width);
+    border-right: var(--tblr-offcanvas-border-width) solid var(--tblr-offcanvas-border-color);
+    transform: translateX(-100%);
+  }
+  .offcanvas-xxl.offcanvas-end {
+    top: 0;
+    right: 0;
+    width: var(--tblr-offcanvas-width);
+    border-left: var(--tblr-offcanvas-border-width) solid var(--tblr-offcanvas-border-color);
+    transform: translateX(100%);
+  }
+  .offcanvas-xxl.offcanvas-top {
+    top: 0;
+    right: 0;
+    left: 0;
+    height: var(--tblr-offcanvas-height);
+    max-height: 100%;
+    border-bottom: var(--tblr-offcanvas-border-width) solid var(--tblr-offcanvas-border-color);
+    transform: translateY(-100%);
+  }
+  .offcanvas-xxl.offcanvas-bottom {
+    right: 0;
+    left: 0;
+    height: var(--tblr-offcanvas-height);
+    max-height: 100%;
+    border-top: var(--tblr-offcanvas-border-width) solid var(--tblr-offcanvas-border-color);
+    transform: translateY(100%);
+  }
+  .offcanvas-xxl.showing, .offcanvas-xxl.show:not(.hiding) {
+    transform: none;
+  }
+  .offcanvas-xxl.showing, .offcanvas-xxl.hiding, .offcanvas-xxl.show {
+    visibility: visible;
+  }
+}
+@media (min-width: 1400px) {
+  .offcanvas-xxl {
+    --tblr-offcanvas-height: auto;
+    --tblr-offcanvas-border-width: 0;
+    background-color: transparent !important;
+  }
+  .offcanvas-xxl .offcanvas-header {
+    display: none;
+  }
+  .offcanvas-xxl .offcanvas-body {
+    display: flex;
+    flex-grow: 0;
+    padding: 0;
+    overflow-y: visible;
+    background-color: transparent !important;
+  }
+}
+
+.offcanvas {
+  position: fixed;
+  bottom: 0;
+  z-index: var(--tblr-offcanvas-zindex);
+  display: flex;
+  flex-direction: column;
+  max-width: 100%;
+  color: var(--tblr-offcanvas-color);
+  visibility: hidden;
+  background-color: var(--tblr-offcanvas-bg);
+  background-clip: padding-box;
+  outline: 0;
+  box-shadow: var(--tblr-offcanvas-box-shadow);
+  transition: var(--tblr-offcanvas-transition);
+}
+@media (prefers-reduced-motion: reduce) {
+  .offcanvas {
+    transition: none;
+  }
+}
+.offcanvas.offcanvas-start {
+  top: 0;
+  left: 0;
+  width: var(--tblr-offcanvas-width);
+  border-right: var(--tblr-offcanvas-border-width) solid var(--tblr-offcanvas-border-color);
+  transform: translateX(-100%);
+}
+.offcanvas.offcanvas-end {
+  top: 0;
+  right: 0;
+  width: var(--tblr-offcanvas-width);
+  border-left: var(--tblr-offcanvas-border-width) solid var(--tblr-offcanvas-border-color);
+  transform: translateX(100%);
+}
+.offcanvas.offcanvas-top {
+  top: 0;
+  right: 0;
+  left: 0;
+  height: var(--tblr-offcanvas-height);
+  max-height: 100%;
+  border-bottom: var(--tblr-offcanvas-border-width) solid var(--tblr-offcanvas-border-color);
+  transform: translateY(-100%);
+}
+.offcanvas.offcanvas-bottom {
+  right: 0;
+  left: 0;
+  height: var(--tblr-offcanvas-height);
+  max-height: 100%;
+  border-top: var(--tblr-offcanvas-border-width) solid var(--tblr-offcanvas-border-color);
+  transform: translateY(100%);
+}
+.offcanvas.showing, .offcanvas.show:not(.hiding) {
+  transform: none;
+}
+.offcanvas.showing, .offcanvas.hiding, .offcanvas.show {
+  visibility: visible;
+}
+
+.offcanvas-backdrop {
+  position: fixed;
+  top: 0;
+  left: 0;
+  z-index: 1040;
+  width: 100vw;
+  height: 100vh;
+  background-color: #182433;
+}
+.offcanvas-backdrop.fade {
+  opacity: 0;
+}
+.offcanvas-backdrop.show {
+  opacity: 0.24;
+}
+
+.offcanvas-header {
+  display: flex;
+  align-items: center;
+  justify-content: space-between;
+  padding: var(--tblr-offcanvas-padding-y) var(--tblr-offcanvas-padding-x);
+}
+.offcanvas-header .btn-close {
+  padding: calc(var(--tblr-offcanvas-padding-y) * 0.5) calc(var(--tblr-offcanvas-padding-x) * 0.5);
+  margin-top: calc(-0.5 * var(--tblr-offcanvas-padding-y));
+  margin-right: calc(-0.5 * var(--tblr-offcanvas-padding-x));
+  margin-bottom: calc(-0.5 * var(--tblr-offcanvas-padding-y));
+}
+
+.offcanvas-title {
+  margin-bottom: 0;
+  line-height: var(--tblr-offcanvas-title-line-height);
+}
+
+.offcanvas-body {
+  flex-grow: 1;
+  padding: var(--tblr-offcanvas-padding-y) var(--tblr-offcanvas-padding-x);
+  overflow-y: auto;
+}
+
+.placeholder {
+  display: inline-block;
+  min-height: 1em;
+  vertical-align: middle;
+  cursor: wait;
+  background-color: currentcolor;
+  opacity: 0.2;
+}
+.placeholder.btn::before {
+  display: inline-block;
+  content: "";
+}
+
+.placeholder-xs {
+  min-height: 0.6em;
+}
+
+.placeholder-sm {
+  min-height: 0.8em;
+}
+
+.placeholder-lg {
+  min-height: 1.2em;
+}
+
+.placeholder-glow .placeholder {
+  animation: placeholder-glow 2s ease-in-out infinite;
+}
+
+@keyframes placeholder-glow {
+  50% {
+    opacity: 0.1;
+  }
+}
+.placeholder-wave {
+  -webkit-mask-image: linear-gradient(130deg, #000000 55%, rgba(0, 0, 0, 0.9) 75%, #000000 95%);
+          mask-image: linear-gradient(130deg, #000000 55%, rgba(0, 0, 0, 0.9) 75%, #000000 95%);
+  -webkit-mask-size: 200% 100%;
+          mask-size: 200% 100%;
+  animation: placeholder-wave 2s linear infinite;
+}
+
+@keyframes placeholder-wave {
+  100% {
+    -webkit-mask-position: -200% 0%;
+            mask-position: -200% 0%;
+  }
+}
+.clearfix::after {
+  display: block;
+  clear: both;
+  content: "";
+}
+
+.text-bg-primary {
+  color: #fcfdfe !important;
+  background-color: RGBA(var(--tblr-primary-rgb), var(--tblr-bg-opacity, 1)) !important;
+}
+
+.text-bg-secondary {
+  color: #fcfdfe !important;
+  background-color: RGBA(var(--tblr-secondary-rgb), var(--tblr-bg-opacity, 1)) !important;
+}
+
+.text-bg-success {
+  color: #fcfdfe !important;
+  background-color: RGBA(var(--tblr-success-rgb), var(--tblr-bg-opacity, 1)) !important;
+}
+
+.text-bg-info {
+  color: #fcfdfe !important;
+  background-color: RGBA(var(--tblr-info-rgb), var(--tblr-bg-opacity, 1)) !important;
+}
+
+.text-bg-warning {
+  color: #fcfdfe !important;
+  background-color: RGBA(var(--tblr-warning-rgb), var(--tblr-bg-opacity, 1)) !important;
+}
+
+.text-bg-danger {
+  color: #fcfdfe !important;
+  background-color: RGBA(var(--tblr-danger-rgb), var(--tblr-bg-opacity, 1)) !important;
+}
+
+.text-bg-light {
+  color: #182433 !important;
+  background-color: RGBA(var(--tblr-light-rgb), var(--tblr-bg-opacity, 1)) !important;
+}
+
+.text-bg-dark {
+  color: #fcfdfe !important;
+  background-color: RGBA(var(--tblr-dark-rgb), var(--tblr-bg-opacity, 1)) !important;
+}
+
+.text-bg-muted {
+  color: #fcfdfe !important;
+  background-color: RGBA(var(--tblr-muted-rgb), var(--tblr-bg-opacity, 1)) !important;
+}
+
+.text-bg-blue {
+  color: #fcfdfe !important;
+  background-color: RGBA(var(--tblr-blue-rgb), var(--tblr-bg-opacity, 1)) !important;
+}
+
+.text-bg-azure {
+  color: #fcfdfe !important;
+  background-color: RGBA(var(--tblr-azure-rgb), var(--tblr-bg-opacity, 1)) !important;
+}
+
+.text-bg-indigo {
+  color: #fcfdfe !important;
+  background-color: RGBA(var(--tblr-indigo-rgb), var(--tblr-bg-opacity, 1)) !important;
+}
+
+.text-bg-purple {
+  color: #fcfdfe !important;
+  background-color: RGBA(var(--tblr-purple-rgb), var(--tblr-bg-opacity, 1)) !important;
+}
+
+.text-bg-pink {
+  color: #fcfdfe !important;
+  background-color: RGBA(var(--tblr-pink-rgb), var(--tblr-bg-opacity, 1)) !important;
+}
+
+.text-bg-red {
+  color: #fcfdfe !important;
+  background-color: RGBA(var(--tblr-red-rgb), var(--tblr-bg-opacity, 1)) !important;
+}
+
+.text-bg-orange {
+  color: #fcfdfe !important;
+  background-color: RGBA(var(--tblr-orange-rgb), var(--tblr-bg-opacity, 1)) !important;
+}
+
+.text-bg-yellow {
+  color: #fcfdfe !important;
+  background-color: RGBA(var(--tblr-yellow-rgb), var(--tblr-bg-opacity, 1)) !important;
+}
+
+.text-bg-lime {
+  color: #fcfdfe !important;
+  background-color: RGBA(var(--tblr-lime-rgb), var(--tblr-bg-opacity, 1)) !important;
+}
+
+.text-bg-green {
+  color: #fcfdfe !important;
+  background-color: RGBA(var(--tblr-green-rgb), var(--tblr-bg-opacity, 1)) !important;
+}
+
+.text-bg-teal {
+  color: #fcfdfe !important;
+  background-color: RGBA(var(--tblr-teal-rgb), var(--tblr-bg-opacity, 1)) !important;
+}
+
+.text-bg-cyan {
+  color: #fcfdfe !important;
+  background-color: RGBA(var(--tblr-cyan-rgb), var(--tblr-bg-opacity, 1)) !important;
+}
+
+.text-bg-facebook {
+  color: #fcfdfe !important;
+  background-color: RGBA(var(--tblr-facebook-rgb), var(--tblr-bg-opacity, 1)) !important;
+}
+
+.text-bg-twitter {
+  color: #fcfdfe !important;
+  background-color: RGBA(var(--tblr-twitter-rgb), var(--tblr-bg-opacity, 1)) !important;
+}
+
+.text-bg-linkedin {
+  color: #fcfdfe !important;
+  background-color: RGBA(var(--tblr-linkedin-rgb), var(--tblr-bg-opacity, 1)) !important;
+}
+
+.text-bg-google {
+  color: #fcfdfe !important;
+  background-color: RGBA(var(--tblr-google-rgb), var(--tblr-bg-opacity, 1)) !important;
+}
+
+.text-bg-youtube {
+  color: #fcfdfe !important;
+  background-color: RGBA(var(--tblr-youtube-rgb), var(--tblr-bg-opacity, 1)) !important;
+}
+
+.text-bg-vimeo {
+  color: #fcfdfe !important;
+  background-color: RGBA(var(--tblr-vimeo-rgb), var(--tblr-bg-opacity, 1)) !important;
+}
+
+.text-bg-dribbble {
+  color: #fcfdfe !important;
+  background-color: RGBA(var(--tblr-dribbble-rgb), var(--tblr-bg-opacity, 1)) !important;
+}
+
+.text-bg-github {
+  color: #fcfdfe !important;
+  background-color: RGBA(var(--tblr-github-rgb), var(--tblr-bg-opacity, 1)) !important;
+}
+
+.text-bg-instagram {
+  color: #fcfdfe !important;
+  background-color: RGBA(var(--tblr-instagram-rgb), var(--tblr-bg-opacity, 1)) !important;
+}
+
+.text-bg-pinterest {
+  color: #fcfdfe !important;
+  background-color: RGBA(var(--tblr-pinterest-rgb), var(--tblr-bg-opacity, 1)) !important;
+}
+
+.text-bg-vk {
+  color: #fcfdfe !important;
+  background-color: RGBA(var(--tblr-vk-rgb), var(--tblr-bg-opacity, 1)) !important;
+}
+
+.text-bg-rss {
+  color: #fcfdfe !important;
+  background-color: RGBA(var(--tblr-rss-rgb), var(--tblr-bg-opacity, 1)) !important;
+}
+
+.text-bg-flickr {
+  color: #fcfdfe !important;
+  background-color: RGBA(var(--tblr-flickr-rgb), var(--tblr-bg-opacity, 1)) !important;
+}
+
+.text-bg-bitbucket {
+  color: #fcfdfe !important;
+  background-color: RGBA(var(--tblr-bitbucket-rgb), var(--tblr-bg-opacity, 1)) !important;
+}
+
+.text-bg-tabler {
+  color: #fcfdfe !important;
+  background-color: RGBA(var(--tblr-tabler-rgb), var(--tblr-bg-opacity, 1)) !important;
+}
+
+.link-primary {
+  color: RGBA(var(--tblr-primary-rgb), var(--tblr-link-opacity, 1)) !important;
+  -webkit-text-decoration-color: RGBA(var(--tblr-primary-rgb), var(--tblr-link-underline-opacity, 1)) !important;
+          text-decoration-color: RGBA(var(--tblr-primary-rgb), var(--tblr-link-underline-opacity, 1)) !important;
+}
+.link-primary:hover, .link-primary:focus {
+  color: RGBA(0, 67, 133, var(--tblr-link-opacity, 1)) !important;
+  -webkit-text-decoration-color: RGBA(0, 67, 133, var(--tblr-link-underline-opacity, 1)) !important;
+          text-decoration-color: RGBA(0, 67, 133, var(--tblr-link-underline-opacity, 1)) !important;
+}
+
+.link-secondary {
+  color: RGBA(var(--tblr-secondary-rgb), var(--tblr-link-opacity, 1)) !important;
+  -webkit-text-decoration-color: RGBA(var(--tblr-secondary-rgb), var(--tblr-link-underline-opacity, 1)) !important;
+          text-decoration-color: RGBA(var(--tblr-secondary-rgb), var(--tblr-link-underline-opacity, 1)) !important;
+}
+.link-secondary:hover, .link-secondary:focus {
+  color: RGBA(82, 92, 104, var(--tblr-link-opacity, 1)) !important;
+  -webkit-text-decoration-color: RGBA(82, 92, 104, var(--tblr-link-underline-opacity, 1)) !important;
+          text-decoration-color: RGBA(82, 92, 104, var(--tblr-link-underline-opacity, 1)) !important;
+}
+
+.link-success {
+  color: RGBA(var(--tblr-success-rgb), var(--tblr-link-opacity, 1)) !important;
+  -webkit-text-decoration-color: RGBA(var(--tblr-success-rgb), var(--tblr-link-underline-opacity, 1)) !important;
+          text-decoration-color: RGBA(var(--tblr-success-rgb), var(--tblr-link-underline-opacity, 1)) !important;
+}
+.link-success:hover, .link-success:focus {
+  color: RGBA(38, 143, 54, var(--tblr-link-opacity, 1)) !important;
+  -webkit-text-decoration-color: RGBA(38, 143, 54, var(--tblr-link-underline-opacity, 1)) !important;
+          text-decoration-color: RGBA(38, 143, 54, var(--tblr-link-underline-opacity, 1)) !important;
+}
+
+.link-info {
+  color: RGBA(var(--tblr-info-rgb), var(--tblr-link-opacity, 1)) !important;
+  -webkit-text-decoration-color: RGBA(var(--tblr-info-rgb), var(--tblr-link-underline-opacity, 1)) !important;
+          text-decoration-color: RGBA(var(--tblr-info-rgb), var(--tblr-link-underline-opacity, 1)) !important;
+}
+.link-info:hover, .link-info:focus {
+  color: RGBA(53, 122, 180, var(--tblr-link-opacity, 1)) !important;
+  -webkit-text-decoration-color: RGBA(53, 122, 180, var(--tblr-link-underline-opacity, 1)) !important;
+          text-decoration-color: RGBA(53, 122, 180, var(--tblr-link-underline-opacity, 1)) !important;
+}
+
+.link-warning {
+  color: RGBA(var(--tblr-warning-rgb), var(--tblr-link-opacity, 1)) !important;
+  -webkit-text-decoration-color: RGBA(var(--tblr-warning-rgb), var(--tblr-link-underline-opacity, 1)) !important;
+          text-decoration-color: RGBA(var(--tblr-warning-rgb), var(--tblr-link-underline-opacity, 1)) !important;
+}
+.link-warning:hover, .link-warning:focus {
+  color: RGBA(198, 82, 6, var(--tblr-link-opacity, 1)) !important;
+  -webkit-text-decoration-color: RGBA(198, 82, 6, var(--tblr-link-underline-opacity, 1)) !important;
+          text-decoration-color: RGBA(198, 82, 6, var(--tblr-link-underline-opacity, 1)) !important;
+}
+
+.link-danger {
+  color: RGBA(var(--tblr-danger-rgb), var(--tblr-link-opacity, 1)) !important;
+  -webkit-text-decoration-color: RGBA(var(--tblr-danger-rgb), var(--tblr-link-underline-opacity, 1)) !important;
+          text-decoration-color: RGBA(var(--tblr-danger-rgb), var(--tblr-link-underline-opacity, 1)) !important;
+}
+.link-danger:hover, .link-danger:focus {
+  color: RGBA(171, 46, 46, var(--tblr-link-opacity, 1)) !important;
+  -webkit-text-decoration-color: RGBA(171, 46, 46, var(--tblr-link-underline-opacity, 1)) !important;
+          text-decoration-color: RGBA(171, 46, 46, var(--tblr-link-underline-opacity, 1)) !important;
+}
+
+.link-light {
+  color: RGBA(var(--tblr-light-rgb), var(--tblr-link-opacity, 1)) !important;
+  -webkit-text-decoration-color: RGBA(var(--tblr-light-rgb), var(--tblr-link-underline-opacity, 1)) !important;
+          text-decoration-color: RGBA(var(--tblr-light-rgb), var(--tblr-link-underline-opacity, 1)) !important;
+}
+.link-light:hover, .link-light:focus {
+  color: RGBA(253, 253, 254, var(--tblr-link-opacity, 1)) !important;
+  -webkit-text-decoration-color: RGBA(253, 253, 254, var(--tblr-link-underline-opacity, 1)) !important;
+          text-decoration-color: RGBA(253, 253, 254, var(--tblr-link-underline-opacity, 1)) !important;
+}
+
+.link-dark {
+  color: RGBA(var(--tblr-dark-rgb), var(--tblr-link-opacity, 1)) !important;
+  -webkit-text-decoration-color: RGBA(var(--tblr-dark-rgb), var(--tblr-link-underline-opacity, 1)) !important;
+          text-decoration-color: RGBA(var(--tblr-dark-rgb), var(--tblr-link-underline-opacity, 1)) !important;
+}
+.link-dark:hover, .link-dark:focus {
+  color: RGBA(19, 29, 41, var(--tblr-link-opacity, 1)) !important;
+  -webkit-text-decoration-color: RGBA(19, 29, 41, var(--tblr-link-underline-opacity, 1)) !important;
+          text-decoration-color: RGBA(19, 29, 41, var(--tblr-link-underline-opacity, 1)) !important;
+}
+
+.link-muted {
+  color: RGBA(var(--tblr-muted-rgb), var(--tblr-link-opacity, 1)) !important;
+  -webkit-text-decoration-color: RGBA(var(--tblr-muted-rgb), var(--tblr-link-underline-opacity, 1)) !important;
+          text-decoration-color: RGBA(var(--tblr-muted-rgb), var(--tblr-link-underline-opacity, 1)) !important;
+}
+.link-muted:hover, .link-muted:focus {
+  color: RGBA(82, 92, 104, var(--tblr-link-opacity, 1)) !important;
+  -webkit-text-decoration-color: RGBA(82, 92, 104, var(--tblr-link-underline-opacity, 1)) !important;
+          text-decoration-color: RGBA(82, 92, 104, var(--tblr-link-underline-opacity, 1)) !important;
+}
+
+.link-blue {
+  color: RGBA(var(--tblr-blue-rgb), var(--tblr-link-opacity, 1)) !important;
+  -webkit-text-decoration-color: RGBA(var(--tblr-blue-rgb), var(--tblr-link-underline-opacity, 1)) !important;
+          text-decoration-color: RGBA(var(--tblr-blue-rgb), var(--tblr-link-underline-opacity, 1)) !important;
+}
+.link-blue:hover, .link-blue:focus {
+  color: RGBA(0, 67, 133, var(--tblr-link-opacity, 1)) !important;
+  -webkit-text-decoration-color: RGBA(0, 67, 133, var(--tblr-link-underline-opacity, 1)) !important;
+          text-decoration-color: RGBA(0, 67, 133, var(--tblr-link-underline-opacity, 1)) !important;
+}
+
+.link-azure {
+  color: RGBA(var(--tblr-azure-rgb), var(--tblr-link-opacity, 1)) !important;
+  -webkit-text-decoration-color: RGBA(var(--tblr-azure-rgb), var(--tblr-link-underline-opacity, 1)) !important;
+          text-decoration-color: RGBA(var(--tblr-azure-rgb), var(--tblr-link-underline-opacity, 1)) !important;
+}
+.link-azure:hover, .link-azure:focus {
+  color: RGBA(53, 122, 180, var(--tblr-link-opacity, 1)) !important;
+  -webkit-text-decoration-color: RGBA(53, 122, 180, var(--tblr-link-underline-opacity, 1)) !important;
+          text-decoration-color: RGBA(53, 122, 180, var(--tblr-link-underline-opacity, 1)) !important;
+}
+
+.link-indigo {
+  color: RGBA(var(--tblr-indigo-rgb), var(--tblr-link-opacity, 1)) !important;
+  -webkit-text-decoration-color: RGBA(var(--tblr-indigo-rgb), var(--tblr-link-underline-opacity, 1)) !important;
+          text-decoration-color: RGBA(var(--tblr-indigo-rgb), var(--tblr-link-underline-opacity, 1)) !important;
+}
+.link-indigo:hover, .link-indigo:focus {
+  color: RGBA(53, 79, 188, var(--tblr-link-opacity, 1)) !important;
+  -webkit-text-decoration-color: RGBA(53, 79, 188, var(--tblr-link-underline-opacity, 1)) !important;
+          text-decoration-color: RGBA(53, 79, 188, var(--tblr-link-underline-opacity, 1)) !important;
+}
+
+.link-purple {
+  color: RGBA(var(--tblr-purple-rgb), var(--tblr-link-opacity, 1)) !important;
+  -webkit-text-decoration-color: RGBA(var(--tblr-purple-rgb), var(--tblr-link-underline-opacity, 1)) !important;
+          text-decoration-color: RGBA(var(--tblr-purple-rgb), var(--tblr-link-underline-opacity, 1)) !important;
+}
+.link-purple:hover, .link-purple:focus {
+  color: RGBA(139, 50, 161, var(--tblr-link-opacity, 1)) !important;
+  -webkit-text-decoration-color: RGBA(139, 50, 161, var(--tblr-link-underline-opacity, 1)) !important;
+          text-decoration-color: RGBA(139, 50, 161, var(--tblr-link-underline-opacity, 1)) !important;
+}
+
+.link-pink {
+  color: RGBA(var(--tblr-pink-rgb), var(--tblr-link-opacity, 1)) !important;
+  -webkit-text-decoration-color: RGBA(var(--tblr-pink-rgb), var(--tblr-link-underline-opacity, 1)) !important;
+          text-decoration-color: RGBA(var(--tblr-pink-rgb), var(--tblr-link-underline-opacity, 1)) !important;
+}
+.link-pink:hover, .link-pink:focus {
+  color: RGBA(171, 41, 86, var(--tblr-link-opacity, 1)) !important;
+  -webkit-text-decoration-color: RGBA(171, 41, 86, var(--tblr-link-underline-opacity, 1)) !important;
+          text-decoration-color: RGBA(171, 41, 86, var(--tblr-link-underline-opacity, 1)) !important;
+}
+
+.link-red {
+  color: RGBA(var(--tblr-red-rgb), var(--tblr-link-opacity, 1)) !important;
+  -webkit-text-decoration-color: RGBA(var(--tblr-red-rgb), var(--tblr-link-underline-opacity, 1)) !important;
+          text-decoration-color: RGBA(var(--tblr-red-rgb), var(--tblr-link-underline-opacity, 1)) !important;
+}
+.link-red:hover, .link-red:focus {
+  color: RGBA(171, 46, 46, var(--tblr-link-opacity, 1)) !important;
+  -webkit-text-decoration-color: RGBA(171, 46, 46, var(--tblr-link-underline-opacity, 1)) !important;
+          text-decoration-color: RGBA(171, 46, 46, var(--tblr-link-underline-opacity, 1)) !important;
+}
+
+.link-orange {
+  color: RGBA(var(--tblr-orange-rgb), var(--tblr-link-opacity, 1)) !important;
+  -webkit-text-decoration-color: RGBA(var(--tblr-orange-rgb), var(--tblr-link-underline-opacity, 1)) !important;
+          text-decoration-color: RGBA(var(--tblr-orange-rgb), var(--tblr-link-underline-opacity, 1)) !important;
+}
+.link-orange:hover, .link-orange:focus {
+  color: RGBA(198, 82, 6, var(--tblr-link-opacity, 1)) !important;
+  -webkit-text-decoration-color: RGBA(198, 82, 6, var(--tblr-link-underline-opacity, 1)) !important;
+          text-decoration-color: RGBA(198, 82, 6, var(--tblr-link-underline-opacity, 1)) !important;
+}
+
+.link-yellow {
+  color: RGBA(var(--tblr-yellow-rgb), var(--tblr-link-opacity, 1)) !important;
+  -webkit-text-decoration-color: RGBA(var(--tblr-yellow-rgb), var(--tblr-link-underline-opacity, 1)) !important;
+          text-decoration-color: RGBA(var(--tblr-yellow-rgb), var(--tblr-link-underline-opacity, 1)) !important;
+}
+.link-yellow:hover, .link-yellow:focus {
+  color: RGBA(196, 127, 0, var(--tblr-link-opacity, 1)) !important;
+  -webkit-text-decoration-color: RGBA(196, 127, 0, var(--tblr-link-underline-opacity, 1)) !important;
+          text-decoration-color: RGBA(196, 127, 0, var(--tblr-link-underline-opacity, 1)) !important;
+}
+
+.link-lime {
+  color: RGBA(var(--tblr-lime-rgb), var(--tblr-link-opacity, 1)) !important;
+  -webkit-text-decoration-color: RGBA(var(--tblr-lime-rgb), var(--tblr-link-underline-opacity, 1)) !important;
+          text-decoration-color: RGBA(var(--tblr-lime-rgb), var(--tblr-link-underline-opacity, 1)) !important;
+}
+.link-lime:hover, .link-lime:focus {
+  color: RGBA(93, 147, 18, var(--tblr-link-opacity, 1)) !important;
+  -webkit-text-decoration-color: RGBA(93, 147, 18, var(--tblr-link-underline-opacity, 1)) !important;
+          text-decoration-color: RGBA(93, 147, 18, var(--tblr-link-underline-opacity, 1)) !important;
+}
+
+.link-green {
+  color: RGBA(var(--tblr-green-rgb), var(--tblr-link-opacity, 1)) !important;
+  -webkit-text-decoration-color: RGBA(var(--tblr-green-rgb), var(--tblr-link-underline-opacity, 1)) !important;
+          text-decoration-color: RGBA(var(--tblr-green-rgb), var(--tblr-link-underline-opacity, 1)) !important;
+}
+.link-green:hover, .link-green:focus {
+  color: RGBA(38, 143, 54, var(--tblr-link-opacity, 1)) !important;
+  -webkit-text-decoration-color: RGBA(38, 143, 54, var(--tblr-link-underline-opacity, 1)) !important;
+          text-decoration-color: RGBA(38, 143, 54, var(--tblr-link-underline-opacity, 1)) !important;
+}
+
+.link-teal {
+  color: RGBA(var(--tblr-teal-rgb), var(--tblr-link-opacity, 1)) !important;
+  -webkit-text-decoration-color: RGBA(var(--tblr-teal-rgb), var(--tblr-link-underline-opacity, 1)) !important;
+          text-decoration-color: RGBA(var(--tblr-teal-rgb), var(--tblr-link-underline-opacity, 1)) !important;
+}
+.link-teal:hover, .link-teal:focus {
+  color: RGBA(10, 133, 96, var(--tblr-link-opacity, 1)) !important;
+  -webkit-text-decoration-color: RGBA(10, 133, 96, var(--tblr-link-underline-opacity, 1)) !important;
+          text-decoration-color: RGBA(10, 133, 96, var(--tblr-link-underline-opacity, 1)) !important;
+}
+
+.link-cyan {
+  color: RGBA(var(--tblr-cyan-rgb), var(--tblr-link-opacity, 1)) !important;
+  -webkit-text-decoration-color: RGBA(var(--tblr-cyan-rgb), var(--tblr-link-underline-opacity, 1)) !important;
+          text-decoration-color: RGBA(var(--tblr-cyan-rgb), var(--tblr-link-underline-opacity, 1)) !important;
+}
+.link-cyan:hover, .link-cyan:focus {
+  color: RGBA(18, 130, 147, var(--tblr-link-opacity, 1)) !important;
+  -webkit-text-decoration-color: RGBA(18, 130, 147, var(--tblr-link-underline-opacity, 1)) !important;
+          text-decoration-color: RGBA(18, 130, 147, var(--tblr-link-underline-opacity, 1)) !important;
+}
+
+.link-facebook {
+  color: RGBA(var(--tblr-facebook-rgb), var(--tblr-link-opacity, 1)) !important;
+  -webkit-text-decoration-color: RGBA(var(--tblr-facebook-rgb), var(--tblr-link-underline-opacity, 1)) !important;
+          text-decoration-color: RGBA(var(--tblr-facebook-rgb), var(--tblr-link-underline-opacity, 1)) !important;
+}
+.link-facebook:hover, .link-facebook:focus {
+  color: RGBA(19, 95, 194, var(--tblr-link-opacity, 1)) !important;
+  -webkit-text-decoration-color: RGBA(19, 95, 194, var(--tblr-link-underline-opacity, 1)) !important;
+          text-decoration-color: RGBA(19, 95, 194, var(--tblr-link-underline-opacity, 1)) !important;
+}
+
+.link-twitter {
+  color: RGBA(var(--tblr-twitter-rgb), var(--tblr-link-opacity, 1)) !important;
+  -webkit-text-decoration-color: RGBA(var(--tblr-twitter-rgb), var(--tblr-link-underline-opacity, 1)) !important;
+          text-decoration-color: RGBA(var(--tblr-twitter-rgb), var(--tblr-link-underline-opacity, 1)) !important;
+}
+.link-twitter:hover, .link-twitter:focus {
+  color: RGBA(23, 129, 194, var(--tblr-link-opacity, 1)) !important;
+  -webkit-text-decoration-color: RGBA(23, 129, 194, var(--tblr-link-underline-opacity, 1)) !important;
+          text-decoration-color: RGBA(23, 129, 194, var(--tblr-link-underline-opacity, 1)) !important;
+}
+
+.link-linkedin {
+  color: RGBA(var(--tblr-linkedin-rgb), var(--tblr-link-opacity, 1)) !important;
+  -webkit-text-decoration-color: RGBA(var(--tblr-linkedin-rgb), var(--tblr-link-underline-opacity, 1)) !important;
+          text-decoration-color: RGBA(var(--tblr-linkedin-rgb), var(--tblr-link-underline-opacity, 1)) !important;
+}
+.link-linkedin:hover, .link-linkedin:focus {
+  color: RGBA(8, 82, 155, var(--tblr-link-opacity, 1)) !important;
+  -webkit-text-decoration-color: RGBA(8, 82, 155, var(--tblr-link-underline-opacity, 1)) !important;
+          text-decoration-color: RGBA(8, 82, 155, var(--tblr-link-underline-opacity, 1)) !important;
+}
+
+.link-google {
+  color: RGBA(var(--tblr-google-rgb), var(--tblr-link-opacity, 1)) !important;
+  -webkit-text-decoration-color: RGBA(var(--tblr-google-rgb), var(--tblr-link-underline-opacity, 1)) !important;
+          text-decoration-color: RGBA(var(--tblr-google-rgb), var(--tblr-link-underline-opacity, 1)) !important;
+}
+.link-google:hover, .link-google:focus {
+  color: RGBA(176, 62, 52, var(--tblr-link-opacity, 1)) !important;
+  -webkit-text-decoration-color: RGBA(176, 62, 52, var(--tblr-link-underline-opacity, 1)) !important;
+          text-decoration-color: RGBA(176, 62, 52, var(--tblr-link-underline-opacity, 1)) !important;
+}
+
+.link-youtube {
+  color: RGBA(var(--tblr-youtube-rgb), var(--tblr-link-opacity, 1)) !important;
+  -webkit-text-decoration-color: RGBA(var(--tblr-youtube-rgb), var(--tblr-link-underline-opacity, 1)) !important;
+          text-decoration-color: RGBA(var(--tblr-youtube-rgb), var(--tblr-link-underline-opacity, 1)) !important;
+}
+.link-youtube:hover, .link-youtube:focus {
+  color: RGBA(204, 0, 0, var(--tblr-link-opacity, 1)) !important;
+  -webkit-text-decoration-color: RGBA(204, 0, 0, var(--tblr-link-underline-opacity, 1)) !important;
+          text-decoration-color: RGBA(204, 0, 0, var(--tblr-link-underline-opacity, 1)) !important;
+}
+
+.link-vimeo {
+  color: RGBA(var(--tblr-vimeo-rgb), var(--tblr-link-opacity, 1)) !important;
+  -webkit-text-decoration-color: RGBA(var(--tblr-vimeo-rgb), var(--tblr-link-underline-opacity, 1)) !important;
+          text-decoration-color: RGBA(var(--tblr-vimeo-rgb), var(--tblr-link-underline-opacity, 1)) !important;
+}
+.link-vimeo:hover, .link-vimeo:focus {
+  color: RGBA(21, 146, 187, var(--tblr-link-opacity, 1)) !important;
+  -webkit-text-decoration-color: RGBA(21, 146, 187, var(--tblr-link-underline-opacity, 1)) !important;
+          text-decoration-color: RGBA(21, 146, 187, var(--tblr-link-underline-opacity, 1)) !important;
+}
+
+.link-dribbble {
+  color: RGBA(var(--tblr-dribbble-rgb), var(--tblr-link-opacity, 1)) !important;
+  -webkit-text-decoration-color: RGBA(var(--tblr-dribbble-rgb), var(--tblr-link-underline-opacity, 1)) !important;
+          text-decoration-color: RGBA(var(--tblr-dribbble-rgb), var(--tblr-link-underline-opacity, 1)) !important;
+}
+.link-dribbble:hover, .link-dribbble:focus {
+  color: RGBA(187, 61, 110, var(--tblr-link-opacity, 1)) !important;
+  -webkit-text-decoration-color: RGBA(187, 61, 110, var(--tblr-link-underline-opacity, 1)) !important;
+          text-decoration-color: RGBA(187, 61, 110, var(--tblr-link-underline-opacity, 1)) !important;
+}
+
+.link-github {
+  color: RGBA(var(--tblr-github-rgb), var(--tblr-link-opacity, 1)) !important;
+  -webkit-text-decoration-color: RGBA(var(--tblr-github-rgb), var(--tblr-link-underline-opacity, 1)) !important;
+          text-decoration-color: RGBA(var(--tblr-github-rgb), var(--tblr-link-underline-opacity, 1)) !important;
+}
+.link-github:hover, .link-github:focus {
+  color: RGBA(19, 18, 18, var(--tblr-link-opacity, 1)) !important;
+  -webkit-text-decoration-color: RGBA(19, 18, 18, var(--tblr-link-underline-opacity, 1)) !important;
+          text-decoration-color: RGBA(19, 18, 18, var(--tblr-link-underline-opacity, 1)) !important;
+}
+
+.link-instagram {
+  color: RGBA(var(--tblr-instagram-rgb), var(--tblr-link-opacity, 1)) !important;
+  -webkit-text-decoration-color: RGBA(var(--tblr-instagram-rgb), var(--tblr-link-underline-opacity, 1)) !important;
+          text-decoration-color: RGBA(var(--tblr-instagram-rgb), var(--tblr-link-underline-opacity, 1)) !important;
+}
+.link-instagram:hover, .link-instagram:focus {
+  color: RGBA(182, 51, 76, var(--tblr-link-opacity, 1)) !important;
+  -webkit-text-decoration-color: RGBA(182, 51, 76, var(--tblr-link-underline-opacity, 1)) !important;
+          text-decoration-color: RGBA(182, 51, 76, var(--tblr-link-underline-opacity, 1)) !important;
+}
+
+.link-pinterest {
+  color: RGBA(var(--tblr-pinterest-rgb), var(--tblr-link-opacity, 1)) !important;
+  -webkit-text-decoration-color: RGBA(var(--tblr-pinterest-rgb), var(--tblr-link-underline-opacity, 1)) !important;
+          text-decoration-color: RGBA(var(--tblr-pinterest-rgb), var(--tblr-link-underline-opacity, 1)) !important;
+}
+.link-pinterest:hover, .link-pinterest:focus {
+  color: RGBA(151, 6, 22, var(--tblr-link-opacity, 1)) !important;
+  -webkit-text-decoration-color: RGBA(151, 6, 22, var(--tblr-link-underline-opacity, 1)) !important;
+          text-decoration-color: RGBA(151, 6, 22, var(--tblr-link-underline-opacity, 1)) !important;
+}
+
+.link-vk {
+  color: RGBA(var(--tblr-vk-rgb), var(--tblr-link-opacity, 1)) !important;
+  -webkit-text-decoration-color: RGBA(var(--tblr-vk-rgb), var(--tblr-link-underline-opacity, 1)) !important;
+          text-decoration-color: RGBA(var(--tblr-vk-rgb), var(--tblr-link-underline-opacity, 1)) !important;
+}
+.link-vk:hover, .link-vk:focus {
+  color: RGBA(79, 105, 134, var(--tblr-link-opacity, 1)) !important;
+  -webkit-text-decoration-color: RGBA(79, 105, 134, var(--tblr-link-underline-opacity, 1)) !important;
+          text-decoration-color: RGBA(79, 105, 134, var(--tblr-link-underline-opacity, 1)) !important;
+}
+
+.link-rss {
+  color: RGBA(var(--tblr-rss-rgb), var(--tblr-link-opacity, 1)) !important;
+  -webkit-text-decoration-color: RGBA(var(--tblr-rss-rgb), var(--tblr-link-underline-opacity, 1)) !important;
+          text-decoration-color: RGBA(var(--tblr-rss-rgb), var(--tblr-link-underline-opacity, 1)) !important;
+}
+.link-rss:hover, .link-rss:focus {
+  color: RGBA(204, 132, 0, var(--tblr-link-opacity, 1)) !important;
+  -webkit-text-decoration-color: RGBA(204, 132, 0, var(--tblr-link-underline-opacity, 1)) !important;
+          text-decoration-color: RGBA(204, 132, 0, var(--tblr-link-underline-opacity, 1)) !important;
+}
+
+.link-flickr {
+  color: RGBA(var(--tblr-flickr-rgb), var(--tblr-link-opacity, 1)) !important;
+  -webkit-text-decoration-color: RGBA(var(--tblr-flickr-rgb), var(--tblr-link-underline-opacity, 1)) !important;
+          text-decoration-color: RGBA(var(--tblr-flickr-rgb), var(--tblr-link-underline-opacity, 1)) !important;
+}
+.link-flickr:hover, .link-flickr:focus {
+  color: RGBA(0, 79, 176, var(--tblr-link-opacity, 1)) !important;
+  -webkit-text-decoration-color: RGBA(0, 79, 176, var(--tblr-link-underline-opacity, 1)) !important;
+          text-decoration-color: RGBA(0, 79, 176, var(--tblr-link-underline-opacity, 1)) !important;
+}
+
+.link-bitbucket {
+  color: RGBA(var(--tblr-bitbucket-rgb), var(--tblr-link-opacity, 1)) !important;
+  -webkit-text-decoration-color: RGBA(var(--tblr-bitbucket-rgb), var(--tblr-link-underline-opacity, 1)) !important;
+          text-decoration-color: RGBA(var(--tblr-bitbucket-rgb), var(--tblr-link-underline-opacity, 1)) !important;
+}
+.link-bitbucket:hover, .link-bitbucket:focus {
+  color: RGBA(0, 66, 163, var(--tblr-link-opacity, 1)) !important;
+  -webkit-text-decoration-color: RGBA(0, 66, 163, var(--tblr-link-underline-opacity, 1)) !important;
+          text-decoration-color: RGBA(0, 66, 163, var(--tblr-link-underline-opacity, 1)) !important;
+}
+
+.link-tabler {
+  color: RGBA(var(--tblr-tabler-rgb), var(--tblr-link-opacity, 1)) !important;
+  -webkit-text-decoration-color: RGBA(var(--tblr-tabler-rgb), var(--tblr-link-underline-opacity, 1)) !important;
+          text-decoration-color: RGBA(var(--tblr-tabler-rgb), var(--tblr-link-underline-opacity, 1)) !important;
+}
+.link-tabler:hover, .link-tabler:focus {
+  color: RGBA(0, 67, 133, var(--tblr-link-opacity, 1)) !important;
+  -webkit-text-decoration-color: RGBA(0, 67, 133, var(--tblr-link-underline-opacity, 1)) !important;
+          text-decoration-color: RGBA(0, 67, 133, var(--tblr-link-underline-opacity, 1)) !important;
+}
+
+.link-body-emphasis {
+  color: RGBA(var(--tblr-emphasis-color-rgb), var(--tblr-link-opacity, 1)) !important;
+  -webkit-text-decoration-color: RGBA(var(--tblr-emphasis-color-rgb), var(--tblr-link-underline-opacity, 1)) !important;
+          text-decoration-color: RGBA(var(--tblr-emphasis-color-rgb), var(--tblr-link-underline-opacity, 1)) !important;
+}
+.link-body-emphasis:hover, .link-body-emphasis:focus {
+  color: RGBA(var(--tblr-emphasis-color-rgb), var(--tblr-link-opacity, 0.75)) !important;
+  -webkit-text-decoration-color: RGBA(var(--tblr-emphasis-color-rgb), var(--tblr-link-underline-opacity, 0.75)) !important;
+          text-decoration-color: RGBA(var(--tblr-emphasis-color-rgb), var(--tblr-link-underline-opacity, 0.75)) !important;
+}
+
+.focus-ring:focus {
+  outline: 0;
+  box-shadow: var(--tblr-focus-ring-x, 0) var(--tblr-focus-ring-y, 0) var(--tblr-focus-ring-blur, 0) var(--tblr-focus-ring-width) var(--tblr-focus-ring-color);
+}
+
+.icon-link {
+  display: inline-flex;
+  gap: 0.375rem;
+  align-items: center;
+  -webkit-text-decoration-color: rgba(var(--tblr-link-color-rgb), var(--tblr-link-opacity, 0.5));
+          text-decoration-color: rgba(var(--tblr-link-color-rgb), var(--tblr-link-opacity, 0.5));
+  text-underline-offset: 0.25em;
+  -webkit-backface-visibility: hidden;
+          backface-visibility: hidden;
+}
+.icon-link > .bi {
+  flex-shrink: 0;
+  width: 1em;
+  height: 1em;
+  fill: currentcolor;
+  transition: 0.2s ease-in-out transform;
+}
+@media (prefers-reduced-motion: reduce) {
+  .icon-link > .bi {
+    transition: none;
+  }
+}
+
+.icon-link-hover:hover > .bi, .icon-link-hover:focus-visible > .bi {
+  transform: var(--tblr-icon-link-transform, translate3d(0.25em, 0, 0));
+}
+
+.ratio {
+  position: relative;
+  width: 100%;
+}
+.ratio::before {
+  display: block;
+  padding-top: var(--tblr-aspect-ratio);
+  content: "";
+}
+.ratio > * {
+  position: absolute;
+  top: 0;
+  left: 0;
+  width: 100%;
+  height: 100%;
+}
+
+.ratio-1x1 {
+  --tblr-aspect-ratio: 100%;
+}
+
+.ratio-2x1 {
+  --tblr-aspect-ratio: 50%;
+}
+
+.ratio-1x2 {
+  --tblr-aspect-ratio: 200%;
+}
+
+.ratio-3x1 {
+  --tblr-aspect-ratio: 33.3333333333%;
+}
+
+.ratio-1x3 {
+  --tblr-aspect-ratio: 300%;
+}
+
+.ratio-4x3 {
+  --tblr-aspect-ratio: 75%;
+}
+
+.ratio-3x4 {
+  --tblr-aspect-ratio: 133.3333333333%;
+}
+
+.ratio-16x9 {
+  --tblr-aspect-ratio: 56.25%;
+}
+
+.ratio-9x16 {
+  --tblr-aspect-ratio: 177.7777777778%;
+}
+
+.ratio-21x9 {
+  --tblr-aspect-ratio: 42.8571428571%;
+}
+
+.ratio-9x21 {
+  --tblr-aspect-ratio: 233.3333333333%;
+}
+
+.fixed-top {
+  position: fixed;
+  top: 0;
+  right: 0;
+  left: 0;
+  z-index: 1030;
+}
+
+.fixed-bottom {
+  position: fixed;
+  right: 0;
+  bottom: 0;
+  left: 0;
+  z-index: 1030;
+}
+
+.sticky-top {
+  position: -webkit-sticky;
+  position: sticky;
+  top: 0;
+  z-index: 1020;
+}
+
+.sticky-bottom {
+  position: -webkit-sticky;
+  position: sticky;
+  bottom: 0;
+  z-index: 1020;
+}
+
+@media (min-width: 576px) {
+  .sticky-sm-top {
+    position: -webkit-sticky;
+    position: sticky;
+    top: 0;
+    z-index: 1020;
+  }
+  .sticky-sm-bottom {
+    position: -webkit-sticky;
+    position: sticky;
+    bottom: 0;
+    z-index: 1020;
+  }
+}
+@media (min-width: 768px) {
+  .sticky-md-top {
+    position: -webkit-sticky;
+    position: sticky;
+    top: 0;
+    z-index: 1020;
+  }
+  .sticky-md-bottom {
+    position: -webkit-sticky;
+    position: sticky;
+    bottom: 0;
+    z-index: 1020;
+  }
+}
+@media (min-width: 992px) {
+  .sticky-lg-top {
+    position: -webkit-sticky;
+    position: sticky;
+    top: 0;
+    z-index: 1020;
+  }
+  .sticky-lg-bottom {
+    position: -webkit-sticky;
+    position: sticky;
+    bottom: 0;
+    z-index: 1020;
+  }
+}
+@media (min-width: 1200px) {
+  .sticky-xl-top {
+    position: -webkit-sticky;
+    position: sticky;
+    top: 0;
+    z-index: 1020;
+  }
+  .sticky-xl-bottom {
+    position: -webkit-sticky;
+    position: sticky;
+    bottom: 0;
+    z-index: 1020;
+  }
+}
+@media (min-width: 1400px) {
+  .sticky-xxl-top {
+    position: -webkit-sticky;
+    position: sticky;
+    top: 0;
+    z-index: 1020;
+  }
+  .sticky-xxl-bottom {
+    position: -webkit-sticky;
+    position: sticky;
+    bottom: 0;
+    z-index: 1020;
+  }
+}
+.hstack {
+  display: flex;
+  flex-direction: row;
+  align-items: center;
+  align-self: stretch;
+}
+
+.vstack {
+  display: flex;
+  flex: 1 1 auto;
+  flex-direction: column;
+  align-self: stretch;
+}
+
+.visually-hidden,
+.visually-hidden-focusable:not(:focus):not(:focus-within) {
+  width: 1px !important;
+  height: 1px !important;
+  padding: 0 !important;
+  margin: -1px !important;
+  overflow: hidden !important;
+  clip: rect(0, 0, 0, 0) !important;
+  white-space: nowrap !important;
+  border: 0 !important;
+}
+.visually-hidden:not(caption),
+.visually-hidden-focusable:not(:focus):not(:focus-within):not(caption) {
+  position: absolute !important;
+}
+
+.stretched-link::after {
+  position: absolute;
+  top: 0;
+  right: 0;
+  bottom: 0;
+  left: 0;
+  z-index: 1;
+  content: "";
+}
+
+.text-truncate {
+  overflow: hidden;
+  text-overflow: ellipsis;
+  white-space: nowrap;
+}
+
+.vr {
+  display: inline-block;
+  align-self: stretch;
+  width: var(--tblr-border-width);
+  min-height: 1em;
+  background-color: currentcolor;
+  opacity: 0.16;
+}
+
+.align-baseline {
+  vertical-align: baseline !important;
+}
+
+.align-top {
+  vertical-align: top !important;
+}
+
+.align-middle {
+  vertical-align: middle !important;
+}
+
+.align-bottom {
+  vertical-align: bottom !important;
+}
+
+.align-text-bottom {
+  vertical-align: text-bottom !important;
+}
+
+.align-text-top {
+  vertical-align: text-top !important;
+}
+
+.float-start {
+  float: left !important;
+}
+
+.float-end {
+  float: right !important;
+}
+
+.float-none {
+  float: none !important;
+}
+
+.object-fit-contain {
+  -o-object-fit: contain !important;
+     object-fit: contain !important;
+}
+
+.object-fit-cover {
+  -o-object-fit: cover !important;
+     object-fit: cover !important;
+}
+
+.object-fit-fill {
+  -o-object-fit: fill !important;
+     object-fit: fill !important;
+}
+
+.object-fit-scale {
+  -o-object-fit: scale-down !important;
+     object-fit: scale-down !important;
+}
+
+.object-fit-none {
+  -o-object-fit: none !important;
+     object-fit: none !important;
+}
+
+.opacity-0 {
+  opacity: 0 !important;
+}
+
+.opacity-25 {
+  opacity: 0.25 !important;
+}
+
+.opacity-50 {
+  opacity: 0.5 !important;
+}
+
+.opacity-75 {
+  opacity: 0.75 !important;
+}
+
+.opacity-100 {
+  opacity: 1 !important;
+}
+
+.overflow-auto {
+  overflow: auto !important;
+}
+
+.overflow-hidden {
+  overflow: hidden !important;
+}
+
+.overflow-visible {
+  overflow: visible !important;
+}
+
+.overflow-scroll {
+  overflow: scroll !important;
+}
+
+.overflow-x-auto {
+  overflow-x: auto !important;
+}
+
+.overflow-x-hidden {
+  overflow-x: hidden !important;
+}
+
+.overflow-x-visible {
+  overflow-x: visible !important;
+}
+
+.overflow-x-scroll {
+  overflow-x: scroll !important;
+}
+
+.overflow-y-auto {
+  overflow-y: auto !important;
+}
+
+.overflow-y-hidden {
+  overflow-y: hidden !important;
+}
+
+.overflow-y-visible {
+  overflow-y: visible !important;
+}
+
+.overflow-y-scroll {
+  overflow-y: scroll !important;
+}
+
+.d-inline {
+  display: inline !important;
+}
+
+.d-inline-block {
+  display: inline-block !important;
+}
+
+.d-block {
+  display: block !important;
+}
+
+.d-grid {
+  display: grid !important;
+}
+
+.d-inline-grid {
+  display: inline-grid !important;
+}
+
+.d-table {
+  display: table !important;
+}
+
+.d-table-row {
+  display: table-row !important;
+}
+
+.d-table-cell {
+  display: table-cell !important;
+}
+
+.d-flex {
+  display: flex !important;
+}
+
+.d-inline-flex {
+  display: inline-flex !important;
+}
+
+.d-none {
+  display: none !important;
+}
+
+.shadow {
+  box-shadow: rgba(var(--tblr-body-color-rgb), 0.04) 0 2px 4px 0 !important;
+}
+
+.shadow-sm {
+  box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075) !important;
+}
+
+.shadow-lg {
+  box-shadow: 0 1rem 3rem rgba(0, 0, 0, 0.175) !important;
+}
+
+.shadow-none {
+  box-shadow: none !important;
+}
+
+.focus-ring-primary {
+  --tblr-focus-ring-color: rgba(var(--tblr-primary-rgb), var(--tblr-focus-ring-opacity));
+}
+
+.focus-ring-secondary {
+  --tblr-focus-ring-color: rgba(var(--tblr-secondary-rgb), var(--tblr-focus-ring-opacity));
+}
+
+.focus-ring-success {
+  --tblr-focus-ring-color: rgba(var(--tblr-success-rgb), var(--tblr-focus-ring-opacity));
+}
+
+.focus-ring-info {
+  --tblr-focus-ring-color: rgba(var(--tblr-info-rgb), var(--tblr-focus-ring-opacity));
+}
+
+.focus-ring-warning {
+  --tblr-focus-ring-color: rgba(var(--tblr-warning-rgb), var(--tblr-focus-ring-opacity));
+}
+
+.focus-ring-danger {
+  --tblr-focus-ring-color: rgba(var(--tblr-danger-rgb), var(--tblr-focus-ring-opacity));
+}
+
+.focus-ring-light {
+  --tblr-focus-ring-color: rgba(var(--tblr-light-rgb), var(--tblr-focus-ring-opacity));
+}
+
+.focus-ring-dark {
+  --tblr-focus-ring-color: rgba(var(--tblr-dark-rgb), var(--tblr-focus-ring-opacity));
+}
+
+.focus-ring-muted {
+  --tblr-focus-ring-color: rgba(var(--tblr-muted-rgb), var(--tblr-focus-ring-opacity));
+}
+
+.focus-ring-blue {
+  --tblr-focus-ring-color: rgba(var(--tblr-blue-rgb), var(--tblr-focus-ring-opacity));
+}
+
+.focus-ring-azure {
+  --tblr-focus-ring-color: rgba(var(--tblr-azure-rgb), var(--tblr-focus-ring-opacity));
+}
+
+.focus-ring-indigo {
+  --tblr-focus-ring-color: rgba(var(--tblr-indigo-rgb), var(--tblr-focus-ring-opacity));
+}
+
+.focus-ring-purple {
+  --tblr-focus-ring-color: rgba(var(--tblr-purple-rgb), var(--tblr-focus-ring-opacity));
+}
+
+.focus-ring-pink {
+  --tblr-focus-ring-color: rgba(var(--tblr-pink-rgb), var(--tblr-focus-ring-opacity));
+}
+
+.focus-ring-red {
+  --tblr-focus-ring-color: rgba(var(--tblr-red-rgb), var(--tblr-focus-ring-opacity));
+}
+
+.focus-ring-orange {
+  --tblr-focus-ring-color: rgba(var(--tblr-orange-rgb), var(--tblr-focus-ring-opacity));
+}
+
+.focus-ring-yellow {
+  --tblr-focus-ring-color: rgba(var(--tblr-yellow-rgb), var(--tblr-focus-ring-opacity));
+}
+
+.focus-ring-lime {
+  --tblr-focus-ring-color: rgba(var(--tblr-lime-rgb), var(--tblr-focus-ring-opacity));
+}
+
+.focus-ring-green {
+  --tblr-focus-ring-color: rgba(var(--tblr-green-rgb), var(--tblr-focus-ring-opacity));
+}
+
+.focus-ring-teal {
+  --tblr-focus-ring-color: rgba(var(--tblr-teal-rgb), var(--tblr-focus-ring-opacity));
+}
+
+.focus-ring-cyan {
+  --tblr-focus-ring-color: rgba(var(--tblr-cyan-rgb), var(--tblr-focus-ring-opacity));
+}
+
+.focus-ring-facebook {
+  --tblr-focus-ring-color: rgba(var(--tblr-facebook-rgb), var(--tblr-focus-ring-opacity));
+}
+
+.focus-ring-twitter {
+  --tblr-focus-ring-color: rgba(var(--tblr-twitter-rgb), var(--tblr-focus-ring-opacity));
+}
+
+.focus-ring-linkedin {
+  --tblr-focus-ring-color: rgba(var(--tblr-linkedin-rgb), var(--tblr-focus-ring-opacity));
+}
+
+.focus-ring-google {
+  --tblr-focus-ring-color: rgba(var(--tblr-google-rgb), var(--tblr-focus-ring-opacity));
+}
+
+.focus-ring-youtube {
+  --tblr-focus-ring-color: rgba(var(--tblr-youtube-rgb), var(--tblr-focus-ring-opacity));
+}
+
+.focus-ring-vimeo {
+  --tblr-focus-ring-color: rgba(var(--tblr-vimeo-rgb), var(--tblr-focus-ring-opacity));
+}
+
+.focus-ring-dribbble {
+  --tblr-focus-ring-color: rgba(var(--tblr-dribbble-rgb), var(--tblr-focus-ring-opacity));
+}
+
+.focus-ring-github {
+  --tblr-focus-ring-color: rgba(var(--tblr-github-rgb), var(--tblr-focus-ring-opacity));
+}
+
+.focus-ring-instagram {
+  --tblr-focus-ring-color: rgba(var(--tblr-instagram-rgb), var(--tblr-focus-ring-opacity));
+}
+
+.focus-ring-pinterest {
+  --tblr-focus-ring-color: rgba(var(--tblr-pinterest-rgb), var(--tblr-focus-ring-opacity));
+}
+
+.focus-ring-vk {
+  --tblr-focus-ring-color: rgba(var(--tblr-vk-rgb), var(--tblr-focus-ring-opacity));
+}
+
+.focus-ring-rss {
+  --tblr-focus-ring-color: rgba(var(--tblr-rss-rgb), var(--tblr-focus-ring-opacity));
+}
+
+.focus-ring-flickr {
+  --tblr-focus-ring-color: rgba(var(--tblr-flickr-rgb), var(--tblr-focus-ring-opacity));
+}
+
+.focus-ring-bitbucket {
+  --tblr-focus-ring-color: rgba(var(--tblr-bitbucket-rgb), var(--tblr-focus-ring-opacity));
+}
+
+.focus-ring-tabler {
+  --tblr-focus-ring-color: rgba(var(--tblr-tabler-rgb), var(--tblr-focus-ring-opacity));
+}
+
+.position-static {
+  position: static !important;
+}
+
+.position-relative {
+  position: relative !important;
+}
+
+.position-absolute {
+  position: absolute !important;
+}
+
+.position-fixed {
+  position: fixed !important;
+}
+
+.position-sticky {
+  position: -webkit-sticky !important;
+  position: sticky !important;
+}
+
+.top-0 {
+  top: 0 !important;
+}
+
+.top-50 {
+  top: 50% !important;
+}
+
+.top-100 {
+  top: 100% !important;
+}
+
+.bottom-0 {
+  bottom: 0 !important;
+}
+
+.bottom-50 {
+  bottom: 50% !important;
+}
+
+.bottom-100 {
+  bottom: 100% !important;
+}
+
+.start-0 {
+  left: 0 !important;
+}
+
+.start-50 {
+  left: 50% !important;
+}
+
+.start-100 {
+  left: 100% !important;
+}
+
+.end-0 {
+  right: 0 !important;
+}
+
+.end-50 {
+  right: 50% !important;
+}
+
+.end-100 {
+  right: 100% !important;
+}
+
+.translate-middle {
+  transform: translate(-50%, -50%) !important;
+}
+
+.translate-middle-x {
+  transform: translateX(-50%) !important;
+}
+
+.translate-middle-y {
+  transform: translateY(-50%) !important;
+}
+
+.border {
+  border: var(--tblr-border-width) var(--tblr-border-style) rgba(4, 32, 69, 0.14) !important;
+}
+
+.border-wide {
+  border: 2px var(--tblr-border-style) rgba(4, 32, 69, 0.14) !important;
+}
+
+.border-0 {
+  border: 0 !important;
+}
+
+.border-top {
+  border-top: var(--tblr-border-width) var(--tblr-border-style) rgba(4, 32, 69, 0.14) !important;
+}
+
+.border-top-wide {
+  border-top: 2px var(--tblr-border-style) rgba(4, 32, 69, 0.14) !important;
+}
+
+.border-top-0 {
+  border-top: 0 !important;
+}
+
+.border-end {
+  border-right: var(--tblr-border-width) var(--tblr-border-style) rgba(4, 32, 69, 0.14) !important;
+}
+
+.border-end-wide {
+  border-right: 2px var(--tblr-border-style) rgba(4, 32, 69, 0.14) !important;
+}
+
+.border-end-0 {
+  border-right: 0 !important;
+}
+
+.border-bottom {
+  border-bottom: var(--tblr-border-width) var(--tblr-border-style) rgba(4, 32, 69, 0.14) !important;
+}
+
+.border-bottom-wide {
+  border-bottom: 2px var(--tblr-border-style) rgba(4, 32, 69, 0.14) !important;
+}
+
+.border-bottom-0 {
+  border-bottom: 0 !important;
+}
+
+.border-start {
+  border-left: var(--tblr-border-width) var(--tblr-border-style) rgba(4, 32, 69, 0.14) !important;
+}
+
+.border-start-wide {
+  border-left: 2px var(--tblr-border-style) rgba(4, 32, 69, 0.14) !important;
+}
+
+.border-start-0 {
+  border-left: 0 !important;
+}
+
+.border-primary {
+  --tblr-border-opacity: 1;
+  border-color: rgba(var(--tblr-primary-rgb), var(--tblr-border-opacity)) !important;
+}
+
+.border-secondary {
+  --tblr-border-opacity: 1;
+  border-color: rgba(var(--tblr-secondary-rgb), var(--tblr-border-opacity)) !important;
+}
+
+.border-success {
+  --tblr-border-opacity: 1;
+  border-color: rgba(var(--tblr-success-rgb), var(--tblr-border-opacity)) !important;
+}
+
+.border-info {
+  --tblr-border-opacity: 1;
+  border-color: rgba(var(--tblr-info-rgb), var(--tblr-border-opacity)) !important;
+}
+
+.border-warning {
+  --tblr-border-opacity: 1;
+  border-color: rgba(var(--tblr-warning-rgb), var(--tblr-border-opacity)) !important;
+}
+
+.border-danger {
+  --tblr-border-opacity: 1;
+  border-color: rgba(var(--tblr-danger-rgb), var(--tblr-border-opacity)) !important;
+}
+
+.border-light {
+  --tblr-border-opacity: 1;
+  border-color: rgba(var(--tblr-light-rgb), var(--tblr-border-opacity)) !important;
+}
+
+.border-dark {
+  --tblr-border-opacity: 1;
+  border-color: rgba(var(--tblr-dark-rgb), var(--tblr-border-opacity)) !important;
+}
+
+.border-muted {
+  --tblr-border-opacity: 1;
+  border-color: rgba(var(--tblr-muted-rgb), var(--tblr-border-opacity)) !important;
+}
+
+.border-blue {
+  --tblr-border-opacity: 1;
+  border-color: rgba(var(--tblr-blue-rgb), var(--tblr-border-opacity)) !important;
+}
+
+.border-azure {
+  --tblr-border-opacity: 1;
+  border-color: rgba(var(--tblr-azure-rgb), var(--tblr-border-opacity)) !important;
+}
+
+.border-indigo {
+  --tblr-border-opacity: 1;
+  border-color: rgba(var(--tblr-indigo-rgb), var(--tblr-border-opacity)) !important;
+}
+
+.border-purple {
+  --tblr-border-opacity: 1;
+  border-color: rgba(var(--tblr-purple-rgb), var(--tblr-border-opacity)) !important;
+}
+
+.border-pink {
+  --tblr-border-opacity: 1;
+  border-color: rgba(var(--tblr-pink-rgb), var(--tblr-border-opacity)) !important;
+}
+
+.border-red {
+  --tblr-border-opacity: 1;
+  border-color: rgba(var(--tblr-red-rgb), var(--tblr-border-opacity)) !important;
+}
+
+.border-orange {
+  --tblr-border-opacity: 1;
+  border-color: rgba(var(--tblr-orange-rgb), var(--tblr-border-opacity)) !important;
+}
+
+.border-yellow {
+  --tblr-border-opacity: 1;
+  border-color: rgba(var(--tblr-yellow-rgb), var(--tblr-border-opacity)) !important;
+}
+
+.border-lime {
+  --tblr-border-opacity: 1;
+  border-color: rgba(var(--tblr-lime-rgb), var(--tblr-border-opacity)) !important;
+}
+
+.border-green {
+  --tblr-border-opacity: 1;
+  border-color: rgba(var(--tblr-green-rgb), var(--tblr-border-opacity)) !important;
+}
+
+.border-teal {
+  --tblr-border-opacity: 1;
+  border-color: rgba(var(--tblr-teal-rgb), var(--tblr-border-opacity)) !important;
+}
+
+.border-cyan {
+  --tblr-border-opacity: 1;
+  border-color: rgba(var(--tblr-cyan-rgb), var(--tblr-border-opacity)) !important;
+}
+
+.border-facebook {
+  --tblr-border-opacity: 1;
+  border-color: rgba(var(--tblr-facebook-rgb), var(--tblr-border-opacity)) !important;
+}
+
+.border-twitter {
+  --tblr-border-opacity: 1;
+  border-color: rgba(var(--tblr-twitter-rgb), var(--tblr-border-opacity)) !important;
+}
+
+.border-linkedin {
+  --tblr-border-opacity: 1;
+  border-color: rgba(var(--tblr-linkedin-rgb), var(--tblr-border-opacity)) !important;
+}
+
+.border-google {
+  --tblr-border-opacity: 1;
+  border-color: rgba(var(--tblr-google-rgb), var(--tblr-border-opacity)) !important;
+}
+
+.border-youtube {
+  --tblr-border-opacity: 1;
+  border-color: rgba(var(--tblr-youtube-rgb), var(--tblr-border-opacity)) !important;
+}
+
+.border-vimeo {
+  --tblr-border-opacity: 1;
+  border-color: rgba(var(--tblr-vimeo-rgb), var(--tblr-border-opacity)) !important;
+}
+
+.border-dribbble {
+  --tblr-border-opacity: 1;
+  border-color: rgba(var(--tblr-dribbble-rgb), var(--tblr-border-opacity)) !important;
+}
+
+.border-github {
+  --tblr-border-opacity: 1;
+  border-color: rgba(var(--tblr-github-rgb), var(--tblr-border-opacity)) !important;
+}
+
+.border-instagram {
+  --tblr-border-opacity: 1;
+  border-color: rgba(var(--tblr-instagram-rgb), var(--tblr-border-opacity)) !important;
+}
+
+.border-pinterest {
+  --tblr-border-opacity: 1;
+  border-color: rgba(var(--tblr-pinterest-rgb), var(--tblr-border-opacity)) !important;
+}
+
+.border-vk {
+  --tblr-border-opacity: 1;
+  border-color: rgba(var(--tblr-vk-rgb), var(--tblr-border-opacity)) !important;
+}
+
+.border-rss {
+  --tblr-border-opacity: 1;
+  border-color: rgba(var(--tblr-rss-rgb), var(--tblr-border-opacity)) !important;
+}
+
+.border-flickr {
+  --tblr-border-opacity: 1;
+  border-color: rgba(var(--tblr-flickr-rgb), var(--tblr-border-opacity)) !important;
+}
+
+.border-bitbucket {
+  --tblr-border-opacity: 1;
+  border-color: rgba(var(--tblr-bitbucket-rgb), var(--tblr-border-opacity)) !important;
+}
+
+.border-tabler {
+  --tblr-border-opacity: 1;
+  border-color: rgba(var(--tblr-tabler-rgb), var(--tblr-border-opacity)) !important;
+}
+
+.border-black {
+  --tblr-border-opacity: 1;
+  border-color: rgba(var(--tblr-black-rgb), var(--tblr-border-opacity)) !important;
+}
+
+.border-white {
+  --tblr-border-opacity: 1;
+  border-color: rgba(var(--tblr-white-rgb), var(--tblr-border-opacity)) !important;
+}
+
+.border-primary-subtle {
+  border-color: var(--tblr-primary-border-subtle) !important;
+}
+
+.border-secondary-subtle {
+  border-color: var(--tblr-secondary-border-subtle) !important;
+}
+
+.border-success-subtle {
+  border-color: var(--tblr-success-border-subtle) !important;
+}
+
+.border-info-subtle {
+  border-color: var(--tblr-info-border-subtle) !important;
+}
+
+.border-warning-subtle {
+  border-color: var(--tblr-warning-border-subtle) !important;
+}
+
+.border-danger-subtle {
+  border-color: var(--tblr-danger-border-subtle) !important;
+}
+
+.border-light-subtle {
+  border-color: var(--tblr-light-border-subtle) !important;
+}
+
+.border-dark-subtle {
+  border-color: var(--tblr-dark-border-subtle) !important;
+}
+
+.border-1 {
+  border-width: 1px !important;
+}
+
+.border-2 {
+  border-width: 2px !important;
+}
+
+.border-3 {
+  border-width: 3px !important;
+}
+
+.border-4 {
+  border-width: 4px !important;
+}
+
+.border-5 {
+  border-width: 5px !important;
+}
+
+.border-opacity-10 {
+  --tblr-border-opacity: 0.1;
+}
+
+.border-opacity-25 {
+  --tblr-border-opacity: 0.25;
+}
+
+.border-opacity-50 {
+  --tblr-border-opacity: 0.5;
+}
+
+.border-opacity-75 {
+  --tblr-border-opacity: 0.75;
+}
+
+.border-opacity-100 {
+  --tblr-border-opacity: 1;
+}
+
+.w-0 {
+  width: 0 !important;
+}
+
+.w-1 {
+  width: 0.25rem !important;
+}
+
+.w-2 {
+  width: 0.5rem !important;
+}
+
+.w-3 {
+  width: 1rem !important;
+}
+
+.w-4 {
+  width: 1.5rem !important;
+}
+
+.w-5 {
+  width: 2rem !important;
+}
+
+.w-6 {
+  width: 3rem !important;
+}
+
+.w-7 {
+  width: 5rem !important;
+}
+
+.w-8 {
+  width: 8rem !important;
+}
+
+.w-25 {
+  width: 25% !important;
+}
+
+.w-33 {
+  width: 33.33333% !important;
+}
+
+.w-50 {
+  width: 50% !important;
+}
+
+.w-66 {
+  width: 66.66666% !important;
+}
+
+.w-75 {
+  width: 75% !important;
+}
+
+.w-100 {
+  width: 100% !important;
+}
+
+.w-auto {
+  width: auto !important;
+}
+
+.mw-100 {
+  max-width: 100% !important;
+}
+
+.vw-100 {
+  width: 100vw !important;
+}
+
+.min-vw-100 {
+  min-width: 100vw !important;
+}
+
+.h-0 {
+  height: 0 !important;
+}
+
+.h-1 {
+  height: 0.25rem !important;
+}
+
+.h-2 {
+  height: 0.5rem !important;
+}
+
+.h-3 {
+  height: 1rem !important;
+}
+
+.h-4 {
+  height: 1.5rem !important;
+}
+
+.h-5 {
+  height: 2rem !important;
+}
+
+.h-6 {
+  height: 3rem !important;
+}
+
+.h-7 {
+  height: 5rem !important;
+}
+
+.h-8 {
+  height: 8rem !important;
+}
+
+.h-25 {
+  height: 25% !important;
+}
+
+.h-33 {
+  height: 33.33333% !important;
+}
+
+.h-50 {
+  height: 50% !important;
+}
+
+.h-66 {
+  height: 66.66666% !important;
+}
+
+.h-75 {
+  height: 75% !important;
+}
+
+.h-100 {
+  height: 100% !important;
+}
+
+.h-auto {
+  height: auto !important;
+}
+
+.mh-100 {
+  max-height: 100% !important;
+}
+
+.vh-100 {
+  height: 100vh !important;
+}
+
+.min-vh-100 {
+  min-height: 100vh !important;
+}
+
+.flex-fill {
+  flex: 1 1 auto !important;
+}
+
+.flex-row {
+  flex-direction: row !important;
+}
+
+.flex-column {
+  flex-direction: column !important;
+}
+
+.flex-row-reverse {
+  flex-direction: row-reverse !important;
+}
+
+.flex-column-reverse {
+  flex-direction: column-reverse !important;
+}
+
+.flex-grow-0 {
+  flex-grow: 0 !important;
+}
+
+.flex-grow-1 {
+  flex-grow: 1 !important;
+}
+
+.flex-shrink-0 {
+  flex-shrink: 0 !important;
+}
+
+.flex-shrink-1 {
+  flex-shrink: 1 !important;
+}
+
+.flex-wrap {
+  flex-wrap: wrap !important;
+}
+
+.flex-nowrap {
+  flex-wrap: nowrap !important;
+}
+
+.flex-wrap-reverse {
+  flex-wrap: wrap-reverse !important;
+}
+
+.justify-content-start {
+  justify-content: flex-start !important;
+}
+
+.justify-content-end {
+  justify-content: flex-end !important;
+}
+
+.justify-content-center {
+  justify-content: center !important;
+}
+
+.justify-content-between {
+  justify-content: space-between !important;
+}
+
+.justify-content-around {
+  justify-content: space-around !important;
+}
+
+.justify-content-evenly {
+  justify-content: space-evenly !important;
+}
+
+.align-items-start {
+  align-items: flex-start !important;
+}
+
+.align-items-end {
+  align-items: flex-end !important;
+}
+
+.align-items-center {
+  align-items: center !important;
+}
+
+.align-items-baseline {
+  align-items: baseline !important;
+}
+
+.align-items-stretch {
+  align-items: stretch !important;
+}
+
+.align-content-start {
+  align-content: flex-start !important;
+}
+
+.align-content-end {
+  align-content: flex-end !important;
+}
+
+.align-content-center {
+  align-content: center !important;
+}
+
+.align-content-between {
+  align-content: space-between !important;
+}
+
+.align-content-around {
+  align-content: space-around !important;
+}
+
+.align-content-stretch {
+  align-content: stretch !important;
+}
+
+.align-self-auto {
+  align-self: auto !important;
+}
+
+.align-self-start {
+  align-self: flex-start !important;
+}
+
+.align-self-end {
+  align-self: flex-end !important;
+}
+
+.align-self-center {
+  align-self: center !important;
+}
+
+.align-self-baseline {
+  align-self: baseline !important;
+}
+
+.align-self-stretch {
+  align-self: stretch !important;
+}
+
+.order-first {
+  order: -1 !important;
+}
+
+.order-0 {
+  order: 0 !important;
+}
+
+.order-1 {
+  order: 1 !important;
+}
+
+.order-2 {
+  order: 2 !important;
+}
+
+.order-3 {
+  order: 3 !important;
+}
+
+.order-4 {
+  order: 4 !important;
+}
+
+.order-5 {
+  order: 5 !important;
+}
+
+.order-last {
+  order: 6 !important;
+}
+
+.m-0 {
+  margin: 0 !important;
+}
+
+.m-1 {
+  margin: 0.25rem !important;
+}
+
+.m-2 {
+  margin: 0.5rem !important;
+}
+
+.m-3 {
+  margin: 1rem !important;
+}
+
+.m-4 {
+  margin: 1.5rem !important;
+}
+
+.m-5 {
+  margin: 2rem !important;
+}
+
+.m-6 {
+  margin: 3rem !important;
+}
+
+.m-7 {
+  margin: 5rem !important;
+}
+
+.m-8 {
+  margin: 8rem !important;
+}
+
+.m-auto {
+  margin: auto !important;
+}
+
+.mx-0 {
+  margin-right: 0 !important;
+  margin-left: 0 !important;
+}
+
+.mx-1 {
+  margin-right: 0.25rem !important;
+  margin-left: 0.25rem !important;
+}
+
+.mx-2 {
+  margin-right: 0.5rem !important;
+  margin-left: 0.5rem !important;
+}
+
+.mx-3 {
+  margin-right: 1rem !important;
+  margin-left: 1rem !important;
+}
+
+.mx-4 {
+  margin-right: 1.5rem !important;
+  margin-left: 1.5rem !important;
+}
+
+.mx-5 {
+  margin-right: 2rem !important;
+  margin-left: 2rem !important;
+}
+
+.mx-6 {
+  margin-right: 3rem !important;
+  margin-left: 3rem !important;
+}
+
+.mx-7 {
+  margin-right: 5rem !important;
+  margin-left: 5rem !important;
+}
+
+.mx-8 {
+  margin-right: 8rem !important;
+  margin-left: 8rem !important;
+}
+
+.mx-auto {
+  margin-right: auto !important;
+  margin-left: auto !important;
+}
+
+.my-0 {
+  margin-top: 0 !important;
+  margin-bottom: 0 !important;
+}
+
+.my-1 {
+  margin-top: 0.25rem !important;
+  margin-bottom: 0.25rem !important;
+}
+
+.my-2 {
+  margin-top: 0.5rem !important;
+  margin-bottom: 0.5rem !important;
+}
+
+.my-3 {
+  margin-top: 1rem !important;
+  margin-bottom: 1rem !important;
+}
+
+.my-4 {
+  margin-top: 1.5rem !important;
+  margin-bottom: 1.5rem !important;
+}
+
+.my-5 {
+  margin-top: 2rem !important;
+  margin-bottom: 2rem !important;
+}
+
+.my-6 {
+  margin-top: 3rem !important;
+  margin-bottom: 3rem !important;
+}
+
+.my-7 {
+  margin-top: 5rem !important;
+  margin-bottom: 5rem !important;
+}
+
+.my-8 {
+  margin-top: 8rem !important;
+  margin-bottom: 8rem !important;
+}
+
+.my-auto {
+  margin-top: auto !important;
+  margin-bottom: auto !important;
+}
+
+.mt-0 {
+  margin-top: 0 !important;
+}
+
+.mt-1 {
+  margin-top: 0.25rem !important;
+}
+
+.mt-2 {
+  margin-top: 0.5rem !important;
+}
+
+.mt-3 {
+  margin-top: 1rem !important;
+}
+
+.mt-4 {
+  margin-top: 1.5rem !important;
+}
+
+.mt-5 {
+  margin-top: 2rem !important;
+}
+
+.mt-6 {
+  margin-top: 3rem !important;
+}
+
+.mt-7 {
+  margin-top: 5rem !important;
+}
+
+.mt-8 {
+  margin-top: 8rem !important;
+}
+
+.mt-auto {
+  margin-top: auto !important;
+}
+
+.me-0 {
+  margin-right: 0 !important;
+}
+
+.me-1 {
+  margin-right: 0.25rem !important;
+}
+
+.me-2 {
+  margin-right: 0.5rem !important;
+}
+
+.me-3 {
+  margin-right: 1rem !important;
+}
+
+.me-4 {
+  margin-right: 1.5rem !important;
+}
+
+.me-5 {
+  margin-right: 2rem !important;
+}
+
+.me-6 {
+  margin-right: 3rem !important;
+}
+
+.me-7 {
+  margin-right: 5rem !important;
+}
+
+.me-8 {
+  margin-right: 8rem !important;
+}
+
+.me-auto {
+  margin-right: auto !important;
+}
+
+.mb-0 {
+  margin-bottom: 0 !important;
+}
+
+.mb-1 {
+  margin-bottom: 0.25rem !important;
+}
+
+.mb-2 {
+  margin-bottom: 0.5rem !important;
+}
+
+.mb-3 {
+  margin-bottom: 1rem !important;
+}
+
+.mb-4 {
+  margin-bottom: 1.5rem !important;
+}
+
+.mb-5 {
+  margin-bottom: 2rem !important;
+}
+
+.mb-6 {
+  margin-bottom: 3rem !important;
+}
+
+.mb-7 {
+  margin-bottom: 5rem !important;
+}
+
+.mb-8 {
+  margin-bottom: 8rem !important;
+}
+
+.mb-auto {
+  margin-bottom: auto !important;
+}
+
+.ms-0 {
+  margin-left: 0 !important;
+}
+
+.ms-1 {
+  margin-left: 0.25rem !important;
+}
+
+.ms-2 {
+  margin-left: 0.5rem !important;
+}
+
+.ms-3 {
+  margin-left: 1rem !important;
+}
+
+.ms-4 {
+  margin-left: 1.5rem !important;
+}
+
+.ms-5 {
+  margin-left: 2rem !important;
+}
+
+.ms-6 {
+  margin-left: 3rem !important;
+}
+
+.ms-7 {
+  margin-left: 5rem !important;
+}
+
+.ms-8 {
+  margin-left: 8rem !important;
+}
+
+.ms-auto {
+  margin-left: auto !important;
+}
+
+.p-0 {
+  padding: 0 !important;
+}
+
+.p-1 {
+  padding: 0.25rem !important;
+}
+
+.p-2 {
+  padding: 0.5rem !important;
+}
+
+.p-3 {
+  padding: 1rem !important;
+}
+
+.p-4 {
+  padding: 1.5rem !important;
+}
+
+.p-5 {
+  padding: 2rem !important;
+}
+
+.p-6 {
+  padding: 3rem !important;
+}
+
+.p-7 {
+  padding: 5rem !important;
+}
+
+.p-8 {
+  padding: 8rem !important;
+}
+
+.px-0 {
+  padding-right: 0 !important;
+  padding-left: 0 !important;
+}
+
+.px-1 {
+  padding-right: 0.25rem !important;
+  padding-left: 0.25rem !important;
+}
+
+.px-2 {
+  padding-right: 0.5rem !important;
+  padding-left: 0.5rem !important;
+}
+
+.px-3 {
+  padding-right: 1rem !important;
+  padding-left: 1rem !important;
+}
+
+.px-4 {
+  padding-right: 1.5rem !important;
+  padding-left: 1.5rem !important;
+}
+
+.px-5 {
+  padding-right: 2rem !important;
+  padding-left: 2rem !important;
+}
+
+.px-6 {
+  padding-right: 3rem !important;
+  padding-left: 3rem !important;
+}
+
+.px-7 {
+  padding-right: 5rem !important;
+  padding-left: 5rem !important;
+}
+
+.px-8 {
+  padding-right: 8rem !important;
+  padding-left: 8rem !important;
+}
+
+.py-0 {
+  padding-top: 0 !important;
+  padding-bottom: 0 !important;
+}
+
+.py-1 {
+  padding-top: 0.25rem !important;
+  padding-bottom: 0.25rem !important;
+}
+
+.py-2 {
+  padding-top: 0.5rem !important;
+  padding-bottom: 0.5rem !important;
+}
+
+.py-3 {
+  padding-top: 1rem !important;
+  padding-bottom: 1rem !important;
+}
+
+.py-4 {
+  padding-top: 1.5rem !important;
+  padding-bottom: 1.5rem !important;
+}
+
+.py-5 {
+  padding-top: 2rem !important;
+  padding-bottom: 2rem !important;
+}
+
+.py-6 {
+  padding-top: 3rem !important;
+  padding-bottom: 3rem !important;
+}
+
+.py-7 {
+  padding-top: 5rem !important;
+  padding-bottom: 5rem !important;
+}
+
+.py-8 {
+  padding-top: 8rem !important;
+  padding-bottom: 8rem !important;
+}
+
+.pt-0 {
+  padding-top: 0 !important;
+}
+
+.pt-1 {
+  padding-top: 0.25rem !important;
+}
+
+.pt-2 {
+  padding-top: 0.5rem !important;
+}
+
+.pt-3 {
+  padding-top: 1rem !important;
+}
+
+.pt-4 {
+  padding-top: 1.5rem !important;
+}
+
+.pt-5 {
+  padding-top: 2rem !important;
+}
+
+.pt-6 {
+  padding-top: 3rem !important;
+}
+
+.pt-7 {
+  padding-top: 5rem !important;
+}
+
+.pt-8 {
+  padding-top: 8rem !important;
+}
+
+.pe-0 {
+  padding-right: 0 !important;
+}
+
+.pe-1 {
+  padding-right: 0.25rem !important;
+}
+
+.pe-2 {
+  padding-right: 0.5rem !important;
+}
+
+.pe-3 {
+  padding-right: 1rem !important;
+}
+
+.pe-4 {
+  padding-right: 1.5rem !important;
+}
+
+.pe-5 {
+  padding-right: 2rem !important;
+}
+
+.pe-6 {
+  padding-right: 3rem !important;
+}
+
+.pe-7 {
+  padding-right: 5rem !important;
+}
+
+.pe-8 {
+  padding-right: 8rem !important;
+}
+
+.pb-0 {
+  padding-bottom: 0 !important;
+}
+
+.pb-1 {
+  padding-bottom: 0.25rem !important;
+}
+
+.pb-2 {
+  padding-bottom: 0.5rem !important;
+}
+
+.pb-3 {
+  padding-bottom: 1rem !important;
+}
+
+.pb-4 {
+  padding-bottom: 1.5rem !important;
+}
+
+.pb-5 {
+  padding-bottom: 2rem !important;
+}
+
+.pb-6 {
+  padding-bottom: 3rem !important;
+}
+
+.pb-7 {
+  padding-bottom: 5rem !important;
+}
+
+.pb-8 {
+  padding-bottom: 8rem !important;
+}
+
+.ps-0 {
+  padding-left: 0 !important;
+}
+
+.ps-1 {
+  padding-left: 0.25rem !important;
+}
+
+.ps-2 {
+  padding-left: 0.5rem !important;
+}
+
+.ps-3 {
+  padding-left: 1rem !important;
+}
+
+.ps-4 {
+  padding-left: 1.5rem !important;
+}
+
+.ps-5 {
+  padding-left: 2rem !important;
+}
+
+.ps-6 {
+  padding-left: 3rem !important;
+}
+
+.ps-7 {
+  padding-left: 5rem !important;
+}
+
+.ps-8 {
+  padding-left: 8rem !important;
+}
+
+.gap-0 {
+  gap: 0 !important;
+}
+
+.gap-1 {
+  gap: 0.25rem !important;
+}
+
+.gap-2 {
+  gap: 0.5rem !important;
+}
+
+.gap-3 {
+  gap: 1rem !important;
+}
+
+.gap-4 {
+  gap: 1.5rem !important;
+}
+
+.gap-5 {
+  gap: 2rem !important;
+}
+
+.gap-6 {
+  gap: 3rem !important;
+}
+
+.gap-7 {
+  gap: 5rem !important;
+}
+
+.gap-8 {
+  gap: 8rem !important;
+}
+
+.row-gap-0 {
+  row-gap: 0 !important;
+}
+
+.row-gap-1 {
+  row-gap: 0.25rem !important;
+}
+
+.row-gap-2 {
+  row-gap: 0.5rem !important;
+}
+
+.row-gap-3 {
+  row-gap: 1rem !important;
+}
+
+.row-gap-4 {
+  row-gap: 1.5rem !important;
+}
+
+.row-gap-5 {
+  row-gap: 2rem !important;
+}
+
+.row-gap-6 {
+  row-gap: 3rem !important;
+}
+
+.row-gap-7 {
+  row-gap: 5rem !important;
+}
+
+.row-gap-8 {
+  row-gap: 8rem !important;
+}
+
+.column-gap-0 {
+  -moz-column-gap: 0 !important;
+       column-gap: 0 !important;
+}
+
+.column-gap-1 {
+  -moz-column-gap: 0.25rem !important;
+       column-gap: 0.25rem !important;
+}
+
+.column-gap-2 {
+  -moz-column-gap: 0.5rem !important;
+       column-gap: 0.5rem !important;
+}
+
+.column-gap-3 {
+  -moz-column-gap: 1rem !important;
+       column-gap: 1rem !important;
+}
+
+.column-gap-4 {
+  -moz-column-gap: 1.5rem !important;
+       column-gap: 1.5rem !important;
+}
+
+.column-gap-5 {
+  -moz-column-gap: 2rem !important;
+       column-gap: 2rem !important;
+}
+
+.column-gap-6 {
+  -moz-column-gap: 3rem !important;
+       column-gap: 3rem !important;
+}
+
+.column-gap-7 {
+  -moz-column-gap: 5rem !important;
+       column-gap: 5rem !important;
+}
+
+.column-gap-8 {
+  -moz-column-gap: 8rem !important;
+       column-gap: 8rem !important;
+}
+
+.font-monospace {
+  font-family: var(--tblr-font-monospace) !important;
+}
+
+.fs-1 {
+  font-size: 1.5rem !important;
+}
+
+.fs-2 {
+  font-size: 1.25rem !important;
+}
+
+.fs-3 {
+  font-size: 1rem !important;
+}
+
+.fs-4 {
+  font-size: 0.875rem !important;
+}
+
+.fs-5 {
+  font-size: 0.75rem !important;
+}
+
+.fs-6 {
+  font-size: 0.625rem !important;
+}
+
+.fst-italic {
+  font-style: italic !important;
+}
+
+.fst-normal {
+  font-style: normal !important;
+}
+
+.fw-lighter {
+  font-weight: lighter !important;
+}
+
+.fw-light {
+  font-weight: 300 !important;
+}
+
+.fw-normal {
+  font-weight: 400 !important;
+}
+
+.fw-medium {
+  font-weight: 500 !important;
+}
+
+.fw-semibold {
+  font-weight: 600 !important;
+}
+
+.fw-bold {
+  font-weight: 600 !important;
+}
+
+.fw-bolder {
+  font-weight: bolder !important;
+}
+
+.lh-1 {
+  line-height: 1 !important;
+}
+
+.lh-sm {
+  line-height: 1.1428571429 !important;
+}
+
+.lh-base {
+  line-height: 1.4285714286 !important;
+}
+
+.lh-lg {
+  line-height: 1.7142857143 !important;
+}
+
+.text-start {
+  text-align: left !important;
+}
+
+.text-end {
+  text-align: right !important;
+}
+
+.text-center {
+  text-align: center !important;
+}
+
+.text-decoration-none {
+  text-decoration: none !important;
+}
+
+.text-decoration-underline {
+  text-decoration: underline !important;
+}
+
+.text-decoration-line-through {
+  text-decoration: line-through !important;
+}
+
+.text-lowercase {
+  text-transform: lowercase !important;
+}
+
+.text-uppercase {
+  text-transform: uppercase !important;
+}
+
+.text-capitalize {
+  text-transform: capitalize !important;
+}
+
+.text-wrap {
+  white-space: normal !important;
+}
+
+.text-nowrap {
+  white-space: nowrap !important;
+}
+
+/* rtl:begin:remove */
+.text-break {
+  word-wrap: break-word !important;
+  word-break: break-word !important;
+}
+
+/* rtl:end:remove */
+.text-primary {
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-primary-rgb), var(--tblr-text-opacity)) !important;
+}
+
+.text-secondary {
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-secondary-rgb), var(--tblr-text-opacity)) !important;
+}
+
+.text-success {
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-success-rgb), var(--tblr-text-opacity)) !important;
+}
+
+.text-info {
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-info-rgb), var(--tblr-text-opacity)) !important;
+}
+
+.text-warning {
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-warning-rgb), var(--tblr-text-opacity)) !important;
+}
+
+.text-danger {
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-danger-rgb), var(--tblr-text-opacity)) !important;
+}
+
+.text-light {
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-light-rgb), var(--tblr-text-opacity)) !important;
+}
+
+.text-dark {
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-dark-rgb), var(--tblr-text-opacity)) !important;
+}
+
+.text-muted {
+  --tblr-text-opacity: 1;
+  color: var(--tblr-secondary-color) !important;
+}
+
+.text-blue {
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-blue-rgb), var(--tblr-text-opacity)) !important;
+}
+
+.text-azure {
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-azure-rgb), var(--tblr-text-opacity)) !important;
+}
+
+.text-indigo {
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-indigo-rgb), var(--tblr-text-opacity)) !important;
+}
+
+.text-purple {
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-purple-rgb), var(--tblr-text-opacity)) !important;
+}
+
+.text-pink {
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-pink-rgb), var(--tblr-text-opacity)) !important;
+}
+
+.text-red {
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-red-rgb), var(--tblr-text-opacity)) !important;
+}
+
+.text-orange {
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-orange-rgb), var(--tblr-text-opacity)) !important;
+}
+
+.text-yellow {
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-yellow-rgb), var(--tblr-text-opacity)) !important;
+}
+
+.text-lime {
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-lime-rgb), var(--tblr-text-opacity)) !important;
+}
+
+.text-green {
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-green-rgb), var(--tblr-text-opacity)) !important;
+}
+
+.text-teal {
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-teal-rgb), var(--tblr-text-opacity)) !important;
+}
+
+.text-cyan {
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-cyan-rgb), var(--tblr-text-opacity)) !important;
+}
+
+.text-facebook {
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-facebook-rgb), var(--tblr-text-opacity)) !important;
+}
+
+.text-twitter {
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-twitter-rgb), var(--tblr-text-opacity)) !important;
+}
+
+.text-linkedin {
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-linkedin-rgb), var(--tblr-text-opacity)) !important;
+}
+
+.text-google {
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-google-rgb), var(--tblr-text-opacity)) !important;
+}
+
+.text-youtube {
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-youtube-rgb), var(--tblr-text-opacity)) !important;
+}
+
+.text-vimeo {
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-vimeo-rgb), var(--tblr-text-opacity)) !important;
+}
+
+.text-dribbble {
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-dribbble-rgb), var(--tblr-text-opacity)) !important;
+}
+
+.text-github {
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-github-rgb), var(--tblr-text-opacity)) !important;
+}
+
+.text-instagram {
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-instagram-rgb), var(--tblr-text-opacity)) !important;
+}
+
+.text-pinterest {
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-pinterest-rgb), var(--tblr-text-opacity)) !important;
+}
+
+.text-vk {
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-vk-rgb), var(--tblr-text-opacity)) !important;
+}
+
+.text-rss {
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-rss-rgb), var(--tblr-text-opacity)) !important;
+}
+
+.text-flickr {
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-flickr-rgb), var(--tblr-text-opacity)) !important;
+}
+
+.text-bitbucket {
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-bitbucket-rgb), var(--tblr-text-opacity)) !important;
+}
+
+.text-tabler {
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-tabler-rgb), var(--tblr-text-opacity)) !important;
+}
+
+.text-black {
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-black-rgb), var(--tblr-text-opacity)) !important;
+}
+
+.text-white {
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-white-rgb), var(--tblr-text-opacity)) !important;
+}
+
+.text-body {
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-body-color-rgb), var(--tblr-text-opacity)) !important;
+}
+
+.text-black-50 {
+  --tblr-text-opacity: 1;
+  color: rgba(0, 0, 0, 0.5) !important;
+}
+
+.text-white-50 {
+  --tblr-text-opacity: 1;
+  color: rgba(255, 255, 255, 0.5) !important;
+}
+
+.text-body-secondary {
+  --tblr-text-opacity: 1;
+  color: var(--tblr-secondary-color) !important;
+}
+
+.text-body-tertiary {
+  --tblr-text-opacity: 1;
+  color: var(--tblr-tertiary-color) !important;
+}
+
+.text-body-emphasis {
+  --tblr-text-opacity: 1;
+  color: var(--tblr-emphasis-color) !important;
+}
+
+.text-reset {
+  --tblr-text-opacity: 1;
+  color: inherit !important;
+}
+
+.text-opacity-25 {
+  --tblr-text-opacity: 0.25;
+}
+
+.text-opacity-50 {
+  --tblr-text-opacity: 0.5;
+}
+
+.text-opacity-75 {
+  --tblr-text-opacity: 0.75;
+}
+
+.text-opacity-100 {
+  --tblr-text-opacity: 1;
+}
+
+.text-primary-emphasis {
+  color: var(--tblr-primary-text-emphasis) !important;
+}
+
+.text-secondary-emphasis {
+  color: var(--tblr-secondary-text-emphasis) !important;
+}
+
+.text-success-emphasis {
+  color: var(--tblr-success-text-emphasis) !important;
+}
+
+.text-info-emphasis {
+  color: var(--tblr-info-text-emphasis) !important;
+}
+
+.text-warning-emphasis {
+  color: var(--tblr-warning-text-emphasis) !important;
+}
+
+.text-danger-emphasis {
+  color: var(--tblr-danger-text-emphasis) !important;
+}
+
+.text-light-emphasis {
+  color: var(--tblr-light-text-emphasis) !important;
+}
+
+.text-dark-emphasis {
+  color: var(--tblr-dark-text-emphasis) !important;
+}
+
+.link-opacity-10 {
+  --tblr-link-opacity: 0.1;
+}
+
+.link-opacity-10-hover:hover {
+  --tblr-link-opacity: 0.1;
+}
+
+.link-opacity-25 {
+  --tblr-link-opacity: 0.25;
+}
+
+.link-opacity-25-hover:hover {
+  --tblr-link-opacity: 0.25;
+}
+
+.link-opacity-50 {
+  --tblr-link-opacity: 0.5;
+}
+
+.link-opacity-50-hover:hover {
+  --tblr-link-opacity: 0.5;
+}
+
+.link-opacity-75 {
+  --tblr-link-opacity: 0.75;
+}
+
+.link-opacity-75-hover:hover {
+  --tblr-link-opacity: 0.75;
+}
+
+.link-opacity-100 {
+  --tblr-link-opacity: 1;
+}
+
+.link-opacity-100-hover:hover {
+  --tblr-link-opacity: 1;
+}
+
+.link-offset-1 {
+  text-underline-offset: 0.125em !important;
+}
+
+.link-offset-1-hover:hover {
+  text-underline-offset: 0.125em !important;
+}
+
+.link-offset-2 {
+  text-underline-offset: 0.25em !important;
+}
+
+.link-offset-2-hover:hover {
+  text-underline-offset: 0.25em !important;
+}
+
+.link-offset-3 {
+  text-underline-offset: 0.375em !important;
+}
+
+.link-offset-3-hover:hover {
+  text-underline-offset: 0.375em !important;
+}
+
+.link-underline-primary {
+  --tblr-link-underline-opacity: 1;
+  -webkit-text-decoration-color: rgba(var(--tblr-primary-rgb), var(--tblr-link-underline-opacity)) !important;
+          text-decoration-color: rgba(var(--tblr-primary-rgb), var(--tblr-link-underline-opacity)) !important;
+}
+
+.link-underline-secondary {
+  --tblr-link-underline-opacity: 1;
+  -webkit-text-decoration-color: rgba(var(--tblr-secondary-rgb), var(--tblr-link-underline-opacity)) !important;
+          text-decoration-color: rgba(var(--tblr-secondary-rgb), var(--tblr-link-underline-opacity)) !important;
+}
+
+.link-underline-success {
+  --tblr-link-underline-opacity: 1;
+  -webkit-text-decoration-color: rgba(var(--tblr-success-rgb), var(--tblr-link-underline-opacity)) !important;
+          text-decoration-color: rgba(var(--tblr-success-rgb), var(--tblr-link-underline-opacity)) !important;
+}
+
+.link-underline-info {
+  --tblr-link-underline-opacity: 1;
+  -webkit-text-decoration-color: rgba(var(--tblr-info-rgb), var(--tblr-link-underline-opacity)) !important;
+          text-decoration-color: rgba(var(--tblr-info-rgb), var(--tblr-link-underline-opacity)) !important;
+}
+
+.link-underline-warning {
+  --tblr-link-underline-opacity: 1;
+  -webkit-text-decoration-color: rgba(var(--tblr-warning-rgb), var(--tblr-link-underline-opacity)) !important;
+          text-decoration-color: rgba(var(--tblr-warning-rgb), var(--tblr-link-underline-opacity)) !important;
+}
+
+.link-underline-danger {
+  --tblr-link-underline-opacity: 1;
+  -webkit-text-decoration-color: rgba(var(--tblr-danger-rgb), var(--tblr-link-underline-opacity)) !important;
+          text-decoration-color: rgba(var(--tblr-danger-rgb), var(--tblr-link-underline-opacity)) !important;
+}
+
+.link-underline-light {
+  --tblr-link-underline-opacity: 1;
+  -webkit-text-decoration-color: rgba(var(--tblr-light-rgb), var(--tblr-link-underline-opacity)) !important;
+          text-decoration-color: rgba(var(--tblr-light-rgb), var(--tblr-link-underline-opacity)) !important;
+}
+
+.link-underline-dark {
+  --tblr-link-underline-opacity: 1;
+  -webkit-text-decoration-color: rgba(var(--tblr-dark-rgb), var(--tblr-link-underline-opacity)) !important;
+          text-decoration-color: rgba(var(--tblr-dark-rgb), var(--tblr-link-underline-opacity)) !important;
+}
+
+.link-underline-muted {
+  --tblr-link-underline-opacity: 1;
+  -webkit-text-decoration-color: rgba(var(--tblr-muted-rgb), var(--tblr-link-underline-opacity)) !important;
+          text-decoration-color: rgba(var(--tblr-muted-rgb), var(--tblr-link-underline-opacity)) !important;
+}
+
+.link-underline-blue {
+  --tblr-link-underline-opacity: 1;
+  -webkit-text-decoration-color: rgba(var(--tblr-blue-rgb), var(--tblr-link-underline-opacity)) !important;
+          text-decoration-color: rgba(var(--tblr-blue-rgb), var(--tblr-link-underline-opacity)) !important;
+}
+
+.link-underline-azure {
+  --tblr-link-underline-opacity: 1;
+  -webkit-text-decoration-color: rgba(var(--tblr-azure-rgb), var(--tblr-link-underline-opacity)) !important;
+          text-decoration-color: rgba(var(--tblr-azure-rgb), var(--tblr-link-underline-opacity)) !important;
+}
+
+.link-underline-indigo {
+  --tblr-link-underline-opacity: 1;
+  -webkit-text-decoration-color: rgba(var(--tblr-indigo-rgb), var(--tblr-link-underline-opacity)) !important;
+          text-decoration-color: rgba(var(--tblr-indigo-rgb), var(--tblr-link-underline-opacity)) !important;
+}
+
+.link-underline-purple {
+  --tblr-link-underline-opacity: 1;
+  -webkit-text-decoration-color: rgba(var(--tblr-purple-rgb), var(--tblr-link-underline-opacity)) !important;
+          text-decoration-color: rgba(var(--tblr-purple-rgb), var(--tblr-link-underline-opacity)) !important;
+}
+
+.link-underline-pink {
+  --tblr-link-underline-opacity: 1;
+  -webkit-text-decoration-color: rgba(var(--tblr-pink-rgb), var(--tblr-link-underline-opacity)) !important;
+          text-decoration-color: rgba(var(--tblr-pink-rgb), var(--tblr-link-underline-opacity)) !important;
+}
+
+.link-underline-red {
+  --tblr-link-underline-opacity: 1;
+  -webkit-text-decoration-color: rgba(var(--tblr-red-rgb), var(--tblr-link-underline-opacity)) !important;
+          text-decoration-color: rgba(var(--tblr-red-rgb), var(--tblr-link-underline-opacity)) !important;
+}
+
+.link-underline-orange {
+  --tblr-link-underline-opacity: 1;
+  -webkit-text-decoration-color: rgba(var(--tblr-orange-rgb), var(--tblr-link-underline-opacity)) !important;
+          text-decoration-color: rgba(var(--tblr-orange-rgb), var(--tblr-link-underline-opacity)) !important;
+}
+
+.link-underline-yellow {
+  --tblr-link-underline-opacity: 1;
+  -webkit-text-decoration-color: rgba(var(--tblr-yellow-rgb), var(--tblr-link-underline-opacity)) !important;
+          text-decoration-color: rgba(var(--tblr-yellow-rgb), var(--tblr-link-underline-opacity)) !important;
+}
+
+.link-underline-lime {
+  --tblr-link-underline-opacity: 1;
+  -webkit-text-decoration-color: rgba(var(--tblr-lime-rgb), var(--tblr-link-underline-opacity)) !important;
+          text-decoration-color: rgba(var(--tblr-lime-rgb), var(--tblr-link-underline-opacity)) !important;
+}
+
+.link-underline-green {
+  --tblr-link-underline-opacity: 1;
+  -webkit-text-decoration-color: rgba(var(--tblr-green-rgb), var(--tblr-link-underline-opacity)) !important;
+          text-decoration-color: rgba(var(--tblr-green-rgb), var(--tblr-link-underline-opacity)) !important;
+}
+
+.link-underline-teal {
+  --tblr-link-underline-opacity: 1;
+  -webkit-text-decoration-color: rgba(var(--tblr-teal-rgb), var(--tblr-link-underline-opacity)) !important;
+          text-decoration-color: rgba(var(--tblr-teal-rgb), var(--tblr-link-underline-opacity)) !important;
+}
+
+.link-underline-cyan {
+  --tblr-link-underline-opacity: 1;
+  -webkit-text-decoration-color: rgba(var(--tblr-cyan-rgb), var(--tblr-link-underline-opacity)) !important;
+          text-decoration-color: rgba(var(--tblr-cyan-rgb), var(--tblr-link-underline-opacity)) !important;
+}
+
+.link-underline-facebook {
+  --tblr-link-underline-opacity: 1;
+  -webkit-text-decoration-color: rgba(var(--tblr-facebook-rgb), var(--tblr-link-underline-opacity)) !important;
+          text-decoration-color: rgba(var(--tblr-facebook-rgb), var(--tblr-link-underline-opacity)) !important;
+}
+
+.link-underline-twitter {
+  --tblr-link-underline-opacity: 1;
+  -webkit-text-decoration-color: rgba(var(--tblr-twitter-rgb), var(--tblr-link-underline-opacity)) !important;
+          text-decoration-color: rgba(var(--tblr-twitter-rgb), var(--tblr-link-underline-opacity)) !important;
+}
+
+.link-underline-linkedin {
+  --tblr-link-underline-opacity: 1;
+  -webkit-text-decoration-color: rgba(var(--tblr-linkedin-rgb), var(--tblr-link-underline-opacity)) !important;
+          text-decoration-color: rgba(var(--tblr-linkedin-rgb), var(--tblr-link-underline-opacity)) !important;
+}
+
+.link-underline-google {
+  --tblr-link-underline-opacity: 1;
+  -webkit-text-decoration-color: rgba(var(--tblr-google-rgb), var(--tblr-link-underline-opacity)) !important;
+          text-decoration-color: rgba(var(--tblr-google-rgb), var(--tblr-link-underline-opacity)) !important;
+}
+
+.link-underline-youtube {
+  --tblr-link-underline-opacity: 1;
+  -webkit-text-decoration-color: rgba(var(--tblr-youtube-rgb), var(--tblr-link-underline-opacity)) !important;
+          text-decoration-color: rgba(var(--tblr-youtube-rgb), var(--tblr-link-underline-opacity)) !important;
+}
+
+.link-underline-vimeo {
+  --tblr-link-underline-opacity: 1;
+  -webkit-text-decoration-color: rgba(var(--tblr-vimeo-rgb), var(--tblr-link-underline-opacity)) !important;
+          text-decoration-color: rgba(var(--tblr-vimeo-rgb), var(--tblr-link-underline-opacity)) !important;
+}
+
+.link-underline-dribbble {
+  --tblr-link-underline-opacity: 1;
+  -webkit-text-decoration-color: rgba(var(--tblr-dribbble-rgb), var(--tblr-link-underline-opacity)) !important;
+          text-decoration-color: rgba(var(--tblr-dribbble-rgb), var(--tblr-link-underline-opacity)) !important;
+}
+
+.link-underline-github {
+  --tblr-link-underline-opacity: 1;
+  -webkit-text-decoration-color: rgba(var(--tblr-github-rgb), var(--tblr-link-underline-opacity)) !important;
+          text-decoration-color: rgba(var(--tblr-github-rgb), var(--tblr-link-underline-opacity)) !important;
+}
+
+.link-underline-instagram {
+  --tblr-link-underline-opacity: 1;
+  -webkit-text-decoration-color: rgba(var(--tblr-instagram-rgb), var(--tblr-link-underline-opacity)) !important;
+          text-decoration-color: rgba(var(--tblr-instagram-rgb), var(--tblr-link-underline-opacity)) !important;
+}
+
+.link-underline-pinterest {
+  --tblr-link-underline-opacity: 1;
+  -webkit-text-decoration-color: rgba(var(--tblr-pinterest-rgb), var(--tblr-link-underline-opacity)) !important;
+          text-decoration-color: rgba(var(--tblr-pinterest-rgb), var(--tblr-link-underline-opacity)) !important;
+}
+
+.link-underline-vk {
+  --tblr-link-underline-opacity: 1;
+  -webkit-text-decoration-color: rgba(var(--tblr-vk-rgb), var(--tblr-link-underline-opacity)) !important;
+          text-decoration-color: rgba(var(--tblr-vk-rgb), var(--tblr-link-underline-opacity)) !important;
+}
+
+.link-underline-rss {
+  --tblr-link-underline-opacity: 1;
+  -webkit-text-decoration-color: rgba(var(--tblr-rss-rgb), var(--tblr-link-underline-opacity)) !important;
+          text-decoration-color: rgba(var(--tblr-rss-rgb), var(--tblr-link-underline-opacity)) !important;
+}
+
+.link-underline-flickr {
+  --tblr-link-underline-opacity: 1;
+  -webkit-text-decoration-color: rgba(var(--tblr-flickr-rgb), var(--tblr-link-underline-opacity)) !important;
+          text-decoration-color: rgba(var(--tblr-flickr-rgb), var(--tblr-link-underline-opacity)) !important;
+}
+
+.link-underline-bitbucket {
+  --tblr-link-underline-opacity: 1;
+  -webkit-text-decoration-color: rgba(var(--tblr-bitbucket-rgb), var(--tblr-link-underline-opacity)) !important;
+          text-decoration-color: rgba(var(--tblr-bitbucket-rgb), var(--tblr-link-underline-opacity)) !important;
+}
+
+.link-underline-tabler {
+  --tblr-link-underline-opacity: 1;
+  -webkit-text-decoration-color: rgba(var(--tblr-tabler-rgb), var(--tblr-link-underline-opacity)) !important;
+          text-decoration-color: rgba(var(--tblr-tabler-rgb), var(--tblr-link-underline-opacity)) !important;
+}
+
+.link-underline {
+  --tblr-link-underline-opacity: 1;
+  -webkit-text-decoration-color: rgba(var(--tblr-link-color-rgb), var(--tblr-link-underline-opacity, 1)) !important;
+          text-decoration-color: rgba(var(--tblr-link-color-rgb), var(--tblr-link-underline-opacity, 1)) !important;
+}
+
+.link-underline-opacity-0 {
+  --tblr-link-underline-opacity: 0;
+}
+
+.link-underline-opacity-0-hover:hover {
+  --tblr-link-underline-opacity: 0;
+}
+
+.link-underline-opacity-10 {
+  --tblr-link-underline-opacity: 0.1;
+}
+
+.link-underline-opacity-10-hover:hover {
+  --tblr-link-underline-opacity: 0.1;
+}
+
+.link-underline-opacity-25 {
+  --tblr-link-underline-opacity: 0.25;
+}
+
+.link-underline-opacity-25-hover:hover {
+  --tblr-link-underline-opacity: 0.25;
+}
+
+.link-underline-opacity-50 {
+  --tblr-link-underline-opacity: 0.5;
+}
+
+.link-underline-opacity-50-hover:hover {
+  --tblr-link-underline-opacity: 0.5;
+}
+
+.link-underline-opacity-75 {
+  --tblr-link-underline-opacity: 0.75;
+}
+
+.link-underline-opacity-75-hover:hover {
+  --tblr-link-underline-opacity: 0.75;
+}
+
+.link-underline-opacity-100 {
+  --tblr-link-underline-opacity: 1;
+}
+
+.link-underline-opacity-100-hover:hover {
+  --tblr-link-underline-opacity: 1;
+}
+
+.bg-primary {
+  --tblr-bg-opacity: 1;
+  background-color: rgba(var(--tblr-primary-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.bg-secondary {
+  --tblr-bg-opacity: 1;
+  background-color: rgba(var(--tblr-secondary-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.bg-success {
+  --tblr-bg-opacity: 1;
+  background-color: rgba(var(--tblr-success-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.bg-info {
+  --tblr-bg-opacity: 1;
+  background-color: rgba(var(--tblr-info-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.bg-warning {
+  --tblr-bg-opacity: 1;
+  background-color: rgba(var(--tblr-warning-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.bg-danger {
+  --tblr-bg-opacity: 1;
+  background-color: rgba(var(--tblr-danger-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.bg-light {
+  --tblr-bg-opacity: 1;
+  background-color: rgba(var(--tblr-light-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.bg-dark {
+  --tblr-bg-opacity: 1;
+  background-color: rgba(var(--tblr-dark-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.bg-muted {
+  --tblr-bg-opacity: 1;
+  background-color: rgba(var(--tblr-muted-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.bg-blue {
+  --tblr-bg-opacity: 1;
+  background-color: rgba(var(--tblr-blue-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.bg-azure {
+  --tblr-bg-opacity: 1;
+  background-color: rgba(var(--tblr-azure-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.bg-indigo {
+  --tblr-bg-opacity: 1;
+  background-color: rgba(var(--tblr-indigo-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.bg-purple {
+  --tblr-bg-opacity: 1;
+  background-color: rgba(var(--tblr-purple-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.bg-pink {
+  --tblr-bg-opacity: 1;
+  background-color: rgba(var(--tblr-pink-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.bg-red {
+  --tblr-bg-opacity: 1;
+  background-color: rgba(var(--tblr-red-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.bg-orange {
+  --tblr-bg-opacity: 1;
+  background-color: rgba(var(--tblr-orange-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.bg-yellow {
+  --tblr-bg-opacity: 1;
+  background-color: rgba(var(--tblr-yellow-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.bg-lime {
+  --tblr-bg-opacity: 1;
+  background-color: rgba(var(--tblr-lime-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.bg-green {
+  --tblr-bg-opacity: 1;
+  background-color: rgba(var(--tblr-green-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.bg-teal {
+  --tblr-bg-opacity: 1;
+  background-color: rgba(var(--tblr-teal-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.bg-cyan {
+  --tblr-bg-opacity: 1;
+  background-color: rgba(var(--tblr-cyan-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.bg-facebook {
+  --tblr-bg-opacity: 1;
+  background-color: rgba(var(--tblr-facebook-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.bg-twitter {
+  --tblr-bg-opacity: 1;
+  background-color: rgba(var(--tblr-twitter-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.bg-linkedin {
+  --tblr-bg-opacity: 1;
+  background-color: rgba(var(--tblr-linkedin-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.bg-google {
+  --tblr-bg-opacity: 1;
+  background-color: rgba(var(--tblr-google-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.bg-youtube {
+  --tblr-bg-opacity: 1;
+  background-color: rgba(var(--tblr-youtube-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.bg-vimeo {
+  --tblr-bg-opacity: 1;
+  background-color: rgba(var(--tblr-vimeo-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.bg-dribbble {
+  --tblr-bg-opacity: 1;
+  background-color: rgba(var(--tblr-dribbble-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.bg-github {
+  --tblr-bg-opacity: 1;
+  background-color: rgba(var(--tblr-github-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.bg-instagram {
+  --tblr-bg-opacity: 1;
+  background-color: rgba(var(--tblr-instagram-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.bg-pinterest {
+  --tblr-bg-opacity: 1;
+  background-color: rgba(var(--tblr-pinterest-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.bg-vk {
+  --tblr-bg-opacity: 1;
+  background-color: rgba(var(--tblr-vk-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.bg-rss {
+  --tblr-bg-opacity: 1;
+  background-color: rgba(var(--tblr-rss-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.bg-flickr {
+  --tblr-bg-opacity: 1;
+  background-color: rgba(var(--tblr-flickr-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.bg-bitbucket {
+  --tblr-bg-opacity: 1;
+  background-color: rgba(var(--tblr-bitbucket-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.bg-tabler {
+  --tblr-bg-opacity: 1;
+  background-color: rgba(var(--tblr-tabler-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.bg-black {
+  --tblr-bg-opacity: 1;
+  background-color: rgba(var(--tblr-black-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.bg-white {
+  --tblr-bg-opacity: 1;
+  background-color: rgba(var(--tblr-white-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.bg-body {
+  --tblr-bg-opacity: 1;
+  background-color: rgba(var(--tblr-body-bg-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.bg-transparent {
+  --tblr-bg-opacity: 1;
+  background-color: transparent !important;
+}
+
+.bg-body-secondary {
+  --tblr-bg-opacity: 1;
+  background-color: rgba(var(--tblr-secondary-bg-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.bg-body-tertiary {
+  --tblr-bg-opacity: 1;
+  background-color: rgba(var(--tblr-tertiary-bg-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.bg-opacity-10 {
+  --tblr-bg-opacity: 0.1;
+}
+
+.bg-opacity-25 {
+  --tblr-bg-opacity: 0.25;
+}
+
+.bg-opacity-50 {
+  --tblr-bg-opacity: 0.5;
+}
+
+.bg-opacity-75 {
+  --tblr-bg-opacity: 0.75;
+}
+
+.bg-opacity-100 {
+  --tblr-bg-opacity: 1;
+}
+
+.bg-primary-subtle {
+  background-color: var(--tblr-primary-bg-subtle) !important;
+}
+
+.bg-secondary-subtle {
+  background-color: var(--tblr-secondary-bg-subtle) !important;
+}
+
+.bg-success-subtle {
+  background-color: var(--tblr-success-bg-subtle) !important;
+}
+
+.bg-info-subtle {
+  background-color: var(--tblr-info-bg-subtle) !important;
+}
+
+.bg-warning-subtle {
+  background-color: var(--tblr-warning-bg-subtle) !important;
+}
+
+.bg-danger-subtle {
+  background-color: var(--tblr-danger-bg-subtle) !important;
+}
+
+.bg-light-subtle {
+  background-color: var(--tblr-light-bg-subtle) !important;
+}
+
+.bg-dark-subtle {
+  background-color: var(--tblr-dark-bg-subtle) !important;
+}
+
+.bg-gradient {
+  background-image: var(--tblr-gradient) !important;
+}
+
+.user-select-all {
+  -webkit-user-select: all !important;
+     -moz-user-select: all !important;
+          user-select: all !important;
+}
+
+.user-select-auto {
+  -webkit-user-select: auto !important;
+     -moz-user-select: auto !important;
+      -ms-user-select: auto !important;
+          user-select: auto !important;
+}
+
+.user-select-none {
+  -webkit-user-select: none !important;
+     -moz-user-select: none !important;
+      -ms-user-select: none !important;
+          user-select: none !important;
+}
+
+.pe-none {
+  pointer-events: none !important;
+}
+
+.pe-auto {
+  pointer-events: auto !important;
+}
+
+.rounded {
+  border-radius: var(--tblr-border-radius) !important;
+}
+
+.rounded-0 {
+  border-radius: 0 !important;
+}
+
+.rounded-1 {
+  border-radius: var(--tblr-border-radius-sm) !important;
+}
+
+.rounded-2 {
+  border-radius: var(--tblr-border-radius) !important;
+}
+
+.rounded-3 {
+  border-radius: var(--tblr-border-radius-lg) !important;
+}
+
+.rounded-4 {
+  border-radius: var(--tblr-border-radius-xl) !important;
+}
+
+.rounded-5 {
+  border-radius: var(--tblr-border-radius-xxl) !important;
+}
+
+.rounded-circle {
+  border-radius: 50% !important;
+}
+
+.rounded-pill {
+  border-radius: var(--tblr-border-radius-pill) !important;
+}
+
+.rounded-top {
+  border-top-left-radius: var(--tblr-border-radius) !important;
+  border-top-right-radius: var(--tblr-border-radius) !important;
+}
+
+.rounded-top-0 {
+  border-top-left-radius: 0 !important;
+  border-top-right-radius: 0 !important;
+}
+
+.rounded-top-1 {
+  border-top-left-radius: var(--tblr-border-radius-sm) !important;
+  border-top-right-radius: var(--tblr-border-radius-sm) !important;
+}
+
+.rounded-top-2 {
+  border-top-left-radius: var(--tblr-border-radius) !important;
+  border-top-right-radius: var(--tblr-border-radius) !important;
+}
+
+.rounded-top-3 {
+  border-top-left-radius: var(--tblr-border-radius-lg) !important;
+  border-top-right-radius: var(--tblr-border-radius-lg) !important;
+}
+
+.rounded-top-4 {
+  border-top-left-radius: var(--tblr-border-radius-xl) !important;
+  border-top-right-radius: var(--tblr-border-radius-xl) !important;
+}
+
+.rounded-top-5 {
+  border-top-left-radius: var(--tblr-border-radius-xxl) !important;
+  border-top-right-radius: var(--tblr-border-radius-xxl) !important;
+}
+
+.rounded-top-circle {
+  border-top-left-radius: 50% !important;
+  border-top-right-radius: 50% !important;
+}
+
+.rounded-top-pill {
+  border-top-left-radius: var(--tblr-border-radius-pill) !important;
+  border-top-right-radius: var(--tblr-border-radius-pill) !important;
+}
+
+.rounded-end {
+  border-top-right-radius: var(--tblr-border-radius) !important;
+  border-bottom-right-radius: var(--tblr-border-radius) !important;
+}
+
+.rounded-end-0 {
+  border-top-right-radius: 0 !important;
+  border-bottom-right-radius: 0 !important;
+}
+
+.rounded-end-1 {
+  border-top-right-radius: var(--tblr-border-radius-sm) !important;
+  border-bottom-right-radius: var(--tblr-border-radius-sm) !important;
+}
+
+.rounded-end-2 {
+  border-top-right-radius: var(--tblr-border-radius) !important;
+  border-bottom-right-radius: var(--tblr-border-radius) !important;
+}
+
+.rounded-end-3 {
+  border-top-right-radius: var(--tblr-border-radius-lg) !important;
+  border-bottom-right-radius: var(--tblr-border-radius-lg) !important;
+}
+
+.rounded-end-4 {
+  border-top-right-radius: var(--tblr-border-radius-xl) !important;
+  border-bottom-right-radius: var(--tblr-border-radius-xl) !important;
+}
+
+.rounded-end-5 {
+  border-top-right-radius: var(--tblr-border-radius-xxl) !important;
+  border-bottom-right-radius: var(--tblr-border-radius-xxl) !important;
+}
+
+.rounded-end-circle {
+  border-top-right-radius: 50% !important;
+  border-bottom-right-radius: 50% !important;
+}
+
+.rounded-end-pill {
+  border-top-right-radius: var(--tblr-border-radius-pill) !important;
+  border-bottom-right-radius: var(--tblr-border-radius-pill) !important;
+}
+
+.rounded-bottom {
+  border-bottom-right-radius: var(--tblr-border-radius) !important;
+  border-bottom-left-radius: var(--tblr-border-radius) !important;
+}
+
+.rounded-bottom-0 {
+  border-bottom-right-radius: 0 !important;
+  border-bottom-left-radius: 0 !important;
+}
+
+.rounded-bottom-1 {
+  border-bottom-right-radius: var(--tblr-border-radius-sm) !important;
+  border-bottom-left-radius: var(--tblr-border-radius-sm) !important;
+}
+
+.rounded-bottom-2 {
+  border-bottom-right-radius: var(--tblr-border-radius) !important;
+  border-bottom-left-radius: var(--tblr-border-radius) !important;
+}
+
+.rounded-bottom-3 {
+  border-bottom-right-radius: var(--tblr-border-radius-lg) !important;
+  border-bottom-left-radius: var(--tblr-border-radius-lg) !important;
+}
+
+.rounded-bottom-4 {
+  border-bottom-right-radius: var(--tblr-border-radius-xl) !important;
+  border-bottom-left-radius: var(--tblr-border-radius-xl) !important;
+}
+
+.rounded-bottom-5 {
+  border-bottom-right-radius: var(--tblr-border-radius-xxl) !important;
+  border-bottom-left-radius: var(--tblr-border-radius-xxl) !important;
+}
+
+.rounded-bottom-circle {
+  border-bottom-right-radius: 50% !important;
+  border-bottom-left-radius: 50% !important;
+}
+
+.rounded-bottom-pill {
+  border-bottom-right-radius: var(--tblr-border-radius-pill) !important;
+  border-bottom-left-radius: var(--tblr-border-radius-pill) !important;
+}
+
+.rounded-start {
+  border-bottom-left-radius: var(--tblr-border-radius) !important;
+  border-top-left-radius: var(--tblr-border-radius) !important;
+}
+
+.rounded-start-0 {
+  border-bottom-left-radius: 0 !important;
+  border-top-left-radius: 0 !important;
+}
+
+.rounded-start-1 {
+  border-bottom-left-radius: var(--tblr-border-radius-sm) !important;
+  border-top-left-radius: var(--tblr-border-radius-sm) !important;
+}
+
+.rounded-start-2 {
+  border-bottom-left-radius: var(--tblr-border-radius) !important;
+  border-top-left-radius: var(--tblr-border-radius) !important;
+}
+
+.rounded-start-3 {
+  border-bottom-left-radius: var(--tblr-border-radius-lg) !important;
+  border-top-left-radius: var(--tblr-border-radius-lg) !important;
+}
+
+.rounded-start-4 {
+  border-bottom-left-radius: var(--tblr-border-radius-xl) !important;
+  border-top-left-radius: var(--tblr-border-radius-xl) !important;
+}
+
+.rounded-start-5 {
+  border-bottom-left-radius: var(--tblr-border-radius-xxl) !important;
+  border-top-left-radius: var(--tblr-border-radius-xxl) !important;
+}
+
+.rounded-start-circle {
+  border-bottom-left-radius: 50% !important;
+  border-top-left-radius: 50% !important;
+}
+
+.rounded-start-pill {
+  border-bottom-left-radius: var(--tblr-border-radius-pill) !important;
+  border-top-left-radius: var(--tblr-border-radius-pill) !important;
+}
+
+.visible {
+  visibility: visible !important;
+}
+
+.invisible {
+  visibility: hidden !important;
+}
+
+.z-n1 {
+  z-index: -1 !important;
+}
+
+.z-0 {
+  z-index: 0 !important;
+}
+
+.z-1 {
+  z-index: 1 !important;
+}
+
+.z-2 {
+  z-index: 2 !important;
+}
+
+.z-3 {
+  z-index: 3 !important;
+}
+
+.object-contain {
+  -o-object-fit: contain !important;
+     object-fit: contain !important;
+}
+
+.object-cover {
+  -o-object-fit: cover !important;
+     object-fit: cover !important;
+}
+
+.object-fill {
+  -o-object-fit: fill !important;
+     object-fit: fill !important;
+}
+
+.object-scale-down {
+  -o-object-fit: scale-down !important;
+     object-fit: scale-down !important;
+}
+
+.object-none {
+  -o-object-fit: none !important;
+     object-fit: none !important;
+}
+
+.tracking-tight {
+  letter-spacing: -0.05em !important;
+}
+
+.tracking-normal {
+  letter-spacing: 0 !important;
+}
+
+.tracking-wide {
+  letter-spacing: 0.05em !important;
+}
+
+.cursor-auto {
+  cursor: auto !important;
+}
+
+.cursor-pointer {
+  cursor: pointer !important;
+}
+
+.cursor-move {
+  cursor: move !important;
+}
+
+.cursor-not-allowed {
+  cursor: not-allowed !important;
+}
+
+.cursor-zoom-in {
+  cursor: zoom-in !important;
+}
+
+.cursor-zoom-out {
+  cursor: zoom-out !important;
+}
+
+.cursor-default {
+  cursor: default !important;
+}
+
+.cursor-none {
+  cursor: none !important;
+}
+
+.cursor-help {
+  cursor: help !important;
+}
+
+.cursor-progress {
+  cursor: progress !important;
+}
+
+.cursor-wait {
+  cursor: wait !important;
+}
+
+.cursor-text {
+  cursor: text !important;
+}
+
+.cursor-v-text {
+  cursor: vertical-text !important;
+}
+
+.cursor-grab {
+  cursor: -webkit-grab !important;
+  cursor: grab !important;
+}
+
+.cursor-grabbing {
+  cursor: -webkit-grabbing !important;
+  cursor: grabbing !important;
+}
+
+.border-x {
+  border-left: var(--tblr-border-width) var(--tblr-border-style) rgba(4, 32, 69, 0.14) !important;
+  border-right: var(--tblr-border-width) var(--tblr-border-style) rgba(4, 32, 69, 0.14) !important;
+}
+
+.border-x-wide {
+  border-left: 2px var(--tblr-border-style) rgba(4, 32, 69, 0.14) !important;
+  border-right: 2px var(--tblr-border-style) rgba(4, 32, 69, 0.14) !important;
+}
+
+.border-x-0 {
+  border-left: 0 !important;
+  border-right: 0 !important;
+}
+
+.border-y {
+  border-top: var(--tblr-border-width) var(--tblr-border-style) rgba(4, 32, 69, 0.14) !important;
+  border-bottom: var(--tblr-border-width) var(--tblr-border-style) rgba(4, 32, 69, 0.14) !important;
+}
+
+.border-y-wide {
+  border-top: 2px var(--tblr-border-style) rgba(4, 32, 69, 0.14) !important;
+  border-bottom: 2px var(--tblr-border-style) rgba(4, 32, 69, 0.14) !important;
+}
+
+.border-y-0 {
+  border-top: 0 !important;
+  border-bottom: 0 !important;
+}
+
+.columns-2 {
+  -moz-columns: 2 !important;
+       columns: 2 !important;
+}
+
+.columns-3 {
+  -moz-columns: 3 !important;
+       columns: 3 !important;
+}
+
+.columns-4 {
+  -moz-columns: 4 !important;
+       columns: 4 !important;
+}
+
+@media (min-width: 576px) {
+  .float-sm-start {
+    float: left !important;
+  }
+  .float-sm-end {
+    float: right !important;
+  }
+  .float-sm-none {
+    float: none !important;
+  }
+  .object-fit-sm-contain {
+    -o-object-fit: contain !important;
+       object-fit: contain !important;
+  }
+  .object-fit-sm-cover {
+    -o-object-fit: cover !important;
+       object-fit: cover !important;
+  }
+  .object-fit-sm-fill {
+    -o-object-fit: fill !important;
+       object-fit: fill !important;
+  }
+  .object-fit-sm-scale {
+    -o-object-fit: scale-down !important;
+       object-fit: scale-down !important;
+  }
+  .object-fit-sm-none {
+    -o-object-fit: none !important;
+       object-fit: none !important;
+  }
+  .d-sm-inline {
+    display: inline !important;
+  }
+  .d-sm-inline-block {
+    display: inline-block !important;
+  }
+  .d-sm-block {
+    display: block !important;
+  }
+  .d-sm-grid {
+    display: grid !important;
+  }
+  .d-sm-inline-grid {
+    display: inline-grid !important;
+  }
+  .d-sm-table {
+    display: table !important;
+  }
+  .d-sm-table-row {
+    display: table-row !important;
+  }
+  .d-sm-table-cell {
+    display: table-cell !important;
+  }
+  .d-sm-flex {
+    display: flex !important;
+  }
+  .d-sm-inline-flex {
+    display: inline-flex !important;
+  }
+  .d-sm-none {
+    display: none !important;
+  }
+  .flex-sm-fill {
+    flex: 1 1 auto !important;
+  }
+  .flex-sm-row {
+    flex-direction: row !important;
+  }
+  .flex-sm-column {
+    flex-direction: column !important;
+  }
+  .flex-sm-row-reverse {
+    flex-direction: row-reverse !important;
+  }
+  .flex-sm-column-reverse {
+    flex-direction: column-reverse !important;
+  }
+  .flex-sm-grow-0 {
+    flex-grow: 0 !important;
+  }
+  .flex-sm-grow-1 {
+    flex-grow: 1 !important;
+  }
+  .flex-sm-shrink-0 {
+    flex-shrink: 0 !important;
+  }
+  .flex-sm-shrink-1 {
+    flex-shrink: 1 !important;
+  }
+  .flex-sm-wrap {
+    flex-wrap: wrap !important;
+  }
+  .flex-sm-nowrap {
+    flex-wrap: nowrap !important;
+  }
+  .flex-sm-wrap-reverse {
+    flex-wrap: wrap-reverse !important;
+  }
+  .justify-content-sm-start {
+    justify-content: flex-start !important;
+  }
+  .justify-content-sm-end {
+    justify-content: flex-end !important;
+  }
+  .justify-content-sm-center {
+    justify-content: center !important;
+  }
+  .justify-content-sm-between {
+    justify-content: space-between !important;
+  }
+  .justify-content-sm-around {
+    justify-content: space-around !important;
+  }
+  .justify-content-sm-evenly {
+    justify-content: space-evenly !important;
+  }
+  .align-items-sm-start {
+    align-items: flex-start !important;
+  }
+  .align-items-sm-end {
+    align-items: flex-end !important;
+  }
+  .align-items-sm-center {
+    align-items: center !important;
+  }
+  .align-items-sm-baseline {
+    align-items: baseline !important;
+  }
+  .align-items-sm-stretch {
+    align-items: stretch !important;
+  }
+  .align-content-sm-start {
+    align-content: flex-start !important;
+  }
+  .align-content-sm-end {
+    align-content: flex-end !important;
+  }
+  .align-content-sm-center {
+    align-content: center !important;
+  }
+  .align-content-sm-between {
+    align-content: space-between !important;
+  }
+  .align-content-sm-around {
+    align-content: space-around !important;
+  }
+  .align-content-sm-stretch {
+    align-content: stretch !important;
+  }
+  .align-self-sm-auto {
+    align-self: auto !important;
+  }
+  .align-self-sm-start {
+    align-self: flex-start !important;
+  }
+  .align-self-sm-end {
+    align-self: flex-end !important;
+  }
+  .align-self-sm-center {
+    align-self: center !important;
+  }
+  .align-self-sm-baseline {
+    align-self: baseline !important;
+  }
+  .align-self-sm-stretch {
+    align-self: stretch !important;
+  }
+  .order-sm-first {
+    order: -1 !important;
+  }
+  .order-sm-0 {
+    order: 0 !important;
+  }
+  .order-sm-1 {
+    order: 1 !important;
+  }
+  .order-sm-2 {
+    order: 2 !important;
+  }
+  .order-sm-3 {
+    order: 3 !important;
+  }
+  .order-sm-4 {
+    order: 4 !important;
+  }
+  .order-sm-5 {
+    order: 5 !important;
+  }
+  .order-sm-last {
+    order: 6 !important;
+  }
+  .m-sm-0 {
+    margin: 0 !important;
+  }
+  .m-sm-1 {
+    margin: 0.25rem !important;
+  }
+  .m-sm-2 {
+    margin: 0.5rem !important;
+  }
+  .m-sm-3 {
+    margin: 1rem !important;
+  }
+  .m-sm-4 {
+    margin: 1.5rem !important;
+  }
+  .m-sm-5 {
+    margin: 2rem !important;
+  }
+  .m-sm-6 {
+    margin: 3rem !important;
+  }
+  .m-sm-7 {
+    margin: 5rem !important;
+  }
+  .m-sm-8 {
+    margin: 8rem !important;
+  }
+  .m-sm-auto {
+    margin: auto !important;
+  }
+  .mx-sm-0 {
+    margin-right: 0 !important;
+    margin-left: 0 !important;
+  }
+  .mx-sm-1 {
+    margin-right: 0.25rem !important;
+    margin-left: 0.25rem !important;
+  }
+  .mx-sm-2 {
+    margin-right: 0.5rem !important;
+    margin-left: 0.5rem !important;
+  }
+  .mx-sm-3 {
+    margin-right: 1rem !important;
+    margin-left: 1rem !important;
+  }
+  .mx-sm-4 {
+    margin-right: 1.5rem !important;
+    margin-left: 1.5rem !important;
+  }
+  .mx-sm-5 {
+    margin-right: 2rem !important;
+    margin-left: 2rem !important;
+  }
+  .mx-sm-6 {
+    margin-right: 3rem !important;
+    margin-left: 3rem !important;
+  }
+  .mx-sm-7 {
+    margin-right: 5rem !important;
+    margin-left: 5rem !important;
+  }
+  .mx-sm-8 {
+    margin-right: 8rem !important;
+    margin-left: 8rem !important;
+  }
+  .mx-sm-auto {
+    margin-right: auto !important;
+    margin-left: auto !important;
+  }
+  .my-sm-0 {
+    margin-top: 0 !important;
+    margin-bottom: 0 !important;
+  }
+  .my-sm-1 {
+    margin-top: 0.25rem !important;
+    margin-bottom: 0.25rem !important;
+  }
+  .my-sm-2 {
+    margin-top: 0.5rem !important;
+    margin-bottom: 0.5rem !important;
+  }
+  .my-sm-3 {
+    margin-top: 1rem !important;
+    margin-bottom: 1rem !important;
+  }
+  .my-sm-4 {
+    margin-top: 1.5rem !important;
+    margin-bottom: 1.5rem !important;
+  }
+  .my-sm-5 {
+    margin-top: 2rem !important;
+    margin-bottom: 2rem !important;
+  }
+  .my-sm-6 {
+    margin-top: 3rem !important;
+    margin-bottom: 3rem !important;
+  }
+  .my-sm-7 {
+    margin-top: 5rem !important;
+    margin-bottom: 5rem !important;
+  }
+  .my-sm-8 {
+    margin-top: 8rem !important;
+    margin-bottom: 8rem !important;
+  }
+  .my-sm-auto {
+    margin-top: auto !important;
+    margin-bottom: auto !important;
+  }
+  .mt-sm-0 {
+    margin-top: 0 !important;
+  }
+  .mt-sm-1 {
+    margin-top: 0.25rem !important;
+  }
+  .mt-sm-2 {
+    margin-top: 0.5rem !important;
+  }
+  .mt-sm-3 {
+    margin-top: 1rem !important;
+  }
+  .mt-sm-4 {
+    margin-top: 1.5rem !important;
+  }
+  .mt-sm-5 {
+    margin-top: 2rem !important;
+  }
+  .mt-sm-6 {
+    margin-top: 3rem !important;
+  }
+  .mt-sm-7 {
+    margin-top: 5rem !important;
+  }
+  .mt-sm-8 {
+    margin-top: 8rem !important;
+  }
+  .mt-sm-auto {
+    margin-top: auto !important;
+  }
+  .me-sm-0 {
+    margin-right: 0 !important;
+  }
+  .me-sm-1 {
+    margin-right: 0.25rem !important;
+  }
+  .me-sm-2 {
+    margin-right: 0.5rem !important;
+  }
+  .me-sm-3 {
+    margin-right: 1rem !important;
+  }
+  .me-sm-4 {
+    margin-right: 1.5rem !important;
+  }
+  .me-sm-5 {
+    margin-right: 2rem !important;
+  }
+  .me-sm-6 {
+    margin-right: 3rem !important;
+  }
+  .me-sm-7 {
+    margin-right: 5rem !important;
+  }
+  .me-sm-8 {
+    margin-right: 8rem !important;
+  }
+  .me-sm-auto {
+    margin-right: auto !important;
+  }
+  .mb-sm-0 {
+    margin-bottom: 0 !important;
+  }
+  .mb-sm-1 {
+    margin-bottom: 0.25rem !important;
+  }
+  .mb-sm-2 {
+    margin-bottom: 0.5rem !important;
+  }
+  .mb-sm-3 {
+    margin-bottom: 1rem !important;
+  }
+  .mb-sm-4 {
+    margin-bottom: 1.5rem !important;
+  }
+  .mb-sm-5 {
+    margin-bottom: 2rem !important;
+  }
+  .mb-sm-6 {
+    margin-bottom: 3rem !important;
+  }
+  .mb-sm-7 {
+    margin-bottom: 5rem !important;
+  }
+  .mb-sm-8 {
+    margin-bottom: 8rem !important;
+  }
+  .mb-sm-auto {
+    margin-bottom: auto !important;
+  }
+  .ms-sm-0 {
+    margin-left: 0 !important;
+  }
+  .ms-sm-1 {
+    margin-left: 0.25rem !important;
+  }
+  .ms-sm-2 {
+    margin-left: 0.5rem !important;
+  }
+  .ms-sm-3 {
+    margin-left: 1rem !important;
+  }
+  .ms-sm-4 {
+    margin-left: 1.5rem !important;
+  }
+  .ms-sm-5 {
+    margin-left: 2rem !important;
+  }
+  .ms-sm-6 {
+    margin-left: 3rem !important;
+  }
+  .ms-sm-7 {
+    margin-left: 5rem !important;
+  }
+  .ms-sm-8 {
+    margin-left: 8rem !important;
+  }
+  .ms-sm-auto {
+    margin-left: auto !important;
+  }
+  .p-sm-0 {
+    padding: 0 !important;
+  }
+  .p-sm-1 {
+    padding: 0.25rem !important;
+  }
+  .p-sm-2 {
+    padding: 0.5rem !important;
+  }
+  .p-sm-3 {
+    padding: 1rem !important;
+  }
+  .p-sm-4 {
+    padding: 1.5rem !important;
+  }
+  .p-sm-5 {
+    padding: 2rem !important;
+  }
+  .p-sm-6 {
+    padding: 3rem !important;
+  }
+  .p-sm-7 {
+    padding: 5rem !important;
+  }
+  .p-sm-8 {
+    padding: 8rem !important;
+  }
+  .px-sm-0 {
+    padding-right: 0 !important;
+    padding-left: 0 !important;
+  }
+  .px-sm-1 {
+    padding-right: 0.25rem !important;
+    padding-left: 0.25rem !important;
+  }
+  .px-sm-2 {
+    padding-right: 0.5rem !important;
+    padding-left: 0.5rem !important;
+  }
+  .px-sm-3 {
+    padding-right: 1rem !important;
+    padding-left: 1rem !important;
+  }
+  .px-sm-4 {
+    padding-right: 1.5rem !important;
+    padding-left: 1.5rem !important;
+  }
+  .px-sm-5 {
+    padding-right: 2rem !important;
+    padding-left: 2rem !important;
+  }
+  .px-sm-6 {
+    padding-right: 3rem !important;
+    padding-left: 3rem !important;
+  }
+  .px-sm-7 {
+    padding-right: 5rem !important;
+    padding-left: 5rem !important;
+  }
+  .px-sm-8 {
+    padding-right: 8rem !important;
+    padding-left: 8rem !important;
+  }
+  .py-sm-0 {
+    padding-top: 0 !important;
+    padding-bottom: 0 !important;
+  }
+  .py-sm-1 {
+    padding-top: 0.25rem !important;
+    padding-bottom: 0.25rem !important;
+  }
+  .py-sm-2 {
+    padding-top: 0.5rem !important;
+    padding-bottom: 0.5rem !important;
+  }
+  .py-sm-3 {
+    padding-top: 1rem !important;
+    padding-bottom: 1rem !important;
+  }
+  .py-sm-4 {
+    padding-top: 1.5rem !important;
+    padding-bottom: 1.5rem !important;
+  }
+  .py-sm-5 {
+    padding-top: 2rem !important;
+    padding-bottom: 2rem !important;
+  }
+  .py-sm-6 {
+    padding-top: 3rem !important;
+    padding-bottom: 3rem !important;
+  }
+  .py-sm-7 {
+    padding-top: 5rem !important;
+    padding-bottom: 5rem !important;
+  }
+  .py-sm-8 {
+    padding-top: 8rem !important;
+    padding-bottom: 8rem !important;
+  }
+  .pt-sm-0 {
+    padding-top: 0 !important;
+  }
+  .pt-sm-1 {
+    padding-top: 0.25rem !important;
+  }
+  .pt-sm-2 {
+    padding-top: 0.5rem !important;
+  }
+  .pt-sm-3 {
+    padding-top: 1rem !important;
+  }
+  .pt-sm-4 {
+    padding-top: 1.5rem !important;
+  }
+  .pt-sm-5 {
+    padding-top: 2rem !important;
+  }
+  .pt-sm-6 {
+    padding-top: 3rem !important;
+  }
+  .pt-sm-7 {
+    padding-top: 5rem !important;
+  }
+  .pt-sm-8 {
+    padding-top: 8rem !important;
+  }
+  .pe-sm-0 {
+    padding-right: 0 !important;
+  }
+  .pe-sm-1 {
+    padding-right: 0.25rem !important;
+  }
+  .pe-sm-2 {
+    padding-right: 0.5rem !important;
+  }
+  .pe-sm-3 {
+    padding-right: 1rem !important;
+  }
+  .pe-sm-4 {
+    padding-right: 1.5rem !important;
+  }
+  .pe-sm-5 {
+    padding-right: 2rem !important;
+  }
+  .pe-sm-6 {
+    padding-right: 3rem !important;
+  }
+  .pe-sm-7 {
+    padding-right: 5rem !important;
+  }
+  .pe-sm-8 {
+    padding-right: 8rem !important;
+  }
+  .pb-sm-0 {
+    padding-bottom: 0 !important;
+  }
+  .pb-sm-1 {
+    padding-bottom: 0.25rem !important;
+  }
+  .pb-sm-2 {
+    padding-bottom: 0.5rem !important;
+  }
+  .pb-sm-3 {
+    padding-bottom: 1rem !important;
+  }
+  .pb-sm-4 {
+    padding-bottom: 1.5rem !important;
+  }
+  .pb-sm-5 {
+    padding-bottom: 2rem !important;
+  }
+  .pb-sm-6 {
+    padding-bottom: 3rem !important;
+  }
+  .pb-sm-7 {
+    padding-bottom: 5rem !important;
+  }
+  .pb-sm-8 {
+    padding-bottom: 8rem !important;
+  }
+  .ps-sm-0 {
+    padding-left: 0 !important;
+  }
+  .ps-sm-1 {
+    padding-left: 0.25rem !important;
+  }
+  .ps-sm-2 {
+    padding-left: 0.5rem !important;
+  }
+  .ps-sm-3 {
+    padding-left: 1rem !important;
+  }
+  .ps-sm-4 {
+    padding-left: 1.5rem !important;
+  }
+  .ps-sm-5 {
+    padding-left: 2rem !important;
+  }
+  .ps-sm-6 {
+    padding-left: 3rem !important;
+  }
+  .ps-sm-7 {
+    padding-left: 5rem !important;
+  }
+  .ps-sm-8 {
+    padding-left: 8rem !important;
+  }
+  .gap-sm-0 {
+    gap: 0 !important;
+  }
+  .gap-sm-1 {
+    gap: 0.25rem !important;
+  }
+  .gap-sm-2 {
+    gap: 0.5rem !important;
+  }
+  .gap-sm-3 {
+    gap: 1rem !important;
+  }
+  .gap-sm-4 {
+    gap: 1.5rem !important;
+  }
+  .gap-sm-5 {
+    gap: 2rem !important;
+  }
+  .gap-sm-6 {
+    gap: 3rem !important;
+  }
+  .gap-sm-7 {
+    gap: 5rem !important;
+  }
+  .gap-sm-8 {
+    gap: 8rem !important;
+  }
+  .row-gap-sm-0 {
+    row-gap: 0 !important;
+  }
+  .row-gap-sm-1 {
+    row-gap: 0.25rem !important;
+  }
+  .row-gap-sm-2 {
+    row-gap: 0.5rem !important;
+  }
+  .row-gap-sm-3 {
+    row-gap: 1rem !important;
+  }
+  .row-gap-sm-4 {
+    row-gap: 1.5rem !important;
+  }
+  .row-gap-sm-5 {
+    row-gap: 2rem !important;
+  }
+  .row-gap-sm-6 {
+    row-gap: 3rem !important;
+  }
+  .row-gap-sm-7 {
+    row-gap: 5rem !important;
+  }
+  .row-gap-sm-8 {
+    row-gap: 8rem !important;
+  }
+  .column-gap-sm-0 {
+    -moz-column-gap: 0 !important;
+         column-gap: 0 !important;
+  }
+  .column-gap-sm-1 {
+    -moz-column-gap: 0.25rem !important;
+         column-gap: 0.25rem !important;
+  }
+  .column-gap-sm-2 {
+    -moz-column-gap: 0.5rem !important;
+         column-gap: 0.5rem !important;
+  }
+  .column-gap-sm-3 {
+    -moz-column-gap: 1rem !important;
+         column-gap: 1rem !important;
+  }
+  .column-gap-sm-4 {
+    -moz-column-gap: 1.5rem !important;
+         column-gap: 1.5rem !important;
+  }
+  .column-gap-sm-5 {
+    -moz-column-gap: 2rem !important;
+         column-gap: 2rem !important;
+  }
+  .column-gap-sm-6 {
+    -moz-column-gap: 3rem !important;
+         column-gap: 3rem !important;
+  }
+  .column-gap-sm-7 {
+    -moz-column-gap: 5rem !important;
+         column-gap: 5rem !important;
+  }
+  .column-gap-sm-8 {
+    -moz-column-gap: 8rem !important;
+         column-gap: 8rem !important;
+  }
+  .text-sm-start {
+    text-align: left !important;
+  }
+  .text-sm-end {
+    text-align: right !important;
+  }
+  .text-sm-center {
+    text-align: center !important;
+  }
+  .columns-sm-2 {
+    -moz-columns: 2 !important;
+         columns: 2 !important;
+  }
+  .columns-sm-3 {
+    -moz-columns: 3 !important;
+         columns: 3 !important;
+  }
+  .columns-sm-4 {
+    -moz-columns: 4 !important;
+         columns: 4 !important;
+  }
+}
+@media (min-width: 768px) {
+  .float-md-start {
+    float: left !important;
+  }
+  .float-md-end {
+    float: right !important;
+  }
+  .float-md-none {
+    float: none !important;
+  }
+  .object-fit-md-contain {
+    -o-object-fit: contain !important;
+       object-fit: contain !important;
+  }
+  .object-fit-md-cover {
+    -o-object-fit: cover !important;
+       object-fit: cover !important;
+  }
+  .object-fit-md-fill {
+    -o-object-fit: fill !important;
+       object-fit: fill !important;
+  }
+  .object-fit-md-scale {
+    -o-object-fit: scale-down !important;
+       object-fit: scale-down !important;
+  }
+  .object-fit-md-none {
+    -o-object-fit: none !important;
+       object-fit: none !important;
+  }
+  .d-md-inline {
+    display: inline !important;
+  }
+  .d-md-inline-block {
+    display: inline-block !important;
+  }
+  .d-md-block {
+    display: block !important;
+  }
+  .d-md-grid {
+    display: grid !important;
+  }
+  .d-md-inline-grid {
+    display: inline-grid !important;
+  }
+  .d-md-table {
+    display: table !important;
+  }
+  .d-md-table-row {
+    display: table-row !important;
+  }
+  .d-md-table-cell {
+    display: table-cell !important;
+  }
+  .d-md-flex {
+    display: flex !important;
+  }
+  .d-md-inline-flex {
+    display: inline-flex !important;
+  }
+  .d-md-none {
+    display: none !important;
+  }
+  .flex-md-fill {
+    flex: 1 1 auto !important;
+  }
+  .flex-md-row {
+    flex-direction: row !important;
+  }
+  .flex-md-column {
+    flex-direction: column !important;
+  }
+  .flex-md-row-reverse {
+    flex-direction: row-reverse !important;
+  }
+  .flex-md-column-reverse {
+    flex-direction: column-reverse !important;
+  }
+  .flex-md-grow-0 {
+    flex-grow: 0 !important;
+  }
+  .flex-md-grow-1 {
+    flex-grow: 1 !important;
+  }
+  .flex-md-shrink-0 {
+    flex-shrink: 0 !important;
+  }
+  .flex-md-shrink-1 {
+    flex-shrink: 1 !important;
+  }
+  .flex-md-wrap {
+    flex-wrap: wrap !important;
+  }
+  .flex-md-nowrap {
+    flex-wrap: nowrap !important;
+  }
+  .flex-md-wrap-reverse {
+    flex-wrap: wrap-reverse !important;
+  }
+  .justify-content-md-start {
+    justify-content: flex-start !important;
+  }
+  .justify-content-md-end {
+    justify-content: flex-end !important;
+  }
+  .justify-content-md-center {
+    justify-content: center !important;
+  }
+  .justify-content-md-between {
+    justify-content: space-between !important;
+  }
+  .justify-content-md-around {
+    justify-content: space-around !important;
+  }
+  .justify-content-md-evenly {
+    justify-content: space-evenly !important;
+  }
+  .align-items-md-start {
+    align-items: flex-start !important;
+  }
+  .align-items-md-end {
+    align-items: flex-end !important;
+  }
+  .align-items-md-center {
+    align-items: center !important;
+  }
+  .align-items-md-baseline {
+    align-items: baseline !important;
+  }
+  .align-items-md-stretch {
+    align-items: stretch !important;
+  }
+  .align-content-md-start {
+    align-content: flex-start !important;
+  }
+  .align-content-md-end {
+    align-content: flex-end !important;
+  }
+  .align-content-md-center {
+    align-content: center !important;
+  }
+  .align-content-md-between {
+    align-content: space-between !important;
+  }
+  .align-content-md-around {
+    align-content: space-around !important;
+  }
+  .align-content-md-stretch {
+    align-content: stretch !important;
+  }
+  .align-self-md-auto {
+    align-self: auto !important;
+  }
+  .align-self-md-start {
+    align-self: flex-start !important;
+  }
+  .align-self-md-end {
+    align-self: flex-end !important;
+  }
+  .align-self-md-center {
+    align-self: center !important;
+  }
+  .align-self-md-baseline {
+    align-self: baseline !important;
+  }
+  .align-self-md-stretch {
+    align-self: stretch !important;
+  }
+  .order-md-first {
+    order: -1 !important;
+  }
+  .order-md-0 {
+    order: 0 !important;
+  }
+  .order-md-1 {
+    order: 1 !important;
+  }
+  .order-md-2 {
+    order: 2 !important;
+  }
+  .order-md-3 {
+    order: 3 !important;
+  }
+  .order-md-4 {
+    order: 4 !important;
+  }
+  .order-md-5 {
+    order: 5 !important;
+  }
+  .order-md-last {
+    order: 6 !important;
+  }
+  .m-md-0 {
+    margin: 0 !important;
+  }
+  .m-md-1 {
+    margin: 0.25rem !important;
+  }
+  .m-md-2 {
+    margin: 0.5rem !important;
+  }
+  .m-md-3 {
+    margin: 1rem !important;
+  }
+  .m-md-4 {
+    margin: 1.5rem !important;
+  }
+  .m-md-5 {
+    margin: 2rem !important;
+  }
+  .m-md-6 {
+    margin: 3rem !important;
+  }
+  .m-md-7 {
+    margin: 5rem !important;
+  }
+  .m-md-8 {
+    margin: 8rem !important;
+  }
+  .m-md-auto {
+    margin: auto !important;
+  }
+  .mx-md-0 {
+    margin-right: 0 !important;
+    margin-left: 0 !important;
+  }
+  .mx-md-1 {
+    margin-right: 0.25rem !important;
+    margin-left: 0.25rem !important;
+  }
+  .mx-md-2 {
+    margin-right: 0.5rem !important;
+    margin-left: 0.5rem !important;
+  }
+  .mx-md-3 {
+    margin-right: 1rem !important;
+    margin-left: 1rem !important;
+  }
+  .mx-md-4 {
+    margin-right: 1.5rem !important;
+    margin-left: 1.5rem !important;
+  }
+  .mx-md-5 {
+    margin-right: 2rem !important;
+    margin-left: 2rem !important;
+  }
+  .mx-md-6 {
+    margin-right: 3rem !important;
+    margin-left: 3rem !important;
+  }
+  .mx-md-7 {
+    margin-right: 5rem !important;
+    margin-left: 5rem !important;
+  }
+  .mx-md-8 {
+    margin-right: 8rem !important;
+    margin-left: 8rem !important;
+  }
+  .mx-md-auto {
+    margin-right: auto !important;
+    margin-left: auto !important;
+  }
+  .my-md-0 {
+    margin-top: 0 !important;
+    margin-bottom: 0 !important;
+  }
+  .my-md-1 {
+    margin-top: 0.25rem !important;
+    margin-bottom: 0.25rem !important;
+  }
+  .my-md-2 {
+    margin-top: 0.5rem !important;
+    margin-bottom: 0.5rem !important;
+  }
+  .my-md-3 {
+    margin-top: 1rem !important;
+    margin-bottom: 1rem !important;
+  }
+  .my-md-4 {
+    margin-top: 1.5rem !important;
+    margin-bottom: 1.5rem !important;
+  }
+  .my-md-5 {
+    margin-top: 2rem !important;
+    margin-bottom: 2rem !important;
+  }
+  .my-md-6 {
+    margin-top: 3rem !important;
+    margin-bottom: 3rem !important;
+  }
+  .my-md-7 {
+    margin-top: 5rem !important;
+    margin-bottom: 5rem !important;
+  }
+  .my-md-8 {
+    margin-top: 8rem !important;
+    margin-bottom: 8rem !important;
+  }
+  .my-md-auto {
+    margin-top: auto !important;
+    margin-bottom: auto !important;
+  }
+  .mt-md-0 {
+    margin-top: 0 !important;
+  }
+  .mt-md-1 {
+    margin-top: 0.25rem !important;
+  }
+  .mt-md-2 {
+    margin-top: 0.5rem !important;
+  }
+  .mt-md-3 {
+    margin-top: 1rem !important;
+  }
+  .mt-md-4 {
+    margin-top: 1.5rem !important;
+  }
+  .mt-md-5 {
+    margin-top: 2rem !important;
+  }
+  .mt-md-6 {
+    margin-top: 3rem !important;
+  }
+  .mt-md-7 {
+    margin-top: 5rem !important;
+  }
+  .mt-md-8 {
+    margin-top: 8rem !important;
+  }
+  .mt-md-auto {
+    margin-top: auto !important;
+  }
+  .me-md-0 {
+    margin-right: 0 !important;
+  }
+  .me-md-1 {
+    margin-right: 0.25rem !important;
+  }
+  .me-md-2 {
+    margin-right: 0.5rem !important;
+  }
+  .me-md-3 {
+    margin-right: 1rem !important;
+  }
+  .me-md-4 {
+    margin-right: 1.5rem !important;
+  }
+  .me-md-5 {
+    margin-right: 2rem !important;
+  }
+  .me-md-6 {
+    margin-right: 3rem !important;
+  }
+  .me-md-7 {
+    margin-right: 5rem !important;
+  }
+  .me-md-8 {
+    margin-right: 8rem !important;
+  }
+  .me-md-auto {
+    margin-right: auto !important;
+  }
+  .mb-md-0 {
+    margin-bottom: 0 !important;
+  }
+  .mb-md-1 {
+    margin-bottom: 0.25rem !important;
+  }
+  .mb-md-2 {
+    margin-bottom: 0.5rem !important;
+  }
+  .mb-md-3 {
+    margin-bottom: 1rem !important;
+  }
+  .mb-md-4 {
+    margin-bottom: 1.5rem !important;
+  }
+  .mb-md-5 {
+    margin-bottom: 2rem !important;
+  }
+  .mb-md-6 {
+    margin-bottom: 3rem !important;
+  }
+  .mb-md-7 {
+    margin-bottom: 5rem !important;
+  }
+  .mb-md-8 {
+    margin-bottom: 8rem !important;
+  }
+  .mb-md-auto {
+    margin-bottom: auto !important;
+  }
+  .ms-md-0 {
+    margin-left: 0 !important;
+  }
+  .ms-md-1 {
+    margin-left: 0.25rem !important;
+  }
+  .ms-md-2 {
+    margin-left: 0.5rem !important;
+  }
+  .ms-md-3 {
+    margin-left: 1rem !important;
+  }
+  .ms-md-4 {
+    margin-left: 1.5rem !important;
+  }
+  .ms-md-5 {
+    margin-left: 2rem !important;
+  }
+  .ms-md-6 {
+    margin-left: 3rem !important;
+  }
+  .ms-md-7 {
+    margin-left: 5rem !important;
+  }
+  .ms-md-8 {
+    margin-left: 8rem !important;
+  }
+  .ms-md-auto {
+    margin-left: auto !important;
+  }
+  .p-md-0 {
+    padding: 0 !important;
+  }
+  .p-md-1 {
+    padding: 0.25rem !important;
+  }
+  .p-md-2 {
+    padding: 0.5rem !important;
+  }
+  .p-md-3 {
+    padding: 1rem !important;
+  }
+  .p-md-4 {
+    padding: 1.5rem !important;
+  }
+  .p-md-5 {
+    padding: 2rem !important;
+  }
+  .p-md-6 {
+    padding: 3rem !important;
+  }
+  .p-md-7 {
+    padding: 5rem !important;
+  }
+  .p-md-8 {
+    padding: 8rem !important;
+  }
+  .px-md-0 {
+    padding-right: 0 !important;
+    padding-left: 0 !important;
+  }
+  .px-md-1 {
+    padding-right: 0.25rem !important;
+    padding-left: 0.25rem !important;
+  }
+  .px-md-2 {
+    padding-right: 0.5rem !important;
+    padding-left: 0.5rem !important;
+  }
+  .px-md-3 {
+    padding-right: 1rem !important;
+    padding-left: 1rem !important;
+  }
+  .px-md-4 {
+    padding-right: 1.5rem !important;
+    padding-left: 1.5rem !important;
+  }
+  .px-md-5 {
+    padding-right: 2rem !important;
+    padding-left: 2rem !important;
+  }
+  .px-md-6 {
+    padding-right: 3rem !important;
+    padding-left: 3rem !important;
+  }
+  .px-md-7 {
+    padding-right: 5rem !important;
+    padding-left: 5rem !important;
+  }
+  .px-md-8 {
+    padding-right: 8rem !important;
+    padding-left: 8rem !important;
+  }
+  .py-md-0 {
+    padding-top: 0 !important;
+    padding-bottom: 0 !important;
+  }
+  .py-md-1 {
+    padding-top: 0.25rem !important;
+    padding-bottom: 0.25rem !important;
+  }
+  .py-md-2 {
+    padding-top: 0.5rem !important;
+    padding-bottom: 0.5rem !important;
+  }
+  .py-md-3 {
+    padding-top: 1rem !important;
+    padding-bottom: 1rem !important;
+  }
+  .py-md-4 {
+    padding-top: 1.5rem !important;
+    padding-bottom: 1.5rem !important;
+  }
+  .py-md-5 {
+    padding-top: 2rem !important;
+    padding-bottom: 2rem !important;
+  }
+  .py-md-6 {
+    padding-top: 3rem !important;
+    padding-bottom: 3rem !important;
+  }
+  .py-md-7 {
+    padding-top: 5rem !important;
+    padding-bottom: 5rem !important;
+  }
+  .py-md-8 {
+    padding-top: 8rem !important;
+    padding-bottom: 8rem !important;
+  }
+  .pt-md-0 {
+    padding-top: 0 !important;
+  }
+  .pt-md-1 {
+    padding-top: 0.25rem !important;
+  }
+  .pt-md-2 {
+    padding-top: 0.5rem !important;
+  }
+  .pt-md-3 {
+    padding-top: 1rem !important;
+  }
+  .pt-md-4 {
+    padding-top: 1.5rem !important;
+  }
+  .pt-md-5 {
+    padding-top: 2rem !important;
+  }
+  .pt-md-6 {
+    padding-top: 3rem !important;
+  }
+  .pt-md-7 {
+    padding-top: 5rem !important;
+  }
+  .pt-md-8 {
+    padding-top: 8rem !important;
+  }
+  .pe-md-0 {
+    padding-right: 0 !important;
+  }
+  .pe-md-1 {
+    padding-right: 0.25rem !important;
+  }
+  .pe-md-2 {
+    padding-right: 0.5rem !important;
+  }
+  .pe-md-3 {
+    padding-right: 1rem !important;
+  }
+  .pe-md-4 {
+    padding-right: 1.5rem !important;
+  }
+  .pe-md-5 {
+    padding-right: 2rem !important;
+  }
+  .pe-md-6 {
+    padding-right: 3rem !important;
+  }
+  .pe-md-7 {
+    padding-right: 5rem !important;
+  }
+  .pe-md-8 {
+    padding-right: 8rem !important;
+  }
+  .pb-md-0 {
+    padding-bottom: 0 !important;
+  }
+  .pb-md-1 {
+    padding-bottom: 0.25rem !important;
+  }
+  .pb-md-2 {
+    padding-bottom: 0.5rem !important;
+  }
+  .pb-md-3 {
+    padding-bottom: 1rem !important;
+  }
+  .pb-md-4 {
+    padding-bottom: 1.5rem !important;
+  }
+  .pb-md-5 {
+    padding-bottom: 2rem !important;
+  }
+  .pb-md-6 {
+    padding-bottom: 3rem !important;
+  }
+  .pb-md-7 {
+    padding-bottom: 5rem !important;
+  }
+  .pb-md-8 {
+    padding-bottom: 8rem !important;
+  }
+  .ps-md-0 {
+    padding-left: 0 !important;
+  }
+  .ps-md-1 {
+    padding-left: 0.25rem !important;
+  }
+  .ps-md-2 {
+    padding-left: 0.5rem !important;
+  }
+  .ps-md-3 {
+    padding-left: 1rem !important;
+  }
+  .ps-md-4 {
+    padding-left: 1.5rem !important;
+  }
+  .ps-md-5 {
+    padding-left: 2rem !important;
+  }
+  .ps-md-6 {
+    padding-left: 3rem !important;
+  }
+  .ps-md-7 {
+    padding-left: 5rem !important;
+  }
+  .ps-md-8 {
+    padding-left: 8rem !important;
+  }
+  .gap-md-0 {
+    gap: 0 !important;
+  }
+  .gap-md-1 {
+    gap: 0.25rem !important;
+  }
+  .gap-md-2 {
+    gap: 0.5rem !important;
+  }
+  .gap-md-3 {
+    gap: 1rem !important;
+  }
+  .gap-md-4 {
+    gap: 1.5rem !important;
+  }
+  .gap-md-5 {
+    gap: 2rem !important;
+  }
+  .gap-md-6 {
+    gap: 3rem !important;
+  }
+  .gap-md-7 {
+    gap: 5rem !important;
+  }
+  .gap-md-8 {
+    gap: 8rem !important;
+  }
+  .row-gap-md-0 {
+    row-gap: 0 !important;
+  }
+  .row-gap-md-1 {
+    row-gap: 0.25rem !important;
+  }
+  .row-gap-md-2 {
+    row-gap: 0.5rem !important;
+  }
+  .row-gap-md-3 {
+    row-gap: 1rem !important;
+  }
+  .row-gap-md-4 {
+    row-gap: 1.5rem !important;
+  }
+  .row-gap-md-5 {
+    row-gap: 2rem !important;
+  }
+  .row-gap-md-6 {
+    row-gap: 3rem !important;
+  }
+  .row-gap-md-7 {
+    row-gap: 5rem !important;
+  }
+  .row-gap-md-8 {
+    row-gap: 8rem !important;
+  }
+  .column-gap-md-0 {
+    -moz-column-gap: 0 !important;
+         column-gap: 0 !important;
+  }
+  .column-gap-md-1 {
+    -moz-column-gap: 0.25rem !important;
+         column-gap: 0.25rem !important;
+  }
+  .column-gap-md-2 {
+    -moz-column-gap: 0.5rem !important;
+         column-gap: 0.5rem !important;
+  }
+  .column-gap-md-3 {
+    -moz-column-gap: 1rem !important;
+         column-gap: 1rem !important;
+  }
+  .column-gap-md-4 {
+    -moz-column-gap: 1.5rem !important;
+         column-gap: 1.5rem !important;
+  }
+  .column-gap-md-5 {
+    -moz-column-gap: 2rem !important;
+         column-gap: 2rem !important;
+  }
+  .column-gap-md-6 {
+    -moz-column-gap: 3rem !important;
+         column-gap: 3rem !important;
+  }
+  .column-gap-md-7 {
+    -moz-column-gap: 5rem !important;
+         column-gap: 5rem !important;
+  }
+  .column-gap-md-8 {
+    -moz-column-gap: 8rem !important;
+         column-gap: 8rem !important;
+  }
+  .text-md-start {
+    text-align: left !important;
+  }
+  .text-md-end {
+    text-align: right !important;
+  }
+  .text-md-center {
+    text-align: center !important;
+  }
+  .columns-md-2 {
+    -moz-columns: 2 !important;
+         columns: 2 !important;
+  }
+  .columns-md-3 {
+    -moz-columns: 3 !important;
+         columns: 3 !important;
+  }
+  .columns-md-4 {
+    -moz-columns: 4 !important;
+         columns: 4 !important;
+  }
+}
+@media (min-width: 992px) {
+  .float-lg-start {
+    float: left !important;
+  }
+  .float-lg-end {
+    float: right !important;
+  }
+  .float-lg-none {
+    float: none !important;
+  }
+  .object-fit-lg-contain {
+    -o-object-fit: contain !important;
+       object-fit: contain !important;
+  }
+  .object-fit-lg-cover {
+    -o-object-fit: cover !important;
+       object-fit: cover !important;
+  }
+  .object-fit-lg-fill {
+    -o-object-fit: fill !important;
+       object-fit: fill !important;
+  }
+  .object-fit-lg-scale {
+    -o-object-fit: scale-down !important;
+       object-fit: scale-down !important;
+  }
+  .object-fit-lg-none {
+    -o-object-fit: none !important;
+       object-fit: none !important;
+  }
+  .d-lg-inline {
+    display: inline !important;
+  }
+  .d-lg-inline-block {
+    display: inline-block !important;
+  }
+  .d-lg-block {
+    display: block !important;
+  }
+  .d-lg-grid {
+    display: grid !important;
+  }
+  .d-lg-inline-grid {
+    display: inline-grid !important;
+  }
+  .d-lg-table {
+    display: table !important;
+  }
+  .d-lg-table-row {
+    display: table-row !important;
+  }
+  .d-lg-table-cell {
+    display: table-cell !important;
+  }
+  .d-lg-flex {
+    display: flex !important;
+  }
+  .d-lg-inline-flex {
+    display: inline-flex !important;
+  }
+  .d-lg-none {
+    display: none !important;
+  }
+  .flex-lg-fill {
+    flex: 1 1 auto !important;
+  }
+  .flex-lg-row {
+    flex-direction: row !important;
+  }
+  .flex-lg-column {
+    flex-direction: column !important;
+  }
+  .flex-lg-row-reverse {
+    flex-direction: row-reverse !important;
+  }
+  .flex-lg-column-reverse {
+    flex-direction: column-reverse !important;
+  }
+  .flex-lg-grow-0 {
+    flex-grow: 0 !important;
+  }
+  .flex-lg-grow-1 {
+    flex-grow: 1 !important;
+  }
+  .flex-lg-shrink-0 {
+    flex-shrink: 0 !important;
+  }
+  .flex-lg-shrink-1 {
+    flex-shrink: 1 !important;
+  }
+  .flex-lg-wrap {
+    flex-wrap: wrap !important;
+  }
+  .flex-lg-nowrap {
+    flex-wrap: nowrap !important;
+  }
+  .flex-lg-wrap-reverse {
+    flex-wrap: wrap-reverse !important;
+  }
+  .justify-content-lg-start {
+    justify-content: flex-start !important;
+  }
+  .justify-content-lg-end {
+    justify-content: flex-end !important;
+  }
+  .justify-content-lg-center {
+    justify-content: center !important;
+  }
+  .justify-content-lg-between {
+    justify-content: space-between !important;
+  }
+  .justify-content-lg-around {
+    justify-content: space-around !important;
+  }
+  .justify-content-lg-evenly {
+    justify-content: space-evenly !important;
+  }
+  .align-items-lg-start {
+    align-items: flex-start !important;
+  }
+  .align-items-lg-end {
+    align-items: flex-end !important;
+  }
+  .align-items-lg-center {
+    align-items: center !important;
+  }
+  .align-items-lg-baseline {
+    align-items: baseline !important;
+  }
+  .align-items-lg-stretch {
+    align-items: stretch !important;
+  }
+  .align-content-lg-start {
+    align-content: flex-start !important;
+  }
+  .align-content-lg-end {
+    align-content: flex-end !important;
+  }
+  .align-content-lg-center {
+    align-content: center !important;
+  }
+  .align-content-lg-between {
+    align-content: space-between !important;
+  }
+  .align-content-lg-around {
+    align-content: space-around !important;
+  }
+  .align-content-lg-stretch {
+    align-content: stretch !important;
+  }
+  .align-self-lg-auto {
+    align-self: auto !important;
+  }
+  .align-self-lg-start {
+    align-self: flex-start !important;
+  }
+  .align-self-lg-end {
+    align-self: flex-end !important;
+  }
+  .align-self-lg-center {
+    align-self: center !important;
+  }
+  .align-self-lg-baseline {
+    align-self: baseline !important;
+  }
+  .align-self-lg-stretch {
+    align-self: stretch !important;
+  }
+  .order-lg-first {
+    order: -1 !important;
+  }
+  .order-lg-0 {
+    order: 0 !important;
+  }
+  .order-lg-1 {
+    order: 1 !important;
+  }
+  .order-lg-2 {
+    order: 2 !important;
+  }
+  .order-lg-3 {
+    order: 3 !important;
+  }
+  .order-lg-4 {
+    order: 4 !important;
+  }
+  .order-lg-5 {
+    order: 5 !important;
+  }
+  .order-lg-last {
+    order: 6 !important;
+  }
+  .m-lg-0 {
+    margin: 0 !important;
+  }
+  .m-lg-1 {
+    margin: 0.25rem !important;
+  }
+  .m-lg-2 {
+    margin: 0.5rem !important;
+  }
+  .m-lg-3 {
+    margin: 1rem !important;
+  }
+  .m-lg-4 {
+    margin: 1.5rem !important;
+  }
+  .m-lg-5 {
+    margin: 2rem !important;
+  }
+  .m-lg-6 {
+    margin: 3rem !important;
+  }
+  .m-lg-7 {
+    margin: 5rem !important;
+  }
+  .m-lg-8 {
+    margin: 8rem !important;
+  }
+  .m-lg-auto {
+    margin: auto !important;
+  }
+  .mx-lg-0 {
+    margin-right: 0 !important;
+    margin-left: 0 !important;
+  }
+  .mx-lg-1 {
+    margin-right: 0.25rem !important;
+    margin-left: 0.25rem !important;
+  }
+  .mx-lg-2 {
+    margin-right: 0.5rem !important;
+    margin-left: 0.5rem !important;
+  }
+  .mx-lg-3 {
+    margin-right: 1rem !important;
+    margin-left: 1rem !important;
+  }
+  .mx-lg-4 {
+    margin-right: 1.5rem !important;
+    margin-left: 1.5rem !important;
+  }
+  .mx-lg-5 {
+    margin-right: 2rem !important;
+    margin-left: 2rem !important;
+  }
+  .mx-lg-6 {
+    margin-right: 3rem !important;
+    margin-left: 3rem !important;
+  }
+  .mx-lg-7 {
+    margin-right: 5rem !important;
+    margin-left: 5rem !important;
+  }
+  .mx-lg-8 {
+    margin-right: 8rem !important;
+    margin-left: 8rem !important;
+  }
+  .mx-lg-auto {
+    margin-right: auto !important;
+    margin-left: auto !important;
+  }
+  .my-lg-0 {
+    margin-top: 0 !important;
+    margin-bottom: 0 !important;
+  }
+  .my-lg-1 {
+    margin-top: 0.25rem !important;
+    margin-bottom: 0.25rem !important;
+  }
+  .my-lg-2 {
+    margin-top: 0.5rem !important;
+    margin-bottom: 0.5rem !important;
+  }
+  .my-lg-3 {
+    margin-top: 1rem !important;
+    margin-bottom: 1rem !important;
+  }
+  .my-lg-4 {
+    margin-top: 1.5rem !important;
+    margin-bottom: 1.5rem !important;
+  }
+  .my-lg-5 {
+    margin-top: 2rem !important;
+    margin-bottom: 2rem !important;
+  }
+  .my-lg-6 {
+    margin-top: 3rem !important;
+    margin-bottom: 3rem !important;
+  }
+  .my-lg-7 {
+    margin-top: 5rem !important;
+    margin-bottom: 5rem !important;
+  }
+  .my-lg-8 {
+    margin-top: 8rem !important;
+    margin-bottom: 8rem !important;
+  }
+  .my-lg-auto {
+    margin-top: auto !important;
+    margin-bottom: auto !important;
+  }
+  .mt-lg-0 {
+    margin-top: 0 !important;
+  }
+  .mt-lg-1 {
+    margin-top: 0.25rem !important;
+  }
+  .mt-lg-2 {
+    margin-top: 0.5rem !important;
+  }
+  .mt-lg-3 {
+    margin-top: 1rem !important;
+  }
+  .mt-lg-4 {
+    margin-top: 1.5rem !important;
+  }
+  .mt-lg-5 {
+    margin-top: 2rem !important;
+  }
+  .mt-lg-6 {
+    margin-top: 3rem !important;
+  }
+  .mt-lg-7 {
+    margin-top: 5rem !important;
+  }
+  .mt-lg-8 {
+    margin-top: 8rem !important;
+  }
+  .mt-lg-auto {
+    margin-top: auto !important;
+  }
+  .me-lg-0 {
+    margin-right: 0 !important;
+  }
+  .me-lg-1 {
+    margin-right: 0.25rem !important;
+  }
+  .me-lg-2 {
+    margin-right: 0.5rem !important;
+  }
+  .me-lg-3 {
+    margin-right: 1rem !important;
+  }
+  .me-lg-4 {
+    margin-right: 1.5rem !important;
+  }
+  .me-lg-5 {
+    margin-right: 2rem !important;
+  }
+  .me-lg-6 {
+    margin-right: 3rem !important;
+  }
+  .me-lg-7 {
+    margin-right: 5rem !important;
+  }
+  .me-lg-8 {
+    margin-right: 8rem !important;
+  }
+  .me-lg-auto {
+    margin-right: auto !important;
+  }
+  .mb-lg-0 {
+    margin-bottom: 0 !important;
+  }
+  .mb-lg-1 {
+    margin-bottom: 0.25rem !important;
+  }
+  .mb-lg-2 {
+    margin-bottom: 0.5rem !important;
+  }
+  .mb-lg-3 {
+    margin-bottom: 1rem !important;
+  }
+  .mb-lg-4 {
+    margin-bottom: 1.5rem !important;
+  }
+  .mb-lg-5 {
+    margin-bottom: 2rem !important;
+  }
+  .mb-lg-6 {
+    margin-bottom: 3rem !important;
+  }
+  .mb-lg-7 {
+    margin-bottom: 5rem !important;
+  }
+  .mb-lg-8 {
+    margin-bottom: 8rem !important;
+  }
+  .mb-lg-auto {
+    margin-bottom: auto !important;
+  }
+  .ms-lg-0 {
+    margin-left: 0 !important;
+  }
+  .ms-lg-1 {
+    margin-left: 0.25rem !important;
+  }
+  .ms-lg-2 {
+    margin-left: 0.5rem !important;
+  }
+  .ms-lg-3 {
+    margin-left: 1rem !important;
+  }
+  .ms-lg-4 {
+    margin-left: 1.5rem !important;
+  }
+  .ms-lg-5 {
+    margin-left: 2rem !important;
+  }
+  .ms-lg-6 {
+    margin-left: 3rem !important;
+  }
+  .ms-lg-7 {
+    margin-left: 5rem !important;
+  }
+  .ms-lg-8 {
+    margin-left: 8rem !important;
+  }
+  .ms-lg-auto {
+    margin-left: auto !important;
+  }
+  .p-lg-0 {
+    padding: 0 !important;
+  }
+  .p-lg-1 {
+    padding: 0.25rem !important;
+  }
+  .p-lg-2 {
+    padding: 0.5rem !important;
+  }
+  .p-lg-3 {
+    padding: 1rem !important;
+  }
+  .p-lg-4 {
+    padding: 1.5rem !important;
+  }
+  .p-lg-5 {
+    padding: 2rem !important;
+  }
+  .p-lg-6 {
+    padding: 3rem !important;
+  }
+  .p-lg-7 {
+    padding: 5rem !important;
+  }
+  .p-lg-8 {
+    padding: 8rem !important;
+  }
+  .px-lg-0 {
+    padding-right: 0 !important;
+    padding-left: 0 !important;
+  }
+  .px-lg-1 {
+    padding-right: 0.25rem !important;
+    padding-left: 0.25rem !important;
+  }
+  .px-lg-2 {
+    padding-right: 0.5rem !important;
+    padding-left: 0.5rem !important;
+  }
+  .px-lg-3 {
+    padding-right: 1rem !important;
+    padding-left: 1rem !important;
+  }
+  .px-lg-4 {
+    padding-right: 1.5rem !important;
+    padding-left: 1.5rem !important;
+  }
+  .px-lg-5 {
+    padding-right: 2rem !important;
+    padding-left: 2rem !important;
+  }
+  .px-lg-6 {
+    padding-right: 3rem !important;
+    padding-left: 3rem !important;
+  }
+  .px-lg-7 {
+    padding-right: 5rem !important;
+    padding-left: 5rem !important;
+  }
+  .px-lg-8 {
+    padding-right: 8rem !important;
+    padding-left: 8rem !important;
+  }
+  .py-lg-0 {
+    padding-top: 0 !important;
+    padding-bottom: 0 !important;
+  }
+  .py-lg-1 {
+    padding-top: 0.25rem !important;
+    padding-bottom: 0.25rem !important;
+  }
+  .py-lg-2 {
+    padding-top: 0.5rem !important;
+    padding-bottom: 0.5rem !important;
+  }
+  .py-lg-3 {
+    padding-top: 1rem !important;
+    padding-bottom: 1rem !important;
+  }
+  .py-lg-4 {
+    padding-top: 1.5rem !important;
+    padding-bottom: 1.5rem !important;
+  }
+  .py-lg-5 {
+    padding-top: 2rem !important;
+    padding-bottom: 2rem !important;
+  }
+  .py-lg-6 {
+    padding-top: 3rem !important;
+    padding-bottom: 3rem !important;
+  }
+  .py-lg-7 {
+    padding-top: 5rem !important;
+    padding-bottom: 5rem !important;
+  }
+  .py-lg-8 {
+    padding-top: 8rem !important;
+    padding-bottom: 8rem !important;
+  }
+  .pt-lg-0 {
+    padding-top: 0 !important;
+  }
+  .pt-lg-1 {
+    padding-top: 0.25rem !important;
+  }
+  .pt-lg-2 {
+    padding-top: 0.5rem !important;
+  }
+  .pt-lg-3 {
+    padding-top: 1rem !important;
+  }
+  .pt-lg-4 {
+    padding-top: 1.5rem !important;
+  }
+  .pt-lg-5 {
+    padding-top: 2rem !important;
+  }
+  .pt-lg-6 {
+    padding-top: 3rem !important;
+  }
+  .pt-lg-7 {
+    padding-top: 5rem !important;
+  }
+  .pt-lg-8 {
+    padding-top: 8rem !important;
+  }
+  .pe-lg-0 {
+    padding-right: 0 !important;
+  }
+  .pe-lg-1 {
+    padding-right: 0.25rem !important;
+  }
+  .pe-lg-2 {
+    padding-right: 0.5rem !important;
+  }
+  .pe-lg-3 {
+    padding-right: 1rem !important;
+  }
+  .pe-lg-4 {
+    padding-right: 1.5rem !important;
+  }
+  .pe-lg-5 {
+    padding-right: 2rem !important;
+  }
+  .pe-lg-6 {
+    padding-right: 3rem !important;
+  }
+  .pe-lg-7 {
+    padding-right: 5rem !important;
+  }
+  .pe-lg-8 {
+    padding-right: 8rem !important;
+  }
+  .pb-lg-0 {
+    padding-bottom: 0 !important;
+  }
+  .pb-lg-1 {
+    padding-bottom: 0.25rem !important;
+  }
+  .pb-lg-2 {
+    padding-bottom: 0.5rem !important;
+  }
+  .pb-lg-3 {
+    padding-bottom: 1rem !important;
+  }
+  .pb-lg-4 {
+    padding-bottom: 1.5rem !important;
+  }
+  .pb-lg-5 {
+    padding-bottom: 2rem !important;
+  }
+  .pb-lg-6 {
+    padding-bottom: 3rem !important;
+  }
+  .pb-lg-7 {
+    padding-bottom: 5rem !important;
+  }
+  .pb-lg-8 {
+    padding-bottom: 8rem !important;
+  }
+  .ps-lg-0 {
+    padding-left: 0 !important;
+  }
+  .ps-lg-1 {
+    padding-left: 0.25rem !important;
+  }
+  .ps-lg-2 {
+    padding-left: 0.5rem !important;
+  }
+  .ps-lg-3 {
+    padding-left: 1rem !important;
+  }
+  .ps-lg-4 {
+    padding-left: 1.5rem !important;
+  }
+  .ps-lg-5 {
+    padding-left: 2rem !important;
+  }
+  .ps-lg-6 {
+    padding-left: 3rem !important;
+  }
+  .ps-lg-7 {
+    padding-left: 5rem !important;
+  }
+  .ps-lg-8 {
+    padding-left: 8rem !important;
+  }
+  .gap-lg-0 {
+    gap: 0 !important;
+  }
+  .gap-lg-1 {
+    gap: 0.25rem !important;
+  }
+  .gap-lg-2 {
+    gap: 0.5rem !important;
+  }
+  .gap-lg-3 {
+    gap: 1rem !important;
+  }
+  .gap-lg-4 {
+    gap: 1.5rem !important;
+  }
+  .gap-lg-5 {
+    gap: 2rem !important;
+  }
+  .gap-lg-6 {
+    gap: 3rem !important;
+  }
+  .gap-lg-7 {
+    gap: 5rem !important;
+  }
+  .gap-lg-8 {
+    gap: 8rem !important;
+  }
+  .row-gap-lg-0 {
+    row-gap: 0 !important;
+  }
+  .row-gap-lg-1 {
+    row-gap: 0.25rem !important;
+  }
+  .row-gap-lg-2 {
+    row-gap: 0.5rem !important;
+  }
+  .row-gap-lg-3 {
+    row-gap: 1rem !important;
+  }
+  .row-gap-lg-4 {
+    row-gap: 1.5rem !important;
+  }
+  .row-gap-lg-5 {
+    row-gap: 2rem !important;
+  }
+  .row-gap-lg-6 {
+    row-gap: 3rem !important;
+  }
+  .row-gap-lg-7 {
+    row-gap: 5rem !important;
+  }
+  .row-gap-lg-8 {
+    row-gap: 8rem !important;
+  }
+  .column-gap-lg-0 {
+    -moz-column-gap: 0 !important;
+         column-gap: 0 !important;
+  }
+  .column-gap-lg-1 {
+    -moz-column-gap: 0.25rem !important;
+         column-gap: 0.25rem !important;
+  }
+  .column-gap-lg-2 {
+    -moz-column-gap: 0.5rem !important;
+         column-gap: 0.5rem !important;
+  }
+  .column-gap-lg-3 {
+    -moz-column-gap: 1rem !important;
+         column-gap: 1rem !important;
+  }
+  .column-gap-lg-4 {
+    -moz-column-gap: 1.5rem !important;
+         column-gap: 1.5rem !important;
+  }
+  .column-gap-lg-5 {
+    -moz-column-gap: 2rem !important;
+         column-gap: 2rem !important;
+  }
+  .column-gap-lg-6 {
+    -moz-column-gap: 3rem !important;
+         column-gap: 3rem !important;
+  }
+  .column-gap-lg-7 {
+    -moz-column-gap: 5rem !important;
+         column-gap: 5rem !important;
+  }
+  .column-gap-lg-8 {
+    -moz-column-gap: 8rem !important;
+         column-gap: 8rem !important;
+  }
+  .text-lg-start {
+    text-align: left !important;
+  }
+  .text-lg-end {
+    text-align: right !important;
+  }
+  .text-lg-center {
+    text-align: center !important;
+  }
+  .columns-lg-2 {
+    -moz-columns: 2 !important;
+         columns: 2 !important;
+  }
+  .columns-lg-3 {
+    -moz-columns: 3 !important;
+         columns: 3 !important;
+  }
+  .columns-lg-4 {
+    -moz-columns: 4 !important;
+         columns: 4 !important;
+  }
+}
+@media (min-width: 1200px) {
+  .float-xl-start {
+    float: left !important;
+  }
+  .float-xl-end {
+    float: right !important;
+  }
+  .float-xl-none {
+    float: none !important;
+  }
+  .object-fit-xl-contain {
+    -o-object-fit: contain !important;
+       object-fit: contain !important;
+  }
+  .object-fit-xl-cover {
+    -o-object-fit: cover !important;
+       object-fit: cover !important;
+  }
+  .object-fit-xl-fill {
+    -o-object-fit: fill !important;
+       object-fit: fill !important;
+  }
+  .object-fit-xl-scale {
+    -o-object-fit: scale-down !important;
+       object-fit: scale-down !important;
+  }
+  .object-fit-xl-none {
+    -o-object-fit: none !important;
+       object-fit: none !important;
+  }
+  .d-xl-inline {
+    display: inline !important;
+  }
+  .d-xl-inline-block {
+    display: inline-block !important;
+  }
+  .d-xl-block {
+    display: block !important;
+  }
+  .d-xl-grid {
+    display: grid !important;
+  }
+  .d-xl-inline-grid {
+    display: inline-grid !important;
+  }
+  .d-xl-table {
+    display: table !important;
+  }
+  .d-xl-table-row {
+    display: table-row !important;
+  }
+  .d-xl-table-cell {
+    display: table-cell !important;
+  }
+  .d-xl-flex {
+    display: flex !important;
+  }
+  .d-xl-inline-flex {
+    display: inline-flex !important;
+  }
+  .d-xl-none {
+    display: none !important;
+  }
+  .flex-xl-fill {
+    flex: 1 1 auto !important;
+  }
+  .flex-xl-row {
+    flex-direction: row !important;
+  }
+  .flex-xl-column {
+    flex-direction: column !important;
+  }
+  .flex-xl-row-reverse {
+    flex-direction: row-reverse !important;
+  }
+  .flex-xl-column-reverse {
+    flex-direction: column-reverse !important;
+  }
+  .flex-xl-grow-0 {
+    flex-grow: 0 !important;
+  }
+  .flex-xl-grow-1 {
+    flex-grow: 1 !important;
+  }
+  .flex-xl-shrink-0 {
+    flex-shrink: 0 !important;
+  }
+  .flex-xl-shrink-1 {
+    flex-shrink: 1 !important;
+  }
+  .flex-xl-wrap {
+    flex-wrap: wrap !important;
+  }
+  .flex-xl-nowrap {
+    flex-wrap: nowrap !important;
+  }
+  .flex-xl-wrap-reverse {
+    flex-wrap: wrap-reverse !important;
+  }
+  .justify-content-xl-start {
+    justify-content: flex-start !important;
+  }
+  .justify-content-xl-end {
+    justify-content: flex-end !important;
+  }
+  .justify-content-xl-center {
+    justify-content: center !important;
+  }
+  .justify-content-xl-between {
+    justify-content: space-between !important;
+  }
+  .justify-content-xl-around {
+    justify-content: space-around !important;
+  }
+  .justify-content-xl-evenly {
+    justify-content: space-evenly !important;
+  }
+  .align-items-xl-start {
+    align-items: flex-start !important;
+  }
+  .align-items-xl-end {
+    align-items: flex-end !important;
+  }
+  .align-items-xl-center {
+    align-items: center !important;
+  }
+  .align-items-xl-baseline {
+    align-items: baseline !important;
+  }
+  .align-items-xl-stretch {
+    align-items: stretch !important;
+  }
+  .align-content-xl-start {
+    align-content: flex-start !important;
+  }
+  .align-content-xl-end {
+    align-content: flex-end !important;
+  }
+  .align-content-xl-center {
+    align-content: center !important;
+  }
+  .align-content-xl-between {
+    align-content: space-between !important;
+  }
+  .align-content-xl-around {
+    align-content: space-around !important;
+  }
+  .align-content-xl-stretch {
+    align-content: stretch !important;
+  }
+  .align-self-xl-auto {
+    align-self: auto !important;
+  }
+  .align-self-xl-start {
+    align-self: flex-start !important;
+  }
+  .align-self-xl-end {
+    align-self: flex-end !important;
+  }
+  .align-self-xl-center {
+    align-self: center !important;
+  }
+  .align-self-xl-baseline {
+    align-self: baseline !important;
+  }
+  .align-self-xl-stretch {
+    align-self: stretch !important;
+  }
+  .order-xl-first {
+    order: -1 !important;
+  }
+  .order-xl-0 {
+    order: 0 !important;
+  }
+  .order-xl-1 {
+    order: 1 !important;
+  }
+  .order-xl-2 {
+    order: 2 !important;
+  }
+  .order-xl-3 {
+    order: 3 !important;
+  }
+  .order-xl-4 {
+    order: 4 !important;
+  }
+  .order-xl-5 {
+    order: 5 !important;
+  }
+  .order-xl-last {
+    order: 6 !important;
+  }
+  .m-xl-0 {
+    margin: 0 !important;
+  }
+  .m-xl-1 {
+    margin: 0.25rem !important;
+  }
+  .m-xl-2 {
+    margin: 0.5rem !important;
+  }
+  .m-xl-3 {
+    margin: 1rem !important;
+  }
+  .m-xl-4 {
+    margin: 1.5rem !important;
+  }
+  .m-xl-5 {
+    margin: 2rem !important;
+  }
+  .m-xl-6 {
+    margin: 3rem !important;
+  }
+  .m-xl-7 {
+    margin: 5rem !important;
+  }
+  .m-xl-8 {
+    margin: 8rem !important;
+  }
+  .m-xl-auto {
+    margin: auto !important;
+  }
+  .mx-xl-0 {
+    margin-right: 0 !important;
+    margin-left: 0 !important;
+  }
+  .mx-xl-1 {
+    margin-right: 0.25rem !important;
+    margin-left: 0.25rem !important;
+  }
+  .mx-xl-2 {
+    margin-right: 0.5rem !important;
+    margin-left: 0.5rem !important;
+  }
+  .mx-xl-3 {
+    margin-right: 1rem !important;
+    margin-left: 1rem !important;
+  }
+  .mx-xl-4 {
+    margin-right: 1.5rem !important;
+    margin-left: 1.5rem !important;
+  }
+  .mx-xl-5 {
+    margin-right: 2rem !important;
+    margin-left: 2rem !important;
+  }
+  .mx-xl-6 {
+    margin-right: 3rem !important;
+    margin-left: 3rem !important;
+  }
+  .mx-xl-7 {
+    margin-right: 5rem !important;
+    margin-left: 5rem !important;
+  }
+  .mx-xl-8 {
+    margin-right: 8rem !important;
+    margin-left: 8rem !important;
+  }
+  .mx-xl-auto {
+    margin-right: auto !important;
+    margin-left: auto !important;
+  }
+  .my-xl-0 {
+    margin-top: 0 !important;
+    margin-bottom: 0 !important;
+  }
+  .my-xl-1 {
+    margin-top: 0.25rem !important;
+    margin-bottom: 0.25rem !important;
+  }
+  .my-xl-2 {
+    margin-top: 0.5rem !important;
+    margin-bottom: 0.5rem !important;
+  }
+  .my-xl-3 {
+    margin-top: 1rem !important;
+    margin-bottom: 1rem !important;
+  }
+  .my-xl-4 {
+    margin-top: 1.5rem !important;
+    margin-bottom: 1.5rem !important;
+  }
+  .my-xl-5 {
+    margin-top: 2rem !important;
+    margin-bottom: 2rem !important;
+  }
+  .my-xl-6 {
+    margin-top: 3rem !important;
+    margin-bottom: 3rem !important;
+  }
+  .my-xl-7 {
+    margin-top: 5rem !important;
+    margin-bottom: 5rem !important;
+  }
+  .my-xl-8 {
+    margin-top: 8rem !important;
+    margin-bottom: 8rem !important;
+  }
+  .my-xl-auto {
+    margin-top: auto !important;
+    margin-bottom: auto !important;
+  }
+  .mt-xl-0 {
+    margin-top: 0 !important;
+  }
+  .mt-xl-1 {
+    margin-top: 0.25rem !important;
+  }
+  .mt-xl-2 {
+    margin-top: 0.5rem !important;
+  }
+  .mt-xl-3 {
+    margin-top: 1rem !important;
+  }
+  .mt-xl-4 {
+    margin-top: 1.5rem !important;
+  }
+  .mt-xl-5 {
+    margin-top: 2rem !important;
+  }
+  .mt-xl-6 {
+    margin-top: 3rem !important;
+  }
+  .mt-xl-7 {
+    margin-top: 5rem !important;
+  }
+  .mt-xl-8 {
+    margin-top: 8rem !important;
+  }
+  .mt-xl-auto {
+    margin-top: auto !important;
+  }
+  .me-xl-0 {
+    margin-right: 0 !important;
+  }
+  .me-xl-1 {
+    margin-right: 0.25rem !important;
+  }
+  .me-xl-2 {
+    margin-right: 0.5rem !important;
+  }
+  .me-xl-3 {
+    margin-right: 1rem !important;
+  }
+  .me-xl-4 {
+    margin-right: 1.5rem !important;
+  }
+  .me-xl-5 {
+    margin-right: 2rem !important;
+  }
+  .me-xl-6 {
+    margin-right: 3rem !important;
+  }
+  .me-xl-7 {
+    margin-right: 5rem !important;
+  }
+  .me-xl-8 {
+    margin-right: 8rem !important;
+  }
+  .me-xl-auto {
+    margin-right: auto !important;
+  }
+  .mb-xl-0 {
+    margin-bottom: 0 !important;
+  }
+  .mb-xl-1 {
+    margin-bottom: 0.25rem !important;
+  }
+  .mb-xl-2 {
+    margin-bottom: 0.5rem !important;
+  }
+  .mb-xl-3 {
+    margin-bottom: 1rem !important;
+  }
+  .mb-xl-4 {
+    margin-bottom: 1.5rem !important;
+  }
+  .mb-xl-5 {
+    margin-bottom: 2rem !important;
+  }
+  .mb-xl-6 {
+    margin-bottom: 3rem !important;
+  }
+  .mb-xl-7 {
+    margin-bottom: 5rem !important;
+  }
+  .mb-xl-8 {
+    margin-bottom: 8rem !important;
+  }
+  .mb-xl-auto {
+    margin-bottom: auto !important;
+  }
+  .ms-xl-0 {
+    margin-left: 0 !important;
+  }
+  .ms-xl-1 {
+    margin-left: 0.25rem !important;
+  }
+  .ms-xl-2 {
+    margin-left: 0.5rem !important;
+  }
+  .ms-xl-3 {
+    margin-left: 1rem !important;
+  }
+  .ms-xl-4 {
+    margin-left: 1.5rem !important;
+  }
+  .ms-xl-5 {
+    margin-left: 2rem !important;
+  }
+  .ms-xl-6 {
+    margin-left: 3rem !important;
+  }
+  .ms-xl-7 {
+    margin-left: 5rem !important;
+  }
+  .ms-xl-8 {
+    margin-left: 8rem !important;
+  }
+  .ms-xl-auto {
+    margin-left: auto !important;
+  }
+  .p-xl-0 {
+    padding: 0 !important;
+  }
+  .p-xl-1 {
+    padding: 0.25rem !important;
+  }
+  .p-xl-2 {
+    padding: 0.5rem !important;
+  }
+  .p-xl-3 {
+    padding: 1rem !important;
+  }
+  .p-xl-4 {
+    padding: 1.5rem !important;
+  }
+  .p-xl-5 {
+    padding: 2rem !important;
+  }
+  .p-xl-6 {
+    padding: 3rem !important;
+  }
+  .p-xl-7 {
+    padding: 5rem !important;
+  }
+  .p-xl-8 {
+    padding: 8rem !important;
+  }
+  .px-xl-0 {
+    padding-right: 0 !important;
+    padding-left: 0 !important;
+  }
+  .px-xl-1 {
+    padding-right: 0.25rem !important;
+    padding-left: 0.25rem !important;
+  }
+  .px-xl-2 {
+    padding-right: 0.5rem !important;
+    padding-left: 0.5rem !important;
+  }
+  .px-xl-3 {
+    padding-right: 1rem !important;
+    padding-left: 1rem !important;
+  }
+  .px-xl-4 {
+    padding-right: 1.5rem !important;
+    padding-left: 1.5rem !important;
+  }
+  .px-xl-5 {
+    padding-right: 2rem !important;
+    padding-left: 2rem !important;
+  }
+  .px-xl-6 {
+    padding-right: 3rem !important;
+    padding-left: 3rem !important;
+  }
+  .px-xl-7 {
+    padding-right: 5rem !important;
+    padding-left: 5rem !important;
+  }
+  .px-xl-8 {
+    padding-right: 8rem !important;
+    padding-left: 8rem !important;
+  }
+  .py-xl-0 {
+    padding-top: 0 !important;
+    padding-bottom: 0 !important;
+  }
+  .py-xl-1 {
+    padding-top: 0.25rem !important;
+    padding-bottom: 0.25rem !important;
+  }
+  .py-xl-2 {
+    padding-top: 0.5rem !important;
+    padding-bottom: 0.5rem !important;
+  }
+  .py-xl-3 {
+    padding-top: 1rem !important;
+    padding-bottom: 1rem !important;
+  }
+  .py-xl-4 {
+    padding-top: 1.5rem !important;
+    padding-bottom: 1.5rem !important;
+  }
+  .py-xl-5 {
+    padding-top: 2rem !important;
+    padding-bottom: 2rem !important;
+  }
+  .py-xl-6 {
+    padding-top: 3rem !important;
+    padding-bottom: 3rem !important;
+  }
+  .py-xl-7 {
+    padding-top: 5rem !important;
+    padding-bottom: 5rem !important;
+  }
+  .py-xl-8 {
+    padding-top: 8rem !important;
+    padding-bottom: 8rem !important;
+  }
+  .pt-xl-0 {
+    padding-top: 0 !important;
+  }
+  .pt-xl-1 {
+    padding-top: 0.25rem !important;
+  }
+  .pt-xl-2 {
+    padding-top: 0.5rem !important;
+  }
+  .pt-xl-3 {
+    padding-top: 1rem !important;
+  }
+  .pt-xl-4 {
+    padding-top: 1.5rem !important;
+  }
+  .pt-xl-5 {
+    padding-top: 2rem !important;
+  }
+  .pt-xl-6 {
+    padding-top: 3rem !important;
+  }
+  .pt-xl-7 {
+    padding-top: 5rem !important;
+  }
+  .pt-xl-8 {
+    padding-top: 8rem !important;
+  }
+  .pe-xl-0 {
+    padding-right: 0 !important;
+  }
+  .pe-xl-1 {
+    padding-right: 0.25rem !important;
+  }
+  .pe-xl-2 {
+    padding-right: 0.5rem !important;
+  }
+  .pe-xl-3 {
+    padding-right: 1rem !important;
+  }
+  .pe-xl-4 {
+    padding-right: 1.5rem !important;
+  }
+  .pe-xl-5 {
+    padding-right: 2rem !important;
+  }
+  .pe-xl-6 {
+    padding-right: 3rem !important;
+  }
+  .pe-xl-7 {
+    padding-right: 5rem !important;
+  }
+  .pe-xl-8 {
+    padding-right: 8rem !important;
+  }
+  .pb-xl-0 {
+    padding-bottom: 0 !important;
+  }
+  .pb-xl-1 {
+    padding-bottom: 0.25rem !important;
+  }
+  .pb-xl-2 {
+    padding-bottom: 0.5rem !important;
+  }
+  .pb-xl-3 {
+    padding-bottom: 1rem !important;
+  }
+  .pb-xl-4 {
+    padding-bottom: 1.5rem !important;
+  }
+  .pb-xl-5 {
+    padding-bottom: 2rem !important;
+  }
+  .pb-xl-6 {
+    padding-bottom: 3rem !important;
+  }
+  .pb-xl-7 {
+    padding-bottom: 5rem !important;
+  }
+  .pb-xl-8 {
+    padding-bottom: 8rem !important;
+  }
+  .ps-xl-0 {
+    padding-left: 0 !important;
+  }
+  .ps-xl-1 {
+    padding-left: 0.25rem !important;
+  }
+  .ps-xl-2 {
+    padding-left: 0.5rem !important;
+  }
+  .ps-xl-3 {
+    padding-left: 1rem !important;
+  }
+  .ps-xl-4 {
+    padding-left: 1.5rem !important;
+  }
+  .ps-xl-5 {
+    padding-left: 2rem !important;
+  }
+  .ps-xl-6 {
+    padding-left: 3rem !important;
+  }
+  .ps-xl-7 {
+    padding-left: 5rem !important;
+  }
+  .ps-xl-8 {
+    padding-left: 8rem !important;
+  }
+  .gap-xl-0 {
+    gap: 0 !important;
+  }
+  .gap-xl-1 {
+    gap: 0.25rem !important;
+  }
+  .gap-xl-2 {
+    gap: 0.5rem !important;
+  }
+  .gap-xl-3 {
+    gap: 1rem !important;
+  }
+  .gap-xl-4 {
+    gap: 1.5rem !important;
+  }
+  .gap-xl-5 {
+    gap: 2rem !important;
+  }
+  .gap-xl-6 {
+    gap: 3rem !important;
+  }
+  .gap-xl-7 {
+    gap: 5rem !important;
+  }
+  .gap-xl-8 {
+    gap: 8rem !important;
+  }
+  .row-gap-xl-0 {
+    row-gap: 0 !important;
+  }
+  .row-gap-xl-1 {
+    row-gap: 0.25rem !important;
+  }
+  .row-gap-xl-2 {
+    row-gap: 0.5rem !important;
+  }
+  .row-gap-xl-3 {
+    row-gap: 1rem !important;
+  }
+  .row-gap-xl-4 {
+    row-gap: 1.5rem !important;
+  }
+  .row-gap-xl-5 {
+    row-gap: 2rem !important;
+  }
+  .row-gap-xl-6 {
+    row-gap: 3rem !important;
+  }
+  .row-gap-xl-7 {
+    row-gap: 5rem !important;
+  }
+  .row-gap-xl-8 {
+    row-gap: 8rem !important;
+  }
+  .column-gap-xl-0 {
+    -moz-column-gap: 0 !important;
+         column-gap: 0 !important;
+  }
+  .column-gap-xl-1 {
+    -moz-column-gap: 0.25rem !important;
+         column-gap: 0.25rem !important;
+  }
+  .column-gap-xl-2 {
+    -moz-column-gap: 0.5rem !important;
+         column-gap: 0.5rem !important;
+  }
+  .column-gap-xl-3 {
+    -moz-column-gap: 1rem !important;
+         column-gap: 1rem !important;
+  }
+  .column-gap-xl-4 {
+    -moz-column-gap: 1.5rem !important;
+         column-gap: 1.5rem !important;
+  }
+  .column-gap-xl-5 {
+    -moz-column-gap: 2rem !important;
+         column-gap: 2rem !important;
+  }
+  .column-gap-xl-6 {
+    -moz-column-gap: 3rem !important;
+         column-gap: 3rem !important;
+  }
+  .column-gap-xl-7 {
+    -moz-column-gap: 5rem !important;
+         column-gap: 5rem !important;
+  }
+  .column-gap-xl-8 {
+    -moz-column-gap: 8rem !important;
+         column-gap: 8rem !important;
+  }
+  .text-xl-start {
+    text-align: left !important;
+  }
+  .text-xl-end {
+    text-align: right !important;
+  }
+  .text-xl-center {
+    text-align: center !important;
+  }
+  .columns-xl-2 {
+    -moz-columns: 2 !important;
+         columns: 2 !important;
+  }
+  .columns-xl-3 {
+    -moz-columns: 3 !important;
+         columns: 3 !important;
+  }
+  .columns-xl-4 {
+    -moz-columns: 4 !important;
+         columns: 4 !important;
+  }
+}
+@media (min-width: 1400px) {
+  .float-xxl-start {
+    float: left !important;
+  }
+  .float-xxl-end {
+    float: right !important;
+  }
+  .float-xxl-none {
+    float: none !important;
+  }
+  .object-fit-xxl-contain {
+    -o-object-fit: contain !important;
+       object-fit: contain !important;
+  }
+  .object-fit-xxl-cover {
+    -o-object-fit: cover !important;
+       object-fit: cover !important;
+  }
+  .object-fit-xxl-fill {
+    -o-object-fit: fill !important;
+       object-fit: fill !important;
+  }
+  .object-fit-xxl-scale {
+    -o-object-fit: scale-down !important;
+       object-fit: scale-down !important;
+  }
+  .object-fit-xxl-none {
+    -o-object-fit: none !important;
+       object-fit: none !important;
+  }
+  .d-xxl-inline {
+    display: inline !important;
+  }
+  .d-xxl-inline-block {
+    display: inline-block !important;
+  }
+  .d-xxl-block {
+    display: block !important;
+  }
+  .d-xxl-grid {
+    display: grid !important;
+  }
+  .d-xxl-inline-grid {
+    display: inline-grid !important;
+  }
+  .d-xxl-table {
+    display: table !important;
+  }
+  .d-xxl-table-row {
+    display: table-row !important;
+  }
+  .d-xxl-table-cell {
+    display: table-cell !important;
+  }
+  .d-xxl-flex {
+    display: flex !important;
+  }
+  .d-xxl-inline-flex {
+    display: inline-flex !important;
+  }
+  .d-xxl-none {
+    display: none !important;
+  }
+  .flex-xxl-fill {
+    flex: 1 1 auto !important;
+  }
+  .flex-xxl-row {
+    flex-direction: row !important;
+  }
+  .flex-xxl-column {
+    flex-direction: column !important;
+  }
+  .flex-xxl-row-reverse {
+    flex-direction: row-reverse !important;
+  }
+  .flex-xxl-column-reverse {
+    flex-direction: column-reverse !important;
+  }
+  .flex-xxl-grow-0 {
+    flex-grow: 0 !important;
+  }
+  .flex-xxl-grow-1 {
+    flex-grow: 1 !important;
+  }
+  .flex-xxl-shrink-0 {
+    flex-shrink: 0 !important;
+  }
+  .flex-xxl-shrink-1 {
+    flex-shrink: 1 !important;
+  }
+  .flex-xxl-wrap {
+    flex-wrap: wrap !important;
+  }
+  .flex-xxl-nowrap {
+    flex-wrap: nowrap !important;
+  }
+  .flex-xxl-wrap-reverse {
+    flex-wrap: wrap-reverse !important;
+  }
+  .justify-content-xxl-start {
+    justify-content: flex-start !important;
+  }
+  .justify-content-xxl-end {
+    justify-content: flex-end !important;
+  }
+  .justify-content-xxl-center {
+    justify-content: center !important;
+  }
+  .justify-content-xxl-between {
+    justify-content: space-between !important;
+  }
+  .justify-content-xxl-around {
+    justify-content: space-around !important;
+  }
+  .justify-content-xxl-evenly {
+    justify-content: space-evenly !important;
+  }
+  .align-items-xxl-start {
+    align-items: flex-start !important;
+  }
+  .align-items-xxl-end {
+    align-items: flex-end !important;
+  }
+  .align-items-xxl-center {
+    align-items: center !important;
+  }
+  .align-items-xxl-baseline {
+    align-items: baseline !important;
+  }
+  .align-items-xxl-stretch {
+    align-items: stretch !important;
+  }
+  .align-content-xxl-start {
+    align-content: flex-start !important;
+  }
+  .align-content-xxl-end {
+    align-content: flex-end !important;
+  }
+  .align-content-xxl-center {
+    align-content: center !important;
+  }
+  .align-content-xxl-between {
+    align-content: space-between !important;
+  }
+  .align-content-xxl-around {
+    align-content: space-around !important;
+  }
+  .align-content-xxl-stretch {
+    align-content: stretch !important;
+  }
+  .align-self-xxl-auto {
+    align-self: auto !important;
+  }
+  .align-self-xxl-start {
+    align-self: flex-start !important;
+  }
+  .align-self-xxl-end {
+    align-self: flex-end !important;
+  }
+  .align-self-xxl-center {
+    align-self: center !important;
+  }
+  .align-self-xxl-baseline {
+    align-self: baseline !important;
+  }
+  .align-self-xxl-stretch {
+    align-self: stretch !important;
+  }
+  .order-xxl-first {
+    order: -1 !important;
+  }
+  .order-xxl-0 {
+    order: 0 !important;
+  }
+  .order-xxl-1 {
+    order: 1 !important;
+  }
+  .order-xxl-2 {
+    order: 2 !important;
+  }
+  .order-xxl-3 {
+    order: 3 !important;
+  }
+  .order-xxl-4 {
+    order: 4 !important;
+  }
+  .order-xxl-5 {
+    order: 5 !important;
+  }
+  .order-xxl-last {
+    order: 6 !important;
+  }
+  .m-xxl-0 {
+    margin: 0 !important;
+  }
+  .m-xxl-1 {
+    margin: 0.25rem !important;
+  }
+  .m-xxl-2 {
+    margin: 0.5rem !important;
+  }
+  .m-xxl-3 {
+    margin: 1rem !important;
+  }
+  .m-xxl-4 {
+    margin: 1.5rem !important;
+  }
+  .m-xxl-5 {
+    margin: 2rem !important;
+  }
+  .m-xxl-6 {
+    margin: 3rem !important;
+  }
+  .m-xxl-7 {
+    margin: 5rem !important;
+  }
+  .m-xxl-8 {
+    margin: 8rem !important;
+  }
+  .m-xxl-auto {
+    margin: auto !important;
+  }
+  .mx-xxl-0 {
+    margin-right: 0 !important;
+    margin-left: 0 !important;
+  }
+  .mx-xxl-1 {
+    margin-right: 0.25rem !important;
+    margin-left: 0.25rem !important;
+  }
+  .mx-xxl-2 {
+    margin-right: 0.5rem !important;
+    margin-left: 0.5rem !important;
+  }
+  .mx-xxl-3 {
+    margin-right: 1rem !important;
+    margin-left: 1rem !important;
+  }
+  .mx-xxl-4 {
+    margin-right: 1.5rem !important;
+    margin-left: 1.5rem !important;
+  }
+  .mx-xxl-5 {
+    margin-right: 2rem !important;
+    margin-left: 2rem !important;
+  }
+  .mx-xxl-6 {
+    margin-right: 3rem !important;
+    margin-left: 3rem !important;
+  }
+  .mx-xxl-7 {
+    margin-right: 5rem !important;
+    margin-left: 5rem !important;
+  }
+  .mx-xxl-8 {
+    margin-right: 8rem !important;
+    margin-left: 8rem !important;
+  }
+  .mx-xxl-auto {
+    margin-right: auto !important;
+    margin-left: auto !important;
+  }
+  .my-xxl-0 {
+    margin-top: 0 !important;
+    margin-bottom: 0 !important;
+  }
+  .my-xxl-1 {
+    margin-top: 0.25rem !important;
+    margin-bottom: 0.25rem !important;
+  }
+  .my-xxl-2 {
+    margin-top: 0.5rem !important;
+    margin-bottom: 0.5rem !important;
+  }
+  .my-xxl-3 {
+    margin-top: 1rem !important;
+    margin-bottom: 1rem !important;
+  }
+  .my-xxl-4 {
+    margin-top: 1.5rem !important;
+    margin-bottom: 1.5rem !important;
+  }
+  .my-xxl-5 {
+    margin-top: 2rem !important;
+    margin-bottom: 2rem !important;
+  }
+  .my-xxl-6 {
+    margin-top: 3rem !important;
+    margin-bottom: 3rem !important;
+  }
+  .my-xxl-7 {
+    margin-top: 5rem !important;
+    margin-bottom: 5rem !important;
+  }
+  .my-xxl-8 {
+    margin-top: 8rem !important;
+    margin-bottom: 8rem !important;
+  }
+  .my-xxl-auto {
+    margin-top: auto !important;
+    margin-bottom: auto !important;
+  }
+  .mt-xxl-0 {
+    margin-top: 0 !important;
+  }
+  .mt-xxl-1 {
+    margin-top: 0.25rem !important;
+  }
+  .mt-xxl-2 {
+    margin-top: 0.5rem !important;
+  }
+  .mt-xxl-3 {
+    margin-top: 1rem !important;
+  }
+  .mt-xxl-4 {
+    margin-top: 1.5rem !important;
+  }
+  .mt-xxl-5 {
+    margin-top: 2rem !important;
+  }
+  .mt-xxl-6 {
+    margin-top: 3rem !important;
+  }
+  .mt-xxl-7 {
+    margin-top: 5rem !important;
+  }
+  .mt-xxl-8 {
+    margin-top: 8rem !important;
+  }
+  .mt-xxl-auto {
+    margin-top: auto !important;
+  }
+  .me-xxl-0 {
+    margin-right: 0 !important;
+  }
+  .me-xxl-1 {
+    margin-right: 0.25rem !important;
+  }
+  .me-xxl-2 {
+    margin-right: 0.5rem !important;
+  }
+  .me-xxl-3 {
+    margin-right: 1rem !important;
+  }
+  .me-xxl-4 {
+    margin-right: 1.5rem !important;
+  }
+  .me-xxl-5 {
+    margin-right: 2rem !important;
+  }
+  .me-xxl-6 {
+    margin-right: 3rem !important;
+  }
+  .me-xxl-7 {
+    margin-right: 5rem !important;
+  }
+  .me-xxl-8 {
+    margin-right: 8rem !important;
+  }
+  .me-xxl-auto {
+    margin-right: auto !important;
+  }
+  .mb-xxl-0 {
+    margin-bottom: 0 !important;
+  }
+  .mb-xxl-1 {
+    margin-bottom: 0.25rem !important;
+  }
+  .mb-xxl-2 {
+    margin-bottom: 0.5rem !important;
+  }
+  .mb-xxl-3 {
+    margin-bottom: 1rem !important;
+  }
+  .mb-xxl-4 {
+    margin-bottom: 1.5rem !important;
+  }
+  .mb-xxl-5 {
+    margin-bottom: 2rem !important;
+  }
+  .mb-xxl-6 {
+    margin-bottom: 3rem !important;
+  }
+  .mb-xxl-7 {
+    margin-bottom: 5rem !important;
+  }
+  .mb-xxl-8 {
+    margin-bottom: 8rem !important;
+  }
+  .mb-xxl-auto {
+    margin-bottom: auto !important;
+  }
+  .ms-xxl-0 {
+    margin-left: 0 !important;
+  }
+  .ms-xxl-1 {
+    margin-left: 0.25rem !important;
+  }
+  .ms-xxl-2 {
+    margin-left: 0.5rem !important;
+  }
+  .ms-xxl-3 {
+    margin-left: 1rem !important;
+  }
+  .ms-xxl-4 {
+    margin-left: 1.5rem !important;
+  }
+  .ms-xxl-5 {
+    margin-left: 2rem !important;
+  }
+  .ms-xxl-6 {
+    margin-left: 3rem !important;
+  }
+  .ms-xxl-7 {
+    margin-left: 5rem !important;
+  }
+  .ms-xxl-8 {
+    margin-left: 8rem !important;
+  }
+  .ms-xxl-auto {
+    margin-left: auto !important;
+  }
+  .p-xxl-0 {
+    padding: 0 !important;
+  }
+  .p-xxl-1 {
+    padding: 0.25rem !important;
+  }
+  .p-xxl-2 {
+    padding: 0.5rem !important;
+  }
+  .p-xxl-3 {
+    padding: 1rem !important;
+  }
+  .p-xxl-4 {
+    padding: 1.5rem !important;
+  }
+  .p-xxl-5 {
+    padding: 2rem !important;
+  }
+  .p-xxl-6 {
+    padding: 3rem !important;
+  }
+  .p-xxl-7 {
+    padding: 5rem !important;
+  }
+  .p-xxl-8 {
+    padding: 8rem !important;
+  }
+  .px-xxl-0 {
+    padding-right: 0 !important;
+    padding-left: 0 !important;
+  }
+  .px-xxl-1 {
+    padding-right: 0.25rem !important;
+    padding-left: 0.25rem !important;
+  }
+  .px-xxl-2 {
+    padding-right: 0.5rem !important;
+    padding-left: 0.5rem !important;
+  }
+  .px-xxl-3 {
+    padding-right: 1rem !important;
+    padding-left: 1rem !important;
+  }
+  .px-xxl-4 {
+    padding-right: 1.5rem !important;
+    padding-left: 1.5rem !important;
+  }
+  .px-xxl-5 {
+    padding-right: 2rem !important;
+    padding-left: 2rem !important;
+  }
+  .px-xxl-6 {
+    padding-right: 3rem !important;
+    padding-left: 3rem !important;
+  }
+  .px-xxl-7 {
+    padding-right: 5rem !important;
+    padding-left: 5rem !important;
+  }
+  .px-xxl-8 {
+    padding-right: 8rem !important;
+    padding-left: 8rem !important;
+  }
+  .py-xxl-0 {
+    padding-top: 0 !important;
+    padding-bottom: 0 !important;
+  }
+  .py-xxl-1 {
+    padding-top: 0.25rem !important;
+    padding-bottom: 0.25rem !important;
+  }
+  .py-xxl-2 {
+    padding-top: 0.5rem !important;
+    padding-bottom: 0.5rem !important;
+  }
+  .py-xxl-3 {
+    padding-top: 1rem !important;
+    padding-bottom: 1rem !important;
+  }
+  .py-xxl-4 {
+    padding-top: 1.5rem !important;
+    padding-bottom: 1.5rem !important;
+  }
+  .py-xxl-5 {
+    padding-top: 2rem !important;
+    padding-bottom: 2rem !important;
+  }
+  .py-xxl-6 {
+    padding-top: 3rem !important;
+    padding-bottom: 3rem !important;
+  }
+  .py-xxl-7 {
+    padding-top: 5rem !important;
+    padding-bottom: 5rem !important;
+  }
+  .py-xxl-8 {
+    padding-top: 8rem !important;
+    padding-bottom: 8rem !important;
+  }
+  .pt-xxl-0 {
+    padding-top: 0 !important;
+  }
+  .pt-xxl-1 {
+    padding-top: 0.25rem !important;
+  }
+  .pt-xxl-2 {
+    padding-top: 0.5rem !important;
+  }
+  .pt-xxl-3 {
+    padding-top: 1rem !important;
+  }
+  .pt-xxl-4 {
+    padding-top: 1.5rem !important;
+  }
+  .pt-xxl-5 {
+    padding-top: 2rem !important;
+  }
+  .pt-xxl-6 {
+    padding-top: 3rem !important;
+  }
+  .pt-xxl-7 {
+    padding-top: 5rem !important;
+  }
+  .pt-xxl-8 {
+    padding-top: 8rem !important;
+  }
+  .pe-xxl-0 {
+    padding-right: 0 !important;
+  }
+  .pe-xxl-1 {
+    padding-right: 0.25rem !important;
+  }
+  .pe-xxl-2 {
+    padding-right: 0.5rem !important;
+  }
+  .pe-xxl-3 {
+    padding-right: 1rem !important;
+  }
+  .pe-xxl-4 {
+    padding-right: 1.5rem !important;
+  }
+  .pe-xxl-5 {
+    padding-right: 2rem !important;
+  }
+  .pe-xxl-6 {
+    padding-right: 3rem !important;
+  }
+  .pe-xxl-7 {
+    padding-right: 5rem !important;
+  }
+  .pe-xxl-8 {
+    padding-right: 8rem !important;
+  }
+  .pb-xxl-0 {
+    padding-bottom: 0 !important;
+  }
+  .pb-xxl-1 {
+    padding-bottom: 0.25rem !important;
+  }
+  .pb-xxl-2 {
+    padding-bottom: 0.5rem !important;
+  }
+  .pb-xxl-3 {
+    padding-bottom: 1rem !important;
+  }
+  .pb-xxl-4 {
+    padding-bottom: 1.5rem !important;
+  }
+  .pb-xxl-5 {
+    padding-bottom: 2rem !important;
+  }
+  .pb-xxl-6 {
+    padding-bottom: 3rem !important;
+  }
+  .pb-xxl-7 {
+    padding-bottom: 5rem !important;
+  }
+  .pb-xxl-8 {
+    padding-bottom: 8rem !important;
+  }
+  .ps-xxl-0 {
+    padding-left: 0 !important;
+  }
+  .ps-xxl-1 {
+    padding-left: 0.25rem !important;
+  }
+  .ps-xxl-2 {
+    padding-left: 0.5rem !important;
+  }
+  .ps-xxl-3 {
+    padding-left: 1rem !important;
+  }
+  .ps-xxl-4 {
+    padding-left: 1.5rem !important;
+  }
+  .ps-xxl-5 {
+    padding-left: 2rem !important;
+  }
+  .ps-xxl-6 {
+    padding-left: 3rem !important;
+  }
+  .ps-xxl-7 {
+    padding-left: 5rem !important;
+  }
+  .ps-xxl-8 {
+    padding-left: 8rem !important;
+  }
+  .gap-xxl-0 {
+    gap: 0 !important;
+  }
+  .gap-xxl-1 {
+    gap: 0.25rem !important;
+  }
+  .gap-xxl-2 {
+    gap: 0.5rem !important;
+  }
+  .gap-xxl-3 {
+    gap: 1rem !important;
+  }
+  .gap-xxl-4 {
+    gap: 1.5rem !important;
+  }
+  .gap-xxl-5 {
+    gap: 2rem !important;
+  }
+  .gap-xxl-6 {
+    gap: 3rem !important;
+  }
+  .gap-xxl-7 {
+    gap: 5rem !important;
+  }
+  .gap-xxl-8 {
+    gap: 8rem !important;
+  }
+  .row-gap-xxl-0 {
+    row-gap: 0 !important;
+  }
+  .row-gap-xxl-1 {
+    row-gap: 0.25rem !important;
+  }
+  .row-gap-xxl-2 {
+    row-gap: 0.5rem !important;
+  }
+  .row-gap-xxl-3 {
+    row-gap: 1rem !important;
+  }
+  .row-gap-xxl-4 {
+    row-gap: 1.5rem !important;
+  }
+  .row-gap-xxl-5 {
+    row-gap: 2rem !important;
+  }
+  .row-gap-xxl-6 {
+    row-gap: 3rem !important;
+  }
+  .row-gap-xxl-7 {
+    row-gap: 5rem !important;
+  }
+  .row-gap-xxl-8 {
+    row-gap: 8rem !important;
+  }
+  .column-gap-xxl-0 {
+    -moz-column-gap: 0 !important;
+         column-gap: 0 !important;
+  }
+  .column-gap-xxl-1 {
+    -moz-column-gap: 0.25rem !important;
+         column-gap: 0.25rem !important;
+  }
+  .column-gap-xxl-2 {
+    -moz-column-gap: 0.5rem !important;
+         column-gap: 0.5rem !important;
+  }
+  .column-gap-xxl-3 {
+    -moz-column-gap: 1rem !important;
+         column-gap: 1rem !important;
+  }
+  .column-gap-xxl-4 {
+    -moz-column-gap: 1.5rem !important;
+         column-gap: 1.5rem !important;
+  }
+  .column-gap-xxl-5 {
+    -moz-column-gap: 2rem !important;
+         column-gap: 2rem !important;
+  }
+  .column-gap-xxl-6 {
+    -moz-column-gap: 3rem !important;
+         column-gap: 3rem !important;
+  }
+  .column-gap-xxl-7 {
+    -moz-column-gap: 5rem !important;
+         column-gap: 5rem !important;
+  }
+  .column-gap-xxl-8 {
+    -moz-column-gap: 8rem !important;
+         column-gap: 8rem !important;
+  }
+  .text-xxl-start {
+    text-align: left !important;
+  }
+  .text-xxl-end {
+    text-align: right !important;
+  }
+  .text-xxl-center {
+    text-align: center !important;
+  }
+  .columns-xxl-2 {
+    -moz-columns: 2 !important;
+         columns: 2 !important;
+  }
+  .columns-xxl-3 {
+    -moz-columns: 3 !important;
+         columns: 3 !important;
+  }
+  .columns-xxl-4 {
+    -moz-columns: 4 !important;
+         columns: 4 !important;
+  }
+}
+@media print {
+  .d-print-inline {
+    display: inline !important;
+  }
+  .d-print-inline-block {
+    display: inline-block !important;
+  }
+  .d-print-block {
+    display: block !important;
+  }
+  .d-print-grid {
+    display: grid !important;
+  }
+  .d-print-inline-grid {
+    display: inline-grid !important;
+  }
+  .d-print-table {
+    display: table !important;
+  }
+  .d-print-table-row {
+    display: table-row !important;
+  }
+  .d-print-table-cell {
+    display: table-cell !important;
+  }
+  .d-print-flex {
+    display: flex !important;
+  }
+  .d-print-inline-flex {
+    display: inline-flex !important;
+  }
+  .d-print-none {
+    display: none !important;
+  }
+}
+:root,
+:host {
+  font-size: 16px;
+  height: 100%;
+}
+
+:root,
+:host,
+[data-bs-theme=light] {
+  --tblr-primary: #0054a6;
+  --tblr-primary-rgb: 0, 84, 166;
+  --tblr-primary-fg: var(--tblr-light);
+  --tblr-primary-darken: #004c95;
+  --tblr-primary-lt: #e6eef6;
+  --tblr-primary-lt-rgb: 230, 238, 246;
+  --tblr-secondary: #667382;
+  --tblr-secondary-rgb: 102, 115, 130;
+  --tblr-secondary-fg: var(--tblr-light);
+  --tblr-secondary-darken: #5c6875;
+  --tblr-secondary-lt: #f0f1f3;
+  --tblr-secondary-lt-rgb: 240, 241, 243;
+  --tblr-success: #2fb344;
+  --tblr-success-rgb: 47, 179, 68;
+  --tblr-success-fg: var(--tblr-light);
+  --tblr-success-darken: #2aa13d;
+  --tblr-success-lt: #eaf7ec;
+  --tblr-success-lt-rgb: 234, 247, 236;
+  --tblr-info: #4299e1;
+  --tblr-info-rgb: 66, 153, 225;
+  --tblr-info-fg: var(--tblr-light);
+  --tblr-info-darken: #3b8acb;
+  --tblr-info-lt: #ecf5fc;
+  --tblr-info-lt-rgb: 236, 245, 252;
+  --tblr-warning: #f76707;
+  --tblr-warning-rgb: 247, 103, 7;
+  --tblr-warning-fg: var(--tblr-light);
+  --tblr-warning-darken: #de5d06;
+  --tblr-warning-lt: #fef0e6;
+  --tblr-warning-lt-rgb: 254, 240, 230;
+  --tblr-danger: #d63939;
+  --tblr-danger-rgb: 214, 57, 57;
+  --tblr-danger-fg: var(--tblr-light);
+  --tblr-danger-darken: #c13333;
+  --tblr-danger-lt: #fbebeb;
+  --tblr-danger-lt-rgb: 251, 235, 235;
+  --tblr-light: #fcfdfe;
+  --tblr-light-rgb: 252, 253, 254;
+  --tblr-light-fg: var(--tblr-dark);
+  --tblr-light-darken: #e3e4e5;
+  --tblr-light-lt: white;
+  --tblr-light-lt-rgb: 255, 255, 255;
+  --tblr-dark: #182433;
+  --tblr-dark-rgb: 24, 36, 51;
+  --tblr-dark-fg: var(--tblr-light);
+  --tblr-dark-darken: #16202e;
+  --tblr-dark-lt: #e8e9eb;
+  --tblr-dark-lt-rgb: 232, 233, 235;
+  --tblr-muted: #667382;
+  --tblr-muted-rgb: 102, 115, 130;
+  --tblr-muted-fg: var(--tblr-light);
+  --tblr-muted-darken: #5c6875;
+  --tblr-muted-lt: #f0f1f3;
+  --tblr-muted-lt-rgb: 240, 241, 243;
+  --tblr-blue: #0054a6;
+  --tblr-blue-rgb: 0, 84, 166;
+  --tblr-blue-fg: var(--tblr-light);
+  --tblr-blue-darken: #004c95;
+  --tblr-blue-lt: #e6eef6;
+  --tblr-blue-lt-rgb: 230, 238, 246;
+  --tblr-azure: #4299e1;
+  --tblr-azure-rgb: 66, 153, 225;
+  --tblr-azure-fg: var(--tblr-light);
+  --tblr-azure-darken: #3b8acb;
+  --tblr-azure-lt: #ecf5fc;
+  --tblr-azure-lt-rgb: 236, 245, 252;
+  --tblr-indigo: #4263eb;
+  --tblr-indigo-rgb: 66, 99, 235;
+  --tblr-indigo-fg: var(--tblr-light);
+  --tblr-indigo-darken: #3b59d4;
+  --tblr-indigo-lt: #eceffd;
+  --tblr-indigo-lt-rgb: 236, 239, 253;
+  --tblr-purple: #ae3ec9;
+  --tblr-purple-rgb: 174, 62, 201;
+  --tblr-purple-fg: var(--tblr-light);
+  --tblr-purple-darken: #9d38b5;
+  --tblr-purple-lt: #f7ecfa;
+  --tblr-purple-lt-rgb: 247, 236, 250;
+  --tblr-pink: #d6336c;
+  --tblr-pink-rgb: 214, 51, 108;
+  --tblr-pink-fg: var(--tblr-light);
+  --tblr-pink-darken: #c12e61;
+  --tblr-pink-lt: #fbebf0;
+  --tblr-pink-lt-rgb: 251, 235, 240;
+  --tblr-red: #d63939;
+  --tblr-red-rgb: 214, 57, 57;
+  --tblr-red-fg: var(--tblr-light);
+  --tblr-red-darken: #c13333;
+  --tblr-red-lt: #fbebeb;
+  --tblr-red-lt-rgb: 251, 235, 235;
+  --tblr-orange: #f76707;
+  --tblr-orange-rgb: 247, 103, 7;
+  --tblr-orange-fg: var(--tblr-light);
+  --tblr-orange-darken: #de5d06;
+  --tblr-orange-lt: #fef0e6;
+  --tblr-orange-lt-rgb: 254, 240, 230;
+  --tblr-yellow: #f59f00;
+  --tblr-yellow-rgb: 245, 159, 0;
+  --tblr-yellow-fg: var(--tblr-light);
+  --tblr-yellow-darken: #dd8f00;
+  --tblr-yellow-lt: #fef5e6;
+  --tblr-yellow-lt-rgb: 254, 245, 230;
+  --tblr-lime: #74b816;
+  --tblr-lime-rgb: 116, 184, 22;
+  --tblr-lime-fg: var(--tblr-light);
+  --tblr-lime-darken: #68a614;
+  --tblr-lime-lt: #f1f8e8;
+  --tblr-lime-lt-rgb: 241, 248, 232;
+  --tblr-green: #2fb344;
+  --tblr-green-rgb: 47, 179, 68;
+  --tblr-green-fg: var(--tblr-light);
+  --tblr-green-darken: #2aa13d;
+  --tblr-green-lt: #eaf7ec;
+  --tblr-green-lt-rgb: 234, 247, 236;
+  --tblr-teal: #0ca678;
+  --tblr-teal-rgb: 12, 166, 120;
+  --tblr-teal-fg: var(--tblr-light);
+  --tblr-teal-darken: #0b956c;
+  --tblr-teal-lt: #e7f6f2;
+  --tblr-teal-lt-rgb: 231, 246, 242;
+  --tblr-cyan: #17a2b8;
+  --tblr-cyan-rgb: 23, 162, 184;
+  --tblr-cyan-fg: var(--tblr-light);
+  --tblr-cyan-darken: #1592a6;
+  --tblr-cyan-lt: #e8f6f8;
+  --tblr-cyan-lt-rgb: 232, 246, 248;
+  --tblr-facebook: #1877f2;
+  --tblr-facebook-rgb: 24, 119, 242;
+  --tblr-facebook-fg: var(--tblr-light);
+  --tblr-facebook-darken: #166bda;
+  --tblr-facebook-lt: #e8f1fe;
+  --tblr-facebook-lt-rgb: 232, 241, 254;
+  --tblr-twitter: #1da1f2;
+  --tblr-twitter-rgb: 29, 161, 242;
+  --tblr-twitter-fg: var(--tblr-light);
+  --tblr-twitter-darken: #1a91da;
+  --tblr-twitter-lt: #e8f6fe;
+  --tblr-twitter-lt-rgb: 232, 246, 254;
+  --tblr-linkedin: #0a66c2;
+  --tblr-linkedin-rgb: 10, 102, 194;
+  --tblr-linkedin-fg: var(--tblr-light);
+  --tblr-linkedin-darken: #095caf;
+  --tblr-linkedin-lt: #e7f0f9;
+  --tblr-linkedin-lt-rgb: 231, 240, 249;
+  --tblr-google: #dc4e41;
+  --tblr-google-rgb: 220, 78, 65;
+  --tblr-google-fg: var(--tblr-light);
+  --tblr-google-darken: #c6463b;
+  --tblr-google-lt: #fcedec;
+  --tblr-google-lt-rgb: 252, 237, 236;
+  --tblr-youtube: #ff0000;
+  --tblr-youtube-rgb: 255, 0, 0;
+  --tblr-youtube-fg: var(--tblr-light);
+  --tblr-youtube-darken: #e60000;
+  --tblr-youtube-lt: #ffe6e6;
+  --tblr-youtube-lt-rgb: 255, 230, 230;
+  --tblr-vimeo: #1ab7ea;
+  --tblr-vimeo-rgb: 26, 183, 234;
+  --tblr-vimeo-fg: var(--tblr-light);
+  --tblr-vimeo-darken: #17a5d3;
+  --tblr-vimeo-lt: #e8f8fd;
+  --tblr-vimeo-lt-rgb: 232, 248, 253;
+  --tblr-dribbble: #ea4c89;
+  --tblr-dribbble-rgb: 234, 76, 137;
+  --tblr-dribbble-fg: var(--tblr-light);
+  --tblr-dribbble-darken: #d3447b;
+  --tblr-dribbble-lt: #fdedf3;
+  --tblr-dribbble-lt-rgb: 253, 237, 243;
+  --tblr-github: #181717;
+  --tblr-github-rgb: 24, 23, 23;
+  --tblr-github-fg: var(--tblr-light);
+  --tblr-github-darken: #161515;
+  --tblr-github-lt: #e8e8e8;
+  --tblr-github-lt-rgb: 232, 232, 232;
+  --tblr-instagram: #e4405f;
+  --tblr-instagram-rgb: 228, 64, 95;
+  --tblr-instagram-fg: var(--tblr-light);
+  --tblr-instagram-darken: #cd3a56;
+  --tblr-instagram-lt: #fcecef;
+  --tblr-instagram-lt-rgb: 252, 236, 239;
+  --tblr-pinterest: #bd081c;
+  --tblr-pinterest-rgb: 189, 8, 28;
+  --tblr-pinterest-fg: var(--tblr-light);
+  --tblr-pinterest-darken: #aa0719;
+  --tblr-pinterest-lt: #f8e6e8;
+  --tblr-pinterest-lt-rgb: 248, 230, 232;
+  --tblr-vk: #6383a8;
+  --tblr-vk-rgb: 99, 131, 168;
+  --tblr-vk-fg: var(--tblr-light);
+  --tblr-vk-darken: #597697;
+  --tblr-vk-lt: #eff3f6;
+  --tblr-vk-lt-rgb: 239, 243, 246;
+  --tblr-rss: #ffa500;
+  --tblr-rss-rgb: 255, 165, 0;
+  --tblr-rss-fg: var(--tblr-light);
+  --tblr-rss-darken: #e69500;
+  --tblr-rss-lt: #fff6e6;
+  --tblr-rss-lt-rgb: 255, 246, 230;
+  --tblr-flickr: #0063dc;
+  --tblr-flickr-rgb: 0, 99, 220;
+  --tblr-flickr-fg: var(--tblr-light);
+  --tblr-flickr-darken: #0059c6;
+  --tblr-flickr-lt: #e6effc;
+  --tblr-flickr-lt-rgb: 230, 239, 252;
+  --tblr-bitbucket: #0052cc;
+  --tblr-bitbucket-rgb: 0, 82, 204;
+  --tblr-bitbucket-fg: var(--tblr-light);
+  --tblr-bitbucket-darken: #004ab8;
+  --tblr-bitbucket-lt: #e6eefa;
+  --tblr-bitbucket-lt-rgb: 230, 238, 250;
+  --tblr-tabler: #0054a6;
+  --tblr-tabler-rgb: 0, 84, 166;
+  --tblr-tabler-fg: var(--tblr-light);
+  --tblr-tabler-darken: #004c95;
+  --tblr-tabler-lt: #e6eef6;
+  --tblr-tabler-lt-rgb: 230, 238, 246;
+  --tblr-gray-50: #fcfdfe;
+  --tblr-gray-50-rgb: 252, 253, 254;
+  --tblr-gray-50-fg: var(--tblr-dark);
+  --tblr-gray-50-darken: #e3e4e5;
+  --tblr-gray-50-lt: white;
+  --tblr-gray-50-lt-rgb: 255, 255, 255;
+  --tblr-gray-100: #f6f8fb;
+  --tblr-gray-100-rgb: 246, 248, 251;
+  --tblr-gray-100-fg: var(--tblr-dark);
+  --tblr-gray-100-darken: #dddfe2;
+  --tblr-gray-100-lt: #fefeff;
+  --tblr-gray-100-lt-rgb: 254, 254, 255;
+  --tblr-gray-200: #eef1f4;
+  --tblr-gray-200-rgb: 238, 241, 244;
+  --tblr-gray-200-fg: var(--tblr-dark);
+  --tblr-gray-200-darken: #d6d9dc;
+  --tblr-gray-200-lt: #fdfefe;
+  --tblr-gray-200-lt-rgb: 253, 254, 254;
+  --tblr-gray-300: #dadfe5;
+  --tblr-gray-300-rgb: 218, 223, 229;
+  --tblr-gray-300-fg: var(--tblr-dark);
+  --tblr-gray-300-darken: #c4c9ce;
+  --tblr-gray-300-lt: #fbfcfc;
+  --tblr-gray-300-lt-rgb: 251, 252, 252;
+  --tblr-gray-400: #bbc3cd;
+  --tblr-gray-400-rgb: 187, 195, 205;
+  --tblr-gray-400-fg: var(--tblr-light);
+  --tblr-gray-400-darken: #a8b0b9;
+  --tblr-gray-400-lt: #f8f9fa;
+  --tblr-gray-400-lt-rgb: 248, 249, 250;
+  --tblr-gray-500: #929dab;
+  --tblr-gray-500-rgb: 146, 157, 171;
+  --tblr-gray-500-fg: var(--tblr-light);
+  --tblr-gray-500-darken: #838d9a;
+  --tblr-gray-500-lt: #f4f5f7;
+  --tblr-gray-500-lt-rgb: 244, 245, 247;
+  --tblr-gray-600: #667382;
+  --tblr-gray-600-rgb: 102, 115, 130;
+  --tblr-gray-600-fg: var(--tblr-light);
+  --tblr-gray-600-darken: #5c6875;
+  --tblr-gray-600-lt: #f0f1f3;
+  --tblr-gray-600-lt-rgb: 240, 241, 243;
+  --tblr-gray-700: #3a4859;
+  --tblr-gray-700-rgb: 58, 72, 89;
+  --tblr-gray-700-fg: var(--tblr-light);
+  --tblr-gray-700-darken: #344150;
+  --tblr-gray-700-lt: #ebedee;
+  --tblr-gray-700-lt-rgb: 235, 237, 238;
+  --tblr-gray-800: #182433;
+  --tblr-gray-800-rgb: 24, 36, 51;
+  --tblr-gray-800-fg: var(--tblr-light);
+  --tblr-gray-800-darken: #16202e;
+  --tblr-gray-800-lt: #e8e9eb;
+  --tblr-gray-800-lt-rgb: 232, 233, 235;
+  --tblr-gray-900: #040a11;
+  --tblr-gray-900-rgb: 4, 10, 17;
+  --tblr-gray-900-fg: var(--tblr-light);
+  --tblr-gray-900-darken: #04090f;
+  --tblr-gray-900-lt: #e6e7e7;
+  --tblr-gray-900-lt-rgb: 230, 231, 231;
+  --tblr-spacer-0: 0;
+  --tblr-spacer-1: 0.25rem;
+  --tblr-spacer-2: 0.5rem;
+  --tblr-spacer-3: 1rem;
+  --tblr-spacer-4: 1.5rem;
+  --tblr-spacer-5: 2rem;
+  --tblr-spacer-6: 3rem;
+  --tblr-spacer-7: 5rem;
+  --tblr-spacer-8: 8rem;
+  --tblr-spacer: 1rem;
+  --tblr-bg-surface: var(--tblr-white);
+  --tblr-bg-surface-secondary: var(--tblr-gray-100);
+  --tblr-bg-surface-tertiary: var(--tblr-gray-50);
+  --tblr-bg-surface-dark: var(--tblr-dark);
+  --tblr-bg-forms: var(--tblr-bg-surface);
+  --tblr-border-color: #dadfe5;
+  --tblr-border-color-translucent: rgba(4, 32, 69, 0.14);
+  --tblr-border-dark-color: #bbc3cd;
+  --tblr-border-dark-color-translucent: rgba(4, 32, 69, 0.27);
+  --tblr-border-active-color: #b6bcc3;
+  --tblr-icon-color: var(--tblr-gray-500);
+  --tblr-active-bg: rgba(var(--tblr-primary-rgb), 0.04);
+  --tblr-disabled-bg: var(--tblr-bg-surface-secondary);
+  --tblr-disabled-color: var(--tblr-gray-300);
+  --tblr-code-color: var(--tblr-gray-600);
+  --tblr-code-bg: var(--tblr-bg-surface-secondary);
+  --tblr-dark-mode-border-color: #1f2e41;
+  --tblr-dark-mode-border-color-translucent: rgba(72, 110, 149, 0.14);
+  --tblr-dark-mode-border-color-active: #2c415d;
+  --tblr-dark-mode-border-dark-color: #1f2e41;
+  --tblr-page-padding: var(--tblr-spacer-3);
+  --tblr-page-padding-y: var(--tblr-spacer-4);
+  --tblr-font-weight-light: 300;
+  --tblr-font-weight-normal: 400;
+  --tblr-font-weight-medium: 500;
+  --tblr-font-weight-bold: 600;
+  --tblr-font-weight-headings: var(--tblr-font-weight-bold);
+  --tblr-font-size-h1: 1.5rem;
+  --tblr-font-size-h2: 1.25rem;
+  --tblr-font-size-h3: 1rem;
+  --tblr-font-size-h4: 0.875rem;
+  --tblr-font-size-h5: 0.75rem;
+  --tblr-font-size-h6: 0.625rem;
+  --tblr-line-height-h1: 2rem;
+  --tblr-line-height-h2: 1.75rem;
+  --tblr-line-height-h3: 1.5rem;
+  --tblr-line-height-h4: 1.25rem;
+  --tblr-line-height-h5: 1rem;
+  --tblr-line-height-h6: 1rem;
+  --tblr-box-shadow: rgba(var(--tblr-body-color-rgb), 0.04) 0 2px 4px 0;
+  --tblr-box-shadow-border: inset 0 0 0 1px var(--tblr-border-color-translucent);
+  --tblr-box-shadow-transparent: 0 0 0 0 transparent;
+  --tblr-box-shadow-input: 0 1px 1px rgba(var(--tblr-body-color-rgb), 0.06);
+  --tblr-box-shadow-card: 0 0 4px rgba(var(--tblr-body-color-rgb), 0.04);
+  --tblr-box-shadow-card-hover: rgba(var(--tblr-body-color-rgb), 0.16) 0 2px 16px 0;
+  --tblr-box-shadow-dropdown: 0 16px 24px 2px rgba(0, 0, 0, 0.07), 0 6px 30px 5px rgba(0, 0, 0, 0.06), 0 8px 10px -5px rgba(0, 0, 0, 0.1);
+}
+@media (max-width: 991.98px) {
+  :root,
+  :host,
+  [data-bs-theme=light] {
+    --tblr-page-padding: var(--tblr-spacer-2);
+  }
+}
+
+@keyframes pulse {
+  from {
+    opacity: 1;
+    transform: scale3d(0.8, 0.8, 0.8);
+  }
+  50% {
+    transform: scale3d(1, 1, 1);
+    opacity: 1;
+  }
+  to {
+    opacity: 1;
+    transform: scale3d(0.8, 0.8, 0.8);
+  }
+}
+@keyframes tada {
+  0% {
+    transform: scale3d(1, 1, 1);
+  }
+  10%, 5% {
+    transform: scale3d(0.9, 0.9, 0.9) rotate3d(0, 0, 1, -5deg);
+  }
+  15%, 25%, 35%, 45% {
+    transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 5deg);
+  }
+  20%, 30%, 40% {
+    transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -5deg);
+  }
+  50% {
+    transform: scale3d(1, 1, 1);
+  }
+}
+@keyframes rotate-360 {
+  from {
+    transform: rotate(0deg);
+  }
+  to {
+    transform: rotate(360deg);
+  }
+}
+@keyframes blink {
+  from {
+    opacity: 0;
+  }
+  50% {
+    opacity: 1;
+  }
+  to {
+    opacity: 0;
+  }
+}
+body {
+  letter-spacing: 0;
+  touch-action: manipulation;
+  text-rendering: optimizeLegibility;
+  font-feature-settings: "liga" 0;
+  position: relative;
+  min-height: 100%;
+  height: 100%;
+  -webkit-font-smoothing: antialiased;
+  -moz-osx-font-smoothing: grayscale;
+}
+@media print {
+  body {
+    background: transparent;
+  }
+}
+
+* {
+  scrollbar-color: rgba(var(--tblr-scrollbar-color, var(--tblr-body-color-rgb)), 0.16) transparent;
+}
+
+*::-webkit-scrollbar {
+  width: 1rem;
+  height: 1rem;
+  -webkit-transition: background 0.3s;
+  transition: background 0.3s;
+}
+@media (prefers-reduced-motion: reduce) {
+  *::-webkit-scrollbar {
+    -webkit-transition: none;
+    transition: none;
+  }
+}
+
+*::-webkit-scrollbar-thumb {
+  border-radius: 1rem;
+  border: 5px solid transparent;
+  box-shadow: inset 0 0 0 1rem rgba(var(--tblr-scrollbar-color, var(--tblr-body-color-rgb)), 0.16);
+}
+
+*::-webkit-scrollbar-track {
+  background: transparent;
+}
+
+*:hover::-webkit-scrollbar-thumb {
+  box-shadow: inset 0 0 0 1rem rgba(var(--tblr-scrollbar-color, var(--tblr-body-color-rgb)), 0.32);
+}
+
+*::-webkit-scrollbar-corner {
+  background: transparent;
+}
+
+.layout-fluid .container,
+.layout-fluid [class^=container-],
+.layout-fluid [class*=" container-"] {
+  max-width: 100%;
+}
+
+.layout-boxed {
+  --tblr-theme-boxed-border-radius: 0;
+  --tblr-theme-boxed-width: 1320px;
+}
+@media (min-width: 768px) {
+  .layout-boxed {
+    background: #182433 linear-gradient(to right, rgba(255, 255, 255, 0.1), transparent) fixed;
+    padding: 1rem;
+    --tblr-theme-boxed-border-radius: 4px;
+  }
+}
+.layout-boxed .page {
+  margin: 0 auto;
+  max-width: var(--tblr-theme-boxed-width);
+  border-radius: var(--tblr-theme-boxed-border-radius);
+  color: var(--tblr-body-color);
+}
+@media (min-width: 768px) {
+  .layout-boxed .page {
+    border: var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color);
+    background: var(--tblr-body-bg);
+  }
+}
+.layout-boxed .page > .navbar:first-child {
+  border-top-left-radius: var(--tblr-theme-boxed-border-radius);
+  border-top-right-radius: var(--tblr-theme-boxed-border-radius);
+}
+
+/**
+Navbar
+ */
+.navbar {
+  --tblr-navbar-bg: var(--tblr-bg-surface);
+  --tblr-navbar-border-width: var(--tblr-border-width);
+  --tblr-navbar-active-border-color: var(--tblr-primary);
+  --tblr-navbar-active-bg: rgba(0, 0, 0, 0.06);
+  --tblr-navbar-color: var(--tblr-body-color);
+  --tblr-navbar-border-color: var(--tblr-border-color);
+  align-items: stretch;
+  min-height: 3.5rem;
+  box-shadow: inset 0 calc(-1 * var(--tblr-navbar-border-width)) 0 0 var(--tblr-navbar-border-color);
+  background: var(--tblr-navbar-bg);
+  color: var(--tblr-navbar-color);
+}
+.navbar-collapse .navbar {
+  flex-grow: 1;
+}
+.navbar.collapsing {
+  min-height: 0;
+}
+.navbar .dropdown-menu {
+  position: absolute;
+  z-index: 1030;
+}
+.navbar .navbar-nav {
+  min-height: 3rem;
+}
+.navbar .navbar-nav .nav-link {
+  position: relative;
+  min-width: 2rem;
+  min-height: 2rem;
+  justify-content: center;
+  border-radius: var(--tblr-border-radius);
+}
+.navbar .navbar-nav .nav-link .badge {
+  position: absolute;
+  top: 0.375rem;
+  right: 0.375rem;
+  transform: translate(50%, -50%);
+}
+
+.navbar-nav {
+  margin: 0;
+  padding: 0;
+}
+
+@media (max-width: 575.98px) {
+  .navbar-expand-sm .navbar-collapse {
+    flex-direction: column;
+  }
+  .navbar-expand-sm .navbar-collapse [class^=container] {
+    flex-direction: column;
+    align-items: stretch;
+    padding: 0;
+  }
+  .navbar-expand-sm .navbar-collapse .navbar-nav {
+    margin-left: 0;
+    margin-right: 0;
+  }
+  .navbar-expand-sm .navbar-collapse .navbar-nav .nav-link {
+    padding: 0.5rem calc(calc(var(--tblr-page-padding) * 2) / 2);
+    justify-content: flex-start;
+  }
+  .navbar-expand-sm .navbar-collapse .dropdown-menu-columns {
+    flex-direction: column;
+  }
+  .navbar-expand-sm .navbar-collapse .dropdown-menu {
+    padding: 0;
+    background: transparent;
+    position: static;
+    color: inherit;
+    box-shadow: none;
+    border: none;
+    min-width: 0;
+    margin: 0;
+  }
+  .navbar-expand-sm .navbar-collapse .dropdown-menu .dropdown-item {
+    min-width: 0;
+    display: flex;
+    width: auto;
+    padding-left: calc(calc(calc(var(--tblr-page-padding) * 2) / 2) + 1.75rem);
+    color: inherit;
+  }
+  .navbar-expand-sm .navbar-collapse .dropdown-menu .dropdown-item.active, .navbar-expand-sm .navbar-collapse .dropdown-menu .dropdown-item:active {
+    background: var(--tblr-navbar-active-bg);
+  }
+  .navbar-expand-sm .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-item {
+    padding-left: calc(calc(calc(var(--tblr-page-padding) * 2) / 2) + 3.25rem);
+  }
+  .navbar-expand-sm .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-menu .dropdown-item {
+    padding-left: calc(calc(calc(var(--tblr-page-padding) * 2) / 2) + 4.75rem);
+  }
+  .navbar-expand-sm .navbar-collapse .dropdown-toggle:after {
+    margin-left: auto;
+  }
+  .navbar-expand-sm .navbar-collapse .nav-item.active:after {
+    border-bottom-width: 0;
+    border-left-width: 3px;
+    right: auto;
+    top: 0;
+    bottom: 0;
+  }
+}
+@media (min-width: 576px) {
+  .navbar-expand-sm .navbar-collapse {
+    width: auto;
+    flex: 1 1 auto;
+  }
+  .navbar-expand-sm .nav-item.active {
+    position: relative;
+  }
+  .navbar-expand-sm .nav-item.active:after {
+    content: "";
+    position: absolute;
+    left: 0;
+    right: 0;
+    bottom: -0.25rem;
+    border: 0 var(--tblr-border-style) var(--tblr-navbar-active-border-color);
+    border-bottom-width: 2px;
+  }
+  .navbar-expand-sm.navbar-vertical {
+    box-shadow: inset calc(-1 * var(--tblr-navbar-border-width)) 0 0 0 var(--tblr-navbar-border-color);
+  }
+  .navbar-expand-sm.navbar-vertical.navbar-right {
+    box-shadow: inset calc(1 * var(--tblr-navbar-border-width)) 0 0 0 var(--tblr-navbar-border-color);
+  }
+  .navbar-expand-sm.navbar-vertical ~ .navbar,
+  .navbar-expand-sm.navbar-vertical ~ .page-wrapper {
+    margin-left: 15rem;
+  }
+  .navbar-expand-sm.navbar-vertical.navbar-right ~ .navbar,
+  .navbar-expand-sm.navbar-vertical.navbar-right ~ .page-wrapper {
+    margin-left: 0;
+    margin-right: 15rem;
+  }
+}
+@media (max-width: 767.98px) {
+  .navbar-expand-md .navbar-collapse {
+    flex-direction: column;
+  }
+  .navbar-expand-md .navbar-collapse [class^=container] {
+    flex-direction: column;
+    align-items: stretch;
+    padding: 0;
+  }
+  .navbar-expand-md .navbar-collapse .navbar-nav {
+    margin-left: 0;
+    margin-right: 0;
+  }
+  .navbar-expand-md .navbar-collapse .navbar-nav .nav-link {
+    padding: 0.5rem calc(calc(var(--tblr-page-padding) * 2) / 2);
+    justify-content: flex-start;
+  }
+  .navbar-expand-md .navbar-collapse .dropdown-menu-columns {
+    flex-direction: column;
+  }
+  .navbar-expand-md .navbar-collapse .dropdown-menu {
+    padding: 0;
+    background: transparent;
+    position: static;
+    color: inherit;
+    box-shadow: none;
+    border: none;
+    min-width: 0;
+    margin: 0;
+  }
+  .navbar-expand-md .navbar-collapse .dropdown-menu .dropdown-item {
+    min-width: 0;
+    display: flex;
+    width: auto;
+    padding-left: calc(calc(calc(var(--tblr-page-padding) * 2) / 2) + 1.75rem);
+    color: inherit;
+  }
+  .navbar-expand-md .navbar-collapse .dropdown-menu .dropdown-item.active, .navbar-expand-md .navbar-collapse .dropdown-menu .dropdown-item:active {
+    background: var(--tblr-navbar-active-bg);
+  }
+  .navbar-expand-md .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-item {
+    padding-left: calc(calc(calc(var(--tblr-page-padding) * 2) / 2) + 3.25rem);
+  }
+  .navbar-expand-md .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-menu .dropdown-item {
+    padding-left: calc(calc(calc(var(--tblr-page-padding) * 2) / 2) + 4.75rem);
+  }
+  .navbar-expand-md .navbar-collapse .dropdown-toggle:after {
+    margin-left: auto;
+  }
+  .navbar-expand-md .navbar-collapse .nav-item.active:after {
+    border-bottom-width: 0;
+    border-left-width: 3px;
+    right: auto;
+    top: 0;
+    bottom: 0;
+  }
+}
+@media (min-width: 768px) {
+  .navbar-expand-md .navbar-collapse {
+    width: auto;
+    flex: 1 1 auto;
+  }
+  .navbar-expand-md .nav-item.active {
+    position: relative;
+  }
+  .navbar-expand-md .nav-item.active:after {
+    content: "";
+    position: absolute;
+    left: 0;
+    right: 0;
+    bottom: -0.25rem;
+    border: 0 var(--tblr-border-style) var(--tblr-navbar-active-border-color);
+    border-bottom-width: 2px;
+  }
+  .navbar-expand-md.navbar-vertical {
+    box-shadow: inset calc(-1 * var(--tblr-navbar-border-width)) 0 0 0 var(--tblr-navbar-border-color);
+  }
+  .navbar-expand-md.navbar-vertical.navbar-right {
+    box-shadow: inset calc(1 * var(--tblr-navbar-border-width)) 0 0 0 var(--tblr-navbar-border-color);
+  }
+  .navbar-expand-md.navbar-vertical ~ .navbar,
+  .navbar-expand-md.navbar-vertical ~ .page-wrapper {
+    margin-left: 15rem;
+  }
+  .navbar-expand-md.navbar-vertical.navbar-right ~ .navbar,
+  .navbar-expand-md.navbar-vertical.navbar-right ~ .page-wrapper {
+    margin-left: 0;
+    margin-right: 15rem;
+  }
+}
+@media (max-width: 991.98px) {
+  .navbar-expand-lg .navbar-collapse {
+    flex-direction: column;
+  }
+  .navbar-expand-lg .navbar-collapse [class^=container] {
+    flex-direction: column;
+    align-items: stretch;
+    padding: 0;
+  }
+  .navbar-expand-lg .navbar-collapse .navbar-nav {
+    margin-left: 0;
+    margin-right: 0;
+  }
+  .navbar-expand-lg .navbar-collapse .navbar-nav .nav-link {
+    padding: 0.5rem calc(calc(var(--tblr-page-padding) * 2) / 2);
+    justify-content: flex-start;
+  }
+  .navbar-expand-lg .navbar-collapse .dropdown-menu-columns {
+    flex-direction: column;
+  }
+  .navbar-expand-lg .navbar-collapse .dropdown-menu {
+    padding: 0;
+    background: transparent;
+    position: static;
+    color: inherit;
+    box-shadow: none;
+    border: none;
+    min-width: 0;
+    margin: 0;
+  }
+  .navbar-expand-lg .navbar-collapse .dropdown-menu .dropdown-item {
+    min-width: 0;
+    display: flex;
+    width: auto;
+    padding-left: calc(calc(calc(var(--tblr-page-padding) * 2) / 2) + 1.75rem);
+    color: inherit;
+  }
+  .navbar-expand-lg .navbar-collapse .dropdown-menu .dropdown-item.active, .navbar-expand-lg .navbar-collapse .dropdown-menu .dropdown-item:active {
+    background: var(--tblr-navbar-active-bg);
+  }
+  .navbar-expand-lg .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-item {
+    padding-left: calc(calc(calc(var(--tblr-page-padding) * 2) / 2) + 3.25rem);
+  }
+  .navbar-expand-lg .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-menu .dropdown-item {
+    padding-left: calc(calc(calc(var(--tblr-page-padding) * 2) / 2) + 4.75rem);
+  }
+  .navbar-expand-lg .navbar-collapse .dropdown-toggle:after {
+    margin-left: auto;
+  }
+  .navbar-expand-lg .navbar-collapse .nav-item.active:after {
+    border-bottom-width: 0;
+    border-left-width: 3px;
+    right: auto;
+    top: 0;
+    bottom: 0;
+  }
+}
+@media (min-width: 992px) {
+  .navbar-expand-lg .navbar-collapse {
+    width: auto;
+    flex: 1 1 auto;
+  }
+  .navbar-expand-lg .nav-item.active {
+    position: relative;
+  }
+  .navbar-expand-lg .nav-item.active:after {
+    content: "";
+    position: absolute;
+    left: 0;
+    right: 0;
+    bottom: -0.25rem;
+    border: 0 var(--tblr-border-style) var(--tblr-navbar-active-border-color);
+    border-bottom-width: 2px;
+  }
+  .navbar-expand-lg.navbar-vertical {
+    box-shadow: inset calc(-1 * var(--tblr-navbar-border-width)) 0 0 0 var(--tblr-navbar-border-color);
+  }
+  .navbar-expand-lg.navbar-vertical.navbar-right {
+    box-shadow: inset calc(1 * var(--tblr-navbar-border-width)) 0 0 0 var(--tblr-navbar-border-color);
+  }
+  .navbar-expand-lg.navbar-vertical ~ .navbar,
+  .navbar-expand-lg.navbar-vertical ~ .page-wrapper {
+    margin-left: 15rem;
+  }
+  .navbar-expand-lg.navbar-vertical.navbar-right ~ .navbar,
+  .navbar-expand-lg.navbar-vertical.navbar-right ~ .page-wrapper {
+    margin-left: 0;
+    margin-right: 15rem;
+  }
+}
+@media (max-width: 1199.98px) {
+  .navbar-expand-xl .navbar-collapse {
+    flex-direction: column;
+  }
+  .navbar-expand-xl .navbar-collapse [class^=container] {
+    flex-direction: column;
+    align-items: stretch;
+    padding: 0;
+  }
+  .navbar-expand-xl .navbar-collapse .navbar-nav {
+    margin-left: 0;
+    margin-right: 0;
+  }
+  .navbar-expand-xl .navbar-collapse .navbar-nav .nav-link {
+    padding: 0.5rem calc(calc(var(--tblr-page-padding) * 2) / 2);
+    justify-content: flex-start;
+  }
+  .navbar-expand-xl .navbar-collapse .dropdown-menu-columns {
+    flex-direction: column;
+  }
+  .navbar-expand-xl .navbar-collapse .dropdown-menu {
+    padding: 0;
+    background: transparent;
+    position: static;
+    color: inherit;
+    box-shadow: none;
+    border: none;
+    min-width: 0;
+    margin: 0;
+  }
+  .navbar-expand-xl .navbar-collapse .dropdown-menu .dropdown-item {
+    min-width: 0;
+    display: flex;
+    width: auto;
+    padding-left: calc(calc(calc(var(--tblr-page-padding) * 2) / 2) + 1.75rem);
+    color: inherit;
+  }
+  .navbar-expand-xl .navbar-collapse .dropdown-menu .dropdown-item.active, .navbar-expand-xl .navbar-collapse .dropdown-menu .dropdown-item:active {
+    background: var(--tblr-navbar-active-bg);
+  }
+  .navbar-expand-xl .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-item {
+    padding-left: calc(calc(calc(var(--tblr-page-padding) * 2) / 2) + 3.25rem);
+  }
+  .navbar-expand-xl .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-menu .dropdown-item {
+    padding-left: calc(calc(calc(var(--tblr-page-padding) * 2) / 2) + 4.75rem);
+  }
+  .navbar-expand-xl .navbar-collapse .dropdown-toggle:after {
+    margin-left: auto;
+  }
+  .navbar-expand-xl .navbar-collapse .nav-item.active:after {
+    border-bottom-width: 0;
+    border-left-width: 3px;
+    right: auto;
+    top: 0;
+    bottom: 0;
+  }
+}
+@media (min-width: 1200px) {
+  .navbar-expand-xl .navbar-collapse {
+    width: auto;
+    flex: 1 1 auto;
+  }
+  .navbar-expand-xl .nav-item.active {
+    position: relative;
+  }
+  .navbar-expand-xl .nav-item.active:after {
+    content: "";
+    position: absolute;
+    left: 0;
+    right: 0;
+    bottom: -0.25rem;
+    border: 0 var(--tblr-border-style) var(--tblr-navbar-active-border-color);
+    border-bottom-width: 2px;
+  }
+  .navbar-expand-xl.navbar-vertical {
+    box-shadow: inset calc(-1 * var(--tblr-navbar-border-width)) 0 0 0 var(--tblr-navbar-border-color);
+  }
+  .navbar-expand-xl.navbar-vertical.navbar-right {
+    box-shadow: inset calc(1 * var(--tblr-navbar-border-width)) 0 0 0 var(--tblr-navbar-border-color);
+  }
+  .navbar-expand-xl.navbar-vertical ~ .navbar,
+  .navbar-expand-xl.navbar-vertical ~ .page-wrapper {
+    margin-left: 15rem;
+  }
+  .navbar-expand-xl.navbar-vertical.navbar-right ~ .navbar,
+  .navbar-expand-xl.navbar-vertical.navbar-right ~ .page-wrapper {
+    margin-left: 0;
+    margin-right: 15rem;
+  }
+}
+@media (max-width: 1399.98px) {
+  .navbar-expand-xxl .navbar-collapse {
+    flex-direction: column;
+  }
+  .navbar-expand-xxl .navbar-collapse [class^=container] {
+    flex-direction: column;
+    align-items: stretch;
+    padding: 0;
+  }
+  .navbar-expand-xxl .navbar-collapse .navbar-nav {
+    margin-left: 0;
+    margin-right: 0;
+  }
+  .navbar-expand-xxl .navbar-collapse .navbar-nav .nav-link {
+    padding: 0.5rem calc(calc(var(--tblr-page-padding) * 2) / 2);
+    justify-content: flex-start;
+  }
+  .navbar-expand-xxl .navbar-collapse .dropdown-menu-columns {
+    flex-direction: column;
+  }
+  .navbar-expand-xxl .navbar-collapse .dropdown-menu {
+    padding: 0;
+    background: transparent;
+    position: static;
+    color: inherit;
+    box-shadow: none;
+    border: none;
+    min-width: 0;
+    margin: 0;
+  }
+  .navbar-expand-xxl .navbar-collapse .dropdown-menu .dropdown-item {
+    min-width: 0;
+    display: flex;
+    width: auto;
+    padding-left: calc(calc(calc(var(--tblr-page-padding) * 2) / 2) + 1.75rem);
+    color: inherit;
+  }
+  .navbar-expand-xxl .navbar-collapse .dropdown-menu .dropdown-item.active, .navbar-expand-xxl .navbar-collapse .dropdown-menu .dropdown-item:active {
+    background: var(--tblr-navbar-active-bg);
+  }
+  .navbar-expand-xxl .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-item {
+    padding-left: calc(calc(calc(var(--tblr-page-padding) * 2) / 2) + 3.25rem);
+  }
+  .navbar-expand-xxl .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-menu .dropdown-item {
+    padding-left: calc(calc(calc(var(--tblr-page-padding) * 2) / 2) + 4.75rem);
+  }
+  .navbar-expand-xxl .navbar-collapse .dropdown-toggle:after {
+    margin-left: auto;
+  }
+  .navbar-expand-xxl .navbar-collapse .nav-item.active:after {
+    border-bottom-width: 0;
+    border-left-width: 3px;
+    right: auto;
+    top: 0;
+    bottom: 0;
+  }
+}
+@media (min-width: 1400px) {
+  .navbar-expand-xxl .navbar-collapse {
+    width: auto;
+    flex: 1 1 auto;
+  }
+  .navbar-expand-xxl .nav-item.active {
+    position: relative;
+  }
+  .navbar-expand-xxl .nav-item.active:after {
+    content: "";
+    position: absolute;
+    left: 0;
+    right: 0;
+    bottom: -0.25rem;
+    border: 0 var(--tblr-border-style) var(--tblr-navbar-active-border-color);
+    border-bottom-width: 2px;
+  }
+  .navbar-expand-xxl.navbar-vertical {
+    box-shadow: inset calc(-1 * var(--tblr-navbar-border-width)) 0 0 0 var(--tblr-navbar-border-color);
+  }
+  .navbar-expand-xxl.navbar-vertical.navbar-right {
+    box-shadow: inset calc(1 * var(--tblr-navbar-border-width)) 0 0 0 var(--tblr-navbar-border-color);
+  }
+  .navbar-expand-xxl.navbar-vertical ~ .navbar,
+  .navbar-expand-xxl.navbar-vertical ~ .page-wrapper {
+    margin-left: 15rem;
+  }
+  .navbar-expand-xxl.navbar-vertical.navbar-right ~ .navbar,
+  .navbar-expand-xxl.navbar-vertical.navbar-right ~ .page-wrapper {
+    margin-left: 0;
+    margin-right: 15rem;
+  }
+}
+.navbar-expand .navbar-collapse {
+  flex-direction: column;
+}
+.navbar-expand .navbar-collapse [class^=container] {
+  flex-direction: column;
+  align-items: stretch;
+  padding: 0;
+}
+.navbar-expand .navbar-collapse .navbar-nav {
+  margin-left: 0;
+  margin-right: 0;
+}
+.navbar-expand .navbar-collapse .navbar-nav .nav-link {
+  padding: 0.5rem calc(calc(var(--tblr-page-padding) * 2) / 2);
+  justify-content: flex-start;
+}
+.navbar-expand .navbar-collapse .dropdown-menu-columns {
+  flex-direction: column;
+}
+.navbar-expand .navbar-collapse .dropdown-menu {
+  padding: 0;
+  background: transparent;
+  position: static;
+  color: inherit;
+  box-shadow: none;
+  border: none;
+  min-width: 0;
+  margin: 0;
+}
+.navbar-expand .navbar-collapse .dropdown-menu .dropdown-item {
+  min-width: 0;
+  display: flex;
+  width: auto;
+  padding-left: calc(calc(calc(var(--tblr-page-padding) * 2) / 2) + 1.75rem);
+  color: inherit;
+}
+.navbar-expand .navbar-collapse .dropdown-menu .dropdown-item.active, .navbar-expand .navbar-collapse .dropdown-menu .dropdown-item:active {
+  background: var(--tblr-navbar-active-bg);
+}
+.navbar-expand .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-item {
+  padding-left: calc(calc(calc(var(--tblr-page-padding) * 2) / 2) + 3.25rem);
+}
+.navbar-expand .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-menu .dropdown-item {
+  padding-left: calc(calc(calc(var(--tblr-page-padding) * 2) / 2) + 4.75rem);
+}
+.navbar-expand .navbar-collapse .dropdown-toggle:after {
+  margin-left: auto;
+}
+.navbar-expand .navbar-collapse .nav-item.active:after {
+  border-bottom-width: 0;
+  border-left-width: 3px;
+  right: auto;
+  top: 0;
+  bottom: 0;
+}
+.navbar-expand .navbar-collapse {
+  width: auto;
+  flex: 1 1 auto;
+}
+.navbar-expand .nav-item.active {
+  position: relative;
+}
+.navbar-expand .nav-item.active:after {
+  content: "";
+  position: absolute;
+  left: 0;
+  right: 0;
+  bottom: -0.25rem;
+  border: 0 var(--tblr-border-style) var(--tblr-navbar-active-border-color);
+  border-bottom-width: 2px;
+}
+.navbar-expand.navbar-vertical {
+  box-shadow: inset calc(-1 * var(--tblr-navbar-border-width)) 0 0 0 var(--tblr-navbar-border-color);
+}
+.navbar-expand.navbar-vertical.navbar-right {
+  box-shadow: inset calc(1 * var(--tblr-navbar-border-width)) 0 0 0 var(--tblr-navbar-border-color);
+}
+.navbar-expand.navbar-vertical ~ .navbar,
+.navbar-expand.navbar-vertical ~ .page-wrapper {
+  margin-left: 15rem;
+}
+.navbar-expand.navbar-vertical.navbar-right ~ .navbar,
+.navbar-expand.navbar-vertical.navbar-right ~ .page-wrapper {
+  margin-left: 0;
+  margin-right: 15rem;
+}
+
+/**
+Navbar brand
+ */
+.navbar-brand {
+  display: inline-flex;
+  align-items: center;
+  font-weight: var(--tblr-font-weight-bold);
+  margin: 0;
+  line-height: 1;
+  gap: 0.5rem;
+}
+
+.navbar-brand-image {
+  height: 2rem;
+  width: auto;
+}
+
+/**
+Navbar toggler
+ */
+.navbar-toggler {
+  border: 0;
+  width: 2rem;
+  height: 2rem;
+  position: relative;
+  display: flex;
+  align-items: center;
+  justify-content: center;
+}
+
+.navbar-toggler-icon {
+  height: 2px;
+  width: 1.25em;
+  background: currentColor;
+  border-radius: 10px;
+  transition: top 0.2s 0.2s, bottom 0.2s 0.2s, transform 0.2s, opacity 0s 0.2s;
+  position: relative;
+}
+@media (prefers-reduced-motion: reduce) {
+  .navbar-toggler-icon {
+    transition: none;
+  }
+}
+.navbar-toggler-icon:before, .navbar-toggler-icon:after {
+  content: "";
+  display: block;
+  height: inherit;
+  width: inherit;
+  border-radius: inherit;
+  background: inherit;
+  position: absolute;
+  left: 0;
+  transition: inherit;
+}
+@media (prefers-reduced-motion: reduce) {
+  .navbar-toggler-icon:before, .navbar-toggler-icon:after {
+    transition: none;
+  }
+}
+.navbar-toggler-icon:before {
+  top: -0.45em;
+}
+.navbar-toggler-icon:after {
+  bottom: -0.45em;
+}
+.navbar-toggler[aria-expanded=true] .navbar-toggler-icon {
+  transform: rotate(45deg);
+  transition: top 0.3s, bottom 0.3s, transform 0.3s 0.3s, opacity 0s 0.3s;
+}
+@media (prefers-reduced-motion: reduce) {
+  .navbar-toggler[aria-expanded=true] .navbar-toggler-icon {
+    transition: none;
+  }
+}
+.navbar-toggler[aria-expanded=true] .navbar-toggler-icon:before {
+  top: 0;
+  transform: rotate(-90deg);
+}
+.navbar-toggler[aria-expanded=true] .navbar-toggler-icon:after {
+  bottom: 0;
+  opacity: 0;
+}
+
+/**
+Navbar transparent
+ */
+.navbar-transparent {
+  --tblr-navbar-border-color: transparent !important;
+  background: transparent !important;
+}
+
+/**
+Navbar nav
+ */
+.navbar-nav {
+  align-items: stretch;
+}
+.navbar-nav .nav-item {
+  display: flex;
+  flex-direction: column;
+  justify-content: center;
+}
+
+/**
+Navbar side
+ */
+.navbar-side {
+  margin: 0;
+  display: flex;
+  flex-direction: row;
+  align-items: center;
+  justify-content: space-around;
+}
+
+/**
+Navbar vertical
+ */
+@media (min-width: 576px) {
+  .navbar-vertical.navbar-expand-sm {
+    width: 15rem;
+    position: fixed;
+    top: 0;
+    left: 0;
+    bottom: 0;
+    z-index: 1030;
+    align-items: flex-start;
+    transition: transform 0.3s;
+    overflow-y: scroll;
+    padding: 0;
+  }
+}
+@media (min-width: 576px) and (prefers-reduced-motion: reduce) {
+  .navbar-vertical.navbar-expand-sm {
+    transition: none;
+  }
+}
+@media (min-width: 576px) {
+  .navbar-vertical.navbar-expand-sm.navbar-right {
+    left: auto;
+    right: 0;
+  }
+  .navbar-vertical.navbar-expand-sm .navbar-brand {
+    padding: 0.75rem 0;
+    justify-content: center;
+  }
+  .navbar-vertical.navbar-expand-sm .navbar-collapse {
+    align-items: stretch;
+  }
+  .navbar-vertical.navbar-expand-sm .navbar-nav {
+    flex-direction: column;
+    flex-grow: 1;
+    min-height: auto;
+  }
+  .navbar-vertical.navbar-expand-sm .navbar-nav .nav-link {
+    padding-top: 0.5rem;
+    padding-bottom: 0.5rem;
+  }
+  .navbar-vertical.navbar-expand-sm > [class^=container] {
+    flex-direction: column;
+    align-items: stretch;
+    min-height: 100%;
+    justify-content: flex-start;
+    padding: 0;
+  }
+  .navbar-vertical.navbar-expand-sm ~ .page {
+    padding-left: 15rem;
+  }
+  .navbar-vertical.navbar-expand-sm ~ .page [class^=container] {
+    padding-left: 1.5rem;
+    padding-right: 1.5rem;
+  }
+  .navbar-vertical.navbar-expand-sm.navbar-right ~ .page {
+    padding-left: 0;
+    padding-right: 15rem;
+  }
+  .navbar-vertical.navbar-expand-sm .navbar-collapse {
+    flex-direction: column;
+  }
+  .navbar-vertical.navbar-expand-sm .navbar-collapse [class^=container] {
+    flex-direction: column;
+    align-items: stretch;
+    padding: 0;
+  }
+  .navbar-vertical.navbar-expand-sm .navbar-collapse .navbar-nav {
+    margin-left: 0;
+    margin-right: 0;
+  }
+  .navbar-vertical.navbar-expand-sm .navbar-collapse .navbar-nav .nav-link {
+    padding: 0.5rem calc(calc(var(--tblr-page-padding) * 2) / 2);
+    justify-content: flex-start;
+  }
+  .navbar-vertical.navbar-expand-sm .navbar-collapse .dropdown-menu-columns {
+    flex-direction: column;
+  }
+  .navbar-vertical.navbar-expand-sm .navbar-collapse .dropdown-menu {
+    padding: 0;
+    background: transparent;
+    position: static;
+    color: inherit;
+    box-shadow: none;
+    border: none;
+    min-width: 0;
+    margin: 0;
+  }
+  .navbar-vertical.navbar-expand-sm .navbar-collapse .dropdown-menu .dropdown-item {
+    min-width: 0;
+    display: flex;
+    width: auto;
+    padding-left: calc(calc(calc(var(--tblr-page-padding) * 2) / 2) + 1.75rem);
+    color: inherit;
+  }
+  .navbar-vertical.navbar-expand-sm .navbar-collapse .dropdown-menu .dropdown-item.active, .navbar-vertical.navbar-expand-sm .navbar-collapse .dropdown-menu .dropdown-item:active {
+    background: var(--tblr-navbar-active-bg);
+  }
+  .navbar-vertical.navbar-expand-sm .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-item {
+    padding-left: calc(calc(calc(var(--tblr-page-padding) * 2) / 2) + 3.25rem);
+  }
+  .navbar-vertical.navbar-expand-sm .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-menu .dropdown-item {
+    padding-left: calc(calc(calc(var(--tblr-page-padding) * 2) / 2) + 4.75rem);
+  }
+  .navbar-vertical.navbar-expand-sm .navbar-collapse .dropdown-toggle:after {
+    margin-left: auto;
+  }
+  .navbar-vertical.navbar-expand-sm .navbar-collapse .nav-item.active:after {
+    border-bottom-width: 0;
+    border-left-width: 3px;
+    right: auto;
+    top: 0;
+    bottom: 0;
+  }
+}
+@media (min-width: 768px) {
+  .navbar-vertical.navbar-expand-md {
+    width: 15rem;
+    position: fixed;
+    top: 0;
+    left: 0;
+    bottom: 0;
+    z-index: 1030;
+    align-items: flex-start;
+    transition: transform 0.3s;
+    overflow-y: scroll;
+    padding: 0;
+  }
+}
+@media (min-width: 768px) and (prefers-reduced-motion: reduce) {
+  .navbar-vertical.navbar-expand-md {
+    transition: none;
+  }
+}
+@media (min-width: 768px) {
+  .navbar-vertical.navbar-expand-md.navbar-right {
+    left: auto;
+    right: 0;
+  }
+  .navbar-vertical.navbar-expand-md .navbar-brand {
+    padding: 0.75rem 0;
+    justify-content: center;
+  }
+  .navbar-vertical.navbar-expand-md .navbar-collapse {
+    align-items: stretch;
+  }
+  .navbar-vertical.navbar-expand-md .navbar-nav {
+    flex-direction: column;
+    flex-grow: 1;
+    min-height: auto;
+  }
+  .navbar-vertical.navbar-expand-md .navbar-nav .nav-link {
+    padding-top: 0.5rem;
+    padding-bottom: 0.5rem;
+  }
+  .navbar-vertical.navbar-expand-md > [class^=container] {
+    flex-direction: column;
+    align-items: stretch;
+    min-height: 100%;
+    justify-content: flex-start;
+    padding: 0;
+  }
+  .navbar-vertical.navbar-expand-md ~ .page {
+    padding-left: 15rem;
+  }
+  .navbar-vertical.navbar-expand-md ~ .page [class^=container] {
+    padding-left: 1.5rem;
+    padding-right: 1.5rem;
+  }
+  .navbar-vertical.navbar-expand-md.navbar-right ~ .page {
+    padding-left: 0;
+    padding-right: 15rem;
+  }
+  .navbar-vertical.navbar-expand-md .navbar-collapse {
+    flex-direction: column;
+  }
+  .navbar-vertical.navbar-expand-md .navbar-collapse [class^=container] {
+    flex-direction: column;
+    align-items: stretch;
+    padding: 0;
+  }
+  .navbar-vertical.navbar-expand-md .navbar-collapse .navbar-nav {
+    margin-left: 0;
+    margin-right: 0;
+  }
+  .navbar-vertical.navbar-expand-md .navbar-collapse .navbar-nav .nav-link {
+    padding: 0.5rem calc(calc(var(--tblr-page-padding) * 2) / 2);
+    justify-content: flex-start;
+  }
+  .navbar-vertical.navbar-expand-md .navbar-collapse .dropdown-menu-columns {
+    flex-direction: column;
+  }
+  .navbar-vertical.navbar-expand-md .navbar-collapse .dropdown-menu {
+    padding: 0;
+    background: transparent;
+    position: static;
+    color: inherit;
+    box-shadow: none;
+    border: none;
+    min-width: 0;
+    margin: 0;
+  }
+  .navbar-vertical.navbar-expand-md .navbar-collapse .dropdown-menu .dropdown-item {
+    min-width: 0;
+    display: flex;
+    width: auto;
+    padding-left: calc(calc(calc(var(--tblr-page-padding) * 2) / 2) + 1.75rem);
+    color: inherit;
+  }
+  .navbar-vertical.navbar-expand-md .navbar-collapse .dropdown-menu .dropdown-item.active, .navbar-vertical.navbar-expand-md .navbar-collapse .dropdown-menu .dropdown-item:active {
+    background: var(--tblr-navbar-active-bg);
+  }
+  .navbar-vertical.navbar-expand-md .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-item {
+    padding-left: calc(calc(calc(var(--tblr-page-padding) * 2) / 2) + 3.25rem);
+  }
+  .navbar-vertical.navbar-expand-md .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-menu .dropdown-item {
+    padding-left: calc(calc(calc(var(--tblr-page-padding) * 2) / 2) + 4.75rem);
+  }
+  .navbar-vertical.navbar-expand-md .navbar-collapse .dropdown-toggle:after {
+    margin-left: auto;
+  }
+  .navbar-vertical.navbar-expand-md .navbar-collapse .nav-item.active:after {
+    border-bottom-width: 0;
+    border-left-width: 3px;
+    right: auto;
+    top: 0;
+    bottom: 0;
+  }
+}
+@media (min-width: 992px) {
+  .navbar-vertical.navbar-expand-lg {
+    width: 15rem;
+    position: fixed;
+    top: 0;
+    left: 0;
+    bottom: 0;
+    z-index: 1030;
+    align-items: flex-start;
+    transition: transform 0.3s;
+    overflow-y: scroll;
+    padding: 0;
+  }
+}
+@media (min-width: 992px) and (prefers-reduced-motion: reduce) {
+  .navbar-vertical.navbar-expand-lg {
+    transition: none;
+  }
+}
+@media (min-width: 992px) {
+  .navbar-vertical.navbar-expand-lg.navbar-right {
+    left: auto;
+    right: 0;
+  }
+  .navbar-vertical.navbar-expand-lg .navbar-brand {
+    padding: 0.75rem 0;
+    justify-content: center;
+  }
+  .navbar-vertical.navbar-expand-lg .navbar-collapse {
+    align-items: stretch;
+  }
+  .navbar-vertical.navbar-expand-lg .navbar-nav {
+    flex-direction: column;
+    flex-grow: 1;
+    min-height: auto;
+  }
+  .navbar-vertical.navbar-expand-lg .navbar-nav .nav-link {
+    padding-top: 0.5rem;
+    padding-bottom: 0.5rem;
+  }
+  .navbar-vertical.navbar-expand-lg > [class^=container] {
+    flex-direction: column;
+    align-items: stretch;
+    min-height: 100%;
+    justify-content: flex-start;
+    padding: 0;
+  }
+  .navbar-vertical.navbar-expand-lg ~ .page {
+    padding-left: 15rem;
+  }
+  .navbar-vertical.navbar-expand-lg ~ .page [class^=container] {
+    padding-left: 1.5rem;
+    padding-right: 1.5rem;
+  }
+  .navbar-vertical.navbar-expand-lg.navbar-right ~ .page {
+    padding-left: 0;
+    padding-right: 15rem;
+  }
+  .navbar-vertical.navbar-expand-lg .navbar-collapse {
+    flex-direction: column;
+  }
+  .navbar-vertical.navbar-expand-lg .navbar-collapse [class^=container] {
+    flex-direction: column;
+    align-items: stretch;
+    padding: 0;
+  }
+  .navbar-vertical.navbar-expand-lg .navbar-collapse .navbar-nav {
+    margin-left: 0;
+    margin-right: 0;
+  }
+  .navbar-vertical.navbar-expand-lg .navbar-collapse .navbar-nav .nav-link {
+    padding: 0.5rem calc(calc(var(--tblr-page-padding) * 2) / 2);
+    justify-content: flex-start;
+  }
+  .navbar-vertical.navbar-expand-lg .navbar-collapse .dropdown-menu-columns {
+    flex-direction: column;
+  }
+  .navbar-vertical.navbar-expand-lg .navbar-collapse .dropdown-menu {
+    padding: 0;
+    background: transparent;
+    position: static;
+    color: inherit;
+    box-shadow: none;
+    border: none;
+    min-width: 0;
+    margin: 0;
+  }
+  .navbar-vertical.navbar-expand-lg .navbar-collapse .dropdown-menu .dropdown-item {
+    min-width: 0;
+    display: flex;
+    width: auto;
+    padding-left: calc(calc(calc(var(--tblr-page-padding) * 2) / 2) + 1.75rem);
+    color: inherit;
+  }
+  .navbar-vertical.navbar-expand-lg .navbar-collapse .dropdown-menu .dropdown-item.active, .navbar-vertical.navbar-expand-lg .navbar-collapse .dropdown-menu .dropdown-item:active {
+    background: var(--tblr-navbar-active-bg);
+  }
+  .navbar-vertical.navbar-expand-lg .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-item {
+    padding-left: calc(calc(calc(var(--tblr-page-padding) * 2) / 2) + 3.25rem);
+  }
+  .navbar-vertical.navbar-expand-lg .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-menu .dropdown-item {
+    padding-left: calc(calc(calc(var(--tblr-page-padding) * 2) / 2) + 4.75rem);
+  }
+  .navbar-vertical.navbar-expand-lg .navbar-collapse .dropdown-toggle:after {
+    margin-left: auto;
+  }
+  .navbar-vertical.navbar-expand-lg .navbar-collapse .nav-item.active:after {
+    border-bottom-width: 0;
+    border-left-width: 3px;
+    right: auto;
+    top: 0;
+    bottom: 0;
+  }
+}
+@media (min-width: 1200px) {
+  .navbar-vertical.navbar-expand-xl {
+    width: 15rem;
+    position: fixed;
+    top: 0;
+    left: 0;
+    bottom: 0;
+    z-index: 1030;
+    align-items: flex-start;
+    transition: transform 0.3s;
+    overflow-y: scroll;
+    padding: 0;
+  }
+}
+@media (min-width: 1200px) and (prefers-reduced-motion: reduce) {
+  .navbar-vertical.navbar-expand-xl {
+    transition: none;
+  }
+}
+@media (min-width: 1200px) {
+  .navbar-vertical.navbar-expand-xl.navbar-right {
+    left: auto;
+    right: 0;
+  }
+  .navbar-vertical.navbar-expand-xl .navbar-brand {
+    padding: 0.75rem 0;
+    justify-content: center;
+  }
+  .navbar-vertical.navbar-expand-xl .navbar-collapse {
+    align-items: stretch;
+  }
+  .navbar-vertical.navbar-expand-xl .navbar-nav {
+    flex-direction: column;
+    flex-grow: 1;
+    min-height: auto;
+  }
+  .navbar-vertical.navbar-expand-xl .navbar-nav .nav-link {
+    padding-top: 0.5rem;
+    padding-bottom: 0.5rem;
+  }
+  .navbar-vertical.navbar-expand-xl > [class^=container] {
+    flex-direction: column;
+    align-items: stretch;
+    min-height: 100%;
+    justify-content: flex-start;
+    padding: 0;
+  }
+  .navbar-vertical.navbar-expand-xl ~ .page {
+    padding-left: 15rem;
+  }
+  .navbar-vertical.navbar-expand-xl ~ .page [class^=container] {
+    padding-left: 1.5rem;
+    padding-right: 1.5rem;
+  }
+  .navbar-vertical.navbar-expand-xl.navbar-right ~ .page {
+    padding-left: 0;
+    padding-right: 15rem;
+  }
+  .navbar-vertical.navbar-expand-xl .navbar-collapse {
+    flex-direction: column;
+  }
+  .navbar-vertical.navbar-expand-xl .navbar-collapse [class^=container] {
+    flex-direction: column;
+    align-items: stretch;
+    padding: 0;
+  }
+  .navbar-vertical.navbar-expand-xl .navbar-collapse .navbar-nav {
+    margin-left: 0;
+    margin-right: 0;
+  }
+  .navbar-vertical.navbar-expand-xl .navbar-collapse .navbar-nav .nav-link {
+    padding: 0.5rem calc(calc(var(--tblr-page-padding) * 2) / 2);
+    justify-content: flex-start;
+  }
+  .navbar-vertical.navbar-expand-xl .navbar-collapse .dropdown-menu-columns {
+    flex-direction: column;
+  }
+  .navbar-vertical.navbar-expand-xl .navbar-collapse .dropdown-menu {
+    padding: 0;
+    background: transparent;
+    position: static;
+    color: inherit;
+    box-shadow: none;
+    border: none;
+    min-width: 0;
+    margin: 0;
+  }
+  .navbar-vertical.navbar-expand-xl .navbar-collapse .dropdown-menu .dropdown-item {
+    min-width: 0;
+    display: flex;
+    width: auto;
+    padding-left: calc(calc(calc(var(--tblr-page-padding) * 2) / 2) + 1.75rem);
+    color: inherit;
+  }
+  .navbar-vertical.navbar-expand-xl .navbar-collapse .dropdown-menu .dropdown-item.active, .navbar-vertical.navbar-expand-xl .navbar-collapse .dropdown-menu .dropdown-item:active {
+    background: var(--tblr-navbar-active-bg);
+  }
+  .navbar-vertical.navbar-expand-xl .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-item {
+    padding-left: calc(calc(calc(var(--tblr-page-padding) * 2) / 2) + 3.25rem);
+  }
+  .navbar-vertical.navbar-expand-xl .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-menu .dropdown-item {
+    padding-left: calc(calc(calc(var(--tblr-page-padding) * 2) / 2) + 4.75rem);
+  }
+  .navbar-vertical.navbar-expand-xl .navbar-collapse .dropdown-toggle:after {
+    margin-left: auto;
+  }
+  .navbar-vertical.navbar-expand-xl .navbar-collapse .nav-item.active:after {
+    border-bottom-width: 0;
+    border-left-width: 3px;
+    right: auto;
+    top: 0;
+    bottom: 0;
+  }
+}
+@media (min-width: 1400px) {
+  .navbar-vertical.navbar-expand-xxl {
+    width: 15rem;
+    position: fixed;
+    top: 0;
+    left: 0;
+    bottom: 0;
+    z-index: 1030;
+    align-items: flex-start;
+    transition: transform 0.3s;
+    overflow-y: scroll;
+    padding: 0;
+  }
+}
+@media (min-width: 1400px) and (prefers-reduced-motion: reduce) {
+  .navbar-vertical.navbar-expand-xxl {
+    transition: none;
+  }
+}
+@media (min-width: 1400px) {
+  .navbar-vertical.navbar-expand-xxl.navbar-right {
+    left: auto;
+    right: 0;
+  }
+  .navbar-vertical.navbar-expand-xxl .navbar-brand {
+    padding: 0.75rem 0;
+    justify-content: center;
+  }
+  .navbar-vertical.navbar-expand-xxl .navbar-collapse {
+    align-items: stretch;
+  }
+  .navbar-vertical.navbar-expand-xxl .navbar-nav {
+    flex-direction: column;
+    flex-grow: 1;
+    min-height: auto;
+  }
+  .navbar-vertical.navbar-expand-xxl .navbar-nav .nav-link {
+    padding-top: 0.5rem;
+    padding-bottom: 0.5rem;
+  }
+  .navbar-vertical.navbar-expand-xxl > [class^=container] {
+    flex-direction: column;
+    align-items: stretch;
+    min-height: 100%;
+    justify-content: flex-start;
+    padding: 0;
+  }
+  .navbar-vertical.navbar-expand-xxl ~ .page {
+    padding-left: 15rem;
+  }
+  .navbar-vertical.navbar-expand-xxl ~ .page [class^=container] {
+    padding-left: 1.5rem;
+    padding-right: 1.5rem;
+  }
+  .navbar-vertical.navbar-expand-xxl.navbar-right ~ .page {
+    padding-left: 0;
+    padding-right: 15rem;
+  }
+  .navbar-vertical.navbar-expand-xxl .navbar-collapse {
+    flex-direction: column;
+  }
+  .navbar-vertical.navbar-expand-xxl .navbar-collapse [class^=container] {
+    flex-direction: column;
+    align-items: stretch;
+    padding: 0;
+  }
+  .navbar-vertical.navbar-expand-xxl .navbar-collapse .navbar-nav {
+    margin-left: 0;
+    margin-right: 0;
+  }
+  .navbar-vertical.navbar-expand-xxl .navbar-collapse .navbar-nav .nav-link {
+    padding: 0.5rem calc(calc(var(--tblr-page-padding) * 2) / 2);
+    justify-content: flex-start;
+  }
+  .navbar-vertical.navbar-expand-xxl .navbar-collapse .dropdown-menu-columns {
+    flex-direction: column;
+  }
+  .navbar-vertical.navbar-expand-xxl .navbar-collapse .dropdown-menu {
+    padding: 0;
+    background: transparent;
+    position: static;
+    color: inherit;
+    box-shadow: none;
+    border: none;
+    min-width: 0;
+    margin: 0;
+  }
+  .navbar-vertical.navbar-expand-xxl .navbar-collapse .dropdown-menu .dropdown-item {
+    min-width: 0;
+    display: flex;
+    width: auto;
+    padding-left: calc(calc(calc(var(--tblr-page-padding) * 2) / 2) + 1.75rem);
+    color: inherit;
+  }
+  .navbar-vertical.navbar-expand-xxl .navbar-collapse .dropdown-menu .dropdown-item.active, .navbar-vertical.navbar-expand-xxl .navbar-collapse .dropdown-menu .dropdown-item:active {
+    background: var(--tblr-navbar-active-bg);
+  }
+  .navbar-vertical.navbar-expand-xxl .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-item {
+    padding-left: calc(calc(calc(var(--tblr-page-padding) * 2) / 2) + 3.25rem);
+  }
+  .navbar-vertical.navbar-expand-xxl .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-menu .dropdown-item {
+    padding-left: calc(calc(calc(var(--tblr-page-padding) * 2) / 2) + 4.75rem);
+  }
+  .navbar-vertical.navbar-expand-xxl .navbar-collapse .dropdown-toggle:after {
+    margin-left: auto;
+  }
+  .navbar-vertical.navbar-expand-xxl .navbar-collapse .nav-item.active:after {
+    border-bottom-width: 0;
+    border-left-width: 3px;
+    right: auto;
+    top: 0;
+    bottom: 0;
+  }
+}
+.navbar-vertical.navbar-expand {
+  width: 15rem;
+  position: fixed;
+  top: 0;
+  left: 0;
+  bottom: 0;
+  z-index: 1030;
+  align-items: flex-start;
+  transition: transform 0.3s;
+  overflow-y: scroll;
+  padding: 0;
+}
+@media (prefers-reduced-motion: reduce) {
+  .navbar-vertical.navbar-expand {
+    transition: none;
+  }
+}
+.navbar-vertical.navbar-expand.navbar-right {
+  left: auto;
+  right: 0;
+}
+.navbar-vertical.navbar-expand .navbar-brand {
+  padding: 0.75rem 0;
+  justify-content: center;
+}
+.navbar-vertical.navbar-expand .navbar-collapse {
+  align-items: stretch;
+}
+.navbar-vertical.navbar-expand .navbar-nav {
+  flex-direction: column;
+  flex-grow: 1;
+  min-height: auto;
+}
+.navbar-vertical.navbar-expand .navbar-nav .nav-link {
+  padding-top: 0.5rem;
+  padding-bottom: 0.5rem;
+}
+.navbar-vertical.navbar-expand > [class^=container] {
+  flex-direction: column;
+  align-items: stretch;
+  min-height: 100%;
+  justify-content: flex-start;
+  padding: 0;
+}
+.navbar-vertical.navbar-expand ~ .page {
+  padding-left: 15rem;
+}
+.navbar-vertical.navbar-expand ~ .page [class^=container] {
+  padding-left: 1.5rem;
+  padding-right: 1.5rem;
+}
+.navbar-vertical.navbar-expand.navbar-right ~ .page {
+  padding-left: 0;
+  padding-right: 15rem;
+}
+.navbar-vertical.navbar-expand .navbar-collapse {
+  flex-direction: column;
+}
+.navbar-vertical.navbar-expand .navbar-collapse [class^=container] {
+  flex-direction: column;
+  align-items: stretch;
+  padding: 0;
+}
+.navbar-vertical.navbar-expand .navbar-collapse .navbar-nav {
+  margin-left: 0;
+  margin-right: 0;
+}
+.navbar-vertical.navbar-expand .navbar-collapse .navbar-nav .nav-link {
+  padding: 0.5rem calc(calc(var(--tblr-page-padding) * 2) / 2);
+  justify-content: flex-start;
+}
+.navbar-vertical.navbar-expand .navbar-collapse .dropdown-menu-columns {
+  flex-direction: column;
+}
+.navbar-vertical.navbar-expand .navbar-collapse .dropdown-menu {
+  padding: 0;
+  background: transparent;
+  position: static;
+  color: inherit;
+  box-shadow: none;
+  border: none;
+  min-width: 0;
+  margin: 0;
+}
+.navbar-vertical.navbar-expand .navbar-collapse .dropdown-menu .dropdown-item {
+  min-width: 0;
+  display: flex;
+  width: auto;
+  padding-left: calc(calc(calc(var(--tblr-page-padding) * 2) / 2) + 1.75rem);
+  color: inherit;
+}
+.navbar-vertical.navbar-expand .navbar-collapse .dropdown-menu .dropdown-item.active, .navbar-vertical.navbar-expand .navbar-collapse .dropdown-menu .dropdown-item:active {
+  background: var(--tblr-navbar-active-bg);
+}
+.navbar-vertical.navbar-expand .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-item {
+  padding-left: calc(calc(calc(var(--tblr-page-padding) * 2) / 2) + 3.25rem);
+}
+.navbar-vertical.navbar-expand .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-menu .dropdown-item {
+  padding-left: calc(calc(calc(var(--tblr-page-padding) * 2) / 2) + 4.75rem);
+}
+.navbar-vertical.navbar-expand .navbar-collapse .dropdown-toggle:after {
+  margin-left: auto;
+}
+.navbar-vertical.navbar-expand .navbar-collapse .nav-item.active:after {
+  border-bottom-width: 0;
+  border-left-width: 3px;
+  right: auto;
+  top: 0;
+  bottom: 0;
+}
+
+.navbar-overlap:after {
+  content: "";
+  height: 9rem;
+  position: absolute;
+  top: 100%;
+  left: 0;
+  right: 0;
+  background: inherit;
+  z-index: -1;
+  box-shadow: inherit;
+}
+
+.page {
+  display: flex;
+  flex-direction: column;
+  position: relative;
+  min-height: 100%;
+}
+
+.page-center .container {
+  margin-top: auto;
+  margin-bottom: auto;
+}
+
+.page-wrapper {
+  flex: 1;
+  display: flex;
+  flex-direction: column;
+}
+@media print {
+  .page-wrapper {
+    margin: 0 !important;
+  }
+}
+
+.page-wrapper-full .page-body:first-child {
+  margin: 0;
+  border-top: 0;
+}
+
+.page-body {
+  margin-top: var(--tblr-page-padding-y);
+  margin-bottom: var(--tblr-page-padding-y);
+}
+
+.page-body-card {
+  background: var(--tblr-bg-surface);
+  border-top: var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent);
+  padding: var(--tblr-page-padding) 0;
+  margin-bottom: 0;
+  flex: 1;
+}
+.page-body ~ .page-body-card {
+  margin-top: 0;
+}
+
+.page-cover {
+  background: no-repeat center/cover;
+  min-height: 9rem;
+}
+@media (min-width: 768px) {
+  .page-cover {
+    min-height: 12rem;
+  }
+}
+@media (min-width: 992px) {
+  .page-cover {
+    min-height: 15rem;
+  }
+}
+
+.page-cover-overlay {
+  position: relative;
+}
+.page-cover-overlay:after {
+  content: "";
+  position: absolute;
+  top: 0;
+  left: 0;
+  right: 0;
+  bottom: 0;
+  background-image: linear-gradient(180deg, rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 0.6) 100%);
+}
+
+.page-header {
+  display: flex;
+  flex-wrap: wrap;
+  min-height: 2.25rem;
+  flex-direction: column;
+  justify-content: center;
+}
+.page-wrapper .page-header {
+  margin: var(--tblr-page-padding-y) 0 0;
+}
+
+.page-header-border {
+  border-bottom: var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color);
+  padding: var(--tblr-page-padding-y) 0;
+  margin: 0 !important;
+  background-color: var(--tblr-bg-surface);
+}
+
+.page-pretitle {
+  font-size: 0.625rem;
+  font-weight: var(--tblr-font-weight-bold);
+  text-transform: uppercase;
+  letter-spacing: 0.04em;
+  line-height: 1rem;
+  color: var(--tblr-secondary);
+}
+
+.page-title {
+  margin: 0;
+  font-size: var(--tblr-font-size-h2);
+  line-height: var(--tblr-line-height-h4);
+  font-weight: var(--tblr-font-weight-headings);
+  color: inherit;
+  display: flex;
+  align-items: center;
+}
+.page-title svg {
+  width: 1.5rem;
+  height: 1.5rem;
+  margin-right: 0.25rem;
+}
+
+.page-title-lg {
+  font-size: 1.5rem;
+  line-height: 2rem;
+}
+
+.page-subtitle {
+  margin-top: 0.25rem;
+  color: var(--tblr-secondary);
+}
+
+.page-cover {
+  --tblr-page-cover-blur: 20px;
+  --tblr-page-cover-padding: 1rem;
+  min-height: 6rem;
+  padding: var(--tblr-page-cover-padding) 0;
+  position: relative;
+  overflow: hidden;
+}
+
+.page-cover-img {
+  position: absolute;
+  top: calc(-2 * var(--tblr-page-cover-blur, 0));
+  left: calc(-2 * var(--tblr-page-cover-blur, 0));
+  right: calc(-2 * var(--tblr-page-cover-blur, 0));
+  bottom: calc(-2 * var(--tblr-page-cover-blur, 0));
+  pointer-events: none;
+  filter: blur(var(--tblr-page-cover-blur));
+  -o-object-fit: cover;
+     object-fit: cover;
+  background-size: cover;
+  background-position: center;
+  z-index: -1;
+}
+
+.page-tabs {
+  margin-top: 0.5rem;
+  position: relative;
+}
+
+.page-header-tabs .nav-bordered {
+  border: 0;
+}
+.page-header-tabs + .page-body-card {
+  margin-top: 0;
+}
+
+.footer {
+  border-top: var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color);
+  background-color: #ffffff;
+  padding: 2rem 0;
+  color: var(--tblr-secondary);
+  margin-top: auto;
+}
+
+.footer-transparent {
+  background-color: transparent;
+  border-top: 0;
+}
+
+body:not(.theme-dark):not([data-bs-theme=dark]) .hide-theme-light {
+  display: none !important;
+}
+body.theme-dark .hide-theme-dark, body[data-bs-theme=dark] .hide-theme-dark {
+  display: none !important;
+}
+
+[data-bs-theme=dark], body[data-bs-theme=dark] [data-bs-theme=light] {
+  --tblr-body-color: #fcfdfe;
+  --tblr-body-color-rgb: 252, 253, 254;
+  --tblr-muted: #3a4859;
+  --tblr-body-bg: #151f2c;
+  --tblr-body-bg-rgb: 21, 31, 44;
+  --tblr-emphasis-color: #ffffff;
+  --tblr-emphasis-color-rgb: 255, 255, 255;
+  --tblr-bg-forms: #151f2c;
+  --tblr-bg-surface: #182433;
+  --tblr-bg-surface-dark: #151f2c;
+  --tblr-bg-surface-secondary: #1b293a;
+  --tblr-bg-surface-tertiary: #151f2c;
+  --tblr-link-color: #0069cf;
+  --tblr-link-hover-color: #0054a6;
+  --tblr-active-bg: #1b293a;
+  --tblr-disabled-color: var(--tblr-gray-700);
+  --tblr-border-color: var(--tblr-dark-mode-border-color);
+  --tblr-border-color-translucent: var(
+    --tblr-dark-mode-border-color-translucent
+  );
+  --tblr-border-dark-color: var(--tblr-dark-mode-border-dark-color);
+  --tblr-border-color-active: var(
+    --tblr-dark-mode-border-color-active
+  );
+  --tblr-btn-color: #151f2c;
+  --tblr-code-color: var(--tblr-body-color);
+  --tblr-code-bg: #1f2e41;
+  --tblr-primary-lt: #16293f;
+  --tblr-primary-lt-rgb: 22, 41, 63;
+  --tblr-secondary-lt: #202c3b;
+  --tblr-secondary-lt-rgb: 32, 44, 59;
+  --tblr-success-lt: #1a3235;
+  --tblr-success-lt-rgb: 26, 50, 53;
+  --tblr-info-lt: #1c3044;
+  --tblr-info-lt-rgb: 28, 48, 68;
+  --tblr-warning-lt: #2e2b2f;
+  --tblr-warning-lt-rgb: 46, 43, 47;
+  --tblr-danger-lt: #2b2634;
+  --tblr-danger-lt-rgb: 43, 38, 52;
+  --tblr-light-lt: #2f3a47;
+  --tblr-light-lt-rgb: 47, 58, 71;
+  --tblr-dark-lt: #182433;
+  --tblr-dark-lt-rgb: 24, 36, 51;
+  --tblr-muted-lt: #202c3b;
+  --tblr-muted-lt-rgb: 32, 44, 59;
+  --tblr-blue-lt: #16293f;
+  --tblr-blue-lt-rgb: 22, 41, 63;
+  --tblr-azure-lt: #1c3044;
+  --tblr-azure-lt-rgb: 28, 48, 68;
+  --tblr-indigo-lt: #1c2a45;
+  --tblr-indigo-lt-rgb: 28, 42, 69;
+  --tblr-purple-lt: #272742;
+  --tblr-purple-lt-rgb: 39, 39, 66;
+  --tblr-pink-lt: #2b2639;
+  --tblr-pink-lt-rgb: 43, 38, 57;
+  --tblr-red-lt: #2b2634;
+  --tblr-red-lt-rgb: 43, 38, 52;
+  --tblr-orange-lt: #2e2b2f;
+  --tblr-orange-lt-rgb: 46, 43, 47;
+  --tblr-yellow-lt: #2e302e;
+  --tblr-yellow-lt-rgb: 46, 48, 46;
+  --tblr-lime-lt: #213330;
+  --tblr-lime-lt-rgb: 33, 51, 48;
+  --tblr-green-lt: #1a3235;
+  --tblr-green-lt-rgb: 26, 50, 53;
+  --tblr-teal-lt: #17313a;
+  --tblr-teal-lt-rgb: 23, 49, 58;
+  --tblr-cyan-lt: #183140;
+  --tblr-cyan-lt-rgb: 24, 49, 64;
+  --tblr-facebook-lt: #182c46;
+  --tblr-facebook-lt-rgb: 24, 44, 70;
+  --tblr-twitter-lt: #193146;
+  --tblr-twitter-lt-rgb: 25, 49, 70;
+  --tblr-linkedin-lt: #172b41;
+  --tblr-linkedin-lt-rgb: 23, 43, 65;
+  --tblr-google-lt: #2c2834;
+  --tblr-google-lt-rgb: 44, 40, 52;
+  --tblr-youtube-lt: #2f202e;
+  --tblr-youtube-lt-rgb: 47, 32, 46;
+  --tblr-vimeo-lt: #183345;
+  --tblr-vimeo-lt-rgb: 24, 51, 69;
+  --tblr-dribbble-lt: #2d283c;
+  --tblr-dribbble-lt-rgb: 45, 40, 60;
+  --tblr-github-lt: #182330;
+  --tblr-github-lt-rgb: 24, 35, 48;
+  --tblr-instagram-lt: #2c2737;
+  --tblr-instagram-lt-rgb: 44, 39, 55;
+  --tblr-pinterest-lt: #292131;
+  --tblr-pinterest-lt-rgb: 41, 33, 49;
+  --tblr-vk-lt: #202e3f;
+  --tblr-vk-lt-rgb: 32, 46, 63;
+  --tblr-rss-lt: #2f312e;
+  --tblr-rss-lt-rgb: 47, 49, 46;
+  --tblr-flickr-lt: #162a44;
+  --tblr-flickr-lt-rgb: 22, 42, 68;
+  --tblr-bitbucket-lt: #162942;
+  --tblr-bitbucket-lt-rgb: 22, 41, 66;
+  --tblr-tabler-lt: #16293f;
+  --tblr-tabler-lt-rgb: 22, 41, 63;
+}
+[data-bs-theme=dark] .navbar-brand-autodark .navbar-brand-image {
+  filter: brightness(0) invert(1);
+}
+
+.accordion {
+  --tblr-accordion-color: var(--tblr-body-color);
+}
+
+.accordion-button:focus:not(:focus-visible) {
+  outline: none;
+  box-shadow: none;
+}
+.accordion-button:after {
+  opacity: 0.7;
+}
+.accordion-button:not(.collapsed) {
+  font-weight: var(--tblr-font-weight-bold);
+  border-bottom-color: transparent;
+  box-shadow: none;
+}
+.accordion-button:not(.collapsed):after {
+  opacity: 1;
+}
+
+.alert {
+  --tblr-alert-color: var(--tblr-secondary);
+  --tblr-alert-bg: var(--tblr-surface);
+  border: var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent);
+  border-left: 0.25rem var(--tblr-border-style) var(--tblr-alert-color);
+  box-shadow: rgba(24, 36, 51, 0.04) 0 2px 4px 0;
+}
+.alert > :last-child {
+  margin-bottom: 0;
+}
+
+.alert-important {
+  border-color: transparent;
+  background: var(--tblr-alert-color);
+  color: #fff;
+}
+.alert-important .alert-icon,
+.alert-important .alert-link,
+.alert-important .alert-title {
+  color: inherit;
+}
+.alert-important .alert-link:hover {
+  color: inherit;
+}
+.alert-important .btn-close {
+  filter: var(--tblr-btn-close-white-filter);
+}
+
+.alert-link, .alert-link:hover {
+  color: var(--tblr-alert-color);
+}
+
+.alert-primary {
+  --tblr-alert-color: var(--tblr-primary);
+}
+
+.alert-secondary {
+  --tblr-alert-color: var(--tblr-secondary);
+}
+
+.alert-success {
+  --tblr-alert-color: var(--tblr-success);
+}
+
+.alert-info {
+  --tblr-alert-color: var(--tblr-info);
+}
+
+.alert-warning {
+  --tblr-alert-color: var(--tblr-warning);
+}
+
+.alert-danger {
+  --tblr-alert-color: var(--tblr-danger);
+}
+
+.alert-light {
+  --tblr-alert-color: var(--tblr-light);
+}
+
+.alert-dark {
+  --tblr-alert-color: var(--tblr-dark);
+}
+
+.alert-muted {
+  --tblr-alert-color: var(--tblr-muted);
+}
+
+.alert-blue {
+  --tblr-alert-color: var(--tblr-blue);
+}
+
+.alert-azure {
+  --tblr-alert-color: var(--tblr-azure);
+}
+
+.alert-indigo {
+  --tblr-alert-color: var(--tblr-indigo);
+}
+
+.alert-purple {
+  --tblr-alert-color: var(--tblr-purple);
+}
+
+.alert-pink {
+  --tblr-alert-color: var(--tblr-pink);
+}
+
+.alert-red {
+  --tblr-alert-color: var(--tblr-red);
+}
+
+.alert-orange {
+  --tblr-alert-color: var(--tblr-orange);
+}
+
+.alert-yellow {
+  --tblr-alert-color: var(--tblr-yellow);
+}
+
+.alert-lime {
+  --tblr-alert-color: var(--tblr-lime);
+}
+
+.alert-green {
+  --tblr-alert-color: var(--tblr-green);
+}
+
+.alert-teal {
+  --tblr-alert-color: var(--tblr-teal);
+}
+
+.alert-cyan {
+  --tblr-alert-color: var(--tblr-cyan);
+}
+
+.alert-facebook {
+  --tblr-alert-color: var(--tblr-facebook);
+}
+
+.alert-twitter {
+  --tblr-alert-color: var(--tblr-twitter);
+}
+
+.alert-linkedin {
+  --tblr-alert-color: var(--tblr-linkedin);
+}
+
+.alert-google {
+  --tblr-alert-color: var(--tblr-google);
+}
+
+.alert-youtube {
+  --tblr-alert-color: var(--tblr-youtube);
+}
+
+.alert-vimeo {
+  --tblr-alert-color: var(--tblr-vimeo);
+}
+
+.alert-dribbble {
+  --tblr-alert-color: var(--tblr-dribbble);
+}
+
+.alert-github {
+  --tblr-alert-color: var(--tblr-github);
+}
+
+.alert-instagram {
+  --tblr-alert-color: var(--tblr-instagram);
+}
+
+.alert-pinterest {
+  --tblr-alert-color: var(--tblr-pinterest);
+}
+
+.alert-vk {
+  --tblr-alert-color: var(--tblr-vk);
+}
+
+.alert-rss {
+  --tblr-alert-color: var(--tblr-rss);
+}
+
+.alert-flickr {
+  --tblr-alert-color: var(--tblr-flickr);
+}
+
+.alert-bitbucket {
+  --tblr-alert-color: var(--tblr-bitbucket);
+}
+
+.alert-tabler {
+  --tblr-alert-color: var(--tblr-tabler);
+}
+
+.alert-icon {
+  color: var(--tblr-alert-color);
+  width: 1.5rem !important;
+  height: 1.5rem !important;
+  margin: -0.125rem 1rem -0.125rem 0;
+}
+
+.alert-title {
+  font-size: 0.875rem;
+  line-height: 1.25rem;
+  font-weight: var(--tblr-font-weight-bold);
+  margin-bottom: 0.25rem;
+  color: var(--tblr-alert-color);
+}
+
+.avatar {
+  --tblr-avatar-size: 2.5rem;
+  --tblr-avatar-status-size: 0.75rem;
+  --tblr-avatar-bg: var(--tblr-bg-surface-secondary);
+  --tblr-avatar-box-shadow: var(--tblr-box-shadow-border);
+  --tblr-avatar-font-size: 1rem;
+  --tblr-avatar-icon-size: 1.5rem;
+  position: relative;
+  width: var(--tblr-avatar-size);
+  height: var(--tblr-avatar-size);
+  font-size: var(--tblr-avatar-font-size);
+  font-weight: var(--tblr-font-weight-medium);
+  line-height: 1;
+  display: inline-flex;
+  align-items: center;
+  justify-content: center;
+  color: var(--tblr-secondary);
+  text-align: center;
+  text-transform: uppercase;
+  vertical-align: bottom;
+  -webkit-user-select: none;
+     -moz-user-select: none;
+      -ms-user-select: none;
+          user-select: none;
+  background: var(--tblr-avatar-bg) no-repeat center/cover;
+  border-radius: var(--tblr-border-radius);
+  box-shadow: var(--tblr-avatar-box-shadow);
+}
+.avatar .icon {
+  width: var(--tblr-avatar-icon-size);
+  height: var(--tblr-avatar-icon-size);
+}
+.avatar .badge {
+  position: absolute;
+  right: 0;
+  bottom: 0;
+  border-radius: 100rem;
+  box-shadow: 0 0 0 calc(var(--tblr-avatar-status-size) / 4) var(--tblr-bg-surface);
+}
+a.avatar {
+  cursor: pointer;
+}
+
+.avatar-rounded {
+  border-radius: 100rem;
+}
+
+.avatar-xxs {
+  --tblr-avatar-size: 1rem;
+  --tblr-avatar-status-size: 0.25rem;
+  --tblr-avatar-font-size: 0.5rem;
+  --tblr-avatar-icon-size: 0.75rem;
+}
+
+.avatar-xxs .badge:empty {
+  width: 0.25rem;
+  height: 0.25rem;
+}
+
+.avatar-xs {
+  --tblr-avatar-size: 1.25rem;
+  --tblr-avatar-status-size: 0.375rem;
+  --tblr-avatar-font-size: 0.625rem;
+  --tblr-avatar-icon-size: 1rem;
+}
+
+.avatar-xs .badge:empty {
+  width: 0.375rem;
+  height: 0.375rem;
+}
+
+.avatar-sm {
+  --tblr-avatar-size: 2rem;
+  --tblr-avatar-status-size: 0.5rem;
+  --tblr-avatar-font-size: 0.75rem;
+  --tblr-avatar-icon-size: 1.25rem;
+}
+
+.avatar-sm .badge:empty {
+  width: 0.5rem;
+  height: 0.5rem;
+}
+
+.avatar-md {
+  --tblr-avatar-size: 2.5rem;
+  --tblr-avatar-status-size: 0.75rem;
+  --tblr-avatar-font-size: 0.875rem;
+  --tblr-avatar-icon-size: 1.5rem;
+}
+
+.avatar-md .badge:empty {
+  width: 0.75rem;
+  height: 0.75rem;
+}
+
+.avatar-lg {
+  --tblr-avatar-size: 3rem;
+  --tblr-avatar-status-size: 0.75rem;
+  --tblr-avatar-font-size: 1.25rem;
+  --tblr-avatar-icon-size: 2rem;
+}
+
+.avatar-lg .badge:empty {
+  width: 0.75rem;
+  height: 0.75rem;
+}
+
+.avatar-xl {
+  --tblr-avatar-size: 5rem;
+  --tblr-avatar-status-size: 1rem;
+  --tblr-avatar-font-size: 2rem;
+  --tblr-avatar-icon-size: 3rem;
+}
+
+.avatar-xl .badge:empty {
+  width: 1rem;
+  height: 1rem;
+}
+
+.avatar-2xl {
+  --tblr-avatar-size: 7rem;
+  --tblr-avatar-status-size: 1rem;
+  --tblr-avatar-font-size: 3rem;
+  --tblr-avatar-icon-size: 5rem;
+}
+
+.avatar-2xl .badge:empty {
+  width: 1rem;
+  height: 1rem;
+}
+
+.avatar-list {
+  --tblr-list-gap: 0.5rem;
+  display: flex;
+  flex-wrap: wrap;
+  gap: var(--tblr-list-gap);
+}
+.avatar-list a.avatar:hover {
+  z-index: 1;
+}
+
+.avatar-list-stacked {
+  display: block;
+  --tblr-list-gap: 0;
+}
+.avatar-list-stacked .avatar {
+  margin-right: calc(-0.5 * var(--tblr-avatar-size)) !important;
+  box-shadow: var(--tblr-avatar-box-shadow), 0 0 0 2px var(--tblr-card-cap-bg, var(--tblr-card-bg, var(--tblr-bg-surface)));
+}
+
+.avatar-upload {
+  width: 4rem;
+  height: 4rem;
+  border: var(--tblr-border-width) dashed var(--tblr-border-color);
+  background: var(--tblr-bg-forms);
+  flex-direction: column;
+  transition: color 0.3s, background-color 0.3s;
+}
+@media (prefers-reduced-motion: reduce) {
+  .avatar-upload {
+    transition: none;
+  }
+}
+.avatar-upload svg {
+  width: 1.5rem;
+  height: 1.5rem;
+  stroke-width: 1;
+}
+.avatar-upload:hover {
+  border-color: var(--tblr-primary);
+  color: var(--tblr-primary);
+  text-decoration: none;
+}
+
+.avatar-upload-text {
+  font-size: 0.625rem;
+  line-height: 1;
+  margin-top: 0.25rem;
+}
+
+.avatar-cover {
+  margin-top: calc(-0.5 * var(--tblr-avatar-size));
+  box-shadow: 0 0 0 0.25rem var(--tblr-card-bg, var(--tblr-body-bg));
+}
+
+.badge {
+  justify-content: center;
+  align-items: center;
+  background: var(--tblr-bg-surface-secondary);
+  overflow: hidden;
+  -webkit-user-select: none;
+     -moz-user-select: none;
+      -ms-user-select: none;
+          user-select: none;
+  border: var(--tblr-border-width) var(--tblr-border-style) transparent;
+  min-width: 1.35714285em;
+  font-weight: var(--tblr-font-weight-bold);
+  letter-spacing: 0.04em;
+  vertical-align: bottom;
+}
+a.badge {
+  color: var(--tblr-bg-surface);
+}
+
+.badge .avatar {
+  box-sizing: content-box;
+  width: 1.25rem;
+  height: 1.25rem;
+  margin: 0 0.5rem 0 -0.5rem;
+}
+.badge .icon {
+  width: 1em;
+  height: 1em;
+  font-size: 1rem;
+  stroke-width: 2;
+}
+
+.badge:empty,
+.badge-empty {
+  display: inline-block;
+  width: 0.5rem;
+  height: 0.5rem;
+  min-width: 0;
+  min-height: auto;
+  padding: 0;
+  border-radius: 100rem;
+  vertical-align: baseline;
+}
+
+.badge-outline {
+  background-color: transparent;
+  border: var(--tblr-border-width) var(--tblr-border-style) currentColor;
+}
+
+.badge-pill {
+  border-radius: 100rem;
+}
+
+.badges-list {
+  --tblr-list-gap: 0.5rem;
+  display: flex;
+  flex-wrap: wrap;
+  gap: var(--tblr-list-gap);
+}
+
+.badge-notification {
+  position: absolute !important;
+  top: 0 !important;
+  right: 0 !important;
+  transform: translate(50%, -50%);
+  z-index: 1;
+}
+
+.badge-blink {
+  animation: blink 2s infinite;
+}
+
+.breadcrumb {
+  --tblr-breadcrumb-item-active-font-weight: var(--tblr-font-weight-bold);
+  --tblr-breadcrumb-item-disabled-color: var(--tblr-disabled-color);
+  --tblr-breadcrumb-link-color: var(--tblr-link-color);
+  padding: 0;
+  margin: 0;
+  background: transparent;
+}
+.breadcrumb a {
+  color: var(--tblr-breadcrumb-link-color);
+}
+.breadcrumb a:hover {
+  text-decoration: underline;
+}
+
+.breadcrumb-muted {
+  --tblr-breadcrumb-link-color: var(--tblr-secondary);
+}
+
+.breadcrumb-item.active {
+  font-weight: var(--tblr-breadcrumb-item-active-font-weight);
+}
+.breadcrumb-item.active a {
+  color: inherit;
+  pointer-events: none;
+}
+.breadcrumb-item.disabled {
+  color: var(--tblr-breadcrumb-item-disabled-color);
+}
+.breadcrumb-item.disabled:before {
+  color: inherit;
+}
+.breadcrumb-item.disabled a {
+  color: inherit;
+  pointer-events: none;
+}
+
+.breadcrumb-dots {
+  --tblr-breadcrumb-divider: "·";
+}
+
+.breadcrumb-arrows {
+  --tblr-breadcrumb-divider: "›";
+}
+
+.breadcrumb-bullets {
+  --tblr-breadcrumb-divider: "•";
+}
+
+.btn {
+  --tblr-btn-icon-size: 1.25rem;
+  --tblr-btn-bg: var(--tblr-bg-surface);
+  --tblr-btn-color: var(--tblr-body-color);
+  --tblr-btn-border-color: var(--tblr-border-color);
+  --tblr-btn-hover-bg: var(--tblr-btn-bg);
+  --tblr-btn-hover-border-color: var(--tblr-border-color-active);
+  --tblr-btn-box-shadow: var(--tblr-box-shadow-input);
+  --tblr-btn-active-color: var(--tblr-primary);
+  --tblr-btn-active-bg: rgba(var(--tblr-primary-rgb), 0.04);
+  --tblr-btn-active-border-color: var(--tblr-primary);
+  display: inline-flex;
+  align-items: center;
+  justify-content: center;
+  white-space: nowrap;
+  box-shadow: var(--tblr-btn-box-shadow);
+}
+.btn .icon {
+  width: var(--tblr-btn-icon-size);
+  height: var(--tblr-btn-icon-size);
+  min-width: var(--tblr-btn-icon-size);
+  margin: 0 calc(var(--tblr-btn-padding-x) / 2) 0 calc(var(--tblr-btn-padding-x) / -4);
+  vertical-align: bottom;
+  color: inherit;
+}
+.btn .avatar {
+  width: var(--tblr-btn-icon-size);
+  height: var(--tblr-btn-icon-size);
+  margin: 0 calc(var(--tblr-btn-padding-x) / 2) 0 calc(var(--tblr-btn-padding-x) / -4);
+}
+.btn .icon-right {
+  margin: 0 calc(var(--tblr-btn-padding-x) / -4) 0 calc(var(--tblr-btn-padding-x) / 2);
+}
+.btn .badge {
+  top: auto;
+}
+.btn-check + .btn:hover {
+  color: var(--tblr-btn-hover-color);
+  background-color: var(--tblr-btn-hover-bg);
+  border-color: var(--tblr-btn-hover-border-color);
+}
+
+.btn-link {
+  color: #0054a6;
+  background-color: transparent;
+  border-color: transparent;
+  box-shadow: none;
+}
+.btn-link .icon {
+  color: inherit;
+}
+.btn-link:hover {
+  color: #004385;
+  border-color: transparent;
+}
+
+.btn-primary {
+  --tblr-btn-border-color: transparent;
+  --tblr-btn-hover-border-color: transparent;
+  --tblr-btn-active-border-color: transparent;
+  --tblr-btn-color: var(--tblr-primary-fg);
+  --tblr-btn-bg: var(--tblr-primary);
+  --tblr-btn-hover-color: var(--tblr-primary-fg);
+  --tblr-btn-hover-bg: rgba(var(--tblr-primary-rgb), .8);
+  --tblr-btn-active-color: var(--tblr-primary-fg);
+  --tblr-btn-active-bg: rgba(var(--tblr-primary-rgb), .8);
+  --tblr-btn-disabled-bg: var(--tblr-primary);
+  --tblr-btn-disabled-color: var(--tblr-primary-fg);
+  --tblr-btn-box-shadow: var(--tblr-box-shadow-input);
+}
+
+.btn-outline-primary {
+  --tblr-btn-color: var(--tblr-primary);
+  --tblr-btn-bg: transparent;
+  --tblr-btn-border-color: var(--tblr-primary);
+  --tblr-btn-hover-color: var(--tblr-primary-fg);
+  --tblr-btn-hover-border-color: transparent;
+  --tblr-btn-hover-bg: var(--tblr-primary);
+  --tblr-btn-active-color: var(--tblr-primary-fg);
+  --tblr-btn-active-bg: var(--tblr-primary);
+  --tblr-btn-disabled-color: var(--tblr-primary);
+  --tblr-btn-disabled-border-color: var(--tblr-primary);
+}
+
+.btn-secondary {
+  --tblr-btn-border-color: transparent;
+  --tblr-btn-hover-border-color: transparent;
+  --tblr-btn-active-border-color: transparent;
+  --tblr-btn-color: var(--tblr-secondary-fg);
+  --tblr-btn-bg: var(--tblr-secondary);
+  --tblr-btn-hover-color: var(--tblr-secondary-fg);
+  --tblr-btn-hover-bg: rgba(var(--tblr-secondary-rgb), .8);
+  --tblr-btn-active-color: var(--tblr-secondary-fg);
+  --tblr-btn-active-bg: rgba(var(--tblr-secondary-rgb), .8);
+  --tblr-btn-disabled-bg: var(--tblr-secondary);
+  --tblr-btn-disabled-color: var(--tblr-secondary-fg);
+  --tblr-btn-box-shadow: var(--tblr-box-shadow-input);
+}
+
+.btn-outline-secondary {
+  --tblr-btn-color: var(--tblr-secondary);
+  --tblr-btn-bg: transparent;
+  --tblr-btn-border-color: var(--tblr-secondary);
+  --tblr-btn-hover-color: var(--tblr-secondary-fg);
+  --tblr-btn-hover-border-color: transparent;
+  --tblr-btn-hover-bg: var(--tblr-secondary);
+  --tblr-btn-active-color: var(--tblr-secondary-fg);
+  --tblr-btn-active-bg: var(--tblr-secondary);
+  --tblr-btn-disabled-color: var(--tblr-secondary);
+  --tblr-btn-disabled-border-color: var(--tblr-secondary);
+}
+
+.btn-success {
+  --tblr-btn-border-color: transparent;
+  --tblr-btn-hover-border-color: transparent;
+  --tblr-btn-active-border-color: transparent;
+  --tblr-btn-color: var(--tblr-success-fg);
+  --tblr-btn-bg: var(--tblr-success);
+  --tblr-btn-hover-color: var(--tblr-success-fg);
+  --tblr-btn-hover-bg: rgba(var(--tblr-success-rgb), .8);
+  --tblr-btn-active-color: var(--tblr-success-fg);
+  --tblr-btn-active-bg: rgba(var(--tblr-success-rgb), .8);
+  --tblr-btn-disabled-bg: var(--tblr-success);
+  --tblr-btn-disabled-color: var(--tblr-success-fg);
+  --tblr-btn-box-shadow: var(--tblr-box-shadow-input);
+}
+
+.btn-outline-success {
+  --tblr-btn-color: var(--tblr-success);
+  --tblr-btn-bg: transparent;
+  --tblr-btn-border-color: var(--tblr-success);
+  --tblr-btn-hover-color: var(--tblr-success-fg);
+  --tblr-btn-hover-border-color: transparent;
+  --tblr-btn-hover-bg: var(--tblr-success);
+  --tblr-btn-active-color: var(--tblr-success-fg);
+  --tblr-btn-active-bg: var(--tblr-success);
+  --tblr-btn-disabled-color: var(--tblr-success);
+  --tblr-btn-disabled-border-color: var(--tblr-success);
+}
+
+.btn-info {
+  --tblr-btn-border-color: transparent;
+  --tblr-btn-hover-border-color: transparent;
+  --tblr-btn-active-border-color: transparent;
+  --tblr-btn-color: var(--tblr-info-fg);
+  --tblr-btn-bg: var(--tblr-info);
+  --tblr-btn-hover-color: var(--tblr-info-fg);
+  --tblr-btn-hover-bg: rgba(var(--tblr-info-rgb), .8);
+  --tblr-btn-active-color: var(--tblr-info-fg);
+  --tblr-btn-active-bg: rgba(var(--tblr-info-rgb), .8);
+  --tblr-btn-disabled-bg: var(--tblr-info);
+  --tblr-btn-disabled-color: var(--tblr-info-fg);
+  --tblr-btn-box-shadow: var(--tblr-box-shadow-input);
+}
+
+.btn-outline-info {
+  --tblr-btn-color: var(--tblr-info);
+  --tblr-btn-bg: transparent;
+  --tblr-btn-border-color: var(--tblr-info);
+  --tblr-btn-hover-color: var(--tblr-info-fg);
+  --tblr-btn-hover-border-color: transparent;
+  --tblr-btn-hover-bg: var(--tblr-info);
+  --tblr-btn-active-color: var(--tblr-info-fg);
+  --tblr-btn-active-bg: var(--tblr-info);
+  --tblr-btn-disabled-color: var(--tblr-info);
+  --tblr-btn-disabled-border-color: var(--tblr-info);
+}
+
+.btn-warning {
+  --tblr-btn-border-color: transparent;
+  --tblr-btn-hover-border-color: transparent;
+  --tblr-btn-active-border-color: transparent;
+  --tblr-btn-color: var(--tblr-warning-fg);
+  --tblr-btn-bg: var(--tblr-warning);
+  --tblr-btn-hover-color: var(--tblr-warning-fg);
+  --tblr-btn-hover-bg: rgba(var(--tblr-warning-rgb), .8);
+  --tblr-btn-active-color: var(--tblr-warning-fg);
+  --tblr-btn-active-bg: rgba(var(--tblr-warning-rgb), .8);
+  --tblr-btn-disabled-bg: var(--tblr-warning);
+  --tblr-btn-disabled-color: var(--tblr-warning-fg);
+  --tblr-btn-box-shadow: var(--tblr-box-shadow-input);
+}
+
+.btn-outline-warning {
+  --tblr-btn-color: var(--tblr-warning);
+  --tblr-btn-bg: transparent;
+  --tblr-btn-border-color: var(--tblr-warning);
+  --tblr-btn-hover-color: var(--tblr-warning-fg);
+  --tblr-btn-hover-border-color: transparent;
+  --tblr-btn-hover-bg: var(--tblr-warning);
+  --tblr-btn-active-color: var(--tblr-warning-fg);
+  --tblr-btn-active-bg: var(--tblr-warning);
+  --tblr-btn-disabled-color: var(--tblr-warning);
+  --tblr-btn-disabled-border-color: var(--tblr-warning);
+}
+
+.btn-danger {
+  --tblr-btn-border-color: transparent;
+  --tblr-btn-hover-border-color: transparent;
+  --tblr-btn-active-border-color: transparent;
+  --tblr-btn-color: var(--tblr-danger-fg);
+  --tblr-btn-bg: var(--tblr-danger);
+  --tblr-btn-hover-color: var(--tblr-danger-fg);
+  --tblr-btn-hover-bg: rgba(var(--tblr-danger-rgb), .8);
+  --tblr-btn-active-color: var(--tblr-danger-fg);
+  --tblr-btn-active-bg: rgba(var(--tblr-danger-rgb), .8);
+  --tblr-btn-disabled-bg: var(--tblr-danger);
+  --tblr-btn-disabled-color: var(--tblr-danger-fg);
+  --tblr-btn-box-shadow: var(--tblr-box-shadow-input);
+}
+
+.btn-outline-danger {
+  --tblr-btn-color: var(--tblr-danger);
+  --tblr-btn-bg: transparent;
+  --tblr-btn-border-color: var(--tblr-danger);
+  --tblr-btn-hover-color: var(--tblr-danger-fg);
+  --tblr-btn-hover-border-color: transparent;
+  --tblr-btn-hover-bg: var(--tblr-danger);
+  --tblr-btn-active-color: var(--tblr-danger-fg);
+  --tblr-btn-active-bg: var(--tblr-danger);
+  --tblr-btn-disabled-color: var(--tblr-danger);
+  --tblr-btn-disabled-border-color: var(--tblr-danger);
+}
+
+.btn-light {
+  --tblr-btn-border-color: transparent;
+  --tblr-btn-hover-border-color: transparent;
+  --tblr-btn-active-border-color: transparent;
+  --tblr-btn-color: var(--tblr-light-fg);
+  --tblr-btn-bg: var(--tblr-light);
+  --tblr-btn-hover-color: var(--tblr-light-fg);
+  --tblr-btn-hover-bg: rgba(var(--tblr-light-rgb), .8);
+  --tblr-btn-active-color: var(--tblr-light-fg);
+  --tblr-btn-active-bg: rgba(var(--tblr-light-rgb), .8);
+  --tblr-btn-disabled-bg: var(--tblr-light);
+  --tblr-btn-disabled-color: var(--tblr-light-fg);
+  --tblr-btn-box-shadow: var(--tblr-box-shadow-input);
+}
+
+.btn-outline-light {
+  --tblr-btn-color: var(--tblr-light);
+  --tblr-btn-bg: transparent;
+  --tblr-btn-border-color: var(--tblr-light);
+  --tblr-btn-hover-color: var(--tblr-light-fg);
+  --tblr-btn-hover-border-color: transparent;
+  --tblr-btn-hover-bg: var(--tblr-light);
+  --tblr-btn-active-color: var(--tblr-light-fg);
+  --tblr-btn-active-bg: var(--tblr-light);
+  --tblr-btn-disabled-color: var(--tblr-light);
+  --tblr-btn-disabled-border-color: var(--tblr-light);
+}
+
+.btn-dark {
+  --tblr-btn-border-color: var(--tblr-dark-mode-border-color);
+  --tblr-btn-hover-border-color: var(--tblr-dark-mode-border-color-active);
+  --tblr-btn-active-border-color: var(--tblr-dark-mode-border-color-active);
+  --tblr-btn-color: var(--tblr-dark-fg);
+  --tblr-btn-bg: var(--tblr-dark);
+  --tblr-btn-hover-color: var(--tblr-dark-fg);
+  --tblr-btn-hover-bg: rgba(var(--tblr-dark-rgb), .8);
+  --tblr-btn-active-color: var(--tblr-dark-fg);
+  --tblr-btn-active-bg: rgba(var(--tblr-dark-rgb), .8);
+  --tblr-btn-disabled-bg: var(--tblr-dark);
+  --tblr-btn-disabled-color: var(--tblr-dark-fg);
+  --tblr-btn-box-shadow: var(--tblr-box-shadow-input);
+}
+
+.btn-outline-dark {
+  --tblr-btn-color: var(--tblr-dark);
+  --tblr-btn-bg: transparent;
+  --tblr-btn-border-color: var(--tblr-dark);
+  --tblr-btn-hover-color: var(--tblr-dark-fg);
+  --tblr-btn-hover-border-color: transparent;
+  --tblr-btn-hover-bg: var(--tblr-dark);
+  --tblr-btn-active-color: var(--tblr-dark-fg);
+  --tblr-btn-active-bg: var(--tblr-dark);
+  --tblr-btn-disabled-color: var(--tblr-dark);
+  --tblr-btn-disabled-border-color: var(--tblr-dark);
+}
+
+.btn-muted {
+  --tblr-btn-border-color: transparent;
+  --tblr-btn-hover-border-color: transparent;
+  --tblr-btn-active-border-color: transparent;
+  --tblr-btn-color: var(--tblr-muted-fg);
+  --tblr-btn-bg: var(--tblr-muted);
+  --tblr-btn-hover-color: var(--tblr-muted-fg);
+  --tblr-btn-hover-bg: rgba(var(--tblr-muted-rgb), .8);
+  --tblr-btn-active-color: var(--tblr-muted-fg);
+  --tblr-btn-active-bg: rgba(var(--tblr-muted-rgb), .8);
+  --tblr-btn-disabled-bg: var(--tblr-muted);
+  --tblr-btn-disabled-color: var(--tblr-muted-fg);
+  --tblr-btn-box-shadow: var(--tblr-box-shadow-input);
+}
+
+.btn-outline-muted {
+  --tblr-btn-color: var(--tblr-muted);
+  --tblr-btn-bg: transparent;
+  --tblr-btn-border-color: var(--tblr-muted);
+  --tblr-btn-hover-color: var(--tblr-muted-fg);
+  --tblr-btn-hover-border-color: transparent;
+  --tblr-btn-hover-bg: var(--tblr-muted);
+  --tblr-btn-active-color: var(--tblr-muted-fg);
+  --tblr-btn-active-bg: var(--tblr-muted);
+  --tblr-btn-disabled-color: var(--tblr-muted);
+  --tblr-btn-disabled-border-color: var(--tblr-muted);
+}
+
+.btn-blue {
+  --tblr-btn-border-color: transparent;
+  --tblr-btn-hover-border-color: transparent;
+  --tblr-btn-active-border-color: transparent;
+  --tblr-btn-color: var(--tblr-blue-fg);
+  --tblr-btn-bg: var(--tblr-blue);
+  --tblr-btn-hover-color: var(--tblr-blue-fg);
+  --tblr-btn-hover-bg: rgba(var(--tblr-blue-rgb), .8);
+  --tblr-btn-active-color: var(--tblr-blue-fg);
+  --tblr-btn-active-bg: rgba(var(--tblr-blue-rgb), .8);
+  --tblr-btn-disabled-bg: var(--tblr-blue);
+  --tblr-btn-disabled-color: var(--tblr-blue-fg);
+  --tblr-btn-box-shadow: var(--tblr-box-shadow-input);
+}
+
+.btn-outline-blue {
+  --tblr-btn-color: var(--tblr-blue);
+  --tblr-btn-bg: transparent;
+  --tblr-btn-border-color: var(--tblr-blue);
+  --tblr-btn-hover-color: var(--tblr-blue-fg);
+  --tblr-btn-hover-border-color: transparent;
+  --tblr-btn-hover-bg: var(--tblr-blue);
+  --tblr-btn-active-color: var(--tblr-blue-fg);
+  --tblr-btn-active-bg: var(--tblr-blue);
+  --tblr-btn-disabled-color: var(--tblr-blue);
+  --tblr-btn-disabled-border-color: var(--tblr-blue);
+}
+
+.btn-azure {
+  --tblr-btn-border-color: transparent;
+  --tblr-btn-hover-border-color: transparent;
+  --tblr-btn-active-border-color: transparent;
+  --tblr-btn-color: var(--tblr-azure-fg);
+  --tblr-btn-bg: var(--tblr-azure);
+  --tblr-btn-hover-color: var(--tblr-azure-fg);
+  --tblr-btn-hover-bg: rgba(var(--tblr-azure-rgb), .8);
+  --tblr-btn-active-color: var(--tblr-azure-fg);
+  --tblr-btn-active-bg: rgba(var(--tblr-azure-rgb), .8);
+  --tblr-btn-disabled-bg: var(--tblr-azure);
+  --tblr-btn-disabled-color: var(--tblr-azure-fg);
+  --tblr-btn-box-shadow: var(--tblr-box-shadow-input);
+}
+
+.btn-outline-azure {
+  --tblr-btn-color: var(--tblr-azure);
+  --tblr-btn-bg: transparent;
+  --tblr-btn-border-color: var(--tblr-azure);
+  --tblr-btn-hover-color: var(--tblr-azure-fg);
+  --tblr-btn-hover-border-color: transparent;
+  --tblr-btn-hover-bg: var(--tblr-azure);
+  --tblr-btn-active-color: var(--tblr-azure-fg);
+  --tblr-btn-active-bg: var(--tblr-azure);
+  --tblr-btn-disabled-color: var(--tblr-azure);
+  --tblr-btn-disabled-border-color: var(--tblr-azure);
+}
+
+.btn-indigo {
+  --tblr-btn-border-color: transparent;
+  --tblr-btn-hover-border-color: transparent;
+  --tblr-btn-active-border-color: transparent;
+  --tblr-btn-color: var(--tblr-indigo-fg);
+  --tblr-btn-bg: var(--tblr-indigo);
+  --tblr-btn-hover-color: var(--tblr-indigo-fg);
+  --tblr-btn-hover-bg: rgba(var(--tblr-indigo-rgb), .8);
+  --tblr-btn-active-color: var(--tblr-indigo-fg);
+  --tblr-btn-active-bg: rgba(var(--tblr-indigo-rgb), .8);
+  --tblr-btn-disabled-bg: var(--tblr-indigo);
+  --tblr-btn-disabled-color: var(--tblr-indigo-fg);
+  --tblr-btn-box-shadow: var(--tblr-box-shadow-input);
+}
+
+.btn-outline-indigo {
+  --tblr-btn-color: var(--tblr-indigo);
+  --tblr-btn-bg: transparent;
+  --tblr-btn-border-color: var(--tblr-indigo);
+  --tblr-btn-hover-color: var(--tblr-indigo-fg);
+  --tblr-btn-hover-border-color: transparent;
+  --tblr-btn-hover-bg: var(--tblr-indigo);
+  --tblr-btn-active-color: var(--tblr-indigo-fg);
+  --tblr-btn-active-bg: var(--tblr-indigo);
+  --tblr-btn-disabled-color: var(--tblr-indigo);
+  --tblr-btn-disabled-border-color: var(--tblr-indigo);
+}
+
+.btn-purple {
+  --tblr-btn-border-color: transparent;
+  --tblr-btn-hover-border-color: transparent;
+  --tblr-btn-active-border-color: transparent;
+  --tblr-btn-color: var(--tblr-purple-fg);
+  --tblr-btn-bg: var(--tblr-purple);
+  --tblr-btn-hover-color: var(--tblr-purple-fg);
+  --tblr-btn-hover-bg: rgba(var(--tblr-purple-rgb), .8);
+  --tblr-btn-active-color: var(--tblr-purple-fg);
+  --tblr-btn-active-bg: rgba(var(--tblr-purple-rgb), .8);
+  --tblr-btn-disabled-bg: var(--tblr-purple);
+  --tblr-btn-disabled-color: var(--tblr-purple-fg);
+  --tblr-btn-box-shadow: var(--tblr-box-shadow-input);
+}
+
+.btn-outline-purple {
+  --tblr-btn-color: var(--tblr-purple);
+  --tblr-btn-bg: transparent;
+  --tblr-btn-border-color: var(--tblr-purple);
+  --tblr-btn-hover-color: var(--tblr-purple-fg);
+  --tblr-btn-hover-border-color: transparent;
+  --tblr-btn-hover-bg: var(--tblr-purple);
+  --tblr-btn-active-color: var(--tblr-purple-fg);
+  --tblr-btn-active-bg: var(--tblr-purple);
+  --tblr-btn-disabled-color: var(--tblr-purple);
+  --tblr-btn-disabled-border-color: var(--tblr-purple);
+}
+
+.btn-pink {
+  --tblr-btn-border-color: transparent;
+  --tblr-btn-hover-border-color: transparent;
+  --tblr-btn-active-border-color: transparent;
+  --tblr-btn-color: var(--tblr-pink-fg);
+  --tblr-btn-bg: var(--tblr-pink);
+  --tblr-btn-hover-color: var(--tblr-pink-fg);
+  --tblr-btn-hover-bg: rgba(var(--tblr-pink-rgb), .8);
+  --tblr-btn-active-color: var(--tblr-pink-fg);
+  --tblr-btn-active-bg: rgba(var(--tblr-pink-rgb), .8);
+  --tblr-btn-disabled-bg: var(--tblr-pink);
+  --tblr-btn-disabled-color: var(--tblr-pink-fg);
+  --tblr-btn-box-shadow: var(--tblr-box-shadow-input);
+}
+
+.btn-outline-pink {
+  --tblr-btn-color: var(--tblr-pink);
+  --tblr-btn-bg: transparent;
+  --tblr-btn-border-color: var(--tblr-pink);
+  --tblr-btn-hover-color: var(--tblr-pink-fg);
+  --tblr-btn-hover-border-color: transparent;
+  --tblr-btn-hover-bg: var(--tblr-pink);
+  --tblr-btn-active-color: var(--tblr-pink-fg);
+  --tblr-btn-active-bg: var(--tblr-pink);
+  --tblr-btn-disabled-color: var(--tblr-pink);
+  --tblr-btn-disabled-border-color: var(--tblr-pink);
+}
+
+.btn-red {
+  --tblr-btn-border-color: transparent;
+  --tblr-btn-hover-border-color: transparent;
+  --tblr-btn-active-border-color: transparent;
+  --tblr-btn-color: var(--tblr-red-fg);
+  --tblr-btn-bg: var(--tblr-red);
+  --tblr-btn-hover-color: var(--tblr-red-fg);
+  --tblr-btn-hover-bg: rgba(var(--tblr-red-rgb), .8);
+  --tblr-btn-active-color: var(--tblr-red-fg);
+  --tblr-btn-active-bg: rgba(var(--tblr-red-rgb), .8);
+  --tblr-btn-disabled-bg: var(--tblr-red);
+  --tblr-btn-disabled-color: var(--tblr-red-fg);
+  --tblr-btn-box-shadow: var(--tblr-box-shadow-input);
+}
+
+.btn-outline-red {
+  --tblr-btn-color: var(--tblr-red);
+  --tblr-btn-bg: transparent;
+  --tblr-btn-border-color: var(--tblr-red);
+  --tblr-btn-hover-color: var(--tblr-red-fg);
+  --tblr-btn-hover-border-color: transparent;
+  --tblr-btn-hover-bg: var(--tblr-red);
+  --tblr-btn-active-color: var(--tblr-red-fg);
+  --tblr-btn-active-bg: var(--tblr-red);
+  --tblr-btn-disabled-color: var(--tblr-red);
+  --tblr-btn-disabled-border-color: var(--tblr-red);
+}
+
+.btn-orange {
+  --tblr-btn-border-color: transparent;
+  --tblr-btn-hover-border-color: transparent;
+  --tblr-btn-active-border-color: transparent;
+  --tblr-btn-color: var(--tblr-orange-fg);
+  --tblr-btn-bg: var(--tblr-orange);
+  --tblr-btn-hover-color: var(--tblr-orange-fg);
+  --tblr-btn-hover-bg: rgba(var(--tblr-orange-rgb), .8);
+  --tblr-btn-active-color: var(--tblr-orange-fg);
+  --tblr-btn-active-bg: rgba(var(--tblr-orange-rgb), .8);
+  --tblr-btn-disabled-bg: var(--tblr-orange);
+  --tblr-btn-disabled-color: var(--tblr-orange-fg);
+  --tblr-btn-box-shadow: var(--tblr-box-shadow-input);
+}
+
+.btn-outline-orange {
+  --tblr-btn-color: var(--tblr-orange);
+  --tblr-btn-bg: transparent;
+  --tblr-btn-border-color: var(--tblr-orange);
+  --tblr-btn-hover-color: var(--tblr-orange-fg);
+  --tblr-btn-hover-border-color: transparent;
+  --tblr-btn-hover-bg: var(--tblr-orange);
+  --tblr-btn-active-color: var(--tblr-orange-fg);
+  --tblr-btn-active-bg: var(--tblr-orange);
+  --tblr-btn-disabled-color: var(--tblr-orange);
+  --tblr-btn-disabled-border-color: var(--tblr-orange);
+}
+
+.btn-yellow {
+  --tblr-btn-border-color: transparent;
+  --tblr-btn-hover-border-color: transparent;
+  --tblr-btn-active-border-color: transparent;
+  --tblr-btn-color: var(--tblr-yellow-fg);
+  --tblr-btn-bg: var(--tblr-yellow);
+  --tblr-btn-hover-color: var(--tblr-yellow-fg);
+  --tblr-btn-hover-bg: rgba(var(--tblr-yellow-rgb), .8);
+  --tblr-btn-active-color: var(--tblr-yellow-fg);
+  --tblr-btn-active-bg: rgba(var(--tblr-yellow-rgb), .8);
+  --tblr-btn-disabled-bg: var(--tblr-yellow);
+  --tblr-btn-disabled-color: var(--tblr-yellow-fg);
+  --tblr-btn-box-shadow: var(--tblr-box-shadow-input);
+}
+
+.btn-outline-yellow {
+  --tblr-btn-color: var(--tblr-yellow);
+  --tblr-btn-bg: transparent;
+  --tblr-btn-border-color: var(--tblr-yellow);
+  --tblr-btn-hover-color: var(--tblr-yellow-fg);
+  --tblr-btn-hover-border-color: transparent;
+  --tblr-btn-hover-bg: var(--tblr-yellow);
+  --tblr-btn-active-color: var(--tblr-yellow-fg);
+  --tblr-btn-active-bg: var(--tblr-yellow);
+  --tblr-btn-disabled-color: var(--tblr-yellow);
+  --tblr-btn-disabled-border-color: var(--tblr-yellow);
+}
+
+.btn-lime {
+  --tblr-btn-border-color: transparent;
+  --tblr-btn-hover-border-color: transparent;
+  --tblr-btn-active-border-color: transparent;
+  --tblr-btn-color: var(--tblr-lime-fg);
+  --tblr-btn-bg: var(--tblr-lime);
+  --tblr-btn-hover-color: var(--tblr-lime-fg);
+  --tblr-btn-hover-bg: rgba(var(--tblr-lime-rgb), .8);
+  --tblr-btn-active-color: var(--tblr-lime-fg);
+  --tblr-btn-active-bg: rgba(var(--tblr-lime-rgb), .8);
+  --tblr-btn-disabled-bg: var(--tblr-lime);
+  --tblr-btn-disabled-color: var(--tblr-lime-fg);
+  --tblr-btn-box-shadow: var(--tblr-box-shadow-input);
+}
+
+.btn-outline-lime {
+  --tblr-btn-color: var(--tblr-lime);
+  --tblr-btn-bg: transparent;
+  --tblr-btn-border-color: var(--tblr-lime);
+  --tblr-btn-hover-color: var(--tblr-lime-fg);
+  --tblr-btn-hover-border-color: transparent;
+  --tblr-btn-hover-bg: var(--tblr-lime);
+  --tblr-btn-active-color: var(--tblr-lime-fg);
+  --tblr-btn-active-bg: var(--tblr-lime);
+  --tblr-btn-disabled-color: var(--tblr-lime);
+  --tblr-btn-disabled-border-color: var(--tblr-lime);
+}
+
+.btn-green {
+  --tblr-btn-border-color: transparent;
+  --tblr-btn-hover-border-color: transparent;
+  --tblr-btn-active-border-color: transparent;
+  --tblr-btn-color: var(--tblr-green-fg);
+  --tblr-btn-bg: var(--tblr-green);
+  --tblr-btn-hover-color: var(--tblr-green-fg);
+  --tblr-btn-hover-bg: rgba(var(--tblr-green-rgb), .8);
+  --tblr-btn-active-color: var(--tblr-green-fg);
+  --tblr-btn-active-bg: rgba(var(--tblr-green-rgb), .8);
+  --tblr-btn-disabled-bg: var(--tblr-green);
+  --tblr-btn-disabled-color: var(--tblr-green-fg);
+  --tblr-btn-box-shadow: var(--tblr-box-shadow-input);
+}
+
+.btn-outline-green {
+  --tblr-btn-color: var(--tblr-green);
+  --tblr-btn-bg: transparent;
+  --tblr-btn-border-color: var(--tblr-green);
+  --tblr-btn-hover-color: var(--tblr-green-fg);
+  --tblr-btn-hover-border-color: transparent;
+  --tblr-btn-hover-bg: var(--tblr-green);
+  --tblr-btn-active-color: var(--tblr-green-fg);
+  --tblr-btn-active-bg: var(--tblr-green);
+  --tblr-btn-disabled-color: var(--tblr-green);
+  --tblr-btn-disabled-border-color: var(--tblr-green);
+}
+
+.btn-teal {
+  --tblr-btn-border-color: transparent;
+  --tblr-btn-hover-border-color: transparent;
+  --tblr-btn-active-border-color: transparent;
+  --tblr-btn-color: var(--tblr-teal-fg);
+  --tblr-btn-bg: var(--tblr-teal);
+  --tblr-btn-hover-color: var(--tblr-teal-fg);
+  --tblr-btn-hover-bg: rgba(var(--tblr-teal-rgb), .8);
+  --tblr-btn-active-color: var(--tblr-teal-fg);
+  --tblr-btn-active-bg: rgba(var(--tblr-teal-rgb), .8);
+  --tblr-btn-disabled-bg: var(--tblr-teal);
+  --tblr-btn-disabled-color: var(--tblr-teal-fg);
+  --tblr-btn-box-shadow: var(--tblr-box-shadow-input);
+}
+
+.btn-outline-teal {
+  --tblr-btn-color: var(--tblr-teal);
+  --tblr-btn-bg: transparent;
+  --tblr-btn-border-color: var(--tblr-teal);
+  --tblr-btn-hover-color: var(--tblr-teal-fg);
+  --tblr-btn-hover-border-color: transparent;
+  --tblr-btn-hover-bg: var(--tblr-teal);
+  --tblr-btn-active-color: var(--tblr-teal-fg);
+  --tblr-btn-active-bg: var(--tblr-teal);
+  --tblr-btn-disabled-color: var(--tblr-teal);
+  --tblr-btn-disabled-border-color: var(--tblr-teal);
+}
+
+.btn-cyan {
+  --tblr-btn-border-color: transparent;
+  --tblr-btn-hover-border-color: transparent;
+  --tblr-btn-active-border-color: transparent;
+  --tblr-btn-color: var(--tblr-cyan-fg);
+  --tblr-btn-bg: var(--tblr-cyan);
+  --tblr-btn-hover-color: var(--tblr-cyan-fg);
+  --tblr-btn-hover-bg: rgba(var(--tblr-cyan-rgb), .8);
+  --tblr-btn-active-color: var(--tblr-cyan-fg);
+  --tblr-btn-active-bg: rgba(var(--tblr-cyan-rgb), .8);
+  --tblr-btn-disabled-bg: var(--tblr-cyan);
+  --tblr-btn-disabled-color: var(--tblr-cyan-fg);
+  --tblr-btn-box-shadow: var(--tblr-box-shadow-input);
+}
+
+.btn-outline-cyan {
+  --tblr-btn-color: var(--tblr-cyan);
+  --tblr-btn-bg: transparent;
+  --tblr-btn-border-color: var(--tblr-cyan);
+  --tblr-btn-hover-color: var(--tblr-cyan-fg);
+  --tblr-btn-hover-border-color: transparent;
+  --tblr-btn-hover-bg: var(--tblr-cyan);
+  --tblr-btn-active-color: var(--tblr-cyan-fg);
+  --tblr-btn-active-bg: var(--tblr-cyan);
+  --tblr-btn-disabled-color: var(--tblr-cyan);
+  --tblr-btn-disabled-border-color: var(--tblr-cyan);
+}
+
+.btn-facebook {
+  --tblr-btn-border-color: transparent;
+  --tblr-btn-hover-border-color: transparent;
+  --tblr-btn-active-border-color: transparent;
+  --tblr-btn-color: var(--tblr-facebook-fg);
+  --tblr-btn-bg: var(--tblr-facebook);
+  --tblr-btn-hover-color: var(--tblr-facebook-fg);
+  --tblr-btn-hover-bg: rgba(var(--tblr-facebook-rgb), .8);
+  --tblr-btn-active-color: var(--tblr-facebook-fg);
+  --tblr-btn-active-bg: rgba(var(--tblr-facebook-rgb), .8);
+  --tblr-btn-disabled-bg: var(--tblr-facebook);
+  --tblr-btn-disabled-color: var(--tblr-facebook-fg);
+  --tblr-btn-box-shadow: var(--tblr-box-shadow-input);
+}
+
+.btn-outline-facebook {
+  --tblr-btn-color: var(--tblr-facebook);
+  --tblr-btn-bg: transparent;
+  --tblr-btn-border-color: var(--tblr-facebook);
+  --tblr-btn-hover-color: var(--tblr-facebook-fg);
+  --tblr-btn-hover-border-color: transparent;
+  --tblr-btn-hover-bg: var(--tblr-facebook);
+  --tblr-btn-active-color: var(--tblr-facebook-fg);
+  --tblr-btn-active-bg: var(--tblr-facebook);
+  --tblr-btn-disabled-color: var(--tblr-facebook);
+  --tblr-btn-disabled-border-color: var(--tblr-facebook);
+}
+
+.btn-twitter {
+  --tblr-btn-border-color: transparent;
+  --tblr-btn-hover-border-color: transparent;
+  --tblr-btn-active-border-color: transparent;
+  --tblr-btn-color: var(--tblr-twitter-fg);
+  --tblr-btn-bg: var(--tblr-twitter);
+  --tblr-btn-hover-color: var(--tblr-twitter-fg);
+  --tblr-btn-hover-bg: rgba(var(--tblr-twitter-rgb), .8);
+  --tblr-btn-active-color: var(--tblr-twitter-fg);
+  --tblr-btn-active-bg: rgba(var(--tblr-twitter-rgb), .8);
+  --tblr-btn-disabled-bg: var(--tblr-twitter);
+  --tblr-btn-disabled-color: var(--tblr-twitter-fg);
+  --tblr-btn-box-shadow: var(--tblr-box-shadow-input);
+}
+
+.btn-outline-twitter {
+  --tblr-btn-color: var(--tblr-twitter);
+  --tblr-btn-bg: transparent;
+  --tblr-btn-border-color: var(--tblr-twitter);
+  --tblr-btn-hover-color: var(--tblr-twitter-fg);
+  --tblr-btn-hover-border-color: transparent;
+  --tblr-btn-hover-bg: var(--tblr-twitter);
+  --tblr-btn-active-color: var(--tblr-twitter-fg);
+  --tblr-btn-active-bg: var(--tblr-twitter);
+  --tblr-btn-disabled-color: var(--tblr-twitter);
+  --tblr-btn-disabled-border-color: var(--tblr-twitter);
+}
+
+.btn-linkedin {
+  --tblr-btn-border-color: transparent;
+  --tblr-btn-hover-border-color: transparent;
+  --tblr-btn-active-border-color: transparent;
+  --tblr-btn-color: var(--tblr-linkedin-fg);
+  --tblr-btn-bg: var(--tblr-linkedin);
+  --tblr-btn-hover-color: var(--tblr-linkedin-fg);
+  --tblr-btn-hover-bg: rgba(var(--tblr-linkedin-rgb), .8);
+  --tblr-btn-active-color: var(--tblr-linkedin-fg);
+  --tblr-btn-active-bg: rgba(var(--tblr-linkedin-rgb), .8);
+  --tblr-btn-disabled-bg: var(--tblr-linkedin);
+  --tblr-btn-disabled-color: var(--tblr-linkedin-fg);
+  --tblr-btn-box-shadow: var(--tblr-box-shadow-input);
+}
+
+.btn-outline-linkedin {
+  --tblr-btn-color: var(--tblr-linkedin);
+  --tblr-btn-bg: transparent;
+  --tblr-btn-border-color: var(--tblr-linkedin);
+  --tblr-btn-hover-color: var(--tblr-linkedin-fg);
+  --tblr-btn-hover-border-color: transparent;
+  --tblr-btn-hover-bg: var(--tblr-linkedin);
+  --tblr-btn-active-color: var(--tblr-linkedin-fg);
+  --tblr-btn-active-bg: var(--tblr-linkedin);
+  --tblr-btn-disabled-color: var(--tblr-linkedin);
+  --tblr-btn-disabled-border-color: var(--tblr-linkedin);
+}
+
+.btn-google {
+  --tblr-btn-border-color: transparent;
+  --tblr-btn-hover-border-color: transparent;
+  --tblr-btn-active-border-color: transparent;
+  --tblr-btn-color: var(--tblr-google-fg);
+  --tblr-btn-bg: var(--tblr-google);
+  --tblr-btn-hover-color: var(--tblr-google-fg);
+  --tblr-btn-hover-bg: rgba(var(--tblr-google-rgb), .8);
+  --tblr-btn-active-color: var(--tblr-google-fg);
+  --tblr-btn-active-bg: rgba(var(--tblr-google-rgb), .8);
+  --tblr-btn-disabled-bg: var(--tblr-google);
+  --tblr-btn-disabled-color: var(--tblr-google-fg);
+  --tblr-btn-box-shadow: var(--tblr-box-shadow-input);
+}
+
+.btn-outline-google {
+  --tblr-btn-color: var(--tblr-google);
+  --tblr-btn-bg: transparent;
+  --tblr-btn-border-color: var(--tblr-google);
+  --tblr-btn-hover-color: var(--tblr-google-fg);
+  --tblr-btn-hover-border-color: transparent;
+  --tblr-btn-hover-bg: var(--tblr-google);
+  --tblr-btn-active-color: var(--tblr-google-fg);
+  --tblr-btn-active-bg: var(--tblr-google);
+  --tblr-btn-disabled-color: var(--tblr-google);
+  --tblr-btn-disabled-border-color: var(--tblr-google);
+}
+
+.btn-youtube {
+  --tblr-btn-border-color: transparent;
+  --tblr-btn-hover-border-color: transparent;
+  --tblr-btn-active-border-color: transparent;
+  --tblr-btn-color: var(--tblr-youtube-fg);
+  --tblr-btn-bg: var(--tblr-youtube);
+  --tblr-btn-hover-color: var(--tblr-youtube-fg);
+  --tblr-btn-hover-bg: rgba(var(--tblr-youtube-rgb), .8);
+  --tblr-btn-active-color: var(--tblr-youtube-fg);
+  --tblr-btn-active-bg: rgba(var(--tblr-youtube-rgb), .8);
+  --tblr-btn-disabled-bg: var(--tblr-youtube);
+  --tblr-btn-disabled-color: var(--tblr-youtube-fg);
+  --tblr-btn-box-shadow: var(--tblr-box-shadow-input);
+}
+
+.btn-outline-youtube {
+  --tblr-btn-color: var(--tblr-youtube);
+  --tblr-btn-bg: transparent;
+  --tblr-btn-border-color: var(--tblr-youtube);
+  --tblr-btn-hover-color: var(--tblr-youtube-fg);
+  --tblr-btn-hover-border-color: transparent;
+  --tblr-btn-hover-bg: var(--tblr-youtube);
+  --tblr-btn-active-color: var(--tblr-youtube-fg);
+  --tblr-btn-active-bg: var(--tblr-youtube);
+  --tblr-btn-disabled-color: var(--tblr-youtube);
+  --tblr-btn-disabled-border-color: var(--tblr-youtube);
+}
+
+.btn-vimeo {
+  --tblr-btn-border-color: transparent;
+  --tblr-btn-hover-border-color: transparent;
+  --tblr-btn-active-border-color: transparent;
+  --tblr-btn-color: var(--tblr-vimeo-fg);
+  --tblr-btn-bg: var(--tblr-vimeo);
+  --tblr-btn-hover-color: var(--tblr-vimeo-fg);
+  --tblr-btn-hover-bg: rgba(var(--tblr-vimeo-rgb), .8);
+  --tblr-btn-active-color: var(--tblr-vimeo-fg);
+  --tblr-btn-active-bg: rgba(var(--tblr-vimeo-rgb), .8);
+  --tblr-btn-disabled-bg: var(--tblr-vimeo);
+  --tblr-btn-disabled-color: var(--tblr-vimeo-fg);
+  --tblr-btn-box-shadow: var(--tblr-box-shadow-input);
+}
+
+.btn-outline-vimeo {
+  --tblr-btn-color: var(--tblr-vimeo);
+  --tblr-btn-bg: transparent;
+  --tblr-btn-border-color: var(--tblr-vimeo);
+  --tblr-btn-hover-color: var(--tblr-vimeo-fg);
+  --tblr-btn-hover-border-color: transparent;
+  --tblr-btn-hover-bg: var(--tblr-vimeo);
+  --tblr-btn-active-color: var(--tblr-vimeo-fg);
+  --tblr-btn-active-bg: var(--tblr-vimeo);
+  --tblr-btn-disabled-color: var(--tblr-vimeo);
+  --tblr-btn-disabled-border-color: var(--tblr-vimeo);
+}
+
+.btn-dribbble {
+  --tblr-btn-border-color: transparent;
+  --tblr-btn-hover-border-color: transparent;
+  --tblr-btn-active-border-color: transparent;
+  --tblr-btn-color: var(--tblr-dribbble-fg);
+  --tblr-btn-bg: var(--tblr-dribbble);
+  --tblr-btn-hover-color: var(--tblr-dribbble-fg);
+  --tblr-btn-hover-bg: rgba(var(--tblr-dribbble-rgb), .8);
+  --tblr-btn-active-color: var(--tblr-dribbble-fg);
+  --tblr-btn-active-bg: rgba(var(--tblr-dribbble-rgb), .8);
+  --tblr-btn-disabled-bg: var(--tblr-dribbble);
+  --tblr-btn-disabled-color: var(--tblr-dribbble-fg);
+  --tblr-btn-box-shadow: var(--tblr-box-shadow-input);
+}
+
+.btn-outline-dribbble {
+  --tblr-btn-color: var(--tblr-dribbble);
+  --tblr-btn-bg: transparent;
+  --tblr-btn-border-color: var(--tblr-dribbble);
+  --tblr-btn-hover-color: var(--tblr-dribbble-fg);
+  --tblr-btn-hover-border-color: transparent;
+  --tblr-btn-hover-bg: var(--tblr-dribbble);
+  --tblr-btn-active-color: var(--tblr-dribbble-fg);
+  --tblr-btn-active-bg: var(--tblr-dribbble);
+  --tblr-btn-disabled-color: var(--tblr-dribbble);
+  --tblr-btn-disabled-border-color: var(--tblr-dribbble);
+}
+
+.btn-github {
+  --tblr-btn-border-color: transparent;
+  --tblr-btn-hover-border-color: transparent;
+  --tblr-btn-active-border-color: transparent;
+  --tblr-btn-color: var(--tblr-github-fg);
+  --tblr-btn-bg: var(--tblr-github);
+  --tblr-btn-hover-color: var(--tblr-github-fg);
+  --tblr-btn-hover-bg: rgba(var(--tblr-github-rgb), .8);
+  --tblr-btn-active-color: var(--tblr-github-fg);
+  --tblr-btn-active-bg: rgba(var(--tblr-github-rgb), .8);
+  --tblr-btn-disabled-bg: var(--tblr-github);
+  --tblr-btn-disabled-color: var(--tblr-github-fg);
+  --tblr-btn-box-shadow: var(--tblr-box-shadow-input);
+}
+
+.btn-outline-github {
+  --tblr-btn-color: var(--tblr-github);
+  --tblr-btn-bg: transparent;
+  --tblr-btn-border-color: var(--tblr-github);
+  --tblr-btn-hover-color: var(--tblr-github-fg);
+  --tblr-btn-hover-border-color: transparent;
+  --tblr-btn-hover-bg: var(--tblr-github);
+  --tblr-btn-active-color: var(--tblr-github-fg);
+  --tblr-btn-active-bg: var(--tblr-github);
+  --tblr-btn-disabled-color: var(--tblr-github);
+  --tblr-btn-disabled-border-color: var(--tblr-github);
+}
+
+.btn-instagram {
+  --tblr-btn-border-color: transparent;
+  --tblr-btn-hover-border-color: transparent;
+  --tblr-btn-active-border-color: transparent;
+  --tblr-btn-color: var(--tblr-instagram-fg);
+  --tblr-btn-bg: var(--tblr-instagram);
+  --tblr-btn-hover-color: var(--tblr-instagram-fg);
+  --tblr-btn-hover-bg: rgba(var(--tblr-instagram-rgb), .8);
+  --tblr-btn-active-color: var(--tblr-instagram-fg);
+  --tblr-btn-active-bg: rgba(var(--tblr-instagram-rgb), .8);
+  --tblr-btn-disabled-bg: var(--tblr-instagram);
+  --tblr-btn-disabled-color: var(--tblr-instagram-fg);
+  --tblr-btn-box-shadow: var(--tblr-box-shadow-input);
+}
+
+.btn-outline-instagram {
+  --tblr-btn-color: var(--tblr-instagram);
+  --tblr-btn-bg: transparent;
+  --tblr-btn-border-color: var(--tblr-instagram);
+  --tblr-btn-hover-color: var(--tblr-instagram-fg);
+  --tblr-btn-hover-border-color: transparent;
+  --tblr-btn-hover-bg: var(--tblr-instagram);
+  --tblr-btn-active-color: var(--tblr-instagram-fg);
+  --tblr-btn-active-bg: var(--tblr-instagram);
+  --tblr-btn-disabled-color: var(--tblr-instagram);
+  --tblr-btn-disabled-border-color: var(--tblr-instagram);
+}
+
+.btn-pinterest {
+  --tblr-btn-border-color: transparent;
+  --tblr-btn-hover-border-color: transparent;
+  --tblr-btn-active-border-color: transparent;
+  --tblr-btn-color: var(--tblr-pinterest-fg);
+  --tblr-btn-bg: var(--tblr-pinterest);
+  --tblr-btn-hover-color: var(--tblr-pinterest-fg);
+  --tblr-btn-hover-bg: rgba(var(--tblr-pinterest-rgb), .8);
+  --tblr-btn-active-color: var(--tblr-pinterest-fg);
+  --tblr-btn-active-bg: rgba(var(--tblr-pinterest-rgb), .8);
+  --tblr-btn-disabled-bg: var(--tblr-pinterest);
+  --tblr-btn-disabled-color: var(--tblr-pinterest-fg);
+  --tblr-btn-box-shadow: var(--tblr-box-shadow-input);
+}
+
+.btn-outline-pinterest {
+  --tblr-btn-color: var(--tblr-pinterest);
+  --tblr-btn-bg: transparent;
+  --tblr-btn-border-color: var(--tblr-pinterest);
+  --tblr-btn-hover-color: var(--tblr-pinterest-fg);
+  --tblr-btn-hover-border-color: transparent;
+  --tblr-btn-hover-bg: var(--tblr-pinterest);
+  --tblr-btn-active-color: var(--tblr-pinterest-fg);
+  --tblr-btn-active-bg: var(--tblr-pinterest);
+  --tblr-btn-disabled-color: var(--tblr-pinterest);
+  --tblr-btn-disabled-border-color: var(--tblr-pinterest);
+}
+
+.btn-vk {
+  --tblr-btn-border-color: transparent;
+  --tblr-btn-hover-border-color: transparent;
+  --tblr-btn-active-border-color: transparent;
+  --tblr-btn-color: var(--tblr-vk-fg);
+  --tblr-btn-bg: var(--tblr-vk);
+  --tblr-btn-hover-color: var(--tblr-vk-fg);
+  --tblr-btn-hover-bg: rgba(var(--tblr-vk-rgb), .8);
+  --tblr-btn-active-color: var(--tblr-vk-fg);
+  --tblr-btn-active-bg: rgba(var(--tblr-vk-rgb), .8);
+  --tblr-btn-disabled-bg: var(--tblr-vk);
+  --tblr-btn-disabled-color: var(--tblr-vk-fg);
+  --tblr-btn-box-shadow: var(--tblr-box-shadow-input);
+}
+
+.btn-outline-vk {
+  --tblr-btn-color: var(--tblr-vk);
+  --tblr-btn-bg: transparent;
+  --tblr-btn-border-color: var(--tblr-vk);
+  --tblr-btn-hover-color: var(--tblr-vk-fg);
+  --tblr-btn-hover-border-color: transparent;
+  --tblr-btn-hover-bg: var(--tblr-vk);
+  --tblr-btn-active-color: var(--tblr-vk-fg);
+  --tblr-btn-active-bg: var(--tblr-vk);
+  --tblr-btn-disabled-color: var(--tblr-vk);
+  --tblr-btn-disabled-border-color: var(--tblr-vk);
+}
+
+.btn-rss {
+  --tblr-btn-border-color: transparent;
+  --tblr-btn-hover-border-color: transparent;
+  --tblr-btn-active-border-color: transparent;
+  --tblr-btn-color: var(--tblr-rss-fg);
+  --tblr-btn-bg: var(--tblr-rss);
+  --tblr-btn-hover-color: var(--tblr-rss-fg);
+  --tblr-btn-hover-bg: rgba(var(--tblr-rss-rgb), .8);
+  --tblr-btn-active-color: var(--tblr-rss-fg);
+  --tblr-btn-active-bg: rgba(var(--tblr-rss-rgb), .8);
+  --tblr-btn-disabled-bg: var(--tblr-rss);
+  --tblr-btn-disabled-color: var(--tblr-rss-fg);
+  --tblr-btn-box-shadow: var(--tblr-box-shadow-input);
+}
+
+.btn-outline-rss {
+  --tblr-btn-color: var(--tblr-rss);
+  --tblr-btn-bg: transparent;
+  --tblr-btn-border-color: var(--tblr-rss);
+  --tblr-btn-hover-color: var(--tblr-rss-fg);
+  --tblr-btn-hover-border-color: transparent;
+  --tblr-btn-hover-bg: var(--tblr-rss);
+  --tblr-btn-active-color: var(--tblr-rss-fg);
+  --tblr-btn-active-bg: var(--tblr-rss);
+  --tblr-btn-disabled-color: var(--tblr-rss);
+  --tblr-btn-disabled-border-color: var(--tblr-rss);
+}
+
+.btn-flickr {
+  --tblr-btn-border-color: transparent;
+  --tblr-btn-hover-border-color: transparent;
+  --tblr-btn-active-border-color: transparent;
+  --tblr-btn-color: var(--tblr-flickr-fg);
+  --tblr-btn-bg: var(--tblr-flickr);
+  --tblr-btn-hover-color: var(--tblr-flickr-fg);
+  --tblr-btn-hover-bg: rgba(var(--tblr-flickr-rgb), .8);
+  --tblr-btn-active-color: var(--tblr-flickr-fg);
+  --tblr-btn-active-bg: rgba(var(--tblr-flickr-rgb), .8);
+  --tblr-btn-disabled-bg: var(--tblr-flickr);
+  --tblr-btn-disabled-color: var(--tblr-flickr-fg);
+  --tblr-btn-box-shadow: var(--tblr-box-shadow-input);
+}
+
+.btn-outline-flickr {
+  --tblr-btn-color: var(--tblr-flickr);
+  --tblr-btn-bg: transparent;
+  --tblr-btn-border-color: var(--tblr-flickr);
+  --tblr-btn-hover-color: var(--tblr-flickr-fg);
+  --tblr-btn-hover-border-color: transparent;
+  --tblr-btn-hover-bg: var(--tblr-flickr);
+  --tblr-btn-active-color: var(--tblr-flickr-fg);
+  --tblr-btn-active-bg: var(--tblr-flickr);
+  --tblr-btn-disabled-color: var(--tblr-flickr);
+  --tblr-btn-disabled-border-color: var(--tblr-flickr);
+}
+
+.btn-bitbucket {
+  --tblr-btn-border-color: transparent;
+  --tblr-btn-hover-border-color: transparent;
+  --tblr-btn-active-border-color: transparent;
+  --tblr-btn-color: var(--tblr-bitbucket-fg);
+  --tblr-btn-bg: var(--tblr-bitbucket);
+  --tblr-btn-hover-color: var(--tblr-bitbucket-fg);
+  --tblr-btn-hover-bg: rgba(var(--tblr-bitbucket-rgb), .8);
+  --tblr-btn-active-color: var(--tblr-bitbucket-fg);
+  --tblr-btn-active-bg: rgba(var(--tblr-bitbucket-rgb), .8);
+  --tblr-btn-disabled-bg: var(--tblr-bitbucket);
+  --tblr-btn-disabled-color: var(--tblr-bitbucket-fg);
+  --tblr-btn-box-shadow: var(--tblr-box-shadow-input);
+}
+
+.btn-outline-bitbucket {
+  --tblr-btn-color: var(--tblr-bitbucket);
+  --tblr-btn-bg: transparent;
+  --tblr-btn-border-color: var(--tblr-bitbucket);
+  --tblr-btn-hover-color: var(--tblr-bitbucket-fg);
+  --tblr-btn-hover-border-color: transparent;
+  --tblr-btn-hover-bg: var(--tblr-bitbucket);
+  --tblr-btn-active-color: var(--tblr-bitbucket-fg);
+  --tblr-btn-active-bg: var(--tblr-bitbucket);
+  --tblr-btn-disabled-color: var(--tblr-bitbucket);
+  --tblr-btn-disabled-border-color: var(--tblr-bitbucket);
+}
+
+.btn-tabler {
+  --tblr-btn-border-color: transparent;
+  --tblr-btn-hover-border-color: transparent;
+  --tblr-btn-active-border-color: transparent;
+  --tblr-btn-color: var(--tblr-tabler-fg);
+  --tblr-btn-bg: var(--tblr-tabler);
+  --tblr-btn-hover-color: var(--tblr-tabler-fg);
+  --tblr-btn-hover-bg: rgba(var(--tblr-tabler-rgb), .8);
+  --tblr-btn-active-color: var(--tblr-tabler-fg);
+  --tblr-btn-active-bg: rgba(var(--tblr-tabler-rgb), .8);
+  --tblr-btn-disabled-bg: var(--tblr-tabler);
+  --tblr-btn-disabled-color: var(--tblr-tabler-fg);
+  --tblr-btn-box-shadow: var(--tblr-box-shadow-input);
+}
+
+.btn-outline-tabler {
+  --tblr-btn-color: var(--tblr-tabler);
+  --tblr-btn-bg: transparent;
+  --tblr-btn-border-color: var(--tblr-tabler);
+  --tblr-btn-hover-color: var(--tblr-tabler-fg);
+  --tblr-btn-hover-border-color: transparent;
+  --tblr-btn-hover-bg: var(--tblr-tabler);
+  --tblr-btn-active-color: var(--tblr-tabler-fg);
+  --tblr-btn-active-bg: var(--tblr-tabler);
+  --tblr-btn-disabled-color: var(--tblr-tabler);
+  --tblr-btn-disabled-border-color: var(--tblr-tabler);
+}
+
+.btn-ghost-primary {
+  --tblr-btn-color: var(--tblr-primary);
+  --tblr-btn-bg: transparent;
+  --tblr-btn-border-color: transparent;
+  --tblr-btn-hover-color: var(--tblr-primary-fg);
+  --tblr-btn-hover-bg: var(--tblr-primary);
+  --tblr-btn-hover-border-color: var(--tblr-primary);
+  --tblr-btn-active-color: var(--tblr-primary-fg);
+  --tblr-btn-active-bg: var(--tblr-primary);
+  --tblr-btn-active-border-color: transparent;
+  --tblr-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
+  --tblr-btn-disabled-color: var(--tblr-primary);
+  --tblr-btn-disabled-bg: transparent;
+  --tblr-btn-disabled-border-color: transparent;
+  --tblr-gradient: none;
+  --tblr-btn-box-shadow: none;
+}
+
+.btn-ghost-secondary {
+  --tblr-btn-color: var(--tblr-secondary);
+  --tblr-btn-bg: transparent;
+  --tblr-btn-border-color: transparent;
+  --tblr-btn-hover-color: var(--tblr-secondary-fg);
+  --tblr-btn-hover-bg: var(--tblr-secondary);
+  --tblr-btn-hover-border-color: var(--tblr-secondary);
+  --tblr-btn-active-color: var(--tblr-secondary-fg);
+  --tblr-btn-active-bg: var(--tblr-secondary);
+  --tblr-btn-active-border-color: transparent;
+  --tblr-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
+  --tblr-btn-disabled-color: var(--tblr-secondary);
+  --tblr-btn-disabled-bg: transparent;
+  --tblr-btn-disabled-border-color: transparent;
+  --tblr-gradient: none;
+  --tblr-btn-box-shadow: none;
+}
+
+.btn-ghost-success {
+  --tblr-btn-color: var(--tblr-success);
+  --tblr-btn-bg: transparent;
+  --tblr-btn-border-color: transparent;
+  --tblr-btn-hover-color: var(--tblr-success-fg);
+  --tblr-btn-hover-bg: var(--tblr-success);
+  --tblr-btn-hover-border-color: var(--tblr-success);
+  --tblr-btn-active-color: var(--tblr-success-fg);
+  --tblr-btn-active-bg: var(--tblr-success);
+  --tblr-btn-active-border-color: transparent;
+  --tblr-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
+  --tblr-btn-disabled-color: var(--tblr-success);
+  --tblr-btn-disabled-bg: transparent;
+  --tblr-btn-disabled-border-color: transparent;
+  --tblr-gradient: none;
+  --tblr-btn-box-shadow: none;
+}
+
+.btn-ghost-info {
+  --tblr-btn-color: var(--tblr-info);
+  --tblr-btn-bg: transparent;
+  --tblr-btn-border-color: transparent;
+  --tblr-btn-hover-color: var(--tblr-info-fg);
+  --tblr-btn-hover-bg: var(--tblr-info);
+  --tblr-btn-hover-border-color: var(--tblr-info);
+  --tblr-btn-active-color: var(--tblr-info-fg);
+  --tblr-btn-active-bg: var(--tblr-info);
+  --tblr-btn-active-border-color: transparent;
+  --tblr-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
+  --tblr-btn-disabled-color: var(--tblr-info);
+  --tblr-btn-disabled-bg: transparent;
+  --tblr-btn-disabled-border-color: transparent;
+  --tblr-gradient: none;
+  --tblr-btn-box-shadow: none;
+}
+
+.btn-ghost-warning {
+  --tblr-btn-color: var(--tblr-warning);
+  --tblr-btn-bg: transparent;
+  --tblr-btn-border-color: transparent;
+  --tblr-btn-hover-color: var(--tblr-warning-fg);
+  --tblr-btn-hover-bg: var(--tblr-warning);
+  --tblr-btn-hover-border-color: var(--tblr-warning);
+  --tblr-btn-active-color: var(--tblr-warning-fg);
+  --tblr-btn-active-bg: var(--tblr-warning);
+  --tblr-btn-active-border-color: transparent;
+  --tblr-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
+  --tblr-btn-disabled-color: var(--tblr-warning);
+  --tblr-btn-disabled-bg: transparent;
+  --tblr-btn-disabled-border-color: transparent;
+  --tblr-gradient: none;
+  --tblr-btn-box-shadow: none;
+}
+
+.btn-ghost-danger {
+  --tblr-btn-color: var(--tblr-danger);
+  --tblr-btn-bg: transparent;
+  --tblr-btn-border-color: transparent;
+  --tblr-btn-hover-color: var(--tblr-danger-fg);
+  --tblr-btn-hover-bg: var(--tblr-danger);
+  --tblr-btn-hover-border-color: var(--tblr-danger);
+  --tblr-btn-active-color: var(--tblr-danger-fg);
+  --tblr-btn-active-bg: var(--tblr-danger);
+  --tblr-btn-active-border-color: transparent;
+  --tblr-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
+  --tblr-btn-disabled-color: var(--tblr-danger);
+  --tblr-btn-disabled-bg: transparent;
+  --tblr-btn-disabled-border-color: transparent;
+  --tblr-gradient: none;
+  --tblr-btn-box-shadow: none;
+}
+
+.btn-ghost-light {
+  --tblr-btn-color: var(--tblr-light);
+  --tblr-btn-bg: transparent;
+  --tblr-btn-border-color: transparent;
+  --tblr-btn-hover-color: var(--tblr-light-fg);
+  --tblr-btn-hover-bg: var(--tblr-light);
+  --tblr-btn-hover-border-color: var(--tblr-light);
+  --tblr-btn-active-color: var(--tblr-light-fg);
+  --tblr-btn-active-bg: var(--tblr-light);
+  --tblr-btn-active-border-color: transparent;
+  --tblr-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
+  --tblr-btn-disabled-color: var(--tblr-light);
+  --tblr-btn-disabled-bg: transparent;
+  --tblr-btn-disabled-border-color: transparent;
+  --tblr-gradient: none;
+  --tblr-btn-box-shadow: none;
+}
+
+.btn-ghost-dark {
+  --tblr-btn-color: var(--tblr-dark);
+  --tblr-btn-bg: transparent;
+  --tblr-btn-border-color: transparent;
+  --tblr-btn-hover-color: var(--tblr-dark-fg);
+  --tblr-btn-hover-bg: var(--tblr-dark);
+  --tblr-btn-hover-border-color: var(--tblr-dark);
+  --tblr-btn-active-color: var(--tblr-dark-fg);
+  --tblr-btn-active-bg: var(--tblr-dark);
+  --tblr-btn-active-border-color: transparent;
+  --tblr-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
+  --tblr-btn-disabled-color: var(--tblr-dark);
+  --tblr-btn-disabled-bg: transparent;
+  --tblr-btn-disabled-border-color: transparent;
+  --tblr-gradient: none;
+  --tblr-btn-box-shadow: none;
+}
+
+.btn-ghost-muted {
+  --tblr-btn-color: var(--tblr-muted);
+  --tblr-btn-bg: transparent;
+  --tblr-btn-border-color: transparent;
+  --tblr-btn-hover-color: var(--tblr-muted-fg);
+  --tblr-btn-hover-bg: var(--tblr-muted);
+  --tblr-btn-hover-border-color: var(--tblr-muted);
+  --tblr-btn-active-color: var(--tblr-muted-fg);
+  --tblr-btn-active-bg: var(--tblr-muted);
+  --tblr-btn-active-border-color: transparent;
+  --tblr-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
+  --tblr-btn-disabled-color: var(--tblr-muted);
+  --tblr-btn-disabled-bg: transparent;
+  --tblr-btn-disabled-border-color: transparent;
+  --tblr-gradient: none;
+  --tblr-btn-box-shadow: none;
+}
+
+.btn-ghost-blue {
+  --tblr-btn-color: var(--tblr-blue);
+  --tblr-btn-bg: transparent;
+  --tblr-btn-border-color: transparent;
+  --tblr-btn-hover-color: var(--tblr-blue-fg);
+  --tblr-btn-hover-bg: var(--tblr-blue);
+  --tblr-btn-hover-border-color: var(--tblr-blue);
+  --tblr-btn-active-color: var(--tblr-blue-fg);
+  --tblr-btn-active-bg: var(--tblr-blue);
+  --tblr-btn-active-border-color: transparent;
+  --tblr-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
+  --tblr-btn-disabled-color: var(--tblr-blue);
+  --tblr-btn-disabled-bg: transparent;
+  --tblr-btn-disabled-border-color: transparent;
+  --tblr-gradient: none;
+  --tblr-btn-box-shadow: none;
+}
+
+.btn-ghost-azure {
+  --tblr-btn-color: var(--tblr-azure);
+  --tblr-btn-bg: transparent;
+  --tblr-btn-border-color: transparent;
+  --tblr-btn-hover-color: var(--tblr-azure-fg);
+  --tblr-btn-hover-bg: var(--tblr-azure);
+  --tblr-btn-hover-border-color: var(--tblr-azure);
+  --tblr-btn-active-color: var(--tblr-azure-fg);
+  --tblr-btn-active-bg: var(--tblr-azure);
+  --tblr-btn-active-border-color: transparent;
+  --tblr-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
+  --tblr-btn-disabled-color: var(--tblr-azure);
+  --tblr-btn-disabled-bg: transparent;
+  --tblr-btn-disabled-border-color: transparent;
+  --tblr-gradient: none;
+  --tblr-btn-box-shadow: none;
+}
+
+.btn-ghost-indigo {
+  --tblr-btn-color: var(--tblr-indigo);
+  --tblr-btn-bg: transparent;
+  --tblr-btn-border-color: transparent;
+  --tblr-btn-hover-color: var(--tblr-indigo-fg);
+  --tblr-btn-hover-bg: var(--tblr-indigo);
+  --tblr-btn-hover-border-color: var(--tblr-indigo);
+  --tblr-btn-active-color: var(--tblr-indigo-fg);
+  --tblr-btn-active-bg: var(--tblr-indigo);
+  --tblr-btn-active-border-color: transparent;
+  --tblr-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
+  --tblr-btn-disabled-color: var(--tblr-indigo);
+  --tblr-btn-disabled-bg: transparent;
+  --tblr-btn-disabled-border-color: transparent;
+  --tblr-gradient: none;
+  --tblr-btn-box-shadow: none;
+}
+
+.btn-ghost-purple {
+  --tblr-btn-color: var(--tblr-purple);
+  --tblr-btn-bg: transparent;
+  --tblr-btn-border-color: transparent;
+  --tblr-btn-hover-color: var(--tblr-purple-fg);
+  --tblr-btn-hover-bg: var(--tblr-purple);
+  --tblr-btn-hover-border-color: var(--tblr-purple);
+  --tblr-btn-active-color: var(--tblr-purple-fg);
+  --tblr-btn-active-bg: var(--tblr-purple);
+  --tblr-btn-active-border-color: transparent;
+  --tblr-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
+  --tblr-btn-disabled-color: var(--tblr-purple);
+  --tblr-btn-disabled-bg: transparent;
+  --tblr-btn-disabled-border-color: transparent;
+  --tblr-gradient: none;
+  --tblr-btn-box-shadow: none;
+}
+
+.btn-ghost-pink {
+  --tblr-btn-color: var(--tblr-pink);
+  --tblr-btn-bg: transparent;
+  --tblr-btn-border-color: transparent;
+  --tblr-btn-hover-color: var(--tblr-pink-fg);
+  --tblr-btn-hover-bg: var(--tblr-pink);
+  --tblr-btn-hover-border-color: var(--tblr-pink);
+  --tblr-btn-active-color: var(--tblr-pink-fg);
+  --tblr-btn-active-bg: var(--tblr-pink);
+  --tblr-btn-active-border-color: transparent;
+  --tblr-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
+  --tblr-btn-disabled-color: var(--tblr-pink);
+  --tblr-btn-disabled-bg: transparent;
+  --tblr-btn-disabled-border-color: transparent;
+  --tblr-gradient: none;
+  --tblr-btn-box-shadow: none;
+}
+
+.btn-ghost-red {
+  --tblr-btn-color: var(--tblr-red);
+  --tblr-btn-bg: transparent;
+  --tblr-btn-border-color: transparent;
+  --tblr-btn-hover-color: var(--tblr-red-fg);
+  --tblr-btn-hover-bg: var(--tblr-red);
+  --tblr-btn-hover-border-color: var(--tblr-red);
+  --tblr-btn-active-color: var(--tblr-red-fg);
+  --tblr-btn-active-bg: var(--tblr-red);
+  --tblr-btn-active-border-color: transparent;
+  --tblr-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
+  --tblr-btn-disabled-color: var(--tblr-red);
+  --tblr-btn-disabled-bg: transparent;
+  --tblr-btn-disabled-border-color: transparent;
+  --tblr-gradient: none;
+  --tblr-btn-box-shadow: none;
+}
+
+.btn-ghost-orange {
+  --tblr-btn-color: var(--tblr-orange);
+  --tblr-btn-bg: transparent;
+  --tblr-btn-border-color: transparent;
+  --tblr-btn-hover-color: var(--tblr-orange-fg);
+  --tblr-btn-hover-bg: var(--tblr-orange);
+  --tblr-btn-hover-border-color: var(--tblr-orange);
+  --tblr-btn-active-color: var(--tblr-orange-fg);
+  --tblr-btn-active-bg: var(--tblr-orange);
+  --tblr-btn-active-border-color: transparent;
+  --tblr-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
+  --tblr-btn-disabled-color: var(--tblr-orange);
+  --tblr-btn-disabled-bg: transparent;
+  --tblr-btn-disabled-border-color: transparent;
+  --tblr-gradient: none;
+  --tblr-btn-box-shadow: none;
+}
+
+.btn-ghost-yellow {
+  --tblr-btn-color: var(--tblr-yellow);
+  --tblr-btn-bg: transparent;
+  --tblr-btn-border-color: transparent;
+  --tblr-btn-hover-color: var(--tblr-yellow-fg);
+  --tblr-btn-hover-bg: var(--tblr-yellow);
+  --tblr-btn-hover-border-color: var(--tblr-yellow);
+  --tblr-btn-active-color: var(--tblr-yellow-fg);
+  --tblr-btn-active-bg: var(--tblr-yellow);
+  --tblr-btn-active-border-color: transparent;
+  --tblr-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
+  --tblr-btn-disabled-color: var(--tblr-yellow);
+  --tblr-btn-disabled-bg: transparent;
+  --tblr-btn-disabled-border-color: transparent;
+  --tblr-gradient: none;
+  --tblr-btn-box-shadow: none;
+}
+
+.btn-ghost-lime {
+  --tblr-btn-color: var(--tblr-lime);
+  --tblr-btn-bg: transparent;
+  --tblr-btn-border-color: transparent;
+  --tblr-btn-hover-color: var(--tblr-lime-fg);
+  --tblr-btn-hover-bg: var(--tblr-lime);
+  --tblr-btn-hover-border-color: var(--tblr-lime);
+  --tblr-btn-active-color: var(--tblr-lime-fg);
+  --tblr-btn-active-bg: var(--tblr-lime);
+  --tblr-btn-active-border-color: transparent;
+  --tblr-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
+  --tblr-btn-disabled-color: var(--tblr-lime);
+  --tblr-btn-disabled-bg: transparent;
+  --tblr-btn-disabled-border-color: transparent;
+  --tblr-gradient: none;
+  --tblr-btn-box-shadow: none;
+}
+
+.btn-ghost-green {
+  --tblr-btn-color: var(--tblr-green);
+  --tblr-btn-bg: transparent;
+  --tblr-btn-border-color: transparent;
+  --tblr-btn-hover-color: var(--tblr-green-fg);
+  --tblr-btn-hover-bg: var(--tblr-green);
+  --tblr-btn-hover-border-color: var(--tblr-green);
+  --tblr-btn-active-color: var(--tblr-green-fg);
+  --tblr-btn-active-bg: var(--tblr-green);
+  --tblr-btn-active-border-color: transparent;
+  --tblr-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
+  --tblr-btn-disabled-color: var(--tblr-green);
+  --tblr-btn-disabled-bg: transparent;
+  --tblr-btn-disabled-border-color: transparent;
+  --tblr-gradient: none;
+  --tblr-btn-box-shadow: none;
+}
+
+.btn-ghost-teal {
+  --tblr-btn-color: var(--tblr-teal);
+  --tblr-btn-bg: transparent;
+  --tblr-btn-border-color: transparent;
+  --tblr-btn-hover-color: var(--tblr-teal-fg);
+  --tblr-btn-hover-bg: var(--tblr-teal);
+  --tblr-btn-hover-border-color: var(--tblr-teal);
+  --tblr-btn-active-color: var(--tblr-teal-fg);
+  --tblr-btn-active-bg: var(--tblr-teal);
+  --tblr-btn-active-border-color: transparent;
+  --tblr-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
+  --tblr-btn-disabled-color: var(--tblr-teal);
+  --tblr-btn-disabled-bg: transparent;
+  --tblr-btn-disabled-border-color: transparent;
+  --tblr-gradient: none;
+  --tblr-btn-box-shadow: none;
+}
+
+.btn-ghost-cyan {
+  --tblr-btn-color: var(--tblr-cyan);
+  --tblr-btn-bg: transparent;
+  --tblr-btn-border-color: transparent;
+  --tblr-btn-hover-color: var(--tblr-cyan-fg);
+  --tblr-btn-hover-bg: var(--tblr-cyan);
+  --tblr-btn-hover-border-color: var(--tblr-cyan);
+  --tblr-btn-active-color: var(--tblr-cyan-fg);
+  --tblr-btn-active-bg: var(--tblr-cyan);
+  --tblr-btn-active-border-color: transparent;
+  --tblr-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
+  --tblr-btn-disabled-color: var(--tblr-cyan);
+  --tblr-btn-disabled-bg: transparent;
+  --tblr-btn-disabled-border-color: transparent;
+  --tblr-gradient: none;
+  --tblr-btn-box-shadow: none;
+}
+
+.btn-ghost-facebook {
+  --tblr-btn-color: var(--tblr-facebook);
+  --tblr-btn-bg: transparent;
+  --tblr-btn-border-color: transparent;
+  --tblr-btn-hover-color: var(--tblr-facebook-fg);
+  --tblr-btn-hover-bg: var(--tblr-facebook);
+  --tblr-btn-hover-border-color: var(--tblr-facebook);
+  --tblr-btn-active-color: var(--tblr-facebook-fg);
+  --tblr-btn-active-bg: var(--tblr-facebook);
+  --tblr-btn-active-border-color: transparent;
+  --tblr-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
+  --tblr-btn-disabled-color: var(--tblr-facebook);
+  --tblr-btn-disabled-bg: transparent;
+  --tblr-btn-disabled-border-color: transparent;
+  --tblr-gradient: none;
+  --tblr-btn-box-shadow: none;
+}
+
+.btn-ghost-twitter {
+  --tblr-btn-color: var(--tblr-twitter);
+  --tblr-btn-bg: transparent;
+  --tblr-btn-border-color: transparent;
+  --tblr-btn-hover-color: var(--tblr-twitter-fg);
+  --tblr-btn-hover-bg: var(--tblr-twitter);
+  --tblr-btn-hover-border-color: var(--tblr-twitter);
+  --tblr-btn-active-color: var(--tblr-twitter-fg);
+  --tblr-btn-active-bg: var(--tblr-twitter);
+  --tblr-btn-active-border-color: transparent;
+  --tblr-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
+  --tblr-btn-disabled-color: var(--tblr-twitter);
+  --tblr-btn-disabled-bg: transparent;
+  --tblr-btn-disabled-border-color: transparent;
+  --tblr-gradient: none;
+  --tblr-btn-box-shadow: none;
+}
+
+.btn-ghost-linkedin {
+  --tblr-btn-color: var(--tblr-linkedin);
+  --tblr-btn-bg: transparent;
+  --tblr-btn-border-color: transparent;
+  --tblr-btn-hover-color: var(--tblr-linkedin-fg);
+  --tblr-btn-hover-bg: var(--tblr-linkedin);
+  --tblr-btn-hover-border-color: var(--tblr-linkedin);
+  --tblr-btn-active-color: var(--tblr-linkedin-fg);
+  --tblr-btn-active-bg: var(--tblr-linkedin);
+  --tblr-btn-active-border-color: transparent;
+  --tblr-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
+  --tblr-btn-disabled-color: var(--tblr-linkedin);
+  --tblr-btn-disabled-bg: transparent;
+  --tblr-btn-disabled-border-color: transparent;
+  --tblr-gradient: none;
+  --tblr-btn-box-shadow: none;
+}
+
+.btn-ghost-google {
+  --tblr-btn-color: var(--tblr-google);
+  --tblr-btn-bg: transparent;
+  --tblr-btn-border-color: transparent;
+  --tblr-btn-hover-color: var(--tblr-google-fg);
+  --tblr-btn-hover-bg: var(--tblr-google);
+  --tblr-btn-hover-border-color: var(--tblr-google);
+  --tblr-btn-active-color: var(--tblr-google-fg);
+  --tblr-btn-active-bg: var(--tblr-google);
+  --tblr-btn-active-border-color: transparent;
+  --tblr-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
+  --tblr-btn-disabled-color: var(--tblr-google);
+  --tblr-btn-disabled-bg: transparent;
+  --tblr-btn-disabled-border-color: transparent;
+  --tblr-gradient: none;
+  --tblr-btn-box-shadow: none;
+}
+
+.btn-ghost-youtube {
+  --tblr-btn-color: var(--tblr-youtube);
+  --tblr-btn-bg: transparent;
+  --tblr-btn-border-color: transparent;
+  --tblr-btn-hover-color: var(--tblr-youtube-fg);
+  --tblr-btn-hover-bg: var(--tblr-youtube);
+  --tblr-btn-hover-border-color: var(--tblr-youtube);
+  --tblr-btn-active-color: var(--tblr-youtube-fg);
+  --tblr-btn-active-bg: var(--tblr-youtube);
+  --tblr-btn-active-border-color: transparent;
+  --tblr-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
+  --tblr-btn-disabled-color: var(--tblr-youtube);
+  --tblr-btn-disabled-bg: transparent;
+  --tblr-btn-disabled-border-color: transparent;
+  --tblr-gradient: none;
+  --tblr-btn-box-shadow: none;
+}
+
+.btn-ghost-vimeo {
+  --tblr-btn-color: var(--tblr-vimeo);
+  --tblr-btn-bg: transparent;
+  --tblr-btn-border-color: transparent;
+  --tblr-btn-hover-color: var(--tblr-vimeo-fg);
+  --tblr-btn-hover-bg: var(--tblr-vimeo);
+  --tblr-btn-hover-border-color: var(--tblr-vimeo);
+  --tblr-btn-active-color: var(--tblr-vimeo-fg);
+  --tblr-btn-active-bg: var(--tblr-vimeo);
+  --tblr-btn-active-border-color: transparent;
+  --tblr-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
+  --tblr-btn-disabled-color: var(--tblr-vimeo);
+  --tblr-btn-disabled-bg: transparent;
+  --tblr-btn-disabled-border-color: transparent;
+  --tblr-gradient: none;
+  --tblr-btn-box-shadow: none;
+}
+
+.btn-ghost-dribbble {
+  --tblr-btn-color: var(--tblr-dribbble);
+  --tblr-btn-bg: transparent;
+  --tblr-btn-border-color: transparent;
+  --tblr-btn-hover-color: var(--tblr-dribbble-fg);
+  --tblr-btn-hover-bg: var(--tblr-dribbble);
+  --tblr-btn-hover-border-color: var(--tblr-dribbble);
+  --tblr-btn-active-color: var(--tblr-dribbble-fg);
+  --tblr-btn-active-bg: var(--tblr-dribbble);
+  --tblr-btn-active-border-color: transparent;
+  --tblr-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
+  --tblr-btn-disabled-color: var(--tblr-dribbble);
+  --tblr-btn-disabled-bg: transparent;
+  --tblr-btn-disabled-border-color: transparent;
+  --tblr-gradient: none;
+  --tblr-btn-box-shadow: none;
+}
+
+.btn-ghost-github {
+  --tblr-btn-color: var(--tblr-github);
+  --tblr-btn-bg: transparent;
+  --tblr-btn-border-color: transparent;
+  --tblr-btn-hover-color: var(--tblr-github-fg);
+  --tblr-btn-hover-bg: var(--tblr-github);
+  --tblr-btn-hover-border-color: var(--tblr-github);
+  --tblr-btn-active-color: var(--tblr-github-fg);
+  --tblr-btn-active-bg: var(--tblr-github);
+  --tblr-btn-active-border-color: transparent;
+  --tblr-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
+  --tblr-btn-disabled-color: var(--tblr-github);
+  --tblr-btn-disabled-bg: transparent;
+  --tblr-btn-disabled-border-color: transparent;
+  --tblr-gradient: none;
+  --tblr-btn-box-shadow: none;
+}
+
+.btn-ghost-instagram {
+  --tblr-btn-color: var(--tblr-instagram);
+  --tblr-btn-bg: transparent;
+  --tblr-btn-border-color: transparent;
+  --tblr-btn-hover-color: var(--tblr-instagram-fg);
+  --tblr-btn-hover-bg: var(--tblr-instagram);
+  --tblr-btn-hover-border-color: var(--tblr-instagram);
+  --tblr-btn-active-color: var(--tblr-instagram-fg);
+  --tblr-btn-active-bg: var(--tblr-instagram);
+  --tblr-btn-active-border-color: transparent;
+  --tblr-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
+  --tblr-btn-disabled-color: var(--tblr-instagram);
+  --tblr-btn-disabled-bg: transparent;
+  --tblr-btn-disabled-border-color: transparent;
+  --tblr-gradient: none;
+  --tblr-btn-box-shadow: none;
+}
+
+.btn-ghost-pinterest {
+  --tblr-btn-color: var(--tblr-pinterest);
+  --tblr-btn-bg: transparent;
+  --tblr-btn-border-color: transparent;
+  --tblr-btn-hover-color: var(--tblr-pinterest-fg);
+  --tblr-btn-hover-bg: var(--tblr-pinterest);
+  --tblr-btn-hover-border-color: var(--tblr-pinterest);
+  --tblr-btn-active-color: var(--tblr-pinterest-fg);
+  --tblr-btn-active-bg: var(--tblr-pinterest);
+  --tblr-btn-active-border-color: transparent;
+  --tblr-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
+  --tblr-btn-disabled-color: var(--tblr-pinterest);
+  --tblr-btn-disabled-bg: transparent;
+  --tblr-btn-disabled-border-color: transparent;
+  --tblr-gradient: none;
+  --tblr-btn-box-shadow: none;
+}
+
+.btn-ghost-vk {
+  --tblr-btn-color: var(--tblr-vk);
+  --tblr-btn-bg: transparent;
+  --tblr-btn-border-color: transparent;
+  --tblr-btn-hover-color: var(--tblr-vk-fg);
+  --tblr-btn-hover-bg: var(--tblr-vk);
+  --tblr-btn-hover-border-color: var(--tblr-vk);
+  --tblr-btn-active-color: var(--tblr-vk-fg);
+  --tblr-btn-active-bg: var(--tblr-vk);
+  --tblr-btn-active-border-color: transparent;
+  --tblr-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
+  --tblr-btn-disabled-color: var(--tblr-vk);
+  --tblr-btn-disabled-bg: transparent;
+  --tblr-btn-disabled-border-color: transparent;
+  --tblr-gradient: none;
+  --tblr-btn-box-shadow: none;
+}
+
+.btn-ghost-rss {
+  --tblr-btn-color: var(--tblr-rss);
+  --tblr-btn-bg: transparent;
+  --tblr-btn-border-color: transparent;
+  --tblr-btn-hover-color: var(--tblr-rss-fg);
+  --tblr-btn-hover-bg: var(--tblr-rss);
+  --tblr-btn-hover-border-color: var(--tblr-rss);
+  --tblr-btn-active-color: var(--tblr-rss-fg);
+  --tblr-btn-active-bg: var(--tblr-rss);
+  --tblr-btn-active-border-color: transparent;
+  --tblr-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
+  --tblr-btn-disabled-color: var(--tblr-rss);
+  --tblr-btn-disabled-bg: transparent;
+  --tblr-btn-disabled-border-color: transparent;
+  --tblr-gradient: none;
+  --tblr-btn-box-shadow: none;
+}
+
+.btn-ghost-flickr {
+  --tblr-btn-color: var(--tblr-flickr);
+  --tblr-btn-bg: transparent;
+  --tblr-btn-border-color: transparent;
+  --tblr-btn-hover-color: var(--tblr-flickr-fg);
+  --tblr-btn-hover-bg: var(--tblr-flickr);
+  --tblr-btn-hover-border-color: var(--tblr-flickr);
+  --tblr-btn-active-color: var(--tblr-flickr-fg);
+  --tblr-btn-active-bg: var(--tblr-flickr);
+  --tblr-btn-active-border-color: transparent;
+  --tblr-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
+  --tblr-btn-disabled-color: var(--tblr-flickr);
+  --tblr-btn-disabled-bg: transparent;
+  --tblr-btn-disabled-border-color: transparent;
+  --tblr-gradient: none;
+  --tblr-btn-box-shadow: none;
+}
+
+.btn-ghost-bitbucket {
+  --tblr-btn-color: var(--tblr-bitbucket);
+  --tblr-btn-bg: transparent;
+  --tblr-btn-border-color: transparent;
+  --tblr-btn-hover-color: var(--tblr-bitbucket-fg);
+  --tblr-btn-hover-bg: var(--tblr-bitbucket);
+  --tblr-btn-hover-border-color: var(--tblr-bitbucket);
+  --tblr-btn-active-color: var(--tblr-bitbucket-fg);
+  --tblr-btn-active-bg: var(--tblr-bitbucket);
+  --tblr-btn-active-border-color: transparent;
+  --tblr-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
+  --tblr-btn-disabled-color: var(--tblr-bitbucket);
+  --tblr-btn-disabled-bg: transparent;
+  --tblr-btn-disabled-border-color: transparent;
+  --tblr-gradient: none;
+  --tblr-btn-box-shadow: none;
+}
+
+.btn-ghost-tabler {
+  --tblr-btn-color: var(--tblr-tabler);
+  --tblr-btn-bg: transparent;
+  --tblr-btn-border-color: transparent;
+  --tblr-btn-hover-color: var(--tblr-tabler-fg);
+  --tblr-btn-hover-bg: var(--tblr-tabler);
+  --tblr-btn-hover-border-color: var(--tblr-tabler);
+  --tblr-btn-active-color: var(--tblr-tabler-fg);
+  --tblr-btn-active-bg: var(--tblr-tabler);
+  --tblr-btn-active-border-color: transparent;
+  --tblr-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
+  --tblr-btn-disabled-color: var(--tblr-tabler);
+  --tblr-btn-disabled-bg: transparent;
+  --tblr-btn-disabled-border-color: transparent;
+  --tblr-gradient: none;
+  --tblr-btn-box-shadow: none;
+}
+
+.btn-sm, .btn-group-sm > .btn {
+  --tblr-btn-line-height: 1.5;
+  --tblr-btn-icon-size: .75rem;
+}
+
+.btn-lg, .btn-group-lg > .btn {
+  --tblr-btn-line-height: 1.5;
+  --tblr-btn-icon-size: 2rem;
+}
+
+.btn-pill {
+  padding-right: 1.5em;
+  padding-left: 1.5em;
+  border-radius: 10rem;
+}
+.btn-pill[class*=btn-icon] {
+  padding: 0.375rem 15px;
+}
+
+.btn-square {
+  border-radius: 0;
+}
+
+.btn-icon {
+  min-width: calc(var(--tblr-btn-line-height) * var(--tblr-btn-font-size) + var(--tblr-btn-padding-y) * 2 + var(--tblr-btn-border-width) * 2);
+  min-height: calc(var(--tblr-btn-line-height) * var(--tblr-btn-font-size) + var(--tblr-btn-padding-y) * 2 + var(--tblr-btn-border-width) * 2);
+  padding-left: 0;
+  padding-right: 0;
+}
+.btn-icon .icon {
+  margin: calc(-1 * var(--tblr-btn-padding-x));
+}
+
+.btn-list {
+  --tblr-list-gap: 0.5rem;
+  display: flex;
+  flex-wrap: wrap;
+  gap: var(--tblr-list-gap);
+}
+
+.btn-floating {
+  position: fixed;
+  z-index: 1030;
+  bottom: 1.5rem;
+  right: 1.5rem;
+  border-radius: 100rem;
+}
+
+.btn-loading {
+  position: relative;
+  color: transparent !important;
+  text-shadow: none !important;
+  pointer-events: none;
+}
+.btn-loading > * {
+  opacity: 0;
+}
+.btn-loading:after {
+  content: "";
+  display: inline-block;
+  vertical-align: text-bottom;
+  border: 2px var(--tblr-border-style) currentColor;
+  border-right-color: transparent;
+  border-radius: 100rem;
+  color: var(--tblr-btn-color);
+  position: absolute;
+  width: var(--tblr-btn-icon-size);
+  height: var(--tblr-btn-icon-size);
+  left: calc(50% - var(--tblr-btn-icon-size) / 2);
+  top: calc(50% - var(--tblr-btn-icon-size) / 2);
+  animation: spinner-border 0.75s linear infinite;
+}
+
+.btn-action {
+  padding: 0;
+  border: 0;
+  color: var(--tblr-secondary);
+  display: inline-flex;
+  width: 2rem;
+  height: 2rem;
+  align-items: center;
+  justify-content: center;
+  border-radius: var(--tblr-border-radius);
+  background: transparent;
+}
+.btn-action:after {
+  content: none;
+}
+.btn-action:focus {
+  outline: none;
+  box-shadow: none;
+}
+.btn-action:hover, .btn-action.show {
+  color: var(--tblr-body-color);
+  background: var(--tblr-active-bg);
+}
+.btn-action.show {
+  color: var(--tblr-primary);
+}
+.btn-action .icon {
+  margin: 0;
+  width: 1.25rem;
+  height: 1.25rem;
+  font-size: 1.25rem;
+  stroke-width: 1;
+}
+
+.btn-actions {
+  display: flex;
+}
+
+.btn-group,
+.btn-group-vertical {
+  box-shadow: var(--tblr-box-shadow-input);
+}
+.btn-group > .btn-check:checked + .btn,
+.btn-group > .btn:active,
+.btn-group > .btn.active,
+.btn-group-vertical > .btn-check:checked + .btn,
+.btn-group-vertical > .btn:active,
+.btn-group-vertical > .btn.active {
+  z-index: 5;
+}
+.btn-group > .btn-check:focus + .btn,
+.btn-group > .btn:hover,
+.btn-group > .btn:focus,
+.btn-group-vertical > .btn-check:focus + .btn,
+.btn-group-vertical > .btn:hover,
+.btn-group-vertical > .btn:focus {
+  z-index: 1;
+}
+
+.calendar {
+  display: block;
+  font-size: 0.765625rem;
+  border: var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color);
+  border-radius: var(--tblr-border-radius);
+}
+
+.calendar-nav {
+  display: flex;
+  align-items: center;
+}
+
+.calendar-title {
+  flex: 1;
+  text-align: center;
+}
+
+.calendar-body,
+.calendar-header {
+  display: flex;
+  flex-wrap: wrap;
+  justify-content: flex-start;
+  padding: 0.5rem 0;
+}
+
+.calendar-header {
+  color: var(--tblr-secondary);
+}
+
+.calendar-date {
+  flex: 0 0 14.2857142857%;
+  max-width: 14.2857142857%;
+  padding: 0.2rem;
+  text-align: center;
+  border: 0;
+}
+.calendar-date.prev-month, .calendar-date.next-month {
+  opacity: 0.25;
+}
+.calendar-date .date-item {
+  position: relative;
+  display: inline-block;
+  width: 1.4rem;
+  height: 1.4rem;
+  line-height: 1.4rem;
+  color: #66758c;
+  text-align: center;
+  text-decoration: none;
+  white-space: nowrap;
+  vertical-align: middle;
+  cursor: pointer;
+  background: 0 0;
+  border: var(--tblr-border-width) var(--tblr-border-style) transparent;
+  border-radius: 100rem;
+  outline: 0;
+  transition: background 0.3s, border 0.3s, box-shadow 0.32s, color 0.3s;
+}
+@media (prefers-reduced-motion: reduce) {
+  .calendar-date .date-item {
+    transition: none;
+  }
+}
+.calendar-date .date-item:hover {
+  color: var(--tblr-primary);
+  text-decoration: none;
+  background: #fefeff;
+  border-color: var(--tblr-border-color);
+}
+.calendar-date .date-today {
+  color: var(--tblr-primary);
+  border-color: var(--tblr-border-color);
+}
+
+.calendar-range {
+  position: relative;
+}
+.calendar-range:before {
+  position: absolute;
+  top: 50%;
+  right: 0;
+  left: 0;
+  height: 1.4rem;
+  content: "";
+  background: rgba(var(--tblr-primary-rgb), 0.1);
+  transform: translateY(-50%);
+}
+.calendar-range.range-start .date-item, .calendar-range.range-end .date-item {
+  color: #ffffff;
+  background: var(--tblr-primary);
+  border-color: var(--tblr-primary);
+}
+.calendar-range.range-start:before {
+  left: 50%;
+}
+.calendar-range.range-end:before {
+  right: 50%;
+}
+
+.carousel-indicators-vertical {
+  left: auto;
+  top: 0;
+  margin: 0 1rem 0 0;
+  flex-direction: column;
+}
+.carousel-indicators-vertical [data-bs-target] {
+  margin: 3px 0 3px;
+  width: 3px;
+  height: 30px;
+  border: 0;
+  border-left: 10px var(--tblr-border-style) transparent;
+  border-right: 10px var(--tblr-border-style) transparent;
+}
+
+.carousel-indicators-dot [data-bs-target] {
+  width: 0.5rem;
+  height: 0.5rem;
+  border-radius: 100rem;
+  border: 10px var(--tblr-border-style) transparent;
+  margin: 0;
+}
+
+.carousel-indicators-thumb [data-bs-target] {
+  width: 2rem;
+  height: auto;
+  background: no-repeat center/cover;
+  border: 0;
+  border-radius: var(--tblr-border-radius);
+  box-shadow: rgba(var(--tblr-body-color-rgb), 0.04) 0 2px 4px 0;
+  margin: 0 3px;
+  opacity: 0.75;
+}
+@media (min-width: 992px) {
+  .carousel-indicators-thumb [data-bs-target] {
+    width: 4rem;
+  }
+}
+.carousel-indicators-thumb [data-bs-target]:before {
+  content: "";
+  padding-top: var(--tblr-aspect-ratio, 100%);
+  display: block;
+}
+.carousel-indicators-thumb.carousel-indicators-vertical [data-bs-target] {
+  margin: 3px 0;
+}
+
+.carousel-caption-background {
+  background: red;
+  position: absolute;
+  left: 0;
+  right: 0;
+  bottom: 0;
+  height: 90%;
+  background: linear-gradient(0deg, rgba(24, 36, 51, 0.9), rgba(24, 36, 51, 0));
+}
+
+.card {
+  transition: transform 0.3s ease-out, opacity 0.3s ease-out, box-shadow 0.3s ease-out;
+}
+@media (prefers-reduced-motion: reduce) {
+  .card {
+    transition: none;
+  }
+}
+@media print {
+  .card {
+    border: none;
+    box-shadow: none;
+  }
+}
+a.card {
+  color: inherit;
+}
+a.card:hover {
+  text-decoration: none;
+  box-shadow: rgba(var(--tblr-body-color-rgb), 0.16) 0 2px 16px 0;
+}
+
+.card .card {
+  box-shadow: none;
+}
+
+.card-borderless,
+.card-borderless .card-header,
+.card-borderless .card-footer {
+  border-color: transparent;
+}
+
+.card-stamp {
+  --tblr-stamp-size: 7rem;
+  position: absolute;
+  top: 0;
+  right: 0;
+  width: calc(var(--tblr-stamp-size) * 1);
+  height: calc(var(--tblr-stamp-size) * 1);
+  max-height: 100%;
+  border-top-right-radius: 4px;
+  opacity: 0.2;
+  overflow: hidden;
+  pointer-events: none;
+}
+
+.card-stamp-lg {
+  --tblr-stamp-size: 13rem;
+}
+
+.card-stamp-icon {
+  background: var(--tblr-secondary);
+  color: var(--tblr-card-bg, var(--tblr-bg-surface));
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  border-radius: 100rem;
+  width: calc(var(--tblr-stamp-size) * 1);
+  height: calc(var(--tblr-stamp-size) * 1);
+  position: relative;
+  top: calc(var(--tblr-stamp-size) * -0.25);
+  right: calc(var(--tblr-stamp-size) * -0.25);
+  font-size: calc(var(--tblr-stamp-size) * 0.75);
+  transform: rotate(10deg);
+}
+.card-stamp-icon .icon {
+  stroke-width: 2;
+  width: calc(var(--tblr-stamp-size) * 0.75);
+  height: calc(var(--tblr-stamp-size) * 0.75);
+}
+
+.card-img,
+.card-img-start {
+  border-top-left-radius: calc(var(--tblr-border-radius) - (var(--tblr-border-width)));
+  border-bottom-left-radius: calc(var(--tblr-border-radius) - (var(--tblr-border-width)));
+}
+
+.card-img,
+.card-img-end {
+  border-top-right-radius: calc(var(--tblr-border-radius) - (var(--tblr-border-width)));
+  border-bottom-right-radius: calc(var(--tblr-border-radius) - (var(--tblr-border-width)));
+}
+
+.card-img-overlay {
+  display: flex;
+  flex-direction: column;
+  justify-content: flex-end;
+}
+
+.card-img-overlay-dark {
+  background-image: linear-gradient(180deg, rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 0.6) 100%);
+}
+
+.card-inactive {
+  pointer-events: none;
+  box-shadow: none;
+}
+.card-inactive .card-body {
+  opacity: 0.64;
+}
+
+.card-active {
+  --tblr-card-border-color: var(--tblr-primary);
+  --tblr-card-bg: var(--tblr-active-bg);
+}
+
+.card-btn {
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  padding: 1.25rem 1.25rem;
+  text-align: center;
+  transition: background 0.3s;
+  border-top: var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color);
+  flex: 1;
+  color: inherit;
+  font-weight: var(--tblr-font-weight-medium);
+}
+@media (prefers-reduced-motion: reduce) {
+  .card-btn {
+    transition: none;
+  }
+}
+.card-btn:hover {
+  text-decoration: none;
+  background: rgba(var(--tblr-primary-rgb), 0.04);
+}
+.card-btn + .card-btn {
+  border-left: var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color);
+}
+
+/**
+Stacked card
+ */
+.card-stacked {
+  --tblr-card-stacked-offset: .25rem;
+  position: relative;
+}
+.card-stacked:after {
+  position: absolute;
+  top: calc(-1 * var(--tblr-card-stacked-offset));
+  right: var(--tblr-card-stacked-offset);
+  left: var(--tblr-card-stacked-offset);
+  height: var(--tblr-card-stacked-offset);
+  content: "";
+  background: var(--tblr-card-bg, var(--tblr-bg-surface));
+  border: var(--tblr-border-width) var(--tblr-border-style) var(--tblr-card-border-color);
+  border-radius: var(--tblr-card-border-radius) var(--tblr-card-border-radius) 0 0;
+}
+
+.card-cover {
+  position: relative;
+  padding: 1.25rem 1.25rem;
+  background: #666666 no-repeat center/cover;
+}
+.card-cover:before {
+  position: absolute;
+  top: 0;
+  right: 0;
+  bottom: 0;
+  left: 0;
+  content: "";
+  background: rgba(24, 36, 51, 0.48);
+}
+.card-cover:first-child, .card-cover:first-child:before {
+  border-radius: 4px 4px 0 0;
+}
+
+.card-cover-blurred:before {
+  -webkit-backdrop-filter: blur(2px);
+          backdrop-filter: blur(2px);
+}
+
+.card-actions {
+  margin: -0.5rem -0.5rem -0.5rem auto;
+  padding-left: 0.5rem;
+}
+.card-actions a {
+  text-decoration: none;
+}
+
+.card-header {
+  color: inherit;
+  display: flex;
+  align-items: center;
+  background: transparent;
+}
+.card-header:first-child {
+  border-radius: var(--tblr-card-border-radius) var(--tblr-card-border-radius) 0 0;
+}
+
+.card-header-light {
+  border-bottom-color: transparent;
+  background: var(--tblr-bg-surface-tertiary);
+}
+
+.card-header-tabs {
+  background: var(--tblr-bg-surface-tertiary);
+  flex: 1;
+  margin: calc(var(--tblr-card-cap-padding-y) * -1) calc(var(--tblr-card-cap-padding-x) * -1) calc(var(--tblr-card-cap-padding-y) * -1);
+  padding: calc(var(--tblr-card-cap-padding-y) * 0.5) calc(var(--tblr-card-cap-padding-x) * 0.5) 0;
+}
+
+.card-header-pills {
+  flex: 1;
+  margin-top: -0.5rem;
+  margin-bottom: -0.5rem;
+}
+
+.card-rotate-left {
+  transform: rotate(-1.5deg);
+}
+
+.card-rotate-right {
+  transform: rotate(1.5deg);
+}
+
+.card-link {
+  color: inherit;
+}
+.card-link:hover {
+  color: inherit;
+  text-decoration: none;
+  box-shadow: 0 1px 6px 0 rgba(0, 0, 0, 0.08);
+}
+
+.card-link-rotate:hover {
+  transform: rotate(1.5deg);
+  opacity: 1;
+}
+
+.card-link-pop:hover {
+  transform: translateY(-2px);
+  opacity: 1;
+}
+
+.card-footer {
+  margin-top: auto;
+}
+.card-footer:last-child {
+  border-radius: 0 0 var(--tblr-card-border-radius) var(--tblr-card-border-radius);
+}
+
+.card-footer-transparent {
+  background: transparent;
+  border-color: transparent;
+  padding-top: 0;
+}
+
+.card-footer-borderless {
+  border-top: none;
+}
+
+.card-progress {
+  height: 0.25rem;
+}
+.card-progress:last-child {
+  border-radius: 0 0 2px 2px;
+}
+.card-progress:first-child {
+  border-radius: 2px 2px 0 0;
+}
+
+.card-meta {
+  color: var(--tblr-secondary);
+}
+
+.card-title {
+  display: block;
+  margin: 0 0 1rem;
+  font-size: 1rem;
+  font-weight: var(--tblr-font-weight-medium);
+  color: inherit;
+  line-height: 1.5rem;
+}
+a.card-title:hover {
+  color: inherit;
+}
+
+.card-header .card-title {
+  margin: 0;
+}
+
+.card-subtitle {
+  margin-bottom: 1.25rem;
+  color: var(--tblr-secondary);
+  font-weight: normal;
+}
+.card-header .card-subtitle {
+  margin: 0;
+}
+.card-title .card-subtitle {
+  margin: 0 0 0 0.25rem;
+  font-size: 0.875rem;
+}
+
+.card-body {
+  position: relative;
+}
+.card-body > :last-child {
+  margin-bottom: 0;
+}
+.card-sm > .card-body {
+  padding: 1rem;
+}
+@media (min-width: 768px) {
+  .card-md > .card-body {
+    padding: 2.5rem;
+  }
+}
+@media (min-width: 768px) {
+  .card-lg > .card-body {
+    padding: 2rem;
+  }
+}
+@media (min-width: 992px) {
+  .card-lg > .card-body {
+    padding: 4rem;
+  }
+}
+@media print {
+  .card-body {
+    padding: 0;
+  }
+}
+.card-body + .card-body {
+  border-top: var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color);
+}
+
+.card-body-scrollable {
+  overflow: auto;
+}
+
+/**
+Card optinos
+ */
+.card-options {
+  top: 1.5rem;
+  right: 0.75rem;
+  display: flex;
+  margin-left: auto;
+}
+
+.card-options-link {
+  display: inline-block;
+  min-width: 1rem;
+  margin-left: 0.25rem;
+  color: var(--tblr-secondary);
+}
+
+/**
+Card status
+ */
+.card-status-top {
+  position: absolute;
+  top: 0;
+  right: 0;
+  left: 0;
+  height: 2px;
+  border-radius: var(--tblr-card-border-radius) var(--tblr-card-border-radius) 0 0;
+}
+
+.card-status-start {
+  position: absolute;
+  right: auto;
+  bottom: 0;
+  width: 2px;
+  height: 100%;
+  border-radius: var(--tblr-card-border-radius) 0 0 var(--tblr-card-border-radius);
+}
+
+.card-status-bottom {
+  position: absolute;
+  top: initial;
+  bottom: 0;
+  width: 100%;
+  height: 2px;
+  border-radius: 0 0 var(--tblr-card-border-radius) var(--tblr-card-border-radius);
+}
+
+/**
+Card table
+ */
+.card-table {
+  margin-bottom: 0 !important;
+}
+.card-table tr td:first-child,
+.card-table tr th:first-child {
+  padding-left: 1.25rem;
+  border-left: 0;
+}
+.card-table tr td:last-child,
+.card-table tr th:last-child {
+  padding-right: 1.25rem;
+  border-right: 0;
+}
+.card-table thead tr:first-child,
+.card-table tbody tr:first-child,
+.card-table tfoot tr:first-child {
+  border-top: 0;
+}
+.card-table thead tr:first-child td,
+.card-table thead tr:first-child th,
+.card-table tbody tr:first-child td,
+.card-table tbody tr:first-child th,
+.card-table tfoot tr:first-child td,
+.card-table tfoot tr:first-child th {
+  border-top: 0;
+}
+.card-body + .card-table {
+  border-top: var(--tblr-border-width) var(--tblr-border-style) var(--tblr-table-border-color);
+}
+
+/*
+Card code
+ */
+.card-code {
+  padding: 0;
+}
+.card-code .highlight {
+  margin: 0;
+  border: 0;
+}
+.card-code pre {
+  margin: 0 !important;
+  border: 0 !important;
+}
+
+/*
+Card chart
+ */
+.card-chart {
+  position: relative;
+  z-index: 1;
+  height: 3.5rem;
+}
+
+/**
+Card avatar
+ */
+.card-avatar {
+  margin-left: auto;
+  margin-right: auto;
+  box-shadow: 0 0 0 0.25rem var(--tblr-card-bg, var(--tblr-bg-surface));
+  margin-top: calc(-1 * var(--tblr-avatar-size) * 0.5);
+}
+
+/*
+Card list group
+ */
+.card-body + .card-list-group {
+  border-top: var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color);
+}
+.card-list-group .list-group-item {
+  padding-right: 1.25rem;
+  padding-left: 1.25rem;
+  border-right: 0;
+  border-left: 0;
+  border-radius: 0;
+}
+.card-list-group .list-group-item:last-child {
+  border-bottom: 0;
+}
+.card-list-group .list-group-item:first-child {
+  border-top: 0;
+}
+
+.card-tabs .nav-tabs {
+  position: relative;
+  z-index: 1000;
+  border-bottom: 0;
+}
+.card-tabs .nav-tabs .nav-link {
+  background: var(--tblr-bg-surface-tertiary);
+  border: var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent);
+}
+.card-tabs .nav-tabs .nav-link.active, .card-tabs .nav-tabs .nav-link:active, .card-tabs .nav-tabs .nav-link:hover {
+  border-color: var(--tblr-border-color-translucent);
+  color: var(--tblr-body-color);
+}
+.card-tabs .nav-tabs .nav-link.active {
+  color: inherit;
+  background: var(--tblr-card-bg, var(--tblr-bg-surface));
+  border-bottom-color: transparent;
+}
+.card-tabs .nav-tabs .nav-item:not(:first-child) .nav-link {
+  border-top-left-radius: 0;
+}
+.card-tabs .nav-tabs .nav-item:not(:last-child) .nav-link {
+  border-top-right-radius: 0;
+}
+.card-tabs .nav-tabs .nav-item + .nav-item {
+  margin-left: calc(-1 * var(--tblr-border-width));
+}
+.card-tabs .nav-tabs-bottom {
+  margin-bottom: 0;
+}
+.card-tabs .nav-tabs-bottom .nav-link {
+  margin-bottom: 0;
+}
+.card-tabs .nav-tabs-bottom .nav-link.active {
+  border-top-color: transparent;
+}
+.card-tabs .nav-tabs-bottom .nav-item {
+  margin-top: calc(-1 * var(--tblr-border-width));
+  margin-bottom: 0;
+}
+.card-tabs .nav-tabs-bottom .nav-item .nav-link {
+  border-bottom: var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent);
+  border-radius: 0 0 var(--tblr-border-radius) var(--tblr-border-radius);
+}
+.card-tabs .nav-tabs-bottom .nav-item:not(:first-child) .nav-link {
+  border-bottom-left-radius: 0;
+}
+.card-tabs .nav-tabs-bottom .nav-item:not(:last-child) .nav-link {
+  border-bottom-right-radius: 0;
+}
+.card-tabs .card {
+  border-bottom-left-radius: 0;
+}
+.card-tabs .nav-tabs + .tab-content .card {
+  border-bottom-left-radius: var(--tblr-card-border-radius);
+  border-top-left-radius: 0;
+}
+
+/**
+Card note
+*/
+.card-note {
+  --tblr-card-bg: #fff7dd;
+  --tblr-card-border-color: #fff1c9;
+}
+
+.btn-close {
+  cursor: pointer;
+}
+.btn-close:focus {
+  outline: none;
+}
+
+.dropdown-menu {
+  -webkit-user-select: none;
+     -moz-user-select: none;
+      -ms-user-select: none;
+          user-select: none;
+}
+.dropdown-menu.card {
+  padding: 0;
+  min-width: 25rem;
+  display: none;
+}
+.dropdown-menu.card.show {
+  display: flex;
+}
+
+.dropdown-item {
+  min-width: 11rem;
+  display: flex;
+  align-items: center;
+  margin: 0;
+  line-height: 1.4285714286;
+}
+
+.dropdown-item-icon {
+  width: 1.25rem !important;
+  height: 1.25rem !important;
+  margin-right: 0.5rem;
+  color: var(--tblr-secondary);
+  opacity: 0.7;
+  text-align: center;
+}
+
+.dropdown-item-indicator {
+  margin-right: 0.5rem;
+  margin-left: -0.25rem;
+  height: 1.25rem;
+  display: inline-flex;
+  line-height: 1;
+  vertical-align: bottom;
+  align-items: center;
+}
+
+.dropdown-header {
+  font-size: 0.625rem;
+  font-weight: var(--tblr-font-weight-bold);
+  text-transform: uppercase;
+  letter-spacing: 0.04em;
+  line-height: 1rem;
+  color: var(--tblr-secondary);
+  padding-bottom: 0.25rem;
+  pointer-events: none;
+}
+
+.dropdown-menu-scrollable {
+  height: auto;
+  max-height: 13rem;
+  overflow-x: hidden;
+}
+
+.dropdown-menu-column {
+  min-width: 11rem;
+}
+.dropdown-menu-column .dropdown-item {
+  min-width: 0;
+}
+
+.dropdown-menu-columns {
+  display: flex;
+  flex: 0 0.25rem;
+}
+
+.dropdown-menu-arrow:before {
+  content: "";
+  position: absolute;
+  top: -0.25rem;
+  left: 0.75rem;
+  display: block;
+  background: inherit;
+  width: 14px;
+  height: 14px;
+  /*rtl:ignore*/
+  transform: rotate(45deg);
+  transform-origin: center;
+  border: 1px solid;
+  border-color: inherit;
+  z-index: -1;
+  clip: rect(0px, 9px, 9px, 0px);
+}
+.dropdown-menu-arrow.dropdown-menu-end:before {
+  right: 0.75rem;
+  left: auto;
+}
+
+.dropend > .dropdown-menu {
+  margin-top: calc(-0.25rem - 1px);
+  margin-left: -0.25rem;
+}
+.dropend .dropdown-toggle:after {
+  margin-left: auto;
+}
+
+.dropdown-menu-card {
+  padding: 0;
+}
+.dropdown-menu-card > .card {
+  margin: 0;
+  border: 0;
+  box-shadow: none;
+}
+
+.datagrid {
+  --tblr-datagrid-padding: 1.5rem;
+  --tblr-datagrid-item-width: 15rem;
+  display: grid;
+  grid-gap: var(--tblr-datagrid-padding);
+  grid-template-columns: repeat(auto-fit, minmax(var(--tblr-datagrid-item-width), 1fr));
+}
+
+.datagrid-title {
+  font-size: 0.625rem;
+  font-weight: var(--tblr-font-weight-bold);
+  text-transform: uppercase;
+  letter-spacing: 0.04em;
+  line-height: 1rem;
+  color: var(--tblr-secondary);
+  margin-bottom: 0.25rem;
+}
+
+.empty {
+  display: flex;
+  flex-direction: column;
+  align-items: center;
+  justify-content: center;
+  height: 100%;
+  padding: 1rem;
+  text-align: center;
+}
+@media (min-width: 768px) {
+  .empty {
+    padding: 3rem;
+  }
+}
+
+.empty-icon {
+  margin: 0 0 1rem;
+  width: 3rem;
+  height: 3rem;
+  line-height: 1;
+  color: var(--tblr-secondary);
+}
+.empty-icon svg {
+  width: 100%;
+  height: 100%;
+}
+
+.empty-img {
+  margin: 0 0 2rem;
+  line-height: 1;
+}
+.empty-img img {
+  height: 8rem;
+  width: auto;
+}
+
+.empty-header {
+  margin: 0 0 1rem;
+  font-size: 4rem;
+  font-weight: var(--tblr-font-weight-light);
+  line-height: 1;
+  color: var(--tblr-secondary);
+}
+
+.empty-title {
+  font-size: 1.25rem;
+  line-height: 1.75rem;
+  font-weight: var(--tblr-font-weight-bold);
+}
+
+.empty-title,
+.empty-subtitle {
+  margin: 0 0 0.5rem;
+}
+
+.empty-action {
+  margin-top: 1.5rem;
+}
+
+.empty-bordered {
+  border: var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color);
+  border-radius: var(--tblr-border-radius);
+}
+
+.row > * {
+  min-width: 0;
+}
+
+.col-separator {
+  border-left: var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color);
+}
+
+.container-slim {
+  --tblr-gutter-x: calc(var(--tblr-page-padding) * 2);
+  --tblr-gutter-y: 0;
+  width: 100%;
+  padding-right: calc(var(--tblr-gutter-x) * 0.5);
+  padding-left: calc(var(--tblr-gutter-x) * 0.5);
+  margin-right: auto;
+  margin-left: auto;
+  max-width: 16rem;
+}
+.container-tight {
+  --tblr-gutter-x: calc(var(--tblr-page-padding) * 2);
+  --tblr-gutter-y: 0;
+  width: 100%;
+  padding-right: calc(var(--tblr-gutter-x) * 0.5);
+  padding-left: calc(var(--tblr-gutter-x) * 0.5);
+  margin-right: auto;
+  margin-left: auto;
+  max-width: 30rem;
+}
+.container-narrow {
+  --tblr-gutter-x: calc(var(--tblr-page-padding) * 2);
+  --tblr-gutter-y: 0;
+  width: 100%;
+  padding-right: calc(var(--tblr-gutter-x) * 0.5);
+  padding-left: calc(var(--tblr-gutter-x) * 0.5);
+  margin-right: auto;
+  margin-left: auto;
+  max-width: 45rem;
+}
+
+.row-0 {
+  margin-right: 0;
+  margin-left: 0;
+}
+.row-0 > .col,
+.row-0 > [class*=col-] {
+  padding-right: 0;
+  padding-left: 0;
+}
+.row-0 .card {
+  margin-bottom: 0;
+}
+
+.row-sm {
+  margin-right: -0.375rem;
+  margin-left: -0.375rem;
+}
+.row-sm > .col,
+.row-sm > [class*=col-] {
+  padding-right: 0.375rem;
+  padding-left: 0.375rem;
+}
+.row-sm .card {
+  margin-bottom: 0.75rem;
+}
+
+.row-md {
+  margin-right: -1.5rem;
+  margin-left: -1.5rem;
+}
+.row-md > .col,
+.row-md > [class*=col-] {
+  padding-right: 1.5rem;
+  padding-left: 1.5rem;
+}
+.row-md .card {
+  margin-bottom: 3rem;
+}
+
+.row-lg {
+  margin-right: -3rem;
+  margin-left: -3rem;
+}
+.row-lg > .col,
+.row-lg > [class*=col-] {
+  padding-right: 3rem;
+  padding-left: 3rem;
+}
+.row-lg .card {
+  margin-bottom: 6rem;
+}
+
+.row-deck > .col,
+.row-deck > [class*=col-] {
+  display: flex;
+  align-items: stretch;
+}
+.row-deck > .col .card,
+.row-deck > [class*=col-] .card {
+  flex: 1 1 auto;
+}
+
+.row-cards {
+  --tblr-gutter-x: var(--tblr-page-padding);
+  --tblr-gutter-y: var(--tblr-page-padding);
+  min-width: 0;
+}
+.row-cards .row-cards {
+  flex: 1;
+}
+
+.space-y {
+  display: flex;
+  flex-direction: column;
+  gap: 1rem;
+}
+
+.space-x {
+  display: flex;
+  gap: 1rem;
+}
+
+.space-y-0 {
+  display: flex;
+  flex-direction: column;
+  gap: 0;
+}
+
+.space-x-0 {
+  display: flex;
+  gap: 0;
+}
+
+.space-y-1 {
+  display: flex;
+  flex-direction: column;
+  gap: 0.25rem;
+}
+
+.space-x-1 {
+  display: flex;
+  gap: 0.25rem;
+}
+
+.space-y-2 {
+  display: flex;
+  flex-direction: column;
+  gap: 0.5rem;
+}
+
+.space-x-2 {
+  display: flex;
+  gap: 0.5rem;
+}
+
+.space-y-3 {
+  display: flex;
+  flex-direction: column;
+  gap: 1rem;
+}
+
+.space-x-3 {
+  display: flex;
+  gap: 1rem;
+}
+
+.space-y-4 {
+  display: flex;
+  flex-direction: column;
+  gap: 1.5rem;
+}
+
+.space-x-4 {
+  display: flex;
+  gap: 1.5rem;
+}
+
+.space-y-5 {
+  display: flex;
+  flex-direction: column;
+  gap: 2rem;
+}
+
+.space-x-5 {
+  display: flex;
+  gap: 2rem;
+}
+
+.space-y-6 {
+  display: flex;
+  flex-direction: column;
+  gap: 3rem;
+}
+
+.space-x-6 {
+  display: flex;
+  gap: 3rem;
+}
+
+.space-y-7 {
+  display: flex;
+  flex-direction: column;
+  gap: 5rem;
+}
+
+.space-x-7 {
+  display: flex;
+  gap: 5rem;
+}
+
+.space-y-8 {
+  display: flex;
+  flex-direction: column;
+  gap: 8rem;
+}
+
+.space-x-8 {
+  display: flex;
+  gap: 8rem;
+}
+
+.divide-y > :not(template) ~ :not(template) {
+  border-top: var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent) !important;
+}
+.divide-y > :not(template):not(:first-child) {
+  padding-top: 1rem !important;
+}
+.divide-y > :not(template):not(:last-child) {
+  padding-bottom: 1rem !important;
+}
+
+.divide-x > :not(template) ~ :not(template) {
+  border-left: var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent) !important;
+}
+.divide-x > :not(template):not(:first-child) {
+  padding-left: 1rem !important;
+}
+.divide-x > :not(template):not(:last-child) {
+  padding-right: 1rem !important;
+}
+
+.divide-y-0 > :not(template) ~ :not(template) {
+  border-top: var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent) !important;
+}
+.divide-y-0 > :not(template):not(:first-child) {
+  padding-top: 0 !important;
+}
+.divide-y-0 > :not(template):not(:last-child) {
+  padding-bottom: 0 !important;
+}
+
+.divide-x-0 > :not(template) ~ :not(template) {
+  border-left: var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent) !important;
+}
+.divide-x-0 > :not(template):not(:first-child) {
+  padding-left: 0 !important;
+}
+.divide-x-0 > :not(template):not(:last-child) {
+  padding-right: 0 !important;
+}
+
+.divide-y-1 > :not(template) ~ :not(template) {
+  border-top: var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent) !important;
+}
+.divide-y-1 > :not(template):not(:first-child) {
+  padding-top: 0.25rem !important;
+}
+.divide-y-1 > :not(template):not(:last-child) {
+  padding-bottom: 0.25rem !important;
+}
+
+.divide-x-1 > :not(template) ~ :not(template) {
+  border-left: var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent) !important;
+}
+.divide-x-1 > :not(template):not(:first-child) {
+  padding-left: 0.25rem !important;
+}
+.divide-x-1 > :not(template):not(:last-child) {
+  padding-right: 0.25rem !important;
+}
+
+.divide-y-2 > :not(template) ~ :not(template) {
+  border-top: var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent) !important;
+}
+.divide-y-2 > :not(template):not(:first-child) {
+  padding-top: 0.5rem !important;
+}
+.divide-y-2 > :not(template):not(:last-child) {
+  padding-bottom: 0.5rem !important;
+}
+
+.divide-x-2 > :not(template) ~ :not(template) {
+  border-left: var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent) !important;
+}
+.divide-x-2 > :not(template):not(:first-child) {
+  padding-left: 0.5rem !important;
+}
+.divide-x-2 > :not(template):not(:last-child) {
+  padding-right: 0.5rem !important;
+}
+
+.divide-y-3 > :not(template) ~ :not(template) {
+  border-top: var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent) !important;
+}
+.divide-y-3 > :not(template):not(:first-child) {
+  padding-top: 1rem !important;
+}
+.divide-y-3 > :not(template):not(:last-child) {
+  padding-bottom: 1rem !important;
+}
+
+.divide-x-3 > :not(template) ~ :not(template) {
+  border-left: var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent) !important;
+}
+.divide-x-3 > :not(template):not(:first-child) {
+  padding-left: 1rem !important;
+}
+.divide-x-3 > :not(template):not(:last-child) {
+  padding-right: 1rem !important;
+}
+
+.divide-y-4 > :not(template) ~ :not(template) {
+  border-top: var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent) !important;
+}
+.divide-y-4 > :not(template):not(:first-child) {
+  padding-top: 1.5rem !important;
+}
+.divide-y-4 > :not(template):not(:last-child) {
+  padding-bottom: 1.5rem !important;
+}
+
+.divide-x-4 > :not(template) ~ :not(template) {
+  border-left: var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent) !important;
+}
+.divide-x-4 > :not(template):not(:first-child) {
+  padding-left: 1.5rem !important;
+}
+.divide-x-4 > :not(template):not(:last-child) {
+  padding-right: 1.5rem !important;
+}
+
+.divide-y-5 > :not(template) ~ :not(template) {
+  border-top: var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent) !important;
+}
+.divide-y-5 > :not(template):not(:first-child) {
+  padding-top: 2rem !important;
+}
+.divide-y-5 > :not(template):not(:last-child) {
+  padding-bottom: 2rem !important;
+}
+
+.divide-x-5 > :not(template) ~ :not(template) {
+  border-left: var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent) !important;
+}
+.divide-x-5 > :not(template):not(:first-child) {
+  padding-left: 2rem !important;
+}
+.divide-x-5 > :not(template):not(:last-child) {
+  padding-right: 2rem !important;
+}
+
+.divide-y-6 > :not(template) ~ :not(template) {
+  border-top: var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent) !important;
+}
+.divide-y-6 > :not(template):not(:first-child) {
+  padding-top: 3rem !important;
+}
+.divide-y-6 > :not(template):not(:last-child) {
+  padding-bottom: 3rem !important;
+}
+
+.divide-x-6 > :not(template) ~ :not(template) {
+  border-left: var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent) !important;
+}
+.divide-x-6 > :not(template):not(:first-child) {
+  padding-left: 3rem !important;
+}
+.divide-x-6 > :not(template):not(:last-child) {
+  padding-right: 3rem !important;
+}
+
+.divide-y-7 > :not(template) ~ :not(template) {
+  border-top: var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent) !important;
+}
+.divide-y-7 > :not(template):not(:first-child) {
+  padding-top: 5rem !important;
+}
+.divide-y-7 > :not(template):not(:last-child) {
+  padding-bottom: 5rem !important;
+}
+
+.divide-x-7 > :not(template) ~ :not(template) {
+  border-left: var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent) !important;
+}
+.divide-x-7 > :not(template):not(:first-child) {
+  padding-left: 5rem !important;
+}
+.divide-x-7 > :not(template):not(:last-child) {
+  padding-right: 5rem !important;
+}
+
+.divide-y-8 > :not(template) ~ :not(template) {
+  border-top: var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent) !important;
+}
+.divide-y-8 > :not(template):not(:first-child) {
+  padding-top: 8rem !important;
+}
+.divide-y-8 > :not(template):not(:last-child) {
+  padding-bottom: 8rem !important;
+}
+
+.divide-x-8 > :not(template) ~ :not(template) {
+  border-left: var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent) !important;
+}
+.divide-x-8 > :not(template):not(:first-child) {
+  padding-left: 8rem !important;
+}
+.divide-x-8 > :not(template):not(:last-child) {
+  padding-right: 8rem !important;
+}
+
+.divide-y-fill {
+  display: flex;
+  flex-direction: column;
+  height: 100%;
+}
+.divide-y-fill > :not(template) {
+  flex: 1;
+  display: flex;
+  justify-content: center;
+  flex-direction: column;
+}
+
+.icon {
+  --tblr-icon-size: 1.25rem;
+  width: var(--tblr-icon-size);
+  height: var(--tblr-icon-size);
+  font-size: var(--tblr-icon-size);
+  vertical-align: bottom;
+  stroke-width: 1.5;
+}
+.icon:hover {
+  text-decoration: none;
+}
+
+.icon-inline {
+  --tblr-icon-size: 1rem;
+  vertical-align: -0.2rem;
+}
+
+.icon-filled {
+  fill: currentColor;
+}
+
+.icon-sm {
+  --tblr-icon-size: 1rem;
+  stroke-width: 1;
+}
+
+.icon-md {
+  --tblr-icon-size: 2.5rem;
+  stroke-width: 1;
+}
+
+.icon-lg {
+  --tblr-icon-size: 3.5rem;
+  stroke-width: 1;
+}
+
+.icon-pulse {
+  transition: all 0.15s ease 0s;
+  animation: pulse 2s ease infinite;
+  animation-fill-mode: both;
+}
+
+.icon-tada {
+  transition: all 0.15s ease 0s;
+  animation: tada 3s ease infinite;
+  animation-fill-mode: both;
+}
+
+.icon-rotate {
+  transition: all 0.15s ease 0s;
+  animation: rotate-360 3s linear infinite;
+  animation-fill-mode: both;
+}
+
+.img-responsive {
+  --tblr-img-responsive-ratio: 75%;
+  background: no-repeat center/cover;
+  padding-top: var(--tblr-img-responsive-ratio);
+}
+
+.img-responsive-grid {
+  padding-top: calc(var(--tblr-img-responsive-ratio) - var(--tblr-gutter-y) / 2);
+}
+
+.img-responsive-1x1 {
+  --tblr-img-responsive-ratio: 100%;
+}
+
+.img-responsive-2x1 {
+  --tblr-img-responsive-ratio: 50%;
+}
+
+.img-responsive-1x2 {
+  --tblr-img-responsive-ratio: 200%;
+}
+
+.img-responsive-3x1 {
+  --tblr-img-responsive-ratio: 33.3333333333%;
+}
+
+.img-responsive-1x3 {
+  --tblr-img-responsive-ratio: 300%;
+}
+
+.img-responsive-4x3 {
+  --tblr-img-responsive-ratio: 75%;
+}
+
+.img-responsive-3x4 {
+  --tblr-img-responsive-ratio: 133.3333333333%;
+}
+
+.img-responsive-16x9 {
+  --tblr-img-responsive-ratio: 56.25%;
+}
+
+.img-responsive-9x16 {
+  --tblr-img-responsive-ratio: 177.7777777778%;
+}
+
+.img-responsive-21x9 {
+  --tblr-img-responsive-ratio: 42.8571428571%;
+}
+
+.img-responsive-9x21 {
+  --tblr-img-responsive-ratio: 233.3333333333%;
+}
+
+textarea[cols] {
+  height: auto;
+}
+
+/**
+Form label
+ */
+.col-form-label,
+.form-label {
+  display: block;
+  font-weight: var(--tblr-font-weight-medium);
+}
+.col-form-label.required:after,
+.form-label.required:after {
+  content: "*";
+  margin-left: 0.25rem;
+  color: #d63939;
+}
+
+.form-label-description {
+  float: right;
+  font-weight: var(--tblr-font-weight-normal);
+  color: var(--tblr-secondary);
+}
+
+/**
+Form hint
+ */
+.form-hint {
+  display: block;
+  color: var(--tblr-secondary);
+}
+.form-hint:last-child {
+  margin-bottom: 0;
+}
+.form-hint + .form-control {
+  margin-top: 0.25rem;
+}
+.form-label + .form-hint {
+  margin-top: -0.25rem;
+}
+.input-group + .form-hint, .form-control + .form-hint, .form-select + .form-hint {
+  margin-top: 0.5rem;
+}
+
+/**
+Form select
+ */
+.form-select:-moz-focusring {
+  color: var(--tblr-body-color);
+}
+
+/**
+Form control
+ */
+.form-control:-webkit-autofill {
+  box-shadow: 0 0 0 1000px var(--tblr-body-bg) inset;
+  color: var(--tblr-body-color);
+  -webkit-text-fill-color: var(--tblr-body-color);
+}
+.form-control:disabled, .form-control.disabled {
+  color: var(--tblr-secondary);
+  -webkit-user-select: none;
+     -moz-user-select: none;
+      -ms-user-select: none;
+          user-select: none;
+}
+.form-control[size] {
+  width: auto;
+}
+
+.form-control-light {
+  background-color: var(--tblr-gray-100);
+  border-color: transparent;
+}
+
+.form-control-dark {
+  background-color: rgba(0, 0, 0, 0.1);
+  color: #ffffff;
+  border-color: transparent;
+}
+.form-control-dark:focus {
+  background-color: rgba(0, 0, 0, 0.1);
+  box-shadow: none;
+  border-color: rgba(255, 255, 255, 0.24);
+}
+.form-control-dark::-webkit-input-placeholder {
+  color: rgba(255, 255, 255, 0.6);
+}
+.form-control-dark:-ms-input-placeholder {
+  color: rgba(255, 255, 255, 0.6);
+}
+.form-control-dark::-ms-input-placeholder {
+  color: rgba(255, 255, 255, 0.6);
+}
+.form-control-dark::placeholder {
+  color: rgba(255, 255, 255, 0.6);
+}
+
+.form-control-rounded {
+  border-radius: 10rem;
+}
+
+.form-control-flush {
+  padding: 0;
+  background: none !important;
+  border-color: transparent !important;
+  resize: none;
+  box-shadow: none !important;
+  line-height: inherit;
+}
+
+.form-footer {
+  margin-top: 2rem;
+}
+
+.form-fieldset {
+  padding: 1rem;
+  margin-bottom: 1rem;
+  background: var(--tblr-body-bg);
+  border: var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color);
+  border-radius: var(--tblr-border-radius);
+}
+
+/**
+Form help
+ */
+.form-help {
+  display: inline-flex;
+  font-weight: var(--tblr-font-weight-bold);
+  align-items: center;
+  justify-content: center;
+  width: 1.125rem;
+  height: 1.125rem;
+  font-size: 0.75rem;
+  color: var(--tblr-secondary);
+  text-align: center;
+  text-decoration: none;
+  cursor: pointer;
+  -webkit-user-select: none;
+     -moz-user-select: none;
+      -ms-user-select: none;
+          user-select: none;
+  background: var(--tblr-gray-100);
+  border-radius: 100rem;
+  transition: background-color 0.3s, color 0.3s;
+}
+@media (prefers-reduced-motion: reduce) {
+  .form-help {
+    transition: none;
+  }
+}
+.form-help:hover, .form-help[aria-describedby] {
+  color: #ffffff;
+  background: var(--tblr-primary);
+}
+
+/**
+Input group
+ */
+.input-group {
+  box-shadow: var(--tblr-box-shadow-input);
+  border-radius: var(--tblr-border-radius);
+}
+.input-group .form-control,
+.input-group .btn {
+  box-shadow: none;
+}
+
+.input-group-link {
+  font-size: 0.75rem;
+}
+
+.input-group-flat:focus-within {
+  box-shadow: 0 0 0 0.25rem rgba(var(--tblr-primary-rgb), 0.25);
+  border-radius: var(--tblr-border-radius);
+}
+.input-group-flat:focus-within .form-control,
+.input-group-flat:focus-within .input-group-text {
+  border-color: #80aad3 !important;
+}
+.input-group-flat .form-control:focus {
+  border-color: var(--tblr-border-color);
+  box-shadow: none;
+}
+.input-group-flat .form-control:not(:last-child) {
+  border-right: 0;
+}
+.input-group-flat .form-control:not(:first-child) {
+  border-left: 0;
+}
+.input-group-flat .input-group-text {
+  background: var(--tblr-bg-forms);
+  transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
+}
+@media (prefers-reduced-motion: reduce) {
+  .input-group-flat .input-group-text {
+    transition: none;
+  }
+}
+.input-group-flat .input-group-text:first-child {
+  padding-right: 0;
+}
+.input-group-flat .input-group-text:last-child {
+  padding-left: 0;
+}
+
+/**
+Upload files
+ */
+.form-file-button {
+  margin-left: 0;
+  border-left: 0;
+}
+
+/**
+Icon input
+ */
+.input-icon {
+  position: relative;
+}
+.input-icon .form-control:not(:last-child),
+.input-icon .form-select:not(:last-child) {
+  padding-right: 2.5rem;
+}
+.input-icon .form-control:not(:first-child),
+.input-icon .form-select:not(:last-child) {
+  padding-left: 2.5rem;
+}
+
+.input-icon-addon {
+  position: absolute;
+  top: 0;
+  bottom: 0;
+  left: 0;
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  min-width: 2.5rem;
+  color: var(--tblr-icon-color);
+  pointer-events: none;
+  font-size: 1.2em;
+}
+.input-icon-addon:last-child {
+  right: 0;
+  left: auto;
+}
+
+/*
+Color Input
+ */
+.form-colorinput {
+  position: relative;
+  display: inline-block;
+  margin: 0;
+  line-height: 1;
+  cursor: pointer;
+}
+
+.form-colorinput-input {
+  position: absolute;
+  z-index: -1;
+  opacity: 0;
+}
+
+.form-colorinput-color {
+  display: block;
+  width: 1.5rem;
+  height: 1.5rem;
+  color: #ffffff;
+  border: var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent);
+  border-radius: 3px;
+  box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.05);
+}
+.form-colorinput-color:before {
+  position: absolute;
+  top: 0;
+  left: 0;
+  width: 100%;
+  height: 100%;
+  content: "";
+  background: no-repeat center center/1.25rem;
+  background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' width='16' height='16'%3e%3cpath fill='none' stroke='%23ffffff' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M4 8.5l2.5 2.5l5.5 -5.5'/%3e%3c/svg%3e");
+  opacity: 0;
+  transition: opacity 0.3s;
+}
+@media (prefers-reduced-motion: reduce) {
+  .form-colorinput-color:before {
+    transition: none;
+  }
+}
+.form-colorinput-input:checked ~ .form-colorinput-color:before {
+  opacity: 1;
+}
+.form-colorinput-input:focus ~ .form-colorinput-color {
+  border-color: var(--tblr-primary);
+  box-shadow: 0 0 0 0.25rem rgba(var(--tblr-primary-rgb), 0.25);
+}
+.form-colorinput-light .form-colorinput-color:before {
+  background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' width='16' height='16'%3e%3cpath fill='none' stroke='%23182433' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M4 8.5l2.5 2.5l5.5 -5.5'/%3e%3c/svg%3e");
+}
+
+/**
+Image check
+ */
+.form-imagecheck {
+  position: relative;
+  margin: 0;
+  cursor: pointer;
+}
+
+.form-imagecheck-input {
+  position: absolute;
+  z-index: -1;
+  opacity: 0;
+}
+
+.form-imagecheck-figure {
+  position: relative;
+  display: block;
+  margin: 0;
+  -webkit-user-select: none;
+     -moz-user-select: none;
+      -ms-user-select: none;
+          user-select: none;
+  border: var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color);
+  border-radius: 3px;
+}
+.form-imagecheck-input:focus ~ .form-imagecheck-figure {
+  border-color: var(--tblr-primary);
+  box-shadow: 0 0 0 0.25rem rgba(var(--tblr-primary-rgb), 0.25);
+}
+.form-imagecheck-input:checked ~ .form-imagecheck-figure {
+  border-color: var(--tblr-primary);
+}
+.form-imagecheck-figure:before {
+  position: absolute;
+  top: 0.25rem;
+  left: 0.25rem;
+  z-index: 1;
+  display: block;
+  width: 1.25rem;
+  height: 1.25rem;
+  color: #ffffff;
+  pointer-events: none;
+  content: "";
+  -webkit-user-select: none;
+     -moz-user-select: none;
+      -ms-user-select: none;
+          user-select: none;
+  background: var(--tblr-bg-forms);
+  border: var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color);
+  border-radius: var(--tblr-border-radius);
+  transition: opacity 0.3s;
+}
+@media (prefers-reduced-motion: reduce) {
+  .form-imagecheck-figure:before {
+    transition: none;
+  }
+}
+.form-imagecheck-input:checked ~ .form-imagecheck-figure:before {
+  background-color: var(--tblr-primary);
+  background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' width='16' height='16'%3e%3cpath fill='none' stroke='%23ffffff' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M4 8.5l2.5 2.5l5.5 -5.5'/%3e%3c/svg%3e");
+  background-repeat: repeat;
+  background-position: center;
+  background-size: 1.25rem;
+  border-color: var(--tblr-border-color-translucent);
+}
+.form-imagecheck-input[type=radio] ~ .form-imagecheck-figure:before {
+  border-radius: 50%;
+}
+.form-imagecheck-input[type=radio]:checked ~ .form-imagecheck-figure:before {
+  background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3ccircle r='3' fill='%23ffffff' cx='8' cy='8' /%3e%3c/svg%3e");
+}
+
+.form-imagecheck-image {
+  max-width: 100%;
+  display: block;
+  opacity: 0.64;
+  transition: opacity 0.3s;
+}
+@media (prefers-reduced-motion: reduce) {
+  .form-imagecheck-image {
+    transition: none;
+  }
+}
+.form-imagecheck-image:first-child {
+  border-top-left-radius: 2px;
+  border-top-right-radius: 2px;
+}
+.form-imagecheck-image:last-child {
+  border-bottom-right-radius: 2px;
+  border-bottom-left-radius: 2px;
+}
+.form-imagecheck:hover .form-imagecheck-image, .form-imagecheck-input:focus ~ .form-imagecheck-figure .form-imagecheck-image, .form-imagecheck-input:checked ~ .form-imagecheck-figure .form-imagecheck-image {
+  opacity: 1;
+}
+
+.form-imagecheck-caption {
+  padding: 0.25rem;
+  font-size: 0.765625rem;
+  color: var(--tblr-secondary);
+  text-align: center;
+  transition: color 0.3s;
+}
+@media (prefers-reduced-motion: reduce) {
+  .form-imagecheck-caption {
+    transition: none;
+  }
+}
+.form-imagecheck:hover .form-imagecheck-caption, .form-imagecheck-input:focus ~ .form-imagecheck-figure .form-imagecheck-caption, .form-imagecheck-input:checked ~ .form-imagecheck-figure .form-imagecheck-caption {
+  color: var(--tblr-body-color);
+}
+
+/*
+Select group
+ */
+.form-selectgroup {
+  display: inline-flex;
+  margin: 0 -0.5rem -0.5rem 0;
+  flex-wrap: wrap;
+}
+.form-selectgroup .form-selectgroup-item {
+  margin: 0 0.5rem 0.5rem 0;
+}
+
+.form-selectgroup-vertical {
+  flex-direction: column;
+}
+
+.form-selectgroup-item {
+  display: block;
+  position: relative;
+}
+
+.form-selectgroup-input {
+  position: absolute;
+  top: 0;
+  left: 0;
+  z-index: -1;
+  opacity: 0;
+}
+
+.form-selectgroup-label {
+  position: relative;
+  display: block;
+  min-width: calc(1.4285714286em + 1.125rem + calc(var(--tblr-border-width) * 2));
+  margin: 0;
+  padding: 0.5625rem 0.75rem;
+  font-size: 0.875rem;
+  line-height: 1.4285714286;
+  color: var(--tblr-secondary);
+  background: var(--tblr-bg-forms);
+  text-align: center;
+  cursor: pointer;
+  -webkit-user-select: none;
+     -moz-user-select: none;
+      -ms-user-select: none;
+          user-select: none;
+  border: var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color);
+  border-radius: 3px;
+  box-shadow: var(--tblr-box-shadow-input);
+  transition: border-color 0.3s, background 0.3s, color 0.3s;
+}
+@media (prefers-reduced-motion: reduce) {
+  .form-selectgroup-label {
+    transition: none;
+  }
+}
+.form-selectgroup-label .icon:only-child {
+  margin: 0 -0.25rem;
+}
+.form-selectgroup-label:hover {
+  color: var(--tblr-body-color);
+}
+
+.form-selectgroup-check {
+  display: inline-block;
+  width: 1.25rem;
+  height: 1.25rem;
+  border: var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent);
+  vertical-align: middle;
+  box-shadow: var(--tblr-box-shadow-input);
+}
+.form-selectgroup-input[type=checkbox] + .form-selectgroup-label .form-selectgroup-check {
+  border-radius: var(--tblr-border-radius);
+}
+.form-selectgroup-input[type=radio] + .form-selectgroup-label .form-selectgroup-check {
+  border-radius: 50%;
+}
+.form-selectgroup-input:checked + .form-selectgroup-label .form-selectgroup-check {
+  background-color: var(--tblr-primary);
+  background-repeat: repeat;
+  background-position: center;
+  background-size: 1.25rem;
+  border-color: var(--tblr-border-color-translucent);
+}
+.form-selectgroup-input[type=checkbox]:checked + .form-selectgroup-label .form-selectgroup-check {
+  background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' width='16' height='16'%3e%3cpath fill='none' stroke='%23ffffff' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M4 8.5l2.5 2.5l5.5 -5.5'/%3e%3c/svg%3e");
+}
+.form-selectgroup-input[type=radio]:checked + .form-selectgroup-label .form-selectgroup-check {
+  background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3ccircle r='3' fill='%23ffffff' cx='8' cy='8' /%3e%3c/svg%3e");
+}
+
+.form-selectgroup-check-floated {
+  position: absolute;
+  top: 0.5625rem;
+  right: 0.5625rem;
+}
+
+.form-selectgroup-input:checked + .form-selectgroup-label {
+  z-index: 1;
+  color: var(--tblr-primary);
+  background: rgba(var(--tblr-primary-rgb), 0.04);
+  border-color: var(--tblr-primary);
+}
+
+.form-selectgroup-input:focus + .form-selectgroup-label {
+  z-index: 2;
+  color: var(--tblr-primary);
+  border-color: var(--tblr-primary);
+  box-shadow: 0 0 0 0.25rem rgba(var(--tblr-primary-rgb), 0.25);
+}
+
+/**
+Alternate version of form select group
+ */
+.form-selectgroup-boxes .form-selectgroup-label {
+  text-align: left;
+  padding: 1.25rem 1.25rem;
+  color: inherit;
+}
+.form-selectgroup-boxes .form-selectgroup-input:checked + .form-selectgroup-label {
+  color: inherit;
+}
+.form-selectgroup-boxes .form-selectgroup-input:checked + .form-selectgroup-label .form-selectgroup-title {
+  color: var(--tblr-primary);
+}
+.form-selectgroup-boxes .form-selectgroup-input:checked + .form-selectgroup-label .form-selectgroup-label-content {
+  opacity: 1;
+}
+
+/**
+Select group
+ */
+.form-selectgroup-pills {
+  flex-wrap: wrap;
+  align-items: flex-start;
+}
+.form-selectgroup-pills .form-selectgroup-item {
+  flex-grow: 0;
+}
+.form-selectgroup-pills .form-selectgroup-label {
+  border-radius: 50px;
+}
+
+/**
+Bootstrap color input
+ */
+.form-control-color::-webkit-color-swatch {
+  border: none;
+}
+
+/**
+Remove the cancel buttons in Chrome and Safari on macOS.
+ */
+[type=search]::-webkit-search-cancel-button {
+  -webkit-appearance: none;
+}
+
+/**
+Form control dark theme fix
+ */
+.form-control::-webkit-file-upload-button {
+  background-color: var(--tblr-btn-color, var(--tblr-tertiary-bg));
+}
+.form-control::file-selector-button {
+  background-color: var(--tblr-btn-color, var(--tblr-tertiary-bg));
+}
+.form-control:hover:not(:disabled):not([readonly])::-webkit-file-upload-button {
+  background-color: var(--tblr-btn-color, var(--tblr-secondary-bg));
+}
+.form-control:hover:not(:disabled):not([readonly])::file-selector-button {
+  background-color: var(--tblr-btn-color, var(--tblr-secondary-bg));
+}
+
+/*
+Form check
+ */
+.form-check {
+  -webkit-user-select: none;
+     -moz-user-select: none;
+      -ms-user-select: none;
+          user-select: none;
+}
+.form-check.form-check-highlight .form-check-input:not(:checked) ~ .form-check-label {
+  color: var(--tblr-secondary);
+}
+.form-check .form-check-label-off {
+  color: var(--tblr-secondary);
+}
+.form-check .form-check-input:checked ~ .form-check-label-off {
+  display: none;
+}
+.form-check .form-check-input:not(:checked) ~ .form-check-label-on {
+  display: none;
+}
+
+.form-check-input {
+  background-size: 1.25rem;
+  margin-top: 0rem;
+  box-shadow: var(--tblr-box-shadow-input);
+}
+.form-switch .form-check-input {
+  transition: background-color 0.3s, background-position 0.3s;
+}
+@media (prefers-reduced-motion: reduce) {
+  .form-switch .form-check-input {
+    transition: none;
+  }
+}
+
+.form-check-label {
+  display: block;
+}
+.form-check-label.required:after {
+  content: "*";
+  margin-left: 0.25rem;
+  color: #d63939;
+}
+
+.form-check-description {
+  display: block;
+  color: var(--tblr-secondary);
+  font-size: 0.75rem;
+  margin-top: 0.25rem;
+}
+
+.form-check-single {
+  margin: 0;
+}
+.form-check-single .form-check-input {
+  margin: 0;
+}
+
+/*
+Form switch
+ */
+.form-switch .form-check-input {
+  height: 1.25rem;
+  margin-top: 0rem;
+}
+
+.form-switch-lg {
+  padding-left: 3.5rem;
+  min-height: 1.5rem;
+}
+.form-switch-lg .form-check-input {
+  height: 1.5rem;
+  width: 2.75rem;
+  background-size: 1.5rem;
+  margin-left: -3.5rem;
+}
+.form-switch-lg .form-check-label {
+  padding-top: 0.125rem;
+}
+
+/*Correction of Form-check position*/
+.form-check-input:checked {
+  border: none;
+}
+
+.form-select.is-invalid-lite, .form-control.is-invalid-lite, .form-select.is-valid-lite, .form-control.is-valid-lite {
+  border-color: var(--tblr-border-color) !important;
+}
+
+/**
+Legend
+ */
+.legend {
+  --tblr-legend-size: 0.75em;
+  display: inline-block;
+  background: var(--tblr-border-color);
+  width: var(--tblr-legend-size);
+  height: var(--tblr-legend-size);
+  border-radius: var(--tblr-border-radius-sm);
+  border: 1px solid var(--tblr-border-color-translucent);
+}
+
+.list-group {
+  margin-left: 0;
+  margin-right: 0;
+}
+
+.list-group-header {
+  background: var(--tblr-bg-surface-tertiary);
+  padding: 0.5rem 1.25rem;
+  font-size: 0.75rem;
+  font-weight: var(--tblr-font-weight-medium);
+  line-height: 1;
+  text-transform: uppercase;
+  color: var(--tblr-secondary);
+  border-bottom: var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color);
+}
+.list-group-flush > .list-group-header:last-child {
+  border-bottom-width: 0;
+}
+
+.list-group-item {
+  background-color: inherit;
+}
+
+.list-group-item.active {
+  background-color: rgba(var(--tblr-text-secondary-rgb), 0.04);
+  border-left-color: #0054a6;
+  border-left-width: 2px;
+}
+
+.list-group-item:active, .list-group-item:focus, .list-group-item:hover {
+  background-color: rgba(var(--tblr-text-secondary-rgb), 0.04);
+}
+
+.list-group-item.disabled, .list-group-item:disabled {
+  color: #929dab;
+  background-color: rgba(var(--tblr-text-secondary-rgb), 0.04);
+}
+
+.list-bordered .list-item {
+  border-top: var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color);
+  margin-top: -1px;
+}
+.list-bordered .list-item:first-child {
+  border-top: none;
+}
+
+.list-group-hoverable .list-group-item-actions {
+  opacity: 0;
+  transition: opacity 0.3s;
+}
+@media (prefers-reduced-motion: reduce) {
+  .list-group-hoverable .list-group-item-actions {
+    transition: none;
+  }
+}
+.list-group-hoverable .list-group-item:hover .list-group-item-actions,
+.list-group-hoverable .list-group-item-actions.show {
+  opacity: 1;
+}
+
+.list-group-transparent {
+  --tblr-list-group-border-radius: 0;
+  margin: 0 -1.25rem;
+}
+.list-group-transparent .list-group-item {
+  background: none;
+  border: 0;
+}
+.list-group-transparent .list-group-item .icon {
+  color: var(--tblr-secondary);
+}
+.list-group-transparent .list-group-item.active {
+  font-weight: var(--tblr-font-weight-bold);
+  color: inherit;
+  background: var(--tblr-active-bg);
+}
+.list-group-transparent .list-group-item.active .icon {
+  color: inherit;
+}
+
+.list-separated-item {
+  padding: 1rem 0;
+}
+.list-separated-item:first-child {
+  padding-top: 0;
+}
+.list-separated-item:last-child {
+  padding-bottom: 0;
+}
+.list-separated-item + .list-separated-item {
+  border-top: var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color);
+}
+
+/**
+Inline list
+ */
+.list-inline-item:not(:last-child) {
+  margin-right: auto;
+  -webkit-margin-end: 0.5rem;
+          margin-inline-end: 0.5rem;
+}
+
+.list-inline-dots .list-inline-item + .list-inline-item:before {
+  content: " · ";
+  -webkit-margin-end: 0.5rem;
+          margin-inline-end: 0.5rem;
+}
+
+.loader {
+  position: relative;
+  display: block;
+  width: 2.5rem;
+  height: 2.5rem;
+  color: #0054a6;
+  vertical-align: middle;
+}
+.loader:after {
+  position: absolute;
+  top: 0;
+  left: 0;
+  width: 100%;
+  height: 100%;
+  content: "";
+  border: 1px var(--tblr-border-style);
+  border-color: transparent;
+  border-top-color: currentColor;
+  border-left-color: currentColor;
+  border-radius: 100rem;
+  animation: rotate-360 0.6s linear;
+  animation-iteration-count: infinite;
+}
+
+/**
+Dimmer
+*/
+.dimmer {
+  position: relative;
+}
+.dimmer .loader {
+  position: absolute;
+  top: 50%;
+  right: 0;
+  left: 0;
+  display: none;
+  margin: 0 auto;
+  transform: translateY(-50%);
+}
+.dimmer.active .loader {
+  display: block;
+}
+.dimmer.active .dimmer-content {
+  pointer-events: none;
+  opacity: 0.1;
+}
+
+@keyframes animated-dots {
+  0% {
+    transform: translateX(-100%);
+  }
+}
+.animated-dots {
+  display: inline-block;
+  overflow: hidden;
+  vertical-align: bottom;
+}
+.animated-dots:after {
+  display: inline-block;
+  content: "...";
+  animation: animated-dots 1.2s steps(4, jump-none) infinite;
+}
+
+.modal-content .btn-close {
+  position: absolute;
+  top: 0;
+  right: 0;
+  width: 3.5rem;
+  height: 3.5rem;
+  margin: 0;
+  padding: 0;
+  z-index: 10;
+}
+
+.modal-body {
+  scrollbar-color: rgba(var(--tblr-scrollbar-color, var(--tblr-body-color-rgb)), 0.16) transparent;
+}
+.modal-body::-webkit-scrollbar {
+  width: 1rem;
+  height: 1rem;
+  -webkit-transition: background 0.3s;
+  transition: background 0.3s;
+}
+@media (prefers-reduced-motion: reduce) {
+  .modal-body::-webkit-scrollbar {
+    -webkit-transition: none;
+    transition: none;
+  }
+}
+.modal-body::-webkit-scrollbar-thumb {
+  border-radius: 1rem;
+  border: 5px solid transparent;
+  box-shadow: inset 0 0 0 1rem rgba(var(--tblr-scrollbar-color, var(--tblr-body-color-rgb)), 0.16);
+}
+.modal-body::-webkit-scrollbar-track {
+  background: transparent;
+}
+.modal-body:hover::-webkit-scrollbar-thumb {
+  box-shadow: inset 0 0 0 1rem rgba(var(--tblr-scrollbar-color, var(--tblr-body-color-rgb)), 0.32);
+}
+.modal-body::-webkit-scrollbar-corner {
+  background: transparent;
+}
+.modal-body .modal-title {
+  margin-bottom: 1rem;
+}
+.modal-body + .modal-body {
+  border-top: var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color);
+}
+
+.modal-status {
+  position: absolute;
+  top: 0;
+  left: 0;
+  right: 0;
+  height: 2px;
+  background: var(--tblr-secondary);
+  border-radius: var(--tblr-border-radius-lg) var(--tblr-border-radius-lg) 0 0;
+}
+
+.modal-header {
+  align-items: center;
+  min-height: 3.5rem;
+  background: transparent;
+  padding: 0 3.5rem 0 1.5rem;
+}
+
+.modal-title {
+  font-size: 1rem;
+  font-weight: var(--tblr-font-weight-bold);
+  color: inherit;
+  line-height: 1.4285714286;
+}
+
+.modal-footer {
+  padding-top: 0.75rem;
+  padding-bottom: 0.75rem;
+}
+
+.modal-blur {
+  -webkit-backdrop-filter: blur(4px);
+          backdrop-filter: blur(4px);
+}
+
+.modal-full-width {
+  max-width: none;
+  margin: 0 0.5rem;
+}
+
+.nav-vertical,
+.nav-vertical .nav {
+  flex-direction: column;
+  flex-wrap: nowrap;
+}
+.nav-vertical .nav {
+  margin-left: 1.25rem;
+  border-left: var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color);
+  padding-left: 0.5rem;
+}
+.nav-vertical .nav-link.active,
+.nav-vertical .nav-item.show .nav-link {
+  font-weight: var(--tblr-font-weight-bold);
+}
+.nav-vertical.nav-pills {
+  margin: 0 -0.75rem;
+}
+
+.nav-bordered {
+  border-bottom: var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color);
+}
+.nav-bordered .nav-item + .nav-item {
+  margin-left: 1.25rem;
+}
+.nav-bordered .nav-link {
+  padding-left: 0;
+  padding-right: 0;
+  margin: 0 0 -var(--tblr-border-width);
+  border: 0;
+  border-bottom: 2px var(--tblr-border-style) transparent;
+  color: var(--tblr-secondary);
+}
+.nav-bordered .nav-link.active,
+.nav-bordered .nav-item.show .nav-link {
+  color: var(--tblr-primary);
+  border-color: var(--tblr-primary);
+}
+
+.nav-link {
+  display: flex;
+  transition: color 0.3s;
+  align-items: center;
+}
+@media (prefers-reduced-motion: reduce) {
+  .nav-link {
+    transition: none;
+  }
+}
+
+.nav-link-toggle {
+  margin-left: auto;
+  padding: 0 0.25rem;
+  transition: transform 0.3s;
+}
+@media (prefers-reduced-motion: reduce) {
+  .nav-link-toggle {
+    transition: none;
+  }
+}
+.nav-link-toggle:after {
+  content: "";
+  display: inline-block;
+  vertical-align: 0.306em;
+  width: 0.36em;
+  height: 0.36em;
+  border-bottom: 1px var(--tblr-border-style);
+  border-left: 1px var(--tblr-border-style);
+  margin-right: 0.1em;
+  margin-left: 0.4em;
+  transform: rotate(-45deg);
+}
+.nav-link-toggle:after {
+  margin: 0;
+}
+.nav-link[aria-expanded=true] .nav-link-toggle {
+  transform: rotate(180deg);
+}
+
+.nav-link-icon {
+  width: 1.25rem;
+  height: 1.25rem;
+  margin-right: 0.5rem;
+  color: var(--tblr-icon-color);
+}
+.nav-link-icon svg {
+  display: block;
+  height: 100%;
+}
+
+.nav-fill .nav-item .nav-link {
+  justify-content: center;
+}
+
+.stars {
+  display: inline-flex;
+  color: #bbc3cd;
+  font-size: 0.75rem;
+}
+.stars .star:not(:first-child) {
+  margin-left: 0.25rem;
+}
+
+.pagination {
+  -webkit-user-select: none;
+     -moz-user-select: none;
+      -ms-user-select: none;
+          user-select: none;
+}
+
+.page-link {
+  min-width: 1.75rem;
+  border-radius: var(--tblr-border-radius);
+}
+
+.page-item {
+  text-align: center;
+}
+.page-item:not(.active) .page-link:hover {
+  background: transparent;
+}
+.page-item.page-prev, .page-item.page-next {
+  flex: 0 0 50%;
+  text-align: left;
+}
+.page-item.page-next {
+  margin-left: auto;
+  text-align: right;
+}
+
+.page-item-subtitle {
+  margin-bottom: 2px;
+  font-size: 12px;
+  color: var(--tblr-secondary);
+  text-transform: uppercase;
+}
+.page-item.disabled .page-item-subtitle {
+  color: var(--tblr-disabled-color);
+}
+
+.page-item-title {
+  font-size: 1rem;
+  font-weight: var(--tblr-font-weight-normal);
+  color: var(--tblr-body-color);
+}
+.page-link:hover .page-item-title {
+  color: #0054a6;
+}
+.page-item.disabled .page-item-title {
+  color: var(--tblr-disabled-color);
+}
+
+@keyframes progress-indeterminate {
+  0% {
+    right: 100%;
+    left: -35%;
+  }
+  100%, 60% {
+    right: -90%;
+    left: 100%;
+  }
+}
+/**
+Progress
+ */
+.progress {
+  position: relative;
+  width: 100%;
+  line-height: 0.5rem;
+  -webkit-appearance: none;
+     -moz-appearance: none;
+          appearance: none;
+}
+.progress::-webkit-progress-bar {
+  background: var(--tblr-progress-bg);
+}
+.progress::-webkit-progress-value {
+  background-color: var(--tblr-primary);
+}
+.progress::-moz-progress-bar {
+  background-color: var(--tblr-primary);
+}
+.progress::-ms-fill {
+  background-color: var(--tblr-primary);
+  border: none;
+}
+
+.progress-sm {
+  height: 0.25rem;
+}
+
+/**
+Progress bar
+ */
+.progress-bar {
+  height: 100%;
+}
+
+.progress-bar-indeterminate:after, .progress-bar-indeterminate:before {
+  position: absolute;
+  top: 0;
+  bottom: 0;
+  left: 0;
+  content: "";
+  background-color: inherit;
+  will-change: left, right;
+}
+.progress-bar-indeterminate:before {
+  animation: progress-indeterminate 1.5s cubic-bezier(0.65, 0.815, 0.735, 0.395) infinite;
+}
+
+.progress-separated .progress-bar {
+  box-shadow: 0 0 0 2px var(--tblr-card-bg, var(--tblr-bg-surface));
+}
+
+/**
+Progressbg
+ */
+.progressbg {
+  position: relative;
+  padding: 0.25rem 0.5rem;
+  display: flex;
+}
+
+.progressbg-text {
+  position: relative;
+  z-index: 1;
+  overflow: hidden;
+  text-overflow: ellipsis;
+  white-space: nowrap;
+}
+
+.progressbg-progress {
+  position: absolute;
+  top: 0;
+  right: 0;
+  bottom: 0;
+  left: 0;
+  z-index: 0;
+  height: 100%;
+  background: transparent;
+  pointer-events: none;
+}
+
+.progressbg-value {
+  font-weight: var(--tblr-font-weight-medium);
+  margin-left: auto;
+  padding-left: 2rem;
+}
+
+.ribbon {
+  --tblr-ribbon-margin: 0.25rem;
+  --tblr-ribbon-border-radius: var(--tblr-border-radius);
+  position: absolute;
+  top: 0.75rem;
+  right: calc(-1 * var(--tblr-ribbon-margin));
+  z-index: 1;
+  padding: 0.25rem 0.75rem;
+  font-size: 0.625rem;
+  font-weight: var(--tblr-font-weight-bold);
+  line-height: 1;
+  color: #ffffff;
+  text-align: center;
+  text-transform: uppercase;
+  background: var(--tblr-primary);
+  border-color: var(--tblr-primary);
+  border-radius: var(--tblr-ribbon-border-radius) 0 var(--tblr-ribbon-border-radius) var(--tblr-ribbon-border-radius);
+  display: inline-flex;
+  align-items: center;
+  justify-content: center;
+  min-height: 2rem;
+  min-width: 2rem;
+}
+.ribbon:before {
+  position: absolute;
+  right: 0;
+  bottom: 100%;
+  width: 0;
+  height: 0;
+  content: "";
+  filter: brightness(70%);
+  border: calc(var(--tblr-ribbon-margin) * 0.5) var(--tblr-border-style);
+  border-color: inherit;
+  border-top-color: transparent;
+  border-right-color: transparent;
+}
+.ribbon.bg-blue {
+  border-color: var(--tblr-blue);
+}
+.ribbon.bg-blue-lt {
+  border-color: rgba(var(--tblr-blue-rgb), 0.1) !important;
+}
+.ribbon.bg-azure {
+  border-color: var(--tblr-azure);
+}
+.ribbon.bg-azure-lt {
+  border-color: rgba(var(--tblr-azure-rgb), 0.1) !important;
+}
+.ribbon.bg-indigo {
+  border-color: var(--tblr-indigo);
+}
+.ribbon.bg-indigo-lt {
+  border-color: rgba(var(--tblr-indigo-rgb), 0.1) !important;
+}
+.ribbon.bg-purple {
+  border-color: var(--tblr-purple);
+}
+.ribbon.bg-purple-lt {
+  border-color: rgba(var(--tblr-purple-rgb), 0.1) !important;
+}
+.ribbon.bg-pink {
+  border-color: var(--tblr-pink);
+}
+.ribbon.bg-pink-lt {
+  border-color: rgba(var(--tblr-pink-rgb), 0.1) !important;
+}
+.ribbon.bg-red {
+  border-color: var(--tblr-red);
+}
+.ribbon.bg-red-lt {
+  border-color: rgba(var(--tblr-red-rgb), 0.1) !important;
+}
+.ribbon.bg-orange {
+  border-color: var(--tblr-orange);
+}
+.ribbon.bg-orange-lt {
+  border-color: rgba(var(--tblr-orange-rgb), 0.1) !important;
+}
+.ribbon.bg-yellow {
+  border-color: var(--tblr-yellow);
+}
+.ribbon.bg-yellow-lt {
+  border-color: rgba(var(--tblr-yellow-rgb), 0.1) !important;
+}
+.ribbon.bg-lime {
+  border-color: var(--tblr-lime);
+}
+.ribbon.bg-lime-lt {
+  border-color: rgba(var(--tblr-lime-rgb), 0.1) !important;
+}
+.ribbon.bg-green {
+  border-color: var(--tblr-green);
+}
+.ribbon.bg-green-lt {
+  border-color: rgba(var(--tblr-green-rgb), 0.1) !important;
+}
+.ribbon.bg-teal {
+  border-color: var(--tblr-teal);
+}
+.ribbon.bg-teal-lt {
+  border-color: rgba(var(--tblr-teal-rgb), 0.1) !important;
+}
+.ribbon.bg-cyan {
+  border-color: var(--tblr-cyan);
+}
+.ribbon.bg-cyan-lt {
+  border-color: rgba(var(--tblr-cyan-rgb), 0.1) !important;
+}
+.ribbon .icon {
+  width: 1.25rem;
+  height: 1.25rem;
+  font-size: 1.25rem;
+}
+
+.ribbon-top {
+  top: calc(-1 * var(--tblr-ribbon-margin));
+  right: 0.75rem;
+  width: 2rem;
+  padding: 0.5rem 0;
+  border-radius: 0 var(--tblr-ribbon-border-radius) var(--tblr-ribbon-border-radius) var(--tblr-ribbon-border-radius);
+}
+.ribbon-top:before {
+  top: 0;
+  right: 100%;
+  bottom: auto;
+  border-color: inherit;
+  border-top-color: transparent;
+  border-left-color: transparent;
+}
+.ribbon-top.ribbon-start {
+  right: auto;
+  left: 0.75rem;
+}
+.ribbon-top.ribbon-start:before {
+  top: 0;
+  right: 100%;
+  left: auto;
+}
+
+.ribbon-start {
+  right: auto;
+  left: calc(-1 * var(--tblr-ribbon-margin));
+}
+.ribbon-start:before {
+  top: auto;
+  bottom: 100%;
+  left: 0;
+  border-color: inherit;
+  border-top-color: transparent;
+  border-left-color: transparent;
+}
+
+.ribbon-bottom {
+  top: auto;
+  bottom: 0.75rem;
+}
+
+.ribbon-bookmark {
+  padding-left: 0.25rem;
+  border-radius: 0 0 var(--tblr-ribbon-border-radius) 0;
+}
+.ribbon-bookmark:after {
+  position: absolute;
+  top: 0;
+  right: 100%;
+  display: block;
+  width: 0;
+  height: 0;
+  content: "";
+  border: 1rem var(--tblr-border-style);
+  border-color: inherit;
+  border-right-width: 0;
+  border-left-color: transparent;
+  border-left-width: 0.5rem;
+}
+.ribbon-bookmark.ribbon-left {
+  padding-right: 0.5rem;
+}
+.ribbon-bookmark.ribbon-left:after {
+  right: auto;
+  left: 100%;
+  border-right-color: transparent;
+  border-right-width: 0.5rem;
+  border-left-width: 0;
+}
+.ribbon-bookmark.ribbon-top {
+  padding-right: 0;
+  padding-bottom: 0.25rem;
+  padding-left: 0;
+  border-radius: 0 var(--tblr-ribbon-border-radius) 0 0;
+}
+.ribbon-bookmark.ribbon-top:after {
+  top: 100%;
+  right: 0;
+  left: 0;
+  border-color: inherit;
+  border-width: 1rem;
+  border-top-width: 0;
+  border-bottom-color: transparent;
+  border-bottom-width: 0.5rem;
+}
+
+/**
+Markdown
+ */
+.markdown {
+  line-height: 1.7142857143;
+}
+.markdown > :first-child {
+  margin-top: 0;
+}
+.markdown > :last-child,
+.markdown > :last-child .highlight {
+  margin-bottom: 0;
+}
+@media (min-width: 768px) {
+  .markdown > hr, .markdown > .hr {
+    margin-top: 3em;
+    margin-bottom: 3em;
+  }
+}
+.markdown > h1, .markdown > .h1, .markdown > h2, .markdown > .h2, .markdown > h3, .markdown > .h3, .markdown > h4, .markdown > .h4, .markdown > h5, .markdown > .h5, .markdown > h6, .markdown > .h6 {
+  font-weight: var(--tblr-font-weight-bold);
+}
+.markdown > blockquote {
+  font-size: 1rem;
+  margin: 1.5rem 0;
+  padding: 0.5rem 1.5rem;
+}
+.markdown > img {
+  border-radius: var(--tblr-border-radius);
+}
+
+.placeholder:not(.btn):not([class*=bg-]) {
+  background-color: currentColor !important;
+}
+.placeholder:not(.avatar):not([class*=card-img-]) {
+  border-radius: var(--tblr-border-radius);
+}
+
+.steps {
+  --tblr-steps-color: var(--tblr-primary);
+  --tblr-steps-inactive-color: var(--tblr-border-color);
+  --tblr-steps-dot-size: .5rem;
+  --tblr-steps-border-width: 2px;
+  display: flex;
+  flex-wrap: nowrap;
+  width: 100%;
+  padding: 0;
+  margin: 0;
+  list-style: none;
+}
+
+.steps-blue {
+  --tblr-steps-color: var(--tblr-blue);
+}
+
+.steps-azure {
+  --tblr-steps-color: var(--tblr-azure);
+}
+
+.steps-indigo {
+  --tblr-steps-color: var(--tblr-indigo);
+}
+
+.steps-purple {
+  --tblr-steps-color: var(--tblr-purple);
+}
+
+.steps-pink {
+  --tblr-steps-color: var(--tblr-pink);
+}
+
+.steps-red {
+  --tblr-steps-color: var(--tblr-red);
+}
+
+.steps-orange {
+  --tblr-steps-color: var(--tblr-orange);
+}
+
+.steps-yellow {
+  --tblr-steps-color: var(--tblr-yellow);
+}
+
+.steps-lime {
+  --tblr-steps-color: var(--tblr-lime);
+}
+
+.steps-green {
+  --tblr-steps-color: var(--tblr-green);
+}
+
+.steps-teal {
+  --tblr-steps-color: var(--tblr-teal);
+}
+
+.steps-cyan {
+  --tblr-steps-color: var(--tblr-cyan);
+}
+
+.step-item {
+  position: relative;
+  flex: 1 1 0;
+  min-height: 1rem;
+  margin-top: 0;
+  color: inherit;
+  text-align: center;
+  cursor: default;
+  padding-top: calc(var(--tblr-steps-dot-size));
+}
+a.step-item {
+  cursor: pointer;
+}
+a.step-item:hover {
+  color: inherit;
+}
+
+.step-item:after, .step-item:before {
+  background: var(--tblr-steps-color);
+}
+.step-item:not(:last-child):after {
+  position: absolute;
+  left: 50%;
+  width: 100%;
+  content: "";
+  transform: translateY(-50%);
+}
+.step-item:after {
+  top: calc(var(--tblr-steps-dot-size) * 0.5);
+  height: var(--tblr-steps-border-width);
+}
+.step-item:before {
+  content: "";
+  position: absolute;
+  top: 0;
+  left: 50%;
+  z-index: 1;
+  box-sizing: content-box;
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  border-radius: 100rem;
+  transform: translateX(-50%);
+  color: var(--tblr-white);
+  width: var(--tblr-steps-dot-size);
+  height: var(--tblr-steps-dot-size);
+}
+.step-item.active {
+  font-weight: var(--tblr-font-weight-bold);
+}
+.step-item.active:after {
+  background: var(--tblr-steps-inactive-color);
+}
+.step-item.active ~ .step-item {
+  color: var(--tblr-disabled-color);
+}
+.step-item.active ~ .step-item:after, .step-item.active ~ .step-item:before {
+  background: var(--tblr-steps-inactive-color);
+}
+
+.steps-counter {
+  --tblr-steps-dot-size: 1.5rem;
+  counter-reset: steps;
+}
+.steps-counter .step-item {
+  counter-increment: steps;
+}
+.steps-counter .step-item:before {
+  content: counter(steps);
+}
+
+.steps-vertical {
+  --tblr-steps-dot-offset: 6px;
+  flex-direction: column;
+}
+.steps-vertical.steps-counter {
+  --tblr-steps-dot-offset: -2px;
+}
+.steps-vertical .step-item {
+  text-align: left;
+  padding-top: 0;
+  padding-left: calc(var(--tblr-steps-dot-size) + 1rem);
+  min-height: auto;
+}
+.steps-vertical .step-item:not(:first-child) {
+  margin-top: 1rem;
+}
+.steps-vertical .step-item:before {
+  top: var(--tblr-steps-dot-offset);
+  left: 0;
+  transform: translate(0, 0);
+}
+.steps-vertical .step-item:not(:last-child):after {
+  position: absolute;
+  content: "";
+  transform: translateX(-50%);
+  top: var(--tblr-steps-dot-offset);
+  left: calc(var(--tblr-steps-dot-size) * 0.5);
+  width: var(--tblr-steps-border-width);
+  height: calc(100% + 1rem);
+}
+
+@keyframes status-pulsate-main {
+  40% {
+    transform: scale(1.25, 1.25);
+  }
+  60% {
+    transform: scale(1.25, 1.25);
+  }
+}
+@keyframes status-pulsate-secondary {
+  10% {
+    transform: scale(1, 1);
+  }
+  30% {
+    transform: scale(3, 3);
+  }
+  80% {
+    transform: scale(3, 3);
+  }
+  100% {
+    transform: scale(1, 1);
+  }
+}
+@keyframes status-pulsate-tertiary {
+  25% {
+    transform: scale(1, 1);
+  }
+  80% {
+    transform: scale(3, 3);
+    opacity: 0;
+  }
+  100% {
+    transform: scale(3, 3);
+    opacity: 0;
+  }
+}
+.status {
+  --tblr-status-height: 1.5rem;
+  --tblr-status-color: #667382;
+  --tblr-status-color-rgb: 102, 115, 130;
+  display: inline-flex;
+  align-items: center;
+  height: var(--tblr-status-height);
+  padding: 0.25rem 0.75rem;
+  gap: 0.5rem;
+  color: var(--tblr-status-color);
+  background: rgba(var(--tblr-status-color-rgb), 0.1);
+  font-size: 0.875rem;
+  text-transform: none;
+  letter-spacing: normal;
+  border-radius: 100rem;
+  font-weight: var(--tblr-font-weight-medium);
+  line-height: 1;
+  margin: 0;
+}
+.status .status-dot {
+  background: var(--tblr-status-color);
+}
+.status .icon {
+  font-size: 1.25rem;
+}
+
+.status-lite {
+  border: var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color) !important;
+  background: transparent !important;
+  color: var(--tblr-body-color) !important;
+}
+
+.status-primary {
+  --tblr-status-color: #0054a6;
+  --tblr-status-color-rgb: 0, 84, 166;
+}
+
+.status-secondary {
+  --tblr-status-color: #667382;
+  --tblr-status-color-rgb: 102, 115, 130;
+}
+
+.status-success {
+  --tblr-status-color: #2fb344;
+  --tblr-status-color-rgb: 47, 179, 68;
+}
+
+.status-info {
+  --tblr-status-color: #4299e1;
+  --tblr-status-color-rgb: 66, 153, 225;
+}
+
+.status-warning {
+  --tblr-status-color: #f76707;
+  --tblr-status-color-rgb: 247, 103, 7;
+}
+
+.status-danger {
+  --tblr-status-color: #d63939;
+  --tblr-status-color-rgb: 214, 57, 57;
+}
+
+.status-light {
+  --tblr-status-color: #fcfdfe;
+  --tblr-status-color-rgb: 252, 253, 254;
+}
+
+.status-dark {
+  --tblr-status-color: #182433;
+  --tblr-status-color-rgb: 24, 36, 51;
+}
+
+.status-muted {
+  --tblr-status-color: #667382;
+  --tblr-status-color-rgb: 102, 115, 130;
+}
+
+.status-blue {
+  --tblr-status-color: #0054a6;
+  --tblr-status-color-rgb: 0, 84, 166;
+}
+
+.status-azure {
+  --tblr-status-color: #4299e1;
+  --tblr-status-color-rgb: 66, 153, 225;
+}
+
+.status-indigo {
+  --tblr-status-color: #4263eb;
+  --tblr-status-color-rgb: 66, 99, 235;
+}
+
+.status-purple {
+  --tblr-status-color: #ae3ec9;
+  --tblr-status-color-rgb: 174, 62, 201;
+}
+
+.status-pink {
+  --tblr-status-color: #d6336c;
+  --tblr-status-color-rgb: 214, 51, 108;
+}
+
+.status-red {
+  --tblr-status-color: #d63939;
+  --tblr-status-color-rgb: 214, 57, 57;
+}
+
+.status-orange {
+  --tblr-status-color: #f76707;
+  --tblr-status-color-rgb: 247, 103, 7;
+}
+
+.status-yellow {
+  --tblr-status-color: #f59f00;
+  --tblr-status-color-rgb: 245, 159, 0;
+}
+
+.status-lime {
+  --tblr-status-color: #74b816;
+  --tblr-status-color-rgb: 116, 184, 22;
+}
+
+.status-green {
+  --tblr-status-color: #2fb344;
+  --tblr-status-color-rgb: 47, 179, 68;
+}
+
+.status-teal {
+  --tblr-status-color: #0ca678;
+  --tblr-status-color-rgb: 12, 166, 120;
+}
+
+.status-cyan {
+  --tblr-status-color: #17a2b8;
+  --tblr-status-color-rgb: 23, 162, 184;
+}
+
+.status-facebook {
+  --tblr-status-color: #1877f2;
+  --tblr-status-color-rgb: 24, 119, 242;
+}
+
+.status-twitter {
+  --tblr-status-color: #1da1f2;
+  --tblr-status-color-rgb: 29, 161, 242;
+}
+
+.status-linkedin {
+  --tblr-status-color: #0a66c2;
+  --tblr-status-color-rgb: 10, 102, 194;
+}
+
+.status-google {
+  --tblr-status-color: #dc4e41;
+  --tblr-status-color-rgb: 220, 78, 65;
+}
+
+.status-youtube {
+  --tblr-status-color: #ff0000;
+  --tblr-status-color-rgb: 255, 0, 0;
+}
+
+.status-vimeo {
+  --tblr-status-color: #1ab7ea;
+  --tblr-status-color-rgb: 26, 183, 234;
+}
+
+.status-dribbble {
+  --tblr-status-color: #ea4c89;
+  --tblr-status-color-rgb: 234, 76, 137;
+}
+
+.status-github {
+  --tblr-status-color: #181717;
+  --tblr-status-color-rgb: 24, 23, 23;
+}
+
+.status-instagram {
+  --tblr-status-color: #e4405f;
+  --tblr-status-color-rgb: 228, 64, 95;
+}
+
+.status-pinterest {
+  --tblr-status-color: #bd081c;
+  --tblr-status-color-rgb: 189, 8, 28;
+}
+
+.status-vk {
+  --tblr-status-color: #6383a8;
+  --tblr-status-color-rgb: 99, 131, 168;
+}
+
+.status-rss {
+  --tblr-status-color: #ffa500;
+  --tblr-status-color-rgb: 255, 165, 0;
+}
+
+.status-flickr {
+  --tblr-status-color: #0063dc;
+  --tblr-status-color-rgb: 0, 99, 220;
+}
+
+.status-bitbucket {
+  --tblr-status-color: #0052cc;
+  --tblr-status-color-rgb: 0, 82, 204;
+}
+
+.status-tabler {
+  --tblr-status-color: #0054a6;
+  --tblr-status-color-rgb: 0, 84, 166;
+}
+
+.status-dot {
+  --tblr-status-dot-color: var(--tblr-status-color, #667382);
+  --tblr-status-size: 0.5rem;
+  position: relative;
+  display: inline-block;
+  width: var(--tblr-status-size);
+  height: var(--tblr-status-size);
+  background: var(--tblr-status-dot-color);
+  border-radius: 100rem;
+}
+
+.status-dot-animated:before {
+  content: "";
+  position: absolute;
+  inset: 0;
+  z-index: 0;
+  background: inherit;
+  border-radius: inherit;
+  opacity: 0.6;
+  animation: 1s linear 2s backwards infinite status-pulsate-tertiary;
+}
+
+.status-indicator {
+  --tblr-status-indicator-size: 2.5rem;
+  --tblr-status-indicator-color: var(--tblr-status-color, #667382);
+  display: block;
+  position: relative;
+  width: var(--tblr-status-indicator-size);
+  height: var(--tblr-status-indicator-size);
+}
+
+.status-indicator-circle {
+  --tblr-status-circle-size: .75rem;
+  position: absolute;
+  left: 50%;
+  top: 50%;
+  margin: calc(var(--tblr-status-circle-size) / -2) 0 0 calc(var(--tblr-status-circle-size) / -2);
+  width: var(--tblr-status-circle-size);
+  height: var(--tblr-status-circle-size);
+  border-radius: 100rem;
+  background: var(--tblr-status-color);
+}
+.status-indicator-circle:nth-child(1) {
+  z-index: 3;
+}
+.status-indicator-circle:nth-child(2) {
+  z-index: 2;
+  opacity: 0.1;
+}
+.status-indicator-circle:nth-child(3) {
+  z-index: 1;
+  opacity: 0.3;
+}
+
+.status-indicator-animated .status-indicator-circle:nth-child(1) {
+  animation: 2s linear 1s infinite backwards status-pulsate-main;
+}
+.status-indicator-animated .status-indicator-circle:nth-child(2) {
+  animation: 2s linear 1s infinite backwards status-pulsate-secondary;
+}
+.status-indicator-animated .status-indicator-circle:nth-child(3) {
+  animation: 2s linear 1s infinite backwards status-pulsate-tertiary;
+}
+
+.switch-icon {
+  display: inline-block;
+  line-height: 1;
+  border: 0;
+  padding: 0;
+  background: transparent;
+  width: 1.25rem;
+  height: 1.25rem;
+  vertical-align: bottom;
+  position: relative;
+  cursor: pointer;
+}
+.switch-icon.disabled {
+  pointer-events: none;
+  opacity: 0.4;
+}
+.switch-icon:focus {
+  outline: none;
+}
+.switch-icon svg {
+  display: block;
+  width: 100%;
+  height: 100%;
+}
+.switch-icon .switch-icon-a,
+.switch-icon .switch-icon-b {
+  display: block;
+  width: 100%;
+  height: 100%;
+}
+.switch-icon .switch-icon-a {
+  opacity: 1;
+}
+.switch-icon .switch-icon-b {
+  position: absolute;
+  top: 0;
+  left: 0;
+  opacity: 0;
+}
+.switch-icon.active .switch-icon-a {
+  opacity: 0;
+}
+.switch-icon.active .switch-icon-b {
+  opacity: 1;
+}
+
+.switch-icon-fade .switch-icon-a,
+.switch-icon-fade .switch-icon-b {
+  transition: opacity 0.5s;
+}
+@media (prefers-reduced-motion: reduce) {
+  .switch-icon-fade .switch-icon-a,
+  .switch-icon-fade .switch-icon-b {
+    transition: none;
+  }
+}
+
+.switch-icon-scale .switch-icon-a,
+.switch-icon-scale .switch-icon-b {
+  transition: opacity 0.5s, transform 0s 0.5s;
+}
+@media (prefers-reduced-motion: reduce) {
+  .switch-icon-scale .switch-icon-a,
+  .switch-icon-scale .switch-icon-b {
+    transition: none;
+  }
+}
+.switch-icon-scale .switch-icon-b {
+  transform: scale(1.5);
+}
+.switch-icon-scale.active .switch-icon-a,
+.switch-icon-scale.active .switch-icon-b {
+  transition: opacity 0s, transform 0.5s;
+}
+@media (prefers-reduced-motion: reduce) {
+  .switch-icon-scale.active .switch-icon-a,
+  .switch-icon-scale.active .switch-icon-b {
+    transition: none;
+  }
+}
+.switch-icon-scale.active .switch-icon-b {
+  transform: scale(1);
+}
+
+.switch-icon-flip {
+  perspective: 10em;
+}
+.switch-icon-flip .switch-icon-a,
+.switch-icon-flip .switch-icon-b {
+  -webkit-backface-visibility: hidden;
+          backface-visibility: hidden;
+  transform-style: preserve-3d;
+  transition: opacity 0s 0.2s, transform 0.4s ease-in-out;
+}
+@media (prefers-reduced-motion: reduce) {
+  .switch-icon-flip .switch-icon-a,
+  .switch-icon-flip .switch-icon-b {
+    transition: none;
+  }
+}
+.switch-icon-flip .switch-icon-a {
+  opacity: 1;
+  transform: rotateY(0deg);
+}
+.switch-icon-flip .switch-icon-b {
+  opacity: 1;
+  transform: rotateY(-180deg);
+}
+.switch-icon-flip.active .switch-icon-a {
+  opacity: 1;
+  transform: rotateY(180deg);
+}
+.switch-icon-flip.active .switch-icon-b {
+  opacity: 1;
+  transform: rotateY(0deg);
+}
+
+.switch-icon-slide-up,
+.switch-icon-slide-left,
+.switch-icon-slide-right,
+.switch-icon-slide-down {
+  overflow: hidden;
+}
+.switch-icon-slide-up .switch-icon-a,
+.switch-icon-slide-up .switch-icon-b,
+.switch-icon-slide-left .switch-icon-a,
+.switch-icon-slide-left .switch-icon-b,
+.switch-icon-slide-right .switch-icon-a,
+.switch-icon-slide-right .switch-icon-b,
+.switch-icon-slide-down .switch-icon-a,
+.switch-icon-slide-down .switch-icon-b {
+  transition: opacity 0.3s, transform 0.3s;
+}
+@media (prefers-reduced-motion: reduce) {
+  .switch-icon-slide-up .switch-icon-a,
+  .switch-icon-slide-up .switch-icon-b,
+  .switch-icon-slide-left .switch-icon-a,
+  .switch-icon-slide-left .switch-icon-b,
+  .switch-icon-slide-right .switch-icon-a,
+  .switch-icon-slide-right .switch-icon-b,
+  .switch-icon-slide-down .switch-icon-a,
+  .switch-icon-slide-down .switch-icon-b {
+    transition: none;
+  }
+}
+.switch-icon-slide-up .switch-icon-a,
+.switch-icon-slide-left .switch-icon-a,
+.switch-icon-slide-right .switch-icon-a,
+.switch-icon-slide-down .switch-icon-a {
+  transform: translateY(0);
+}
+.switch-icon-slide-up .switch-icon-b,
+.switch-icon-slide-left .switch-icon-b,
+.switch-icon-slide-right .switch-icon-b,
+.switch-icon-slide-down .switch-icon-b {
+  transform: translateY(100%);
+}
+.switch-icon-slide-up.active .switch-icon-a,
+.switch-icon-slide-left.active .switch-icon-a,
+.switch-icon-slide-right.active .switch-icon-a,
+.switch-icon-slide-down.active .switch-icon-a {
+  transform: translateY(-100%);
+}
+.switch-icon-slide-up.active .switch-icon-b,
+.switch-icon-slide-left.active .switch-icon-b,
+.switch-icon-slide-right.active .switch-icon-b,
+.switch-icon-slide-down.active .switch-icon-b {
+  transform: translateY(0);
+}
+
+.switch-icon-slide-left .switch-icon-a {
+  transform: translateX(0);
+}
+.switch-icon-slide-left .switch-icon-b {
+  transform: translateX(100%);
+}
+.switch-icon-slide-left.active .switch-icon-a {
+  transform: translateX(-100%);
+}
+.switch-icon-slide-left.active .switch-icon-b {
+  transform: translateX(0);
+}
+
+.switch-icon-slide-right .switch-icon-a {
+  transform: translateX(0);
+}
+.switch-icon-slide-right .switch-icon-b {
+  transform: translateX(-100%);
+}
+.switch-icon-slide-right.active .switch-icon-a {
+  transform: translateX(100%);
+}
+.switch-icon-slide-right.active .switch-icon-b {
+  transform: translateX(0);
+}
+
+.switch-icon-slide-down .switch-icon-a {
+  transform: translateY(0);
+}
+.switch-icon-slide-down .switch-icon-b {
+  transform: translateY(-100%);
+}
+.switch-icon-slide-down.active .switch-icon-a {
+  transform: translateY(100%);
+}
+.switch-icon-slide-down.active .switch-icon-b {
+  transform: translateY(0);
+}
+
+.table thead th, .markdown > table thead th {
+  color: var(--tblr-secondary);
+  background: var(--tblr-bg-surface-tertiary);
+  font-size: 0.625rem;
+  font-weight: var(--tblr-font-weight-bold);
+  text-transform: uppercase;
+  letter-spacing: 0.04em;
+  line-height: 1rem;
+  color: var(--tblr-secondary);
+  padding-top: 0.5rem;
+  padding-bottom: 0.5rem;
+  white-space: nowrap;
+}
+@media print {
+  .table thead th, .markdown > table thead th {
+    background: transparent;
+  }
+}
+
+.table-responsive .table, .table-responsive .markdown > table {
+  margin-bottom: 0;
+}
+.table-responsive + .card-footer {
+  border-top: 0;
+}
+
+.table-transparent thead th {
+  background: transparent;
+}
+
+.table-nowrap > :not(caption) > * > * {
+  white-space: nowrap;
+}
+
+.table-vcenter > :not(caption) > * > * {
+  vertical-align: middle;
+}
+
+.table-center > :not(caption) > * > * {
+  text-align: center;
+}
+
+.td-truncate {
+  max-width: 1px;
+  width: 100%;
+}
+
+.table-mobile {
+  display: block;
+}
+.table-mobile thead {
+  display: none;
+}
+.table-mobile tbody,
+.table-mobile tr {
+  display: flex;
+  flex-direction: column;
+}
+.table-mobile td {
+  display: block;
+  padding: 0.75rem 0.75rem !important;
+  border: none;
+  color: var(--tblr-body-color) !important;
+}
+.table-mobile td[data-label]:before {
+  font-size: 0.625rem;
+  font-weight: var(--tblr-font-weight-bold);
+  text-transform: uppercase;
+  letter-spacing: 0.04em;
+  line-height: 1rem;
+  color: var(--tblr-secondary);
+  content: attr(data-label);
+  display: block;
+}
+.table-mobile tr {
+  border-bottom: var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent);
+}
+.table-mobile .btn {
+  display: block;
+}
+@media (max-width: 575.98px) {
+  .table-mobile-sm {
+    display: block;
+  }
+  .table-mobile-sm thead {
+    display: none;
+  }
+  .table-mobile-sm tbody,
+  .table-mobile-sm tr {
+    display: flex;
+    flex-direction: column;
+  }
+  .table-mobile-sm td {
+    display: block;
+    padding: 0.75rem 0.75rem !important;
+    border: none;
+    color: var(--tblr-body-color) !important;
+  }
+  .table-mobile-sm td[data-label]:before {
+    font-size: 0.625rem;
+    font-weight: var(--tblr-font-weight-bold);
+    text-transform: uppercase;
+    letter-spacing: 0.04em;
+    line-height: 1rem;
+    color: var(--tblr-secondary);
+    content: attr(data-label);
+    display: block;
+  }
+  .table-mobile-sm tr {
+    border-bottom: var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent);
+  }
+  .table-mobile-sm .btn {
+    display: block;
+  }
+}
+@media (max-width: 767.98px) {
+  .table-mobile-md {
+    display: block;
+  }
+  .table-mobile-md thead {
+    display: none;
+  }
+  .table-mobile-md tbody,
+  .table-mobile-md tr {
+    display: flex;
+    flex-direction: column;
+  }
+  .table-mobile-md td {
+    display: block;
+    padding: 0.75rem 0.75rem !important;
+    border: none;
+    color: var(--tblr-body-color) !important;
+  }
+  .table-mobile-md td[data-label]:before {
+    font-size: 0.625rem;
+    font-weight: var(--tblr-font-weight-bold);
+    text-transform: uppercase;
+    letter-spacing: 0.04em;
+    line-height: 1rem;
+    color: var(--tblr-secondary);
+    content: attr(data-label);
+    display: block;
+  }
+  .table-mobile-md tr {
+    border-bottom: var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent);
+  }
+  .table-mobile-md .btn {
+    display: block;
+  }
+}
+@media (max-width: 991.98px) {
+  .table-mobile-lg {
+    display: block;
+  }
+  .table-mobile-lg thead {
+    display: none;
+  }
+  .table-mobile-lg tbody,
+  .table-mobile-lg tr {
+    display: flex;
+    flex-direction: column;
+  }
+  .table-mobile-lg td {
+    display: block;
+    padding: 0.75rem 0.75rem !important;
+    border: none;
+    color: var(--tblr-body-color) !important;
+  }
+  .table-mobile-lg td[data-label]:before {
+    font-size: 0.625rem;
+    font-weight: var(--tblr-font-weight-bold);
+    text-transform: uppercase;
+    letter-spacing: 0.04em;
+    line-height: 1rem;
+    color: var(--tblr-secondary);
+    content: attr(data-label);
+    display: block;
+  }
+  .table-mobile-lg tr {
+    border-bottom: var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent);
+  }
+  .table-mobile-lg .btn {
+    display: block;
+  }
+}
+@media (max-width: 1199.98px) {
+  .table-mobile-xl {
+    display: block;
+  }
+  .table-mobile-xl thead {
+    display: none;
+  }
+  .table-mobile-xl tbody,
+  .table-mobile-xl tr {
+    display: flex;
+    flex-direction: column;
+  }
+  .table-mobile-xl td {
+    display: block;
+    padding: 0.75rem 0.75rem !important;
+    border: none;
+    color: var(--tblr-body-color) !important;
+  }
+  .table-mobile-xl td[data-label]:before {
+    font-size: 0.625rem;
+    font-weight: var(--tblr-font-weight-bold);
+    text-transform: uppercase;
+    letter-spacing: 0.04em;
+    line-height: 1rem;
+    color: var(--tblr-secondary);
+    content: attr(data-label);
+    display: block;
+  }
+  .table-mobile-xl tr {
+    border-bottom: var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent);
+  }
+  .table-mobile-xl .btn {
+    display: block;
+  }
+}
+@media (max-width: 1399.98px) {
+  .table-mobile-xxl {
+    display: block;
+  }
+  .table-mobile-xxl thead {
+    display: none;
+  }
+  .table-mobile-xxl tbody,
+  .table-mobile-xxl tr {
+    display: flex;
+    flex-direction: column;
+  }
+  .table-mobile-xxl td {
+    display: block;
+    padding: 0.75rem 0.75rem !important;
+    border: none;
+    color: var(--tblr-body-color) !important;
+  }
+  .table-mobile-xxl td[data-label]:before {
+    font-size: 0.625rem;
+    font-weight: var(--tblr-font-weight-bold);
+    text-transform: uppercase;
+    letter-spacing: 0.04em;
+    line-height: 1rem;
+    color: var(--tblr-secondary);
+    content: attr(data-label);
+    display: block;
+  }
+  .table-mobile-xxl tr {
+    border-bottom: var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent);
+  }
+  .table-mobile-xxl .btn {
+    display: block;
+  }
+}
+
+/**
+Table sort
+ */
+.table-sort {
+  font: inherit;
+  color: inherit;
+  text-transform: inherit;
+  letter-spacing: inherit;
+  border: 0;
+  background: inherit;
+  display: block;
+  width: 100%;
+  text-align: inherit;
+  transition: color 0.3s;
+  margin: -0.5rem -0.75rem;
+  padding: 0.5rem 0.75rem;
+}
+@media (prefers-reduced-motion: reduce) {
+  .table-sort {
+    transition: none;
+  }
+}
+.table-sort:hover, .table-sort.asc, .table-sort.desc {
+  color: var(--tblr-body-color);
+}
+.table-sort:after {
+  content: "";
+  display: inline-flex;
+  width: 1rem;
+  height: 1rem;
+  vertical-align: bottom;
+  -webkit-mask-image: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' width='16' height='16' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='1'><path d='M5 7l3 -3l3 3'/><path d='M5 10l3 3l3 -3'/></svg>");
+          mask-image: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' width='16' height='16' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='1'><path d='M5 7l3 -3l3 3'/><path d='M5 10l3 3l3 -3'/></svg>");
+  background: currentColor;
+  margin-left: 0.25rem;
+}
+.table-sort.asc:after {
+  -webkit-mask-image: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' width='16' height='16'><path fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='1' d='M5 10l3 -3l3 3'/></svg>");
+          mask-image: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' width='16' height='16'><path fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='1' d='M5 10l3 -3l3 3'/></svg>");
+}
+.table-sort.desc:after {
+  -webkit-mask-image: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' width='16' height='16'><path fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='1' d='M5 7l3 3l3 -3'/></svg>");
+          mask-image: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' width='16' height='16'><path fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='1' d='M5 7l3 3l3 -3'/></svg>");
+}
+
+.table-borderless thead th {
+  background: transparent;
+}
+
+.tag {
+  --tblr-tag-height: 1.5rem;
+  border: 1px solid var(--tblr-border-color);
+  display: inline-flex;
+  align-items: center;
+  height: var(--tblr-tag-height);
+  border-radius: var(--tblr-border-radius);
+  padding: 0 0.5rem;
+  background: var(--tblr-bg-surface);
+  box-shadow: var(--tblr-box-shadow-input);
+  gap: 0.5rem;
+}
+.tag .btn-close {
+  margin-right: -0.25rem;
+  margin-left: -0.125rem;
+  padding: 0;
+  width: 1rem;
+  height: 1rem;
+  font-size: 0.5rem;
+}
+
+.tag-badge {
+  --tblr-badge-font-size: 0.625rem;
+  --tblr-badge-padding-x: .25rem;
+  --tblr-badge-padding-y: .125rem;
+  margin-right: -0.25rem;
+}
+
+.tag-avatar,
+.tag-flag,
+.tag-payment,
+.tag-icon,
+.tag-check {
+  margin-left: -0.25rem;
+}
+
+.tag-icon {
+  color: var(--tblr-secondary);
+  margin-right: -0.125rem;
+  width: 1rem;
+  height: 1rem;
+}
+
+.tag-check {
+  width: 1rem;
+  height: 1rem;
+  background-size: 1rem;
+}
+
+.tags-list {
+  --tblr-list-gap: 0.5rem;
+  display: flex;
+  flex-wrap: wrap;
+  gap: var(--tblr-list-gap);
+}
+
+.toast {
+  background: #ffffff;
+  border: var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent);
+  box-shadow: rgba(24, 36, 51, 0.04) 0 2px 4px 0;
+}
+.toast .toast-header {
+  -webkit-user-select: none;
+     -moz-user-select: none;
+      -ms-user-select: none;
+          user-select: none;
+}
+.toast button[data-bs-dismiss=toast] {
+  outline: none;
+}
+
+.toast-primary {
+  --tblr-toast-color: #0054a6;
+}
+
+.toast-secondary {
+  --tblr-toast-color: #667382;
+}
+
+.toast-success {
+  --tblr-toast-color: #2fb344;
+}
+
+.toast-info {
+  --tblr-toast-color: #4299e1;
+}
+
+.toast-warning {
+  --tblr-toast-color: #f76707;
+}
+
+.toast-danger {
+  --tblr-toast-color: #d63939;
+}
+
+.toast-light {
+  --tblr-toast-color: #fcfdfe;
+}
+
+.toast-dark {
+  --tblr-toast-color: #182433;
+}
+
+.toast-muted {
+  --tblr-toast-color: #667382;
+}
+
+.toast-blue {
+  --tblr-toast-color: #0054a6;
+}
+
+.toast-azure {
+  --tblr-toast-color: #4299e1;
+}
+
+.toast-indigo {
+  --tblr-toast-color: #4263eb;
+}
+
+.toast-purple {
+  --tblr-toast-color: #ae3ec9;
+}
+
+.toast-pink {
+  --tblr-toast-color: #d6336c;
+}
+
+.toast-red {
+  --tblr-toast-color: #d63939;
+}
+
+.toast-orange {
+  --tblr-toast-color: #f76707;
+}
+
+.toast-yellow {
+  --tblr-toast-color: #f59f00;
+}
+
+.toast-lime {
+  --tblr-toast-color: #74b816;
+}
+
+.toast-green {
+  --tblr-toast-color: #2fb344;
+}
+
+.toast-teal {
+  --tblr-toast-color: #0ca678;
+}
+
+.toast-cyan {
+  --tblr-toast-color: #17a2b8;
+}
+
+.toast-facebook {
+  --tblr-toast-color: #1877f2;
+}
+
+.toast-twitter {
+  --tblr-toast-color: #1da1f2;
+}
+
+.toast-linkedin {
+  --tblr-toast-color: #0a66c2;
+}
+
+.toast-google {
+  --tblr-toast-color: #dc4e41;
+}
+
+.toast-youtube {
+  --tblr-toast-color: #ff0000;
+}
+
+.toast-vimeo {
+  --tblr-toast-color: #1ab7ea;
+}
+
+.toast-dribbble {
+  --tblr-toast-color: #ea4c89;
+}
+
+.toast-github {
+  --tblr-toast-color: #181717;
+}
+
+.toast-instagram {
+  --tblr-toast-color: #e4405f;
+}
+
+.toast-pinterest {
+  --tblr-toast-color: #bd081c;
+}
+
+.toast-vk {
+  --tblr-toast-color: #6383a8;
+}
+
+.toast-rss {
+  --tblr-toast-color: #ffa500;
+}
+
+.toast-flickr {
+  --tblr-toast-color: #0063dc;
+}
+
+.toast-bitbucket {
+  --tblr-toast-color: #0052cc;
+}
+
+.toast-tabler {
+  --tblr-toast-color: #0054a6;
+}
+
+.toolbar {
+  display: flex;
+  flex-wrap: nowrap;
+  flex-shrink: 0;
+  margin: 0 -0.5rem;
+}
+.toolbar > * {
+  margin: 0 0.5rem;
+}
+
+.tracking {
+  --tblr-tracking-height: 1.5rem;
+  --tblr-tracking-gap-width: 0.125rem;
+  --tblr-tracking-block-border-radius: var(--tblr-border-radius);
+  display: flex;
+  gap: var(--tblr-tracking-gap-width);
+}
+
+.tracking-squares {
+  --tblr-tracking-block-border-radius: var(--tblr-border-radius-sm);
+}
+.tracking-squares .tracking-block {
+  height: auto;
+}
+.tracking-squares .tracking-block:before {
+  content: "";
+  display: block;
+  padding-top: 100%;
+}
+
+.tracking-block {
+  flex: 1;
+  border-radius: var(--tblr-tracking-block-border-radius);
+  height: var(--tblr-tracking-height);
+  min-width: 0.25rem;
+  background: var(--tblr-border-color);
+}
+
+.timeline {
+  --tblr-timeline-icon-size: 2.5rem;
+  position: relative;
+  list-style: none;
+  padding: 0;
+}
+
+.timeline-event {
+  position: relative;
+}
+.timeline-event:not(:last-child) {
+  margin-bottom: var(--tblr-page-padding);
+}
+.timeline-event:not(:last-child):before {
+  content: "";
+  position: absolute;
+  top: var(--tblr-timeline-icon-size);
+  left: calc(var(--tblr-timeline-icon-size) / 2);
+  bottom: calc(-1 * var(--tblr-page-padding));
+  width: var(--tblr-border-width);
+  background-color: var(--tblr-border-color);
+  border-radius: var(--tblr-border-radius);
+}
+
+.timeline-event-icon {
+  position: absolute;
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  width: var(--tblr-timeline-icon-size, 2.5rem);
+  height: var(--tblr-timeline-icon-size, 2.5rem);
+  background: var(--tblr-gray-200);
+  color: var(--tblr-secondary);
+  border-radius: var(--tblr-border-radius);
+  z-index: 5;
+}
+
+.timeline-event-card {
+  margin-left: calc(var(--tblr-timeline-icon-size, 2.5rem) + var(--tblr-page-padding));
+}
+
+.timeline-simple .timeline-event-icon {
+  display: none;
+}
+.timeline-simple .timeline-event-card {
+  margin-left: 0;
+}
+
+/**
+Horizontal rules
+ */
+/**
+Hr text
+ */
+.hr-text {
+  display: flex;
+  align-items: center;
+  margin: 2rem 0;
+  font-size: 0.625rem;
+  font-weight: var(--tblr-font-weight-bold);
+  text-transform: uppercase;
+  letter-spacing: 0.04em;
+  line-height: 1rem;
+  color: var(--tblr-secondary);
+  height: 1px;
+}
+.hr-text:after, .hr-text:before {
+  flex: 1 1 auto;
+  height: 1px;
+  background-color: var(--tblr-border-color);
+}
+.hr-text:before {
+  content: "";
+  margin-right: 0.5rem;
+}
+.hr-text:after {
+  content: "";
+  margin-left: 0.5rem;
+}
+.hr-text > *:first-child {
+  padding-right: 0.5rem;
+  padding-left: 0;
+  color: var(--tblr-secondary);
+}
+.hr-text.hr-text-left:before {
+  content: none;
+}
+.hr-text.hr-text-left > *:first-child {
+  padding-right: 0.5rem;
+  padding-left: 0.5rem;
+}
+.hr-text.hr-text-right:before {
+  content: "";
+}
+.hr-text.hr-text-right:after {
+  content: none;
+}
+.hr-text.hr-text-right > *:first-child {
+  padding-right: 0;
+  padding-left: 0.5rem;
+}
+.card > .hr-text {
+  margin: 0;
+}
+
+.hr-text-spaceless {
+  margin: -0.5rem 0;
+}
+
+.lead {
+  line-height: 1.4;
+}
+
+a {
+  -webkit-text-decoration-skip: ink;
+          text-decoration-skip-ink: auto;
+}
+
+h1 a,
+h2 a,
+h3 a,
+h4 a,
+h5 a,
+h6 a,
+.h1 a,
+.h2 a,
+.h3 a,
+.h4 a,
+.h5 a,
+.h6 a {
+  color: inherit;
+}
+h1 a:hover,
+h2 a:hover,
+h3 a:hover,
+h4 a:hover,
+h5 a:hover,
+h6 a:hover,
+.h1 a:hover,
+.h2 a:hover,
+.h3 a:hover,
+.h4 a:hover,
+.h5 a:hover,
+.h6 a:hover {
+  color: inherit;
+}
+
+h1,
+.h1 {
+  font-size: var(--tblr-font-size-h1);
+  line-height: var(--tblr-line-height-h1);
+}
+
+h2,
+.h2 {
+  font-size: var(--tblr-font-size-h2);
+  line-height: var(--tblr-line-height-h2);
+}
+
+h3,
+.h3 {
+  font-size: var(--tblr-font-size-h3);
+  line-height: var(--tblr-line-height-h3);
+}
+
+h4,
+.h4 {
+  font-size: var(--tblr-font-size-h4);
+  line-height: var(--tblr-line-height-h4);
+}
+
+h5,
+.h5 {
+  font-size: var(--tblr-font-size-h5);
+  line-height: var(--tblr-line-height-h5);
+}
+
+h6,
+.h6 {
+  font-size: var(--tblr-font-size-h6);
+  line-height: var(--tblr-line-height-h6);
+}
+
+strong,
+.strong,
+b {
+  font-weight: var(--tblr-font-weight-bold);
+}
+
+blockquote {
+  padding-left: 1rem;
+  border-left: 2px var(--tblr-border-style) var(--tblr-border-color);
+}
+blockquote p {
+  margin-bottom: 1rem;
+}
+blockquote cite {
+  display: block;
+  text-align: right;
+}
+blockquote cite:before {
+  content: "— ";
+}
+
+ul, ol {
+  padding-left: 1.5rem;
+}
+
+hr, .hr {
+  margin: 2rem 0;
+}
+
+dl dd:last-child {
+  margin-bottom: 0;
+}
+
+pre {
+  padding: 1rem;
+  background: var(--tblr-bg-surface-dark);
+  color: var(--tblr-light);
+  border-radius: var(--tblr-border-radius);
+}
+pre code {
+  background: transparent;
+}
+
+code {
+  background: var(--tblr-code-bg);
+  padding: 2px 4px;
+  border-radius: var(--tblr-border-radius);
+}
+
+kbd,
+.kbd {
+  border: var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color);
+  display: inline-block;
+  box-sizing: border-box;
+  max-width: 100%;
+  font-size: var(--tblr-font-size-h5);
+  font-weight: var(--tblr-font-weight-medium);
+  line-height: 1;
+  vertical-align: baseline;
+  border-radius: var(--tblr-border-radius);
+}
+
+img {
+  max-width: 100%;
+}
+
+.list-unstyled {
+  margin-left: 0;
+}
+
+/**
+Selection
+ */
+::-moz-selection {
+  background-color: rgba(var(--tblr-primary-rgb), 0.16);
+}
+::selection {
+  background-color: rgba(var(--tblr-primary-rgb), 0.16);
+}
+
+/**
+Links
+ */
+[class^=link-].disabled, [class*=" link-"].disabled {
+  color: var(--tblr-disabled-color);
+  pointer-events: none;
+}
+
+/**
+Subheader
+ */
+.subheader {
+  font-size: 0.625rem;
+  font-weight: var(--tblr-font-weight-bold);
+  text-transform: uppercase;
+  letter-spacing: 0.04em;
+  line-height: 1rem;
+  color: var(--tblr-secondary);
+}
+
+.chart {
+  display: block;
+  min-height: 10rem;
+}
+.chart text {
+  font-family: inherit;
+}
+
+.chart-sm {
+  height: 2.5rem;
+}
+
+.chart-lg {
+  height: 15rem;
+}
+
+.chart-square {
+  height: 5.75rem;
+}
+
+/**
+Chart sparkline
+ */
+.chart-sparkline {
+  position: relative;
+  width: 4rem;
+  height: 2.5rem;
+  line-height: 1;
+  min-height: 0 !important;
+}
+
+.chart-sparkline-sm {
+  height: 1.5rem;
+}
+
+.chart-sparkline-square {
+  width: 2.5rem;
+}
+
+.chart-sparkline-wide {
+  width: 6rem;
+}
+
+.chart-sparkline-label {
+  position: absolute;
+  top: 0;
+  right: 0;
+  bottom: 0;
+  left: 0;
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  font-size: 0.625rem;
+}
+.chart-sparkline-label .icon {
+  width: 1rem;
+  height: 1rem;
+  font-size: 1rem;
+}
+
+.offcanvas-header {
+  border-bottom: var(--tblr-border-width) var(--tblr-border-style) rgba(4, 32, 69, 0.14);
+}
+
+.offcanvas-footer {
+  padding: 1.5rem 1.5rem;
+}
+
+.offcanvas-title {
+  font-size: 1rem;
+  font-weight: var(--tblr-font-weight-medium);
+  line-height: 1.5rem;
+}
+
+.offcanvas-narrow {
+  width: 20rem;
+}
+
+.chat-bubbles {
+  display: flex;
+  flex-direction: column;
+  gap: 1rem;
+}
+
+.chat-bubble {
+  background: var(--tblr-bg-surface-secondary);
+  border-radius: var(--tblr-border-radius-lg);
+  padding: 1rem;
+  position: relative;
+}
+
+.chat-bubble-me {
+  background-color: var(--tblr-primary-lt);
+  box-shadow: none;
+}
+
+.chat-bubble-title {
+  margin-bottom: 0.25rem;
+}
+
+.chat-bubble-author {
+  font-weight: 600;
+}
+
+.chat-bubble-date {
+  color: var(--tblr-secondary);
+}
+
+.chat-bubble-body > *:last-child {
+  margin-bottom: 0;
+}
+
+.bg-white-overlay {
+  color: #ffffff;
+  background-color: rgba(252, 253, 254, 0.24);
+}
+
+.bg-dark-overlay {
+  color: #ffffff;
+  background-color: rgba(24, 36, 51, 0.24);
+}
+
+.bg-cover {
+  background-repeat: no-repeat;
+  background-size: cover;
+  background-position: center;
+}
+
+.bg-primary {
+  --tblr-bg-opacity: 1;
+  background-color: rgba(var(--tblr-primary-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.bg-primary-lt {
+  --tblr-bg-opacity: 1;
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-primary-rgb), var(--tblr-text-opacity)) !important;
+  background-color: rgba(var(--tblr-primary-lt-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.border-primary {
+  border-color: #0054a6 !important;
+}
+
+.bg-secondary {
+  --tblr-bg-opacity: 1;
+  background-color: rgba(var(--tblr-secondary-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.bg-secondary-lt {
+  --tblr-bg-opacity: 1;
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-secondary-rgb), var(--tblr-text-opacity)) !important;
+  background-color: rgba(var(--tblr-secondary-lt-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.border-secondary {
+  border-color: #667382 !important;
+}
+
+.bg-success {
+  --tblr-bg-opacity: 1;
+  background-color: rgba(var(--tblr-success-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.bg-success-lt {
+  --tblr-bg-opacity: 1;
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-success-rgb), var(--tblr-text-opacity)) !important;
+  background-color: rgba(var(--tblr-success-lt-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.border-success {
+  border-color: #2fb344 !important;
+}
+
+.bg-info {
+  --tblr-bg-opacity: 1;
+  background-color: rgba(var(--tblr-info-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.bg-info-lt {
+  --tblr-bg-opacity: 1;
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-info-rgb), var(--tblr-text-opacity)) !important;
+  background-color: rgba(var(--tblr-info-lt-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.border-info {
+  border-color: #4299e1 !important;
+}
+
+.bg-warning {
+  --tblr-bg-opacity: 1;
+  background-color: rgba(var(--tblr-warning-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.bg-warning-lt {
+  --tblr-bg-opacity: 1;
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-warning-rgb), var(--tblr-text-opacity)) !important;
+  background-color: rgba(var(--tblr-warning-lt-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.border-warning {
+  border-color: #f76707 !important;
+}
+
+.bg-danger {
+  --tblr-bg-opacity: 1;
+  background-color: rgba(var(--tblr-danger-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.bg-danger-lt {
+  --tblr-bg-opacity: 1;
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-danger-rgb), var(--tblr-text-opacity)) !important;
+  background-color: rgba(var(--tblr-danger-lt-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.border-danger {
+  border-color: #d63939 !important;
+}
+
+.bg-light {
+  --tblr-bg-opacity: 1;
+  background-color: rgba(var(--tblr-light-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.bg-light-lt {
+  --tblr-bg-opacity: 1;
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-light-rgb), var(--tblr-text-opacity)) !important;
+  background-color: rgba(var(--tblr-light-lt-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.border-light {
+  border-color: #fcfdfe !important;
+}
+
+.bg-dark {
+  --tblr-bg-opacity: 1;
+  background-color: rgba(var(--tblr-dark-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.bg-dark-lt {
+  --tblr-bg-opacity: 1;
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-dark-rgb), var(--tblr-text-opacity)) !important;
+  background-color: rgba(var(--tblr-dark-lt-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.border-dark {
+  border-color: #182433 !important;
+}
+
+.bg-muted {
+  --tblr-bg-opacity: 1;
+  background-color: rgba(var(--tblr-muted-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.bg-muted-lt {
+  --tblr-bg-opacity: 1;
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-muted-rgb), var(--tblr-text-opacity)) !important;
+  background-color: rgba(var(--tblr-muted-lt-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.border-muted {
+  border-color: #667382 !important;
+}
+
+.bg-blue {
+  --tblr-bg-opacity: 1;
+  background-color: rgba(var(--tblr-blue-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.bg-blue-lt {
+  --tblr-bg-opacity: 1;
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-blue-rgb), var(--tblr-text-opacity)) !important;
+  background-color: rgba(var(--tblr-blue-lt-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.border-blue {
+  border-color: #0054a6 !important;
+}
+
+.bg-azure {
+  --tblr-bg-opacity: 1;
+  background-color: rgba(var(--tblr-azure-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.bg-azure-lt {
+  --tblr-bg-opacity: 1;
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-azure-rgb), var(--tblr-text-opacity)) !important;
+  background-color: rgba(var(--tblr-azure-lt-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.border-azure {
+  border-color: #4299e1 !important;
+}
+
+.bg-indigo {
+  --tblr-bg-opacity: 1;
+  background-color: rgba(var(--tblr-indigo-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.bg-indigo-lt {
+  --tblr-bg-opacity: 1;
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-indigo-rgb), var(--tblr-text-opacity)) !important;
+  background-color: rgba(var(--tblr-indigo-lt-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.border-indigo {
+  border-color: #4263eb !important;
+}
+
+.bg-purple {
+  --tblr-bg-opacity: 1;
+  background-color: rgba(var(--tblr-purple-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.bg-purple-lt {
+  --tblr-bg-opacity: 1;
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-purple-rgb), var(--tblr-text-opacity)) !important;
+  background-color: rgba(var(--tblr-purple-lt-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.border-purple {
+  border-color: #ae3ec9 !important;
+}
+
+.bg-pink {
+  --tblr-bg-opacity: 1;
+  background-color: rgba(var(--tblr-pink-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.bg-pink-lt {
+  --tblr-bg-opacity: 1;
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-pink-rgb), var(--tblr-text-opacity)) !important;
+  background-color: rgba(var(--tblr-pink-lt-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.border-pink {
+  border-color: #d6336c !important;
+}
+
+.bg-red {
+  --tblr-bg-opacity: 1;
+  background-color: rgba(var(--tblr-red-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.bg-red-lt {
+  --tblr-bg-opacity: 1;
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-red-rgb), var(--tblr-text-opacity)) !important;
+  background-color: rgba(var(--tblr-red-lt-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.border-red {
+  border-color: #d63939 !important;
+}
+
+.bg-orange {
+  --tblr-bg-opacity: 1;
+  background-color: rgba(var(--tblr-orange-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.bg-orange-lt {
+  --tblr-bg-opacity: 1;
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-orange-rgb), var(--tblr-text-opacity)) !important;
+  background-color: rgba(var(--tblr-orange-lt-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.border-orange {
+  border-color: #f76707 !important;
+}
+
+.bg-yellow {
+  --tblr-bg-opacity: 1;
+  background-color: rgba(var(--tblr-yellow-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.bg-yellow-lt {
+  --tblr-bg-opacity: 1;
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-yellow-rgb), var(--tblr-text-opacity)) !important;
+  background-color: rgba(var(--tblr-yellow-lt-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.border-yellow {
+  border-color: #f59f00 !important;
+}
+
+.bg-lime {
+  --tblr-bg-opacity: 1;
+  background-color: rgba(var(--tblr-lime-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.bg-lime-lt {
+  --tblr-bg-opacity: 1;
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-lime-rgb), var(--tblr-text-opacity)) !important;
+  background-color: rgba(var(--tblr-lime-lt-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.border-lime {
+  border-color: #74b816 !important;
+}
+
+.bg-green {
+  --tblr-bg-opacity: 1;
+  background-color: rgba(var(--tblr-green-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.bg-green-lt {
+  --tblr-bg-opacity: 1;
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-green-rgb), var(--tblr-text-opacity)) !important;
+  background-color: rgba(var(--tblr-green-lt-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.border-green {
+  border-color: #2fb344 !important;
+}
+
+.bg-teal {
+  --tblr-bg-opacity: 1;
+  background-color: rgba(var(--tblr-teal-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.bg-teal-lt {
+  --tblr-bg-opacity: 1;
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-teal-rgb), var(--tblr-text-opacity)) !important;
+  background-color: rgba(var(--tblr-teal-lt-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.border-teal {
+  border-color: #0ca678 !important;
+}
+
+.bg-cyan {
+  --tblr-bg-opacity: 1;
+  background-color: rgba(var(--tblr-cyan-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.bg-cyan-lt {
+  --tblr-bg-opacity: 1;
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-cyan-rgb), var(--tblr-text-opacity)) !important;
+  background-color: rgba(var(--tblr-cyan-lt-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.border-cyan {
+  border-color: #17a2b8 !important;
+}
+
+.bg-facebook {
+  --tblr-bg-opacity: 1;
+  background-color: rgba(var(--tblr-facebook-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.bg-facebook-lt {
+  --tblr-bg-opacity: 1;
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-facebook-rgb), var(--tblr-text-opacity)) !important;
+  background-color: rgba(var(--tblr-facebook-lt-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.border-facebook {
+  border-color: #1877f2 !important;
+}
+
+.bg-twitter {
+  --tblr-bg-opacity: 1;
+  background-color: rgba(var(--tblr-twitter-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.bg-twitter-lt {
+  --tblr-bg-opacity: 1;
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-twitter-rgb), var(--tblr-text-opacity)) !important;
+  background-color: rgba(var(--tblr-twitter-lt-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.border-twitter {
+  border-color: #1da1f2 !important;
+}
+
+.bg-linkedin {
+  --tblr-bg-opacity: 1;
+  background-color: rgba(var(--tblr-linkedin-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.bg-linkedin-lt {
+  --tblr-bg-opacity: 1;
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-linkedin-rgb), var(--tblr-text-opacity)) !important;
+  background-color: rgba(var(--tblr-linkedin-lt-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.border-linkedin {
+  border-color: #0a66c2 !important;
+}
+
+.bg-google {
+  --tblr-bg-opacity: 1;
+  background-color: rgba(var(--tblr-google-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.bg-google-lt {
+  --tblr-bg-opacity: 1;
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-google-rgb), var(--tblr-text-opacity)) !important;
+  background-color: rgba(var(--tblr-google-lt-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.border-google {
+  border-color: #dc4e41 !important;
+}
+
+.bg-youtube {
+  --tblr-bg-opacity: 1;
+  background-color: rgba(var(--tblr-youtube-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.bg-youtube-lt {
+  --tblr-bg-opacity: 1;
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-youtube-rgb), var(--tblr-text-opacity)) !important;
+  background-color: rgba(var(--tblr-youtube-lt-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.border-youtube {
+  border-color: #ff0000 !important;
+}
+
+.bg-vimeo {
+  --tblr-bg-opacity: 1;
+  background-color: rgba(var(--tblr-vimeo-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.bg-vimeo-lt {
+  --tblr-bg-opacity: 1;
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-vimeo-rgb), var(--tblr-text-opacity)) !important;
+  background-color: rgba(var(--tblr-vimeo-lt-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.border-vimeo {
+  border-color: #1ab7ea !important;
+}
+
+.bg-dribbble {
+  --tblr-bg-opacity: 1;
+  background-color: rgba(var(--tblr-dribbble-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.bg-dribbble-lt {
+  --tblr-bg-opacity: 1;
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-dribbble-rgb), var(--tblr-text-opacity)) !important;
+  background-color: rgba(var(--tblr-dribbble-lt-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.border-dribbble {
+  border-color: #ea4c89 !important;
+}
+
+.bg-github {
+  --tblr-bg-opacity: 1;
+  background-color: rgba(var(--tblr-github-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.bg-github-lt {
+  --tblr-bg-opacity: 1;
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-github-rgb), var(--tblr-text-opacity)) !important;
+  background-color: rgba(var(--tblr-github-lt-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.border-github {
+  border-color: #181717 !important;
+}
+
+.bg-instagram {
+  --tblr-bg-opacity: 1;
+  background-color: rgba(var(--tblr-instagram-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.bg-instagram-lt {
+  --tblr-bg-opacity: 1;
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-instagram-rgb), var(--tblr-text-opacity)) !important;
+  background-color: rgba(var(--tblr-instagram-lt-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.border-instagram {
+  border-color: #e4405f !important;
+}
+
+.bg-pinterest {
+  --tblr-bg-opacity: 1;
+  background-color: rgba(var(--tblr-pinterest-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.bg-pinterest-lt {
+  --tblr-bg-opacity: 1;
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-pinterest-rgb), var(--tblr-text-opacity)) !important;
+  background-color: rgba(var(--tblr-pinterest-lt-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.border-pinterest {
+  border-color: #bd081c !important;
+}
+
+.bg-vk {
+  --tblr-bg-opacity: 1;
+  background-color: rgba(var(--tblr-vk-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.bg-vk-lt {
+  --tblr-bg-opacity: 1;
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-vk-rgb), var(--tblr-text-opacity)) !important;
+  background-color: rgba(var(--tblr-vk-lt-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.border-vk {
+  border-color: #6383a8 !important;
+}
+
+.bg-rss {
+  --tblr-bg-opacity: 1;
+  background-color: rgba(var(--tblr-rss-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.bg-rss-lt {
+  --tblr-bg-opacity: 1;
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-rss-rgb), var(--tblr-text-opacity)) !important;
+  background-color: rgba(var(--tblr-rss-lt-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.border-rss {
+  border-color: #ffa500 !important;
+}
+
+.bg-flickr {
+  --tblr-bg-opacity: 1;
+  background-color: rgba(var(--tblr-flickr-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.bg-flickr-lt {
+  --tblr-bg-opacity: 1;
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-flickr-rgb), var(--tblr-text-opacity)) !important;
+  background-color: rgba(var(--tblr-flickr-lt-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.border-flickr {
+  border-color: #0063dc !important;
+}
+
+.bg-bitbucket {
+  --tblr-bg-opacity: 1;
+  background-color: rgba(var(--tblr-bitbucket-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.bg-bitbucket-lt {
+  --tblr-bg-opacity: 1;
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-bitbucket-rgb), var(--tblr-text-opacity)) !important;
+  background-color: rgba(var(--tblr-bitbucket-lt-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.border-bitbucket {
+  border-color: #0052cc !important;
+}
+
+.bg-tabler {
+  --tblr-bg-opacity: 1;
+  background-color: rgba(var(--tblr-tabler-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.bg-tabler-lt {
+  --tblr-bg-opacity: 1;
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-tabler-rgb), var(--tblr-text-opacity)) !important;
+  background-color: rgba(var(--tblr-tabler-lt-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.border-tabler {
+  border-color: #0054a6 !important;
+}
+
+.bg-white {
+  --tblr-bg-opacity: 1;
+  background-color: rgba(var(--tblr-white-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.bg-white-lt {
+  --tblr-bg-opacity: 1;
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-white-rgb), var(--tblr-text-opacity)) !important;
+  background-color: rgba(var(--tblr-white-lt-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.border-white {
+  border-color: #ffffff !important;
+}
+
+.text-primary {
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-primary-rgb), var(--tblr-text-opacity)) !important;
+}
+
+.text-primary-fg {
+  color: var(--tblr-primary-fg) !important;
+}
+
+.text-secondary {
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-secondary-rgb), var(--tblr-text-opacity)) !important;
+}
+
+.text-secondary-fg {
+  color: var(--tblr-secondary-fg) !important;
+}
+
+.text-success {
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-success-rgb), var(--tblr-text-opacity)) !important;
+}
+
+.text-success-fg {
+  color: var(--tblr-success-fg) !important;
+}
+
+.text-info {
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-info-rgb), var(--tblr-text-opacity)) !important;
+}
+
+.text-info-fg {
+  color: var(--tblr-info-fg) !important;
+}
+
+.text-warning {
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-warning-rgb), var(--tblr-text-opacity)) !important;
+}
+
+.text-warning-fg {
+  color: var(--tblr-warning-fg) !important;
+}
+
+.text-danger {
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-danger-rgb), var(--tblr-text-opacity)) !important;
+}
+
+.text-danger-fg {
+  color: var(--tblr-danger-fg) !important;
+}
+
+.text-light {
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-light-rgb), var(--tblr-text-opacity)) !important;
+}
+
+.text-light-fg {
+  color: var(--tblr-light-fg) !important;
+}
+
+.text-dark {
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-dark-rgb), var(--tblr-text-opacity)) !important;
+}
+
+.text-dark-fg {
+  color: var(--tblr-dark-fg) !important;
+}
+
+.text-muted {
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-muted-rgb), var(--tblr-text-opacity)) !important;
+}
+
+.text-muted-fg {
+  color: var(--tblr-muted-fg) !important;
+}
+
+.text-blue {
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-blue-rgb), var(--tblr-text-opacity)) !important;
+}
+
+.text-blue-fg {
+  color: var(--tblr-blue-fg) !important;
+}
+
+.text-azure {
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-azure-rgb), var(--tblr-text-opacity)) !important;
+}
+
+.text-azure-fg {
+  color: var(--tblr-azure-fg) !important;
+}
+
+.text-indigo {
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-indigo-rgb), var(--tblr-text-opacity)) !important;
+}
+
+.text-indigo-fg {
+  color: var(--tblr-indigo-fg) !important;
+}
+
+.text-purple {
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-purple-rgb), var(--tblr-text-opacity)) !important;
+}
+
+.text-purple-fg {
+  color: var(--tblr-purple-fg) !important;
+}
+
+.text-pink {
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-pink-rgb), var(--tblr-text-opacity)) !important;
+}
+
+.text-pink-fg {
+  color: var(--tblr-pink-fg) !important;
+}
+
+.text-red {
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-red-rgb), var(--tblr-text-opacity)) !important;
+}
+
+.text-red-fg {
+  color: var(--tblr-red-fg) !important;
+}
+
+.text-orange {
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-orange-rgb), var(--tblr-text-opacity)) !important;
+}
+
+.text-orange-fg {
+  color: var(--tblr-orange-fg) !important;
+}
+
+.text-yellow {
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-yellow-rgb), var(--tblr-text-opacity)) !important;
+}
+
+.text-yellow-fg {
+  color: var(--tblr-yellow-fg) !important;
+}
+
+.text-lime {
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-lime-rgb), var(--tblr-text-opacity)) !important;
+}
+
+.text-lime-fg {
+  color: var(--tblr-lime-fg) !important;
+}
+
+.text-green {
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-green-rgb), var(--tblr-text-opacity)) !important;
+}
+
+.text-green-fg {
+  color: var(--tblr-green-fg) !important;
+}
+
+.text-teal {
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-teal-rgb), var(--tblr-text-opacity)) !important;
+}
+
+.text-teal-fg {
+  color: var(--tblr-teal-fg) !important;
+}
+
+.text-cyan {
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-cyan-rgb), var(--tblr-text-opacity)) !important;
+}
+
+.text-cyan-fg {
+  color: var(--tblr-cyan-fg) !important;
+}
+
+.text-facebook {
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-facebook-rgb), var(--tblr-text-opacity)) !important;
+}
+
+.text-facebook-fg {
+  color: var(--tblr-facebook-fg) !important;
+}
+
+.text-twitter {
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-twitter-rgb), var(--tblr-text-opacity)) !important;
+}
+
+.text-twitter-fg {
+  color: var(--tblr-twitter-fg) !important;
+}
+
+.text-linkedin {
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-linkedin-rgb), var(--tblr-text-opacity)) !important;
+}
+
+.text-linkedin-fg {
+  color: var(--tblr-linkedin-fg) !important;
+}
+
+.text-google {
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-google-rgb), var(--tblr-text-opacity)) !important;
+}
+
+.text-google-fg {
+  color: var(--tblr-google-fg) !important;
+}
+
+.text-youtube {
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-youtube-rgb), var(--tblr-text-opacity)) !important;
+}
+
+.text-youtube-fg {
+  color: var(--tblr-youtube-fg) !important;
+}
+
+.text-vimeo {
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-vimeo-rgb), var(--tblr-text-opacity)) !important;
+}
+
+.text-vimeo-fg {
+  color: var(--tblr-vimeo-fg) !important;
+}
+
+.text-dribbble {
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-dribbble-rgb), var(--tblr-text-opacity)) !important;
+}
+
+.text-dribbble-fg {
+  color: var(--tblr-dribbble-fg) !important;
+}
+
+.text-github {
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-github-rgb), var(--tblr-text-opacity)) !important;
+}
+
+.text-github-fg {
+  color: var(--tblr-github-fg) !important;
+}
+
+.text-instagram {
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-instagram-rgb), var(--tblr-text-opacity)) !important;
+}
+
+.text-instagram-fg {
+  color: var(--tblr-instagram-fg) !important;
+}
+
+.text-pinterest {
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-pinterest-rgb), var(--tblr-text-opacity)) !important;
+}
+
+.text-pinterest-fg {
+  color: var(--tblr-pinterest-fg) !important;
+}
+
+.text-vk {
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-vk-rgb), var(--tblr-text-opacity)) !important;
+}
+
+.text-vk-fg {
+  color: var(--tblr-vk-fg) !important;
+}
+
+.text-rss {
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-rss-rgb), var(--tblr-text-opacity)) !important;
+}
+
+.text-rss-fg {
+  color: var(--tblr-rss-fg) !important;
+}
+
+.text-flickr {
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-flickr-rgb), var(--tblr-text-opacity)) !important;
+}
+
+.text-flickr-fg {
+  color: var(--tblr-flickr-fg) !important;
+}
+
+.text-bitbucket {
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-bitbucket-rgb), var(--tblr-text-opacity)) !important;
+}
+
+.text-bitbucket-fg {
+  color: var(--tblr-bitbucket-fg) !important;
+}
+
+.text-tabler {
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-tabler-rgb), var(--tblr-text-opacity)) !important;
+}
+
+.text-tabler-fg {
+  color: var(--tblr-tabler-fg) !important;
+}
+
+.bg-gray-50 {
+  --tblr-bg-opacity: .1;
+  background-color: rgba(var(--tblr-gray-50-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.text-gray-50-fg {
+  color: #182433 !important;
+}
+
+.bg-gray-100 {
+  --tblr-bg-opacity: .1;
+  background-color: rgba(var(--tblr-gray-100-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.text-gray-100-fg {
+  color: #182433 !important;
+}
+
+.bg-gray-200 {
+  --tblr-bg-opacity: .1;
+  background-color: rgba(var(--tblr-gray-200-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.text-gray-200-fg {
+  color: #182433 !important;
+}
+
+.bg-gray-300 {
+  --tblr-bg-opacity: .1;
+  background-color: rgba(var(--tblr-gray-300-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.text-gray-300-fg {
+  color: #182433 !important;
+}
+
+.bg-gray-400 {
+  --tblr-bg-opacity: .1;
+  background-color: rgba(var(--tblr-gray-400-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.text-gray-400-fg {
+  color: #fcfdfe !important;
+}
+
+.bg-gray-500 {
+  --tblr-bg-opacity: .1;
+  background-color: rgba(var(--tblr-gray-500-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.text-gray-500-fg {
+  color: #fcfdfe !important;
+}
+
+.bg-gray-600 {
+  --tblr-bg-opacity: .1;
+  background-color: rgba(var(--tblr-gray-600-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.text-gray-600-fg {
+  color: #fcfdfe !important;
+}
+
+.bg-gray-700 {
+  --tblr-bg-opacity: .1;
+  background-color: rgba(var(--tblr-gray-700-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.text-gray-700-fg {
+  color: #fcfdfe !important;
+}
+
+.bg-gray-800 {
+  --tblr-bg-opacity: .1;
+  background-color: rgba(var(--tblr-gray-800-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.text-gray-800-fg {
+  color: #fcfdfe !important;
+}
+
+.bg-gray-900 {
+  --tblr-bg-opacity: .1;
+  background-color: rgba(var(--tblr-gray-900-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.text-gray-900-fg {
+  color: #fcfdfe !important;
+}
+
+/*
+Scrollable
+*/
+.scrollable {
+  overflow-x: hidden;
+  overflow-y: auto;
+  -webkit-overflow-scrolling: touch;
+}
+.scrollable.hover {
+  overflow-y: hidden;
+}
+.scrollable.hover > * {
+  margin-top: -1px;
+}
+.scrollable.hover:hover, .scrollable.hover:focus, .scrollable.hover:active {
+  overflow: visible;
+  overflow-y: auto;
+}
+.touch .scrollable {
+  overflow-y: auto !important;
+}
+
+.scroll-x,
+.scroll-y {
+  overflow: hidden;
+  -webkit-overflow-scrolling: touch;
+}
+
+.scroll-y {
+  overflow-y: auto;
+}
+
+.scroll-x {
+  overflow-x: auto;
+}
+
+.no-scroll {
+  overflow: hidden;
+}
+
+.w-0 {
+  width: 0 !important;
+}
+
+.h-0 {
+  height: 0 !important;
+}
+
+.w-1 {
+  width: 0.25rem !important;
+}
+
+.h-1 {
+  height: 0.25rem !important;
+}
+
+.w-2 {
+  width: 0.5rem !important;
+}
+
+.h-2 {
+  height: 0.5rem !important;
+}
+
+.w-3 {
+  width: 1rem !important;
+}
+
+.h-3 {
+  height: 1rem !important;
+}
+
+.w-4 {
+  width: 1.5rem !important;
+}
+
+.h-4 {
+  height: 1.5rem !important;
+}
+
+.w-5 {
+  width: 2rem !important;
+}
+
+.h-5 {
+  height: 2rem !important;
+}
+
+.w-6 {
+  width: 3rem !important;
+}
+
+.h-6 {
+  height: 3rem !important;
+}
+
+.w-7 {
+  width: 5rem !important;
+}
+
+.h-7 {
+  height: 5rem !important;
+}
+
+.w-8 {
+  width: 8rem !important;
+}
+
+.h-8 {
+  height: 8rem !important;
+}
+
+.w-auto {
+  width: auto !important;
+}
+
+.h-auto {
+  height: auto !important;
+}
+
+.w-px {
+  width: 1px !important;
+}
+
+.h-px {
+  height: 1px !important;
+}
+
+.w-full {
+  width: 100% !important;
+}
+
+.h-full {
+  height: 100% !important;
+}
+
+.opacity-0 {
+  opacity: 0 !important;
+}
+
+.opacity-5 {
+  opacity: 0.05 !important;
+}
+
+.opacity-10 {
+  opacity: 0.1 !important;
+}
+
+.opacity-15 {
+  opacity: 0.15 !important;
+}
+
+.opacity-20 {
+  opacity: 0.2 !important;
+}
+
+.opacity-25 {
+  opacity: 0.25 !important;
+}
+
+.opacity-30 {
+  opacity: 0.3 !important;
+}
+
+.opacity-35 {
+  opacity: 0.35 !important;
+}
+
+.opacity-40 {
+  opacity: 0.4 !important;
+}
+
+.opacity-45 {
+  opacity: 0.45 !important;
+}
+
+.opacity-50 {
+  opacity: 0.5 !important;
+}
+
+.opacity-55 {
+  opacity: 0.55 !important;
+}
+
+.opacity-60 {
+  opacity: 0.6 !important;
+}
+
+.opacity-65 {
+  opacity: 0.65 !important;
+}
+
+.opacity-70 {
+  opacity: 0.7 !important;
+}
+
+.opacity-75 {
+  opacity: 0.75 !important;
+}
+
+.opacity-80 {
+  opacity: 0.8 !important;
+}
+
+.opacity-85 {
+  opacity: 0.85 !important;
+}
+
+.opacity-90 {
+  opacity: 0.9 !important;
+}
+
+.opacity-95 {
+  opacity: 0.95 !important;
+}
+
+.opacity-100 {
+  opacity: 1 !important;
+}
+
+.hover-shadow-sm:hover {
+  box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075) !important;
+}
+
+.hover-shadow:hover {
+  box-shadow: rgba(var(--tblr-body-color-rgb), 0.04) 0 2px 4px 0 !important;
+}
+
+.hover-shadow-lg:hover {
+  box-shadow: 0 1rem 3rem rgba(0, 0, 0, 0.175) !important;
+}
+
+.hover-shadow-none:hover {
+  box-shadow: none !important;
+}
+
+/**
+Antialiasing
+ */
+.antialiased {
+  -webkit-font-smoothing: antialiased;
+  -moz-osx-font-smoothing: grayscale;
+}
+
+.subpixel-antialiased {
+  -webkit-font-smoothing: auto;
+  -moz-osx-font-smoothing: auto;
+}

Різницю між файлами не показано, бо вона завелика
+ 2 - 28571
public/css/tabler.min.css


+ 25777 - 0
public/css/tabler.rtl.css

@@ -0,0 +1,25777 @@
+/*!
+* Tabler v1.0.0-beta20 (https://tabler.io)
+* @version 1.0.0-beta20
+* @link https://tabler.io
+* Copyright 2018-2023 The Tabler Authors
+* Copyright 2018-2023 codecalm.net Paweł Kuna
+* Licensed under MIT (https://github.com/tabler/tabler/blob/master/LICENSE)
+*/
+@charset "UTF-8";
+/* prettier-ignore */
+/* prettier-ignore */
+:root,
+[data-bs-theme=light] {
+  --tblr-blue: #0054a6;
+  --tblr-indigo: #4263eb;
+  --tblr-purple: #ae3ec9;
+  --tblr-pink: #d6336c;
+  --tblr-red: #d63939;
+  --tblr-orange: #f76707;
+  --tblr-yellow: #f59f00;
+  --tblr-green: #2fb344;
+  --tblr-teal: #0ca678;
+  --tblr-cyan: #17a2b8;
+  --tblr-black: #000000;
+  --tblr-white: #ffffff;
+  --tblr-gray: #667382;
+  --tblr-gray-dark: #182433;
+  --tblr-gray-100: #f6f8fb;
+  --tblr-gray-200: #eef1f4;
+  --tblr-gray-300: #dadfe5;
+  --tblr-gray-400: #bbc3cd;
+  --tblr-gray-500: #929dab;
+  --tblr-gray-600: #667382;
+  --tblr-gray-700: #3a4859;
+  --tblr-gray-800: #182433;
+  --tblr-gray-900: #040a11;
+  --tblr-primary: #0054a6;
+  --tblr-secondary: #667382;
+  --tblr-success: #2fb344;
+  --tblr-info: #4299e1;
+  --tblr-warning: #f76707;
+  --tblr-danger: #d63939;
+  --tblr-light: #fcfdfe;
+  --tblr-dark: #182433;
+  --tblr-muted: #667382;
+  --tblr-blue: #0054a6;
+  --tblr-azure: #4299e1;
+  --tblr-indigo: #4263eb;
+  --tblr-purple: #ae3ec9;
+  --tblr-pink: #d6336c;
+  --tblr-red: #d63939;
+  --tblr-orange: #f76707;
+  --tblr-yellow: #f59f00;
+  --tblr-lime: #74b816;
+  --tblr-green: #2fb344;
+  --tblr-teal: #0ca678;
+  --tblr-cyan: #17a2b8;
+  --tblr-facebook: #1877f2;
+  --tblr-twitter: #1da1f2;
+  --tblr-linkedin: #0a66c2;
+  --tblr-google: #dc4e41;
+  --tblr-youtube: #ff0000;
+  --tblr-vimeo: #1ab7ea;
+  --tblr-dribbble: #ea4c89;
+  --tblr-github: #181717;
+  --tblr-instagram: #e4405f;
+  --tblr-pinterest: #bd081c;
+  --tblr-vk: #6383a8;
+  --tblr-rss: #ffa500;
+  --tblr-flickr: #0063dc;
+  --tblr-bitbucket: #0052cc;
+  --tblr-tabler: #0054a6;
+  --tblr-primary-rgb: 0, 84, 166;
+  --tblr-secondary-rgb: 102, 115, 130;
+  --tblr-success-rgb: 47, 179, 68;
+  --tblr-info-rgb: 66, 153, 225;
+  --tblr-warning-rgb: 247, 103, 7;
+  --tblr-danger-rgb: 214, 57, 57;
+  --tblr-light-rgb: 252, 253, 254;
+  --tblr-dark-rgb: 24, 36, 51;
+  --tblr-muted-rgb: 102, 115, 130;
+  --tblr-blue-rgb: 0, 84, 166;
+  --tblr-azure-rgb: 66, 153, 225;
+  --tblr-indigo-rgb: 66, 99, 235;
+  --tblr-purple-rgb: 174, 62, 201;
+  --tblr-pink-rgb: 214, 51, 108;
+  --tblr-red-rgb: 214, 57, 57;
+  --tblr-orange-rgb: 247, 103, 7;
+  --tblr-yellow-rgb: 245, 159, 0;
+  --tblr-lime-rgb: 116, 184, 22;
+  --tblr-green-rgb: 47, 179, 68;
+  --tblr-teal-rgb: 12, 166, 120;
+  --tblr-cyan-rgb: 23, 162, 184;
+  --tblr-facebook-rgb: 24, 119, 242;
+  --tblr-twitter-rgb: 29, 161, 242;
+  --tblr-linkedin-rgb: 10, 102, 194;
+  --tblr-google-rgb: 220, 78, 65;
+  --tblr-youtube-rgb: 255, 0, 0;
+  --tblr-vimeo-rgb: 26, 183, 234;
+  --tblr-dribbble-rgb: 234, 76, 137;
+  --tblr-github-rgb: 24, 23, 23;
+  --tblr-instagram-rgb: 228, 64, 95;
+  --tblr-pinterest-rgb: 189, 8, 28;
+  --tblr-vk-rgb: 99, 131, 168;
+  --tblr-rss-rgb: 255, 165, 0;
+  --tblr-flickr-rgb: 0, 99, 220;
+  --tblr-bitbucket-rgb: 0, 82, 204;
+  --tblr-tabler-rgb: 0, 84, 166;
+  --tblr-primary-text-emphasis: #002242;
+  --tblr-secondary-text-emphasis: #292e34;
+  --tblr-success-text-emphasis: #13481b;
+  --tblr-info-text-emphasis: #1a3d5a;
+  --tblr-warning-text-emphasis: #632903;
+  --tblr-danger-text-emphasis: #561717;
+  --tblr-light-text-emphasis: #3a4859;
+  --tblr-dark-text-emphasis: #3a4859;
+  --tblr-primary-bg-subtle: #ccdded;
+  --tblr-secondary-bg-subtle: #e0e3e6;
+  --tblr-success-bg-subtle: #d5f0da;
+  --tblr-info-bg-subtle: #d9ebf9;
+  --tblr-warning-bg-subtle: #fde1cd;
+  --tblr-danger-bg-subtle: #f7d7d7;
+  --tblr-light-bg-subtle: #fbfcfd;
+  --tblr-dark-bg-subtle: #bbc3cd;
+  --tblr-primary-border-subtle: #99bbdb;
+  --tblr-secondary-border-subtle: #c2c7cd;
+  --tblr-success-border-subtle: #ace1b4;
+  --tblr-info-border-subtle: #b3d6f3;
+  --tblr-warning-border-subtle: #fcc29c;
+  --tblr-danger-border-subtle: #efb0b0;
+  --tblr-light-border-subtle: #eef1f4;
+  --tblr-dark-border-subtle: #929dab;
+  --tblr-white-rgb: 255, 255, 255;
+  --tblr-black-rgb: 0, 0, 0;
+  --tblr-font-sans-serif:    -apple-system, BlinkMacSystemFont, San Francisco, Segoe UI, Roboto, Helvetica Neue, sans-serif;
+  --tblr-font-monospace:  Menlo, Monaco, Consolas, Liberation Mono, Courier New, monospace;
+  --tblr-gradient: linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));
+  --tblr-body-font-family: var(--tblr-font-sans-serif);
+  --tblr-body-font-size: 0.875rem;
+  --tblr-body-font-weight: 400;
+  --tblr-body-line-height: 1.4285714286;
+  --tblr-body-color: #182433;
+  --tblr-body-color-rgb: 24, 36, 51;
+  --tblr-body-bg: #f6f8fb;
+  --tblr-body-bg-rgb: 246, 248, 251;
+  --tblr-emphasis-color: #182433;
+  --tblr-emphasis-color-rgb: 24, 36, 51;
+  --tblr-secondary-color: rgba(24, 36, 51, 0.75);
+  --tblr-secondary-color-rgb: 24, 36, 51;
+  --tblr-secondary-bg: #eef1f4;
+  --tblr-secondary-bg-rgb: 238, 241, 244;
+  --tblr-tertiary-color: rgba(24, 36, 51, 0.5);
+  --tblr-tertiary-color-rgb: 24, 36, 51;
+  --tblr-tertiary-bg: #f6f8fb;
+  --tblr-tertiary-bg-rgb: 246, 248, 251;
+  --tblr-heading-color: inherit;
+  --tblr-link-color: #0054a6;
+  --tblr-link-color-rgb: 0, 84, 166;
+  --tblr-link-decoration: none;
+  --tblr-link-hover-color: #004385;
+  --tblr-link-hover-color-rgb: 0, 67, 133;
+  --tblr-link-hover-decoration: underline;
+  --tblr-code-color: var(--tblr-gray-600);
+  --tblr-highlight-bg: #fdeccc;
+  --tblr-border-width: 1px;
+  --tblr-border-style: solid;
+  --tblr-border-color: #dadfe5;
+  --tblr-border-color-translucent: rgba(4, 32, 69, 0.14);
+  --tblr-border-radius: 4px;
+  --tblr-border-radius-sm: 2px;
+  --tblr-border-radius-lg: 8px;
+  --tblr-border-radius-xl: 1rem;
+  --tblr-border-radius-xxl: 2rem;
+  --tblr-border-radius-2xl: var(--tblr-border-radius-xxl);
+  --tblr-border-radius-pill: 100rem;
+  --tblr-box-shadow: rgba(var(--tblr-body-color-rgb), 0.04) 0 2px 4px 0;
+  --tblr-box-shadow-sm: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075);
+  --tblr-box-shadow-lg: 0 1rem 3rem rgba(0, 0, 0, 0.175);
+  --tblr-box-shadow-inset: 0 0 transparent;
+  --tblr-focus-ring-width: 0.25rem;
+  --tblr-focus-ring-opacity: 0.25;
+  --tblr-focus-ring-color: rgba(var(--tblr-primary-rgb), 0.25);
+  --tblr-form-valid-color: #2fb344;
+  --tblr-form-valid-border-color: #2fb344;
+  --tblr-form-invalid-color: #d63939;
+  --tblr-form-invalid-border-color: #d63939;
+}
+
+[data-bs-theme=dark], body[data-bs-theme=dark] [data-bs-theme=light] {
+  color-scheme: dark;
+  --tblr-body-color: #fcfdfe;
+  --tblr-body-color-rgb: 252, 253, 254;
+  --tblr-body-bg: #040a11;
+  --tblr-body-bg-rgb: 4, 10, 17;
+  --tblr-emphasis-color: #ffffff;
+  --tblr-emphasis-color-rgb: 255, 255, 255;
+  --tblr-secondary-color: rgba(252, 253, 254, 0.75);
+  --tblr-secondary-color-rgb: 252, 253, 254;
+  --tblr-secondary-bg: #182433;
+  --tblr-secondary-bg-rgb: 24, 36, 51;
+  --tblr-tertiary-color: rgba(252, 253, 254, 0.5);
+  --tblr-tertiary-color-rgb: 252, 253, 254;
+  --tblr-tertiary-bg: #0e1722;
+  --tblr-tertiary-bg-rgb: 14, 23, 34;
+  --tblr-primary-text-emphasis: #6698ca;
+  --tblr-secondary-text-emphasis: #a3abb4;
+  --tblr-success-text-emphasis: #82d18f;
+  --tblr-info-text-emphasis: #8ec2ed;
+  --tblr-warning-text-emphasis: #faa46a;
+  --tblr-danger-text-emphasis: #e68888;
+  --tblr-light-text-emphasis: #f6f8fb;
+  --tblr-dark-text-emphasis: #dadfe5;
+  --tblr-primary-bg-subtle: #001121;
+  --tblr-secondary-bg-subtle: #14171a;
+  --tblr-success-bg-subtle: #09240e;
+  --tblr-info-bg-subtle: #0d1f2d;
+  --tblr-warning-bg-subtle: #311501;
+  --tblr-danger-bg-subtle: #2b0b0b;
+  --tblr-light-bg-subtle: #182433;
+  --tblr-dark-bg-subtle: #0c121a;
+  --tblr-primary-border-subtle: #003264;
+  --tblr-secondary-border-subtle: #3d454e;
+  --tblr-success-border-subtle: #1c6b29;
+  --tblr-info-border-subtle: #285c87;
+  --tblr-warning-border-subtle: #943e04;
+  --tblr-danger-border-subtle: #802222;
+  --tblr-light-border-subtle: #3a4859;
+  --tblr-dark-border-subtle: #182433;
+  --tblr-heading-color: inherit;
+  --tblr-link-color: #6698ca;
+  --tblr-link-hover-color: #85add5;
+  --tblr-link-color-rgb: 102, 152, 202;
+  --tblr-link-hover-color-rgb: 133, 173, 213;
+  --tblr-code-color: var(--tblr-gray-300);
+  --tblr-border-color: #1f2e41;
+  --tblr-border-color-translucent: rgba(72, 110, 149, 0.14);
+  --tblr-form-valid-color: #82d18f;
+  --tblr-form-valid-border-color: #82d18f;
+  --tblr-form-invalid-color: #e68888;
+  --tblr-form-invalid-border-color: #e68888;
+}
+
+*,
+*::before,
+*::after {
+  box-sizing: border-box;
+}
+
+@media (prefers-reduced-motion: no-preference) {
+  :root {
+    scroll-behavior: smooth;
+  }
+}
+
+body {
+  margin: 0;
+  font-family: var(--tblr-body-font-family);
+  font-size: var(--tblr-body-font-size);
+  font-weight: var(--tblr-body-font-weight);
+  line-height: var(--tblr-body-line-height);
+  color: var(--tblr-body-color);
+  text-align: var(--tblr-body-text-align);
+  background-color: var(--tblr-body-bg);
+  -webkit-text-size-adjust: 100%;
+  -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
+}
+
+hr, .hr {
+  margin: 2rem 0;
+  color: inherit;
+  border: 0;
+  border-top: var(--tblr-border-width) solid;
+  opacity: 0.16;
+}
+
+h6, .h6, h5, .h5, h4, .h4, h3, .h3, h2, .h2, h1, .h1 {
+  margin-top: 0;
+  margin-bottom: var(--tblr-spacer);
+  font-weight: var(--tblr-font-weight-bold);
+  line-height: 1.2;
+  color: var(--tblr-heading-color);
+}
+
+h1, .h1 {
+  font-size: 1.5rem;
+}
+
+h2, .h2 {
+  font-size: 1.25rem;
+}
+
+h3, .h3 {
+  font-size: 1rem;
+}
+
+h4, .h4 {
+  font-size: 0.875rem;
+}
+
+h5, .h5 {
+  font-size: 0.75rem;
+}
+
+h6, .h6 {
+  font-size: 0.625rem;
+}
+
+p {
+  margin-top: 0;
+  margin-bottom: 1rem;
+}
+
+abbr[title] {
+  -webkit-text-decoration: underline dotted;
+          text-decoration: underline dotted;
+  cursor: help;
+  -webkit-text-decoration-skip-ink: none;
+          text-decoration-skip-ink: none;
+}
+
+address {
+  margin-bottom: 1rem;
+  font-style: normal;
+  line-height: inherit;
+}
+
+ol,
+ul {
+  padding-right: 2rem;
+}
+
+ol,
+ul,
+dl {
+  margin-top: 0;
+  margin-bottom: 1rem;
+}
+
+ol ol,
+ul ul,
+ol ul,
+ul ol {
+  margin-bottom: 0;
+}
+
+dt {
+  font-weight: 600;
+}
+
+dd {
+  margin-bottom: 0.5rem;
+  margin-right: 0;
+}
+
+blockquote {
+  margin: 0 0 1rem;
+}
+
+b,
+strong {
+  font-weight: bolder;
+}
+
+small, .small {
+  font-size: 85.714285%;
+}
+
+mark, .mark {
+  padding: 0.1875em;
+  background-color: var(--tblr-highlight-bg);
+}
+
+sub,
+sup {
+  position: relative;
+  font-size: 0.75em;
+  line-height: 0;
+  vertical-align: baseline;
+}
+
+sub {
+  bottom: -0.25em;
+}
+
+sup {
+  top: -0.5em;
+}
+
+a {
+  color: rgba(var(--tblr-link-color-rgb), var(--tblr-link-opacity, 1));
+  text-decoration: none;
+}
+a:hover {
+  --tblr-link-color-rgb: var(--tblr-link-hover-color-rgb);
+  text-decoration: underline;
+}
+
+a:not([href]):not([class]), a:not([href]):not([class]):hover {
+  color: inherit;
+  text-decoration: none;
+}
+
+pre,
+code,
+kbd,
+samp {
+  font-family: var(--tblr-font-monospace);
+  font-size: 1em;
+}
+
+pre {
+  display: block;
+  margin-top: 0;
+  margin-bottom: 1rem;
+  overflow: auto;
+  font-size: 85.714285%;
+  color: var(--tblr-light);
+}
+pre code {
+  font-size: inherit;
+  color: inherit;
+  word-break: normal;
+}
+
+code {
+  font-size: 85.714285%;
+  color: var(--tblr-code-color);
+  word-wrap: break-word;
+}
+a > code {
+  color: inherit;
+}
+
+kbd {
+  padding: 0.25rem 0.5rem;
+  font-size: var(--tblr-font-size-h5);
+  color: var(--tblr-text-secondary-dark);
+  background-color: var(--tblr-code-bg);
+  border-radius: 2px;
+}
+kbd kbd {
+  padding: 0;
+  font-size: 1em;
+}
+
+figure {
+  margin: 0 0 1rem;
+}
+
+img,
+svg {
+  vertical-align: middle;
+}
+
+table {
+  caption-side: bottom;
+  border-collapse: collapse;
+}
+
+caption {
+  padding-top: 0.75rem;
+  padding-bottom: 0.75rem;
+  color: var(--tblr-secondary-color);
+  text-align: right;
+}
+
+th {
+  text-align: inherit;
+  text-align: -webkit-match-parent;
+}
+
+thead,
+tbody,
+tfoot,
+tr,
+td,
+th {
+  border-color: inherit;
+  border-style: solid;
+  border-width: 0;
+}
+
+label {
+  display: inline-block;
+}
+
+button {
+  border-radius: 0;
+}
+
+button:focus:not(:focus-visible) {
+  outline: 0;
+}
+
+input,
+button,
+select,
+optgroup,
+textarea {
+  margin: 0;
+  font-family: inherit;
+  font-size: inherit;
+  line-height: inherit;
+}
+
+button,
+select {
+  text-transform: none;
+}
+
+[role=button] {
+  cursor: pointer;
+}
+
+select {
+  word-wrap: normal;
+}
+select:disabled {
+  opacity: 1;
+}
+
+[list]:not([type=date]):not([type=datetime-local]):not([type=month]):not([type=week]):not([type=time])::-webkit-calendar-picker-indicator {
+  display: none !important;
+}
+
+button,
+[type=button],
+[type=reset],
+[type=submit] {
+  -webkit-appearance: button;
+}
+button:not(:disabled),
+[type=button]:not(:disabled),
+[type=reset]:not(:disabled),
+[type=submit]:not(:disabled) {
+  cursor: pointer;
+}
+
+::-moz-focus-inner {
+  padding: 0;
+  border-style: none;
+}
+
+textarea {
+  resize: vertical;
+}
+
+fieldset {
+  min-width: 0;
+  padding: 0;
+  margin: 0;
+  border: 0;
+}
+
+legend {
+  float: right;
+  width: 100%;
+  padding: 0;
+  margin-bottom: 0.5rem;
+  font-size: 1.5rem;
+  line-height: inherit;
+}
+legend + * {
+  clear: right;
+}
+
+::-webkit-datetime-edit-fields-wrapper,
+::-webkit-datetime-edit-text,
+::-webkit-datetime-edit-minute,
+::-webkit-datetime-edit-hour-field,
+::-webkit-datetime-edit-day-field,
+::-webkit-datetime-edit-month-field,
+::-webkit-datetime-edit-year-field {
+  padding: 0;
+}
+
+::-webkit-inner-spin-button {
+  height: auto;
+}
+
+[type=search] {
+  -webkit-appearance: textfield;
+  outline-offset: -2px;
+}
+
+[type="tel"],
+[type="url"],
+[type="email"],
+[type="number"] {
+  direction: ltr;
+}
+::-webkit-search-decoration {
+  -webkit-appearance: none;
+}
+
+::-webkit-color-swatch-wrapper {
+  padding: 0;
+}
+
+::-webkit-file-upload-button {
+  font: inherit;
+  -webkit-appearance: button;
+}
+
+::file-selector-button {
+  font: inherit;
+  -webkit-appearance: button;
+}
+
+output {
+  display: inline-block;
+}
+
+iframe {
+  border: 0;
+}
+
+summary {
+  display: list-item;
+  cursor: pointer;
+}
+
+progress {
+  vertical-align: baseline;
+}
+
+[hidden] {
+  display: none !important;
+}
+
+.lead {
+  font-size: 0.875rem;
+  font-weight: var(--tblr-font-weight-normal);
+}
+
+.display-1 {
+  font-size: 5rem;
+  font-weight: 300;
+  line-height: 1.2;
+}
+
+.display-2 {
+  font-size: 4.5rem;
+  font-weight: 300;
+  line-height: 1.2;
+}
+
+.display-3 {
+  font-size: 4rem;
+  font-weight: 300;
+  line-height: 1.2;
+}
+
+.display-4 {
+  font-size: 3.5rem;
+  font-weight: 300;
+  line-height: 1.2;
+}
+
+.display-5 {
+  font-size: 3rem;
+  font-weight: 300;
+  line-height: 1.2;
+}
+
+.display-6 {
+  font-size: 2rem;
+  font-weight: 300;
+  line-height: 1.2;
+}
+
+.list-unstyled {
+  padding-right: 0;
+  list-style: none;
+}
+
+.list-inline {
+  padding-right: 0;
+  list-style: none;
+}
+
+.list-inline-item {
+  display: inline-block;
+}
+.list-inline-item:not(:last-child) {
+  margin-left: 0.5rem;
+}
+
+.initialism {
+  font-size: 85.714285%;
+  text-transform: uppercase;
+}
+
+.blockquote {
+  margin-bottom: 1rem;
+  font-size: 0.875rem;
+}
+.blockquote > :last-child {
+  margin-bottom: 0;
+}
+
+.blockquote-footer {
+  margin-top: -1rem;
+  margin-bottom: 1rem;
+  font-size: 85.714285%;
+  color: #667382;
+}
+.blockquote-footer::before {
+  content: "— ";
+}
+
+.img-fluid {
+  max-width: 100%;
+  height: auto;
+}
+
+.img-thumbnail {
+  padding: 0.25rem;
+  background-color: var(--tblr-body-bg);
+  border: var(--tblr-border-width) solid var(--tblr-border-color);
+  border-radius: var(--tblr-border-radius);
+  box-shadow: var(--tblr-box-shadow-sm);
+  max-width: 100%;
+  height: auto;
+}
+
+.figure {
+  display: inline-block;
+}
+
+.figure-img {
+  margin-bottom: 0.5rem;
+  line-height: 1;
+}
+
+.figure-caption {
+  font-size: 85.714285%;
+  color: var(--tblr-secondary-color);
+}
+
+.container,
+.container-fluid,
+.container-xxl,
+.container-xl,
+.container-lg,
+.container-md,
+.container-sm {
+  --tblr-gutter-x: calc(var(--tblr-page-padding) * 2);
+  --tblr-gutter-y: 0;
+  width: 100%;
+  padding-left: calc(var(--tblr-gutter-x) * 0.5);
+  padding-right: calc(var(--tblr-gutter-x) * 0.5);
+  margin-left: auto;
+  margin-right: auto;
+}
+
+@media (min-width: 576px) {
+  .container-sm, .container {
+    max-width: 540px;
+  }
+}
+@media (min-width: 768px) {
+  .container-md, .container-sm, .container {
+    max-width: 720px;
+  }
+}
+@media (min-width: 992px) {
+  .container-lg, .container-md, .container-sm, .container {
+    max-width: 960px;
+  }
+}
+@media (min-width: 1200px) {
+  .container-xl, .container-lg, .container-md, .container-sm, .container {
+    max-width: 1140px;
+  }
+}
+@media (min-width: 1400px) {
+  .container-xxl, .container-xl, .container-lg, .container-md, .container-sm, .container {
+    max-width: 1320px;
+  }
+}
+:root {
+  --tblr-breakpoint-xs: 0;
+  --tblr-breakpoint-sm: 576px;
+  --tblr-breakpoint-md: 768px;
+  --tblr-breakpoint-lg: 992px;
+  --tblr-breakpoint-xl: 1200px;
+  --tblr-breakpoint-xxl: 1400px;
+}
+
+.row {
+  --tblr-gutter-x: var(--tblr-page-padding);
+  --tblr-gutter-y: 0;
+  display: flex;
+  flex-wrap: wrap;
+  margin-top: calc(-1 * var(--tblr-gutter-y));
+  margin-left: calc(-0.5 * var(--tblr-gutter-x));
+  margin-right: calc(-0.5 * var(--tblr-gutter-x));
+}
+.row > * {
+  flex-shrink: 0;
+  width: 100%;
+  max-width: 100%;
+  padding-left: calc(var(--tblr-gutter-x) * 0.5);
+  padding-right: calc(var(--tblr-gutter-x) * 0.5);
+  margin-top: var(--tblr-gutter-y);
+}
+
+.grid {
+  display: grid;
+  grid-template-rows: repeat(var(--tblr-rows, 1), 1fr);
+  grid-template-columns: repeat(var(--tblr-columns, 12), 1fr);
+  gap: var(--tblr-gap, var(--tblr-page-padding));
+}
+.grid .g-col-1 {
+  grid-column: auto/span 1;
+}
+.grid .g-col-2 {
+  grid-column: auto/span 2;
+}
+.grid .g-col-3 {
+  grid-column: auto/span 3;
+}
+.grid .g-col-4 {
+  grid-column: auto/span 4;
+}
+.grid .g-col-5 {
+  grid-column: auto/span 5;
+}
+.grid .g-col-6 {
+  grid-column: auto/span 6;
+}
+.grid .g-col-7 {
+  grid-column: auto/span 7;
+}
+.grid .g-col-8 {
+  grid-column: auto/span 8;
+}
+.grid .g-col-9 {
+  grid-column: auto/span 9;
+}
+.grid .g-col-10 {
+  grid-column: auto/span 10;
+}
+.grid .g-col-11 {
+  grid-column: auto/span 11;
+}
+.grid .g-col-12 {
+  grid-column: auto/span 12;
+}
+.grid .g-start-1 {
+  grid-column-start: 1;
+}
+.grid .g-start-2 {
+  grid-column-start: 2;
+}
+.grid .g-start-3 {
+  grid-column-start: 3;
+}
+.grid .g-start-4 {
+  grid-column-start: 4;
+}
+.grid .g-start-5 {
+  grid-column-start: 5;
+}
+.grid .g-start-6 {
+  grid-column-start: 6;
+}
+.grid .g-start-7 {
+  grid-column-start: 7;
+}
+.grid .g-start-8 {
+  grid-column-start: 8;
+}
+.grid .g-start-9 {
+  grid-column-start: 9;
+}
+.grid .g-start-10 {
+  grid-column-start: 10;
+}
+.grid .g-start-11 {
+  grid-column-start: 11;
+}
+@media (min-width: 576px) {
+  .grid .g-col-sm-1 {
+    grid-column: auto/span 1;
+  }
+  .grid .g-col-sm-2 {
+    grid-column: auto/span 2;
+  }
+  .grid .g-col-sm-3 {
+    grid-column: auto/span 3;
+  }
+  .grid .g-col-sm-4 {
+    grid-column: auto/span 4;
+  }
+  .grid .g-col-sm-5 {
+    grid-column: auto/span 5;
+  }
+  .grid .g-col-sm-6 {
+    grid-column: auto/span 6;
+  }
+  .grid .g-col-sm-7 {
+    grid-column: auto/span 7;
+  }
+  .grid .g-col-sm-8 {
+    grid-column: auto/span 8;
+  }
+  .grid .g-col-sm-9 {
+    grid-column: auto/span 9;
+  }
+  .grid .g-col-sm-10 {
+    grid-column: auto/span 10;
+  }
+  .grid .g-col-sm-11 {
+    grid-column: auto/span 11;
+  }
+  .grid .g-col-sm-12 {
+    grid-column: auto/span 12;
+  }
+  .grid .g-start-sm-1 {
+    grid-column-start: 1;
+  }
+  .grid .g-start-sm-2 {
+    grid-column-start: 2;
+  }
+  .grid .g-start-sm-3 {
+    grid-column-start: 3;
+  }
+  .grid .g-start-sm-4 {
+    grid-column-start: 4;
+  }
+  .grid .g-start-sm-5 {
+    grid-column-start: 5;
+  }
+  .grid .g-start-sm-6 {
+    grid-column-start: 6;
+  }
+  .grid .g-start-sm-7 {
+    grid-column-start: 7;
+  }
+  .grid .g-start-sm-8 {
+    grid-column-start: 8;
+  }
+  .grid .g-start-sm-9 {
+    grid-column-start: 9;
+  }
+  .grid .g-start-sm-10 {
+    grid-column-start: 10;
+  }
+  .grid .g-start-sm-11 {
+    grid-column-start: 11;
+  }
+}
+@media (min-width: 768px) {
+  .grid .g-col-md-1 {
+    grid-column: auto/span 1;
+  }
+  .grid .g-col-md-2 {
+    grid-column: auto/span 2;
+  }
+  .grid .g-col-md-3 {
+    grid-column: auto/span 3;
+  }
+  .grid .g-col-md-4 {
+    grid-column: auto/span 4;
+  }
+  .grid .g-col-md-5 {
+    grid-column: auto/span 5;
+  }
+  .grid .g-col-md-6 {
+    grid-column: auto/span 6;
+  }
+  .grid .g-col-md-7 {
+    grid-column: auto/span 7;
+  }
+  .grid .g-col-md-8 {
+    grid-column: auto/span 8;
+  }
+  .grid .g-col-md-9 {
+    grid-column: auto/span 9;
+  }
+  .grid .g-col-md-10 {
+    grid-column: auto/span 10;
+  }
+  .grid .g-col-md-11 {
+    grid-column: auto/span 11;
+  }
+  .grid .g-col-md-12 {
+    grid-column: auto/span 12;
+  }
+  .grid .g-start-md-1 {
+    grid-column-start: 1;
+  }
+  .grid .g-start-md-2 {
+    grid-column-start: 2;
+  }
+  .grid .g-start-md-3 {
+    grid-column-start: 3;
+  }
+  .grid .g-start-md-4 {
+    grid-column-start: 4;
+  }
+  .grid .g-start-md-5 {
+    grid-column-start: 5;
+  }
+  .grid .g-start-md-6 {
+    grid-column-start: 6;
+  }
+  .grid .g-start-md-7 {
+    grid-column-start: 7;
+  }
+  .grid .g-start-md-8 {
+    grid-column-start: 8;
+  }
+  .grid .g-start-md-9 {
+    grid-column-start: 9;
+  }
+  .grid .g-start-md-10 {
+    grid-column-start: 10;
+  }
+  .grid .g-start-md-11 {
+    grid-column-start: 11;
+  }
+}
+@media (min-width: 992px) {
+  .grid .g-col-lg-1 {
+    grid-column: auto/span 1;
+  }
+  .grid .g-col-lg-2 {
+    grid-column: auto/span 2;
+  }
+  .grid .g-col-lg-3 {
+    grid-column: auto/span 3;
+  }
+  .grid .g-col-lg-4 {
+    grid-column: auto/span 4;
+  }
+  .grid .g-col-lg-5 {
+    grid-column: auto/span 5;
+  }
+  .grid .g-col-lg-6 {
+    grid-column: auto/span 6;
+  }
+  .grid .g-col-lg-7 {
+    grid-column: auto/span 7;
+  }
+  .grid .g-col-lg-8 {
+    grid-column: auto/span 8;
+  }
+  .grid .g-col-lg-9 {
+    grid-column: auto/span 9;
+  }
+  .grid .g-col-lg-10 {
+    grid-column: auto/span 10;
+  }
+  .grid .g-col-lg-11 {
+    grid-column: auto/span 11;
+  }
+  .grid .g-col-lg-12 {
+    grid-column: auto/span 12;
+  }
+  .grid .g-start-lg-1 {
+    grid-column-start: 1;
+  }
+  .grid .g-start-lg-2 {
+    grid-column-start: 2;
+  }
+  .grid .g-start-lg-3 {
+    grid-column-start: 3;
+  }
+  .grid .g-start-lg-4 {
+    grid-column-start: 4;
+  }
+  .grid .g-start-lg-5 {
+    grid-column-start: 5;
+  }
+  .grid .g-start-lg-6 {
+    grid-column-start: 6;
+  }
+  .grid .g-start-lg-7 {
+    grid-column-start: 7;
+  }
+  .grid .g-start-lg-8 {
+    grid-column-start: 8;
+  }
+  .grid .g-start-lg-9 {
+    grid-column-start: 9;
+  }
+  .grid .g-start-lg-10 {
+    grid-column-start: 10;
+  }
+  .grid .g-start-lg-11 {
+    grid-column-start: 11;
+  }
+}
+@media (min-width: 1200px) {
+  .grid .g-col-xl-1 {
+    grid-column: auto/span 1;
+  }
+  .grid .g-col-xl-2 {
+    grid-column: auto/span 2;
+  }
+  .grid .g-col-xl-3 {
+    grid-column: auto/span 3;
+  }
+  .grid .g-col-xl-4 {
+    grid-column: auto/span 4;
+  }
+  .grid .g-col-xl-5 {
+    grid-column: auto/span 5;
+  }
+  .grid .g-col-xl-6 {
+    grid-column: auto/span 6;
+  }
+  .grid .g-col-xl-7 {
+    grid-column: auto/span 7;
+  }
+  .grid .g-col-xl-8 {
+    grid-column: auto/span 8;
+  }
+  .grid .g-col-xl-9 {
+    grid-column: auto/span 9;
+  }
+  .grid .g-col-xl-10 {
+    grid-column: auto/span 10;
+  }
+  .grid .g-col-xl-11 {
+    grid-column: auto/span 11;
+  }
+  .grid .g-col-xl-12 {
+    grid-column: auto/span 12;
+  }
+  .grid .g-start-xl-1 {
+    grid-column-start: 1;
+  }
+  .grid .g-start-xl-2 {
+    grid-column-start: 2;
+  }
+  .grid .g-start-xl-3 {
+    grid-column-start: 3;
+  }
+  .grid .g-start-xl-4 {
+    grid-column-start: 4;
+  }
+  .grid .g-start-xl-5 {
+    grid-column-start: 5;
+  }
+  .grid .g-start-xl-6 {
+    grid-column-start: 6;
+  }
+  .grid .g-start-xl-7 {
+    grid-column-start: 7;
+  }
+  .grid .g-start-xl-8 {
+    grid-column-start: 8;
+  }
+  .grid .g-start-xl-9 {
+    grid-column-start: 9;
+  }
+  .grid .g-start-xl-10 {
+    grid-column-start: 10;
+  }
+  .grid .g-start-xl-11 {
+    grid-column-start: 11;
+  }
+}
+@media (min-width: 1400px) {
+  .grid .g-col-xxl-1 {
+    grid-column: auto/span 1;
+  }
+  .grid .g-col-xxl-2 {
+    grid-column: auto/span 2;
+  }
+  .grid .g-col-xxl-3 {
+    grid-column: auto/span 3;
+  }
+  .grid .g-col-xxl-4 {
+    grid-column: auto/span 4;
+  }
+  .grid .g-col-xxl-5 {
+    grid-column: auto/span 5;
+  }
+  .grid .g-col-xxl-6 {
+    grid-column: auto/span 6;
+  }
+  .grid .g-col-xxl-7 {
+    grid-column: auto/span 7;
+  }
+  .grid .g-col-xxl-8 {
+    grid-column: auto/span 8;
+  }
+  .grid .g-col-xxl-9 {
+    grid-column: auto/span 9;
+  }
+  .grid .g-col-xxl-10 {
+    grid-column: auto/span 10;
+  }
+  .grid .g-col-xxl-11 {
+    grid-column: auto/span 11;
+  }
+  .grid .g-col-xxl-12 {
+    grid-column: auto/span 12;
+  }
+  .grid .g-start-xxl-1 {
+    grid-column-start: 1;
+  }
+  .grid .g-start-xxl-2 {
+    grid-column-start: 2;
+  }
+  .grid .g-start-xxl-3 {
+    grid-column-start: 3;
+  }
+  .grid .g-start-xxl-4 {
+    grid-column-start: 4;
+  }
+  .grid .g-start-xxl-5 {
+    grid-column-start: 5;
+  }
+  .grid .g-start-xxl-6 {
+    grid-column-start: 6;
+  }
+  .grid .g-start-xxl-7 {
+    grid-column-start: 7;
+  }
+  .grid .g-start-xxl-8 {
+    grid-column-start: 8;
+  }
+  .grid .g-start-xxl-9 {
+    grid-column-start: 9;
+  }
+  .grid .g-start-xxl-10 {
+    grid-column-start: 10;
+  }
+  .grid .g-start-xxl-11 {
+    grid-column-start: 11;
+  }
+}
+
+.col {
+  flex: 1 0 0%;
+}
+
+.row-cols-auto > * {
+  flex: 0 0 auto;
+  width: auto;
+}
+
+.row-cols-1 > * {
+  flex: 0 0 auto;
+  width: 100%;
+}
+
+.row-cols-2 > * {
+  flex: 0 0 auto;
+  width: 50%;
+}
+
+.row-cols-3 > * {
+  flex: 0 0 auto;
+  width: 33.3333333333%;
+}
+
+.row-cols-4 > * {
+  flex: 0 0 auto;
+  width: 25%;
+}
+
+.row-cols-5 > * {
+  flex: 0 0 auto;
+  width: 20%;
+}
+
+.row-cols-6 > * {
+  flex: 0 0 auto;
+  width: 16.6666666667%;
+}
+
+.col-auto {
+  flex: 0 0 auto;
+  width: auto;
+}
+
+.col-1 {
+  flex: 0 0 auto;
+  width: 8.33333333%;
+}
+
+.col-2 {
+  flex: 0 0 auto;
+  width: 16.66666667%;
+}
+
+.col-3 {
+  flex: 0 0 auto;
+  width: 25%;
+}
+
+.col-4 {
+  flex: 0 0 auto;
+  width: 33.33333333%;
+}
+
+.col-5 {
+  flex: 0 0 auto;
+  width: 41.66666667%;
+}
+
+.col-6 {
+  flex: 0 0 auto;
+  width: 50%;
+}
+
+.col-7 {
+  flex: 0 0 auto;
+  width: 58.33333333%;
+}
+
+.col-8 {
+  flex: 0 0 auto;
+  width: 66.66666667%;
+}
+
+.col-9 {
+  flex: 0 0 auto;
+  width: 75%;
+}
+
+.col-10 {
+  flex: 0 0 auto;
+  width: 83.33333333%;
+}
+
+.col-11 {
+  flex: 0 0 auto;
+  width: 91.66666667%;
+}
+
+.col-12 {
+  flex: 0 0 auto;
+  width: 100%;
+}
+
+.offset-1 {
+  margin-right: 8.33333333%;
+}
+
+.offset-2 {
+  margin-right: 16.66666667%;
+}
+
+.offset-3 {
+  margin-right: 25%;
+}
+
+.offset-4 {
+  margin-right: 33.33333333%;
+}
+
+.offset-5 {
+  margin-right: 41.66666667%;
+}
+
+.offset-6 {
+  margin-right: 50%;
+}
+
+.offset-7 {
+  margin-right: 58.33333333%;
+}
+
+.offset-8 {
+  margin-right: 66.66666667%;
+}
+
+.offset-9 {
+  margin-right: 75%;
+}
+
+.offset-10 {
+  margin-right: 83.33333333%;
+}
+
+.offset-11 {
+  margin-right: 91.66666667%;
+}
+
+.g-0,
+.gx-0 {
+  --tblr-gutter-x: 0;
+}
+
+.g-0,
+.gy-0 {
+  --tblr-gutter-y: 0;
+}
+
+.g-1,
+.gx-1 {
+  --tblr-gutter-x: 0.25rem;
+}
+
+.g-1,
+.gy-1 {
+  --tblr-gutter-y: 0.25rem;
+}
+
+.g-2,
+.gx-2 {
+  --tblr-gutter-x: 0.5rem;
+}
+
+.g-2,
+.gy-2 {
+  --tblr-gutter-y: 0.5rem;
+}
+
+.g-3,
+.gx-3 {
+  --tblr-gutter-x: 1rem;
+}
+
+.g-3,
+.gy-3 {
+  --tblr-gutter-y: 1rem;
+}
+
+.g-4,
+.gx-4 {
+  --tblr-gutter-x: 1.5rem;
+}
+
+.g-4,
+.gy-4 {
+  --tblr-gutter-y: 1.5rem;
+}
+
+.g-5,
+.gx-5 {
+  --tblr-gutter-x: 2rem;
+}
+
+.g-5,
+.gy-5 {
+  --tblr-gutter-y: 2rem;
+}
+
+.g-6,
+.gx-6 {
+  --tblr-gutter-x: 3rem;
+}
+
+.g-6,
+.gy-6 {
+  --tblr-gutter-y: 3rem;
+}
+
+.g-7,
+.gx-7 {
+  --tblr-gutter-x: 5rem;
+}
+
+.g-7,
+.gy-7 {
+  --tblr-gutter-y: 5rem;
+}
+
+.g-8,
+.gx-8 {
+  --tblr-gutter-x: 8rem;
+}
+
+.g-8,
+.gy-8 {
+  --tblr-gutter-y: 8rem;
+}
+
+@media (min-width: 576px) {
+  .col-sm {
+    flex: 1 0 0%;
+  }
+  .row-cols-sm-auto > * {
+    flex: 0 0 auto;
+    width: auto;
+  }
+  .row-cols-sm-1 > * {
+    flex: 0 0 auto;
+    width: 100%;
+  }
+  .row-cols-sm-2 > * {
+    flex: 0 0 auto;
+    width: 50%;
+  }
+  .row-cols-sm-3 > * {
+    flex: 0 0 auto;
+    width: 33.3333333333%;
+  }
+  .row-cols-sm-4 > * {
+    flex: 0 0 auto;
+    width: 25%;
+  }
+  .row-cols-sm-5 > * {
+    flex: 0 0 auto;
+    width: 20%;
+  }
+  .row-cols-sm-6 > * {
+    flex: 0 0 auto;
+    width: 16.6666666667%;
+  }
+  .col-sm-auto {
+    flex: 0 0 auto;
+    width: auto;
+  }
+  .col-sm-1 {
+    flex: 0 0 auto;
+    width: 8.33333333%;
+  }
+  .col-sm-2 {
+    flex: 0 0 auto;
+    width: 16.66666667%;
+  }
+  .col-sm-3 {
+    flex: 0 0 auto;
+    width: 25%;
+  }
+  .col-sm-4 {
+    flex: 0 0 auto;
+    width: 33.33333333%;
+  }
+  .col-sm-5 {
+    flex: 0 0 auto;
+    width: 41.66666667%;
+  }
+  .col-sm-6 {
+    flex: 0 0 auto;
+    width: 50%;
+  }
+  .col-sm-7 {
+    flex: 0 0 auto;
+    width: 58.33333333%;
+  }
+  .col-sm-8 {
+    flex: 0 0 auto;
+    width: 66.66666667%;
+  }
+  .col-sm-9 {
+    flex: 0 0 auto;
+    width: 75%;
+  }
+  .col-sm-10 {
+    flex: 0 0 auto;
+    width: 83.33333333%;
+  }
+  .col-sm-11 {
+    flex: 0 0 auto;
+    width: 91.66666667%;
+  }
+  .col-sm-12 {
+    flex: 0 0 auto;
+    width: 100%;
+  }
+  .offset-sm-0 {
+    margin-right: 0;
+  }
+  .offset-sm-1 {
+    margin-right: 8.33333333%;
+  }
+  .offset-sm-2 {
+    margin-right: 16.66666667%;
+  }
+  .offset-sm-3 {
+    margin-right: 25%;
+  }
+  .offset-sm-4 {
+    margin-right: 33.33333333%;
+  }
+  .offset-sm-5 {
+    margin-right: 41.66666667%;
+  }
+  .offset-sm-6 {
+    margin-right: 50%;
+  }
+  .offset-sm-7 {
+    margin-right: 58.33333333%;
+  }
+  .offset-sm-8 {
+    margin-right: 66.66666667%;
+  }
+  .offset-sm-9 {
+    margin-right: 75%;
+  }
+  .offset-sm-10 {
+    margin-right: 83.33333333%;
+  }
+  .offset-sm-11 {
+    margin-right: 91.66666667%;
+  }
+  .g-sm-0,
+  .gx-sm-0 {
+    --tblr-gutter-x: 0;
+  }
+  .g-sm-0,
+  .gy-sm-0 {
+    --tblr-gutter-y: 0;
+  }
+  .g-sm-1,
+  .gx-sm-1 {
+    --tblr-gutter-x: 0.25rem;
+  }
+  .g-sm-1,
+  .gy-sm-1 {
+    --tblr-gutter-y: 0.25rem;
+  }
+  .g-sm-2,
+  .gx-sm-2 {
+    --tblr-gutter-x: 0.5rem;
+  }
+  .g-sm-2,
+  .gy-sm-2 {
+    --tblr-gutter-y: 0.5rem;
+  }
+  .g-sm-3,
+  .gx-sm-3 {
+    --tblr-gutter-x: 1rem;
+  }
+  .g-sm-3,
+  .gy-sm-3 {
+    --tblr-gutter-y: 1rem;
+  }
+  .g-sm-4,
+  .gx-sm-4 {
+    --tblr-gutter-x: 1.5rem;
+  }
+  .g-sm-4,
+  .gy-sm-4 {
+    --tblr-gutter-y: 1.5rem;
+  }
+  .g-sm-5,
+  .gx-sm-5 {
+    --tblr-gutter-x: 2rem;
+  }
+  .g-sm-5,
+  .gy-sm-5 {
+    --tblr-gutter-y: 2rem;
+  }
+  .g-sm-6,
+  .gx-sm-6 {
+    --tblr-gutter-x: 3rem;
+  }
+  .g-sm-6,
+  .gy-sm-6 {
+    --tblr-gutter-y: 3rem;
+  }
+  .g-sm-7,
+  .gx-sm-7 {
+    --tblr-gutter-x: 5rem;
+  }
+  .g-sm-7,
+  .gy-sm-7 {
+    --tblr-gutter-y: 5rem;
+  }
+  .g-sm-8,
+  .gx-sm-8 {
+    --tblr-gutter-x: 8rem;
+  }
+  .g-sm-8,
+  .gy-sm-8 {
+    --tblr-gutter-y: 8rem;
+  }
+}
+@media (min-width: 768px) {
+  .col-md {
+    flex: 1 0 0%;
+  }
+  .row-cols-md-auto > * {
+    flex: 0 0 auto;
+    width: auto;
+  }
+  .row-cols-md-1 > * {
+    flex: 0 0 auto;
+    width: 100%;
+  }
+  .row-cols-md-2 > * {
+    flex: 0 0 auto;
+    width: 50%;
+  }
+  .row-cols-md-3 > * {
+    flex: 0 0 auto;
+    width: 33.3333333333%;
+  }
+  .row-cols-md-4 > * {
+    flex: 0 0 auto;
+    width: 25%;
+  }
+  .row-cols-md-5 > * {
+    flex: 0 0 auto;
+    width: 20%;
+  }
+  .row-cols-md-6 > * {
+    flex: 0 0 auto;
+    width: 16.6666666667%;
+  }
+  .col-md-auto {
+    flex: 0 0 auto;
+    width: auto;
+  }
+  .col-md-1 {
+    flex: 0 0 auto;
+    width: 8.33333333%;
+  }
+  .col-md-2 {
+    flex: 0 0 auto;
+    width: 16.66666667%;
+  }
+  .col-md-3 {
+    flex: 0 0 auto;
+    width: 25%;
+  }
+  .col-md-4 {
+    flex: 0 0 auto;
+    width: 33.33333333%;
+  }
+  .col-md-5 {
+    flex: 0 0 auto;
+    width: 41.66666667%;
+  }
+  .col-md-6 {
+    flex: 0 0 auto;
+    width: 50%;
+  }
+  .col-md-7 {
+    flex: 0 0 auto;
+    width: 58.33333333%;
+  }
+  .col-md-8 {
+    flex: 0 0 auto;
+    width: 66.66666667%;
+  }
+  .col-md-9 {
+    flex: 0 0 auto;
+    width: 75%;
+  }
+  .col-md-10 {
+    flex: 0 0 auto;
+    width: 83.33333333%;
+  }
+  .col-md-11 {
+    flex: 0 0 auto;
+    width: 91.66666667%;
+  }
+  .col-md-12 {
+    flex: 0 0 auto;
+    width: 100%;
+  }
+  .offset-md-0 {
+    margin-right: 0;
+  }
+  .offset-md-1 {
+    margin-right: 8.33333333%;
+  }
+  .offset-md-2 {
+    margin-right: 16.66666667%;
+  }
+  .offset-md-3 {
+    margin-right: 25%;
+  }
+  .offset-md-4 {
+    margin-right: 33.33333333%;
+  }
+  .offset-md-5 {
+    margin-right: 41.66666667%;
+  }
+  .offset-md-6 {
+    margin-right: 50%;
+  }
+  .offset-md-7 {
+    margin-right: 58.33333333%;
+  }
+  .offset-md-8 {
+    margin-right: 66.66666667%;
+  }
+  .offset-md-9 {
+    margin-right: 75%;
+  }
+  .offset-md-10 {
+    margin-right: 83.33333333%;
+  }
+  .offset-md-11 {
+    margin-right: 91.66666667%;
+  }
+  .g-md-0,
+  .gx-md-0 {
+    --tblr-gutter-x: 0;
+  }
+  .g-md-0,
+  .gy-md-0 {
+    --tblr-gutter-y: 0;
+  }
+  .g-md-1,
+  .gx-md-1 {
+    --tblr-gutter-x: 0.25rem;
+  }
+  .g-md-1,
+  .gy-md-1 {
+    --tblr-gutter-y: 0.25rem;
+  }
+  .g-md-2,
+  .gx-md-2 {
+    --tblr-gutter-x: 0.5rem;
+  }
+  .g-md-2,
+  .gy-md-2 {
+    --tblr-gutter-y: 0.5rem;
+  }
+  .g-md-3,
+  .gx-md-3 {
+    --tblr-gutter-x: 1rem;
+  }
+  .g-md-3,
+  .gy-md-3 {
+    --tblr-gutter-y: 1rem;
+  }
+  .g-md-4,
+  .gx-md-4 {
+    --tblr-gutter-x: 1.5rem;
+  }
+  .g-md-4,
+  .gy-md-4 {
+    --tblr-gutter-y: 1.5rem;
+  }
+  .g-md-5,
+  .gx-md-5 {
+    --tblr-gutter-x: 2rem;
+  }
+  .g-md-5,
+  .gy-md-5 {
+    --tblr-gutter-y: 2rem;
+  }
+  .g-md-6,
+  .gx-md-6 {
+    --tblr-gutter-x: 3rem;
+  }
+  .g-md-6,
+  .gy-md-6 {
+    --tblr-gutter-y: 3rem;
+  }
+  .g-md-7,
+  .gx-md-7 {
+    --tblr-gutter-x: 5rem;
+  }
+  .g-md-7,
+  .gy-md-7 {
+    --tblr-gutter-y: 5rem;
+  }
+  .g-md-8,
+  .gx-md-8 {
+    --tblr-gutter-x: 8rem;
+  }
+  .g-md-8,
+  .gy-md-8 {
+    --tblr-gutter-y: 8rem;
+  }
+}
+@media (min-width: 992px) {
+  .col-lg {
+    flex: 1 0 0%;
+  }
+  .row-cols-lg-auto > * {
+    flex: 0 0 auto;
+    width: auto;
+  }
+  .row-cols-lg-1 > * {
+    flex: 0 0 auto;
+    width: 100%;
+  }
+  .row-cols-lg-2 > * {
+    flex: 0 0 auto;
+    width: 50%;
+  }
+  .row-cols-lg-3 > * {
+    flex: 0 0 auto;
+    width: 33.3333333333%;
+  }
+  .row-cols-lg-4 > * {
+    flex: 0 0 auto;
+    width: 25%;
+  }
+  .row-cols-lg-5 > * {
+    flex: 0 0 auto;
+    width: 20%;
+  }
+  .row-cols-lg-6 > * {
+    flex: 0 0 auto;
+    width: 16.6666666667%;
+  }
+  .col-lg-auto {
+    flex: 0 0 auto;
+    width: auto;
+  }
+  .col-lg-1 {
+    flex: 0 0 auto;
+    width: 8.33333333%;
+  }
+  .col-lg-2 {
+    flex: 0 0 auto;
+    width: 16.66666667%;
+  }
+  .col-lg-3 {
+    flex: 0 0 auto;
+    width: 25%;
+  }
+  .col-lg-4 {
+    flex: 0 0 auto;
+    width: 33.33333333%;
+  }
+  .col-lg-5 {
+    flex: 0 0 auto;
+    width: 41.66666667%;
+  }
+  .col-lg-6 {
+    flex: 0 0 auto;
+    width: 50%;
+  }
+  .col-lg-7 {
+    flex: 0 0 auto;
+    width: 58.33333333%;
+  }
+  .col-lg-8 {
+    flex: 0 0 auto;
+    width: 66.66666667%;
+  }
+  .col-lg-9 {
+    flex: 0 0 auto;
+    width: 75%;
+  }
+  .col-lg-10 {
+    flex: 0 0 auto;
+    width: 83.33333333%;
+  }
+  .col-lg-11 {
+    flex: 0 0 auto;
+    width: 91.66666667%;
+  }
+  .col-lg-12 {
+    flex: 0 0 auto;
+    width: 100%;
+  }
+  .offset-lg-0 {
+    margin-right: 0;
+  }
+  .offset-lg-1 {
+    margin-right: 8.33333333%;
+  }
+  .offset-lg-2 {
+    margin-right: 16.66666667%;
+  }
+  .offset-lg-3 {
+    margin-right: 25%;
+  }
+  .offset-lg-4 {
+    margin-right: 33.33333333%;
+  }
+  .offset-lg-5 {
+    margin-right: 41.66666667%;
+  }
+  .offset-lg-6 {
+    margin-right: 50%;
+  }
+  .offset-lg-7 {
+    margin-right: 58.33333333%;
+  }
+  .offset-lg-8 {
+    margin-right: 66.66666667%;
+  }
+  .offset-lg-9 {
+    margin-right: 75%;
+  }
+  .offset-lg-10 {
+    margin-right: 83.33333333%;
+  }
+  .offset-lg-11 {
+    margin-right: 91.66666667%;
+  }
+  .g-lg-0,
+  .gx-lg-0 {
+    --tblr-gutter-x: 0;
+  }
+  .g-lg-0,
+  .gy-lg-0 {
+    --tblr-gutter-y: 0;
+  }
+  .g-lg-1,
+  .gx-lg-1 {
+    --tblr-gutter-x: 0.25rem;
+  }
+  .g-lg-1,
+  .gy-lg-1 {
+    --tblr-gutter-y: 0.25rem;
+  }
+  .g-lg-2,
+  .gx-lg-2 {
+    --tblr-gutter-x: 0.5rem;
+  }
+  .g-lg-2,
+  .gy-lg-2 {
+    --tblr-gutter-y: 0.5rem;
+  }
+  .g-lg-3,
+  .gx-lg-3 {
+    --tblr-gutter-x: 1rem;
+  }
+  .g-lg-3,
+  .gy-lg-3 {
+    --tblr-gutter-y: 1rem;
+  }
+  .g-lg-4,
+  .gx-lg-4 {
+    --tblr-gutter-x: 1.5rem;
+  }
+  .g-lg-4,
+  .gy-lg-4 {
+    --tblr-gutter-y: 1.5rem;
+  }
+  .g-lg-5,
+  .gx-lg-5 {
+    --tblr-gutter-x: 2rem;
+  }
+  .g-lg-5,
+  .gy-lg-5 {
+    --tblr-gutter-y: 2rem;
+  }
+  .g-lg-6,
+  .gx-lg-6 {
+    --tblr-gutter-x: 3rem;
+  }
+  .g-lg-6,
+  .gy-lg-6 {
+    --tblr-gutter-y: 3rem;
+  }
+  .g-lg-7,
+  .gx-lg-7 {
+    --tblr-gutter-x: 5rem;
+  }
+  .g-lg-7,
+  .gy-lg-7 {
+    --tblr-gutter-y: 5rem;
+  }
+  .g-lg-8,
+  .gx-lg-8 {
+    --tblr-gutter-x: 8rem;
+  }
+  .g-lg-8,
+  .gy-lg-8 {
+    --tblr-gutter-y: 8rem;
+  }
+}
+@media (min-width: 1200px) {
+  .col-xl {
+    flex: 1 0 0%;
+  }
+  .row-cols-xl-auto > * {
+    flex: 0 0 auto;
+    width: auto;
+  }
+  .row-cols-xl-1 > * {
+    flex: 0 0 auto;
+    width: 100%;
+  }
+  .row-cols-xl-2 > * {
+    flex: 0 0 auto;
+    width: 50%;
+  }
+  .row-cols-xl-3 > * {
+    flex: 0 0 auto;
+    width: 33.3333333333%;
+  }
+  .row-cols-xl-4 > * {
+    flex: 0 0 auto;
+    width: 25%;
+  }
+  .row-cols-xl-5 > * {
+    flex: 0 0 auto;
+    width: 20%;
+  }
+  .row-cols-xl-6 > * {
+    flex: 0 0 auto;
+    width: 16.6666666667%;
+  }
+  .col-xl-auto {
+    flex: 0 0 auto;
+    width: auto;
+  }
+  .col-xl-1 {
+    flex: 0 0 auto;
+    width: 8.33333333%;
+  }
+  .col-xl-2 {
+    flex: 0 0 auto;
+    width: 16.66666667%;
+  }
+  .col-xl-3 {
+    flex: 0 0 auto;
+    width: 25%;
+  }
+  .col-xl-4 {
+    flex: 0 0 auto;
+    width: 33.33333333%;
+  }
+  .col-xl-5 {
+    flex: 0 0 auto;
+    width: 41.66666667%;
+  }
+  .col-xl-6 {
+    flex: 0 0 auto;
+    width: 50%;
+  }
+  .col-xl-7 {
+    flex: 0 0 auto;
+    width: 58.33333333%;
+  }
+  .col-xl-8 {
+    flex: 0 0 auto;
+    width: 66.66666667%;
+  }
+  .col-xl-9 {
+    flex: 0 0 auto;
+    width: 75%;
+  }
+  .col-xl-10 {
+    flex: 0 0 auto;
+    width: 83.33333333%;
+  }
+  .col-xl-11 {
+    flex: 0 0 auto;
+    width: 91.66666667%;
+  }
+  .col-xl-12 {
+    flex: 0 0 auto;
+    width: 100%;
+  }
+  .offset-xl-0 {
+    margin-right: 0;
+  }
+  .offset-xl-1 {
+    margin-right: 8.33333333%;
+  }
+  .offset-xl-2 {
+    margin-right: 16.66666667%;
+  }
+  .offset-xl-3 {
+    margin-right: 25%;
+  }
+  .offset-xl-4 {
+    margin-right: 33.33333333%;
+  }
+  .offset-xl-5 {
+    margin-right: 41.66666667%;
+  }
+  .offset-xl-6 {
+    margin-right: 50%;
+  }
+  .offset-xl-7 {
+    margin-right: 58.33333333%;
+  }
+  .offset-xl-8 {
+    margin-right: 66.66666667%;
+  }
+  .offset-xl-9 {
+    margin-right: 75%;
+  }
+  .offset-xl-10 {
+    margin-right: 83.33333333%;
+  }
+  .offset-xl-11 {
+    margin-right: 91.66666667%;
+  }
+  .g-xl-0,
+  .gx-xl-0 {
+    --tblr-gutter-x: 0;
+  }
+  .g-xl-0,
+  .gy-xl-0 {
+    --tblr-gutter-y: 0;
+  }
+  .g-xl-1,
+  .gx-xl-1 {
+    --tblr-gutter-x: 0.25rem;
+  }
+  .g-xl-1,
+  .gy-xl-1 {
+    --tblr-gutter-y: 0.25rem;
+  }
+  .g-xl-2,
+  .gx-xl-2 {
+    --tblr-gutter-x: 0.5rem;
+  }
+  .g-xl-2,
+  .gy-xl-2 {
+    --tblr-gutter-y: 0.5rem;
+  }
+  .g-xl-3,
+  .gx-xl-3 {
+    --tblr-gutter-x: 1rem;
+  }
+  .g-xl-3,
+  .gy-xl-3 {
+    --tblr-gutter-y: 1rem;
+  }
+  .g-xl-4,
+  .gx-xl-4 {
+    --tblr-gutter-x: 1.5rem;
+  }
+  .g-xl-4,
+  .gy-xl-4 {
+    --tblr-gutter-y: 1.5rem;
+  }
+  .g-xl-5,
+  .gx-xl-5 {
+    --tblr-gutter-x: 2rem;
+  }
+  .g-xl-5,
+  .gy-xl-5 {
+    --tblr-gutter-y: 2rem;
+  }
+  .g-xl-6,
+  .gx-xl-6 {
+    --tblr-gutter-x: 3rem;
+  }
+  .g-xl-6,
+  .gy-xl-6 {
+    --tblr-gutter-y: 3rem;
+  }
+  .g-xl-7,
+  .gx-xl-7 {
+    --tblr-gutter-x: 5rem;
+  }
+  .g-xl-7,
+  .gy-xl-7 {
+    --tblr-gutter-y: 5rem;
+  }
+  .g-xl-8,
+  .gx-xl-8 {
+    --tblr-gutter-x: 8rem;
+  }
+  .g-xl-8,
+  .gy-xl-8 {
+    --tblr-gutter-y: 8rem;
+  }
+}
+@media (min-width: 1400px) {
+  .col-xxl {
+    flex: 1 0 0%;
+  }
+  .row-cols-xxl-auto > * {
+    flex: 0 0 auto;
+    width: auto;
+  }
+  .row-cols-xxl-1 > * {
+    flex: 0 0 auto;
+    width: 100%;
+  }
+  .row-cols-xxl-2 > * {
+    flex: 0 0 auto;
+    width: 50%;
+  }
+  .row-cols-xxl-3 > * {
+    flex: 0 0 auto;
+    width: 33.3333333333%;
+  }
+  .row-cols-xxl-4 > * {
+    flex: 0 0 auto;
+    width: 25%;
+  }
+  .row-cols-xxl-5 > * {
+    flex: 0 0 auto;
+    width: 20%;
+  }
+  .row-cols-xxl-6 > * {
+    flex: 0 0 auto;
+    width: 16.6666666667%;
+  }
+  .col-xxl-auto {
+    flex: 0 0 auto;
+    width: auto;
+  }
+  .col-xxl-1 {
+    flex: 0 0 auto;
+    width: 8.33333333%;
+  }
+  .col-xxl-2 {
+    flex: 0 0 auto;
+    width: 16.66666667%;
+  }
+  .col-xxl-3 {
+    flex: 0 0 auto;
+    width: 25%;
+  }
+  .col-xxl-4 {
+    flex: 0 0 auto;
+    width: 33.33333333%;
+  }
+  .col-xxl-5 {
+    flex: 0 0 auto;
+    width: 41.66666667%;
+  }
+  .col-xxl-6 {
+    flex: 0 0 auto;
+    width: 50%;
+  }
+  .col-xxl-7 {
+    flex: 0 0 auto;
+    width: 58.33333333%;
+  }
+  .col-xxl-8 {
+    flex: 0 0 auto;
+    width: 66.66666667%;
+  }
+  .col-xxl-9 {
+    flex: 0 0 auto;
+    width: 75%;
+  }
+  .col-xxl-10 {
+    flex: 0 0 auto;
+    width: 83.33333333%;
+  }
+  .col-xxl-11 {
+    flex: 0 0 auto;
+    width: 91.66666667%;
+  }
+  .col-xxl-12 {
+    flex: 0 0 auto;
+    width: 100%;
+  }
+  .offset-xxl-0 {
+    margin-right: 0;
+  }
+  .offset-xxl-1 {
+    margin-right: 8.33333333%;
+  }
+  .offset-xxl-2 {
+    margin-right: 16.66666667%;
+  }
+  .offset-xxl-3 {
+    margin-right: 25%;
+  }
+  .offset-xxl-4 {
+    margin-right: 33.33333333%;
+  }
+  .offset-xxl-5 {
+    margin-right: 41.66666667%;
+  }
+  .offset-xxl-6 {
+    margin-right: 50%;
+  }
+  .offset-xxl-7 {
+    margin-right: 58.33333333%;
+  }
+  .offset-xxl-8 {
+    margin-right: 66.66666667%;
+  }
+  .offset-xxl-9 {
+    margin-right: 75%;
+  }
+  .offset-xxl-10 {
+    margin-right: 83.33333333%;
+  }
+  .offset-xxl-11 {
+    margin-right: 91.66666667%;
+  }
+  .g-xxl-0,
+  .gx-xxl-0 {
+    --tblr-gutter-x: 0;
+  }
+  .g-xxl-0,
+  .gy-xxl-0 {
+    --tblr-gutter-y: 0;
+  }
+  .g-xxl-1,
+  .gx-xxl-1 {
+    --tblr-gutter-x: 0.25rem;
+  }
+  .g-xxl-1,
+  .gy-xxl-1 {
+    --tblr-gutter-y: 0.25rem;
+  }
+  .g-xxl-2,
+  .gx-xxl-2 {
+    --tblr-gutter-x: 0.5rem;
+  }
+  .g-xxl-2,
+  .gy-xxl-2 {
+    --tblr-gutter-y: 0.5rem;
+  }
+  .g-xxl-3,
+  .gx-xxl-3 {
+    --tblr-gutter-x: 1rem;
+  }
+  .g-xxl-3,
+  .gy-xxl-3 {
+    --tblr-gutter-y: 1rem;
+  }
+  .g-xxl-4,
+  .gx-xxl-4 {
+    --tblr-gutter-x: 1.5rem;
+  }
+  .g-xxl-4,
+  .gy-xxl-4 {
+    --tblr-gutter-y: 1.5rem;
+  }
+  .g-xxl-5,
+  .gx-xxl-5 {
+    --tblr-gutter-x: 2rem;
+  }
+  .g-xxl-5,
+  .gy-xxl-5 {
+    --tblr-gutter-y: 2rem;
+  }
+  .g-xxl-6,
+  .gx-xxl-6 {
+    --tblr-gutter-x: 3rem;
+  }
+  .g-xxl-6,
+  .gy-xxl-6 {
+    --tblr-gutter-y: 3rem;
+  }
+  .g-xxl-7,
+  .gx-xxl-7 {
+    --tblr-gutter-x: 5rem;
+  }
+  .g-xxl-7,
+  .gy-xxl-7 {
+    --tblr-gutter-y: 5rem;
+  }
+  .g-xxl-8,
+  .gx-xxl-8 {
+    --tblr-gutter-x: 8rem;
+  }
+  .g-xxl-8,
+  .gy-xxl-8 {
+    --tblr-gutter-y: 8rem;
+  }
+}
+.table, .markdown > table {
+  --tblr-table-color-type: initial;
+  --tblr-table-bg-type: initial;
+  --tblr-table-color-state: initial;
+  --tblr-table-bg-state: initial;
+  --tblr-table-color: inherit;
+  --tblr-table-bg: transparent;
+  --tblr-table-border-color: var(--tblr-border-color-translucent);
+  --tblr-table-accent-bg: transparent;
+  --tblr-table-striped-color: inherit;
+  --tblr-table-striped-bg: var(--tblr-bg-surface-tertiary);
+  --tblr-table-active-color: inherit;
+  --tblr-table-active-bg: rgba(0, 0, 0, 0.1);
+  --tblr-table-hover-color: inherit;
+  --tblr-table-hover-bg: rgba(0, 0, 0, 0.075);
+  width: 100%;
+  margin-bottom: 1rem;
+  vertical-align: top;
+  border-color: var(--tblr-table-border-color);
+}
+.table > :not(caption) > * > *, .markdown > table > :not(caption) > * > * {
+  padding: 0.75rem 0.75rem;
+  color: var(--tblr-table-color-state, var(--tblr-table-color-type, var(--tblr-table-color)));
+  background-color: var(--tblr-table-bg);
+  border-bottom-width: var(--tblr-border-width);
+  box-shadow: inset 0 0 0 9999px var(--tblr-table-bg-state, var(--tblr-table-bg-type, var(--tblr-table-accent-bg)));
+}
+.table > tbody, .markdown > table > tbody {
+  vertical-align: inherit;
+}
+.table > thead, .markdown > table > thead {
+  vertical-align: bottom;
+}
+
+.table-group-divider {
+  border-top: calc(var(--tblr-border-width) * 2) solid var(--tblr-border-color-translucent);
+}
+
+.caption-top {
+  caption-side: top;
+}
+
+.table-sm > :not(caption) > * > * {
+  padding: 0.25rem 0.25rem;
+}
+
+.table-bordered > :not(caption) > *, .markdown > table > :not(caption) > * {
+  border-width: var(--tblr-border-width) 0;
+}
+.table-bordered > :not(caption) > * > *, .markdown > table > :not(caption) > * > * {
+  border-width: 0 var(--tblr-border-width);
+}
+
+.table-borderless > :not(caption) > * > * {
+  border-bottom-width: 0;
+}
+.table-borderless > :not(:first-child) {
+  border-top-width: 0;
+}
+
+.table-striped > tbody > tr:nth-of-type(even) > * {
+  --tblr-table-color-type: var(--tblr-table-striped-color);
+  --tblr-table-bg-type: var(--tblr-table-striped-bg);
+}
+
+.table-striped-columns > :not(caption) > tr > :nth-child(even) {
+  --tblr-table-color-type: var(--tblr-table-striped-color);
+  --tblr-table-bg-type: var(--tblr-table-striped-bg);
+}
+
+.table-active {
+  --tblr-table-color-state: var(--tblr-table-active-color);
+  --tblr-table-bg-state: var(--tblr-table-active-bg);
+}
+
+.table-hover > tbody > tr:hover > * {
+  --tblr-table-color-state: var(--tblr-table-hover-color);
+  --tblr-table-bg-state: var(--tblr-table-hover-bg);
+}
+
+.table-primary {
+  --tblr-table-color: #182433;
+  --tblr-table-bg: #ccdded;
+  --tblr-table-border-color: #bacbda;
+  --tblr-table-striped-bg: #c3d4e4;
+  --tblr-table-striped-color: #182433;
+  --tblr-table-active-bg: #bacbda;
+  --tblr-table-active-color: #fcfdfe;
+  --tblr-table-hover-bg: #bfcfdf;
+  --tblr-table-hover-color: #fcfdfe;
+  color: var(--tblr-table-color);
+  border-color: var(--tblr-table-border-color);
+}
+
+.table-secondary {
+  --tblr-table-color: #182433;
+  --tblr-table-bg: #e0e3e6;
+  --tblr-table-border-color: #ccd0d4;
+  --tblr-table-striped-bg: #d6d9dd;
+  --tblr-table-striped-color: #182433;
+  --tblr-table-active-bg: #ccd0d4;
+  --tblr-table-active-color: #fcfdfe;
+  --tblr-table-hover-bg: #d1d5d9;
+  --tblr-table-hover-color: #182433;
+  color: var(--tblr-table-color);
+  border-color: var(--tblr-table-border-color);
+}
+
+.table-success {
+  --tblr-table-color: #182433;
+  --tblr-table-bg: #d5f0da;
+  --tblr-table-border-color: #c2dcc9;
+  --tblr-table-striped-bg: #cce6d2;
+  --tblr-table-striped-color: #182433;
+  --tblr-table-active-bg: #c2dcc9;
+  --tblr-table-active-color: #182433;
+  --tblr-table-hover-bg: #c7e1cd;
+  --tblr-table-hover-color: #182433;
+  color: var(--tblr-table-color);
+  border-color: var(--tblr-table-border-color);
+}
+
+.table-info {
+  --tblr-table-color: #182433;
+  --tblr-table-bg: #d9ebf9;
+  --tblr-table-border-color: #c6d7e5;
+  --tblr-table-striped-bg: #cfe1ef;
+  --tblr-table-striped-color: #182433;
+  --tblr-table-active-bg: #c6d7e5;
+  --tblr-table-active-color: #182433;
+  --tblr-table-hover-bg: #cbdcea;
+  --tblr-table-hover-color: #182433;
+  color: var(--tblr-table-color);
+  border-color: var(--tblr-table-border-color);
+}
+
+.table-warning {
+  --tblr-table-color: #182433;
+  --tblr-table-bg: #fde1cd;
+  --tblr-table-border-color: #e6cebe;
+  --tblr-table-striped-bg: #f2d8c5;
+  --tblr-table-striped-color: #182433;
+  --tblr-table-active-bg: #e6cebe;
+  --tblr-table-active-color: #182433;
+  --tblr-table-hover-bg: #ecd3c1;
+  --tblr-table-hover-color: #182433;
+  color: var(--tblr-table-color);
+  border-color: var(--tblr-table-border-color);
+}
+
+.table-danger {
+  --tblr-table-color: #182433;
+  --tblr-table-bg: #f7d7d7;
+  --tblr-table-border-color: #e1c5c7;
+  --tblr-table-striped-bg: #eccecf;
+  --tblr-table-striped-color: #182433;
+  --tblr-table-active-bg: #e1c5c7;
+  --tblr-table-active-color: #fcfdfe;
+  --tblr-table-hover-bg: #e6cacb;
+  --tblr-table-hover-color: #fcfdfe;
+  color: var(--tblr-table-color);
+  border-color: var(--tblr-table-border-color);
+}
+
+.table-light {
+  --tblr-table-color: #182433;
+  --tblr-table-bg: #fcfdfe;
+  --tblr-table-border-color: #e5e7ea;
+  --tblr-table-striped-bg: #f1f2f4;
+  --tblr-table-striped-color: #182433;
+  --tblr-table-active-bg: #e5e7ea;
+  --tblr-table-active-color: #182433;
+  --tblr-table-hover-bg: #ebedef;
+  --tblr-table-hover-color: #182433;
+  color: var(--tblr-table-color);
+  border-color: var(--tblr-table-border-color);
+}
+
+.table-dark {
+  --tblr-table-color: #fcfdfe;
+  --tblr-table-bg: #182433;
+  --tblr-table-border-color: #2f3a47;
+  --tblr-table-striped-bg: #232f3d;
+  --tblr-table-striped-color: #fcfdfe;
+  --tblr-table-active-bg: #2f3a47;
+  --tblr-table-active-color: #fcfdfe;
+  --tblr-table-hover-bg: #293442;
+  --tblr-table-hover-color: #fcfdfe;
+  color: var(--tblr-table-color);
+  border-color: var(--tblr-table-border-color);
+}
+
+.table-responsive {
+  overflow-x: auto;
+  -webkit-overflow-scrolling: touch;
+}
+
+@media (max-width: 575.98px) {
+  .table-responsive-sm {
+    overflow-x: auto;
+    -webkit-overflow-scrolling: touch;
+  }
+}
+@media (max-width: 767.98px) {
+  .table-responsive-md {
+    overflow-x: auto;
+    -webkit-overflow-scrolling: touch;
+  }
+}
+@media (max-width: 991.98px) {
+  .table-responsive-lg {
+    overflow-x: auto;
+    -webkit-overflow-scrolling: touch;
+  }
+}
+@media (max-width: 1199.98px) {
+  .table-responsive-xl {
+    overflow-x: auto;
+    -webkit-overflow-scrolling: touch;
+  }
+}
+@media (max-width: 1399.98px) {
+  .table-responsive-xxl {
+    overflow-x: auto;
+    -webkit-overflow-scrolling: touch;
+  }
+}
+.form-label {
+  margin-bottom: 0.5rem;
+  font-size: 0.875rem;
+  font-weight: var(--tblr-font-weight-medium);
+}
+
+.col-form-label {
+  padding-top: calc(0.5625rem + var(--tblr-border-width));
+  padding-bottom: calc(0.5625rem + var(--tblr-border-width));
+  margin-bottom: 0;
+  font-size: inherit;
+  font-weight: var(--tblr-font-weight-medium);
+  line-height: 1.4285714286;
+}
+
+.col-form-label-lg {
+  padding-top: calc(0.5rem + var(--tblr-border-width));
+  padding-bottom: calc(0.5rem + var(--tblr-border-width));
+  font-size: 1.25rem;
+}
+
+.col-form-label-sm {
+  padding-top: calc(0.125rem + var(--tblr-border-width));
+  padding-bottom: calc(0.125rem + var(--tblr-border-width));
+  font-size: 0.75rem;
+}
+
+.form-text {
+  margin-top: 0.25rem;
+  font-size: 85.714285%;
+  color: var(--tblr-secondary-color);
+}
+
+.form-control {
+  display: block;
+  width: 100%;
+  padding: 0.5625rem 0.75rem;
+  font-family: var(--tblr-font-sans-serif);
+  font-size: 0.875rem;
+  font-weight: 400;
+  line-height: 1.4285714286;
+  color: var(--tblr-body-color);
+  -webkit-appearance: none;
+     -moz-appearance: none;
+          appearance: none;
+  background-color: var(--tblr-bg-forms);
+  background-clip: padding-box;
+  border: var(--tblr-border-width) solid var(--tblr-border-color);
+  border-radius: var(--tblr-border-radius);
+  box-shadow: var(--tblr-box-shadow-input);
+  transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
+}
+@media (prefers-reduced-motion: reduce) {
+  .form-control {
+    transition: none;
+  }
+}
+.form-control[type=file] {
+  overflow: hidden;
+}
+.form-control[type=file]:not(:disabled):not([readonly]) {
+  cursor: pointer;
+}
+.form-control:focus {
+  color: var(--tblr-body-color);
+  background-color: var(--tblr-bg-forms);
+  border-color: #80aad3;
+  outline: 0;
+  box-shadow: var(--tblr-box-shadow-input), 0 0 0 0.25rem rgba(var(--tblr-primary-rgb), 0.25);
+}
+.form-control::-webkit-date-and-time-value {
+  min-width: 85px;
+  height: 1.4285714286em;
+  margin: 0;
+}
+.form-control::-webkit-datetime-edit {
+  display: block;
+  padding: 0;
+}
+.form-control::-webkit-input-placeholder {
+  color: #929dab;
+  opacity: 1;
+}
+.form-control:-ms-input-placeholder {
+  color: #929dab;
+  opacity: 1;
+}
+.form-control::-ms-input-placeholder {
+  color: #929dab;
+  opacity: 1;
+}
+.form-control::placeholder {
+  color: #929dab;
+  opacity: 1;
+}
+.form-control:disabled {
+  background-color: var(--tblr-bg-surface-secondary);
+  opacity: 1;
+}
+.form-control::-webkit-file-upload-button {
+  padding: 0.5625rem 0.75rem;
+  margin: -0.5625rem -0.75rem;
+  -webkit-margin-end: 0.75rem;
+          margin-inline-end: 0.75rem;
+  color: var(--tblr-body-color);
+  background-color: var(--tblr-tertiary-bg);
+  pointer-events: none;
+  border-color: inherit;
+  border-style: solid;
+  border-width: 0;
+  border-inline-end-width: var(--tblr-border-width);
+  border-radius: 0;
+  -webkit-transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
+  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
+}
+.form-control::file-selector-button {
+  padding: 0.5625rem 0.75rem;
+  margin: -0.5625rem -0.75rem;
+  -webkit-margin-end: 0.75rem;
+          margin-inline-end: 0.75rem;
+  color: var(--tblr-body-color);
+  background-color: var(--tblr-tertiary-bg);
+  pointer-events: none;
+  border-color: inherit;
+  border-style: solid;
+  border-width: 0;
+  border-inline-end-width: var(--tblr-border-width);
+  border-radius: 0;
+  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
+}
+@media (prefers-reduced-motion: reduce) {
+  .form-control::-webkit-file-upload-button {
+    -webkit-transition: none;
+    transition: none;
+  }
+  .form-control::file-selector-button {
+    transition: none;
+  }
+}
+.form-control:hover:not(:disabled):not([readonly])::-webkit-file-upload-button {
+  background-color: var(--tblr-secondary-bg);
+}
+.form-control:hover:not(:disabled):not([readonly])::file-selector-button {
+  background-color: var(--tblr-secondary-bg);
+}
+
+.form-control-plaintext {
+  display: block;
+  width: 100%;
+  padding: 0.5625rem 0;
+  margin-bottom: 0;
+  line-height: 1.4285714286;
+  color: var(--tblr-body-color);
+  background-color: transparent;
+  border: solid transparent;
+  border-width: var(--tblr-border-width) 0;
+}
+.form-control-plaintext:focus {
+  outline: 0;
+}
+.form-control-plaintext.form-control-sm, .form-control-plaintext.form-control-lg {
+  padding-left: 0;
+  padding-right: 0;
+}
+
+.form-control-sm {
+  min-height: calc(1.4285714286em + 0.25rem + calc(var(--tblr-border-width) * 2));
+  padding: 0.125rem 0.25rem;
+  font-size: 0.75rem;
+  border-radius: var(--tblr-border-radius-sm);
+}
+.form-control-sm::-webkit-file-upload-button {
+  padding: 0.125rem 0.25rem;
+  margin: -0.125rem -0.25rem;
+  -webkit-margin-end: 0.25rem;
+          margin-inline-end: 0.25rem;
+}
+.form-control-sm::file-selector-button {
+  padding: 0.125rem 0.25rem;
+  margin: -0.125rem -0.25rem;
+  -webkit-margin-end: 0.25rem;
+          margin-inline-end: 0.25rem;
+}
+
+.form-control-lg {
+  min-height: calc(1.4285714286em + 1rem + calc(var(--tblr-border-width) * 2));
+  padding: 0.5rem 0.75rem;
+  font-size: 1.25rem;
+  border-radius: var(--tblr-border-radius-lg);
+}
+.form-control-lg::-webkit-file-upload-button {
+  padding: 0.5rem 0.75rem;
+  margin: -0.5rem -0.75rem;
+  -webkit-margin-end: 0.75rem;
+          margin-inline-end: 0.75rem;
+}
+.form-control-lg::file-selector-button {
+  padding: 0.5rem 0.75rem;
+  margin: -0.5rem -0.75rem;
+  -webkit-margin-end: 0.75rem;
+          margin-inline-end: 0.75rem;
+}
+
+textarea.form-control {
+  min-height: calc(1.4285714286em + 1.125rem + calc(var(--tblr-border-width) * 2));
+}
+textarea.form-control-sm {
+  min-height: calc(1.4285714286em + 0.25rem + calc(var(--tblr-border-width) * 2));
+}
+textarea.form-control-lg {
+  min-height: calc(1.4285714286em + 1rem + calc(var(--tblr-border-width) * 2));
+}
+
+.form-control-color {
+  width: 3rem;
+  height: calc(1.4285714286em + 1.125rem + calc(var(--tblr-border-width) * 2));
+  padding: 0.5625rem;
+}
+.form-control-color:not(:disabled):not([readonly]) {
+  cursor: pointer;
+}
+.form-control-color::-moz-color-swatch {
+  border: 0 !important;
+  border-radius: var(--tblr-border-radius);
+}
+.form-control-color::-webkit-color-swatch {
+  border: 0 !important;
+  border-radius: var(--tblr-border-radius);
+}
+.form-control-color.form-control-sm {
+  height: calc(1.4285714286em + 0.25rem + calc(var(--tblr-border-width) * 2));
+}
+.form-control-color.form-control-lg {
+  height: calc(1.4285714286em + 1rem + calc(var(--tblr-border-width) * 2));
+}
+
+.form-select {
+  --tblr-form-select-bg-img: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23929dab' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e");
+  display: block;
+  width: 100%;
+  padding: 0.5625rem 0.75rem 0.5625rem 2.25rem;
+  font-family: var(--tblr-font-sans-serif);
+  font-size: 0.875rem;
+  font-weight: 400;
+  line-height: 1.4285714286;
+  color: var(--tblr-body-color);
+  -webkit-appearance: none;
+     -moz-appearance: none;
+          appearance: none;
+  background-color: var(--tblr-bg-forms);
+  background-image: var(--tblr-form-select-bg-img), var(--tblr-form-select-bg-icon, none);
+  background-repeat: no-repeat;
+  background-position: left 0.75rem center;
+  background-size: 16px 12px;
+  border: var(--tblr-border-width) solid var(--tblr-border-color);
+  border-radius: var(--tblr-border-radius);
+  box-shadow: var(--tblr-box-shadow-input);
+  transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
+}
+@media (prefers-reduced-motion: reduce) {
+  .form-select {
+    transition: none;
+  }
+}
+.form-select:focus {
+  border-color: #80aad3;
+  outline: 0;
+  box-shadow: var(--tblr-box-shadow-input), 0 0 0 0.25rem rgba(var(--tblr-primary-rgb), 0.25);
+}
+.form-select[multiple], .form-select[size]:not([size="1"]) {
+  padding-left: 0.75rem;
+  background-image: none;
+}
+.form-select:disabled {
+  background-color: var(--tblr-bg-surface-secondary);
+}
+.form-select:-moz-focusring {
+  color: transparent;
+  text-shadow: 0 0 0 var(--tblr-body-color);
+}
+
+.form-select-sm {
+  padding-top: 0.125rem;
+  padding-bottom: 0.125rem;
+  padding-right: 0.25rem;
+  font-size: 0.75rem;
+  border-radius: var(--tblr-border-radius-sm);
+}
+
+.form-select-lg {
+  padding-top: 0.5rem;
+  padding-bottom: 0.5rem;
+  padding-right: 0.75rem;
+  font-size: 1.25rem;
+  border-radius: var(--tblr-border-radius-lg);
+}
+
+[data-bs-theme=dark] .form-select, body[data-bs-theme=dark] [data-bs-theme=light] .form-select {
+  --tblr-form-select-bg-img: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23fcfdfe' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e");
+}
+
+.form-check {
+  display: block;
+  min-height: 1.25rem;
+  padding-right: 2rem;
+  margin-bottom: 0.75rem;
+}
+.form-check .form-check-input {
+  float: right;
+  margin-right: -2rem;
+}
+
+.form-check-reverse {
+  padding-left: 2rem;
+  padding-right: 0;
+  text-align: left;
+}
+.form-check-reverse .form-check-input {
+  float: left;
+  margin-left: -2rem;
+  margin-right: 0;
+}
+
+.form-check-input {
+  --tblr-form-check-bg: var(--tblr-bg-forms);
+  width: 1.25rem;
+  height: 1.25rem;
+  margin-top: 0.0892857143rem;
+  vertical-align: top;
+  -webkit-appearance: none;
+     -moz-appearance: none;
+          appearance: none;
+  background-color: var(--tblr-form-check-bg);
+  background-image: var(--tblr-form-check-bg-image);
+  background-repeat: no-repeat;
+  background-position: center;
+  background-size: contain;
+  border: var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent);
+  -webkit-print-color-adjust: exact;
+     color-adjust: exact;
+          print-color-adjust: exact;
+}
+.form-check-input[type=checkbox] {
+  border-radius: var(--tblr-border-radius);
+}
+.form-check-input[type=radio] {
+  border-radius: 50%;
+}
+.form-check-input:active {
+  filter: brightness(90%);
+}
+.form-check-input:focus {
+  border-color: #80aad3;
+  outline: 0;
+  box-shadow: 0 0 0 0.25rem rgba(var(--tblr-primary-rgb), 0.25);
+}
+.form-check-input:checked {
+  background-color: var(--tblr-primary);
+  border-color: var(--tblr-border-color-translucent);
+}
+.form-check-input:checked[type=checkbox] {
+  --tblr-form-check-bg-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' width='16' height='16'%3e%3cpath fill='none' stroke='%23ffffff' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M4 8.5l2.5 2.5l5.5 -5.5'/%3e%3c/svg%3e");
+}
+.form-check-input:checked[type=radio] {
+  --tblr-form-check-bg-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3ccircle r='3' fill='%23ffffff' cx='8' cy='8' /%3e%3c/svg%3e");
+}
+.form-check-input[type=checkbox]:indeterminate {
+  background-color: var(--tblr-primary);
+  border-color: var(--tblr-primary);
+  --tblr-form-check-bg-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23ffffff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/%3e%3c/svg%3e");
+}
+.form-check-input:disabled {
+  pointer-events: none;
+  filter: none;
+  opacity: 0.5;
+}
+.form-check-input[disabled] ~ .form-check-label, .form-check-input:disabled ~ .form-check-label {
+  cursor: default;
+  opacity: 0.7;
+}
+
+.form-switch {
+  padding-right: 2.5rem;
+}
+.form-switch .form-check-input {
+  --tblr-form-switch-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23dadfe5'/%3e%3c/svg%3e");
+  width: 2rem;
+  margin-right: -2.5rem;
+  background-image: var(--tblr-form-switch-bg);
+  background-position: right center;
+  border-radius: 2rem;
+  transition: background-position 0.15s ease-in-out;
+}
+@media (prefers-reduced-motion: reduce) {
+  .form-switch .form-check-input {
+    transition: none;
+  }
+}
+.form-switch .form-check-input:focus {
+  --tblr-form-switch-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%2380aad3'/%3e%3c/svg%3e");
+}
+.form-switch .form-check-input:checked {
+  background-position: left center;
+  --tblr-form-switch-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23ffffff'/%3e%3c/svg%3e");
+}
+.form-switch.form-check-reverse {
+  padding-left: 2.5rem;
+  padding-right: 0;
+}
+.form-switch.form-check-reverse .form-check-input {
+  margin-left: -2.5rem;
+  margin-right: 0;
+}
+
+.form-check-inline {
+  display: inline-block;
+  margin-left: 1rem;
+}
+
+.btn-check {
+  position: absolute;
+  clip: rect(0, 0, 0, 0);
+  pointer-events: none;
+}
+.btn-check[disabled] + .btn, .btn-check:disabled + .btn {
+  pointer-events: none;
+  filter: none;
+  opacity: 0.4;
+}
+
+[data-bs-theme=dark] .form-switch .form-check-input:not(:checked):not(:focus) {
+  --tblr-form-switch-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%28255, 255, 255, 0.25%29'/%3e%3c/svg%3e");
+}
+
+.form-range {
+  width: 100%;
+  height: 1.25rem;
+  padding: 0;
+  -webkit-appearance: none;
+     -moz-appearance: none;
+          appearance: none;
+  background-color: transparent;
+}
+.form-range:focus {
+  outline: 0;
+}
+.form-range:focus::-webkit-slider-thumb {
+  box-shadow: 0 0 0 1px #f6f8fb, 0 0 0 0.25rem rgba(var(--tblr-primary-rgb), 0.25);
+}
+.form-range:focus::-moz-range-thumb {
+  box-shadow: 0 0 0 1px #f6f8fb, 0 0 0 0.25rem rgba(var(--tblr-primary-rgb), 0.25);
+}
+.form-range::-moz-focus-outer {
+  border: 0;
+}
+.form-range::-webkit-slider-thumb {
+  width: 1rem;
+  height: 1rem;
+  margin-top: -0.375rem;
+  -webkit-appearance: none;
+          appearance: none;
+  background-color: var(--tblr-primary);
+  border: 2px var(--tblr-border-style) #ffffff;
+  border-radius: 1rem;
+  box-shadow: 0 0.1rem 0.25rem rgba(0, 0, 0, 0.1);
+  -webkit-transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
+  transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
+}
+@media (prefers-reduced-motion: reduce) {
+  .form-range::-webkit-slider-thumb {
+    -webkit-transition: none;
+    transition: none;
+  }
+}
+.form-range::-webkit-slider-thumb:active {
+  background-color: #b3cce4;
+}
+.form-range::-webkit-slider-runnable-track {
+  width: 100%;
+  height: 0.25rem;
+  color: transparent;
+  cursor: pointer;
+  background-color: var(--tblr-border-color);
+  border-color: transparent;
+  border-radius: 1rem;
+  box-shadow: 0 0 transparent;
+}
+.form-range::-moz-range-thumb {
+  width: 1rem;
+  height: 1rem;
+  -moz-appearance: none;
+       appearance: none;
+  background-color: var(--tblr-primary);
+  border: 2px var(--tblr-border-style) #ffffff;
+  border-radius: 1rem;
+  box-shadow: 0 0.1rem 0.25rem rgba(0, 0, 0, 0.1);
+  -moz-transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
+  transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
+}
+@media (prefers-reduced-motion: reduce) {
+  .form-range::-moz-range-thumb {
+    -moz-transition: none;
+    transition: none;
+  }
+}
+.form-range::-moz-range-thumb:active {
+  background-color: #b3cce4;
+}
+.form-range::-moz-range-track {
+  width: 100%;
+  height: 0.25rem;
+  color: transparent;
+  cursor: pointer;
+  background-color: var(--tblr-border-color);
+  border-color: transparent;
+  border-radius: 1rem;
+  box-shadow: 0 0 transparent;
+}
+.form-range:disabled {
+  pointer-events: none;
+}
+.form-range:disabled::-webkit-slider-thumb {
+  background-color: var(--tblr-secondary-color);
+}
+.form-range:disabled::-moz-range-thumb {
+  background-color: var(--tblr-secondary-color);
+}
+
+.form-floating {
+  position: relative;
+}
+.form-floating > .form-control,
+.form-floating > .form-control-plaintext,
+.form-floating > .form-select {
+  height: calc(3.5rem + calc(var(--tblr-border-width) * 2));
+  min-height: calc(3.5rem + calc(var(--tblr-border-width) * 2));
+  line-height: 1.25;
+}
+.form-floating > label {
+  position: absolute;
+  top: 0;
+  right: 0;
+  z-index: 2;
+  height: 100%;
+  padding: 1rem 0.75rem;
+  overflow: hidden;
+  text-align: start;
+  text-overflow: ellipsis;
+  white-space: nowrap;
+  pointer-events: none;
+  border: var(--tblr-border-width) solid transparent;
+  transform-origin: 100% 0;
+  transition: opacity 0.1s ease-in-out, transform 0.1s ease-in-out;
+}
+@media (prefers-reduced-motion: reduce) {
+  .form-floating > label {
+    transition: none;
+  }
+}
+.form-floating > .form-control,
+.form-floating > .form-control-plaintext {
+  padding: 1rem 0.75rem;
+}
+.form-floating > .form-control::-webkit-input-placeholder, .form-floating > .form-control-plaintext::-webkit-input-placeholder {
+  color: transparent;
+}
+.form-floating > .form-control:-ms-input-placeholder, .form-floating > .form-control-plaintext:-ms-input-placeholder {
+  color: transparent;
+}
+.form-floating > .form-control::-ms-input-placeholder, .form-floating > .form-control-plaintext::-ms-input-placeholder {
+  color: transparent;
+}
+.form-floating > .form-control::placeholder,
+.form-floating > .form-control-plaintext::placeholder {
+  color: transparent;
+}
+.form-floating > .form-control:not(:-ms-input-placeholder), .form-floating > .form-control-plaintext:not(:-ms-input-placeholder) {
+  padding-top: 1.625rem;
+  padding-bottom: 0.625rem;
+}
+.form-floating > .form-control:focus, .form-floating > .form-control:not(:placeholder-shown),
+.form-floating > .form-control-plaintext:focus,
+.form-floating > .form-control-plaintext:not(:placeholder-shown) {
+  padding-top: 1.625rem;
+  padding-bottom: 0.625rem;
+}
+.form-floating > .form-control:-webkit-autofill,
+.form-floating > .form-control-plaintext:-webkit-autofill {
+  padding-top: 1.625rem;
+  padding-bottom: 0.625rem;
+}
+.form-floating > .form-select {
+  padding-top: 1.625rem;
+  padding-bottom: 0.625rem;
+}
+.form-floating > .form-control:not(:-ms-input-placeholder) ~ label {
+  color: rgba(var(--tblr-body-color-rgb), 0.65);
+  transform: scale(0.85) translateY(-0.5rem) translateX(-0.15rem);
+}
+.form-floating > .form-control:focus ~ label,
+.form-floating > .form-control:not(:placeholder-shown) ~ label,
+.form-floating > .form-control-plaintext ~ label,
+.form-floating > .form-select ~ label {
+  color: rgba(var(--tblr-body-color-rgb), 0.65);
+  transform: scale(0.85) translateY(-0.5rem) translateX(-0.15rem);
+}
+.form-floating > .form-control:not(:-ms-input-placeholder) ~ label::after {
+  position: absolute;
+  inset: 1rem 0.375rem;
+  z-index: -1;
+  height: 1.5em;
+  content: "";
+  background-color: var(--tblr-bg-forms);
+  border-radius: var(--tblr-border-radius);
+}
+.form-floating > .form-control:focus ~ label::after,
+.form-floating > .form-control:not(:placeholder-shown) ~ label::after,
+.form-floating > .form-control-plaintext ~ label::after,
+.form-floating > .form-select ~ label::after {
+  position: absolute;
+  inset: 1rem 0.375rem;
+  z-index: -1;
+  height: 1.5em;
+  content: "";
+  background-color: var(--tblr-bg-forms);
+  border-radius: var(--tblr-border-radius);
+}
+.form-floating > .form-control:-webkit-autofill ~ label {
+  color: rgba(var(--tblr-body-color-rgb), 0.65);
+  transform: scale(0.85) translateY(-0.5rem) translateX(-0.15rem);
+}
+.form-floating > .form-control-plaintext ~ label {
+  border-width: var(--tblr-border-width) 0;
+}
+.form-floating > :disabled ~ label,
+.form-floating > .form-control:disabled ~ label {
+  color: #667382;
+}
+.form-floating > :disabled ~ label::after,
+.form-floating > .form-control:disabled ~ label::after {
+  background-color: var(--tblr-bg-surface-secondary);
+}
+
+.input-group {
+  position: relative;
+  display: flex;
+  flex-wrap: wrap;
+  align-items: stretch;
+  width: 100%;
+}
+.input-group > .form-control,
+.input-group > .form-select,
+.input-group > .form-floating {
+  position: relative;
+  flex: 1 1 auto;
+  width: 1%;
+  min-width: 0;
+}
+.input-group > .form-control:focus,
+.input-group > .form-select:focus,
+.input-group > .form-floating:focus-within {
+  z-index: 5;
+}
+.input-group .btn {
+  position: relative;
+  z-index: 2;
+}
+.input-group .btn:focus {
+  z-index: 5;
+}
+
+.input-group-text {
+  display: flex;
+  align-items: center;
+  padding: 0.5625rem 0.75rem;
+  font-size: 0.875rem;
+  font-weight: 400;
+  line-height: 1.4285714286;
+  color: var(--tblr-secondary);
+  text-align: center;
+  white-space: nowrap;
+  background-color: var(--tblr-bg-surface-secondary);
+  border: var(--tblr-border-width) solid var(--tblr-border-color);
+  border-radius: var(--tblr-border-radius);
+}
+
+.input-group-lg > .form-control,
+.input-group-lg > .form-select,
+.input-group-lg > .input-group-text,
+.input-group-lg > .btn {
+  padding: 0.5rem 0.75rem;
+  font-size: 1.25rem;
+  border-radius: var(--tblr-border-radius-lg);
+}
+
+.input-group-sm > .form-control,
+.input-group-sm > .form-select,
+.input-group-sm > .input-group-text,
+.input-group-sm > .btn {
+  padding: 0.125rem 0.25rem;
+  font-size: 0.75rem;
+  border-radius: var(--tblr-border-radius-sm);
+}
+
+.input-group-lg > .form-select,
+.input-group-sm > .form-select {
+  padding-left: 3rem;
+}
+
+.input-group:not(.has-validation) > :not(:last-child):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating),
+.input-group:not(.has-validation) > .dropdown-toggle:nth-last-child(n+3),
+.input-group:not(.has-validation) > .form-floating:not(:last-child) > .form-control,
+.input-group:not(.has-validation) > .form-floating:not(:last-child) > .form-select {
+  border-top-left-radius: 0;
+  border-bottom-left-radius: 0;
+}
+.input-group.has-validation > :nth-last-child(n+3):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating),
+.input-group.has-validation > .dropdown-toggle:nth-last-child(n+4),
+.input-group.has-validation > .form-floating:nth-last-child(n+3) > .form-control,
+.input-group.has-validation > .form-floating:nth-last-child(n+3) > .form-select {
+  border-top-left-radius: 0;
+  border-bottom-left-radius: 0;
+}
+.input-group > :not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback) {
+  margin-right: calc(var(--tblr-border-width) * -1);
+  border-top-right-radius: 0;
+  border-bottom-right-radius: 0;
+}
+.input-group > .form-floating:not(:first-child) > .form-control,
+.input-group > .form-floating:not(:first-child) > .form-select {
+  border-top-right-radius: 0;
+  border-bottom-right-radius: 0;
+}
+
+.valid-feedback {
+  display: none;
+  width: 100%;
+  margin-top: 0.25rem;
+  font-size: 85.714285%;
+  color: var(--tblr-form-valid-color);
+}
+
+.valid-tooltip {
+  position: absolute;
+  top: 100%;
+  z-index: 5;
+  display: none;
+  max-width: 100%;
+  padding: var(--tblr-spacer-2) var(--tblr-spacer-2);
+  margin-top: 0.1rem;
+  font-size: 0.765625rem;
+  color: #fff;
+  background-color: var(--tblr-success);
+  border-radius: var(--tblr-border-radius);
+}
+
+.was-validated :valid ~ .valid-feedback,
+.was-validated :valid ~ .valid-tooltip,
+.is-valid ~ .valid-feedback,
+.is-valid ~ .valid-tooltip {
+  display: block;
+}
+
+.was-validated .form-control:valid, .form-control.is-valid {
+  border-color: var(--tblr-form-valid-border-color);
+  padding-left: calc(1.4285714286em + 1.125rem);
+  background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%232fb344' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3e%3cpolyline points='20 6 9 17 4 12'%3e%3c/polyline%3e%3c/svg%3e");
+  background-repeat: no-repeat;
+  background-position: left calc(0.3571428572em + 0.28125rem) center;
+  background-size: calc(0.7142857143em + 0.5625rem) calc(0.7142857143em + 0.5625rem);
+}
+.was-validated .form-control:valid:focus, .form-control.is-valid:focus {
+  border-color: var(--tblr-form-valid-border-color);
+  box-shadow: 0 0 0 0.25rem rgba(var(--tblr-success-rgb), 0.25);
+}
+
+.was-validated textarea.form-control:valid, textarea.form-control.is-valid {
+  padding-left: calc(1.4285714286em + 1.125rem);
+  background-position: top calc(0.3571428572em + 0.28125rem) left calc(0.3571428572em + 0.28125rem);
+}
+
+.was-validated .form-select:valid, .form-select.is-valid {
+  border-color: var(--tblr-form-valid-border-color);
+}
+.was-validated .form-select:valid:not([multiple]):not([size]), .was-validated .form-select:valid:not([multiple])[size="1"], .form-select.is-valid:not([multiple]):not([size]), .form-select.is-valid:not([multiple])[size="1"] {
+  --tblr-form-select-bg-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%232fb344' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3e%3cpolyline points='20 6 9 17 4 12'%3e%3c/polyline%3e%3c/svg%3e");
+  padding-left: 4.125rem;
+  background-position: left 0.75rem center, center left 2.25rem;
+  background-size: 16px 12px, calc(0.7142857143em + 0.5625rem) calc(0.7142857143em + 0.5625rem);
+}
+.was-validated .form-select:valid:focus, .form-select.is-valid:focus {
+  border-color: var(--tblr-form-valid-border-color);
+  box-shadow: 0 0 0 0.25rem rgba(var(--tblr-success-rgb), 0.25);
+}
+
+.was-validated .form-control-color:valid, .form-control-color.is-valid {
+  width: calc(3rem + calc(1.4285714286em + 1.125rem));
+}
+
+.was-validated .form-check-input:valid, .form-check-input.is-valid {
+  border-color: var(--tblr-form-valid-border-color);
+}
+.was-validated .form-check-input:valid:checked, .form-check-input.is-valid:checked {
+  background-color: var(--tblr-form-valid-color);
+}
+.was-validated .form-check-input:valid:focus, .form-check-input.is-valid:focus {
+  box-shadow: 0 0 0 0.25rem rgba(var(--tblr-success-rgb), 0.25);
+}
+.was-validated .form-check-input:valid ~ .form-check-label, .form-check-input.is-valid ~ .form-check-label {
+  color: var(--tblr-form-valid-color);
+}
+
+.form-check-inline .form-check-input ~ .valid-feedback {
+  margin-right: 0.5em;
+}
+
+.was-validated .input-group > .form-control:not(:focus):valid, .input-group > .form-control:not(:focus).is-valid,
+.was-validated .input-group > .form-select:not(:focus):valid,
+.input-group > .form-select:not(:focus).is-valid,
+.was-validated .input-group > .form-floating:not(:focus-within):valid,
+.input-group > .form-floating:not(:focus-within).is-valid {
+  z-index: 3;
+}
+
+.invalid-feedback {
+  display: none;
+  width: 100%;
+  margin-top: 0.25rem;
+  font-size: 85.714285%;
+  color: var(--tblr-form-invalid-color);
+}
+
+.invalid-tooltip {
+  position: absolute;
+  top: 100%;
+  z-index: 5;
+  display: none;
+  max-width: 100%;
+  padding: var(--tblr-spacer-2) var(--tblr-spacer-2);
+  margin-top: 0.1rem;
+  font-size: 0.765625rem;
+  color: #fff;
+  background-color: var(--tblr-danger);
+  border-radius: var(--tblr-border-radius);
+}
+
+.was-validated :invalid ~ .invalid-feedback,
+.was-validated :invalid ~ .invalid-tooltip,
+.is-invalid ~ .invalid-feedback,
+.is-invalid ~ .invalid-tooltip {
+  display: block;
+}
+
+.was-validated .form-control:invalid, .form-control.is-invalid {
+  border-color: var(--tblr-form-invalid-border-color);
+  padding-left: calc(1.4285714286em + 1.125rem);
+  background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23d63939' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3e%3cline x1='18' y1='6' x2='6' y2='18'%3e%3c/line%3e%3cline x1='6' y1='6' x2='18' y2='18'%3e%3c/line%3e%3c/svg%3e");
+  background-repeat: no-repeat;
+  background-position: left calc(0.3571428572em + 0.28125rem) center;
+  background-size: calc(0.7142857143em + 0.5625rem) calc(0.7142857143em + 0.5625rem);
+}
+.was-validated .form-control:invalid:focus, .form-control.is-invalid:focus {
+  border-color: var(--tblr-form-invalid-border-color);
+  box-shadow: 0 0 0 0.25rem rgba(var(--tblr-danger-rgb), 0.25);
+}
+
+.was-validated textarea.form-control:invalid, textarea.form-control.is-invalid {
+  padding-left: calc(1.4285714286em + 1.125rem);
+  background-position: top calc(0.3571428572em + 0.28125rem) left calc(0.3571428572em + 0.28125rem);
+}
+
+.was-validated .form-select:invalid, .form-select.is-invalid {
+  border-color: var(--tblr-form-invalid-border-color);
+}
+.was-validated .form-select:invalid:not([multiple]):not([size]), .was-validated .form-select:invalid:not([multiple])[size="1"], .form-select.is-invalid:not([multiple]):not([size]), .form-select.is-invalid:not([multiple])[size="1"] {
+  --tblr-form-select-bg-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23d63939' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3e%3cline x1='18' y1='6' x2='6' y2='18'%3e%3c/line%3e%3cline x1='6' y1='6' x2='18' y2='18'%3e%3c/line%3e%3c/svg%3e");
+  padding-left: 4.125rem;
+  background-position: left 0.75rem center, center left 2.25rem;
+  background-size: 16px 12px, calc(0.7142857143em + 0.5625rem) calc(0.7142857143em + 0.5625rem);
+}
+.was-validated .form-select:invalid:focus, .form-select.is-invalid:focus {
+  border-color: var(--tblr-form-invalid-border-color);
+  box-shadow: 0 0 0 0.25rem rgba(var(--tblr-danger-rgb), 0.25);
+}
+
+.was-validated .form-control-color:invalid, .form-control-color.is-invalid {
+  width: calc(3rem + calc(1.4285714286em + 1.125rem));
+}
+
+.was-validated .form-check-input:invalid, .form-check-input.is-invalid {
+  border-color: var(--tblr-form-invalid-border-color);
+}
+.was-validated .form-check-input:invalid:checked, .form-check-input.is-invalid:checked {
+  background-color: var(--tblr-form-invalid-color);
+}
+.was-validated .form-check-input:invalid:focus, .form-check-input.is-invalid:focus {
+  box-shadow: 0 0 0 0.25rem rgba(var(--tblr-danger-rgb), 0.25);
+}
+.was-validated .form-check-input:invalid ~ .form-check-label, .form-check-input.is-invalid ~ .form-check-label {
+  color: var(--tblr-form-invalid-color);
+}
+
+.form-check-inline .form-check-input ~ .invalid-feedback {
+  margin-right: 0.5em;
+}
+
+.was-validated .input-group > .form-control:not(:focus):invalid, .input-group > .form-control:not(:focus).is-invalid,
+.was-validated .input-group > .form-select:not(:focus):invalid,
+.input-group > .form-select:not(:focus).is-invalid,
+.was-validated .input-group > .form-floating:not(:focus-within):invalid,
+.input-group > .form-floating:not(:focus-within).is-invalid {
+  z-index: 4;
+}
+
+.btn {
+  --tblr-btn-padding-x: 1rem;
+  --tblr-btn-padding-y: 0.5625rem;
+  --tblr-btn-font-family: var(--tblr-font-sans-serif);
+  --tblr-btn-font-size: 0.875rem;
+  --tblr-btn-font-weight: var(--tblr-font-weight-medium);
+  --tblr-btn-line-height: 1.4285714286;
+  --tblr-btn-color: var(--tblr-body-color);
+  --tblr-btn-bg: transparent;
+  --tblr-btn-border-width: var(--tblr-border-width);
+  --tblr-btn-border-color: transparent;
+  --tblr-btn-border-radius: var(--tblr-border-radius);
+  --tblr-btn-hover-border-color: transparent;
+  --tblr-btn-box-shadow: var(--tblr-box-shadow-input);
+  --tblr-btn-disabled-opacity: 0.4;
+  --tblr-btn-focus-box-shadow: 0 0 0 0.25rem rgba(var(--tblr-btn-focus-shadow-rgb), .5);
+  display: inline-block;
+  padding: var(--tblr-btn-padding-y) var(--tblr-btn-padding-x);
+  font-family: var(--tblr-btn-font-family);
+  font-size: var(--tblr-btn-font-size);
+  font-weight: var(--tblr-btn-font-weight);
+  line-height: var(--tblr-btn-line-height);
+  color: var(--tblr-btn-color);
+  text-align: center;
+  vertical-align: middle;
+  cursor: pointer;
+  -webkit-user-select: none;
+     -moz-user-select: none;
+      -ms-user-select: none;
+          user-select: none;
+  border: var(--tblr-btn-border-width) solid var(--tblr-btn-border-color);
+  border-radius: var(--tblr-btn-border-radius);
+  background-color: var(--tblr-btn-bg);
+  box-shadow: var(--tblr-btn-box-shadow);
+  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
+}
+@media (prefers-reduced-motion: reduce) {
+  .btn {
+    transition: none;
+  }
+}
+.btn:hover {
+  color: var(--tblr-btn-hover-color);
+  text-decoration: none;
+  background-color: var(--tblr-btn-hover-bg);
+  border-color: var(--tblr-btn-hover-border-color);
+}
+.btn-check + .btn:hover {
+  color: var(--tblr-btn-color);
+  background-color: var(--tblr-btn-bg);
+  border-color: var(--tblr-btn-border-color);
+}
+.btn:focus-visible {
+  color: var(--tblr-btn-hover-color);
+  background-color: var(--tblr-btn-hover-bg);
+  border-color: var(--tblr-btn-hover-border-color);
+  outline: 0;
+  box-shadow: var(--tblr-btn-box-shadow), var(--tblr-btn-focus-box-shadow);
+}
+.btn-check:focus-visible + .btn {
+  border-color: var(--tblr-btn-hover-border-color);
+  outline: 0;
+  box-shadow: var(--tblr-btn-box-shadow), var(--tblr-btn-focus-box-shadow);
+}
+.btn-check:checked + .btn, :not(.btn-check) + .btn:active, .btn:first-child:active, .btn.active, .btn.show {
+  color: var(--tblr-btn-active-color);
+  background-color: var(--tblr-btn-active-bg);
+  border-color: var(--tblr-btn-active-border-color);
+  box-shadow: var(--tblr-btn-active-shadow);
+}
+.btn-check:checked + .btn:focus-visible, :not(.btn-check) + .btn:active:focus-visible, .btn:first-child:active:focus-visible, .btn.active:focus-visible, .btn.show:focus-visible {
+  box-shadow: var(--tblr-btn-active-shadow), var(--tblr-btn-focus-box-shadow);
+}
+.btn:disabled, .btn.disabled, fieldset:disabled .btn {
+  color: var(--tblr-btn-disabled-color);
+  pointer-events: none;
+  background-color: var(--tblr-btn-disabled-bg);
+  border-color: var(--tblr-btn-disabled-border-color);
+  opacity: var(--tblr-btn-disabled-opacity);
+  box-shadow: none;
+}
+
+.btn-link {
+  --tblr-btn-font-weight: 400;
+  --tblr-btn-color: var(--tblr-link-color);
+  --tblr-btn-bg: transparent;
+  --tblr-btn-border-color: transparent;
+  --tblr-btn-hover-color: var(--tblr-link-hover-color);
+  --tblr-btn-hover-border-color: transparent;
+  --tblr-btn-active-color: var(--tblr-link-hover-color);
+  --tblr-btn-active-border-color: transparent;
+  --tblr-btn-disabled-color: #667382;
+  --tblr-btn-disabled-border-color: transparent;
+  --tblr-btn-box-shadow: 0 0 0 #000;
+  --tblr-btn-focus-shadow-rgb: 38, 109, 179;
+  text-decoration: none;
+}
+.btn-link:hover, .btn-link:focus-visible {
+  text-decoration: underline;
+}
+.btn-link:focus-visible {
+  color: var(--tblr-btn-color);
+}
+.btn-link:hover {
+  color: var(--tblr-btn-hover-color);
+}
+
+.btn-lg, .btn-group-lg > .btn {
+  --tblr-btn-padding-y: 0.5rem;
+  --tblr-btn-padding-x: 0.75rem;
+  --tblr-btn-font-size: 1.25rem;
+  --tblr-btn-border-radius: var(--tblr-border-radius-lg);
+}
+
+.btn-sm, .btn-group-sm > .btn {
+  --tblr-btn-padding-y: 0.125rem;
+  --tblr-btn-padding-x: 0.25rem;
+  --tblr-btn-font-size: 0.75rem;
+  --tblr-btn-border-radius: var(--tblr-border-radius-sm);
+}
+
+.fade {
+  transition: opacity 0.15s linear;
+}
+@media (prefers-reduced-motion: reduce) {
+  .fade {
+    transition: none;
+  }
+}
+.fade:not(.show) {
+  opacity: 0;
+}
+
+.collapse:not(.show) {
+  display: none;
+}
+
+.collapsing {
+  height: 0;
+  overflow: hidden;
+  transition: height 0.35s ease;
+}
+@media (prefers-reduced-motion: reduce) {
+  .collapsing {
+    transition: none;
+  }
+}
+.collapsing.collapse-horizontal {
+  width: 0;
+  height: auto;
+  transition: width 0.35s ease;
+}
+@media (prefers-reduced-motion: reduce) {
+  .collapsing.collapse-horizontal {
+    transition: none;
+  }
+}
+
+.dropup,
+.dropend,
+.dropdown,
+.dropstart,
+.dropup-center,
+.dropdown-center {
+  position: relative;
+}
+
+.dropdown-toggle {
+  white-space: nowrap;
+}
+.dropdown-toggle:after {
+  content: "";
+  display: inline-block;
+  vertical-align: 0.306em;
+  width: 0.36em;
+  height: 0.36em;
+  border-bottom: 1px var(--tblr-border-style);
+  border-right: 1px var(--tblr-border-style);
+  margin-left: 0.1em;
+  margin-right: 0.4em;
+  transform: rotate(45deg);
+}
+
+.dropdown-menu {
+  --tblr-dropdown-zindex: 1000;
+  --tblr-dropdown-min-width: 11rem;
+  --tblr-dropdown-padding-x: 0;
+  --tblr-dropdown-padding-y: 0.25rem;
+  --tblr-dropdown-spacer: 1px;
+  --tblr-dropdown-font-size: 0.875rem;
+  --tblr-dropdown-color: var(--tblr-body-color);
+  --tblr-dropdown-bg: var(--tblr-bg-surface);
+  --tblr-dropdown-border-color: var(--tblr-border-color-translucent);
+  --tblr-dropdown-border-radius: var(--tblr-border-radius);
+  --tblr-dropdown-border-width: var(--tblr-border-width);
+  --tblr-dropdown-inner-border-radius: calc(var(--tblr-border-radius) - var(--tblr-border-width));
+  --tblr-dropdown-divider-bg: var(--tblr-border-color-translucent);
+  --tblr-dropdown-divider-margin-y: var(--tblr-spacer);
+  --tblr-dropdown-box-shadow: var(--tblr-box-shadow-dropdown);
+  --tblr-dropdown-link-color: inherit;
+  --tblr-dropdown-link-hover-color: inherit;
+  --tblr-dropdown-link-hover-bg: rgba(var(--tblr-text-secondary-rgb), 0.04);
+  --tblr-dropdown-link-active-color: var(--tblr-primary);
+  --tblr-dropdown-link-active-bg: var(--tblr-active-bg);
+  --tblr-dropdown-link-disabled-color: var(--tblr-tertiary-color);
+  --tblr-dropdown-item-padding-x: 0.75rem;
+  --tblr-dropdown-item-padding-y: 0.5rem;
+  --tblr-dropdown-header-color: #667382;
+  --tblr-dropdown-header-padding-x: 0.75rem;
+  --tblr-dropdown-header-padding-y: 0.25rem;
+  position: absolute;
+  z-index: var(--tblr-dropdown-zindex);
+  display: none;
+  min-width: var(--tblr-dropdown-min-width);
+  padding: var(--tblr-dropdown-padding-y) var(--tblr-dropdown-padding-x);
+  margin: 0;
+  font-size: var(--tblr-dropdown-font-size);
+  color: var(--tblr-dropdown-color);
+  text-align: right;
+  list-style: none;
+  background-color: var(--tblr-dropdown-bg);
+  background-clip: padding-box;
+  border: var(--tblr-dropdown-border-width) solid var(--tblr-dropdown-border-color);
+  border-radius: var(--tblr-dropdown-border-radius);
+  box-shadow: var(--tblr-dropdown-box-shadow);
+}
+.dropdown-menu[data-bs-popper] {
+  top: 100%;
+  right: 0;
+  margin-top: var(--tblr-dropdown-spacer);
+}
+
+.dropdown-menu-start {
+  --bs-position: start;
+}
+.dropdown-menu-start[data-bs-popper] {
+  left: auto;
+  right: 0;
+}
+
+.dropdown-menu-end {
+  --bs-position: end;
+}
+.dropdown-menu-end[data-bs-popper] {
+  left: 0;
+  right: auto;
+}
+
+@media (min-width: 576px) {
+  .dropdown-menu-sm-start {
+    --bs-position: start;
+  }
+  .dropdown-menu-sm-start[data-bs-popper] {
+    left: auto;
+    right: 0;
+  }
+  .dropdown-menu-sm-end {
+    --bs-position: end;
+  }
+  .dropdown-menu-sm-end[data-bs-popper] {
+    left: 0;
+    right: auto;
+  }
+}
+@media (min-width: 768px) {
+  .dropdown-menu-md-start {
+    --bs-position: start;
+  }
+  .dropdown-menu-md-start[data-bs-popper] {
+    left: auto;
+    right: 0;
+  }
+  .dropdown-menu-md-end {
+    --bs-position: end;
+  }
+  .dropdown-menu-md-end[data-bs-popper] {
+    left: 0;
+    right: auto;
+  }
+}
+@media (min-width: 992px) {
+  .dropdown-menu-lg-start {
+    --bs-position: start;
+  }
+  .dropdown-menu-lg-start[data-bs-popper] {
+    left: auto;
+    right: 0;
+  }
+  .dropdown-menu-lg-end {
+    --bs-position: end;
+  }
+  .dropdown-menu-lg-end[data-bs-popper] {
+    left: 0;
+    right: auto;
+  }
+}
+@media (min-width: 1200px) {
+  .dropdown-menu-xl-start {
+    --bs-position: start;
+  }
+  .dropdown-menu-xl-start[data-bs-popper] {
+    left: auto;
+    right: 0;
+  }
+  .dropdown-menu-xl-end {
+    --bs-position: end;
+  }
+  .dropdown-menu-xl-end[data-bs-popper] {
+    left: 0;
+    right: auto;
+  }
+}
+@media (min-width: 1400px) {
+  .dropdown-menu-xxl-start {
+    --bs-position: start;
+  }
+  .dropdown-menu-xxl-start[data-bs-popper] {
+    left: auto;
+    right: 0;
+  }
+  .dropdown-menu-xxl-end {
+    --bs-position: end;
+  }
+  .dropdown-menu-xxl-end[data-bs-popper] {
+    left: 0;
+    right: auto;
+  }
+}
+.dropup .dropdown-menu[data-bs-popper] {
+  top: auto;
+  bottom: 100%;
+  margin-top: 0;
+  margin-bottom: var(--tblr-dropdown-spacer);
+}
+.dropup .dropdown-toggle:after {
+  content: "";
+  display: inline-block;
+  vertical-align: 0.306em;
+  width: 0.36em;
+  height: 0.36em;
+  border-bottom: 1px var(--tblr-border-style);
+  border-right: 1px var(--tblr-border-style);
+  margin-left: 0.1em;
+  margin-right: 0.4em;
+  transform: rotate(-135deg);
+}
+
+.dropend .dropdown-menu[data-bs-popper] {
+  top: 0;
+  left: auto;
+  right: 100%;
+  margin-top: 0;
+  margin-right: var(--tblr-dropdown-spacer);
+}
+.dropend .dropdown-toggle:after {
+  content: "";
+  display: inline-block;
+  vertical-align: 0.306em;
+  width: 0.36em;
+  height: 0.36em;
+  border-bottom: 1px var(--tblr-border-style);
+  border-right: 1px var(--tblr-border-style);
+  margin-left: 0.1em;
+  margin-right: 0.4em;
+  transform: rotate(135deg);
+}
+.dropend .dropdown-toggle::after {
+  vertical-align: 0;
+}
+
+.dropstart .dropdown-menu[data-bs-popper] {
+  top: 0;
+  left: 100%;
+  right: auto;
+  margin-top: 0;
+  margin-left: var(--tblr-dropdown-spacer);
+}
+.dropstart .dropdown-toggle:after {
+  content: "";
+  display: inline-block;
+  vertical-align: 0.306em;
+  width: 0.36em;
+  height: 0.36em;
+  border-bottom: 1px var(--tblr-border-style);
+  border-right: 1px var(--tblr-border-style);
+  margin-left: 0.1em;
+  margin-right: 0.4em;
+  transform: rotate(-45deg);
+}
+.dropstart .dropdown-toggle::before {
+  vertical-align: 0;
+}
+
+.dropdown-divider {
+  height: 0;
+  margin: var(--tblr-dropdown-divider-margin-y) 0;
+  overflow: hidden;
+  border-top: 1px solid var(--tblr-dropdown-divider-bg);
+  opacity: 1;
+}
+
+.dropdown-item {
+  display: block;
+  width: 100%;
+  padding: var(--tblr-dropdown-item-padding-y) var(--tblr-dropdown-item-padding-x);
+  clear: both;
+  font-weight: 400;
+  color: var(--tblr-dropdown-link-color);
+  text-align: inherit;
+  white-space: nowrap;
+  background-color: transparent;
+  border: 0;
+  border-radius: var(--tblr-dropdown-item-border-radius, 0);
+}
+.dropdown-item:hover, .dropdown-item:focus {
+  color: var(--tblr-dropdown-link-hover-color);
+  text-decoration: none;
+  background-color: var(--tblr-dropdown-link-hover-bg);
+}
+.dropdown-item.active, .dropdown-item:active {
+  color: var(--tblr-dropdown-link-active-color);
+  text-decoration: none;
+  background-color: var(--tblr-dropdown-link-active-bg);
+}
+.dropdown-item.disabled, .dropdown-item:disabled {
+  color: var(--tblr-dropdown-link-disabled-color);
+  pointer-events: none;
+  background-color: transparent;
+}
+
+.dropdown-menu.show {
+  display: block;
+}
+
+.dropdown-header {
+  display: block;
+  padding: var(--tblr-dropdown-header-padding-y) var(--tblr-dropdown-header-padding-x);
+  margin-bottom: 0;
+  font-size: 0.765625rem;
+  color: var(--tblr-dropdown-header-color);
+  white-space: nowrap;
+}
+
+.dropdown-item-text {
+  display: block;
+  padding: var(--tblr-dropdown-item-padding-y) var(--tblr-dropdown-item-padding-x);
+  color: var(--tblr-dropdown-link-color);
+}
+
+.dropdown-menu-dark {
+  --tblr-dropdown-color: #dadfe5;
+  --tblr-dropdown-bg: #182433;
+  --tblr-dropdown-border-color: var(--tblr-border-color-translucent);
+  --tblr-dropdown-box-shadow: ;
+  --tblr-dropdown-link-color: #dadfe5;
+  --tblr-dropdown-link-hover-color: #ffffff;
+  --tblr-dropdown-divider-bg: var(--tblr-border-color-translucent);
+  --tblr-dropdown-link-hover-bg: rgba(255, 255, 255, 0.15);
+  --tblr-dropdown-link-active-color: var(--tblr-primary);
+  --tblr-dropdown-link-active-bg: var(--tblr-active-bg);
+  --tblr-dropdown-link-disabled-color: #929dab;
+  --tblr-dropdown-header-color: #929dab;
+}
+
+.btn-group,
+.btn-group-vertical {
+  position: relative;
+  display: inline-flex;
+  vertical-align: middle;
+}
+.btn-group > .btn,
+.btn-group-vertical > .btn {
+  position: relative;
+  flex: 1 1 auto;
+}
+.btn-group > .btn-check:checked + .btn,
+.btn-group > .btn-check:focus + .btn,
+.btn-group > .btn:hover,
+.btn-group > .btn:focus,
+.btn-group > .btn:active,
+.btn-group > .btn.active,
+.btn-group-vertical > .btn-check:checked + .btn,
+.btn-group-vertical > .btn-check:focus + .btn,
+.btn-group-vertical > .btn:hover,
+.btn-group-vertical > .btn:focus,
+.btn-group-vertical > .btn:active,
+.btn-group-vertical > .btn.active {
+  z-index: 1;
+}
+
+.btn-toolbar {
+  display: flex;
+  flex-wrap: wrap;
+  justify-content: flex-start;
+}
+.btn-toolbar .input-group {
+  width: auto;
+}
+
+.btn-group {
+  border-radius: var(--tblr-border-radius);
+}
+.btn-group > :not(.btn-check:first-child) + .btn,
+.btn-group > .btn-group:not(:first-child) {
+  margin-right: calc(var(--tblr-border-width) * -1);
+}
+.btn-group > .btn:not(:last-child):not(.dropdown-toggle),
+.btn-group > .btn.dropdown-toggle-split:first-child,
+.btn-group > .btn-group:not(:last-child) > .btn {
+  border-top-left-radius: 0;
+  border-bottom-left-radius: 0;
+}
+.btn-group > .btn:nth-child(n+3),
+.btn-group > :not(.btn-check) + .btn,
+.btn-group > .btn-group:not(:first-child) > .btn {
+  border-top-right-radius: 0;
+  border-bottom-right-radius: 0;
+}
+
+.dropdown-toggle-split {
+  padding-left: 0.75rem;
+  padding-right: 0.75rem;
+}
+.dropdown-toggle-split::after, .dropup .dropdown-toggle-split::after, .dropend .dropdown-toggle-split::after {
+  margin-right: 0;
+}
+.dropstart .dropdown-toggle-split::before {
+  margin-left: 0;
+}
+
+.btn-sm + .dropdown-toggle-split, .btn-group-sm > .btn + .dropdown-toggle-split {
+  padding-left: 0.1875rem;
+  padding-right: 0.1875rem;
+}
+
+.btn-lg + .dropdown-toggle-split, .btn-group-lg > .btn + .dropdown-toggle-split {
+  padding-left: 0.5625rem;
+  padding-right: 0.5625rem;
+}
+
+.btn-group.show .dropdown-toggle {
+  box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
+}
+.btn-group.show .dropdown-toggle.btn-link {
+  box-shadow: none;
+}
+
+.btn-group-vertical {
+  flex-direction: column;
+  align-items: flex-start;
+  justify-content: center;
+}
+.btn-group-vertical > .btn,
+.btn-group-vertical > .btn-group {
+  width: 100%;
+}
+.btn-group-vertical > .btn:not(:first-child),
+.btn-group-vertical > .btn-group:not(:first-child) {
+  margin-top: calc(var(--tblr-border-width) * -1);
+}
+.btn-group-vertical > .btn:not(:last-child):not(.dropdown-toggle),
+.btn-group-vertical > .btn-group:not(:last-child) > .btn {
+  border-bottom-left-radius: 0;
+  border-bottom-right-radius: 0;
+}
+.btn-group-vertical > .btn ~ .btn,
+.btn-group-vertical > .btn-group:not(:first-child) > .btn {
+  border-top-right-radius: 0;
+  border-top-left-radius: 0;
+}
+
+.nav {
+  --tblr-nav-link-padding-x: 0.75rem;
+  --tblr-nav-link-padding-y: 0.5rem;
+  --tblr-nav-link-font-weight: ;
+  --tblr-nav-link-color: var(--tblr-secondary);
+  --tblr-nav-link-hover-color: var(--tblr-link-hover-color);
+  --tblr-nav-link-disabled-color: var(--tblr-disabled-color);
+  display: flex;
+  flex-wrap: wrap;
+  padding-right: 0;
+  margin-bottom: 0;
+  list-style: none;
+}
+
+.nav-link {
+  display: block;
+  padding: var(--tblr-nav-link-padding-y) var(--tblr-nav-link-padding-x);
+  font-size: var(--tblr-nav-link-font-size);
+  font-weight: var(--tblr-nav-link-font-weight);
+  color: var(--tblr-nav-link-color);
+  background: none;
+  border: 0;
+  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out;
+}
+@media (prefers-reduced-motion: reduce) {
+  .nav-link {
+    transition: none;
+  }
+}
+.nav-link:hover, .nav-link:focus {
+  color: var(--tblr-nav-link-hover-color);
+  text-decoration: none;
+}
+.nav-link:focus-visible {
+  outline: 0;
+  box-shadow: 0 0 0 0.25rem rgba(var(--tblr-primary-rgb), 0.25);
+}
+.nav-link.disabled, .nav-link:disabled {
+  color: var(--tblr-nav-link-disabled-color);
+  pointer-events: none;
+  cursor: default;
+}
+
+.nav-tabs {
+  --tblr-nav-tabs-border-width: var(--tblr-border-width);
+  --tblr-nav-tabs-border-color: var(--tblr-border-color);
+  --tblr-nav-tabs-border-radius: var(--tblr-border-radius);
+  --tblr-nav-tabs-link-hover-border-color: var(--tblr-border-color) var(--tblr-border-color) var(--tblr-border-color);
+  --tblr-nav-tabs-link-active-color: var(--tblr-body-color);
+  --tblr-nav-tabs-link-active-bg: var(--tblr-body-bg);
+  --tblr-nav-tabs-link-active-border-color: var(--tblr-border-color) var(--tblr-border-color) var(--tblr-border-color);
+  border-bottom: var(--tblr-nav-tabs-border-width) solid var(--tblr-nav-tabs-border-color);
+}
+.nav-tabs .nav-link {
+  margin-bottom: calc(-1 * var(--tblr-nav-tabs-border-width));
+  border: var(--tblr-nav-tabs-border-width) solid transparent;
+  border-top-right-radius: var(--tblr-nav-tabs-border-radius);
+  border-top-left-radius: var(--tblr-nav-tabs-border-radius);
+}
+.nav-tabs .nav-link:hover, .nav-tabs .nav-link:focus {
+  isolation: isolate;
+  border-color: var(--tblr-nav-tabs-link-hover-border-color);
+}
+.nav-tabs .nav-link.active,
+.nav-tabs .nav-item.show .nav-link {
+  color: var(--tblr-nav-tabs-link-active-color);
+  background-color: var(--tblr-nav-tabs-link-active-bg);
+  border-color: var(--tblr-nav-tabs-link-active-border-color);
+}
+.nav-tabs .dropdown-menu {
+  margin-top: calc(-1 * var(--tblr-nav-tabs-border-width));
+  border-top-right-radius: 0;
+  border-top-left-radius: 0;
+}
+
+.nav-pills {
+  --tblr-nav-pills-border-radius: var(--tblr-border-radius);
+  --tblr-nav-pills-link-active-color: var(--tblr-primary);
+  --tblr-nav-pills-link-active-bg: var(--tblr-active-bg);
+}
+.nav-pills .nav-link {
+  border-radius: var(--tblr-nav-pills-border-radius);
+}
+.nav-pills .nav-link.active,
+.nav-pills .show > .nav-link {
+  color: var(--tblr-nav-pills-link-active-color);
+  background-color: var(--tblr-nav-pills-link-active-bg);
+}
+
+.nav-underline {
+  --tblr-nav-underline-gap: 1rem;
+  --tblr-nav-underline-border-width: 0.125rem;
+  --tblr-nav-underline-link-active-color: var(--tblr-emphasis-color);
+  gap: var(--tblr-nav-underline-gap);
+}
+.nav-underline .nav-link {
+  padding-left: 0;
+  padding-right: 0;
+  border-bottom: var(--tblr-nav-underline-border-width) solid transparent;
+}
+.nav-underline .nav-link:hover, .nav-underline .nav-link:focus {
+  border-bottom-color: currentcolor;
+}
+.nav-underline .nav-link.active,
+.nav-underline .show > .nav-link {
+  font-weight: 600;
+  color: var(--tblr-nav-underline-link-active-color);
+  border-bottom-color: currentcolor;
+}
+
+.nav-fill > .nav-link,
+.nav-fill .nav-item {
+  flex: 1 1 auto;
+  text-align: center;
+}
+
+.nav-justified > .nav-link,
+.nav-justified .nav-item {
+  flex-basis: 0;
+  flex-grow: 1;
+  text-align: center;
+}
+
+.nav-fill .nav-item .nav-link,
+.nav-justified .nav-item .nav-link {
+  width: 100%;
+}
+
+.tab-content > .tab-pane {
+  display: none;
+}
+.tab-content > .active {
+  display: block;
+}
+
+.navbar {
+  --tblr-navbar-padding-x: 0;
+  --tblr-navbar-padding-y: 0.25rem;
+  --tblr-navbar-color: var(--tblr-body-color);
+  --tblr-navbar-hover-color: rgba(var(--tblr-emphasis-color-rgb), 0.8);
+  --tblr-navbar-disabled-color: var(--tblr-disabled-color);
+  --tblr-navbar-active-color: var(--tblr-body-color) color;
+  --tblr-navbar-brand-padding-y: 0.5rem;
+  --tblr-navbar-brand-margin-end: 1rem;
+  --tblr-navbar-brand-font-size: 1.25rem;
+  --tblr-navbar-brand-color: var(--tblr-body-color);
+  --tblr-navbar-brand-hover-color: var(--tblr-body-color) color;
+  --tblr-navbar-nav-link-padding-x: 0.75rem;
+  --tblr-navbar-toggler-padding-y: 0;
+  --tblr-navbar-toggler-padding-x: 0;
+  --tblr-navbar-toggler-font-size: 1rem;
+  --tblr-navbar-toggler-icon-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%2824, 36, 51, 0.75%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e");
+  --tblr-navbar-toggler-border-color: rgba(var(--tblr-emphasis-color-rgb), 0.15);
+  --tblr-navbar-toggler-border-radius: var(--tblr-border-radius);
+  --tblr-navbar-toggler-focus-width: 0;
+  --tblr-navbar-toggler-transition: box-shadow 0.15s ease-in-out;
+  position: relative;
+  display: flex;
+  flex-wrap: wrap;
+  align-items: center;
+  justify-content: space-between;
+  padding: var(--tblr-navbar-padding-y) var(--tblr-navbar-padding-x);
+}
+.navbar > .container,
+.navbar > .container-fluid,
+.navbar > .container-sm,
+.navbar > .container-md,
+.navbar > .container-lg,
+.navbar > .container-xl,
+.navbar > .container-xxl {
+  display: flex;
+  flex-wrap: inherit;
+  align-items: center;
+  justify-content: space-between;
+}
+.navbar-brand {
+  padding-top: var(--tblr-navbar-brand-padding-y);
+  padding-bottom: var(--tblr-navbar-brand-padding-y);
+  margin-left: var(--tblr-navbar-brand-margin-end);
+  font-size: var(--tblr-navbar-brand-font-size);
+  color: var(--tblr-navbar-brand-color);
+  white-space: nowrap;
+}
+.navbar-brand:hover, .navbar-brand:focus {
+  color: var(--tblr-navbar-brand-hover-color);
+  text-decoration: none;
+}
+
+.navbar-nav {
+  --tblr-nav-link-padding-x: 0;
+  --tblr-nav-link-padding-y: 0.5rem;
+  --tblr-nav-link-font-weight: ;
+  --tblr-nav-link-color: var(--tblr-navbar-color);
+  --tblr-nav-link-hover-color: var(--tblr-navbar-hover-color);
+  --tblr-nav-link-disabled-color: var(--tblr-navbar-disabled-color);
+  display: flex;
+  flex-direction: column;
+  padding-right: 0;
+  margin-bottom: 0;
+  list-style: none;
+}
+.navbar-nav .nav-link.active, .navbar-nav .nav-link.show {
+  color: var(--tblr-navbar-active-color);
+}
+.navbar-nav .dropdown-menu {
+  position: static;
+}
+
+.navbar-text {
+  padding-top: 0.5rem;
+  padding-bottom: 0.5rem;
+  color: var(--tblr-navbar-color);
+}
+.navbar-text a,
+.navbar-text a:hover,
+.navbar-text a:focus {
+  color: var(--tblr-navbar-active-color);
+}
+
+.navbar-collapse {
+  flex-basis: 100%;
+  flex-grow: 1;
+  align-items: center;
+}
+
+.navbar-toggler {
+  padding: var(--tblr-navbar-toggler-padding-y) var(--tblr-navbar-toggler-padding-x);
+  font-size: var(--tblr-navbar-toggler-font-size);
+  line-height: 1;
+  color: var(--tblr-navbar-color);
+  background-color: transparent;
+  border: var(--tblr-border-width) solid var(--tblr-navbar-toggler-border-color);
+  border-radius: var(--tblr-navbar-toggler-border-radius);
+  transition: var(--tblr-navbar-toggler-transition);
+}
+@media (prefers-reduced-motion: reduce) {
+  .navbar-toggler {
+    transition: none;
+  }
+}
+.navbar-toggler:hover {
+  text-decoration: none;
+}
+.navbar-toggler:focus {
+  text-decoration: none;
+  outline: 0;
+  box-shadow: 0 0 0 var(--tblr-navbar-toggler-focus-width);
+}
+
+.navbar-toggler-icon {
+  display: inline-block;
+  width: 1.5em;
+  height: 1.5em;
+  vertical-align: middle;
+  background-image: var(--tblr-navbar-toggler-icon-bg);
+  background-repeat: no-repeat;
+  background-position: center;
+  background-size: 100%;
+}
+
+.navbar-nav-scroll {
+  max-height: var(--tblr-scroll-height, 75vh);
+  overflow-y: auto;
+}
+
+@media (min-width: 576px) {
+  .navbar-expand-sm {
+    flex-wrap: nowrap;
+    justify-content: flex-start;
+  }
+  .navbar-expand-sm .navbar-nav {
+    flex-direction: row;
+  }
+  .navbar-expand-sm .navbar-nav .dropdown-menu {
+    position: absolute;
+  }
+  .navbar-expand-sm .navbar-nav .nav-link {
+    padding-left: var(--tblr-navbar-nav-link-padding-x);
+    padding-right: var(--tblr-navbar-nav-link-padding-x);
+  }
+  .navbar-expand-sm .navbar-nav-scroll {
+    overflow: visible;
+  }
+  .navbar-expand-sm .navbar-collapse {
+    display: flex !important;
+    flex-basis: auto;
+  }
+  .navbar-expand-sm .navbar-toggler {
+    display: none;
+  }
+  .navbar-expand-sm .offcanvas {
+    position: static;
+    z-index: auto;
+    flex-grow: 1;
+    width: auto !important;
+    height: auto !important;
+    visibility: visible !important;
+    background-color: transparent !important;
+    border: 0 !important;
+    transform: none !important;
+    box-shadow: none;
+    transition: none;
+  }
+  .navbar-expand-sm .offcanvas .offcanvas-header {
+    display: none;
+  }
+  .navbar-expand-sm .offcanvas .offcanvas-body {
+    display: flex;
+    flex-grow: 0;
+    padding: 0;
+    overflow-y: visible;
+  }
+}
+@media (min-width: 768px) {
+  .navbar-expand-md {
+    flex-wrap: nowrap;
+    justify-content: flex-start;
+  }
+  .navbar-expand-md .navbar-nav {
+    flex-direction: row;
+  }
+  .navbar-expand-md .navbar-nav .dropdown-menu {
+    position: absolute;
+  }
+  .navbar-expand-md .navbar-nav .nav-link {
+    padding-left: var(--tblr-navbar-nav-link-padding-x);
+    padding-right: var(--tblr-navbar-nav-link-padding-x);
+  }
+  .navbar-expand-md .navbar-nav-scroll {
+    overflow: visible;
+  }
+  .navbar-expand-md .navbar-collapse {
+    display: flex !important;
+    flex-basis: auto;
+  }
+  .navbar-expand-md .navbar-toggler {
+    display: none;
+  }
+  .navbar-expand-md .offcanvas {
+    position: static;
+    z-index: auto;
+    flex-grow: 1;
+    width: auto !important;
+    height: auto !important;
+    visibility: visible !important;
+    background-color: transparent !important;
+    border: 0 !important;
+    transform: none !important;
+    box-shadow: none;
+    transition: none;
+  }
+  .navbar-expand-md .offcanvas .offcanvas-header {
+    display: none;
+  }
+  .navbar-expand-md .offcanvas .offcanvas-body {
+    display: flex;
+    flex-grow: 0;
+    padding: 0;
+    overflow-y: visible;
+  }
+}
+@media (min-width: 992px) {
+  .navbar-expand-lg {
+    flex-wrap: nowrap;
+    justify-content: flex-start;
+  }
+  .navbar-expand-lg .navbar-nav {
+    flex-direction: row;
+  }
+  .navbar-expand-lg .navbar-nav .dropdown-menu {
+    position: absolute;
+  }
+  .navbar-expand-lg .navbar-nav .nav-link {
+    padding-left: var(--tblr-navbar-nav-link-padding-x);
+    padding-right: var(--tblr-navbar-nav-link-padding-x);
+  }
+  .navbar-expand-lg .navbar-nav-scroll {
+    overflow: visible;
+  }
+  .navbar-expand-lg .navbar-collapse {
+    display: flex !important;
+    flex-basis: auto;
+  }
+  .navbar-expand-lg .navbar-toggler {
+    display: none;
+  }
+  .navbar-expand-lg .offcanvas {
+    position: static;
+    z-index: auto;
+    flex-grow: 1;
+    width: auto !important;
+    height: auto !important;
+    visibility: visible !important;
+    background-color: transparent !important;
+    border: 0 !important;
+    transform: none !important;
+    box-shadow: none;
+    transition: none;
+  }
+  .navbar-expand-lg .offcanvas .offcanvas-header {
+    display: none;
+  }
+  .navbar-expand-lg .offcanvas .offcanvas-body {
+    display: flex;
+    flex-grow: 0;
+    padding: 0;
+    overflow-y: visible;
+  }
+}
+@media (min-width: 1200px) {
+  .navbar-expand-xl {
+    flex-wrap: nowrap;
+    justify-content: flex-start;
+  }
+  .navbar-expand-xl .navbar-nav {
+    flex-direction: row;
+  }
+  .navbar-expand-xl .navbar-nav .dropdown-menu {
+    position: absolute;
+  }
+  .navbar-expand-xl .navbar-nav .nav-link {
+    padding-left: var(--tblr-navbar-nav-link-padding-x);
+    padding-right: var(--tblr-navbar-nav-link-padding-x);
+  }
+  .navbar-expand-xl .navbar-nav-scroll {
+    overflow: visible;
+  }
+  .navbar-expand-xl .navbar-collapse {
+    display: flex !important;
+    flex-basis: auto;
+  }
+  .navbar-expand-xl .navbar-toggler {
+    display: none;
+  }
+  .navbar-expand-xl .offcanvas {
+    position: static;
+    z-index: auto;
+    flex-grow: 1;
+    width: auto !important;
+    height: auto !important;
+    visibility: visible !important;
+    background-color: transparent !important;
+    border: 0 !important;
+    transform: none !important;
+    box-shadow: none;
+    transition: none;
+  }
+  .navbar-expand-xl .offcanvas .offcanvas-header {
+    display: none;
+  }
+  .navbar-expand-xl .offcanvas .offcanvas-body {
+    display: flex;
+    flex-grow: 0;
+    padding: 0;
+    overflow-y: visible;
+  }
+}
+@media (min-width: 1400px) {
+  .navbar-expand-xxl {
+    flex-wrap: nowrap;
+    justify-content: flex-start;
+  }
+  .navbar-expand-xxl .navbar-nav {
+    flex-direction: row;
+  }
+  .navbar-expand-xxl .navbar-nav .dropdown-menu {
+    position: absolute;
+  }
+  .navbar-expand-xxl .navbar-nav .nav-link {
+    padding-left: var(--tblr-navbar-nav-link-padding-x);
+    padding-right: var(--tblr-navbar-nav-link-padding-x);
+  }
+  .navbar-expand-xxl .navbar-nav-scroll {
+    overflow: visible;
+  }
+  .navbar-expand-xxl .navbar-collapse {
+    display: flex !important;
+    flex-basis: auto;
+  }
+  .navbar-expand-xxl .navbar-toggler {
+    display: none;
+  }
+  .navbar-expand-xxl .offcanvas {
+    position: static;
+    z-index: auto;
+    flex-grow: 1;
+    width: auto !important;
+    height: auto !important;
+    visibility: visible !important;
+    background-color: transparent !important;
+    border: 0 !important;
+    transform: none !important;
+    box-shadow: none;
+    transition: none;
+  }
+  .navbar-expand-xxl .offcanvas .offcanvas-header {
+    display: none;
+  }
+  .navbar-expand-xxl .offcanvas .offcanvas-body {
+    display: flex;
+    flex-grow: 0;
+    padding: 0;
+    overflow-y: visible;
+  }
+}
+.navbar-expand {
+  flex-wrap: nowrap;
+  justify-content: flex-start;
+}
+.navbar-expand .navbar-nav {
+  flex-direction: row;
+}
+.navbar-expand .navbar-nav .dropdown-menu {
+  position: absolute;
+}
+.navbar-expand .navbar-nav .nav-link {
+  padding-left: var(--tblr-navbar-nav-link-padding-x);
+  padding-right: var(--tblr-navbar-nav-link-padding-x);
+}
+.navbar-expand .navbar-nav-scroll {
+  overflow: visible;
+}
+.navbar-expand .navbar-collapse {
+  display: flex !important;
+  flex-basis: auto;
+}
+.navbar-expand .navbar-toggler {
+  display: none;
+}
+.navbar-expand .offcanvas {
+  position: static;
+  z-index: auto;
+  flex-grow: 1;
+  width: auto !important;
+  height: auto !important;
+  visibility: visible !important;
+  background-color: transparent !important;
+  border: 0 !important;
+  transform: none !important;
+  box-shadow: none;
+  transition: none;
+}
+.navbar-expand .offcanvas .offcanvas-header {
+  display: none;
+}
+.navbar-expand .offcanvas .offcanvas-body {
+  display: flex;
+  flex-grow: 0;
+  padding: 0;
+  overflow-y: visible;
+}
+
+.navbar-dark,
+.navbar[data-bs-theme=dark],
+body[data-bs-theme=dark] .navbar[data-bs-theme=light] {
+  --tblr-navbar-color: rgba(255, 255, 255, 0.7);
+  --tblr-navbar-hover-color: rgba(255, 255, 255, 0.75);
+  --tblr-navbar-disabled-color: var(--tblr-disabled-color);
+  --tblr-navbar-active-color: #ffffff;
+  --tblr-navbar-brand-color: #ffffff;
+  --tblr-navbar-brand-hover-color: #ffffff;
+  --tblr-navbar-toggler-border-color: rgba(255, 255, 255, 0.1);
+  --tblr-navbar-toggler-icon-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.7%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e");
+}
+
+[data-bs-theme=dark] .navbar-toggler-icon, body[data-bs-theme=dark] [data-bs-theme=light] .navbar-toggler-icon {
+  --tblr-navbar-toggler-icon-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.7%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e");
+}
+
+.card {
+  --tblr-card-spacer-y: 1.25rem;
+  --tblr-card-spacer-x: 1.25rem;
+  --tblr-card-title-spacer-y: 1.25rem;
+  --tblr-card-title-color: ;
+  --tblr-card-subtitle-color: ;
+  --tblr-card-border-width: var(--tblr-border-width);
+  --tblr-card-border-color: var(--tblr-border-color-translucent);
+  --tblr-card-border-radius: var(--tblr-border-radius);
+  --tblr-card-box-shadow: var(--tblr-shadow-card);
+  --tblr-card-inner-border-radius: calc(var(--tblr-border-radius) - (var(--tblr-border-width)));
+  --tblr-card-cap-padding-y: 1.25rem;
+  --tblr-card-cap-padding-x: 1.25rem;
+  --tblr-card-cap-bg: var(--tblr-bg-surface-tertiary);
+  --tblr-card-cap-color: inherit;
+  --tblr-card-height: ;
+  --tblr-card-color: inherit;
+  --tblr-card-bg: var(--tblr-bg-surface);
+  --tblr-card-img-overlay-padding: 1rem;
+  --tblr-card-group-margin: 1.5rem;
+  position: relative;
+  display: flex;
+  flex-direction: column;
+  min-width: 0;
+  height: var(--tblr-card-height);
+  color: var(--tblr-body-color);
+  word-wrap: break-word;
+  background-color: var(--tblr-card-bg);
+  background-clip: border-box;
+  border: var(--tblr-card-border-width) solid var(--tblr-card-border-color);
+  border-radius: var(--tblr-card-border-radius);
+  box-shadow: var(--tblr-card-box-shadow);
+}
+.card > hr, .card > .hr {
+  margin-left: 0;
+  margin-right: 0;
+}
+.card > .list-group {
+  border-top: inherit;
+  border-bottom: inherit;
+}
+.card > .list-group:first-child {
+  border-top-width: 0;
+  border-top-right-radius: var(--tblr-card-inner-border-radius);
+  border-top-left-radius: var(--tblr-card-inner-border-radius);
+}
+.card > .list-group:last-child {
+  border-bottom-width: 0;
+  border-bottom-left-radius: var(--tblr-card-inner-border-radius);
+  border-bottom-right-radius: var(--tblr-card-inner-border-radius);
+}
+.card > .card-header + .list-group,
+.card > .list-group + .card-footer {
+  border-top: 0;
+}
+
+.card-body {
+  flex: 1 1 auto;
+  padding: var(--tblr-card-spacer-y) var(--tblr-card-spacer-x);
+  color: var(--tblr-card-color);
+}
+
+.card-title {
+  margin-bottom: var(--tblr-card-title-spacer-y);
+  color: var(--tblr-card-title-color);
+}
+
+.card-subtitle {
+  margin-top: calc(-0.5 * var(--tblr-card-title-spacer-y));
+  margin-bottom: 0;
+  color: var(--tblr-card-subtitle-color);
+}
+
+.card-text:last-child {
+  margin-bottom: 0;
+}
+
+.card-link:hover {
+  text-decoration: none;
+}
+.card-link + .card-link {
+  margin-right: var(--tblr-card-spacer-x);
+}
+
+.card-header {
+  padding: var(--tblr-card-cap-padding-y) var(--tblr-card-cap-padding-x);
+  margin-bottom: 0;
+  color: var(--tblr-card-cap-color);
+  background-color: var(--tblr-card-cap-bg);
+  border-bottom: var(--tblr-card-border-width) solid var(--tblr-card-border-color);
+}
+.card-header:first-child {
+  border-radius: var(--tblr-card-inner-border-radius) var(--tblr-card-inner-border-radius) 0 0;
+}
+
+.card-footer {
+  padding: var(--tblr-card-cap-padding-y) var(--tblr-card-cap-padding-x);
+  color: var(--tblr-card-cap-color);
+  background-color: var(--tblr-card-cap-bg);
+  border-top: var(--tblr-card-border-width) solid var(--tblr-card-border-color);
+}
+.card-footer:last-child {
+  border-radius: 0 0 var(--tblr-card-inner-border-radius) var(--tblr-card-inner-border-radius);
+}
+
+.card-header-tabs {
+  margin-left: calc(-0.5 * var(--tblr-card-cap-padding-x));
+  margin-bottom: calc(-1 * var(--tblr-card-cap-padding-y));
+  margin-right: calc(-0.5 * var(--tblr-card-cap-padding-x));
+  border-bottom: 0;
+}
+.card-header-tabs .nav-link.active {
+  background-color: var(--tblr-card-bg);
+  border-bottom-color: var(--tblr-card-bg);
+}
+
+.card-header-pills {
+  margin-left: calc(-0.5 * var(--tblr-card-cap-padding-x));
+  margin-right: calc(-0.5 * var(--tblr-card-cap-padding-x));
+}
+
+.card-img-overlay {
+  position: absolute;
+  top: 0;
+  left: 0;
+  bottom: 0;
+  right: 0;
+  padding: var(--tblr-card-img-overlay-padding);
+  border-radius: var(--tblr-card-inner-border-radius);
+}
+
+.card-img,
+.card-img-top,
+.card-img-bottom {
+  width: 100%;
+}
+
+.card-img,
+.card-img-top {
+  border-top-right-radius: var(--tblr-card-inner-border-radius);
+  border-top-left-radius: var(--tblr-card-inner-border-radius);
+}
+
+.card-img,
+.card-img-bottom {
+  border-bottom-left-radius: var(--tblr-card-inner-border-radius);
+  border-bottom-right-radius: var(--tblr-card-inner-border-radius);
+}
+
+.card-group > .card {
+  margin-bottom: var(--tblr-card-group-margin);
+}
+@media (min-width: 576px) {
+  .card-group {
+    display: flex;
+    flex-flow: row wrap;
+  }
+  .card-group > .card {
+    flex: 1 0 0%;
+    margin-bottom: 0;
+  }
+  .card-group > .card + .card {
+    margin-right: 0;
+    border-right: 0;
+  }
+  .card-group > .card:not(:last-child) {
+    border-top-left-radius: 0;
+    border-bottom-left-radius: 0;
+  }
+  .card-group > .card:not(:last-child) .card-img-top,
+  .card-group > .card:not(:last-child) .card-header {
+    border-top-left-radius: 0;
+  }
+  .card-group > .card:not(:last-child) .card-img-bottom,
+  .card-group > .card:not(:last-child) .card-footer {
+    border-bottom-left-radius: 0;
+  }
+  .card-group > .card:not(:first-child) {
+    border-top-right-radius: 0;
+    border-bottom-right-radius: 0;
+  }
+  .card-group > .card:not(:first-child) .card-img-top,
+  .card-group > .card:not(:first-child) .card-header {
+    border-top-right-radius: 0;
+  }
+  .card-group > .card:not(:first-child) .card-img-bottom,
+  .card-group > .card:not(:first-child) .card-footer {
+    border-bottom-right-radius: 0;
+  }
+}
+
+.accordion {
+  --tblr-accordion-color: var(--tblr-body-color);
+  --tblr-accordion-bg: transparent;
+  --tblr-accordion-transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, border-radius 0.15s ease;
+  --tblr-accordion-border-color: var(--tblr-border-color-translucent);
+  --tblr-accordion-border-width: var(--tblr-border-width);
+  --tblr-accordion-border-radius: var(--tblr-border-radius);
+  --tblr-accordion-inner-border-radius: calc(var(--tblr-border-radius) - (var(--tblr-border-width)));
+  --tblr-accordion-btn-padding-x: 1.25rem;
+  --tblr-accordion-btn-padding-y: 1rem;
+  --tblr-accordion-btn-color: var(--tblr-body-color);
+  --tblr-accordion-btn-bg: transparent;
+  --tblr-accordion-btn-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23182433'%3e%3cpath 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'/%3e%3c/svg%3e");
+  --tblr-accordion-btn-icon-width: 1rem;
+  --tblr-accordion-btn-icon-transform: rotate(-180deg);
+  --tblr-accordion-btn-icon-transition: transform 0.2s ease-in-out;
+  --tblr-accordion-btn-active-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23002242'%3e%3cpath 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'/%3e%3c/svg%3e");
+  --tblr-accordion-btn-focus-border-color: var(--tblr-border-color-translucent);
+  --tblr-accordion-btn-focus-box-shadow: 0 0 0 0.25rem rgba(var(--tblr-primary-rgb), 0.25);
+  --tblr-accordion-body-padding-x: 1.25rem;
+  --tblr-accordion-body-padding-y: 1rem;
+  --tblr-accordion-active-color: inherit;
+  --tblr-accordion-active-bg: transparent;
+}
+
+.accordion-button {
+  position: relative;
+  display: flex;
+  align-items: center;
+  width: 100%;
+  padding: var(--tblr-accordion-btn-padding-y) var(--tblr-accordion-btn-padding-x);
+  font-size: 0.875rem;
+  color: var(--tblr-accordion-btn-color);
+  text-align: right;
+  background-color: var(--tblr-accordion-btn-bg);
+  border: 0;
+  border-radius: 0;
+  overflow-anchor: none;
+  transition: var(--tblr-accordion-transition);
+}
+@media (prefers-reduced-motion: reduce) {
+  .accordion-button {
+    transition: none;
+  }
+}
+.accordion-button:not(.collapsed) {
+  color: var(--tblr-accordion-active-color);
+  background-color: var(--tblr-accordion-active-bg);
+  box-shadow: inset 0 calc(-1 * var(--tblr-accordion-border-width)) 0 var(--tblr-accordion-border-color);
+}
+.accordion-button:not(.collapsed)::after {
+  background-image: var(--tblr-accordion-btn-active-icon);
+  transform: var(--tblr-accordion-btn-icon-transform);
+}
+.accordion-button::after {
+  flex-shrink: 0;
+  width: var(--tblr-accordion-btn-icon-width);
+  height: var(--tblr-accordion-btn-icon-width);
+  margin-right: auto;
+  content: "";
+  background-image: var(--tblr-accordion-btn-icon);
+  background-repeat: no-repeat;
+  background-size: var(--tblr-accordion-btn-icon-width);
+  transition: var(--tblr-accordion-btn-icon-transition);
+}
+@media (prefers-reduced-motion: reduce) {
+  .accordion-button::after {
+    transition: none;
+  }
+}
+.accordion-button:hover {
+  z-index: 2;
+}
+.accordion-button:focus {
+  z-index: 3;
+  border-color: var(--tblr-accordion-btn-focus-border-color);
+  outline: 0;
+  box-shadow: var(--tblr-accordion-btn-focus-box-shadow);
+}
+
+.accordion-header {
+  margin-bottom: 0;
+}
+
+.accordion-item {
+  color: var(--tblr-accordion-color);
+  background-color: var(--tblr-accordion-bg);
+  border: var(--tblr-accordion-border-width) solid var(--tblr-accordion-border-color);
+}
+.accordion-item:first-of-type {
+  border-top-right-radius: var(--tblr-accordion-border-radius);
+  border-top-left-radius: var(--tblr-accordion-border-radius);
+}
+.accordion-item:first-of-type .accordion-button {
+  border-top-right-radius: var(--tblr-accordion-inner-border-radius);
+  border-top-left-radius: var(--tblr-accordion-inner-border-radius);
+}
+.accordion-item:not(:first-of-type) {
+  border-top: 0;
+}
+.accordion-item:last-of-type {
+  border-bottom-left-radius: var(--tblr-accordion-border-radius);
+  border-bottom-right-radius: var(--tblr-accordion-border-radius);
+}
+.accordion-item:last-of-type .accordion-button.collapsed {
+  border-bottom-left-radius: var(--tblr-accordion-inner-border-radius);
+  border-bottom-right-radius: var(--tblr-accordion-inner-border-radius);
+}
+.accordion-item:last-of-type .accordion-collapse {
+  border-bottom-left-radius: var(--tblr-accordion-border-radius);
+  border-bottom-right-radius: var(--tblr-accordion-border-radius);
+}
+
+.accordion-body {
+  padding: var(--tblr-accordion-body-padding-y) var(--tblr-accordion-body-padding-x);
+}
+
+.accordion-flush .accordion-collapse {
+  border-width: 0;
+}
+.accordion-flush .accordion-item {
+  border-left: 0;
+  border-right: 0;
+  border-radius: 0;
+}
+.accordion-flush .accordion-item:first-child {
+  border-top: 0;
+}
+.accordion-flush .accordion-item:last-child {
+  border-bottom: 0;
+}
+.accordion-flush .accordion-item .accordion-button, .accordion-flush .accordion-item .accordion-button.collapsed {
+  border-radius: 0;
+}
+
+[data-bs-theme=dark] .accordion-button::after {
+  --tblr-accordion-btn-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%236698ca'%3e%3cpath 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'/%3e%3c/svg%3e");
+  --tblr-accordion-btn-active-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%236698ca'%3e%3cpath 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'/%3e%3c/svg%3e");
+}
+
+.breadcrumb {
+  --tblr-breadcrumb-padding-x: 0;
+  --tblr-breadcrumb-padding-y: 0;
+  --tblr-breadcrumb-margin-bottom: 1rem;
+  --tblr-breadcrumb-bg: ;
+  --tblr-breadcrumb-border-radius: ;
+  --tblr-breadcrumb-divider-color: var(--tblr-secondary);
+  --tblr-breadcrumb-item-padding-x: 0.5rem;
+  --tblr-breadcrumb-item-active-color: inherit;
+  display: flex;
+  flex-wrap: wrap;
+  padding: var(--tblr-breadcrumb-padding-y) var(--tblr-breadcrumb-padding-x);
+  margin-bottom: var(--tblr-breadcrumb-margin-bottom);
+  font-size: var(--tblr-breadcrumb-font-size);
+  list-style: none;
+  background-color: var(--tblr-breadcrumb-bg);
+  border-radius: var(--tblr-breadcrumb-border-radius);
+}
+
+.breadcrumb-item + .breadcrumb-item {
+  padding-right: var(--tblr-breadcrumb-item-padding-x);
+}
+.breadcrumb-item + .breadcrumb-item::before {
+  float: right;
+  padding-left: var(--tblr-breadcrumb-item-padding-x);
+  color: var(--tblr-breadcrumb-divider-color);
+  content:  var(--tblr-breadcrumb-divider, "/") ;
+}
+.breadcrumb-item.active {
+  color: var(--tblr-breadcrumb-item-active-color);
+}
+
+.pagination {
+  --tblr-pagination-padding-x: 0.25rem;
+  --tblr-pagination-padding-y: 0.25rem;
+  --tblr-pagination-font-size: 0.875rem;
+  --tblr-pagination-color: var(--tblr-secondary);
+  --tblr-pagination-bg: transparent;
+  --tblr-pagination-border-width: 0;
+  --tblr-pagination-border-color: var(--tblr-border-color);
+  --tblr-pagination-border-radius: var(--tblr-border-radius);
+  --tblr-pagination-hover-color: var(--tblr-link-hover-color);
+  --tblr-pagination-hover-bg: var(--tblr-tertiary-bg);
+  --tblr-pagination-hover-border-color: var(--tblr-border-color);
+  --tblr-pagination-focus-color: var(--tblr-link-hover-color);
+  --tblr-pagination-focus-bg: var(--tblr-secondary-bg);
+  --tblr-pagination-focus-box-shadow: 0 0 0 0.25rem rgba(var(--tblr-primary-rgb), 0.25);
+  --tblr-pagination-active-color: #ffffff;
+  --tblr-pagination-active-bg: var(--tblr-primary);
+  --tblr-pagination-active-border-color: var(--tblr-primary);
+  --tblr-pagination-disabled-color: var(--tblr-disabled-color);
+  --tblr-pagination-disabled-bg: transparent;
+  --tblr-pagination-disabled-border-color: var(--tblr-border-color);
+  display: flex;
+  padding-right: 0;
+  list-style: none;
+}
+
+.page-link {
+  position: relative;
+  display: block;
+  padding: var(--tblr-pagination-padding-y) var(--tblr-pagination-padding-x);
+  font-size: var(--tblr-pagination-font-size);
+  color: var(--tblr-pagination-color);
+  background-color: var(--tblr-pagination-bg);
+  border: var(--tblr-pagination-border-width) solid var(--tblr-pagination-border-color);
+  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
+}
+@media (prefers-reduced-motion: reduce) {
+  .page-link {
+    transition: none;
+  }
+}
+.page-link:hover {
+  z-index: 2;
+  color: var(--tblr-pagination-hover-color);
+  text-decoration: none;
+  background-color: var(--tblr-pagination-hover-bg);
+  border-color: var(--tblr-pagination-hover-border-color);
+}
+.page-link:focus {
+  z-index: 3;
+  color: var(--tblr-pagination-focus-color);
+  background-color: var(--tblr-pagination-focus-bg);
+  outline: 0;
+  box-shadow: var(--tblr-pagination-focus-box-shadow);
+}
+.page-link.active, .active > .page-link {
+  z-index: 3;
+  color: var(--tblr-pagination-active-color);
+  background-color: var(--tblr-pagination-active-bg);
+  border-color: var(--tblr-pagination-active-border-color);
+}
+.page-link.disabled, .disabled > .page-link {
+  color: var(--tblr-pagination-disabled-color);
+  pointer-events: none;
+  background-color: var(--tblr-pagination-disabled-bg);
+  border-color: var(--tblr-pagination-disabled-border-color);
+}
+
+.page-item:not(:first-child) .page-link {
+  margin-right: calc(0 * -1);
+}
+.page-item:first-child .page-link {
+  border-top-right-radius: var(--tblr-pagination-border-radius);
+  border-bottom-right-radius: var(--tblr-pagination-border-radius);
+}
+.page-item:last-child .page-link {
+  border-top-left-radius: var(--tblr-pagination-border-radius);
+  border-bottom-left-radius: var(--tblr-pagination-border-radius);
+}
+
+.pagination-lg {
+  --tblr-pagination-padding-x: 1.5rem;
+  --tblr-pagination-padding-y: 0.75rem;
+  --tblr-pagination-font-size: 1.09375rem;
+  --tblr-pagination-border-radius: var(--tblr-border-radius-lg);
+}
+
+.pagination-sm {
+  --tblr-pagination-padding-x: 0.5rem;
+  --tblr-pagination-padding-y: 0.25rem;
+  --tblr-pagination-font-size: 0.765625rem;
+  --tblr-pagination-border-radius: var(--tblr-border-radius-sm);
+}
+
+.badge {
+  --tblr-badge-padding-x: 0.5em;
+  --tblr-badge-padding-y: 0.25em;
+  --tblr-badge-font-size: 85.714285%;
+  --tblr-badge-font-weight: var(--tblr-font-weight-medium);
+  --tblr-badge-color: var(--tblr-secondary);
+  --tblr-badge-border-radius: var(--tblr-border-radius);
+  display: inline-block;
+  padding: var(--tblr-badge-padding-y) var(--tblr-badge-padding-x);
+  font-size: var(--tblr-badge-font-size);
+  font-weight: var(--tblr-badge-font-weight);
+  line-height: 1;
+  color: var(--tblr-badge-color);
+  text-align: center;
+  white-space: nowrap;
+  vertical-align: baseline;
+  border-radius: var(--tblr-badge-border-radius);
+}
+.badge:empty {
+  display: none;
+}
+
+.btn .badge {
+  position: relative;
+  top: -1px;
+}
+
+.alert {
+  --tblr-alert-bg: transparent;
+  --tblr-alert-padding-x: 1rem;
+  --tblr-alert-padding-y: 0.75rem;
+  --tblr-alert-margin-bottom: 1rem;
+  --tblr-alert-color: inherit;
+  --tblr-alert-border-color: transparent;
+  --tblr-alert-border: var(--tblr-border-width) solid var(--tblr-alert-border-color);
+  --tblr-alert-border-radius: var(--tblr-border-radius);
+  --tblr-alert-link-color: inherit;
+  position: relative;
+  padding: var(--tblr-alert-padding-y) var(--tblr-alert-padding-x);
+  margin-bottom: var(--tblr-alert-margin-bottom);
+  color: var(--tblr-alert-color);
+  background-color: var(--tblr-alert-bg);
+  border: var(--tblr-alert-border);
+  border-radius: var(--tblr-alert-border-radius);
+}
+
+.alert-heading {
+  color: inherit;
+}
+
+.alert-link {
+  font-weight: var(--tblr-font-weight-bold);
+  color: var(--tblr-alert-link-color);
+}
+
+.alert-dismissible {
+  padding-left: 3rem;
+}
+.alert-dismissible .btn-close {
+  position: absolute;
+  top: 0;
+  left: 0;
+  z-index: 2;
+  padding: 0.9375rem 1rem;
+}
+
+.alert-primary {
+  --tblr-alert-color: var(--tblr-primary-text-emphasis);
+  --tblr-alert-bg: var(--tblr-primary-bg-subtle);
+  --tblr-alert-border-color: var(--tblr-primary-border-subtle);
+  --tblr-alert-link-color: var(--tblr-primary-text-emphasis);
+}
+
+.alert-secondary {
+  --tblr-alert-color: var(--tblr-secondary-text-emphasis);
+  --tblr-alert-bg: var(--tblr-secondary-bg-subtle);
+  --tblr-alert-border-color: var(--tblr-secondary-border-subtle);
+  --tblr-alert-link-color: var(--tblr-secondary-text-emphasis);
+}
+
+.alert-success {
+  --tblr-alert-color: var(--tblr-success-text-emphasis);
+  --tblr-alert-bg: var(--tblr-success-bg-subtle);
+  --tblr-alert-border-color: var(--tblr-success-border-subtle);
+  --tblr-alert-link-color: var(--tblr-success-text-emphasis);
+}
+
+.alert-info {
+  --tblr-alert-color: var(--tblr-info-text-emphasis);
+  --tblr-alert-bg: var(--tblr-info-bg-subtle);
+  --tblr-alert-border-color: var(--tblr-info-border-subtle);
+  --tblr-alert-link-color: var(--tblr-info-text-emphasis);
+}
+
+.alert-warning {
+  --tblr-alert-color: var(--tblr-warning-text-emphasis);
+  --tblr-alert-bg: var(--tblr-warning-bg-subtle);
+  --tblr-alert-border-color: var(--tblr-warning-border-subtle);
+  --tblr-alert-link-color: var(--tblr-warning-text-emphasis);
+}
+
+.alert-danger {
+  --tblr-alert-color: var(--tblr-danger-text-emphasis);
+  --tblr-alert-bg: var(--tblr-danger-bg-subtle);
+  --tblr-alert-border-color: var(--tblr-danger-border-subtle);
+  --tblr-alert-link-color: var(--tblr-danger-text-emphasis);
+}
+
+.alert-light {
+  --tblr-alert-color: var(--tblr-light-text-emphasis);
+  --tblr-alert-bg: var(--tblr-light-bg-subtle);
+  --tblr-alert-border-color: var(--tblr-light-border-subtle);
+  --tblr-alert-link-color: var(--tblr-light-text-emphasis);
+}
+
+.alert-dark {
+  --tblr-alert-color: var(--tblr-dark-text-emphasis);
+  --tblr-alert-bg: var(--tblr-dark-bg-subtle);
+  --tblr-alert-border-color: var(--tblr-dark-border-subtle);
+  --tblr-alert-link-color: var(--tblr-dark-text-emphasis);
+}
+
+.alert-muted {
+  --tblr-alert-color: var(--tblr-muted-text-emphasis);
+  --tblr-alert-bg: var(--tblr-muted-bg-subtle);
+  --tblr-alert-border-color: var(--tblr-muted-border-subtle);
+  --tblr-alert-link-color: var(--tblr-muted-text-emphasis);
+}
+
+.alert-blue {
+  --tblr-alert-color: var(--tblr-blue-text-emphasis);
+  --tblr-alert-bg: var(--tblr-blue-bg-subtle);
+  --tblr-alert-border-color: var(--tblr-blue-border-subtle);
+  --tblr-alert-link-color: var(--tblr-blue-text-emphasis);
+}
+
+.alert-azure {
+  --tblr-alert-color: var(--tblr-azure-text-emphasis);
+  --tblr-alert-bg: var(--tblr-azure-bg-subtle);
+  --tblr-alert-border-color: var(--tblr-azure-border-subtle);
+  --tblr-alert-link-color: var(--tblr-azure-text-emphasis);
+}
+
+.alert-indigo {
+  --tblr-alert-color: var(--tblr-indigo-text-emphasis);
+  --tblr-alert-bg: var(--tblr-indigo-bg-subtle);
+  --tblr-alert-border-color: var(--tblr-indigo-border-subtle);
+  --tblr-alert-link-color: var(--tblr-indigo-text-emphasis);
+}
+
+.alert-purple {
+  --tblr-alert-color: var(--tblr-purple-text-emphasis);
+  --tblr-alert-bg: var(--tblr-purple-bg-subtle);
+  --tblr-alert-border-color: var(--tblr-purple-border-subtle);
+  --tblr-alert-link-color: var(--tblr-purple-text-emphasis);
+}
+
+.alert-pink {
+  --tblr-alert-color: var(--tblr-pink-text-emphasis);
+  --tblr-alert-bg: var(--tblr-pink-bg-subtle);
+  --tblr-alert-border-color: var(--tblr-pink-border-subtle);
+  --tblr-alert-link-color: var(--tblr-pink-text-emphasis);
+}
+
+.alert-red {
+  --tblr-alert-color: var(--tblr-red-text-emphasis);
+  --tblr-alert-bg: var(--tblr-red-bg-subtle);
+  --tblr-alert-border-color: var(--tblr-red-border-subtle);
+  --tblr-alert-link-color: var(--tblr-red-text-emphasis);
+}
+
+.alert-orange {
+  --tblr-alert-color: var(--tblr-orange-text-emphasis);
+  --tblr-alert-bg: var(--tblr-orange-bg-subtle);
+  --tblr-alert-border-color: var(--tblr-orange-border-subtle);
+  --tblr-alert-link-color: var(--tblr-orange-text-emphasis);
+}
+
+.alert-yellow {
+  --tblr-alert-color: var(--tblr-yellow-text-emphasis);
+  --tblr-alert-bg: var(--tblr-yellow-bg-subtle);
+  --tblr-alert-border-color: var(--tblr-yellow-border-subtle);
+  --tblr-alert-link-color: var(--tblr-yellow-text-emphasis);
+}
+
+.alert-lime {
+  --tblr-alert-color: var(--tblr-lime-text-emphasis);
+  --tblr-alert-bg: var(--tblr-lime-bg-subtle);
+  --tblr-alert-border-color: var(--tblr-lime-border-subtle);
+  --tblr-alert-link-color: var(--tblr-lime-text-emphasis);
+}
+
+.alert-green {
+  --tblr-alert-color: var(--tblr-green-text-emphasis);
+  --tblr-alert-bg: var(--tblr-green-bg-subtle);
+  --tblr-alert-border-color: var(--tblr-green-border-subtle);
+  --tblr-alert-link-color: var(--tblr-green-text-emphasis);
+}
+
+.alert-teal {
+  --tblr-alert-color: var(--tblr-teal-text-emphasis);
+  --tblr-alert-bg: var(--tblr-teal-bg-subtle);
+  --tblr-alert-border-color: var(--tblr-teal-border-subtle);
+  --tblr-alert-link-color: var(--tblr-teal-text-emphasis);
+}
+
+.alert-cyan {
+  --tblr-alert-color: var(--tblr-cyan-text-emphasis);
+  --tblr-alert-bg: var(--tblr-cyan-bg-subtle);
+  --tblr-alert-border-color: var(--tblr-cyan-border-subtle);
+  --tblr-alert-link-color: var(--tblr-cyan-text-emphasis);
+}
+
+.alert-facebook {
+  --tblr-alert-color: var(--tblr-facebook-text-emphasis);
+  --tblr-alert-bg: var(--tblr-facebook-bg-subtle);
+  --tblr-alert-border-color: var(--tblr-facebook-border-subtle);
+  --tblr-alert-link-color: var(--tblr-facebook-text-emphasis);
+}
+
+.alert-twitter {
+  --tblr-alert-color: var(--tblr-twitter-text-emphasis);
+  --tblr-alert-bg: var(--tblr-twitter-bg-subtle);
+  --tblr-alert-border-color: var(--tblr-twitter-border-subtle);
+  --tblr-alert-link-color: var(--tblr-twitter-text-emphasis);
+}
+
+.alert-linkedin {
+  --tblr-alert-color: var(--tblr-linkedin-text-emphasis);
+  --tblr-alert-bg: var(--tblr-linkedin-bg-subtle);
+  --tblr-alert-border-color: var(--tblr-linkedin-border-subtle);
+  --tblr-alert-link-color: var(--tblr-linkedin-text-emphasis);
+}
+
+.alert-google {
+  --tblr-alert-color: var(--tblr-google-text-emphasis);
+  --tblr-alert-bg: var(--tblr-google-bg-subtle);
+  --tblr-alert-border-color: var(--tblr-google-border-subtle);
+  --tblr-alert-link-color: var(--tblr-google-text-emphasis);
+}
+
+.alert-youtube {
+  --tblr-alert-color: var(--tblr-youtube-text-emphasis);
+  --tblr-alert-bg: var(--tblr-youtube-bg-subtle);
+  --tblr-alert-border-color: var(--tblr-youtube-border-subtle);
+  --tblr-alert-link-color: var(--tblr-youtube-text-emphasis);
+}
+
+.alert-vimeo {
+  --tblr-alert-color: var(--tblr-vimeo-text-emphasis);
+  --tblr-alert-bg: var(--tblr-vimeo-bg-subtle);
+  --tblr-alert-border-color: var(--tblr-vimeo-border-subtle);
+  --tblr-alert-link-color: var(--tblr-vimeo-text-emphasis);
+}
+
+.alert-dribbble {
+  --tblr-alert-color: var(--tblr-dribbble-text-emphasis);
+  --tblr-alert-bg: var(--tblr-dribbble-bg-subtle);
+  --tblr-alert-border-color: var(--tblr-dribbble-border-subtle);
+  --tblr-alert-link-color: var(--tblr-dribbble-text-emphasis);
+}
+
+.alert-github {
+  --tblr-alert-color: var(--tblr-github-text-emphasis);
+  --tblr-alert-bg: var(--tblr-github-bg-subtle);
+  --tblr-alert-border-color: var(--tblr-github-border-subtle);
+  --tblr-alert-link-color: var(--tblr-github-text-emphasis);
+}
+
+.alert-instagram {
+  --tblr-alert-color: var(--tblr-instagram-text-emphasis);
+  --tblr-alert-bg: var(--tblr-instagram-bg-subtle);
+  --tblr-alert-border-color: var(--tblr-instagram-border-subtle);
+  --tblr-alert-link-color: var(--tblr-instagram-text-emphasis);
+}
+
+.alert-pinterest {
+  --tblr-alert-color: var(--tblr-pinterest-text-emphasis);
+  --tblr-alert-bg: var(--tblr-pinterest-bg-subtle);
+  --tblr-alert-border-color: var(--tblr-pinterest-border-subtle);
+  --tblr-alert-link-color: var(--tblr-pinterest-text-emphasis);
+}
+
+.alert-vk {
+  --tblr-alert-color: var(--tblr-vk-text-emphasis);
+  --tblr-alert-bg: var(--tblr-vk-bg-subtle);
+  --tblr-alert-border-color: var(--tblr-vk-border-subtle);
+  --tblr-alert-link-color: var(--tblr-vk-text-emphasis);
+}
+
+.alert-rss {
+  --tblr-alert-color: var(--tblr-rss-text-emphasis);
+  --tblr-alert-bg: var(--tblr-rss-bg-subtle);
+  --tblr-alert-border-color: var(--tblr-rss-border-subtle);
+  --tblr-alert-link-color: var(--tblr-rss-text-emphasis);
+}
+
+.alert-flickr {
+  --tblr-alert-color: var(--tblr-flickr-text-emphasis);
+  --tblr-alert-bg: var(--tblr-flickr-bg-subtle);
+  --tblr-alert-border-color: var(--tblr-flickr-border-subtle);
+  --tblr-alert-link-color: var(--tblr-flickr-text-emphasis);
+}
+
+.alert-bitbucket {
+  --tblr-alert-color: var(--tblr-bitbucket-text-emphasis);
+  --tblr-alert-bg: var(--tblr-bitbucket-bg-subtle);
+  --tblr-alert-border-color: var(--tblr-bitbucket-border-subtle);
+  --tblr-alert-link-color: var(--tblr-bitbucket-text-emphasis);
+}
+
+.alert-tabler {
+  --tblr-alert-color: var(--tblr-tabler-text-emphasis);
+  --tblr-alert-bg: var(--tblr-tabler-bg-subtle);
+  --tblr-alert-border-color: var(--tblr-tabler-border-subtle);
+  --tblr-alert-link-color: var(--tblr-tabler-text-emphasis);
+}
+
+@keyframes progress-bar-stripes {
+  0% {
+    background-position-x: 0.5rem;
+  }
+}
+.progress,
+.progress-stacked {
+  --tblr-progress-height: 0.5rem;
+  --tblr-progress-font-size: 0.65625rem;
+  --tblr-progress-bg: var(--tblr-border-color);
+  --tblr-progress-border-radius: var(--tblr-border-radius);
+  --tblr-progress-box-shadow: var(--tblr-box-shadow-inset);
+  --tblr-progress-bar-color: #ffffff;
+  --tblr-progress-bar-bg: var(--tblr-primary);
+  --tblr-progress-bar-transition: width 0.6s ease;
+  display: flex;
+  height: var(--tblr-progress-height);
+  overflow: hidden;
+  font-size: var(--tblr-progress-font-size);
+  background-color: var(--tblr-progress-bg);
+  border-radius: var(--tblr-progress-border-radius);
+  box-shadow: var(--tblr-progress-box-shadow);
+}
+
+.progress-bar {
+  display: flex;
+  flex-direction: column;
+  justify-content: center;
+  overflow: hidden;
+  color: var(--tblr-progress-bar-color);
+  text-align: center;
+  white-space: nowrap;
+  background-color: var(--tblr-progress-bar-bg);
+  transition: var(--tblr-progress-bar-transition);
+}
+@media (prefers-reduced-motion: reduce) {
+  .progress-bar {
+    transition: none;
+  }
+}
+
+.progress-bar-striped {
+  background-image: linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+  background-size: var(--tblr-progress-height) var(--tblr-progress-height);
+}
+
+.progress-stacked > .progress {
+  overflow: visible;
+}
+
+.progress-stacked > .progress > .progress-bar {
+  width: 100%;
+}
+
+.progress-bar-animated {
+  animation: 1s linear infinite progress-bar-stripes;
+}
+@media (prefers-reduced-motion: reduce) {
+  .progress-bar-animated {
+    animation: none;
+  }
+}
+
+.list-group {
+  --tblr-list-group-color: var(--tblr-body-color);
+  --tblr-list-group-bg: inherit;
+  --tblr-list-group-border-color: var(--tblr-border-color);
+  --tblr-list-group-border-width: var(--tblr-border-width);
+  --tblr-list-group-border-radius: var(--tblr-border-radius);
+  --tblr-list-group-item-padding-x: 1.25rem;
+  --tblr-list-group-item-padding-y: 1.25rem;
+  --tblr-list-group-action-color: inherit;
+  --tblr-list-group-action-hover-color: var(--tblr-emphasis-color);
+  --tblr-list-group-action-hover-bg: rgba(var(--tblr-text-secondary-rgb), 0.04);
+  --tblr-list-group-action-active-color: var(--tblr-body-color);
+  --tblr-list-group-action-active-bg: var(--tblr-secondary-bg);
+  --tblr-list-group-disabled-color: var(--tblr-secondary-color);
+  --tblr-list-group-disabled-bg: inherit;
+  --tblr-list-group-active-color: inherit;
+  --tblr-list-group-active-bg: var(--tblr-active-bg);
+  --tblr-list-group-active-border-color: var(--tblr-border-color);
+  display: flex;
+  flex-direction: column;
+  padding-right: 0;
+  margin-bottom: 0;
+  border-radius: var(--tblr-list-group-border-radius);
+}
+
+.list-group-numbered {
+  list-style-type: none;
+  counter-reset: section;
+}
+.list-group-numbered > .list-group-item::before {
+  content: counters(section, ".") ". ";
+  counter-increment: section;
+}
+
+.list-group-item-action {
+  width: 100%;
+  color: var(--tblr-list-group-action-color);
+  text-align: inherit;
+}
+.list-group-item-action:hover, .list-group-item-action:focus {
+  z-index: 1;
+  color: var(--tblr-list-group-action-hover-color);
+  text-decoration: none;
+  background-color: var(--tblr-list-group-action-hover-bg);
+}
+.list-group-item-action:active {
+  color: var(--tblr-list-group-action-active-color);
+  background-color: var(--tblr-list-group-action-active-bg);
+}
+
+.list-group-item {
+  position: relative;
+  display: block;
+  padding: var(--tblr-list-group-item-padding-y) var(--tblr-list-group-item-padding-x);
+  color: var(--tblr-list-group-color);
+  background-color: var(--tblr-list-group-bg);
+  border: var(--tblr-list-group-border-width) solid var(--tblr-list-group-border-color);
+}
+.list-group-item:first-child {
+  border-top-right-radius: inherit;
+  border-top-left-radius: inherit;
+}
+.list-group-item:last-child {
+  border-bottom-left-radius: inherit;
+  border-bottom-right-radius: inherit;
+}
+.list-group-item.disabled, .list-group-item:disabled {
+  color: var(--tblr-list-group-disabled-color);
+  pointer-events: none;
+  background-color: var(--tblr-list-group-disabled-bg);
+}
+.list-group-item.active {
+  z-index: 2;
+  color: var(--tblr-list-group-active-color);
+  background-color: var(--tblr-list-group-active-bg);
+  border-color: var(--tblr-list-group-active-border-color);
+}
+.list-group-item + .list-group-item {
+  border-top-width: 0;
+}
+.list-group-item + .list-group-item.active {
+  margin-top: calc(-1 * var(--tblr-list-group-border-width));
+  border-top-width: var(--tblr-list-group-border-width);
+}
+
+.list-group-horizontal {
+  flex-direction: row;
+}
+.list-group-horizontal > .list-group-item:first-child:not(:last-child) {
+  border-bottom-right-radius: var(--tblr-list-group-border-radius);
+  border-top-left-radius: 0;
+}
+.list-group-horizontal > .list-group-item:last-child:not(:first-child) {
+  border-top-left-radius: var(--tblr-list-group-border-radius);
+  border-bottom-right-radius: 0;
+}
+.list-group-horizontal > .list-group-item.active {
+  margin-top: 0;
+}
+.list-group-horizontal > .list-group-item + .list-group-item {
+  border-top-width: var(--tblr-list-group-border-width);
+  border-right-width: 0;
+}
+.list-group-horizontal > .list-group-item + .list-group-item.active {
+  margin-right: calc(-1 * var(--tblr-list-group-border-width));
+  border-right-width: var(--tblr-list-group-border-width);
+}
+
+@media (min-width: 576px) {
+  .list-group-horizontal-sm {
+    flex-direction: row;
+  }
+  .list-group-horizontal-sm > .list-group-item:first-child:not(:last-child) {
+    border-bottom-right-radius: var(--tblr-list-group-border-radius);
+    border-top-left-radius: 0;
+  }
+  .list-group-horizontal-sm > .list-group-item:last-child:not(:first-child) {
+    border-top-left-radius: var(--tblr-list-group-border-radius);
+    border-bottom-right-radius: 0;
+  }
+  .list-group-horizontal-sm > .list-group-item.active {
+    margin-top: 0;
+  }
+  .list-group-horizontal-sm > .list-group-item + .list-group-item {
+    border-top-width: var(--tblr-list-group-border-width);
+    border-right-width: 0;
+  }
+  .list-group-horizontal-sm > .list-group-item + .list-group-item.active {
+    margin-right: calc(-1 * var(--tblr-list-group-border-width));
+    border-right-width: var(--tblr-list-group-border-width);
+  }
+}
+@media (min-width: 768px) {
+  .list-group-horizontal-md {
+    flex-direction: row;
+  }
+  .list-group-horizontal-md > .list-group-item:first-child:not(:last-child) {
+    border-bottom-right-radius: var(--tblr-list-group-border-radius);
+    border-top-left-radius: 0;
+  }
+  .list-group-horizontal-md > .list-group-item:last-child:not(:first-child) {
+    border-top-left-radius: var(--tblr-list-group-border-radius);
+    border-bottom-right-radius: 0;
+  }
+  .list-group-horizontal-md > .list-group-item.active {
+    margin-top: 0;
+  }
+  .list-group-horizontal-md > .list-group-item + .list-group-item {
+    border-top-width: var(--tblr-list-group-border-width);
+    border-right-width: 0;
+  }
+  .list-group-horizontal-md > .list-group-item + .list-group-item.active {
+    margin-right: calc(-1 * var(--tblr-list-group-border-width));
+    border-right-width: var(--tblr-list-group-border-width);
+  }
+}
+@media (min-width: 992px) {
+  .list-group-horizontal-lg {
+    flex-direction: row;
+  }
+  .list-group-horizontal-lg > .list-group-item:first-child:not(:last-child) {
+    border-bottom-right-radius: var(--tblr-list-group-border-radius);
+    border-top-left-radius: 0;
+  }
+  .list-group-horizontal-lg > .list-group-item:last-child:not(:first-child) {
+    border-top-left-radius: var(--tblr-list-group-border-radius);
+    border-bottom-right-radius: 0;
+  }
+  .list-group-horizontal-lg > .list-group-item.active {
+    margin-top: 0;
+  }
+  .list-group-horizontal-lg > .list-group-item + .list-group-item {
+    border-top-width: var(--tblr-list-group-border-width);
+    border-right-width: 0;
+  }
+  .list-group-horizontal-lg > .list-group-item + .list-group-item.active {
+    margin-right: calc(-1 * var(--tblr-list-group-border-width));
+    border-right-width: var(--tblr-list-group-border-width);
+  }
+}
+@media (min-width: 1200px) {
+  .list-group-horizontal-xl {
+    flex-direction: row;
+  }
+  .list-group-horizontal-xl > .list-group-item:first-child:not(:last-child) {
+    border-bottom-right-radius: var(--tblr-list-group-border-radius);
+    border-top-left-radius: 0;
+  }
+  .list-group-horizontal-xl > .list-group-item:last-child:not(:first-child) {
+    border-top-left-radius: var(--tblr-list-group-border-radius);
+    border-bottom-right-radius: 0;
+  }
+  .list-group-horizontal-xl > .list-group-item.active {
+    margin-top: 0;
+  }
+  .list-group-horizontal-xl > .list-group-item + .list-group-item {
+    border-top-width: var(--tblr-list-group-border-width);
+    border-right-width: 0;
+  }
+  .list-group-horizontal-xl > .list-group-item + .list-group-item.active {
+    margin-right: calc(-1 * var(--tblr-list-group-border-width));
+    border-right-width: var(--tblr-list-group-border-width);
+  }
+}
+@media (min-width: 1400px) {
+  .list-group-horizontal-xxl {
+    flex-direction: row;
+  }
+  .list-group-horizontal-xxl > .list-group-item:first-child:not(:last-child) {
+    border-bottom-right-radius: var(--tblr-list-group-border-radius);
+    border-top-left-radius: 0;
+  }
+  .list-group-horizontal-xxl > .list-group-item:last-child:not(:first-child) {
+    border-top-left-radius: var(--tblr-list-group-border-radius);
+    border-bottom-right-radius: 0;
+  }
+  .list-group-horizontal-xxl > .list-group-item.active {
+    margin-top: 0;
+  }
+  .list-group-horizontal-xxl > .list-group-item + .list-group-item {
+    border-top-width: var(--tblr-list-group-border-width);
+    border-right-width: 0;
+  }
+  .list-group-horizontal-xxl > .list-group-item + .list-group-item.active {
+    margin-right: calc(-1 * var(--tblr-list-group-border-width));
+    border-right-width: var(--tblr-list-group-border-width);
+  }
+}
+.list-group-flush {
+  border-radius: 0;
+}
+.list-group-flush > .list-group-item {
+  border-width: 0 0 var(--tblr-list-group-border-width);
+}
+.list-group-flush > .list-group-item:last-child {
+  border-bottom-width: 0;
+}
+
+.list-group-item-primary {
+  --tblr-list-group-color: var(--tblr-primary-text-emphasis);
+  --tblr-list-group-bg: var(--tblr-primary-bg-subtle);
+  --tblr-list-group-border-color: var(--tblr-primary-border-subtle);
+  --tblr-list-group-action-hover-color: var(--tblr-emphasis-color);
+  --tblr-list-group-action-hover-bg: var(--tblr-primary-border-subtle);
+  --tblr-list-group-action-active-color: var(--tblr-emphasis-color);
+  --tblr-list-group-action-active-bg: var(--tblr-primary-border-subtle);
+  --tblr-list-group-active-color: var(--tblr-primary-bg-subtle);
+  --tblr-list-group-active-bg: var(--tblr-primary-text-emphasis);
+  --tblr-list-group-active-border-color: var(--tblr-primary-text-emphasis);
+}
+
+.list-group-item-secondary {
+  --tblr-list-group-color: var(--tblr-secondary-text-emphasis);
+  --tblr-list-group-bg: var(--tblr-secondary-bg-subtle);
+  --tblr-list-group-border-color: var(--tblr-secondary-border-subtle);
+  --tblr-list-group-action-hover-color: var(--tblr-emphasis-color);
+  --tblr-list-group-action-hover-bg: var(--tblr-secondary-border-subtle);
+  --tblr-list-group-action-active-color: var(--tblr-emphasis-color);
+  --tblr-list-group-action-active-bg: var(--tblr-secondary-border-subtle);
+  --tblr-list-group-active-color: var(--tblr-secondary-bg-subtle);
+  --tblr-list-group-active-bg: var(--tblr-secondary-text-emphasis);
+  --tblr-list-group-active-border-color: var(--tblr-secondary-text-emphasis);
+}
+
+.list-group-item-success {
+  --tblr-list-group-color: var(--tblr-success-text-emphasis);
+  --tblr-list-group-bg: var(--tblr-success-bg-subtle);
+  --tblr-list-group-border-color: var(--tblr-success-border-subtle);
+  --tblr-list-group-action-hover-color: var(--tblr-emphasis-color);
+  --tblr-list-group-action-hover-bg: var(--tblr-success-border-subtle);
+  --tblr-list-group-action-active-color: var(--tblr-emphasis-color);
+  --tblr-list-group-action-active-bg: var(--tblr-success-border-subtle);
+  --tblr-list-group-active-color: var(--tblr-success-bg-subtle);
+  --tblr-list-group-active-bg: var(--tblr-success-text-emphasis);
+  --tblr-list-group-active-border-color: var(--tblr-success-text-emphasis);
+}
+
+.list-group-item-info {
+  --tblr-list-group-color: var(--tblr-info-text-emphasis);
+  --tblr-list-group-bg: var(--tblr-info-bg-subtle);
+  --tblr-list-group-border-color: var(--tblr-info-border-subtle);
+  --tblr-list-group-action-hover-color: var(--tblr-emphasis-color);
+  --tblr-list-group-action-hover-bg: var(--tblr-info-border-subtle);
+  --tblr-list-group-action-active-color: var(--tblr-emphasis-color);
+  --tblr-list-group-action-active-bg: var(--tblr-info-border-subtle);
+  --tblr-list-group-active-color: var(--tblr-info-bg-subtle);
+  --tblr-list-group-active-bg: var(--tblr-info-text-emphasis);
+  --tblr-list-group-active-border-color: var(--tblr-info-text-emphasis);
+}
+
+.list-group-item-warning {
+  --tblr-list-group-color: var(--tblr-warning-text-emphasis);
+  --tblr-list-group-bg: var(--tblr-warning-bg-subtle);
+  --tblr-list-group-border-color: var(--tblr-warning-border-subtle);
+  --tblr-list-group-action-hover-color: var(--tblr-emphasis-color);
+  --tblr-list-group-action-hover-bg: var(--tblr-warning-border-subtle);
+  --tblr-list-group-action-active-color: var(--tblr-emphasis-color);
+  --tblr-list-group-action-active-bg: var(--tblr-warning-border-subtle);
+  --tblr-list-group-active-color: var(--tblr-warning-bg-subtle);
+  --tblr-list-group-active-bg: var(--tblr-warning-text-emphasis);
+  --tblr-list-group-active-border-color: var(--tblr-warning-text-emphasis);
+}
+
+.list-group-item-danger {
+  --tblr-list-group-color: var(--tblr-danger-text-emphasis);
+  --tblr-list-group-bg: var(--tblr-danger-bg-subtle);
+  --tblr-list-group-border-color: var(--tblr-danger-border-subtle);
+  --tblr-list-group-action-hover-color: var(--tblr-emphasis-color);
+  --tblr-list-group-action-hover-bg: var(--tblr-danger-border-subtle);
+  --tblr-list-group-action-active-color: var(--tblr-emphasis-color);
+  --tblr-list-group-action-active-bg: var(--tblr-danger-border-subtle);
+  --tblr-list-group-active-color: var(--tblr-danger-bg-subtle);
+  --tblr-list-group-active-bg: var(--tblr-danger-text-emphasis);
+  --tblr-list-group-active-border-color: var(--tblr-danger-text-emphasis);
+}
+
+.list-group-item-light {
+  --tblr-list-group-color: var(--tblr-light-text-emphasis);
+  --tblr-list-group-bg: var(--tblr-light-bg-subtle);
+  --tblr-list-group-border-color: var(--tblr-light-border-subtle);
+  --tblr-list-group-action-hover-color: var(--tblr-emphasis-color);
+  --tblr-list-group-action-hover-bg: var(--tblr-light-border-subtle);
+  --tblr-list-group-action-active-color: var(--tblr-emphasis-color);
+  --tblr-list-group-action-active-bg: var(--tblr-light-border-subtle);
+  --tblr-list-group-active-color: var(--tblr-light-bg-subtle);
+  --tblr-list-group-active-bg: var(--tblr-light-text-emphasis);
+  --tblr-list-group-active-border-color: var(--tblr-light-text-emphasis);
+}
+
+.list-group-item-dark {
+  --tblr-list-group-color: var(--tblr-dark-text-emphasis);
+  --tblr-list-group-bg: var(--tblr-dark-bg-subtle);
+  --tblr-list-group-border-color: var(--tblr-dark-border-subtle);
+  --tblr-list-group-action-hover-color: var(--tblr-emphasis-color);
+  --tblr-list-group-action-hover-bg: var(--tblr-dark-border-subtle);
+  --tblr-list-group-action-active-color: var(--tblr-emphasis-color);
+  --tblr-list-group-action-active-bg: var(--tblr-dark-border-subtle);
+  --tblr-list-group-active-color: var(--tblr-dark-bg-subtle);
+  --tblr-list-group-active-bg: var(--tblr-dark-text-emphasis);
+  --tblr-list-group-active-border-color: var(--tblr-dark-text-emphasis);
+}
+
+.list-group-item-muted {
+  --tblr-list-group-color: var(--tblr-muted-text-emphasis);
+  --tblr-list-group-bg: var(--tblr-muted-bg-subtle);
+  --tblr-list-group-border-color: var(--tblr-muted-border-subtle);
+  --tblr-list-group-action-hover-color: var(--tblr-emphasis-color);
+  --tblr-list-group-action-hover-bg: var(--tblr-muted-border-subtle);
+  --tblr-list-group-action-active-color: var(--tblr-emphasis-color);
+  --tblr-list-group-action-active-bg: var(--tblr-muted-border-subtle);
+  --tblr-list-group-active-color: var(--tblr-muted-bg-subtle);
+  --tblr-list-group-active-bg: var(--tblr-muted-text-emphasis);
+  --tblr-list-group-active-border-color: var(--tblr-muted-text-emphasis);
+}
+
+.list-group-item-blue {
+  --tblr-list-group-color: var(--tblr-blue-text-emphasis);
+  --tblr-list-group-bg: var(--tblr-blue-bg-subtle);
+  --tblr-list-group-border-color: var(--tblr-blue-border-subtle);
+  --tblr-list-group-action-hover-color: var(--tblr-emphasis-color);
+  --tblr-list-group-action-hover-bg: var(--tblr-blue-border-subtle);
+  --tblr-list-group-action-active-color: var(--tblr-emphasis-color);
+  --tblr-list-group-action-active-bg: var(--tblr-blue-border-subtle);
+  --tblr-list-group-active-color: var(--tblr-blue-bg-subtle);
+  --tblr-list-group-active-bg: var(--tblr-blue-text-emphasis);
+  --tblr-list-group-active-border-color: var(--tblr-blue-text-emphasis);
+}
+
+.list-group-item-azure {
+  --tblr-list-group-color: var(--tblr-azure-text-emphasis);
+  --tblr-list-group-bg: var(--tblr-azure-bg-subtle);
+  --tblr-list-group-border-color: var(--tblr-azure-border-subtle);
+  --tblr-list-group-action-hover-color: var(--tblr-emphasis-color);
+  --tblr-list-group-action-hover-bg: var(--tblr-azure-border-subtle);
+  --tblr-list-group-action-active-color: var(--tblr-emphasis-color);
+  --tblr-list-group-action-active-bg: var(--tblr-azure-border-subtle);
+  --tblr-list-group-active-color: var(--tblr-azure-bg-subtle);
+  --tblr-list-group-active-bg: var(--tblr-azure-text-emphasis);
+  --tblr-list-group-active-border-color: var(--tblr-azure-text-emphasis);
+}
+
+.list-group-item-indigo {
+  --tblr-list-group-color: var(--tblr-indigo-text-emphasis);
+  --tblr-list-group-bg: var(--tblr-indigo-bg-subtle);
+  --tblr-list-group-border-color: var(--tblr-indigo-border-subtle);
+  --tblr-list-group-action-hover-color: var(--tblr-emphasis-color);
+  --tblr-list-group-action-hover-bg: var(--tblr-indigo-border-subtle);
+  --tblr-list-group-action-active-color: var(--tblr-emphasis-color);
+  --tblr-list-group-action-active-bg: var(--tblr-indigo-border-subtle);
+  --tblr-list-group-active-color: var(--tblr-indigo-bg-subtle);
+  --tblr-list-group-active-bg: var(--tblr-indigo-text-emphasis);
+  --tblr-list-group-active-border-color: var(--tblr-indigo-text-emphasis);
+}
+
+.list-group-item-purple {
+  --tblr-list-group-color: var(--tblr-purple-text-emphasis);
+  --tblr-list-group-bg: var(--tblr-purple-bg-subtle);
+  --tblr-list-group-border-color: var(--tblr-purple-border-subtle);
+  --tblr-list-group-action-hover-color: var(--tblr-emphasis-color);
+  --tblr-list-group-action-hover-bg: var(--tblr-purple-border-subtle);
+  --tblr-list-group-action-active-color: var(--tblr-emphasis-color);
+  --tblr-list-group-action-active-bg: var(--tblr-purple-border-subtle);
+  --tblr-list-group-active-color: var(--tblr-purple-bg-subtle);
+  --tblr-list-group-active-bg: var(--tblr-purple-text-emphasis);
+  --tblr-list-group-active-border-color: var(--tblr-purple-text-emphasis);
+}
+
+.list-group-item-pink {
+  --tblr-list-group-color: var(--tblr-pink-text-emphasis);
+  --tblr-list-group-bg: var(--tblr-pink-bg-subtle);
+  --tblr-list-group-border-color: var(--tblr-pink-border-subtle);
+  --tblr-list-group-action-hover-color: var(--tblr-emphasis-color);
+  --tblr-list-group-action-hover-bg: var(--tblr-pink-border-subtle);
+  --tblr-list-group-action-active-color: var(--tblr-emphasis-color);
+  --tblr-list-group-action-active-bg: var(--tblr-pink-border-subtle);
+  --tblr-list-group-active-color: var(--tblr-pink-bg-subtle);
+  --tblr-list-group-active-bg: var(--tblr-pink-text-emphasis);
+  --tblr-list-group-active-border-color: var(--tblr-pink-text-emphasis);
+}
+
+.list-group-item-red {
+  --tblr-list-group-color: var(--tblr-red-text-emphasis);
+  --tblr-list-group-bg: var(--tblr-red-bg-subtle);
+  --tblr-list-group-border-color: var(--tblr-red-border-subtle);
+  --tblr-list-group-action-hover-color: var(--tblr-emphasis-color);
+  --tblr-list-group-action-hover-bg: var(--tblr-red-border-subtle);
+  --tblr-list-group-action-active-color: var(--tblr-emphasis-color);
+  --tblr-list-group-action-active-bg: var(--tblr-red-border-subtle);
+  --tblr-list-group-active-color: var(--tblr-red-bg-subtle);
+  --tblr-list-group-active-bg: var(--tblr-red-text-emphasis);
+  --tblr-list-group-active-border-color: var(--tblr-red-text-emphasis);
+}
+
+.list-group-item-orange {
+  --tblr-list-group-color: var(--tblr-orange-text-emphasis);
+  --tblr-list-group-bg: var(--tblr-orange-bg-subtle);
+  --tblr-list-group-border-color: var(--tblr-orange-border-subtle);
+  --tblr-list-group-action-hover-color: var(--tblr-emphasis-color);
+  --tblr-list-group-action-hover-bg: var(--tblr-orange-border-subtle);
+  --tblr-list-group-action-active-color: var(--tblr-emphasis-color);
+  --tblr-list-group-action-active-bg: var(--tblr-orange-border-subtle);
+  --tblr-list-group-active-color: var(--tblr-orange-bg-subtle);
+  --tblr-list-group-active-bg: var(--tblr-orange-text-emphasis);
+  --tblr-list-group-active-border-color: var(--tblr-orange-text-emphasis);
+}
+
+.list-group-item-yellow {
+  --tblr-list-group-color: var(--tblr-yellow-text-emphasis);
+  --tblr-list-group-bg: var(--tblr-yellow-bg-subtle);
+  --tblr-list-group-border-color: var(--tblr-yellow-border-subtle);
+  --tblr-list-group-action-hover-color: var(--tblr-emphasis-color);
+  --tblr-list-group-action-hover-bg: var(--tblr-yellow-border-subtle);
+  --tblr-list-group-action-active-color: var(--tblr-emphasis-color);
+  --tblr-list-group-action-active-bg: var(--tblr-yellow-border-subtle);
+  --tblr-list-group-active-color: var(--tblr-yellow-bg-subtle);
+  --tblr-list-group-active-bg: var(--tblr-yellow-text-emphasis);
+  --tblr-list-group-active-border-color: var(--tblr-yellow-text-emphasis);
+}
+
+.list-group-item-lime {
+  --tblr-list-group-color: var(--tblr-lime-text-emphasis);
+  --tblr-list-group-bg: var(--tblr-lime-bg-subtle);
+  --tblr-list-group-border-color: var(--tblr-lime-border-subtle);
+  --tblr-list-group-action-hover-color: var(--tblr-emphasis-color);
+  --tblr-list-group-action-hover-bg: var(--tblr-lime-border-subtle);
+  --tblr-list-group-action-active-color: var(--tblr-emphasis-color);
+  --tblr-list-group-action-active-bg: var(--tblr-lime-border-subtle);
+  --tblr-list-group-active-color: var(--tblr-lime-bg-subtle);
+  --tblr-list-group-active-bg: var(--tblr-lime-text-emphasis);
+  --tblr-list-group-active-border-color: var(--tblr-lime-text-emphasis);
+}
+
+.list-group-item-green {
+  --tblr-list-group-color: var(--tblr-green-text-emphasis);
+  --tblr-list-group-bg: var(--tblr-green-bg-subtle);
+  --tblr-list-group-border-color: var(--tblr-green-border-subtle);
+  --tblr-list-group-action-hover-color: var(--tblr-emphasis-color);
+  --tblr-list-group-action-hover-bg: var(--tblr-green-border-subtle);
+  --tblr-list-group-action-active-color: var(--tblr-emphasis-color);
+  --tblr-list-group-action-active-bg: var(--tblr-green-border-subtle);
+  --tblr-list-group-active-color: var(--tblr-green-bg-subtle);
+  --tblr-list-group-active-bg: var(--tblr-green-text-emphasis);
+  --tblr-list-group-active-border-color: var(--tblr-green-text-emphasis);
+}
+
+.list-group-item-teal {
+  --tblr-list-group-color: var(--tblr-teal-text-emphasis);
+  --tblr-list-group-bg: var(--tblr-teal-bg-subtle);
+  --tblr-list-group-border-color: var(--tblr-teal-border-subtle);
+  --tblr-list-group-action-hover-color: var(--tblr-emphasis-color);
+  --tblr-list-group-action-hover-bg: var(--tblr-teal-border-subtle);
+  --tblr-list-group-action-active-color: var(--tblr-emphasis-color);
+  --tblr-list-group-action-active-bg: var(--tblr-teal-border-subtle);
+  --tblr-list-group-active-color: var(--tblr-teal-bg-subtle);
+  --tblr-list-group-active-bg: var(--tblr-teal-text-emphasis);
+  --tblr-list-group-active-border-color: var(--tblr-teal-text-emphasis);
+}
+
+.list-group-item-cyan {
+  --tblr-list-group-color: var(--tblr-cyan-text-emphasis);
+  --tblr-list-group-bg: var(--tblr-cyan-bg-subtle);
+  --tblr-list-group-border-color: var(--tblr-cyan-border-subtle);
+  --tblr-list-group-action-hover-color: var(--tblr-emphasis-color);
+  --tblr-list-group-action-hover-bg: var(--tblr-cyan-border-subtle);
+  --tblr-list-group-action-active-color: var(--tblr-emphasis-color);
+  --tblr-list-group-action-active-bg: var(--tblr-cyan-border-subtle);
+  --tblr-list-group-active-color: var(--tblr-cyan-bg-subtle);
+  --tblr-list-group-active-bg: var(--tblr-cyan-text-emphasis);
+  --tblr-list-group-active-border-color: var(--tblr-cyan-text-emphasis);
+}
+
+.list-group-item-facebook {
+  --tblr-list-group-color: var(--tblr-facebook-text-emphasis);
+  --tblr-list-group-bg: var(--tblr-facebook-bg-subtle);
+  --tblr-list-group-border-color: var(--tblr-facebook-border-subtle);
+  --tblr-list-group-action-hover-color: var(--tblr-emphasis-color);
+  --tblr-list-group-action-hover-bg: var(--tblr-facebook-border-subtle);
+  --tblr-list-group-action-active-color: var(--tblr-emphasis-color);
+  --tblr-list-group-action-active-bg: var(--tblr-facebook-border-subtle);
+  --tblr-list-group-active-color: var(--tblr-facebook-bg-subtle);
+  --tblr-list-group-active-bg: var(--tblr-facebook-text-emphasis);
+  --tblr-list-group-active-border-color: var(--tblr-facebook-text-emphasis);
+}
+
+.list-group-item-twitter {
+  --tblr-list-group-color: var(--tblr-twitter-text-emphasis);
+  --tblr-list-group-bg: var(--tblr-twitter-bg-subtle);
+  --tblr-list-group-border-color: var(--tblr-twitter-border-subtle);
+  --tblr-list-group-action-hover-color: var(--tblr-emphasis-color);
+  --tblr-list-group-action-hover-bg: var(--tblr-twitter-border-subtle);
+  --tblr-list-group-action-active-color: var(--tblr-emphasis-color);
+  --tblr-list-group-action-active-bg: var(--tblr-twitter-border-subtle);
+  --tblr-list-group-active-color: var(--tblr-twitter-bg-subtle);
+  --tblr-list-group-active-bg: var(--tblr-twitter-text-emphasis);
+  --tblr-list-group-active-border-color: var(--tblr-twitter-text-emphasis);
+}
+
+.list-group-item-linkedin {
+  --tblr-list-group-color: var(--tblr-linkedin-text-emphasis);
+  --tblr-list-group-bg: var(--tblr-linkedin-bg-subtle);
+  --tblr-list-group-border-color: var(--tblr-linkedin-border-subtle);
+  --tblr-list-group-action-hover-color: var(--tblr-emphasis-color);
+  --tblr-list-group-action-hover-bg: var(--tblr-linkedin-border-subtle);
+  --tblr-list-group-action-active-color: var(--tblr-emphasis-color);
+  --tblr-list-group-action-active-bg: var(--tblr-linkedin-border-subtle);
+  --tblr-list-group-active-color: var(--tblr-linkedin-bg-subtle);
+  --tblr-list-group-active-bg: var(--tblr-linkedin-text-emphasis);
+  --tblr-list-group-active-border-color: var(--tblr-linkedin-text-emphasis);
+}
+
+.list-group-item-google {
+  --tblr-list-group-color: var(--tblr-google-text-emphasis);
+  --tblr-list-group-bg: var(--tblr-google-bg-subtle);
+  --tblr-list-group-border-color: var(--tblr-google-border-subtle);
+  --tblr-list-group-action-hover-color: var(--tblr-emphasis-color);
+  --tblr-list-group-action-hover-bg: var(--tblr-google-border-subtle);
+  --tblr-list-group-action-active-color: var(--tblr-emphasis-color);
+  --tblr-list-group-action-active-bg: var(--tblr-google-border-subtle);
+  --tblr-list-group-active-color: var(--tblr-google-bg-subtle);
+  --tblr-list-group-active-bg: var(--tblr-google-text-emphasis);
+  --tblr-list-group-active-border-color: var(--tblr-google-text-emphasis);
+}
+
+.list-group-item-youtube {
+  --tblr-list-group-color: var(--tblr-youtube-text-emphasis);
+  --tblr-list-group-bg: var(--tblr-youtube-bg-subtle);
+  --tblr-list-group-border-color: var(--tblr-youtube-border-subtle);
+  --tblr-list-group-action-hover-color: var(--tblr-emphasis-color);
+  --tblr-list-group-action-hover-bg: var(--tblr-youtube-border-subtle);
+  --tblr-list-group-action-active-color: var(--tblr-emphasis-color);
+  --tblr-list-group-action-active-bg: var(--tblr-youtube-border-subtle);
+  --tblr-list-group-active-color: var(--tblr-youtube-bg-subtle);
+  --tblr-list-group-active-bg: var(--tblr-youtube-text-emphasis);
+  --tblr-list-group-active-border-color: var(--tblr-youtube-text-emphasis);
+}
+
+.list-group-item-vimeo {
+  --tblr-list-group-color: var(--tblr-vimeo-text-emphasis);
+  --tblr-list-group-bg: var(--tblr-vimeo-bg-subtle);
+  --tblr-list-group-border-color: var(--tblr-vimeo-border-subtle);
+  --tblr-list-group-action-hover-color: var(--tblr-emphasis-color);
+  --tblr-list-group-action-hover-bg: var(--tblr-vimeo-border-subtle);
+  --tblr-list-group-action-active-color: var(--tblr-emphasis-color);
+  --tblr-list-group-action-active-bg: var(--tblr-vimeo-border-subtle);
+  --tblr-list-group-active-color: var(--tblr-vimeo-bg-subtle);
+  --tblr-list-group-active-bg: var(--tblr-vimeo-text-emphasis);
+  --tblr-list-group-active-border-color: var(--tblr-vimeo-text-emphasis);
+}
+
+.list-group-item-dribbble {
+  --tblr-list-group-color: var(--tblr-dribbble-text-emphasis);
+  --tblr-list-group-bg: var(--tblr-dribbble-bg-subtle);
+  --tblr-list-group-border-color: var(--tblr-dribbble-border-subtle);
+  --tblr-list-group-action-hover-color: var(--tblr-emphasis-color);
+  --tblr-list-group-action-hover-bg: var(--tblr-dribbble-border-subtle);
+  --tblr-list-group-action-active-color: var(--tblr-emphasis-color);
+  --tblr-list-group-action-active-bg: var(--tblr-dribbble-border-subtle);
+  --tblr-list-group-active-color: var(--tblr-dribbble-bg-subtle);
+  --tblr-list-group-active-bg: var(--tblr-dribbble-text-emphasis);
+  --tblr-list-group-active-border-color: var(--tblr-dribbble-text-emphasis);
+}
+
+.list-group-item-github {
+  --tblr-list-group-color: var(--tblr-github-text-emphasis);
+  --tblr-list-group-bg: var(--tblr-github-bg-subtle);
+  --tblr-list-group-border-color: var(--tblr-github-border-subtle);
+  --tblr-list-group-action-hover-color: var(--tblr-emphasis-color);
+  --tblr-list-group-action-hover-bg: var(--tblr-github-border-subtle);
+  --tblr-list-group-action-active-color: var(--tblr-emphasis-color);
+  --tblr-list-group-action-active-bg: var(--tblr-github-border-subtle);
+  --tblr-list-group-active-color: var(--tblr-github-bg-subtle);
+  --tblr-list-group-active-bg: var(--tblr-github-text-emphasis);
+  --tblr-list-group-active-border-color: var(--tblr-github-text-emphasis);
+}
+
+.list-group-item-instagram {
+  --tblr-list-group-color: var(--tblr-instagram-text-emphasis);
+  --tblr-list-group-bg: var(--tblr-instagram-bg-subtle);
+  --tblr-list-group-border-color: var(--tblr-instagram-border-subtle);
+  --tblr-list-group-action-hover-color: var(--tblr-emphasis-color);
+  --tblr-list-group-action-hover-bg: var(--tblr-instagram-border-subtle);
+  --tblr-list-group-action-active-color: var(--tblr-emphasis-color);
+  --tblr-list-group-action-active-bg: var(--tblr-instagram-border-subtle);
+  --tblr-list-group-active-color: var(--tblr-instagram-bg-subtle);
+  --tblr-list-group-active-bg: var(--tblr-instagram-text-emphasis);
+  --tblr-list-group-active-border-color: var(--tblr-instagram-text-emphasis);
+}
+
+.list-group-item-pinterest {
+  --tblr-list-group-color: var(--tblr-pinterest-text-emphasis);
+  --tblr-list-group-bg: var(--tblr-pinterest-bg-subtle);
+  --tblr-list-group-border-color: var(--tblr-pinterest-border-subtle);
+  --tblr-list-group-action-hover-color: var(--tblr-emphasis-color);
+  --tblr-list-group-action-hover-bg: var(--tblr-pinterest-border-subtle);
+  --tblr-list-group-action-active-color: var(--tblr-emphasis-color);
+  --tblr-list-group-action-active-bg: var(--tblr-pinterest-border-subtle);
+  --tblr-list-group-active-color: var(--tblr-pinterest-bg-subtle);
+  --tblr-list-group-active-bg: var(--tblr-pinterest-text-emphasis);
+  --tblr-list-group-active-border-color: var(--tblr-pinterest-text-emphasis);
+}
+
+.list-group-item-vk {
+  --tblr-list-group-color: var(--tblr-vk-text-emphasis);
+  --tblr-list-group-bg: var(--tblr-vk-bg-subtle);
+  --tblr-list-group-border-color: var(--tblr-vk-border-subtle);
+  --tblr-list-group-action-hover-color: var(--tblr-emphasis-color);
+  --tblr-list-group-action-hover-bg: var(--tblr-vk-border-subtle);
+  --tblr-list-group-action-active-color: var(--tblr-emphasis-color);
+  --tblr-list-group-action-active-bg: var(--tblr-vk-border-subtle);
+  --tblr-list-group-active-color: var(--tblr-vk-bg-subtle);
+  --tblr-list-group-active-bg: var(--tblr-vk-text-emphasis);
+  --tblr-list-group-active-border-color: var(--tblr-vk-text-emphasis);
+}
+
+.list-group-item-rss {
+  --tblr-list-group-color: var(--tblr-rss-text-emphasis);
+  --tblr-list-group-bg: var(--tblr-rss-bg-subtle);
+  --tblr-list-group-border-color: var(--tblr-rss-border-subtle);
+  --tblr-list-group-action-hover-color: var(--tblr-emphasis-color);
+  --tblr-list-group-action-hover-bg: var(--tblr-rss-border-subtle);
+  --tblr-list-group-action-active-color: var(--tblr-emphasis-color);
+  --tblr-list-group-action-active-bg: var(--tblr-rss-border-subtle);
+  --tblr-list-group-active-color: var(--tblr-rss-bg-subtle);
+  --tblr-list-group-active-bg: var(--tblr-rss-text-emphasis);
+  --tblr-list-group-active-border-color: var(--tblr-rss-text-emphasis);
+}
+
+.list-group-item-flickr {
+  --tblr-list-group-color: var(--tblr-flickr-text-emphasis);
+  --tblr-list-group-bg: var(--tblr-flickr-bg-subtle);
+  --tblr-list-group-border-color: var(--tblr-flickr-border-subtle);
+  --tblr-list-group-action-hover-color: var(--tblr-emphasis-color);
+  --tblr-list-group-action-hover-bg: var(--tblr-flickr-border-subtle);
+  --tblr-list-group-action-active-color: var(--tblr-emphasis-color);
+  --tblr-list-group-action-active-bg: var(--tblr-flickr-border-subtle);
+  --tblr-list-group-active-color: var(--tblr-flickr-bg-subtle);
+  --tblr-list-group-active-bg: var(--tblr-flickr-text-emphasis);
+  --tblr-list-group-active-border-color: var(--tblr-flickr-text-emphasis);
+}
+
+.list-group-item-bitbucket {
+  --tblr-list-group-color: var(--tblr-bitbucket-text-emphasis);
+  --tblr-list-group-bg: var(--tblr-bitbucket-bg-subtle);
+  --tblr-list-group-border-color: var(--tblr-bitbucket-border-subtle);
+  --tblr-list-group-action-hover-color: var(--tblr-emphasis-color);
+  --tblr-list-group-action-hover-bg: var(--tblr-bitbucket-border-subtle);
+  --tblr-list-group-action-active-color: var(--tblr-emphasis-color);
+  --tblr-list-group-action-active-bg: var(--tblr-bitbucket-border-subtle);
+  --tblr-list-group-active-color: var(--tblr-bitbucket-bg-subtle);
+  --tblr-list-group-active-bg: var(--tblr-bitbucket-text-emphasis);
+  --tblr-list-group-active-border-color: var(--tblr-bitbucket-text-emphasis);
+}
+
+.list-group-item-tabler {
+  --tblr-list-group-color: var(--tblr-tabler-text-emphasis);
+  --tblr-list-group-bg: var(--tblr-tabler-bg-subtle);
+  --tblr-list-group-border-color: var(--tblr-tabler-border-subtle);
+  --tblr-list-group-action-hover-color: var(--tblr-emphasis-color);
+  --tblr-list-group-action-hover-bg: var(--tblr-tabler-border-subtle);
+  --tblr-list-group-action-active-color: var(--tblr-emphasis-color);
+  --tblr-list-group-action-active-bg: var(--tblr-tabler-border-subtle);
+  --tblr-list-group-active-color: var(--tblr-tabler-bg-subtle);
+  --tblr-list-group-active-bg: var(--tblr-tabler-text-emphasis);
+  --tblr-list-group-active-border-color: var(--tblr-tabler-text-emphasis);
+}
+
+.btn-close {
+  --tblr-btn-close-color: #182433;
+  --tblr-btn-close-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23182433'%3e%3cpath 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'/%3e%3c/svg%3e");
+  --tblr-btn-close-opacity: 0.4;
+  --tblr-btn-close-hover-opacity: 0.75;
+  --tblr-btn-close-focus-shadow: 0 0 0 0.25rem rgba(var(--tblr-primary-rgb), 0.25);
+  --tblr-btn-close-focus-opacity: 1;
+  --tblr-btn-close-disabled-opacity: 0.25;
+  --tblr-btn-close-white-filter: invert(1) grayscale(100%) brightness(200%);
+  box-sizing: content-box;
+  width: 1em;
+  height: 1em;
+  padding: 0.25em 0.25em;
+  color: var(--tblr-btn-close-color);
+  background: transparent var(--tblr-btn-close-bg) center/1em auto no-repeat;
+  border: 0;
+  border-radius: 4px;
+  opacity: var(--tblr-btn-close-opacity);
+}
+.btn-close:hover {
+  color: var(--tblr-btn-close-color);
+  text-decoration: none;
+  opacity: var(--tblr-btn-close-hover-opacity);
+}
+.btn-close:focus {
+  outline: 0;
+  box-shadow: var(--tblr-btn-close-focus-shadow);
+  opacity: var(--tblr-btn-close-focus-opacity);
+}
+.btn-close:disabled, .btn-close.disabled {
+  pointer-events: none;
+  -webkit-user-select: none;
+     -moz-user-select: none;
+      -ms-user-select: none;
+          user-select: none;
+  opacity: var(--tblr-btn-close-disabled-opacity);
+}
+
+.btn-close-white {
+  filter: var(--tblr-btn-close-white-filter);
+}
+
+[data-bs-theme=dark] .btn-close, body[data-bs-theme=dark] [data-bs-theme=light] .btn-close {
+  filter: var(--tblr-btn-close-white-filter);
+}
+
+.toast {
+  --tblr-toast-zindex: 1090;
+  --tblr-toast-padding-x: 0.75rem;
+  --tblr-toast-padding-y: 0.5rem;
+  --tblr-toast-spacing: calc(var(--tblr-page-padding) * 2);
+  --tblr-toast-max-width: 350px;
+  --tblr-toast-font-size: 0.875rem;
+  --tblr-toast-color: ;
+  --tblr-toast-bg: rgba(var(--tblr-body-bg-rgb), 0.85);
+  --tblr-toast-border-width: var(--tblr-border-width);
+  --tblr-toast-border-color: var(--tblr-border-color);
+  --tblr-toast-border-radius: var(--tblr-border-radius);
+  --tblr-toast-box-shadow: var(--tblr-box-shadow);
+  --tblr-toast-header-color: var(--tblr-secondary);
+  --tblr-toast-header-bg: rgba(var(--tblr-body-bg-rgb), 0.85);
+  --tblr-toast-header-border-color: var(--tblr-border-color);
+  width: var(--tblr-toast-max-width);
+  max-width: 100%;
+  font-size: var(--tblr-toast-font-size);
+  color: var(--tblr-toast-color);
+  pointer-events: auto;
+  background-color: var(--tblr-toast-bg);
+  background-clip: padding-box;
+  border: var(--tblr-toast-border-width) solid var(--tblr-toast-border-color);
+  box-shadow: var(--tblr-toast-box-shadow);
+  border-radius: var(--tblr-toast-border-radius);
+}
+.toast.showing {
+  opacity: 0;
+}
+.toast:not(.show) {
+  display: none;
+}
+
+.toast-container {
+  --tblr-toast-zindex: 1090;
+  position: absolute;
+  z-index: var(--tblr-toast-zindex);
+  width: -webkit-max-content;
+  width: -moz-max-content;
+  width: max-content;
+  max-width: 100%;
+  pointer-events: none;
+}
+.toast-container > :not(:last-child) {
+  margin-bottom: var(--tblr-toast-spacing);
+}
+
+.toast-header {
+  display: flex;
+  align-items: center;
+  padding: var(--tblr-toast-padding-y) var(--tblr-toast-padding-x);
+  color: var(--tblr-toast-header-color);
+  background-color: var(--tblr-toast-header-bg);
+  background-clip: padding-box;
+  border-bottom: var(--tblr-toast-border-width) solid var(--tblr-toast-header-border-color);
+  border-top-right-radius: calc(var(--tblr-toast-border-radius) - var(--tblr-toast-border-width));
+  border-top-left-radius: calc(var(--tblr-toast-border-radius) - var(--tblr-toast-border-width));
+}
+.toast-header .btn-close {
+  margin-left: calc(-0.5 * var(--tblr-toast-padding-x));
+  margin-right: var(--tblr-toast-padding-x);
+}
+
+.toast-body {
+  padding: var(--tblr-toast-padding-x);
+  word-wrap: break-word;
+}
+
+.modal {
+  --tblr-modal-zindex: 1055;
+  --tblr-modal-width: 540px;
+  --tblr-modal-padding: 1.5rem;
+  --tblr-modal-margin: 0.5rem;
+  --tblr-modal-color: ;
+  --tblr-modal-bg: var(--tblr-bg-surface);
+  --tblr-modal-border-color: transparent;
+  --tblr-modal-border-width: var(--tblr-border-width);
+  --tblr-modal-border-radius: var(--tblr-border-radius-lg);
+  --tblr-modal-box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075);
+  --tblr-modal-inner-border-radius: calc(var(--tblr-modal-border-radius) - 1px);
+  --tblr-modal-header-padding-x: 1.5rem;
+  --tblr-modal-header-padding-y: 1.5rem;
+  --tblr-modal-header-padding: 1.5rem;
+  --tblr-modal-header-border-color: var(--tblr-border-color);
+  --tblr-modal-header-border-width: var(--tblr-border-width);
+  --tblr-modal-title-line-height: 1.4285714286;
+  --tblr-modal-footer-gap: 0.75rem;
+  --tblr-modal-footer-bg: var(--tblr-bg-surface-tertiary);
+  --tblr-modal-footer-border-color: var(--tblr-border-color);
+  --tblr-modal-footer-border-width: var(--tblr-border-width);
+  position: fixed;
+  top: 0;
+  right: 0;
+  z-index: var(--tblr-modal-zindex);
+  display: none;
+  width: 100%;
+  height: 100%;
+  overflow-x: hidden;
+  overflow-y: auto;
+  outline: 0;
+}
+
+.modal-dialog {
+  position: relative;
+  width: auto;
+  margin: var(--tblr-modal-margin);
+  pointer-events: none;
+}
+.modal.fade .modal-dialog {
+  transition: transform 0.3s ease-out;
+  transform: translate(0, -1rem);
+}
+@media (prefers-reduced-motion: reduce) {
+  .modal.fade .modal-dialog {
+    transition: none;
+  }
+}
+.modal.show .modal-dialog {
+  transform: none;
+}
+.modal.modal-static .modal-dialog {
+  transform: scale(1.02);
+}
+
+.modal-dialog-scrollable {
+  height: calc(100% - var(--tblr-modal-margin) * 2);
+}
+.modal-dialog-scrollable .modal-content {
+  max-height: 100%;
+  overflow: hidden;
+}
+.modal-dialog-scrollable .modal-body {
+  overflow-y: auto;
+}
+
+.modal-dialog-centered {
+  display: flex;
+  align-items: center;
+  min-height: calc(100% - var(--tblr-modal-margin) * 2);
+}
+
+.modal-content {
+  position: relative;
+  display: flex;
+  flex-direction: column;
+  width: 100%;
+  color: var(--tblr-modal-color);
+  pointer-events: auto;
+  background-color: var(--tblr-modal-bg);
+  background-clip: padding-box;
+  border: var(--tblr-modal-border-width) solid var(--tblr-modal-border-color);
+  border-radius: var(--tblr-modal-border-radius);
+  box-shadow: var(--tblr-modal-box-shadow);
+  outline: 0;
+}
+
+.modal-backdrop {
+  --tblr-backdrop-zindex: 1050;
+  --tblr-backdrop-bg: #182433;
+  --tblr-backdrop-opacity: 0.24;
+  position: fixed;
+  top: 0;
+  right: 0;
+  z-index: var(--tblr-backdrop-zindex);
+  width: 100vw;
+  height: 100vh;
+  background-color: var(--tblr-backdrop-bg);
+}
+.modal-backdrop.fade {
+  opacity: 0;
+}
+.modal-backdrop.show {
+  opacity: var(--tblr-backdrop-opacity);
+}
+
+.modal-header {
+  display: flex;
+  flex-shrink: 0;
+  align-items: center;
+  justify-content: space-between;
+  padding: var(--tblr-modal-header-padding);
+  border-bottom: var(--tblr-modal-header-border-width) solid var(--tblr-modal-header-border-color);
+  border-top-right-radius: var(--tblr-modal-inner-border-radius);
+  border-top-left-radius: var(--tblr-modal-inner-border-radius);
+}
+.modal-header .btn-close {
+  padding: calc(var(--tblr-modal-header-padding-y) * 0.5) calc(var(--tblr-modal-header-padding-x) * 0.5);
+  margin: calc(-0.5 * var(--tblr-modal-header-padding-y)) auto calc(-0.5 * var(--tblr-modal-header-padding-y)) calc(-0.5 * var(--tblr-modal-header-padding-x));
+}
+
+.modal-title {
+  margin-bottom: 0;
+  line-height: var(--tblr-modal-title-line-height);
+}
+
+.modal-body {
+  position: relative;
+  flex: 1 1 auto;
+  padding: var(--tblr-modal-padding);
+}
+
+.modal-footer {
+  display: flex;
+  flex-shrink: 0;
+  flex-wrap: wrap;
+  align-items: center;
+  justify-content: flex-end;
+  padding: calc(var(--tblr-modal-padding) - var(--tblr-modal-footer-gap) * 0.5);
+  background-color: var(--tblr-modal-footer-bg);
+  border-top: var(--tblr-modal-footer-border-width) solid var(--tblr-modal-footer-border-color);
+  border-bottom-left-radius: var(--tblr-modal-inner-border-radius);
+  border-bottom-right-radius: var(--tblr-modal-inner-border-radius);
+}
+.modal-footer > * {
+  margin: calc(var(--tblr-modal-footer-gap) * 0.5);
+}
+
+@media (min-width: 576px) {
+  .modal {
+    --tblr-modal-margin: 1.75rem;
+    --tblr-modal-box-shadow: rgba(var(--tblr-body-color-rgb), 0.04) 0 2px 4px 0;
+  }
+  .modal-dialog {
+    max-width: var(--tblr-modal-width);
+    margin-left: auto;
+    margin-right: auto;
+  }
+  .modal-sm {
+    --tblr-modal-width: 380px;
+  }
+}
+@media (min-width: 992px) {
+  .modal-lg,
+  .modal-xl {
+    --tblr-modal-width: 720px;
+  }
+}
+@media (min-width: 1200px) {
+  .modal-xl {
+    --tblr-modal-width: 1140px;
+  }
+}
+.modal-fullscreen {
+  width: 100vw;
+  max-width: none;
+  height: 100%;
+  margin: 0;
+}
+.modal-fullscreen .modal-content {
+  height: 100%;
+  border: 0;
+  border-radius: 0;
+}
+.modal-fullscreen .modal-header,
+.modal-fullscreen .modal-footer {
+  border-radius: 0;
+}
+.modal-fullscreen .modal-body {
+  overflow-y: auto;
+}
+
+@media (max-width: 575.98px) {
+  .modal-fullscreen-sm-down {
+    width: 100vw;
+    max-width: none;
+    height: 100%;
+    margin: 0;
+  }
+  .modal-fullscreen-sm-down .modal-content {
+    height: 100%;
+    border: 0;
+    border-radius: 0;
+  }
+  .modal-fullscreen-sm-down .modal-header,
+  .modal-fullscreen-sm-down .modal-footer {
+    border-radius: 0;
+  }
+  .modal-fullscreen-sm-down .modal-body {
+    overflow-y: auto;
+  }
+}
+@media (max-width: 767.98px) {
+  .modal-fullscreen-md-down {
+    width: 100vw;
+    max-width: none;
+    height: 100%;
+    margin: 0;
+  }
+  .modal-fullscreen-md-down .modal-content {
+    height: 100%;
+    border: 0;
+    border-radius: 0;
+  }
+  .modal-fullscreen-md-down .modal-header,
+  .modal-fullscreen-md-down .modal-footer {
+    border-radius: 0;
+  }
+  .modal-fullscreen-md-down .modal-body {
+    overflow-y: auto;
+  }
+}
+@media (max-width: 991.98px) {
+  .modal-fullscreen-lg-down {
+    width: 100vw;
+    max-width: none;
+    height: 100%;
+    margin: 0;
+  }
+  .modal-fullscreen-lg-down .modal-content {
+    height: 100%;
+    border: 0;
+    border-radius: 0;
+  }
+  .modal-fullscreen-lg-down .modal-header,
+  .modal-fullscreen-lg-down .modal-footer {
+    border-radius: 0;
+  }
+  .modal-fullscreen-lg-down .modal-body {
+    overflow-y: auto;
+  }
+}
+@media (max-width: 1199.98px) {
+  .modal-fullscreen-xl-down {
+    width: 100vw;
+    max-width: none;
+    height: 100%;
+    margin: 0;
+  }
+  .modal-fullscreen-xl-down .modal-content {
+    height: 100%;
+    border: 0;
+    border-radius: 0;
+  }
+  .modal-fullscreen-xl-down .modal-header,
+  .modal-fullscreen-xl-down .modal-footer {
+    border-radius: 0;
+  }
+  .modal-fullscreen-xl-down .modal-body {
+    overflow-y: auto;
+  }
+}
+@media (max-width: 1399.98px) {
+  .modal-fullscreen-xxl-down {
+    width: 100vw;
+    max-width: none;
+    height: 100%;
+    margin: 0;
+  }
+  .modal-fullscreen-xxl-down .modal-content {
+    height: 100%;
+    border: 0;
+    border-radius: 0;
+  }
+  .modal-fullscreen-xxl-down .modal-header,
+  .modal-fullscreen-xxl-down .modal-footer {
+    border-radius: 0;
+  }
+  .modal-fullscreen-xxl-down .modal-body {
+    overflow-y: auto;
+  }
+}
+.tooltip {
+  --tblr-tooltip-zindex: 1080;
+  --tblr-tooltip-max-width: 200px;
+  --tblr-tooltip-padding-x: var(--tblr-spacer-2);
+  --tblr-tooltip-padding-y: var(--tblr-spacer-2);
+  --tblr-tooltip-margin: ;
+  --tblr-tooltip-font-size: 0.765625rem;
+  --tblr-tooltip-color: var(--tblr-light);
+  --tblr-tooltip-bg: var(--tblr-bg-surface-dark);
+  --tblr-tooltip-border-radius: var(--tblr-border-radius);
+  --tblr-tooltip-opacity: 0.9;
+  --tblr-tooltip-arrow-width: 0.8rem;
+  --tblr-tooltip-arrow-height: 0.4rem;
+  z-index: var(--tblr-tooltip-zindex);
+  display: block;
+  margin: var(--tblr-tooltip-margin);
+  font-family: var(--tblr-font-sans-serif);
+  font-style: normal;
+  font-weight: 400;
+  line-height: 1.4285714286;
+  text-align: right;
+  text-align: start;
+  text-decoration: none;
+  text-shadow: none;
+  text-transform: none;
+  letter-spacing: normal;
+  word-break: normal;
+  white-space: normal;
+  word-spacing: normal;
+  line-break: auto;
+  font-size: var(--tblr-tooltip-font-size);
+  word-wrap: break-word;
+  opacity: 0;
+}
+.tooltip.show {
+  opacity: var(--tblr-tooltip-opacity);
+}
+.tooltip .tooltip-arrow {
+  display: block;
+  width: var(--tblr-tooltip-arrow-width);
+  height: var(--tblr-tooltip-arrow-height);
+}
+.tooltip .tooltip-arrow::before {
+  position: absolute;
+  content: "";
+  border-color: transparent;
+  border-style: solid;
+}
+
+.bs-tooltip-top .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow {
+  bottom: calc(-1 * var(--tblr-tooltip-arrow-height));
+}
+.bs-tooltip-top .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow::before {
+  top: -1px;
+  border-width: var(--tblr-tooltip-arrow-height) calc(var(--tblr-tooltip-arrow-width) * 0.5) 0;
+  border-top-color: var(--tblr-tooltip-bg);
+}
+.bs-tooltip-end .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow {
+  left: calc(-1 * var(--tblr-tooltip-arrow-height));
+  width: var(--tblr-tooltip-arrow-height);
+  height: var(--tblr-tooltip-arrow-width);
+}
+.bs-tooltip-end .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow::before {
+  right: -1px;
+  border-width: calc(var(--tblr-tooltip-arrow-width) * 0.5) var(--tblr-tooltip-arrow-height) calc(var(--tblr-tooltip-arrow-width) * 0.5) 0;
+  border-right-color: var(--tblr-tooltip-bg);
+}
+.bs-tooltip-bottom .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow {
+  top: calc(-1 * var(--tblr-tooltip-arrow-height));
+}
+.bs-tooltip-bottom .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow::before {
+  bottom: -1px;
+  border-width: 0 calc(var(--tblr-tooltip-arrow-width) * 0.5) var(--tblr-tooltip-arrow-height);
+  border-bottom-color: var(--tblr-tooltip-bg);
+}
+.bs-tooltip-start .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow {
+  right: calc(-1 * var(--tblr-tooltip-arrow-height));
+  width: var(--tblr-tooltip-arrow-height);
+  height: var(--tblr-tooltip-arrow-width);
+}
+.bs-tooltip-start .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow::before {
+  left: -1px;
+  border-width: calc(var(--tblr-tooltip-arrow-width) * 0.5) 0 calc(var(--tblr-tooltip-arrow-width) * 0.5) var(--tblr-tooltip-arrow-height);
+  border-left-color: var(--tblr-tooltip-bg);
+}
+.tooltip-inner {
+  max-width: var(--tblr-tooltip-max-width);
+  padding: var(--tblr-tooltip-padding-y) var(--tblr-tooltip-padding-x);
+  color: var(--tblr-tooltip-color);
+  text-align: center;
+  background-color: var(--tblr-tooltip-bg);
+  border-radius: var(--tblr-tooltip-border-radius);
+}
+
+.popover {
+  --tblr-popover-zindex: 1070;
+  --tblr-popover-max-width: 276px;
+  --tblr-popover-font-size: 0.765625rem;
+  --tblr-popover-bg: var(--tblr-bg-surface);
+  --tblr-popover-border-width: var(--tblr-border-width);
+  --tblr-popover-border-color: var(--tblr-border-color);
+  --tblr-popover-border-radius: var(--tblr-border-radius-lg);
+  --tblr-popover-inner-border-radius: calc(var(--tblr-border-radius-lg) - var(--tblr-border-width));
+  --tblr-popover-box-shadow: rgba(var(--tblr-body-color-rgb), 0.04) 0 2px 4px 0;
+  --tblr-popover-header-padding-x: 1rem;
+  --tblr-popover-header-padding-y: 0.5rem;
+  --tblr-popover-header-font-size: 0.875rem;
+  --tblr-popover-header-color: inherit;
+  --tblr-popover-header-bg: transparent;
+  --tblr-popover-body-padding-x: 1rem;
+  --tblr-popover-body-padding-y: 1rem;
+  --tblr-popover-body-color: inherit;
+  --tblr-popover-arrow-width: 1rem;
+  --tblr-popover-arrow-height: 0.5rem;
+  --tblr-popover-arrow-border: var(--tblr-popover-border-color);
+  z-index: var(--tblr-popover-zindex);
+  display: block;
+  max-width: var(--tblr-popover-max-width);
+  font-family: var(--tblr-font-sans-serif);
+  font-style: normal;
+  font-weight: 400;
+  line-height: 1.4285714286;
+  text-align: right;
+  text-align: start;
+  text-decoration: none;
+  text-shadow: none;
+  text-transform: none;
+  letter-spacing: normal;
+  word-break: normal;
+  white-space: normal;
+  word-spacing: normal;
+  line-break: auto;
+  font-size: var(--tblr-popover-font-size);
+  word-wrap: break-word;
+  background-color: var(--tblr-popover-bg);
+  background-clip: padding-box;
+  border: var(--tblr-popover-border-width) solid var(--tblr-popover-border-color);
+  border-radius: var(--tblr-popover-border-radius);
+  box-shadow: var(--tblr-popover-box-shadow);
+}
+.popover .popover-arrow {
+  display: block;
+  width: var(--tblr-popover-arrow-width);
+  height: var(--tblr-popover-arrow-height);
+}
+.popover .popover-arrow::before, .popover .popover-arrow::after {
+  position: absolute;
+  display: block;
+  content: "";
+  border-color: transparent;
+  border-style: solid;
+  border-width: 0;
+}
+
+.bs-popover-top > .popover-arrow, .bs-popover-auto[data-popper-placement^=top] > .popover-arrow {
+  bottom: calc(-1 * (var(--tblr-popover-arrow-height)) - var(--tblr-popover-border-width));
+}
+.bs-popover-top > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=top] > .popover-arrow::before, .bs-popover-top > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=top] > .popover-arrow::after {
+  border-width: var(--tblr-popover-arrow-height) calc(var(--tblr-popover-arrow-width) * 0.5) 0;
+}
+.bs-popover-top > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=top] > .popover-arrow::before {
+  bottom: 0;
+  border-top-color: var(--tblr-popover-arrow-border);
+}
+.bs-popover-top > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=top] > .popover-arrow::after {
+  bottom: var(--tblr-popover-border-width);
+  border-top-color: var(--tblr-popover-bg);
+}
+.bs-popover-end > .popover-arrow, .bs-popover-auto[data-popper-placement^=right] > .popover-arrow {
+  left: calc(-1 * (var(--tblr-popover-arrow-height)) - var(--tblr-popover-border-width));
+  width: var(--tblr-popover-arrow-height);
+  height: var(--tblr-popover-arrow-width);
+}
+.bs-popover-end > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=right] > .popover-arrow::before, .bs-popover-end > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=right] > .popover-arrow::after {
+  border-width: calc(var(--tblr-popover-arrow-width) * 0.5) var(--tblr-popover-arrow-height) calc(var(--tblr-popover-arrow-width) * 0.5) 0;
+}
+.bs-popover-end > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=right] > .popover-arrow::before {
+  left: 0;
+  border-right-color: var(--tblr-popover-arrow-border);
+}
+.bs-popover-end > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=right] > .popover-arrow::after {
+  left: var(--tblr-popover-border-width);
+  border-right-color: var(--tblr-popover-bg);
+}
+.bs-popover-bottom > .popover-arrow, .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow {
+  top: calc(-1 * (var(--tblr-popover-arrow-height)) - var(--tblr-popover-border-width));
+}
+.bs-popover-bottom > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow::before, .bs-popover-bottom > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow::after {
+  border-width: 0 calc(var(--tblr-popover-arrow-width) * 0.5) var(--tblr-popover-arrow-height);
+}
+.bs-popover-bottom > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow::before {
+  top: 0;
+  border-bottom-color: var(--tblr-popover-arrow-border);
+}
+.bs-popover-bottom > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow::after {
+  top: var(--tblr-popover-border-width);
+  border-bottom-color: var(--tblr-popover-bg);
+}
+.bs-popover-bottom .popover-header::before, .bs-popover-auto[data-popper-placement^=bottom] .popover-header::before {
+  position: absolute;
+  top: 0;
+  right: 50%;
+  display: block;
+  width: var(--tblr-popover-arrow-width);
+  margin-right: calc(-0.5 * var(--tblr-popover-arrow-width));
+  content: "";
+  border-bottom: var(--tblr-popover-border-width) solid var(--tblr-popover-header-bg);
+}
+.bs-popover-start > .popover-arrow, .bs-popover-auto[data-popper-placement^=left] > .popover-arrow {
+  right: calc(-1 * (var(--tblr-popover-arrow-height)) - var(--tblr-popover-border-width));
+  width: var(--tblr-popover-arrow-height);
+  height: var(--tblr-popover-arrow-width);
+}
+.bs-popover-start > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=left] > .popover-arrow::before, .bs-popover-start > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=left] > .popover-arrow::after {
+  border-width: calc(var(--tblr-popover-arrow-width) * 0.5) 0 calc(var(--tblr-popover-arrow-width) * 0.5) var(--tblr-popover-arrow-height);
+}
+.bs-popover-start > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=left] > .popover-arrow::before {
+  right: 0;
+  border-left-color: var(--tblr-popover-arrow-border);
+}
+.bs-popover-start > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=left] > .popover-arrow::after {
+  right: var(--tblr-popover-border-width);
+  border-left-color: var(--tblr-popover-bg);
+}
+.popover-header {
+  padding: var(--tblr-popover-header-padding-y) var(--tblr-popover-header-padding-x);
+  margin-bottom: 0;
+  font-size: var(--tblr-popover-header-font-size);
+  color: var(--tblr-popover-header-color);
+  background-color: var(--tblr-popover-header-bg);
+  border-bottom: var(--tblr-popover-border-width) solid var(--tblr-popover-border-color);
+  border-top-right-radius: var(--tblr-popover-inner-border-radius);
+  border-top-left-radius: var(--tblr-popover-inner-border-radius);
+}
+.popover-header:empty {
+  display: none;
+}
+
+.popover-body {
+  padding: var(--tblr-popover-body-padding-y) var(--tblr-popover-body-padding-x);
+  color: var(--tblr-popover-body-color);
+}
+
+.carousel {
+  position: relative;
+}
+
+.carousel.pointer-event {
+  touch-action: pan-y;
+}
+
+.carousel-inner {
+  position: relative;
+  width: 100%;
+  overflow: hidden;
+}
+.carousel-inner::after {
+  display: block;
+  clear: both;
+  content: "";
+}
+
+.carousel-item {
+  position: relative;
+  display: none;
+  float: right;
+  width: 100%;
+  margin-left: -100%;
+  -webkit-backface-visibility: hidden;
+          backface-visibility: hidden;
+  transition: transform 0.6s ease-in-out;
+}
+@media (prefers-reduced-motion: reduce) {
+  .carousel-item {
+    transition: none;
+  }
+}
+
+.carousel-item.active,
+.carousel-item-next,
+.carousel-item-prev {
+  display: block;
+}
+
+.carousel-item-next:not(.carousel-item-start),
+.active.carousel-item-end {
+  transform: translateX(-100%);
+}
+
+.carousel-item-prev:not(.carousel-item-end),
+.active.carousel-item-start {
+  transform: translateX(100%);
+}
+
+.carousel-fade .carousel-item {
+  opacity: 0;
+  transition-property: opacity;
+  transform: none;
+}
+.carousel-fade .carousel-item.active,
+.carousel-fade .carousel-item-next.carousel-item-start,
+.carousel-fade .carousel-item-prev.carousel-item-end {
+  z-index: 1;
+  opacity: 1;
+}
+.carousel-fade .active.carousel-item-start,
+.carousel-fade .active.carousel-item-end {
+  z-index: 0;
+  opacity: 0;
+  transition: opacity 0s 0.6s;
+}
+@media (prefers-reduced-motion: reduce) {
+  .carousel-fade .active.carousel-item-start,
+  .carousel-fade .active.carousel-item-end {
+    transition: none;
+  }
+}
+
+.carousel-control-prev,
+.carousel-control-next {
+  position: absolute;
+  top: 0;
+  bottom: 0;
+  z-index: 1;
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  width: 15%;
+  padding: 0;
+  color: #ffffff;
+  text-align: center;
+  background: none;
+  border: 0;
+  opacity: 0.5;
+  transition: opacity 0.15s ease;
+}
+@media (prefers-reduced-motion: reduce) {
+  .carousel-control-prev,
+  .carousel-control-next {
+    transition: none;
+  }
+}
+.carousel-control-prev:hover, .carousel-control-prev:focus,
+.carousel-control-next:hover,
+.carousel-control-next:focus {
+  color: #ffffff;
+  text-decoration: none;
+  outline: 0;
+  opacity: 0.9;
+}
+
+.carousel-control-prev {
+  right: 0;
+}
+
+.carousel-control-next {
+  left: 0;
+}
+
+.carousel-control-prev-icon,
+.carousel-control-next-icon {
+  display: inline-block;
+  width: 1.5rem;
+  height: 1.5rem;
+  background-repeat: no-repeat;
+  background-position: 50%;
+  background-size: 100% 100%;
+}
+.carousel-control-next-icon {
+  background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23ffffff' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3e%3cpolyline points='15 18 9 12 15 6'%3e%3c/polyline%3e%3c/svg%3e");
+}
+
+.carousel-control-prev-icon {
+  background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23ffffff' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3e%3cpolyline points='9 18 15 12 9 6'%3e%3c/polyline%3e%3c/svg%3e");
+}
+
+.carousel-indicators {
+  position: absolute;
+  left: 0;
+  bottom: 0;
+  right: 0;
+  z-index: 2;
+  display: flex;
+  justify-content: center;
+  padding: 0;
+  margin-left: 15%;
+  margin-bottom: 1rem;
+  margin-right: 15%;
+}
+.carousel-indicators [data-bs-target] {
+  box-sizing: content-box;
+  flex: 0 1 auto;
+  width: 30px;
+  height: 3px;
+  padding: 0;
+  margin-left: 3px;
+  margin-right: 3px;
+  text-indent: -999px;
+  cursor: pointer;
+  background-color: #ffffff;
+  background-clip: padding-box;
+  border: 0;
+  border-top: 10px solid transparent;
+  border-bottom: 10px solid transparent;
+  opacity: 0.5;
+  transition: opacity 0.6s ease;
+}
+@media (prefers-reduced-motion: reduce) {
+  .carousel-indicators [data-bs-target] {
+    transition: none;
+  }
+}
+.carousel-indicators .active {
+  opacity: 1;
+}
+
+.carousel-caption {
+  position: absolute;
+  left: 15%;
+  bottom: 1.25rem;
+  right: 15%;
+  padding-top: 1.25rem;
+  padding-bottom: 1.25rem;
+  color: #ffffff;
+  text-align: center;
+}
+
+.carousel-dark .carousel-control-next-icon,
+.carousel-dark .carousel-control-prev-icon {
+  filter: invert(1) grayscale(100);
+}
+.carousel-dark .carousel-indicators [data-bs-target] {
+  background-color: #000000;
+}
+.carousel-dark .carousel-caption {
+  color: #000000;
+}
+
+[data-bs-theme=dark] .carousel .carousel-control-next-icon,
+[data-bs-theme=dark] .carousel .carousel-control-prev-icon, [data-bs-theme=dark].carousel .carousel-control-next-icon,
+[data-bs-theme=dark].carousel .carousel-control-prev-icon {
+  filter: invert(1) grayscale(100);
+}
+[data-bs-theme=dark] .carousel .carousel-indicators [data-bs-target], [data-bs-theme=dark].carousel .carousel-indicators [data-bs-target] {
+  background-color: #000000;
+}
+[data-bs-theme=dark] .carousel .carousel-caption, [data-bs-theme=dark].carousel .carousel-caption {
+  color: #000000;
+}
+
+.spinner-grow,
+.spinner-border {
+  display: inline-block;
+  width: var(--tblr-spinner-width);
+  height: var(--tblr-spinner-height);
+  vertical-align: var(--tblr-spinner-vertical-align);
+  border-radius: 50%;
+  animation: var(--tblr-spinner-animation-speed) linear infinite var(--tblr-spinner-animation-name);
+}
+
+@keyframes spinner-border {
+  to {
+    transform: rotate(360deg) ;
+  }
+}
+.spinner-border {
+  --tblr-spinner-width: 1.5rem;
+  --tblr-spinner-height: 1.5rem;
+  --tblr-spinner-vertical-align: -0.125em;
+  --tblr-spinner-border-width: 2px;
+  --tblr-spinner-animation-speed: 0.75s;
+  --tblr-spinner-animation-name: spinner-border;
+  border: var(--tblr-spinner-border-width) solid currentcolor;
+  border-left-color: transparent;
+}
+
+.spinner-border-sm {
+  --tblr-spinner-width: 1rem;
+  --tblr-spinner-height: 1rem;
+  --tblr-spinner-border-width: 1px;
+}
+
+@keyframes spinner-grow {
+  0% {
+    transform: scale(0);
+  }
+  50% {
+    opacity: 1;
+    transform: none;
+  }
+}
+.spinner-grow {
+  --tblr-spinner-width: 1.5rem;
+  --tblr-spinner-height: 1.5rem;
+  --tblr-spinner-vertical-align: -0.125em;
+  --tblr-spinner-animation-speed: 0.75s;
+  --tblr-spinner-animation-name: spinner-grow;
+  background-color: currentcolor;
+  opacity: 0;
+}
+
+.spinner-grow-sm {
+  --tblr-spinner-width: 1rem;
+  --tblr-spinner-height: 1rem;
+}
+
+@media (prefers-reduced-motion: reduce) {
+  .spinner-border,
+  .spinner-grow {
+    --tblr-spinner-animation-speed: 1.5s;
+  }
+}
+.offcanvas, .offcanvas-xxl, .offcanvas-xl, .offcanvas-lg, .offcanvas-md, .offcanvas-sm {
+  --tblr-offcanvas-zindex: 1045;
+  --tblr-offcanvas-width: 400px;
+  --tblr-offcanvas-height: 30vh;
+  --tblr-offcanvas-padding-x: 1.5rem;
+  --tblr-offcanvas-padding-y: 1.5rem;
+  --tblr-offcanvas-color: var(--tblr-body-color);
+  --tblr-offcanvas-bg: var(--tblr-bg-surface);
+  --tblr-offcanvas-border-width: var(--tblr-border-width);
+  --tblr-offcanvas-border-color: var(--tblr-border-color);
+  --tblr-offcanvas-box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075);
+  --tblr-offcanvas-transition: transform 0.3s ease-in-out;
+  --tblr-offcanvas-title-line-height: 1.4285714286;
+}
+
+@media (max-width: 575.98px) {
+  .offcanvas-sm {
+    position: fixed;
+    bottom: 0;
+    z-index: var(--tblr-offcanvas-zindex);
+    display: flex;
+    flex-direction: column;
+    max-width: 100%;
+    color: var(--tblr-offcanvas-color);
+    visibility: hidden;
+    background-color: var(--tblr-offcanvas-bg);
+    background-clip: padding-box;
+    outline: 0;
+    box-shadow: var(--tblr-offcanvas-box-shadow);
+    transition: var(--tblr-offcanvas-transition);
+  }
+}
+@media (max-width: 575.98px) and (prefers-reduced-motion: reduce) {
+  .offcanvas-sm {
+    transition: none;
+  }
+}
+@media (max-width: 575.98px) {
+  .offcanvas-sm.offcanvas-start {
+    top: 0;
+    right: 0;
+    width: var(--tblr-offcanvas-width);
+    border-left: var(--tblr-offcanvas-border-width) solid var(--tblr-offcanvas-border-color);
+    transform: translateX(100%);
+  }
+  .offcanvas-sm.offcanvas-end {
+    top: 0;
+    left: 0;
+    width: var(--tblr-offcanvas-width);
+    border-right: var(--tblr-offcanvas-border-width) solid var(--tblr-offcanvas-border-color);
+    transform: translateX(-100%);
+  }
+  .offcanvas-sm.offcanvas-top {
+    top: 0;
+    left: 0;
+    right: 0;
+    height: var(--tblr-offcanvas-height);
+    max-height: 100%;
+    border-bottom: var(--tblr-offcanvas-border-width) solid var(--tblr-offcanvas-border-color);
+    transform: translateY(-100%);
+  }
+  .offcanvas-sm.offcanvas-bottom {
+    left: 0;
+    right: 0;
+    height: var(--tblr-offcanvas-height);
+    max-height: 100%;
+    border-top: var(--tblr-offcanvas-border-width) solid var(--tblr-offcanvas-border-color);
+    transform: translateY(100%);
+  }
+  .offcanvas-sm.showing, .offcanvas-sm.show:not(.hiding) {
+    transform: none;
+  }
+  .offcanvas-sm.showing, .offcanvas-sm.hiding, .offcanvas-sm.show {
+    visibility: visible;
+  }
+}
+@media (min-width: 576px) {
+  .offcanvas-sm {
+    --tblr-offcanvas-height: auto;
+    --tblr-offcanvas-border-width: 0;
+    background-color: transparent !important;
+  }
+  .offcanvas-sm .offcanvas-header {
+    display: none;
+  }
+  .offcanvas-sm .offcanvas-body {
+    display: flex;
+    flex-grow: 0;
+    padding: 0;
+    overflow-y: visible;
+    background-color: transparent !important;
+  }
+}
+
+@media (max-width: 767.98px) {
+  .offcanvas-md {
+    position: fixed;
+    bottom: 0;
+    z-index: var(--tblr-offcanvas-zindex);
+    display: flex;
+    flex-direction: column;
+    max-width: 100%;
+    color: var(--tblr-offcanvas-color);
+    visibility: hidden;
+    background-color: var(--tblr-offcanvas-bg);
+    background-clip: padding-box;
+    outline: 0;
+    box-shadow: var(--tblr-offcanvas-box-shadow);
+    transition: var(--tblr-offcanvas-transition);
+  }
+}
+@media (max-width: 767.98px) and (prefers-reduced-motion: reduce) {
+  .offcanvas-md {
+    transition: none;
+  }
+}
+@media (max-width: 767.98px) {
+  .offcanvas-md.offcanvas-start {
+    top: 0;
+    right: 0;
+    width: var(--tblr-offcanvas-width);
+    border-left: var(--tblr-offcanvas-border-width) solid var(--tblr-offcanvas-border-color);
+    transform: translateX(100%);
+  }
+  .offcanvas-md.offcanvas-end {
+    top: 0;
+    left: 0;
+    width: var(--tblr-offcanvas-width);
+    border-right: var(--tblr-offcanvas-border-width) solid var(--tblr-offcanvas-border-color);
+    transform: translateX(-100%);
+  }
+  .offcanvas-md.offcanvas-top {
+    top: 0;
+    left: 0;
+    right: 0;
+    height: var(--tblr-offcanvas-height);
+    max-height: 100%;
+    border-bottom: var(--tblr-offcanvas-border-width) solid var(--tblr-offcanvas-border-color);
+    transform: translateY(-100%);
+  }
+  .offcanvas-md.offcanvas-bottom {
+    left: 0;
+    right: 0;
+    height: var(--tblr-offcanvas-height);
+    max-height: 100%;
+    border-top: var(--tblr-offcanvas-border-width) solid var(--tblr-offcanvas-border-color);
+    transform: translateY(100%);
+  }
+  .offcanvas-md.showing, .offcanvas-md.show:not(.hiding) {
+    transform: none;
+  }
+  .offcanvas-md.showing, .offcanvas-md.hiding, .offcanvas-md.show {
+    visibility: visible;
+  }
+}
+@media (min-width: 768px) {
+  .offcanvas-md {
+    --tblr-offcanvas-height: auto;
+    --tblr-offcanvas-border-width: 0;
+    background-color: transparent !important;
+  }
+  .offcanvas-md .offcanvas-header {
+    display: none;
+  }
+  .offcanvas-md .offcanvas-body {
+    display: flex;
+    flex-grow: 0;
+    padding: 0;
+    overflow-y: visible;
+    background-color: transparent !important;
+  }
+}
+
+@media (max-width: 991.98px) {
+  .offcanvas-lg {
+    position: fixed;
+    bottom: 0;
+    z-index: var(--tblr-offcanvas-zindex);
+    display: flex;
+    flex-direction: column;
+    max-width: 100%;
+    color: var(--tblr-offcanvas-color);
+    visibility: hidden;
+    background-color: var(--tblr-offcanvas-bg);
+    background-clip: padding-box;
+    outline: 0;
+    box-shadow: var(--tblr-offcanvas-box-shadow);
+    transition: var(--tblr-offcanvas-transition);
+  }
+}
+@media (max-width: 991.98px) and (prefers-reduced-motion: reduce) {
+  .offcanvas-lg {
+    transition: none;
+  }
+}
+@media (max-width: 991.98px) {
+  .offcanvas-lg.offcanvas-start {
+    top: 0;
+    right: 0;
+    width: var(--tblr-offcanvas-width);
+    border-left: var(--tblr-offcanvas-border-width) solid var(--tblr-offcanvas-border-color);
+    transform: translateX(100%);
+  }
+  .offcanvas-lg.offcanvas-end {
+    top: 0;
+    left: 0;
+    width: var(--tblr-offcanvas-width);
+    border-right: var(--tblr-offcanvas-border-width) solid var(--tblr-offcanvas-border-color);
+    transform: translateX(-100%);
+  }
+  .offcanvas-lg.offcanvas-top {
+    top: 0;
+    left: 0;
+    right: 0;
+    height: var(--tblr-offcanvas-height);
+    max-height: 100%;
+    border-bottom: var(--tblr-offcanvas-border-width) solid var(--tblr-offcanvas-border-color);
+    transform: translateY(-100%);
+  }
+  .offcanvas-lg.offcanvas-bottom {
+    left: 0;
+    right: 0;
+    height: var(--tblr-offcanvas-height);
+    max-height: 100%;
+    border-top: var(--tblr-offcanvas-border-width) solid var(--tblr-offcanvas-border-color);
+    transform: translateY(100%);
+  }
+  .offcanvas-lg.showing, .offcanvas-lg.show:not(.hiding) {
+    transform: none;
+  }
+  .offcanvas-lg.showing, .offcanvas-lg.hiding, .offcanvas-lg.show {
+    visibility: visible;
+  }
+}
+@media (min-width: 992px) {
+  .offcanvas-lg {
+    --tblr-offcanvas-height: auto;
+    --tblr-offcanvas-border-width: 0;
+    background-color: transparent !important;
+  }
+  .offcanvas-lg .offcanvas-header {
+    display: none;
+  }
+  .offcanvas-lg .offcanvas-body {
+    display: flex;
+    flex-grow: 0;
+    padding: 0;
+    overflow-y: visible;
+    background-color: transparent !important;
+  }
+}
+
+@media (max-width: 1199.98px) {
+  .offcanvas-xl {
+    position: fixed;
+    bottom: 0;
+    z-index: var(--tblr-offcanvas-zindex);
+    display: flex;
+    flex-direction: column;
+    max-width: 100%;
+    color: var(--tblr-offcanvas-color);
+    visibility: hidden;
+    background-color: var(--tblr-offcanvas-bg);
+    background-clip: padding-box;
+    outline: 0;
+    box-shadow: var(--tblr-offcanvas-box-shadow);
+    transition: var(--tblr-offcanvas-transition);
+  }
+}
+@media (max-width: 1199.98px) and (prefers-reduced-motion: reduce) {
+  .offcanvas-xl {
+    transition: none;
+  }
+}
+@media (max-width: 1199.98px) {
+  .offcanvas-xl.offcanvas-start {
+    top: 0;
+    right: 0;
+    width: var(--tblr-offcanvas-width);
+    border-left: var(--tblr-offcanvas-border-width) solid var(--tblr-offcanvas-border-color);
+    transform: translateX(100%);
+  }
+  .offcanvas-xl.offcanvas-end {
+    top: 0;
+    left: 0;
+    width: var(--tblr-offcanvas-width);
+    border-right: var(--tblr-offcanvas-border-width) solid var(--tblr-offcanvas-border-color);
+    transform: translateX(-100%);
+  }
+  .offcanvas-xl.offcanvas-top {
+    top: 0;
+    left: 0;
+    right: 0;
+    height: var(--tblr-offcanvas-height);
+    max-height: 100%;
+    border-bottom: var(--tblr-offcanvas-border-width) solid var(--tblr-offcanvas-border-color);
+    transform: translateY(-100%);
+  }
+  .offcanvas-xl.offcanvas-bottom {
+    left: 0;
+    right: 0;
+    height: var(--tblr-offcanvas-height);
+    max-height: 100%;
+    border-top: var(--tblr-offcanvas-border-width) solid var(--tblr-offcanvas-border-color);
+    transform: translateY(100%);
+  }
+  .offcanvas-xl.showing, .offcanvas-xl.show:not(.hiding) {
+    transform: none;
+  }
+  .offcanvas-xl.showing, .offcanvas-xl.hiding, .offcanvas-xl.show {
+    visibility: visible;
+  }
+}
+@media (min-width: 1200px) {
+  .offcanvas-xl {
+    --tblr-offcanvas-height: auto;
+    --tblr-offcanvas-border-width: 0;
+    background-color: transparent !important;
+  }
+  .offcanvas-xl .offcanvas-header {
+    display: none;
+  }
+  .offcanvas-xl .offcanvas-body {
+    display: flex;
+    flex-grow: 0;
+    padding: 0;
+    overflow-y: visible;
+    background-color: transparent !important;
+  }
+}
+
+@media (max-width: 1399.98px) {
+  .offcanvas-xxl {
+    position: fixed;
+    bottom: 0;
+    z-index: var(--tblr-offcanvas-zindex);
+    display: flex;
+    flex-direction: column;
+    max-width: 100%;
+    color: var(--tblr-offcanvas-color);
+    visibility: hidden;
+    background-color: var(--tblr-offcanvas-bg);
+    background-clip: padding-box;
+    outline: 0;
+    box-shadow: var(--tblr-offcanvas-box-shadow);
+    transition: var(--tblr-offcanvas-transition);
+  }
+}
+@media (max-width: 1399.98px) and (prefers-reduced-motion: reduce) {
+  .offcanvas-xxl {
+    transition: none;
+  }
+}
+@media (max-width: 1399.98px) {
+  .offcanvas-xxl.offcanvas-start {
+    top: 0;
+    right: 0;
+    width: var(--tblr-offcanvas-width);
+    border-left: var(--tblr-offcanvas-border-width) solid var(--tblr-offcanvas-border-color);
+    transform: translateX(100%);
+  }
+  .offcanvas-xxl.offcanvas-end {
+    top: 0;
+    left: 0;
+    width: var(--tblr-offcanvas-width);
+    border-right: var(--tblr-offcanvas-border-width) solid var(--tblr-offcanvas-border-color);
+    transform: translateX(-100%);
+  }
+  .offcanvas-xxl.offcanvas-top {
+    top: 0;
+    left: 0;
+    right: 0;
+    height: var(--tblr-offcanvas-height);
+    max-height: 100%;
+    border-bottom: var(--tblr-offcanvas-border-width) solid var(--tblr-offcanvas-border-color);
+    transform: translateY(-100%);
+  }
+  .offcanvas-xxl.offcanvas-bottom {
+    left: 0;
+    right: 0;
+    height: var(--tblr-offcanvas-height);
+    max-height: 100%;
+    border-top: var(--tblr-offcanvas-border-width) solid var(--tblr-offcanvas-border-color);
+    transform: translateY(100%);
+  }
+  .offcanvas-xxl.showing, .offcanvas-xxl.show:not(.hiding) {
+    transform: none;
+  }
+  .offcanvas-xxl.showing, .offcanvas-xxl.hiding, .offcanvas-xxl.show {
+    visibility: visible;
+  }
+}
+@media (min-width: 1400px) {
+  .offcanvas-xxl {
+    --tblr-offcanvas-height: auto;
+    --tblr-offcanvas-border-width: 0;
+    background-color: transparent !important;
+  }
+  .offcanvas-xxl .offcanvas-header {
+    display: none;
+  }
+  .offcanvas-xxl .offcanvas-body {
+    display: flex;
+    flex-grow: 0;
+    padding: 0;
+    overflow-y: visible;
+    background-color: transparent !important;
+  }
+}
+
+.offcanvas {
+  position: fixed;
+  bottom: 0;
+  z-index: var(--tblr-offcanvas-zindex);
+  display: flex;
+  flex-direction: column;
+  max-width: 100%;
+  color: var(--tblr-offcanvas-color);
+  visibility: hidden;
+  background-color: var(--tblr-offcanvas-bg);
+  background-clip: padding-box;
+  outline: 0;
+  box-shadow: var(--tblr-offcanvas-box-shadow);
+  transition: var(--tblr-offcanvas-transition);
+}
+@media (prefers-reduced-motion: reduce) {
+  .offcanvas {
+    transition: none;
+  }
+}
+.offcanvas.offcanvas-start {
+  top: 0;
+  right: 0;
+  width: var(--tblr-offcanvas-width);
+  border-left: var(--tblr-offcanvas-border-width) solid var(--tblr-offcanvas-border-color);
+  transform: translateX(100%);
+}
+.offcanvas.offcanvas-end {
+  top: 0;
+  left: 0;
+  width: var(--tblr-offcanvas-width);
+  border-right: var(--tblr-offcanvas-border-width) solid var(--tblr-offcanvas-border-color);
+  transform: translateX(-100%);
+}
+.offcanvas.offcanvas-top {
+  top: 0;
+  left: 0;
+  right: 0;
+  height: var(--tblr-offcanvas-height);
+  max-height: 100%;
+  border-bottom: var(--tblr-offcanvas-border-width) solid var(--tblr-offcanvas-border-color);
+  transform: translateY(-100%);
+}
+.offcanvas.offcanvas-bottom {
+  left: 0;
+  right: 0;
+  height: var(--tblr-offcanvas-height);
+  max-height: 100%;
+  border-top: var(--tblr-offcanvas-border-width) solid var(--tblr-offcanvas-border-color);
+  transform: translateY(100%);
+}
+.offcanvas.showing, .offcanvas.show:not(.hiding) {
+  transform: none;
+}
+.offcanvas.showing, .offcanvas.hiding, .offcanvas.show {
+  visibility: visible;
+}
+
+.offcanvas-backdrop {
+  position: fixed;
+  top: 0;
+  right: 0;
+  z-index: 1040;
+  width: 100vw;
+  height: 100vh;
+  background-color: #182433;
+}
+.offcanvas-backdrop.fade {
+  opacity: 0;
+}
+.offcanvas-backdrop.show {
+  opacity: 0.24;
+}
+
+.offcanvas-header {
+  display: flex;
+  align-items: center;
+  justify-content: space-between;
+  padding: var(--tblr-offcanvas-padding-y) var(--tblr-offcanvas-padding-x);
+}
+.offcanvas-header .btn-close {
+  padding: calc(var(--tblr-offcanvas-padding-y) * 0.5) calc(var(--tblr-offcanvas-padding-x) * 0.5);
+  margin-top: calc(-0.5 * var(--tblr-offcanvas-padding-y));
+  margin-left: calc(-0.5 * var(--tblr-offcanvas-padding-x));
+  margin-bottom: calc(-0.5 * var(--tblr-offcanvas-padding-y));
+}
+
+.offcanvas-title {
+  margin-bottom: 0;
+  line-height: var(--tblr-offcanvas-title-line-height);
+}
+
+.offcanvas-body {
+  flex-grow: 1;
+  padding: var(--tblr-offcanvas-padding-y) var(--tblr-offcanvas-padding-x);
+  overflow-y: auto;
+}
+
+.placeholder {
+  display: inline-block;
+  min-height: 1em;
+  vertical-align: middle;
+  cursor: wait;
+  background-color: currentcolor;
+  opacity: 0.2;
+}
+.placeholder.btn::before {
+  display: inline-block;
+  content: "";
+}
+
+.placeholder-xs {
+  min-height: 0.6em;
+}
+
+.placeholder-sm {
+  min-height: 0.8em;
+}
+
+.placeholder-lg {
+  min-height: 1.2em;
+}
+
+.placeholder-glow .placeholder {
+  animation: placeholder-glow 2s ease-in-out infinite;
+}
+
+@keyframes placeholder-glow {
+  50% {
+    opacity: 0.1;
+  }
+}
+.placeholder-wave {
+  -webkit-mask-image: linear-gradient(130deg, #000000 55%, rgba(0, 0, 0, 0.9) 75%, #000000 95%);
+          mask-image: linear-gradient(130deg, #000000 55%, rgba(0, 0, 0, 0.9) 75%, #000000 95%);
+  -webkit-mask-size: 200% 100%;
+          mask-size: 200% 100%;
+  animation: placeholder-wave 2s linear infinite;
+}
+
+@keyframes placeholder-wave {
+  100% {
+    -webkit-mask-position: -200% 0%;
+            mask-position: -200% 0%;
+  }
+}
+.clearfix::after {
+  display: block;
+  clear: both;
+  content: "";
+}
+
+.text-bg-primary {
+  color: #fcfdfe !important;
+  background-color: RGBA(var(--tblr-primary-rgb), var(--tblr-bg-opacity, 1)) !important;
+}
+
+.text-bg-secondary {
+  color: #fcfdfe !important;
+  background-color: RGBA(var(--tblr-secondary-rgb), var(--tblr-bg-opacity, 1)) !important;
+}
+
+.text-bg-success {
+  color: #fcfdfe !important;
+  background-color: RGBA(var(--tblr-success-rgb), var(--tblr-bg-opacity, 1)) !important;
+}
+
+.text-bg-info {
+  color: #fcfdfe !important;
+  background-color: RGBA(var(--tblr-info-rgb), var(--tblr-bg-opacity, 1)) !important;
+}
+
+.text-bg-warning {
+  color: #fcfdfe !important;
+  background-color: RGBA(var(--tblr-warning-rgb), var(--tblr-bg-opacity, 1)) !important;
+}
+
+.text-bg-danger {
+  color: #fcfdfe !important;
+  background-color: RGBA(var(--tblr-danger-rgb), var(--tblr-bg-opacity, 1)) !important;
+}
+
+.text-bg-light {
+  color: #182433 !important;
+  background-color: RGBA(var(--tblr-light-rgb), var(--tblr-bg-opacity, 1)) !important;
+}
+
+.text-bg-dark {
+  color: #fcfdfe !important;
+  background-color: RGBA(var(--tblr-dark-rgb), var(--tblr-bg-opacity, 1)) !important;
+}
+
+.text-bg-muted {
+  color: #fcfdfe !important;
+  background-color: RGBA(var(--tblr-muted-rgb), var(--tblr-bg-opacity, 1)) !important;
+}
+
+.text-bg-blue {
+  color: #fcfdfe !important;
+  background-color: RGBA(var(--tblr-blue-rgb), var(--tblr-bg-opacity, 1)) !important;
+}
+
+.text-bg-azure {
+  color: #fcfdfe !important;
+  background-color: RGBA(var(--tblr-azure-rgb), var(--tblr-bg-opacity, 1)) !important;
+}
+
+.text-bg-indigo {
+  color: #fcfdfe !important;
+  background-color: RGBA(var(--tblr-indigo-rgb), var(--tblr-bg-opacity, 1)) !important;
+}
+
+.text-bg-purple {
+  color: #fcfdfe !important;
+  background-color: RGBA(var(--tblr-purple-rgb), var(--tblr-bg-opacity, 1)) !important;
+}
+
+.text-bg-pink {
+  color: #fcfdfe !important;
+  background-color: RGBA(var(--tblr-pink-rgb), var(--tblr-bg-opacity, 1)) !important;
+}
+
+.text-bg-red {
+  color: #fcfdfe !important;
+  background-color: RGBA(var(--tblr-red-rgb), var(--tblr-bg-opacity, 1)) !important;
+}
+
+.text-bg-orange {
+  color: #fcfdfe !important;
+  background-color: RGBA(var(--tblr-orange-rgb), var(--tblr-bg-opacity, 1)) !important;
+}
+
+.text-bg-yellow {
+  color: #fcfdfe !important;
+  background-color: RGBA(var(--tblr-yellow-rgb), var(--tblr-bg-opacity, 1)) !important;
+}
+
+.text-bg-lime {
+  color: #fcfdfe !important;
+  background-color: RGBA(var(--tblr-lime-rgb), var(--tblr-bg-opacity, 1)) !important;
+}
+
+.text-bg-green {
+  color: #fcfdfe !important;
+  background-color: RGBA(var(--tblr-green-rgb), var(--tblr-bg-opacity, 1)) !important;
+}
+
+.text-bg-teal {
+  color: #fcfdfe !important;
+  background-color: RGBA(var(--tblr-teal-rgb), var(--tblr-bg-opacity, 1)) !important;
+}
+
+.text-bg-cyan {
+  color: #fcfdfe !important;
+  background-color: RGBA(var(--tblr-cyan-rgb), var(--tblr-bg-opacity, 1)) !important;
+}
+
+.text-bg-facebook {
+  color: #fcfdfe !important;
+  background-color: RGBA(var(--tblr-facebook-rgb), var(--tblr-bg-opacity, 1)) !important;
+}
+
+.text-bg-twitter {
+  color: #fcfdfe !important;
+  background-color: RGBA(var(--tblr-twitter-rgb), var(--tblr-bg-opacity, 1)) !important;
+}
+
+.text-bg-linkedin {
+  color: #fcfdfe !important;
+  background-color: RGBA(var(--tblr-linkedin-rgb), var(--tblr-bg-opacity, 1)) !important;
+}
+
+.text-bg-google {
+  color: #fcfdfe !important;
+  background-color: RGBA(var(--tblr-google-rgb), var(--tblr-bg-opacity, 1)) !important;
+}
+
+.text-bg-youtube {
+  color: #fcfdfe !important;
+  background-color: RGBA(var(--tblr-youtube-rgb), var(--tblr-bg-opacity, 1)) !important;
+}
+
+.text-bg-vimeo {
+  color: #fcfdfe !important;
+  background-color: RGBA(var(--tblr-vimeo-rgb), var(--tblr-bg-opacity, 1)) !important;
+}
+
+.text-bg-dribbble {
+  color: #fcfdfe !important;
+  background-color: RGBA(var(--tblr-dribbble-rgb), var(--tblr-bg-opacity, 1)) !important;
+}
+
+.text-bg-github {
+  color: #fcfdfe !important;
+  background-color: RGBA(var(--tblr-github-rgb), var(--tblr-bg-opacity, 1)) !important;
+}
+
+.text-bg-instagram {
+  color: #fcfdfe !important;
+  background-color: RGBA(var(--tblr-instagram-rgb), var(--tblr-bg-opacity, 1)) !important;
+}
+
+.text-bg-pinterest {
+  color: #fcfdfe !important;
+  background-color: RGBA(var(--tblr-pinterest-rgb), var(--tblr-bg-opacity, 1)) !important;
+}
+
+.text-bg-vk {
+  color: #fcfdfe !important;
+  background-color: RGBA(var(--tblr-vk-rgb), var(--tblr-bg-opacity, 1)) !important;
+}
+
+.text-bg-rss {
+  color: #fcfdfe !important;
+  background-color: RGBA(var(--tblr-rss-rgb), var(--tblr-bg-opacity, 1)) !important;
+}
+
+.text-bg-flickr {
+  color: #fcfdfe !important;
+  background-color: RGBA(var(--tblr-flickr-rgb), var(--tblr-bg-opacity, 1)) !important;
+}
+
+.text-bg-bitbucket {
+  color: #fcfdfe !important;
+  background-color: RGBA(var(--tblr-bitbucket-rgb), var(--tblr-bg-opacity, 1)) !important;
+}
+
+.text-bg-tabler {
+  color: #fcfdfe !important;
+  background-color: RGBA(var(--tblr-tabler-rgb), var(--tblr-bg-opacity, 1)) !important;
+}
+
+.link-primary {
+  color: RGBA(var(--tblr-primary-rgb), var(--tblr-link-opacity, 1)) !important;
+  -webkit-text-decoration-color: RGBA(var(--tblr-primary-rgb), var(--tblr-link-underline-opacity, 1)) !important;
+          text-decoration-color: RGBA(var(--tblr-primary-rgb), var(--tblr-link-underline-opacity, 1)) !important;
+}
+.link-primary:hover, .link-primary:focus {
+  color: RGBA(0, 67, 133, var(--tblr-link-opacity, 1)) !important;
+  -webkit-text-decoration-color: RGBA(0, 67, 133, var(--tblr-link-underline-opacity, 1)) !important;
+          text-decoration-color: RGBA(0, 67, 133, var(--tblr-link-underline-opacity, 1)) !important;
+}
+
+.link-secondary {
+  color: RGBA(var(--tblr-secondary-rgb), var(--tblr-link-opacity, 1)) !important;
+  -webkit-text-decoration-color: RGBA(var(--tblr-secondary-rgb), var(--tblr-link-underline-opacity, 1)) !important;
+          text-decoration-color: RGBA(var(--tblr-secondary-rgb), var(--tblr-link-underline-opacity, 1)) !important;
+}
+.link-secondary:hover, .link-secondary:focus {
+  color: RGBA(82, 92, 104, var(--tblr-link-opacity, 1)) !important;
+  -webkit-text-decoration-color: RGBA(82, 92, 104, var(--tblr-link-underline-opacity, 1)) !important;
+          text-decoration-color: RGBA(82, 92, 104, var(--tblr-link-underline-opacity, 1)) !important;
+}
+
+.link-success {
+  color: RGBA(var(--tblr-success-rgb), var(--tblr-link-opacity, 1)) !important;
+  -webkit-text-decoration-color: RGBA(var(--tblr-success-rgb), var(--tblr-link-underline-opacity, 1)) !important;
+          text-decoration-color: RGBA(var(--tblr-success-rgb), var(--tblr-link-underline-opacity, 1)) !important;
+}
+.link-success:hover, .link-success:focus {
+  color: RGBA(38, 143, 54, var(--tblr-link-opacity, 1)) !important;
+  -webkit-text-decoration-color: RGBA(38, 143, 54, var(--tblr-link-underline-opacity, 1)) !important;
+          text-decoration-color: RGBA(38, 143, 54, var(--tblr-link-underline-opacity, 1)) !important;
+}
+
+.link-info {
+  color: RGBA(var(--tblr-info-rgb), var(--tblr-link-opacity, 1)) !important;
+  -webkit-text-decoration-color: RGBA(var(--tblr-info-rgb), var(--tblr-link-underline-opacity, 1)) !important;
+          text-decoration-color: RGBA(var(--tblr-info-rgb), var(--tblr-link-underline-opacity, 1)) !important;
+}
+.link-info:hover, .link-info:focus {
+  color: RGBA(53, 122, 180, var(--tblr-link-opacity, 1)) !important;
+  -webkit-text-decoration-color: RGBA(53, 122, 180, var(--tblr-link-underline-opacity, 1)) !important;
+          text-decoration-color: RGBA(53, 122, 180, var(--tblr-link-underline-opacity, 1)) !important;
+}
+
+.link-warning {
+  color: RGBA(var(--tblr-warning-rgb), var(--tblr-link-opacity, 1)) !important;
+  -webkit-text-decoration-color: RGBA(var(--tblr-warning-rgb), var(--tblr-link-underline-opacity, 1)) !important;
+          text-decoration-color: RGBA(var(--tblr-warning-rgb), var(--tblr-link-underline-opacity, 1)) !important;
+}
+.link-warning:hover, .link-warning:focus {
+  color: RGBA(198, 82, 6, var(--tblr-link-opacity, 1)) !important;
+  -webkit-text-decoration-color: RGBA(198, 82, 6, var(--tblr-link-underline-opacity, 1)) !important;
+          text-decoration-color: RGBA(198, 82, 6, var(--tblr-link-underline-opacity, 1)) !important;
+}
+
+.link-danger {
+  color: RGBA(var(--tblr-danger-rgb), var(--tblr-link-opacity, 1)) !important;
+  -webkit-text-decoration-color: RGBA(var(--tblr-danger-rgb), var(--tblr-link-underline-opacity, 1)) !important;
+          text-decoration-color: RGBA(var(--tblr-danger-rgb), var(--tblr-link-underline-opacity, 1)) !important;
+}
+.link-danger:hover, .link-danger:focus {
+  color: RGBA(171, 46, 46, var(--tblr-link-opacity, 1)) !important;
+  -webkit-text-decoration-color: RGBA(171, 46, 46, var(--tblr-link-underline-opacity, 1)) !important;
+          text-decoration-color: RGBA(171, 46, 46, var(--tblr-link-underline-opacity, 1)) !important;
+}
+
+.link-light {
+  color: RGBA(var(--tblr-light-rgb), var(--tblr-link-opacity, 1)) !important;
+  -webkit-text-decoration-color: RGBA(var(--tblr-light-rgb), var(--tblr-link-underline-opacity, 1)) !important;
+          text-decoration-color: RGBA(var(--tblr-light-rgb), var(--tblr-link-underline-opacity, 1)) !important;
+}
+.link-light:hover, .link-light:focus {
+  color: RGBA(253, 253, 254, var(--tblr-link-opacity, 1)) !important;
+  -webkit-text-decoration-color: RGBA(253, 253, 254, var(--tblr-link-underline-opacity, 1)) !important;
+          text-decoration-color: RGBA(253, 253, 254, var(--tblr-link-underline-opacity, 1)) !important;
+}
+
+.link-dark {
+  color: RGBA(var(--tblr-dark-rgb), var(--tblr-link-opacity, 1)) !important;
+  -webkit-text-decoration-color: RGBA(var(--tblr-dark-rgb), var(--tblr-link-underline-opacity, 1)) !important;
+          text-decoration-color: RGBA(var(--tblr-dark-rgb), var(--tblr-link-underline-opacity, 1)) !important;
+}
+.link-dark:hover, .link-dark:focus {
+  color: RGBA(19, 29, 41, var(--tblr-link-opacity, 1)) !important;
+  -webkit-text-decoration-color: RGBA(19, 29, 41, var(--tblr-link-underline-opacity, 1)) !important;
+          text-decoration-color: RGBA(19, 29, 41, var(--tblr-link-underline-opacity, 1)) !important;
+}
+
+.link-muted {
+  color: RGBA(var(--tblr-muted-rgb), var(--tblr-link-opacity, 1)) !important;
+  -webkit-text-decoration-color: RGBA(var(--tblr-muted-rgb), var(--tblr-link-underline-opacity, 1)) !important;
+          text-decoration-color: RGBA(var(--tblr-muted-rgb), var(--tblr-link-underline-opacity, 1)) !important;
+}
+.link-muted:hover, .link-muted:focus {
+  color: RGBA(82, 92, 104, var(--tblr-link-opacity, 1)) !important;
+  -webkit-text-decoration-color: RGBA(82, 92, 104, var(--tblr-link-underline-opacity, 1)) !important;
+          text-decoration-color: RGBA(82, 92, 104, var(--tblr-link-underline-opacity, 1)) !important;
+}
+
+.link-blue {
+  color: RGBA(var(--tblr-blue-rgb), var(--tblr-link-opacity, 1)) !important;
+  -webkit-text-decoration-color: RGBA(var(--tblr-blue-rgb), var(--tblr-link-underline-opacity, 1)) !important;
+          text-decoration-color: RGBA(var(--tblr-blue-rgb), var(--tblr-link-underline-opacity, 1)) !important;
+}
+.link-blue:hover, .link-blue:focus {
+  color: RGBA(0, 67, 133, var(--tblr-link-opacity, 1)) !important;
+  -webkit-text-decoration-color: RGBA(0, 67, 133, var(--tblr-link-underline-opacity, 1)) !important;
+          text-decoration-color: RGBA(0, 67, 133, var(--tblr-link-underline-opacity, 1)) !important;
+}
+
+.link-azure {
+  color: RGBA(var(--tblr-azure-rgb), var(--tblr-link-opacity, 1)) !important;
+  -webkit-text-decoration-color: RGBA(var(--tblr-azure-rgb), var(--tblr-link-underline-opacity, 1)) !important;
+          text-decoration-color: RGBA(var(--tblr-azure-rgb), var(--tblr-link-underline-opacity, 1)) !important;
+}
+.link-azure:hover, .link-azure:focus {
+  color: RGBA(53, 122, 180, var(--tblr-link-opacity, 1)) !important;
+  -webkit-text-decoration-color: RGBA(53, 122, 180, var(--tblr-link-underline-opacity, 1)) !important;
+          text-decoration-color: RGBA(53, 122, 180, var(--tblr-link-underline-opacity, 1)) !important;
+}
+
+.link-indigo {
+  color: RGBA(var(--tblr-indigo-rgb), var(--tblr-link-opacity, 1)) !important;
+  -webkit-text-decoration-color: RGBA(var(--tblr-indigo-rgb), var(--tblr-link-underline-opacity, 1)) !important;
+          text-decoration-color: RGBA(var(--tblr-indigo-rgb), var(--tblr-link-underline-opacity, 1)) !important;
+}
+.link-indigo:hover, .link-indigo:focus {
+  color: RGBA(53, 79, 188, var(--tblr-link-opacity, 1)) !important;
+  -webkit-text-decoration-color: RGBA(53, 79, 188, var(--tblr-link-underline-opacity, 1)) !important;
+          text-decoration-color: RGBA(53, 79, 188, var(--tblr-link-underline-opacity, 1)) !important;
+}
+
+.link-purple {
+  color: RGBA(var(--tblr-purple-rgb), var(--tblr-link-opacity, 1)) !important;
+  -webkit-text-decoration-color: RGBA(var(--tblr-purple-rgb), var(--tblr-link-underline-opacity, 1)) !important;
+          text-decoration-color: RGBA(var(--tblr-purple-rgb), var(--tblr-link-underline-opacity, 1)) !important;
+}
+.link-purple:hover, .link-purple:focus {
+  color: RGBA(139, 50, 161, var(--tblr-link-opacity, 1)) !important;
+  -webkit-text-decoration-color: RGBA(139, 50, 161, var(--tblr-link-underline-opacity, 1)) !important;
+          text-decoration-color: RGBA(139, 50, 161, var(--tblr-link-underline-opacity, 1)) !important;
+}
+
+.link-pink {
+  color: RGBA(var(--tblr-pink-rgb), var(--tblr-link-opacity, 1)) !important;
+  -webkit-text-decoration-color: RGBA(var(--tblr-pink-rgb), var(--tblr-link-underline-opacity, 1)) !important;
+          text-decoration-color: RGBA(var(--tblr-pink-rgb), var(--tblr-link-underline-opacity, 1)) !important;
+}
+.link-pink:hover, .link-pink:focus {
+  color: RGBA(171, 41, 86, var(--tblr-link-opacity, 1)) !important;
+  -webkit-text-decoration-color: RGBA(171, 41, 86, var(--tblr-link-underline-opacity, 1)) !important;
+          text-decoration-color: RGBA(171, 41, 86, var(--tblr-link-underline-opacity, 1)) !important;
+}
+
+.link-red {
+  color: RGBA(var(--tblr-red-rgb), var(--tblr-link-opacity, 1)) !important;
+  -webkit-text-decoration-color: RGBA(var(--tblr-red-rgb), var(--tblr-link-underline-opacity, 1)) !important;
+          text-decoration-color: RGBA(var(--tblr-red-rgb), var(--tblr-link-underline-opacity, 1)) !important;
+}
+.link-red:hover, .link-red:focus {
+  color: RGBA(171, 46, 46, var(--tblr-link-opacity, 1)) !important;
+  -webkit-text-decoration-color: RGBA(171, 46, 46, var(--tblr-link-underline-opacity, 1)) !important;
+          text-decoration-color: RGBA(171, 46, 46, var(--tblr-link-underline-opacity, 1)) !important;
+}
+
+.link-orange {
+  color: RGBA(var(--tblr-orange-rgb), var(--tblr-link-opacity, 1)) !important;
+  -webkit-text-decoration-color: RGBA(var(--tblr-orange-rgb), var(--tblr-link-underline-opacity, 1)) !important;
+          text-decoration-color: RGBA(var(--tblr-orange-rgb), var(--tblr-link-underline-opacity, 1)) !important;
+}
+.link-orange:hover, .link-orange:focus {
+  color: RGBA(198, 82, 6, var(--tblr-link-opacity, 1)) !important;
+  -webkit-text-decoration-color: RGBA(198, 82, 6, var(--tblr-link-underline-opacity, 1)) !important;
+          text-decoration-color: RGBA(198, 82, 6, var(--tblr-link-underline-opacity, 1)) !important;
+}
+
+.link-yellow {
+  color: RGBA(var(--tblr-yellow-rgb), var(--tblr-link-opacity, 1)) !important;
+  -webkit-text-decoration-color: RGBA(var(--tblr-yellow-rgb), var(--tblr-link-underline-opacity, 1)) !important;
+          text-decoration-color: RGBA(var(--tblr-yellow-rgb), var(--tblr-link-underline-opacity, 1)) !important;
+}
+.link-yellow:hover, .link-yellow:focus {
+  color: RGBA(196, 127, 0, var(--tblr-link-opacity, 1)) !important;
+  -webkit-text-decoration-color: RGBA(196, 127, 0, var(--tblr-link-underline-opacity, 1)) !important;
+          text-decoration-color: RGBA(196, 127, 0, var(--tblr-link-underline-opacity, 1)) !important;
+}
+
+.link-lime {
+  color: RGBA(var(--tblr-lime-rgb), var(--tblr-link-opacity, 1)) !important;
+  -webkit-text-decoration-color: RGBA(var(--tblr-lime-rgb), var(--tblr-link-underline-opacity, 1)) !important;
+          text-decoration-color: RGBA(var(--tblr-lime-rgb), var(--tblr-link-underline-opacity, 1)) !important;
+}
+.link-lime:hover, .link-lime:focus {
+  color: RGBA(93, 147, 18, var(--tblr-link-opacity, 1)) !important;
+  -webkit-text-decoration-color: RGBA(93, 147, 18, var(--tblr-link-underline-opacity, 1)) !important;
+          text-decoration-color: RGBA(93, 147, 18, var(--tblr-link-underline-opacity, 1)) !important;
+}
+
+.link-green {
+  color: RGBA(var(--tblr-green-rgb), var(--tblr-link-opacity, 1)) !important;
+  -webkit-text-decoration-color: RGBA(var(--tblr-green-rgb), var(--tblr-link-underline-opacity, 1)) !important;
+          text-decoration-color: RGBA(var(--tblr-green-rgb), var(--tblr-link-underline-opacity, 1)) !important;
+}
+.link-green:hover, .link-green:focus {
+  color: RGBA(38, 143, 54, var(--tblr-link-opacity, 1)) !important;
+  -webkit-text-decoration-color: RGBA(38, 143, 54, var(--tblr-link-underline-opacity, 1)) !important;
+          text-decoration-color: RGBA(38, 143, 54, var(--tblr-link-underline-opacity, 1)) !important;
+}
+
+.link-teal {
+  color: RGBA(var(--tblr-teal-rgb), var(--tblr-link-opacity, 1)) !important;
+  -webkit-text-decoration-color: RGBA(var(--tblr-teal-rgb), var(--tblr-link-underline-opacity, 1)) !important;
+          text-decoration-color: RGBA(var(--tblr-teal-rgb), var(--tblr-link-underline-opacity, 1)) !important;
+}
+.link-teal:hover, .link-teal:focus {
+  color: RGBA(10, 133, 96, var(--tblr-link-opacity, 1)) !important;
+  -webkit-text-decoration-color: RGBA(10, 133, 96, var(--tblr-link-underline-opacity, 1)) !important;
+          text-decoration-color: RGBA(10, 133, 96, var(--tblr-link-underline-opacity, 1)) !important;
+}
+
+.link-cyan {
+  color: RGBA(var(--tblr-cyan-rgb), var(--tblr-link-opacity, 1)) !important;
+  -webkit-text-decoration-color: RGBA(var(--tblr-cyan-rgb), var(--tblr-link-underline-opacity, 1)) !important;
+          text-decoration-color: RGBA(var(--tblr-cyan-rgb), var(--tblr-link-underline-opacity, 1)) !important;
+}
+.link-cyan:hover, .link-cyan:focus {
+  color: RGBA(18, 130, 147, var(--tblr-link-opacity, 1)) !important;
+  -webkit-text-decoration-color: RGBA(18, 130, 147, var(--tblr-link-underline-opacity, 1)) !important;
+          text-decoration-color: RGBA(18, 130, 147, var(--tblr-link-underline-opacity, 1)) !important;
+}
+
+.link-facebook {
+  color: RGBA(var(--tblr-facebook-rgb), var(--tblr-link-opacity, 1)) !important;
+  -webkit-text-decoration-color: RGBA(var(--tblr-facebook-rgb), var(--tblr-link-underline-opacity, 1)) !important;
+          text-decoration-color: RGBA(var(--tblr-facebook-rgb), var(--tblr-link-underline-opacity, 1)) !important;
+}
+.link-facebook:hover, .link-facebook:focus {
+  color: RGBA(19, 95, 194, var(--tblr-link-opacity, 1)) !important;
+  -webkit-text-decoration-color: RGBA(19, 95, 194, var(--tblr-link-underline-opacity, 1)) !important;
+          text-decoration-color: RGBA(19, 95, 194, var(--tblr-link-underline-opacity, 1)) !important;
+}
+
+.link-twitter {
+  color: RGBA(var(--tblr-twitter-rgb), var(--tblr-link-opacity, 1)) !important;
+  -webkit-text-decoration-color: RGBA(var(--tblr-twitter-rgb), var(--tblr-link-underline-opacity, 1)) !important;
+          text-decoration-color: RGBA(var(--tblr-twitter-rgb), var(--tblr-link-underline-opacity, 1)) !important;
+}
+.link-twitter:hover, .link-twitter:focus {
+  color: RGBA(23, 129, 194, var(--tblr-link-opacity, 1)) !important;
+  -webkit-text-decoration-color: RGBA(23, 129, 194, var(--tblr-link-underline-opacity, 1)) !important;
+          text-decoration-color: RGBA(23, 129, 194, var(--tblr-link-underline-opacity, 1)) !important;
+}
+
+.link-linkedin {
+  color: RGBA(var(--tblr-linkedin-rgb), var(--tblr-link-opacity, 1)) !important;
+  -webkit-text-decoration-color: RGBA(var(--tblr-linkedin-rgb), var(--tblr-link-underline-opacity, 1)) !important;
+          text-decoration-color: RGBA(var(--tblr-linkedin-rgb), var(--tblr-link-underline-opacity, 1)) !important;
+}
+.link-linkedin:hover, .link-linkedin:focus {
+  color: RGBA(8, 82, 155, var(--tblr-link-opacity, 1)) !important;
+  -webkit-text-decoration-color: RGBA(8, 82, 155, var(--tblr-link-underline-opacity, 1)) !important;
+          text-decoration-color: RGBA(8, 82, 155, var(--tblr-link-underline-opacity, 1)) !important;
+}
+
+.link-google {
+  color: RGBA(var(--tblr-google-rgb), var(--tblr-link-opacity, 1)) !important;
+  -webkit-text-decoration-color: RGBA(var(--tblr-google-rgb), var(--tblr-link-underline-opacity, 1)) !important;
+          text-decoration-color: RGBA(var(--tblr-google-rgb), var(--tblr-link-underline-opacity, 1)) !important;
+}
+.link-google:hover, .link-google:focus {
+  color: RGBA(176, 62, 52, var(--tblr-link-opacity, 1)) !important;
+  -webkit-text-decoration-color: RGBA(176, 62, 52, var(--tblr-link-underline-opacity, 1)) !important;
+          text-decoration-color: RGBA(176, 62, 52, var(--tblr-link-underline-opacity, 1)) !important;
+}
+
+.link-youtube {
+  color: RGBA(var(--tblr-youtube-rgb), var(--tblr-link-opacity, 1)) !important;
+  -webkit-text-decoration-color: RGBA(var(--tblr-youtube-rgb), var(--tblr-link-underline-opacity, 1)) !important;
+          text-decoration-color: RGBA(var(--tblr-youtube-rgb), var(--tblr-link-underline-opacity, 1)) !important;
+}
+.link-youtube:hover, .link-youtube:focus {
+  color: RGBA(204, 0, 0, var(--tblr-link-opacity, 1)) !important;
+  -webkit-text-decoration-color: RGBA(204, 0, 0, var(--tblr-link-underline-opacity, 1)) !important;
+          text-decoration-color: RGBA(204, 0, 0, var(--tblr-link-underline-opacity, 1)) !important;
+}
+
+.link-vimeo {
+  color: RGBA(var(--tblr-vimeo-rgb), var(--tblr-link-opacity, 1)) !important;
+  -webkit-text-decoration-color: RGBA(var(--tblr-vimeo-rgb), var(--tblr-link-underline-opacity, 1)) !important;
+          text-decoration-color: RGBA(var(--tblr-vimeo-rgb), var(--tblr-link-underline-opacity, 1)) !important;
+}
+.link-vimeo:hover, .link-vimeo:focus {
+  color: RGBA(21, 146, 187, var(--tblr-link-opacity, 1)) !important;
+  -webkit-text-decoration-color: RGBA(21, 146, 187, var(--tblr-link-underline-opacity, 1)) !important;
+          text-decoration-color: RGBA(21, 146, 187, var(--tblr-link-underline-opacity, 1)) !important;
+}
+
+.link-dribbble {
+  color: RGBA(var(--tblr-dribbble-rgb), var(--tblr-link-opacity, 1)) !important;
+  -webkit-text-decoration-color: RGBA(var(--tblr-dribbble-rgb), var(--tblr-link-underline-opacity, 1)) !important;
+          text-decoration-color: RGBA(var(--tblr-dribbble-rgb), var(--tblr-link-underline-opacity, 1)) !important;
+}
+.link-dribbble:hover, .link-dribbble:focus {
+  color: RGBA(187, 61, 110, var(--tblr-link-opacity, 1)) !important;
+  -webkit-text-decoration-color: RGBA(187, 61, 110, var(--tblr-link-underline-opacity, 1)) !important;
+          text-decoration-color: RGBA(187, 61, 110, var(--tblr-link-underline-opacity, 1)) !important;
+}
+
+.link-github {
+  color: RGBA(var(--tblr-github-rgb), var(--tblr-link-opacity, 1)) !important;
+  -webkit-text-decoration-color: RGBA(var(--tblr-github-rgb), var(--tblr-link-underline-opacity, 1)) !important;
+          text-decoration-color: RGBA(var(--tblr-github-rgb), var(--tblr-link-underline-opacity, 1)) !important;
+}
+.link-github:hover, .link-github:focus {
+  color: RGBA(19, 18, 18, var(--tblr-link-opacity, 1)) !important;
+  -webkit-text-decoration-color: RGBA(19, 18, 18, var(--tblr-link-underline-opacity, 1)) !important;
+          text-decoration-color: RGBA(19, 18, 18, var(--tblr-link-underline-opacity, 1)) !important;
+}
+
+.link-instagram {
+  color: RGBA(var(--tblr-instagram-rgb), var(--tblr-link-opacity, 1)) !important;
+  -webkit-text-decoration-color: RGBA(var(--tblr-instagram-rgb), var(--tblr-link-underline-opacity, 1)) !important;
+          text-decoration-color: RGBA(var(--tblr-instagram-rgb), var(--tblr-link-underline-opacity, 1)) !important;
+}
+.link-instagram:hover, .link-instagram:focus {
+  color: RGBA(182, 51, 76, var(--tblr-link-opacity, 1)) !important;
+  -webkit-text-decoration-color: RGBA(182, 51, 76, var(--tblr-link-underline-opacity, 1)) !important;
+          text-decoration-color: RGBA(182, 51, 76, var(--tblr-link-underline-opacity, 1)) !important;
+}
+
+.link-pinterest {
+  color: RGBA(var(--tblr-pinterest-rgb), var(--tblr-link-opacity, 1)) !important;
+  -webkit-text-decoration-color: RGBA(var(--tblr-pinterest-rgb), var(--tblr-link-underline-opacity, 1)) !important;
+          text-decoration-color: RGBA(var(--tblr-pinterest-rgb), var(--tblr-link-underline-opacity, 1)) !important;
+}
+.link-pinterest:hover, .link-pinterest:focus {
+  color: RGBA(151, 6, 22, var(--tblr-link-opacity, 1)) !important;
+  -webkit-text-decoration-color: RGBA(151, 6, 22, var(--tblr-link-underline-opacity, 1)) !important;
+          text-decoration-color: RGBA(151, 6, 22, var(--tblr-link-underline-opacity, 1)) !important;
+}
+
+.link-vk {
+  color: RGBA(var(--tblr-vk-rgb), var(--tblr-link-opacity, 1)) !important;
+  -webkit-text-decoration-color: RGBA(var(--tblr-vk-rgb), var(--tblr-link-underline-opacity, 1)) !important;
+          text-decoration-color: RGBA(var(--tblr-vk-rgb), var(--tblr-link-underline-opacity, 1)) !important;
+}
+.link-vk:hover, .link-vk:focus {
+  color: RGBA(79, 105, 134, var(--tblr-link-opacity, 1)) !important;
+  -webkit-text-decoration-color: RGBA(79, 105, 134, var(--tblr-link-underline-opacity, 1)) !important;
+          text-decoration-color: RGBA(79, 105, 134, var(--tblr-link-underline-opacity, 1)) !important;
+}
+
+.link-rss {
+  color: RGBA(var(--tblr-rss-rgb), var(--tblr-link-opacity, 1)) !important;
+  -webkit-text-decoration-color: RGBA(var(--tblr-rss-rgb), var(--tblr-link-underline-opacity, 1)) !important;
+          text-decoration-color: RGBA(var(--tblr-rss-rgb), var(--tblr-link-underline-opacity, 1)) !important;
+}
+.link-rss:hover, .link-rss:focus {
+  color: RGBA(204, 132, 0, var(--tblr-link-opacity, 1)) !important;
+  -webkit-text-decoration-color: RGBA(204, 132, 0, var(--tblr-link-underline-opacity, 1)) !important;
+          text-decoration-color: RGBA(204, 132, 0, var(--tblr-link-underline-opacity, 1)) !important;
+}
+
+.link-flickr {
+  color: RGBA(var(--tblr-flickr-rgb), var(--tblr-link-opacity, 1)) !important;
+  -webkit-text-decoration-color: RGBA(var(--tblr-flickr-rgb), var(--tblr-link-underline-opacity, 1)) !important;
+          text-decoration-color: RGBA(var(--tblr-flickr-rgb), var(--tblr-link-underline-opacity, 1)) !important;
+}
+.link-flickr:hover, .link-flickr:focus {
+  color: RGBA(0, 79, 176, var(--tblr-link-opacity, 1)) !important;
+  -webkit-text-decoration-color: RGBA(0, 79, 176, var(--tblr-link-underline-opacity, 1)) !important;
+          text-decoration-color: RGBA(0, 79, 176, var(--tblr-link-underline-opacity, 1)) !important;
+}
+
+.link-bitbucket {
+  color: RGBA(var(--tblr-bitbucket-rgb), var(--tblr-link-opacity, 1)) !important;
+  -webkit-text-decoration-color: RGBA(var(--tblr-bitbucket-rgb), var(--tblr-link-underline-opacity, 1)) !important;
+          text-decoration-color: RGBA(var(--tblr-bitbucket-rgb), var(--tblr-link-underline-opacity, 1)) !important;
+}
+.link-bitbucket:hover, .link-bitbucket:focus {
+  color: RGBA(0, 66, 163, var(--tblr-link-opacity, 1)) !important;
+  -webkit-text-decoration-color: RGBA(0, 66, 163, var(--tblr-link-underline-opacity, 1)) !important;
+          text-decoration-color: RGBA(0, 66, 163, var(--tblr-link-underline-opacity, 1)) !important;
+}
+
+.link-tabler {
+  color: RGBA(var(--tblr-tabler-rgb), var(--tblr-link-opacity, 1)) !important;
+  -webkit-text-decoration-color: RGBA(var(--tblr-tabler-rgb), var(--tblr-link-underline-opacity, 1)) !important;
+          text-decoration-color: RGBA(var(--tblr-tabler-rgb), var(--tblr-link-underline-opacity, 1)) !important;
+}
+.link-tabler:hover, .link-tabler:focus {
+  color: RGBA(0, 67, 133, var(--tblr-link-opacity, 1)) !important;
+  -webkit-text-decoration-color: RGBA(0, 67, 133, var(--tblr-link-underline-opacity, 1)) !important;
+          text-decoration-color: RGBA(0, 67, 133, var(--tblr-link-underline-opacity, 1)) !important;
+}
+
+.link-body-emphasis {
+  color: RGBA(var(--tblr-emphasis-color-rgb), var(--tblr-link-opacity, 1)) !important;
+  -webkit-text-decoration-color: RGBA(var(--tblr-emphasis-color-rgb), var(--tblr-link-underline-opacity, 1)) !important;
+          text-decoration-color: RGBA(var(--tblr-emphasis-color-rgb), var(--tblr-link-underline-opacity, 1)) !important;
+}
+.link-body-emphasis:hover, .link-body-emphasis:focus {
+  color: RGBA(var(--tblr-emphasis-color-rgb), var(--tblr-link-opacity, 0.75)) !important;
+  -webkit-text-decoration-color: RGBA(var(--tblr-emphasis-color-rgb), var(--tblr-link-underline-opacity, 0.75)) !important;
+          text-decoration-color: RGBA(var(--tblr-emphasis-color-rgb), var(--tblr-link-underline-opacity, 0.75)) !important;
+}
+
+.focus-ring:focus {
+  outline: 0;
+  box-shadow: var(--tblr-focus-ring-x, 0) var(--tblr-focus-ring-y, 0) var(--tblr-focus-ring-blur, 0) var(--tblr-focus-ring-width) var(--tblr-focus-ring-color);
+}
+
+.icon-link {
+  display: inline-flex;
+  gap: 0.375rem;
+  align-items: center;
+  -webkit-text-decoration-color: rgba(var(--tblr-link-color-rgb), var(--tblr-link-opacity, 0.5));
+          text-decoration-color: rgba(var(--tblr-link-color-rgb), var(--tblr-link-opacity, 0.5));
+  text-underline-offset: 0.25em;
+  -webkit-backface-visibility: hidden;
+          backface-visibility: hidden;
+}
+.icon-link > .bi {
+  flex-shrink: 0;
+  width: 1em;
+  height: 1em;
+  fill: currentcolor;
+  transition: 0.2s ease-in-out transform;
+}
+@media (prefers-reduced-motion: reduce) {
+  .icon-link > .bi {
+    transition: none;
+  }
+}
+
+.icon-link-hover:hover > .bi, .icon-link-hover:focus-visible > .bi {
+  transform: var(--tblr-icon-link-transform, translate3d(-0.25em, 0, 0));
+}
+
+.ratio {
+  position: relative;
+  width: 100%;
+}
+.ratio::before {
+  display: block;
+  padding-top: var(--tblr-aspect-ratio);
+  content: "";
+}
+.ratio > * {
+  position: absolute;
+  top: 0;
+  right: 0;
+  width: 100%;
+  height: 100%;
+}
+
+.ratio-1x1 {
+  --tblr-aspect-ratio: 100%;
+}
+
+.ratio-2x1 {
+  --tblr-aspect-ratio: 50%;
+}
+
+.ratio-1x2 {
+  --tblr-aspect-ratio: 200%;
+}
+
+.ratio-3x1 {
+  --tblr-aspect-ratio: 33.3333333333%;
+}
+
+.ratio-1x3 {
+  --tblr-aspect-ratio: 300%;
+}
+
+.ratio-4x3 {
+  --tblr-aspect-ratio: 75%;
+}
+
+.ratio-3x4 {
+  --tblr-aspect-ratio: 133.3333333333%;
+}
+
+.ratio-16x9 {
+  --tblr-aspect-ratio: 56.25%;
+}
+
+.ratio-9x16 {
+  --tblr-aspect-ratio: 177.7777777778%;
+}
+
+.ratio-21x9 {
+  --tblr-aspect-ratio: 42.8571428571%;
+}
+
+.ratio-9x21 {
+  --tblr-aspect-ratio: 233.3333333333%;
+}
+
+.fixed-top {
+  position: fixed;
+  top: 0;
+  left: 0;
+  right: 0;
+  z-index: 1030;
+}
+
+.fixed-bottom {
+  position: fixed;
+  left: 0;
+  bottom: 0;
+  right: 0;
+  z-index: 1030;
+}
+
+.sticky-top {
+  position: -webkit-sticky;
+  position: sticky;
+  top: 0;
+  z-index: 1020;
+}
+
+.sticky-bottom {
+  position: -webkit-sticky;
+  position: sticky;
+  bottom: 0;
+  z-index: 1020;
+}
+
+@media (min-width: 576px) {
+  .sticky-sm-top {
+    position: -webkit-sticky;
+    position: sticky;
+    top: 0;
+    z-index: 1020;
+  }
+  .sticky-sm-bottom {
+    position: -webkit-sticky;
+    position: sticky;
+    bottom: 0;
+    z-index: 1020;
+  }
+}
+@media (min-width: 768px) {
+  .sticky-md-top {
+    position: -webkit-sticky;
+    position: sticky;
+    top: 0;
+    z-index: 1020;
+  }
+  .sticky-md-bottom {
+    position: -webkit-sticky;
+    position: sticky;
+    bottom: 0;
+    z-index: 1020;
+  }
+}
+@media (min-width: 992px) {
+  .sticky-lg-top {
+    position: -webkit-sticky;
+    position: sticky;
+    top: 0;
+    z-index: 1020;
+  }
+  .sticky-lg-bottom {
+    position: -webkit-sticky;
+    position: sticky;
+    bottom: 0;
+    z-index: 1020;
+  }
+}
+@media (min-width: 1200px) {
+  .sticky-xl-top {
+    position: -webkit-sticky;
+    position: sticky;
+    top: 0;
+    z-index: 1020;
+  }
+  .sticky-xl-bottom {
+    position: -webkit-sticky;
+    position: sticky;
+    bottom: 0;
+    z-index: 1020;
+  }
+}
+@media (min-width: 1400px) {
+  .sticky-xxl-top {
+    position: -webkit-sticky;
+    position: sticky;
+    top: 0;
+    z-index: 1020;
+  }
+  .sticky-xxl-bottom {
+    position: -webkit-sticky;
+    position: sticky;
+    bottom: 0;
+    z-index: 1020;
+  }
+}
+.hstack {
+  display: flex;
+  flex-direction: row;
+  align-items: center;
+  align-self: stretch;
+}
+
+.vstack {
+  display: flex;
+  flex: 1 1 auto;
+  flex-direction: column;
+  align-self: stretch;
+}
+
+.visually-hidden,
+.visually-hidden-focusable:not(:focus):not(:focus-within) {
+  width: 1px !important;
+  height: 1px !important;
+  padding: 0 !important;
+  margin: -1px !important;
+  overflow: hidden !important;
+  clip: rect(0, 0, 0, 0) !important;
+  white-space: nowrap !important;
+  border: 0 !important;
+}
+.visually-hidden:not(caption),
+.visually-hidden-focusable:not(:focus):not(:focus-within):not(caption) {
+  position: absolute !important;
+}
+
+.stretched-link::after {
+  position: absolute;
+  top: 0;
+  left: 0;
+  bottom: 0;
+  right: 0;
+  z-index: 1;
+  content: "";
+}
+
+.text-truncate {
+  overflow: hidden;
+  text-overflow: ellipsis;
+  white-space: nowrap;
+}
+
+.vr {
+  display: inline-block;
+  align-self: stretch;
+  width: var(--tblr-border-width);
+  min-height: 1em;
+  background-color: currentcolor;
+  opacity: 0.16;
+}
+
+.align-baseline {
+  vertical-align: baseline !important;
+}
+
+.align-top {
+  vertical-align: top !important;
+}
+
+.align-middle {
+  vertical-align: middle !important;
+}
+
+.align-bottom {
+  vertical-align: bottom !important;
+}
+
+.align-text-bottom {
+  vertical-align: text-bottom !important;
+}
+
+.align-text-top {
+  vertical-align: text-top !important;
+}
+
+.float-start {
+  float: right !important;
+}
+
+.float-end {
+  float: left !important;
+}
+
+.float-none {
+  float: none !important;
+}
+
+.object-fit-contain {
+  -o-object-fit: contain !important;
+     object-fit: contain !important;
+}
+
+.object-fit-cover {
+  -o-object-fit: cover !important;
+     object-fit: cover !important;
+}
+
+.object-fit-fill {
+  -o-object-fit: fill !important;
+     object-fit: fill !important;
+}
+
+.object-fit-scale {
+  -o-object-fit: scale-down !important;
+     object-fit: scale-down !important;
+}
+
+.object-fit-none {
+  -o-object-fit: none !important;
+     object-fit: none !important;
+}
+
+.opacity-0 {
+  opacity: 0 !important;
+}
+
+.opacity-25 {
+  opacity: 0.25 !important;
+}
+
+.opacity-50 {
+  opacity: 0.5 !important;
+}
+
+.opacity-75 {
+  opacity: 0.75 !important;
+}
+
+.opacity-100 {
+  opacity: 1 !important;
+}
+
+.overflow-auto {
+  overflow: auto !important;
+}
+
+.overflow-hidden {
+  overflow: hidden !important;
+}
+
+.overflow-visible {
+  overflow: visible !important;
+}
+
+.overflow-scroll {
+  overflow: scroll !important;
+}
+
+.overflow-x-auto {
+  overflow-x: auto !important;
+}
+
+.overflow-x-hidden {
+  overflow-x: hidden !important;
+}
+
+.overflow-x-visible {
+  overflow-x: visible !important;
+}
+
+.overflow-x-scroll {
+  overflow-x: scroll !important;
+}
+
+.overflow-y-auto {
+  overflow-y: auto !important;
+}
+
+.overflow-y-hidden {
+  overflow-y: hidden !important;
+}
+
+.overflow-y-visible {
+  overflow-y: visible !important;
+}
+
+.overflow-y-scroll {
+  overflow-y: scroll !important;
+}
+
+.d-inline {
+  display: inline !important;
+}
+
+.d-inline-block {
+  display: inline-block !important;
+}
+
+.d-block {
+  display: block !important;
+}
+
+.d-grid {
+  display: grid !important;
+}
+
+.d-inline-grid {
+  display: inline-grid !important;
+}
+
+.d-table {
+  display: table !important;
+}
+
+.d-table-row {
+  display: table-row !important;
+}
+
+.d-table-cell {
+  display: table-cell !important;
+}
+
+.d-flex {
+  display: flex !important;
+}
+
+.d-inline-flex {
+  display: inline-flex !important;
+}
+
+.d-none {
+  display: none !important;
+}
+
+.shadow {
+  box-shadow: rgba(var(--tblr-body-color-rgb), 0.04) 0 2px 4px 0 !important;
+}
+
+.shadow-sm {
+  box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075) !important;
+}
+
+.shadow-lg {
+  box-shadow: 0 1rem 3rem rgba(0, 0, 0, 0.175) !important;
+}
+
+.shadow-none {
+  box-shadow: none !important;
+}
+
+.focus-ring-primary {
+  --tblr-focus-ring-color: rgba(var(--tblr-primary-rgb), var(--tblr-focus-ring-opacity));
+}
+
+.focus-ring-secondary {
+  --tblr-focus-ring-color: rgba(var(--tblr-secondary-rgb), var(--tblr-focus-ring-opacity));
+}
+
+.focus-ring-success {
+  --tblr-focus-ring-color: rgba(var(--tblr-success-rgb), var(--tblr-focus-ring-opacity));
+}
+
+.focus-ring-info {
+  --tblr-focus-ring-color: rgba(var(--tblr-info-rgb), var(--tblr-focus-ring-opacity));
+}
+
+.focus-ring-warning {
+  --tblr-focus-ring-color: rgba(var(--tblr-warning-rgb), var(--tblr-focus-ring-opacity));
+}
+
+.focus-ring-danger {
+  --tblr-focus-ring-color: rgba(var(--tblr-danger-rgb), var(--tblr-focus-ring-opacity));
+}
+
+.focus-ring-light {
+  --tblr-focus-ring-color: rgba(var(--tblr-light-rgb), var(--tblr-focus-ring-opacity));
+}
+
+.focus-ring-dark {
+  --tblr-focus-ring-color: rgba(var(--tblr-dark-rgb), var(--tblr-focus-ring-opacity));
+}
+
+.focus-ring-muted {
+  --tblr-focus-ring-color: rgba(var(--tblr-muted-rgb), var(--tblr-focus-ring-opacity));
+}
+
+.focus-ring-blue {
+  --tblr-focus-ring-color: rgba(var(--tblr-blue-rgb), var(--tblr-focus-ring-opacity));
+}
+
+.focus-ring-azure {
+  --tblr-focus-ring-color: rgba(var(--tblr-azure-rgb), var(--tblr-focus-ring-opacity));
+}
+
+.focus-ring-indigo {
+  --tblr-focus-ring-color: rgba(var(--tblr-indigo-rgb), var(--tblr-focus-ring-opacity));
+}
+
+.focus-ring-purple {
+  --tblr-focus-ring-color: rgba(var(--tblr-purple-rgb), var(--tblr-focus-ring-opacity));
+}
+
+.focus-ring-pink {
+  --tblr-focus-ring-color: rgba(var(--tblr-pink-rgb), var(--tblr-focus-ring-opacity));
+}
+
+.focus-ring-red {
+  --tblr-focus-ring-color: rgba(var(--tblr-red-rgb), var(--tblr-focus-ring-opacity));
+}
+
+.focus-ring-orange {
+  --tblr-focus-ring-color: rgba(var(--tblr-orange-rgb), var(--tblr-focus-ring-opacity));
+}
+
+.focus-ring-yellow {
+  --tblr-focus-ring-color: rgba(var(--tblr-yellow-rgb), var(--tblr-focus-ring-opacity));
+}
+
+.focus-ring-lime {
+  --tblr-focus-ring-color: rgba(var(--tblr-lime-rgb), var(--tblr-focus-ring-opacity));
+}
+
+.focus-ring-green {
+  --tblr-focus-ring-color: rgba(var(--tblr-green-rgb), var(--tblr-focus-ring-opacity));
+}
+
+.focus-ring-teal {
+  --tblr-focus-ring-color: rgba(var(--tblr-teal-rgb), var(--tblr-focus-ring-opacity));
+}
+
+.focus-ring-cyan {
+  --tblr-focus-ring-color: rgba(var(--tblr-cyan-rgb), var(--tblr-focus-ring-opacity));
+}
+
+.focus-ring-facebook {
+  --tblr-focus-ring-color: rgba(var(--tblr-facebook-rgb), var(--tblr-focus-ring-opacity));
+}
+
+.focus-ring-twitter {
+  --tblr-focus-ring-color: rgba(var(--tblr-twitter-rgb), var(--tblr-focus-ring-opacity));
+}
+
+.focus-ring-linkedin {
+  --tblr-focus-ring-color: rgba(var(--tblr-linkedin-rgb), var(--tblr-focus-ring-opacity));
+}
+
+.focus-ring-google {
+  --tblr-focus-ring-color: rgba(var(--tblr-google-rgb), var(--tblr-focus-ring-opacity));
+}
+
+.focus-ring-youtube {
+  --tblr-focus-ring-color: rgba(var(--tblr-youtube-rgb), var(--tblr-focus-ring-opacity));
+}
+
+.focus-ring-vimeo {
+  --tblr-focus-ring-color: rgba(var(--tblr-vimeo-rgb), var(--tblr-focus-ring-opacity));
+}
+
+.focus-ring-dribbble {
+  --tblr-focus-ring-color: rgba(var(--tblr-dribbble-rgb), var(--tblr-focus-ring-opacity));
+}
+
+.focus-ring-github {
+  --tblr-focus-ring-color: rgba(var(--tblr-github-rgb), var(--tblr-focus-ring-opacity));
+}
+
+.focus-ring-instagram {
+  --tblr-focus-ring-color: rgba(var(--tblr-instagram-rgb), var(--tblr-focus-ring-opacity));
+}
+
+.focus-ring-pinterest {
+  --tblr-focus-ring-color: rgba(var(--tblr-pinterest-rgb), var(--tblr-focus-ring-opacity));
+}
+
+.focus-ring-vk {
+  --tblr-focus-ring-color: rgba(var(--tblr-vk-rgb), var(--tblr-focus-ring-opacity));
+}
+
+.focus-ring-rss {
+  --tblr-focus-ring-color: rgba(var(--tblr-rss-rgb), var(--tblr-focus-ring-opacity));
+}
+
+.focus-ring-flickr {
+  --tblr-focus-ring-color: rgba(var(--tblr-flickr-rgb), var(--tblr-focus-ring-opacity));
+}
+
+.focus-ring-bitbucket {
+  --tblr-focus-ring-color: rgba(var(--tblr-bitbucket-rgb), var(--tblr-focus-ring-opacity));
+}
+
+.focus-ring-tabler {
+  --tblr-focus-ring-color: rgba(var(--tblr-tabler-rgb), var(--tblr-focus-ring-opacity));
+}
+
+.position-static {
+  position: static !important;
+}
+
+.position-relative {
+  position: relative !important;
+}
+
+.position-absolute {
+  position: absolute !important;
+}
+
+.position-fixed {
+  position: fixed !important;
+}
+
+.position-sticky {
+  position: -webkit-sticky !important;
+  position: sticky !important;
+}
+
+.top-0 {
+  top: 0 !important;
+}
+
+.top-50 {
+  top: 50% !important;
+}
+
+.top-100 {
+  top: 100% !important;
+}
+
+.bottom-0 {
+  bottom: 0 !important;
+}
+
+.bottom-50 {
+  bottom: 50% !important;
+}
+
+.bottom-100 {
+  bottom: 100% !important;
+}
+
+.start-0 {
+  right: 0 !important;
+}
+
+.start-50 {
+  right: 50% !important;
+}
+
+.start-100 {
+  right: 100% !important;
+}
+
+.end-0 {
+  left: 0 !important;
+}
+
+.end-50 {
+  left: 50% !important;
+}
+
+.end-100 {
+  left: 100% !important;
+}
+
+.translate-middle {
+  transform: translate(50%, -50%) !important;
+}
+
+.translate-middle-x {
+  transform: translateX(50%) !important;
+}
+
+.translate-middle-y {
+  transform: translateY(-50%) !important;
+}
+
+.border {
+  border: var(--tblr-border-width) var(--tblr-border-style) rgba(4, 32, 69, 0.14) !important;
+}
+
+.border-wide {
+  border: 2px var(--tblr-border-style) rgba(4, 32, 69, 0.14) !important;
+}
+
+.border-0 {
+  border: 0 !important;
+}
+
+.border-top {
+  border-top: var(--tblr-border-width) var(--tblr-border-style) rgba(4, 32, 69, 0.14) !important;
+}
+
+.border-top-wide {
+  border-top: 2px var(--tblr-border-style) rgba(4, 32, 69, 0.14) !important;
+}
+
+.border-top-0 {
+  border-top: 0 !important;
+}
+
+.border-end {
+  border-left: var(--tblr-border-width) var(--tblr-border-style) rgba(4, 32, 69, 0.14) !important;
+}
+
+.border-end-wide {
+  border-left: 2px var(--tblr-border-style) rgba(4, 32, 69, 0.14) !important;
+}
+
+.border-end-0 {
+  border-left: 0 !important;
+}
+
+.border-bottom {
+  border-bottom: var(--tblr-border-width) var(--tblr-border-style) rgba(4, 32, 69, 0.14) !important;
+}
+
+.border-bottom-wide {
+  border-bottom: 2px var(--tblr-border-style) rgba(4, 32, 69, 0.14) !important;
+}
+
+.border-bottom-0 {
+  border-bottom: 0 !important;
+}
+
+.border-start {
+  border-right: var(--tblr-border-width) var(--tblr-border-style) rgba(4, 32, 69, 0.14) !important;
+}
+
+.border-start-wide {
+  border-right: 2px var(--tblr-border-style) rgba(4, 32, 69, 0.14) !important;
+}
+
+.border-start-0 {
+  border-right: 0 !important;
+}
+
+.border-primary {
+  --tblr-border-opacity: 1;
+  border-color: rgba(var(--tblr-primary-rgb), var(--tblr-border-opacity)) !important;
+}
+
+.border-secondary {
+  --tblr-border-opacity: 1;
+  border-color: rgba(var(--tblr-secondary-rgb), var(--tblr-border-opacity)) !important;
+}
+
+.border-success {
+  --tblr-border-opacity: 1;
+  border-color: rgba(var(--tblr-success-rgb), var(--tblr-border-opacity)) !important;
+}
+
+.border-info {
+  --tblr-border-opacity: 1;
+  border-color: rgba(var(--tblr-info-rgb), var(--tblr-border-opacity)) !important;
+}
+
+.border-warning {
+  --tblr-border-opacity: 1;
+  border-color: rgba(var(--tblr-warning-rgb), var(--tblr-border-opacity)) !important;
+}
+
+.border-danger {
+  --tblr-border-opacity: 1;
+  border-color: rgba(var(--tblr-danger-rgb), var(--tblr-border-opacity)) !important;
+}
+
+.border-light {
+  --tblr-border-opacity: 1;
+  border-color: rgba(var(--tblr-light-rgb), var(--tblr-border-opacity)) !important;
+}
+
+.border-dark {
+  --tblr-border-opacity: 1;
+  border-color: rgba(var(--tblr-dark-rgb), var(--tblr-border-opacity)) !important;
+}
+
+.border-muted {
+  --tblr-border-opacity: 1;
+  border-color: rgba(var(--tblr-muted-rgb), var(--tblr-border-opacity)) !important;
+}
+
+.border-blue {
+  --tblr-border-opacity: 1;
+  border-color: rgba(var(--tblr-blue-rgb), var(--tblr-border-opacity)) !important;
+}
+
+.border-azure {
+  --tblr-border-opacity: 1;
+  border-color: rgba(var(--tblr-azure-rgb), var(--tblr-border-opacity)) !important;
+}
+
+.border-indigo {
+  --tblr-border-opacity: 1;
+  border-color: rgba(var(--tblr-indigo-rgb), var(--tblr-border-opacity)) !important;
+}
+
+.border-purple {
+  --tblr-border-opacity: 1;
+  border-color: rgba(var(--tblr-purple-rgb), var(--tblr-border-opacity)) !important;
+}
+
+.border-pink {
+  --tblr-border-opacity: 1;
+  border-color: rgba(var(--tblr-pink-rgb), var(--tblr-border-opacity)) !important;
+}
+
+.border-red {
+  --tblr-border-opacity: 1;
+  border-color: rgba(var(--tblr-red-rgb), var(--tblr-border-opacity)) !important;
+}
+
+.border-orange {
+  --tblr-border-opacity: 1;
+  border-color: rgba(var(--tblr-orange-rgb), var(--tblr-border-opacity)) !important;
+}
+
+.border-yellow {
+  --tblr-border-opacity: 1;
+  border-color: rgba(var(--tblr-yellow-rgb), var(--tblr-border-opacity)) !important;
+}
+
+.border-lime {
+  --tblr-border-opacity: 1;
+  border-color: rgba(var(--tblr-lime-rgb), var(--tblr-border-opacity)) !important;
+}
+
+.border-green {
+  --tblr-border-opacity: 1;
+  border-color: rgba(var(--tblr-green-rgb), var(--tblr-border-opacity)) !important;
+}
+
+.border-teal {
+  --tblr-border-opacity: 1;
+  border-color: rgba(var(--tblr-teal-rgb), var(--tblr-border-opacity)) !important;
+}
+
+.border-cyan {
+  --tblr-border-opacity: 1;
+  border-color: rgba(var(--tblr-cyan-rgb), var(--tblr-border-opacity)) !important;
+}
+
+.border-facebook {
+  --tblr-border-opacity: 1;
+  border-color: rgba(var(--tblr-facebook-rgb), var(--tblr-border-opacity)) !important;
+}
+
+.border-twitter {
+  --tblr-border-opacity: 1;
+  border-color: rgba(var(--tblr-twitter-rgb), var(--tblr-border-opacity)) !important;
+}
+
+.border-linkedin {
+  --tblr-border-opacity: 1;
+  border-color: rgba(var(--tblr-linkedin-rgb), var(--tblr-border-opacity)) !important;
+}
+
+.border-google {
+  --tblr-border-opacity: 1;
+  border-color: rgba(var(--tblr-google-rgb), var(--tblr-border-opacity)) !important;
+}
+
+.border-youtube {
+  --tblr-border-opacity: 1;
+  border-color: rgba(var(--tblr-youtube-rgb), var(--tblr-border-opacity)) !important;
+}
+
+.border-vimeo {
+  --tblr-border-opacity: 1;
+  border-color: rgba(var(--tblr-vimeo-rgb), var(--tblr-border-opacity)) !important;
+}
+
+.border-dribbble {
+  --tblr-border-opacity: 1;
+  border-color: rgba(var(--tblr-dribbble-rgb), var(--tblr-border-opacity)) !important;
+}
+
+.border-github {
+  --tblr-border-opacity: 1;
+  border-color: rgba(var(--tblr-github-rgb), var(--tblr-border-opacity)) !important;
+}
+
+.border-instagram {
+  --tblr-border-opacity: 1;
+  border-color: rgba(var(--tblr-instagram-rgb), var(--tblr-border-opacity)) !important;
+}
+
+.border-pinterest {
+  --tblr-border-opacity: 1;
+  border-color: rgba(var(--tblr-pinterest-rgb), var(--tblr-border-opacity)) !important;
+}
+
+.border-vk {
+  --tblr-border-opacity: 1;
+  border-color: rgba(var(--tblr-vk-rgb), var(--tblr-border-opacity)) !important;
+}
+
+.border-rss {
+  --tblr-border-opacity: 1;
+  border-color: rgba(var(--tblr-rss-rgb), var(--tblr-border-opacity)) !important;
+}
+
+.border-flickr {
+  --tblr-border-opacity: 1;
+  border-color: rgba(var(--tblr-flickr-rgb), var(--tblr-border-opacity)) !important;
+}
+
+.border-bitbucket {
+  --tblr-border-opacity: 1;
+  border-color: rgba(var(--tblr-bitbucket-rgb), var(--tblr-border-opacity)) !important;
+}
+
+.border-tabler {
+  --tblr-border-opacity: 1;
+  border-color: rgba(var(--tblr-tabler-rgb), var(--tblr-border-opacity)) !important;
+}
+
+.border-black {
+  --tblr-border-opacity: 1;
+  border-color: rgba(var(--tblr-black-rgb), var(--tblr-border-opacity)) !important;
+}
+
+.border-white {
+  --tblr-border-opacity: 1;
+  border-color: rgba(var(--tblr-white-rgb), var(--tblr-border-opacity)) !important;
+}
+
+.border-primary-subtle {
+  border-color: var(--tblr-primary-border-subtle) !important;
+}
+
+.border-secondary-subtle {
+  border-color: var(--tblr-secondary-border-subtle) !important;
+}
+
+.border-success-subtle {
+  border-color: var(--tblr-success-border-subtle) !important;
+}
+
+.border-info-subtle {
+  border-color: var(--tblr-info-border-subtle) !important;
+}
+
+.border-warning-subtle {
+  border-color: var(--tblr-warning-border-subtle) !important;
+}
+
+.border-danger-subtle {
+  border-color: var(--tblr-danger-border-subtle) !important;
+}
+
+.border-light-subtle {
+  border-color: var(--tblr-light-border-subtle) !important;
+}
+
+.border-dark-subtle {
+  border-color: var(--tblr-dark-border-subtle) !important;
+}
+
+.border-1 {
+  border-width: 1px !important;
+}
+
+.border-2 {
+  border-width: 2px !important;
+}
+
+.border-3 {
+  border-width: 3px !important;
+}
+
+.border-4 {
+  border-width: 4px !important;
+}
+
+.border-5 {
+  border-width: 5px !important;
+}
+
+.border-opacity-10 {
+  --tblr-border-opacity: 0.1;
+}
+
+.border-opacity-25 {
+  --tblr-border-opacity: 0.25;
+}
+
+.border-opacity-50 {
+  --tblr-border-opacity: 0.5;
+}
+
+.border-opacity-75 {
+  --tblr-border-opacity: 0.75;
+}
+
+.border-opacity-100 {
+  --tblr-border-opacity: 1;
+}
+
+.w-0 {
+  width: 0 !important;
+}
+
+.w-1 {
+  width: 0.25rem !important;
+}
+
+.w-2 {
+  width: 0.5rem !important;
+}
+
+.w-3 {
+  width: 1rem !important;
+}
+
+.w-4 {
+  width: 1.5rem !important;
+}
+
+.w-5 {
+  width: 2rem !important;
+}
+
+.w-6 {
+  width: 3rem !important;
+}
+
+.w-7 {
+  width: 5rem !important;
+}
+
+.w-8 {
+  width: 8rem !important;
+}
+
+.w-25 {
+  width: 25% !important;
+}
+
+.w-33 {
+  width: 33.33333% !important;
+}
+
+.w-50 {
+  width: 50% !important;
+}
+
+.w-66 {
+  width: 66.66666% !important;
+}
+
+.w-75 {
+  width: 75% !important;
+}
+
+.w-100 {
+  width: 100% !important;
+}
+
+.w-auto {
+  width: auto !important;
+}
+
+.mw-100 {
+  max-width: 100% !important;
+}
+
+.vw-100 {
+  width: 100vw !important;
+}
+
+.min-vw-100 {
+  min-width: 100vw !important;
+}
+
+.h-0 {
+  height: 0 !important;
+}
+
+.h-1 {
+  height: 0.25rem !important;
+}
+
+.h-2 {
+  height: 0.5rem !important;
+}
+
+.h-3 {
+  height: 1rem !important;
+}
+
+.h-4 {
+  height: 1.5rem !important;
+}
+
+.h-5 {
+  height: 2rem !important;
+}
+
+.h-6 {
+  height: 3rem !important;
+}
+
+.h-7 {
+  height: 5rem !important;
+}
+
+.h-8 {
+  height: 8rem !important;
+}
+
+.h-25 {
+  height: 25% !important;
+}
+
+.h-33 {
+  height: 33.33333% !important;
+}
+
+.h-50 {
+  height: 50% !important;
+}
+
+.h-66 {
+  height: 66.66666% !important;
+}
+
+.h-75 {
+  height: 75% !important;
+}
+
+.h-100 {
+  height: 100% !important;
+}
+
+.h-auto {
+  height: auto !important;
+}
+
+.mh-100 {
+  max-height: 100% !important;
+}
+
+.vh-100 {
+  height: 100vh !important;
+}
+
+.min-vh-100 {
+  min-height: 100vh !important;
+}
+
+.flex-fill {
+  flex: 1 1 auto !important;
+}
+
+.flex-row {
+  flex-direction: row !important;
+}
+
+.flex-column {
+  flex-direction: column !important;
+}
+
+.flex-row-reverse {
+  flex-direction: row-reverse !important;
+}
+
+.flex-column-reverse {
+  flex-direction: column-reverse !important;
+}
+
+.flex-grow-0 {
+  flex-grow: 0 !important;
+}
+
+.flex-grow-1 {
+  flex-grow: 1 !important;
+}
+
+.flex-shrink-0 {
+  flex-shrink: 0 !important;
+}
+
+.flex-shrink-1 {
+  flex-shrink: 1 !important;
+}
+
+.flex-wrap {
+  flex-wrap: wrap !important;
+}
+
+.flex-nowrap {
+  flex-wrap: nowrap !important;
+}
+
+.flex-wrap-reverse {
+  flex-wrap: wrap-reverse !important;
+}
+
+.justify-content-start {
+  justify-content: flex-start !important;
+}
+
+.justify-content-end {
+  justify-content: flex-end !important;
+}
+
+.justify-content-center {
+  justify-content: center !important;
+}
+
+.justify-content-between {
+  justify-content: space-between !important;
+}
+
+.justify-content-around {
+  justify-content: space-around !important;
+}
+
+.justify-content-evenly {
+  justify-content: space-evenly !important;
+}
+
+.align-items-start {
+  align-items: flex-start !important;
+}
+
+.align-items-end {
+  align-items: flex-end !important;
+}
+
+.align-items-center {
+  align-items: center !important;
+}
+
+.align-items-baseline {
+  align-items: baseline !important;
+}
+
+.align-items-stretch {
+  align-items: stretch !important;
+}
+
+.align-content-start {
+  align-content: flex-start !important;
+}
+
+.align-content-end {
+  align-content: flex-end !important;
+}
+
+.align-content-center {
+  align-content: center !important;
+}
+
+.align-content-between {
+  align-content: space-between !important;
+}
+
+.align-content-around {
+  align-content: space-around !important;
+}
+
+.align-content-stretch {
+  align-content: stretch !important;
+}
+
+.align-self-auto {
+  align-self: auto !important;
+}
+
+.align-self-start {
+  align-self: flex-start !important;
+}
+
+.align-self-end {
+  align-self: flex-end !important;
+}
+
+.align-self-center {
+  align-self: center !important;
+}
+
+.align-self-baseline {
+  align-self: baseline !important;
+}
+
+.align-self-stretch {
+  align-self: stretch !important;
+}
+
+.order-first {
+  order: -1 !important;
+}
+
+.order-0 {
+  order: 0 !important;
+}
+
+.order-1 {
+  order: 1 !important;
+}
+
+.order-2 {
+  order: 2 !important;
+}
+
+.order-3 {
+  order: 3 !important;
+}
+
+.order-4 {
+  order: 4 !important;
+}
+
+.order-5 {
+  order: 5 !important;
+}
+
+.order-last {
+  order: 6 !important;
+}
+
+.m-0 {
+  margin: 0 !important;
+}
+
+.m-1 {
+  margin: 0.25rem !important;
+}
+
+.m-2 {
+  margin: 0.5rem !important;
+}
+
+.m-3 {
+  margin: 1rem !important;
+}
+
+.m-4 {
+  margin: 1.5rem !important;
+}
+
+.m-5 {
+  margin: 2rem !important;
+}
+
+.m-6 {
+  margin: 3rem !important;
+}
+
+.m-7 {
+  margin: 5rem !important;
+}
+
+.m-8 {
+  margin: 8rem !important;
+}
+
+.m-auto {
+  margin: auto !important;
+}
+
+.mx-0 {
+  margin-left: 0 !important;
+  margin-right: 0 !important;
+}
+
+.mx-1 {
+  margin-left: 0.25rem !important;
+  margin-right: 0.25rem !important;
+}
+
+.mx-2 {
+  margin-left: 0.5rem !important;
+  margin-right: 0.5rem !important;
+}
+
+.mx-3 {
+  margin-left: 1rem !important;
+  margin-right: 1rem !important;
+}
+
+.mx-4 {
+  margin-left: 1.5rem !important;
+  margin-right: 1.5rem !important;
+}
+
+.mx-5 {
+  margin-left: 2rem !important;
+  margin-right: 2rem !important;
+}
+
+.mx-6 {
+  margin-left: 3rem !important;
+  margin-right: 3rem !important;
+}
+
+.mx-7 {
+  margin-left: 5rem !important;
+  margin-right: 5rem !important;
+}
+
+.mx-8 {
+  margin-left: 8rem !important;
+  margin-right: 8rem !important;
+}
+
+.mx-auto {
+  margin-left: auto !important;
+  margin-right: auto !important;
+}
+
+.my-0 {
+  margin-top: 0 !important;
+  margin-bottom: 0 !important;
+}
+
+.my-1 {
+  margin-top: 0.25rem !important;
+  margin-bottom: 0.25rem !important;
+}
+
+.my-2 {
+  margin-top: 0.5rem !important;
+  margin-bottom: 0.5rem !important;
+}
+
+.my-3 {
+  margin-top: 1rem !important;
+  margin-bottom: 1rem !important;
+}
+
+.my-4 {
+  margin-top: 1.5rem !important;
+  margin-bottom: 1.5rem !important;
+}
+
+.my-5 {
+  margin-top: 2rem !important;
+  margin-bottom: 2rem !important;
+}
+
+.my-6 {
+  margin-top: 3rem !important;
+  margin-bottom: 3rem !important;
+}
+
+.my-7 {
+  margin-top: 5rem !important;
+  margin-bottom: 5rem !important;
+}
+
+.my-8 {
+  margin-top: 8rem !important;
+  margin-bottom: 8rem !important;
+}
+
+.my-auto {
+  margin-top: auto !important;
+  margin-bottom: auto !important;
+}
+
+.mt-0 {
+  margin-top: 0 !important;
+}
+
+.mt-1 {
+  margin-top: 0.25rem !important;
+}
+
+.mt-2 {
+  margin-top: 0.5rem !important;
+}
+
+.mt-3 {
+  margin-top: 1rem !important;
+}
+
+.mt-4 {
+  margin-top: 1.5rem !important;
+}
+
+.mt-5 {
+  margin-top: 2rem !important;
+}
+
+.mt-6 {
+  margin-top: 3rem !important;
+}
+
+.mt-7 {
+  margin-top: 5rem !important;
+}
+
+.mt-8 {
+  margin-top: 8rem !important;
+}
+
+.mt-auto {
+  margin-top: auto !important;
+}
+
+.me-0 {
+  margin-left: 0 !important;
+}
+
+.me-1 {
+  margin-left: 0.25rem !important;
+}
+
+.me-2 {
+  margin-left: 0.5rem !important;
+}
+
+.me-3 {
+  margin-left: 1rem !important;
+}
+
+.me-4 {
+  margin-left: 1.5rem !important;
+}
+
+.me-5 {
+  margin-left: 2rem !important;
+}
+
+.me-6 {
+  margin-left: 3rem !important;
+}
+
+.me-7 {
+  margin-left: 5rem !important;
+}
+
+.me-8 {
+  margin-left: 8rem !important;
+}
+
+.me-auto {
+  margin-left: auto !important;
+}
+
+.mb-0 {
+  margin-bottom: 0 !important;
+}
+
+.mb-1 {
+  margin-bottom: 0.25rem !important;
+}
+
+.mb-2 {
+  margin-bottom: 0.5rem !important;
+}
+
+.mb-3 {
+  margin-bottom: 1rem !important;
+}
+
+.mb-4 {
+  margin-bottom: 1.5rem !important;
+}
+
+.mb-5 {
+  margin-bottom: 2rem !important;
+}
+
+.mb-6 {
+  margin-bottom: 3rem !important;
+}
+
+.mb-7 {
+  margin-bottom: 5rem !important;
+}
+
+.mb-8 {
+  margin-bottom: 8rem !important;
+}
+
+.mb-auto {
+  margin-bottom: auto !important;
+}
+
+.ms-0 {
+  margin-right: 0 !important;
+}
+
+.ms-1 {
+  margin-right: 0.25rem !important;
+}
+
+.ms-2 {
+  margin-right: 0.5rem !important;
+}
+
+.ms-3 {
+  margin-right: 1rem !important;
+}
+
+.ms-4 {
+  margin-right: 1.5rem !important;
+}
+
+.ms-5 {
+  margin-right: 2rem !important;
+}
+
+.ms-6 {
+  margin-right: 3rem !important;
+}
+
+.ms-7 {
+  margin-right: 5rem !important;
+}
+
+.ms-8 {
+  margin-right: 8rem !important;
+}
+
+.ms-auto {
+  margin-right: auto !important;
+}
+
+.p-0 {
+  padding: 0 !important;
+}
+
+.p-1 {
+  padding: 0.25rem !important;
+}
+
+.p-2 {
+  padding: 0.5rem !important;
+}
+
+.p-3 {
+  padding: 1rem !important;
+}
+
+.p-4 {
+  padding: 1.5rem !important;
+}
+
+.p-5 {
+  padding: 2rem !important;
+}
+
+.p-6 {
+  padding: 3rem !important;
+}
+
+.p-7 {
+  padding: 5rem !important;
+}
+
+.p-8 {
+  padding: 8rem !important;
+}
+
+.px-0 {
+  padding-left: 0 !important;
+  padding-right: 0 !important;
+}
+
+.px-1 {
+  padding-left: 0.25rem !important;
+  padding-right: 0.25rem !important;
+}
+
+.px-2 {
+  padding-left: 0.5rem !important;
+  padding-right: 0.5rem !important;
+}
+
+.px-3 {
+  padding-left: 1rem !important;
+  padding-right: 1rem !important;
+}
+
+.px-4 {
+  padding-left: 1.5rem !important;
+  padding-right: 1.5rem !important;
+}
+
+.px-5 {
+  padding-left: 2rem !important;
+  padding-right: 2rem !important;
+}
+
+.px-6 {
+  padding-left: 3rem !important;
+  padding-right: 3rem !important;
+}
+
+.px-7 {
+  padding-left: 5rem !important;
+  padding-right: 5rem !important;
+}
+
+.px-8 {
+  padding-left: 8rem !important;
+  padding-right: 8rem !important;
+}
+
+.py-0 {
+  padding-top: 0 !important;
+  padding-bottom: 0 !important;
+}
+
+.py-1 {
+  padding-top: 0.25rem !important;
+  padding-bottom: 0.25rem !important;
+}
+
+.py-2 {
+  padding-top: 0.5rem !important;
+  padding-bottom: 0.5rem !important;
+}
+
+.py-3 {
+  padding-top: 1rem !important;
+  padding-bottom: 1rem !important;
+}
+
+.py-4 {
+  padding-top: 1.5rem !important;
+  padding-bottom: 1.5rem !important;
+}
+
+.py-5 {
+  padding-top: 2rem !important;
+  padding-bottom: 2rem !important;
+}
+
+.py-6 {
+  padding-top: 3rem !important;
+  padding-bottom: 3rem !important;
+}
+
+.py-7 {
+  padding-top: 5rem !important;
+  padding-bottom: 5rem !important;
+}
+
+.py-8 {
+  padding-top: 8rem !important;
+  padding-bottom: 8rem !important;
+}
+
+.pt-0 {
+  padding-top: 0 !important;
+}
+
+.pt-1 {
+  padding-top: 0.25rem !important;
+}
+
+.pt-2 {
+  padding-top: 0.5rem !important;
+}
+
+.pt-3 {
+  padding-top: 1rem !important;
+}
+
+.pt-4 {
+  padding-top: 1.5rem !important;
+}
+
+.pt-5 {
+  padding-top: 2rem !important;
+}
+
+.pt-6 {
+  padding-top: 3rem !important;
+}
+
+.pt-7 {
+  padding-top: 5rem !important;
+}
+
+.pt-8 {
+  padding-top: 8rem !important;
+}
+
+.pe-0 {
+  padding-left: 0 !important;
+}
+
+.pe-1 {
+  padding-left: 0.25rem !important;
+}
+
+.pe-2 {
+  padding-left: 0.5rem !important;
+}
+
+.pe-3 {
+  padding-left: 1rem !important;
+}
+
+.pe-4 {
+  padding-left: 1.5rem !important;
+}
+
+.pe-5 {
+  padding-left: 2rem !important;
+}
+
+.pe-6 {
+  padding-left: 3rem !important;
+}
+
+.pe-7 {
+  padding-left: 5rem !important;
+}
+
+.pe-8 {
+  padding-left: 8rem !important;
+}
+
+.pb-0 {
+  padding-bottom: 0 !important;
+}
+
+.pb-1 {
+  padding-bottom: 0.25rem !important;
+}
+
+.pb-2 {
+  padding-bottom: 0.5rem !important;
+}
+
+.pb-3 {
+  padding-bottom: 1rem !important;
+}
+
+.pb-4 {
+  padding-bottom: 1.5rem !important;
+}
+
+.pb-5 {
+  padding-bottom: 2rem !important;
+}
+
+.pb-6 {
+  padding-bottom: 3rem !important;
+}
+
+.pb-7 {
+  padding-bottom: 5rem !important;
+}
+
+.pb-8 {
+  padding-bottom: 8rem !important;
+}
+
+.ps-0 {
+  padding-right: 0 !important;
+}
+
+.ps-1 {
+  padding-right: 0.25rem !important;
+}
+
+.ps-2 {
+  padding-right: 0.5rem !important;
+}
+
+.ps-3 {
+  padding-right: 1rem !important;
+}
+
+.ps-4 {
+  padding-right: 1.5rem !important;
+}
+
+.ps-5 {
+  padding-right: 2rem !important;
+}
+
+.ps-6 {
+  padding-right: 3rem !important;
+}
+
+.ps-7 {
+  padding-right: 5rem !important;
+}
+
+.ps-8 {
+  padding-right: 8rem !important;
+}
+
+.gap-0 {
+  gap: 0 !important;
+}
+
+.gap-1 {
+  gap: 0.25rem !important;
+}
+
+.gap-2 {
+  gap: 0.5rem !important;
+}
+
+.gap-3 {
+  gap: 1rem !important;
+}
+
+.gap-4 {
+  gap: 1.5rem !important;
+}
+
+.gap-5 {
+  gap: 2rem !important;
+}
+
+.gap-6 {
+  gap: 3rem !important;
+}
+
+.gap-7 {
+  gap: 5rem !important;
+}
+
+.gap-8 {
+  gap: 8rem !important;
+}
+
+.row-gap-0 {
+  row-gap: 0 !important;
+}
+
+.row-gap-1 {
+  row-gap: 0.25rem !important;
+}
+
+.row-gap-2 {
+  row-gap: 0.5rem !important;
+}
+
+.row-gap-3 {
+  row-gap: 1rem !important;
+}
+
+.row-gap-4 {
+  row-gap: 1.5rem !important;
+}
+
+.row-gap-5 {
+  row-gap: 2rem !important;
+}
+
+.row-gap-6 {
+  row-gap: 3rem !important;
+}
+
+.row-gap-7 {
+  row-gap: 5rem !important;
+}
+
+.row-gap-8 {
+  row-gap: 8rem !important;
+}
+
+.column-gap-0 {
+  -moz-column-gap: 0 !important;
+       column-gap: 0 !important;
+}
+
+.column-gap-1 {
+  -moz-column-gap: 0.25rem !important;
+       column-gap: 0.25rem !important;
+}
+
+.column-gap-2 {
+  -moz-column-gap: 0.5rem !important;
+       column-gap: 0.5rem !important;
+}
+
+.column-gap-3 {
+  -moz-column-gap: 1rem !important;
+       column-gap: 1rem !important;
+}
+
+.column-gap-4 {
+  -moz-column-gap: 1.5rem !important;
+       column-gap: 1.5rem !important;
+}
+
+.column-gap-5 {
+  -moz-column-gap: 2rem !important;
+       column-gap: 2rem !important;
+}
+
+.column-gap-6 {
+  -moz-column-gap: 3rem !important;
+       column-gap: 3rem !important;
+}
+
+.column-gap-7 {
+  -moz-column-gap: 5rem !important;
+       column-gap: 5rem !important;
+}
+
+.column-gap-8 {
+  -moz-column-gap: 8rem !important;
+       column-gap: 8rem !important;
+}
+
+.font-monospace {
+  font-family: var(--tblr-font-monospace) !important;
+}
+
+.fs-1 {
+  font-size: 1.5rem !important;
+}
+
+.fs-2 {
+  font-size: 1.25rem !important;
+}
+
+.fs-3 {
+  font-size: 1rem !important;
+}
+
+.fs-4 {
+  font-size: 0.875rem !important;
+}
+
+.fs-5 {
+  font-size: 0.75rem !important;
+}
+
+.fs-6 {
+  font-size: 0.625rem !important;
+}
+
+.fst-italic {
+  font-style: italic !important;
+}
+
+.fst-normal {
+  font-style: normal !important;
+}
+
+.fw-lighter {
+  font-weight: lighter !important;
+}
+
+.fw-light {
+  font-weight: 300 !important;
+}
+
+.fw-normal {
+  font-weight: 400 !important;
+}
+
+.fw-medium {
+  font-weight: 500 !important;
+}
+
+.fw-semibold {
+  font-weight: 600 !important;
+}
+
+.fw-bold {
+  font-weight: 600 !important;
+}
+
+.fw-bolder {
+  font-weight: bolder !important;
+}
+
+.lh-1 {
+  line-height: 1 !important;
+}
+
+.lh-sm {
+  line-height: 1.1428571429 !important;
+}
+
+.lh-base {
+  line-height: 1.4285714286 !important;
+}
+
+.lh-lg {
+  line-height: 1.7142857143 !important;
+}
+
+.text-start {
+  text-align: right !important;
+}
+
+.text-end {
+  text-align: left !important;
+}
+
+.text-center {
+  text-align: center !important;
+}
+
+.text-decoration-none {
+  text-decoration: none !important;
+}
+
+.text-decoration-underline {
+  text-decoration: underline !important;
+}
+
+.text-decoration-line-through {
+  text-decoration: line-through !important;
+}
+
+.text-lowercase {
+  text-transform: lowercase !important;
+}
+
+.text-uppercase {
+  text-transform: uppercase !important;
+}
+
+.text-capitalize {
+  text-transform: capitalize !important;
+}
+
+.text-wrap {
+  white-space: normal !important;
+}
+
+.text-nowrap {
+  white-space: nowrap !important;
+}
+.text-primary {
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-primary-rgb), var(--tblr-text-opacity)) !important;
+}
+
+.text-secondary {
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-secondary-rgb), var(--tblr-text-opacity)) !important;
+}
+
+.text-success {
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-success-rgb), var(--tblr-text-opacity)) !important;
+}
+
+.text-info {
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-info-rgb), var(--tblr-text-opacity)) !important;
+}
+
+.text-warning {
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-warning-rgb), var(--tblr-text-opacity)) !important;
+}
+
+.text-danger {
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-danger-rgb), var(--tblr-text-opacity)) !important;
+}
+
+.text-light {
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-light-rgb), var(--tblr-text-opacity)) !important;
+}
+
+.text-dark {
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-dark-rgb), var(--tblr-text-opacity)) !important;
+}
+
+.text-muted {
+  --tblr-text-opacity: 1;
+  color: var(--tblr-secondary-color) !important;
+}
+
+.text-blue {
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-blue-rgb), var(--tblr-text-opacity)) !important;
+}
+
+.text-azure {
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-azure-rgb), var(--tblr-text-opacity)) !important;
+}
+
+.text-indigo {
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-indigo-rgb), var(--tblr-text-opacity)) !important;
+}
+
+.text-purple {
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-purple-rgb), var(--tblr-text-opacity)) !important;
+}
+
+.text-pink {
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-pink-rgb), var(--tblr-text-opacity)) !important;
+}
+
+.text-red {
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-red-rgb), var(--tblr-text-opacity)) !important;
+}
+
+.text-orange {
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-orange-rgb), var(--tblr-text-opacity)) !important;
+}
+
+.text-yellow {
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-yellow-rgb), var(--tblr-text-opacity)) !important;
+}
+
+.text-lime {
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-lime-rgb), var(--tblr-text-opacity)) !important;
+}
+
+.text-green {
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-green-rgb), var(--tblr-text-opacity)) !important;
+}
+
+.text-teal {
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-teal-rgb), var(--tblr-text-opacity)) !important;
+}
+
+.text-cyan {
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-cyan-rgb), var(--tblr-text-opacity)) !important;
+}
+
+.text-facebook {
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-facebook-rgb), var(--tblr-text-opacity)) !important;
+}
+
+.text-twitter {
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-twitter-rgb), var(--tblr-text-opacity)) !important;
+}
+
+.text-linkedin {
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-linkedin-rgb), var(--tblr-text-opacity)) !important;
+}
+
+.text-google {
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-google-rgb), var(--tblr-text-opacity)) !important;
+}
+
+.text-youtube {
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-youtube-rgb), var(--tblr-text-opacity)) !important;
+}
+
+.text-vimeo {
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-vimeo-rgb), var(--tblr-text-opacity)) !important;
+}
+
+.text-dribbble {
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-dribbble-rgb), var(--tblr-text-opacity)) !important;
+}
+
+.text-github {
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-github-rgb), var(--tblr-text-opacity)) !important;
+}
+
+.text-instagram {
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-instagram-rgb), var(--tblr-text-opacity)) !important;
+}
+
+.text-pinterest {
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-pinterest-rgb), var(--tblr-text-opacity)) !important;
+}
+
+.text-vk {
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-vk-rgb), var(--tblr-text-opacity)) !important;
+}
+
+.text-rss {
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-rss-rgb), var(--tblr-text-opacity)) !important;
+}
+
+.text-flickr {
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-flickr-rgb), var(--tblr-text-opacity)) !important;
+}
+
+.text-bitbucket {
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-bitbucket-rgb), var(--tblr-text-opacity)) !important;
+}
+
+.text-tabler {
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-tabler-rgb), var(--tblr-text-opacity)) !important;
+}
+
+.text-black {
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-black-rgb), var(--tblr-text-opacity)) !important;
+}
+
+.text-white {
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-white-rgb), var(--tblr-text-opacity)) !important;
+}
+
+.text-body {
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-body-color-rgb), var(--tblr-text-opacity)) !important;
+}
+
+.text-black-50 {
+  --tblr-text-opacity: 1;
+  color: rgba(0, 0, 0, 0.5) !important;
+}
+
+.text-white-50 {
+  --tblr-text-opacity: 1;
+  color: rgba(255, 255, 255, 0.5) !important;
+}
+
+.text-body-secondary {
+  --tblr-text-opacity: 1;
+  color: var(--tblr-secondary-color) !important;
+}
+
+.text-body-tertiary {
+  --tblr-text-opacity: 1;
+  color: var(--tblr-tertiary-color) !important;
+}
+
+.text-body-emphasis {
+  --tblr-text-opacity: 1;
+  color: var(--tblr-emphasis-color) !important;
+}
+
+.text-reset {
+  --tblr-text-opacity: 1;
+  color: inherit !important;
+}
+
+.text-opacity-25 {
+  --tblr-text-opacity: 0.25;
+}
+
+.text-opacity-50 {
+  --tblr-text-opacity: 0.5;
+}
+
+.text-opacity-75 {
+  --tblr-text-opacity: 0.75;
+}
+
+.text-opacity-100 {
+  --tblr-text-opacity: 1;
+}
+
+.text-primary-emphasis {
+  color: var(--tblr-primary-text-emphasis) !important;
+}
+
+.text-secondary-emphasis {
+  color: var(--tblr-secondary-text-emphasis) !important;
+}
+
+.text-success-emphasis {
+  color: var(--tblr-success-text-emphasis) !important;
+}
+
+.text-info-emphasis {
+  color: var(--tblr-info-text-emphasis) !important;
+}
+
+.text-warning-emphasis {
+  color: var(--tblr-warning-text-emphasis) !important;
+}
+
+.text-danger-emphasis {
+  color: var(--tblr-danger-text-emphasis) !important;
+}
+
+.text-light-emphasis {
+  color: var(--tblr-light-text-emphasis) !important;
+}
+
+.text-dark-emphasis {
+  color: var(--tblr-dark-text-emphasis) !important;
+}
+
+.link-opacity-10 {
+  --tblr-link-opacity: 0.1;
+}
+
+.link-opacity-10-hover:hover {
+  --tblr-link-opacity: 0.1;
+}
+
+.link-opacity-25 {
+  --tblr-link-opacity: 0.25;
+}
+
+.link-opacity-25-hover:hover {
+  --tblr-link-opacity: 0.25;
+}
+
+.link-opacity-50 {
+  --tblr-link-opacity: 0.5;
+}
+
+.link-opacity-50-hover:hover {
+  --tblr-link-opacity: 0.5;
+}
+
+.link-opacity-75 {
+  --tblr-link-opacity: 0.75;
+}
+
+.link-opacity-75-hover:hover {
+  --tblr-link-opacity: 0.75;
+}
+
+.link-opacity-100 {
+  --tblr-link-opacity: 1;
+}
+
+.link-opacity-100-hover:hover {
+  --tblr-link-opacity: 1;
+}
+
+.link-offset-1 {
+  text-underline-offset: 0.125em !important;
+}
+
+.link-offset-1-hover:hover {
+  text-underline-offset: 0.125em !important;
+}
+
+.link-offset-2 {
+  text-underline-offset: 0.25em !important;
+}
+
+.link-offset-2-hover:hover {
+  text-underline-offset: 0.25em !important;
+}
+
+.link-offset-3 {
+  text-underline-offset: 0.375em !important;
+}
+
+.link-offset-3-hover:hover {
+  text-underline-offset: 0.375em !important;
+}
+
+.link-underline-primary {
+  --tblr-link-underline-opacity: 1;
+  -webkit-text-decoration-color: rgba(var(--tblr-primary-rgb), var(--tblr-link-underline-opacity)) !important;
+          text-decoration-color: rgba(var(--tblr-primary-rgb), var(--tblr-link-underline-opacity)) !important;
+}
+
+.link-underline-secondary {
+  --tblr-link-underline-opacity: 1;
+  -webkit-text-decoration-color: rgba(var(--tblr-secondary-rgb), var(--tblr-link-underline-opacity)) !important;
+          text-decoration-color: rgba(var(--tblr-secondary-rgb), var(--tblr-link-underline-opacity)) !important;
+}
+
+.link-underline-success {
+  --tblr-link-underline-opacity: 1;
+  -webkit-text-decoration-color: rgba(var(--tblr-success-rgb), var(--tblr-link-underline-opacity)) !important;
+          text-decoration-color: rgba(var(--tblr-success-rgb), var(--tblr-link-underline-opacity)) !important;
+}
+
+.link-underline-info {
+  --tblr-link-underline-opacity: 1;
+  -webkit-text-decoration-color: rgba(var(--tblr-info-rgb), var(--tblr-link-underline-opacity)) !important;
+          text-decoration-color: rgba(var(--tblr-info-rgb), var(--tblr-link-underline-opacity)) !important;
+}
+
+.link-underline-warning {
+  --tblr-link-underline-opacity: 1;
+  -webkit-text-decoration-color: rgba(var(--tblr-warning-rgb), var(--tblr-link-underline-opacity)) !important;
+          text-decoration-color: rgba(var(--tblr-warning-rgb), var(--tblr-link-underline-opacity)) !important;
+}
+
+.link-underline-danger {
+  --tblr-link-underline-opacity: 1;
+  -webkit-text-decoration-color: rgba(var(--tblr-danger-rgb), var(--tblr-link-underline-opacity)) !important;
+          text-decoration-color: rgba(var(--tblr-danger-rgb), var(--tblr-link-underline-opacity)) !important;
+}
+
+.link-underline-light {
+  --tblr-link-underline-opacity: 1;
+  -webkit-text-decoration-color: rgba(var(--tblr-light-rgb), var(--tblr-link-underline-opacity)) !important;
+          text-decoration-color: rgba(var(--tblr-light-rgb), var(--tblr-link-underline-opacity)) !important;
+}
+
+.link-underline-dark {
+  --tblr-link-underline-opacity: 1;
+  -webkit-text-decoration-color: rgba(var(--tblr-dark-rgb), var(--tblr-link-underline-opacity)) !important;
+          text-decoration-color: rgba(var(--tblr-dark-rgb), var(--tblr-link-underline-opacity)) !important;
+}
+
+.link-underline-muted {
+  --tblr-link-underline-opacity: 1;
+  -webkit-text-decoration-color: rgba(var(--tblr-muted-rgb), var(--tblr-link-underline-opacity)) !important;
+          text-decoration-color: rgba(var(--tblr-muted-rgb), var(--tblr-link-underline-opacity)) !important;
+}
+
+.link-underline-blue {
+  --tblr-link-underline-opacity: 1;
+  -webkit-text-decoration-color: rgba(var(--tblr-blue-rgb), var(--tblr-link-underline-opacity)) !important;
+          text-decoration-color: rgba(var(--tblr-blue-rgb), var(--tblr-link-underline-opacity)) !important;
+}
+
+.link-underline-azure {
+  --tblr-link-underline-opacity: 1;
+  -webkit-text-decoration-color: rgba(var(--tblr-azure-rgb), var(--tblr-link-underline-opacity)) !important;
+          text-decoration-color: rgba(var(--tblr-azure-rgb), var(--tblr-link-underline-opacity)) !important;
+}
+
+.link-underline-indigo {
+  --tblr-link-underline-opacity: 1;
+  -webkit-text-decoration-color: rgba(var(--tblr-indigo-rgb), var(--tblr-link-underline-opacity)) !important;
+          text-decoration-color: rgba(var(--tblr-indigo-rgb), var(--tblr-link-underline-opacity)) !important;
+}
+
+.link-underline-purple {
+  --tblr-link-underline-opacity: 1;
+  -webkit-text-decoration-color: rgba(var(--tblr-purple-rgb), var(--tblr-link-underline-opacity)) !important;
+          text-decoration-color: rgba(var(--tblr-purple-rgb), var(--tblr-link-underline-opacity)) !important;
+}
+
+.link-underline-pink {
+  --tblr-link-underline-opacity: 1;
+  -webkit-text-decoration-color: rgba(var(--tblr-pink-rgb), var(--tblr-link-underline-opacity)) !important;
+          text-decoration-color: rgba(var(--tblr-pink-rgb), var(--tblr-link-underline-opacity)) !important;
+}
+
+.link-underline-red {
+  --tblr-link-underline-opacity: 1;
+  -webkit-text-decoration-color: rgba(var(--tblr-red-rgb), var(--tblr-link-underline-opacity)) !important;
+          text-decoration-color: rgba(var(--tblr-red-rgb), var(--tblr-link-underline-opacity)) !important;
+}
+
+.link-underline-orange {
+  --tblr-link-underline-opacity: 1;
+  -webkit-text-decoration-color: rgba(var(--tblr-orange-rgb), var(--tblr-link-underline-opacity)) !important;
+          text-decoration-color: rgba(var(--tblr-orange-rgb), var(--tblr-link-underline-opacity)) !important;
+}
+
+.link-underline-yellow {
+  --tblr-link-underline-opacity: 1;
+  -webkit-text-decoration-color: rgba(var(--tblr-yellow-rgb), var(--tblr-link-underline-opacity)) !important;
+          text-decoration-color: rgba(var(--tblr-yellow-rgb), var(--tblr-link-underline-opacity)) !important;
+}
+
+.link-underline-lime {
+  --tblr-link-underline-opacity: 1;
+  -webkit-text-decoration-color: rgba(var(--tblr-lime-rgb), var(--tblr-link-underline-opacity)) !important;
+          text-decoration-color: rgba(var(--tblr-lime-rgb), var(--tblr-link-underline-opacity)) !important;
+}
+
+.link-underline-green {
+  --tblr-link-underline-opacity: 1;
+  -webkit-text-decoration-color: rgba(var(--tblr-green-rgb), var(--tblr-link-underline-opacity)) !important;
+          text-decoration-color: rgba(var(--tblr-green-rgb), var(--tblr-link-underline-opacity)) !important;
+}
+
+.link-underline-teal {
+  --tblr-link-underline-opacity: 1;
+  -webkit-text-decoration-color: rgba(var(--tblr-teal-rgb), var(--tblr-link-underline-opacity)) !important;
+          text-decoration-color: rgba(var(--tblr-teal-rgb), var(--tblr-link-underline-opacity)) !important;
+}
+
+.link-underline-cyan {
+  --tblr-link-underline-opacity: 1;
+  -webkit-text-decoration-color: rgba(var(--tblr-cyan-rgb), var(--tblr-link-underline-opacity)) !important;
+          text-decoration-color: rgba(var(--tblr-cyan-rgb), var(--tblr-link-underline-opacity)) !important;
+}
+
+.link-underline-facebook {
+  --tblr-link-underline-opacity: 1;
+  -webkit-text-decoration-color: rgba(var(--tblr-facebook-rgb), var(--tblr-link-underline-opacity)) !important;
+          text-decoration-color: rgba(var(--tblr-facebook-rgb), var(--tblr-link-underline-opacity)) !important;
+}
+
+.link-underline-twitter {
+  --tblr-link-underline-opacity: 1;
+  -webkit-text-decoration-color: rgba(var(--tblr-twitter-rgb), var(--tblr-link-underline-opacity)) !important;
+          text-decoration-color: rgba(var(--tblr-twitter-rgb), var(--tblr-link-underline-opacity)) !important;
+}
+
+.link-underline-linkedin {
+  --tblr-link-underline-opacity: 1;
+  -webkit-text-decoration-color: rgba(var(--tblr-linkedin-rgb), var(--tblr-link-underline-opacity)) !important;
+          text-decoration-color: rgba(var(--tblr-linkedin-rgb), var(--tblr-link-underline-opacity)) !important;
+}
+
+.link-underline-google {
+  --tblr-link-underline-opacity: 1;
+  -webkit-text-decoration-color: rgba(var(--tblr-google-rgb), var(--tblr-link-underline-opacity)) !important;
+          text-decoration-color: rgba(var(--tblr-google-rgb), var(--tblr-link-underline-opacity)) !important;
+}
+
+.link-underline-youtube {
+  --tblr-link-underline-opacity: 1;
+  -webkit-text-decoration-color: rgba(var(--tblr-youtube-rgb), var(--tblr-link-underline-opacity)) !important;
+          text-decoration-color: rgba(var(--tblr-youtube-rgb), var(--tblr-link-underline-opacity)) !important;
+}
+
+.link-underline-vimeo {
+  --tblr-link-underline-opacity: 1;
+  -webkit-text-decoration-color: rgba(var(--tblr-vimeo-rgb), var(--tblr-link-underline-opacity)) !important;
+          text-decoration-color: rgba(var(--tblr-vimeo-rgb), var(--tblr-link-underline-opacity)) !important;
+}
+
+.link-underline-dribbble {
+  --tblr-link-underline-opacity: 1;
+  -webkit-text-decoration-color: rgba(var(--tblr-dribbble-rgb), var(--tblr-link-underline-opacity)) !important;
+          text-decoration-color: rgba(var(--tblr-dribbble-rgb), var(--tblr-link-underline-opacity)) !important;
+}
+
+.link-underline-github {
+  --tblr-link-underline-opacity: 1;
+  -webkit-text-decoration-color: rgba(var(--tblr-github-rgb), var(--tblr-link-underline-opacity)) !important;
+          text-decoration-color: rgba(var(--tblr-github-rgb), var(--tblr-link-underline-opacity)) !important;
+}
+
+.link-underline-instagram {
+  --tblr-link-underline-opacity: 1;
+  -webkit-text-decoration-color: rgba(var(--tblr-instagram-rgb), var(--tblr-link-underline-opacity)) !important;
+          text-decoration-color: rgba(var(--tblr-instagram-rgb), var(--tblr-link-underline-opacity)) !important;
+}
+
+.link-underline-pinterest {
+  --tblr-link-underline-opacity: 1;
+  -webkit-text-decoration-color: rgba(var(--tblr-pinterest-rgb), var(--tblr-link-underline-opacity)) !important;
+          text-decoration-color: rgba(var(--tblr-pinterest-rgb), var(--tblr-link-underline-opacity)) !important;
+}
+
+.link-underline-vk {
+  --tblr-link-underline-opacity: 1;
+  -webkit-text-decoration-color: rgba(var(--tblr-vk-rgb), var(--tblr-link-underline-opacity)) !important;
+          text-decoration-color: rgba(var(--tblr-vk-rgb), var(--tblr-link-underline-opacity)) !important;
+}
+
+.link-underline-rss {
+  --tblr-link-underline-opacity: 1;
+  -webkit-text-decoration-color: rgba(var(--tblr-rss-rgb), var(--tblr-link-underline-opacity)) !important;
+          text-decoration-color: rgba(var(--tblr-rss-rgb), var(--tblr-link-underline-opacity)) !important;
+}
+
+.link-underline-flickr {
+  --tblr-link-underline-opacity: 1;
+  -webkit-text-decoration-color: rgba(var(--tblr-flickr-rgb), var(--tblr-link-underline-opacity)) !important;
+          text-decoration-color: rgba(var(--tblr-flickr-rgb), var(--tblr-link-underline-opacity)) !important;
+}
+
+.link-underline-bitbucket {
+  --tblr-link-underline-opacity: 1;
+  -webkit-text-decoration-color: rgba(var(--tblr-bitbucket-rgb), var(--tblr-link-underline-opacity)) !important;
+          text-decoration-color: rgba(var(--tblr-bitbucket-rgb), var(--tblr-link-underline-opacity)) !important;
+}
+
+.link-underline-tabler {
+  --tblr-link-underline-opacity: 1;
+  -webkit-text-decoration-color: rgba(var(--tblr-tabler-rgb), var(--tblr-link-underline-opacity)) !important;
+          text-decoration-color: rgba(var(--tblr-tabler-rgb), var(--tblr-link-underline-opacity)) !important;
+}
+
+.link-underline {
+  --tblr-link-underline-opacity: 1;
+  -webkit-text-decoration-color: rgba(var(--tblr-link-color-rgb), var(--tblr-link-underline-opacity, 1)) !important;
+          text-decoration-color: rgba(var(--tblr-link-color-rgb), var(--tblr-link-underline-opacity, 1)) !important;
+}
+
+.link-underline-opacity-0 {
+  --tblr-link-underline-opacity: 0;
+}
+
+.link-underline-opacity-0-hover:hover {
+  --tblr-link-underline-opacity: 0;
+}
+
+.link-underline-opacity-10 {
+  --tblr-link-underline-opacity: 0.1;
+}
+
+.link-underline-opacity-10-hover:hover {
+  --tblr-link-underline-opacity: 0.1;
+}
+
+.link-underline-opacity-25 {
+  --tblr-link-underline-opacity: 0.25;
+}
+
+.link-underline-opacity-25-hover:hover {
+  --tblr-link-underline-opacity: 0.25;
+}
+
+.link-underline-opacity-50 {
+  --tblr-link-underline-opacity: 0.5;
+}
+
+.link-underline-opacity-50-hover:hover {
+  --tblr-link-underline-opacity: 0.5;
+}
+
+.link-underline-opacity-75 {
+  --tblr-link-underline-opacity: 0.75;
+}
+
+.link-underline-opacity-75-hover:hover {
+  --tblr-link-underline-opacity: 0.75;
+}
+
+.link-underline-opacity-100 {
+  --tblr-link-underline-opacity: 1;
+}
+
+.link-underline-opacity-100-hover:hover {
+  --tblr-link-underline-opacity: 1;
+}
+
+.bg-primary {
+  --tblr-bg-opacity: 1;
+  background-color: rgba(var(--tblr-primary-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.bg-secondary {
+  --tblr-bg-opacity: 1;
+  background-color: rgba(var(--tblr-secondary-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.bg-success {
+  --tblr-bg-opacity: 1;
+  background-color: rgba(var(--tblr-success-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.bg-info {
+  --tblr-bg-opacity: 1;
+  background-color: rgba(var(--tblr-info-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.bg-warning {
+  --tblr-bg-opacity: 1;
+  background-color: rgba(var(--tblr-warning-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.bg-danger {
+  --tblr-bg-opacity: 1;
+  background-color: rgba(var(--tblr-danger-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.bg-light {
+  --tblr-bg-opacity: 1;
+  background-color: rgba(var(--tblr-light-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.bg-dark {
+  --tblr-bg-opacity: 1;
+  background-color: rgba(var(--tblr-dark-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.bg-muted {
+  --tblr-bg-opacity: 1;
+  background-color: rgba(var(--tblr-muted-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.bg-blue {
+  --tblr-bg-opacity: 1;
+  background-color: rgba(var(--tblr-blue-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.bg-azure {
+  --tblr-bg-opacity: 1;
+  background-color: rgba(var(--tblr-azure-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.bg-indigo {
+  --tblr-bg-opacity: 1;
+  background-color: rgba(var(--tblr-indigo-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.bg-purple {
+  --tblr-bg-opacity: 1;
+  background-color: rgba(var(--tblr-purple-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.bg-pink {
+  --tblr-bg-opacity: 1;
+  background-color: rgba(var(--tblr-pink-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.bg-red {
+  --tblr-bg-opacity: 1;
+  background-color: rgba(var(--tblr-red-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.bg-orange {
+  --tblr-bg-opacity: 1;
+  background-color: rgba(var(--tblr-orange-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.bg-yellow {
+  --tblr-bg-opacity: 1;
+  background-color: rgba(var(--tblr-yellow-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.bg-lime {
+  --tblr-bg-opacity: 1;
+  background-color: rgba(var(--tblr-lime-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.bg-green {
+  --tblr-bg-opacity: 1;
+  background-color: rgba(var(--tblr-green-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.bg-teal {
+  --tblr-bg-opacity: 1;
+  background-color: rgba(var(--tblr-teal-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.bg-cyan {
+  --tblr-bg-opacity: 1;
+  background-color: rgba(var(--tblr-cyan-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.bg-facebook {
+  --tblr-bg-opacity: 1;
+  background-color: rgba(var(--tblr-facebook-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.bg-twitter {
+  --tblr-bg-opacity: 1;
+  background-color: rgba(var(--tblr-twitter-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.bg-linkedin {
+  --tblr-bg-opacity: 1;
+  background-color: rgba(var(--tblr-linkedin-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.bg-google {
+  --tblr-bg-opacity: 1;
+  background-color: rgba(var(--tblr-google-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.bg-youtube {
+  --tblr-bg-opacity: 1;
+  background-color: rgba(var(--tblr-youtube-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.bg-vimeo {
+  --tblr-bg-opacity: 1;
+  background-color: rgba(var(--tblr-vimeo-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.bg-dribbble {
+  --tblr-bg-opacity: 1;
+  background-color: rgba(var(--tblr-dribbble-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.bg-github {
+  --tblr-bg-opacity: 1;
+  background-color: rgba(var(--tblr-github-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.bg-instagram {
+  --tblr-bg-opacity: 1;
+  background-color: rgba(var(--tblr-instagram-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.bg-pinterest {
+  --tblr-bg-opacity: 1;
+  background-color: rgba(var(--tblr-pinterest-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.bg-vk {
+  --tblr-bg-opacity: 1;
+  background-color: rgba(var(--tblr-vk-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.bg-rss {
+  --tblr-bg-opacity: 1;
+  background-color: rgba(var(--tblr-rss-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.bg-flickr {
+  --tblr-bg-opacity: 1;
+  background-color: rgba(var(--tblr-flickr-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.bg-bitbucket {
+  --tblr-bg-opacity: 1;
+  background-color: rgba(var(--tblr-bitbucket-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.bg-tabler {
+  --tblr-bg-opacity: 1;
+  background-color: rgba(var(--tblr-tabler-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.bg-black {
+  --tblr-bg-opacity: 1;
+  background-color: rgba(var(--tblr-black-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.bg-white {
+  --tblr-bg-opacity: 1;
+  background-color: rgba(var(--tblr-white-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.bg-body {
+  --tblr-bg-opacity: 1;
+  background-color: rgba(var(--tblr-body-bg-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.bg-transparent {
+  --tblr-bg-opacity: 1;
+  background-color: transparent !important;
+}
+
+.bg-body-secondary {
+  --tblr-bg-opacity: 1;
+  background-color: rgba(var(--tblr-secondary-bg-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.bg-body-tertiary {
+  --tblr-bg-opacity: 1;
+  background-color: rgba(var(--tblr-tertiary-bg-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.bg-opacity-10 {
+  --tblr-bg-opacity: 0.1;
+}
+
+.bg-opacity-25 {
+  --tblr-bg-opacity: 0.25;
+}
+
+.bg-opacity-50 {
+  --tblr-bg-opacity: 0.5;
+}
+
+.bg-opacity-75 {
+  --tblr-bg-opacity: 0.75;
+}
+
+.bg-opacity-100 {
+  --tblr-bg-opacity: 1;
+}
+
+.bg-primary-subtle {
+  background-color: var(--tblr-primary-bg-subtle) !important;
+}
+
+.bg-secondary-subtle {
+  background-color: var(--tblr-secondary-bg-subtle) !important;
+}
+
+.bg-success-subtle {
+  background-color: var(--tblr-success-bg-subtle) !important;
+}
+
+.bg-info-subtle {
+  background-color: var(--tblr-info-bg-subtle) !important;
+}
+
+.bg-warning-subtle {
+  background-color: var(--tblr-warning-bg-subtle) !important;
+}
+
+.bg-danger-subtle {
+  background-color: var(--tblr-danger-bg-subtle) !important;
+}
+
+.bg-light-subtle {
+  background-color: var(--tblr-light-bg-subtle) !important;
+}
+
+.bg-dark-subtle {
+  background-color: var(--tblr-dark-bg-subtle) !important;
+}
+
+.bg-gradient {
+  background-image: var(--tblr-gradient) !important;
+}
+
+.user-select-all {
+  -webkit-user-select: all !important;
+     -moz-user-select: all !important;
+          user-select: all !important;
+}
+
+.user-select-auto {
+  -webkit-user-select: auto !important;
+     -moz-user-select: auto !important;
+      -ms-user-select: auto !important;
+          user-select: auto !important;
+}
+
+.user-select-none {
+  -webkit-user-select: none !important;
+     -moz-user-select: none !important;
+      -ms-user-select: none !important;
+          user-select: none !important;
+}
+
+.pe-none {
+  pointer-events: none !important;
+}
+
+.pe-auto {
+  pointer-events: auto !important;
+}
+
+.rounded {
+  border-radius: var(--tblr-border-radius) !important;
+}
+
+.rounded-0 {
+  border-radius: 0 !important;
+}
+
+.rounded-1 {
+  border-radius: var(--tblr-border-radius-sm) !important;
+}
+
+.rounded-2 {
+  border-radius: var(--tblr-border-radius) !important;
+}
+
+.rounded-3 {
+  border-radius: var(--tblr-border-radius-lg) !important;
+}
+
+.rounded-4 {
+  border-radius: var(--tblr-border-radius-xl) !important;
+}
+
+.rounded-5 {
+  border-radius: var(--tblr-border-radius-xxl) !important;
+}
+
+.rounded-circle {
+  border-radius: 50% !important;
+}
+
+.rounded-pill {
+  border-radius: var(--tblr-border-radius-pill) !important;
+}
+
+.rounded-top {
+  border-top-right-radius: var(--tblr-border-radius) !important;
+  border-top-left-radius: var(--tblr-border-radius) !important;
+}
+
+.rounded-top-0 {
+  border-top-right-radius: 0 !important;
+  border-top-left-radius: 0 !important;
+}
+
+.rounded-top-1 {
+  border-top-right-radius: var(--tblr-border-radius-sm) !important;
+  border-top-left-radius: var(--tblr-border-radius-sm) !important;
+}
+
+.rounded-top-2 {
+  border-top-right-radius: var(--tblr-border-radius) !important;
+  border-top-left-radius: var(--tblr-border-radius) !important;
+}
+
+.rounded-top-3 {
+  border-top-right-radius: var(--tblr-border-radius-lg) !important;
+  border-top-left-radius: var(--tblr-border-radius-lg) !important;
+}
+
+.rounded-top-4 {
+  border-top-right-radius: var(--tblr-border-radius-xl) !important;
+  border-top-left-radius: var(--tblr-border-radius-xl) !important;
+}
+
+.rounded-top-5 {
+  border-top-right-radius: var(--tblr-border-radius-xxl) !important;
+  border-top-left-radius: var(--tblr-border-radius-xxl) !important;
+}
+
+.rounded-top-circle {
+  border-top-right-radius: 50% !important;
+  border-top-left-radius: 50% !important;
+}
+
+.rounded-top-pill {
+  border-top-right-radius: var(--tblr-border-radius-pill) !important;
+  border-top-left-radius: var(--tblr-border-radius-pill) !important;
+}
+
+.rounded-end {
+  border-top-left-radius: var(--tblr-border-radius) !important;
+  border-bottom-left-radius: var(--tblr-border-radius) !important;
+}
+
+.rounded-end-0 {
+  border-top-left-radius: 0 !important;
+  border-bottom-left-radius: 0 !important;
+}
+
+.rounded-end-1 {
+  border-top-left-radius: var(--tblr-border-radius-sm) !important;
+  border-bottom-left-radius: var(--tblr-border-radius-sm) !important;
+}
+
+.rounded-end-2 {
+  border-top-left-radius: var(--tblr-border-radius) !important;
+  border-bottom-left-radius: var(--tblr-border-radius) !important;
+}
+
+.rounded-end-3 {
+  border-top-left-radius: var(--tblr-border-radius-lg) !important;
+  border-bottom-left-radius: var(--tblr-border-radius-lg) !important;
+}
+
+.rounded-end-4 {
+  border-top-left-radius: var(--tblr-border-radius-xl) !important;
+  border-bottom-left-radius: var(--tblr-border-radius-xl) !important;
+}
+
+.rounded-end-5 {
+  border-top-left-radius: var(--tblr-border-radius-xxl) !important;
+  border-bottom-left-radius: var(--tblr-border-radius-xxl) !important;
+}
+
+.rounded-end-circle {
+  border-top-left-radius: 50% !important;
+  border-bottom-left-radius: 50% !important;
+}
+
+.rounded-end-pill {
+  border-top-left-radius: var(--tblr-border-radius-pill) !important;
+  border-bottom-left-radius: var(--tblr-border-radius-pill) !important;
+}
+
+.rounded-bottom {
+  border-bottom-left-radius: var(--tblr-border-radius) !important;
+  border-bottom-right-radius: var(--tblr-border-radius) !important;
+}
+
+.rounded-bottom-0 {
+  border-bottom-left-radius: 0 !important;
+  border-bottom-right-radius: 0 !important;
+}
+
+.rounded-bottom-1 {
+  border-bottom-left-radius: var(--tblr-border-radius-sm) !important;
+  border-bottom-right-radius: var(--tblr-border-radius-sm) !important;
+}
+
+.rounded-bottom-2 {
+  border-bottom-left-radius: var(--tblr-border-radius) !important;
+  border-bottom-right-radius: var(--tblr-border-radius) !important;
+}
+
+.rounded-bottom-3 {
+  border-bottom-left-radius: var(--tblr-border-radius-lg) !important;
+  border-bottom-right-radius: var(--tblr-border-radius-lg) !important;
+}
+
+.rounded-bottom-4 {
+  border-bottom-left-radius: var(--tblr-border-radius-xl) !important;
+  border-bottom-right-radius: var(--tblr-border-radius-xl) !important;
+}
+
+.rounded-bottom-5 {
+  border-bottom-left-radius: var(--tblr-border-radius-xxl) !important;
+  border-bottom-right-radius: var(--tblr-border-radius-xxl) !important;
+}
+
+.rounded-bottom-circle {
+  border-bottom-left-radius: 50% !important;
+  border-bottom-right-radius: 50% !important;
+}
+
+.rounded-bottom-pill {
+  border-bottom-left-radius: var(--tblr-border-radius-pill) !important;
+  border-bottom-right-radius: var(--tblr-border-radius-pill) !important;
+}
+
+.rounded-start {
+  border-bottom-right-radius: var(--tblr-border-radius) !important;
+  border-top-right-radius: var(--tblr-border-radius) !important;
+}
+
+.rounded-start-0 {
+  border-bottom-right-radius: 0 !important;
+  border-top-right-radius: 0 !important;
+}
+
+.rounded-start-1 {
+  border-bottom-right-radius: var(--tblr-border-radius-sm) !important;
+  border-top-right-radius: var(--tblr-border-radius-sm) !important;
+}
+
+.rounded-start-2 {
+  border-bottom-right-radius: var(--tblr-border-radius) !important;
+  border-top-right-radius: var(--tblr-border-radius) !important;
+}
+
+.rounded-start-3 {
+  border-bottom-right-radius: var(--tblr-border-radius-lg) !important;
+  border-top-right-radius: var(--tblr-border-radius-lg) !important;
+}
+
+.rounded-start-4 {
+  border-bottom-right-radius: var(--tblr-border-radius-xl) !important;
+  border-top-right-radius: var(--tblr-border-radius-xl) !important;
+}
+
+.rounded-start-5 {
+  border-bottom-right-radius: var(--tblr-border-radius-xxl) !important;
+  border-top-right-radius: var(--tblr-border-radius-xxl) !important;
+}
+
+.rounded-start-circle {
+  border-bottom-right-radius: 50% !important;
+  border-top-right-radius: 50% !important;
+}
+
+.rounded-start-pill {
+  border-bottom-right-radius: var(--tblr-border-radius-pill) !important;
+  border-top-right-radius: var(--tblr-border-radius-pill) !important;
+}
+
+.visible {
+  visibility: visible !important;
+}
+
+.invisible {
+  visibility: hidden !important;
+}
+
+.z-n1 {
+  z-index: -1 !important;
+}
+
+.z-0 {
+  z-index: 0 !important;
+}
+
+.z-1 {
+  z-index: 1 !important;
+}
+
+.z-2 {
+  z-index: 2 !important;
+}
+
+.z-3 {
+  z-index: 3 !important;
+}
+
+.object-contain {
+  -o-object-fit: contain !important;
+     object-fit: contain !important;
+}
+
+.object-cover {
+  -o-object-fit: cover !important;
+     object-fit: cover !important;
+}
+
+.object-fill {
+  -o-object-fit: fill !important;
+     object-fit: fill !important;
+}
+
+.object-scale-down {
+  -o-object-fit: scale-down !important;
+     object-fit: scale-down !important;
+}
+
+.object-none {
+  -o-object-fit: none !important;
+     object-fit: none !important;
+}
+
+.tracking-tight {
+  letter-spacing: -0.05em !important;
+}
+
+.tracking-normal {
+  letter-spacing: 0 !important;
+}
+
+.tracking-wide {
+  letter-spacing: 0.05em !important;
+}
+
+.cursor-auto {
+  cursor: auto !important;
+}
+
+.cursor-pointer {
+  cursor: pointer !important;
+}
+
+.cursor-move {
+  cursor: move !important;
+}
+
+.cursor-not-allowed {
+  cursor: not-allowed !important;
+}
+
+.cursor-zoom-in {
+  cursor: zoom-in !important;
+}
+
+.cursor-zoom-out {
+  cursor: zoom-out !important;
+}
+
+.cursor-default {
+  cursor: default !important;
+}
+
+.cursor-none {
+  cursor: none !important;
+}
+
+.cursor-help {
+  cursor: help !important;
+}
+
+.cursor-progress {
+  cursor: progress !important;
+}
+
+.cursor-wait {
+  cursor: wait !important;
+}
+
+.cursor-text {
+  cursor: text !important;
+}
+
+.cursor-v-text {
+  cursor: vertical-text !important;
+}
+
+.cursor-grab {
+  cursor: -webkit-grab !important;
+  cursor: grab !important;
+}
+
+.cursor-grabbing {
+  cursor: -webkit-grabbing !important;
+  cursor: grabbing !important;
+}
+
+.border-x {
+  border-right: var(--tblr-border-width) var(--tblr-border-style) rgba(4, 32, 69, 0.14) !important;
+  border-left: var(--tblr-border-width) var(--tblr-border-style) rgba(4, 32, 69, 0.14) !important;
+}
+
+.border-x-wide {
+  border-right: 2px var(--tblr-border-style) rgba(4, 32, 69, 0.14) !important;
+  border-left: 2px var(--tblr-border-style) rgba(4, 32, 69, 0.14) !important;
+}
+
+.border-x-0 {
+  border-right: 0 !important;
+  border-left: 0 !important;
+}
+
+.border-y {
+  border-top: var(--tblr-border-width) var(--tblr-border-style) rgba(4, 32, 69, 0.14) !important;
+  border-bottom: var(--tblr-border-width) var(--tblr-border-style) rgba(4, 32, 69, 0.14) !important;
+}
+
+.border-y-wide {
+  border-top: 2px var(--tblr-border-style) rgba(4, 32, 69, 0.14) !important;
+  border-bottom: 2px var(--tblr-border-style) rgba(4, 32, 69, 0.14) !important;
+}
+
+.border-y-0 {
+  border-top: 0 !important;
+  border-bottom: 0 !important;
+}
+
+.columns-2 {
+  -moz-columns: 2 !important;
+       columns: 2 !important;
+}
+
+.columns-3 {
+  -moz-columns: 3 !important;
+       columns: 3 !important;
+}
+
+.columns-4 {
+  -moz-columns: 4 !important;
+       columns: 4 !important;
+}
+
+@media (min-width: 576px) {
+  .float-sm-start {
+    float: right !important;
+  }
+  .float-sm-end {
+    float: left !important;
+  }
+  .float-sm-none {
+    float: none !important;
+  }
+  .object-fit-sm-contain {
+    -o-object-fit: contain !important;
+       object-fit: contain !important;
+  }
+  .object-fit-sm-cover {
+    -o-object-fit: cover !important;
+       object-fit: cover !important;
+  }
+  .object-fit-sm-fill {
+    -o-object-fit: fill !important;
+       object-fit: fill !important;
+  }
+  .object-fit-sm-scale {
+    -o-object-fit: scale-down !important;
+       object-fit: scale-down !important;
+  }
+  .object-fit-sm-none {
+    -o-object-fit: none !important;
+       object-fit: none !important;
+  }
+  .d-sm-inline {
+    display: inline !important;
+  }
+  .d-sm-inline-block {
+    display: inline-block !important;
+  }
+  .d-sm-block {
+    display: block !important;
+  }
+  .d-sm-grid {
+    display: grid !important;
+  }
+  .d-sm-inline-grid {
+    display: inline-grid !important;
+  }
+  .d-sm-table {
+    display: table !important;
+  }
+  .d-sm-table-row {
+    display: table-row !important;
+  }
+  .d-sm-table-cell {
+    display: table-cell !important;
+  }
+  .d-sm-flex {
+    display: flex !important;
+  }
+  .d-sm-inline-flex {
+    display: inline-flex !important;
+  }
+  .d-sm-none {
+    display: none !important;
+  }
+  .flex-sm-fill {
+    flex: 1 1 auto !important;
+  }
+  .flex-sm-row {
+    flex-direction: row !important;
+  }
+  .flex-sm-column {
+    flex-direction: column !important;
+  }
+  .flex-sm-row-reverse {
+    flex-direction: row-reverse !important;
+  }
+  .flex-sm-column-reverse {
+    flex-direction: column-reverse !important;
+  }
+  .flex-sm-grow-0 {
+    flex-grow: 0 !important;
+  }
+  .flex-sm-grow-1 {
+    flex-grow: 1 !important;
+  }
+  .flex-sm-shrink-0 {
+    flex-shrink: 0 !important;
+  }
+  .flex-sm-shrink-1 {
+    flex-shrink: 1 !important;
+  }
+  .flex-sm-wrap {
+    flex-wrap: wrap !important;
+  }
+  .flex-sm-nowrap {
+    flex-wrap: nowrap !important;
+  }
+  .flex-sm-wrap-reverse {
+    flex-wrap: wrap-reverse !important;
+  }
+  .justify-content-sm-start {
+    justify-content: flex-start !important;
+  }
+  .justify-content-sm-end {
+    justify-content: flex-end !important;
+  }
+  .justify-content-sm-center {
+    justify-content: center !important;
+  }
+  .justify-content-sm-between {
+    justify-content: space-between !important;
+  }
+  .justify-content-sm-around {
+    justify-content: space-around !important;
+  }
+  .justify-content-sm-evenly {
+    justify-content: space-evenly !important;
+  }
+  .align-items-sm-start {
+    align-items: flex-start !important;
+  }
+  .align-items-sm-end {
+    align-items: flex-end !important;
+  }
+  .align-items-sm-center {
+    align-items: center !important;
+  }
+  .align-items-sm-baseline {
+    align-items: baseline !important;
+  }
+  .align-items-sm-stretch {
+    align-items: stretch !important;
+  }
+  .align-content-sm-start {
+    align-content: flex-start !important;
+  }
+  .align-content-sm-end {
+    align-content: flex-end !important;
+  }
+  .align-content-sm-center {
+    align-content: center !important;
+  }
+  .align-content-sm-between {
+    align-content: space-between !important;
+  }
+  .align-content-sm-around {
+    align-content: space-around !important;
+  }
+  .align-content-sm-stretch {
+    align-content: stretch !important;
+  }
+  .align-self-sm-auto {
+    align-self: auto !important;
+  }
+  .align-self-sm-start {
+    align-self: flex-start !important;
+  }
+  .align-self-sm-end {
+    align-self: flex-end !important;
+  }
+  .align-self-sm-center {
+    align-self: center !important;
+  }
+  .align-self-sm-baseline {
+    align-self: baseline !important;
+  }
+  .align-self-sm-stretch {
+    align-self: stretch !important;
+  }
+  .order-sm-first {
+    order: -1 !important;
+  }
+  .order-sm-0 {
+    order: 0 !important;
+  }
+  .order-sm-1 {
+    order: 1 !important;
+  }
+  .order-sm-2 {
+    order: 2 !important;
+  }
+  .order-sm-3 {
+    order: 3 !important;
+  }
+  .order-sm-4 {
+    order: 4 !important;
+  }
+  .order-sm-5 {
+    order: 5 !important;
+  }
+  .order-sm-last {
+    order: 6 !important;
+  }
+  .m-sm-0 {
+    margin: 0 !important;
+  }
+  .m-sm-1 {
+    margin: 0.25rem !important;
+  }
+  .m-sm-2 {
+    margin: 0.5rem !important;
+  }
+  .m-sm-3 {
+    margin: 1rem !important;
+  }
+  .m-sm-4 {
+    margin: 1.5rem !important;
+  }
+  .m-sm-5 {
+    margin: 2rem !important;
+  }
+  .m-sm-6 {
+    margin: 3rem !important;
+  }
+  .m-sm-7 {
+    margin: 5rem !important;
+  }
+  .m-sm-8 {
+    margin: 8rem !important;
+  }
+  .m-sm-auto {
+    margin: auto !important;
+  }
+  .mx-sm-0 {
+    margin-left: 0 !important;
+    margin-right: 0 !important;
+  }
+  .mx-sm-1 {
+    margin-left: 0.25rem !important;
+    margin-right: 0.25rem !important;
+  }
+  .mx-sm-2 {
+    margin-left: 0.5rem !important;
+    margin-right: 0.5rem !important;
+  }
+  .mx-sm-3 {
+    margin-left: 1rem !important;
+    margin-right: 1rem !important;
+  }
+  .mx-sm-4 {
+    margin-left: 1.5rem !important;
+    margin-right: 1.5rem !important;
+  }
+  .mx-sm-5 {
+    margin-left: 2rem !important;
+    margin-right: 2rem !important;
+  }
+  .mx-sm-6 {
+    margin-left: 3rem !important;
+    margin-right: 3rem !important;
+  }
+  .mx-sm-7 {
+    margin-left: 5rem !important;
+    margin-right: 5rem !important;
+  }
+  .mx-sm-8 {
+    margin-left: 8rem !important;
+    margin-right: 8rem !important;
+  }
+  .mx-sm-auto {
+    margin-left: auto !important;
+    margin-right: auto !important;
+  }
+  .my-sm-0 {
+    margin-top: 0 !important;
+    margin-bottom: 0 !important;
+  }
+  .my-sm-1 {
+    margin-top: 0.25rem !important;
+    margin-bottom: 0.25rem !important;
+  }
+  .my-sm-2 {
+    margin-top: 0.5rem !important;
+    margin-bottom: 0.5rem !important;
+  }
+  .my-sm-3 {
+    margin-top: 1rem !important;
+    margin-bottom: 1rem !important;
+  }
+  .my-sm-4 {
+    margin-top: 1.5rem !important;
+    margin-bottom: 1.5rem !important;
+  }
+  .my-sm-5 {
+    margin-top: 2rem !important;
+    margin-bottom: 2rem !important;
+  }
+  .my-sm-6 {
+    margin-top: 3rem !important;
+    margin-bottom: 3rem !important;
+  }
+  .my-sm-7 {
+    margin-top: 5rem !important;
+    margin-bottom: 5rem !important;
+  }
+  .my-sm-8 {
+    margin-top: 8rem !important;
+    margin-bottom: 8rem !important;
+  }
+  .my-sm-auto {
+    margin-top: auto !important;
+    margin-bottom: auto !important;
+  }
+  .mt-sm-0 {
+    margin-top: 0 !important;
+  }
+  .mt-sm-1 {
+    margin-top: 0.25rem !important;
+  }
+  .mt-sm-2 {
+    margin-top: 0.5rem !important;
+  }
+  .mt-sm-3 {
+    margin-top: 1rem !important;
+  }
+  .mt-sm-4 {
+    margin-top: 1.5rem !important;
+  }
+  .mt-sm-5 {
+    margin-top: 2rem !important;
+  }
+  .mt-sm-6 {
+    margin-top: 3rem !important;
+  }
+  .mt-sm-7 {
+    margin-top: 5rem !important;
+  }
+  .mt-sm-8 {
+    margin-top: 8rem !important;
+  }
+  .mt-sm-auto {
+    margin-top: auto !important;
+  }
+  .me-sm-0 {
+    margin-left: 0 !important;
+  }
+  .me-sm-1 {
+    margin-left: 0.25rem !important;
+  }
+  .me-sm-2 {
+    margin-left: 0.5rem !important;
+  }
+  .me-sm-3 {
+    margin-left: 1rem !important;
+  }
+  .me-sm-4 {
+    margin-left: 1.5rem !important;
+  }
+  .me-sm-5 {
+    margin-left: 2rem !important;
+  }
+  .me-sm-6 {
+    margin-left: 3rem !important;
+  }
+  .me-sm-7 {
+    margin-left: 5rem !important;
+  }
+  .me-sm-8 {
+    margin-left: 8rem !important;
+  }
+  .me-sm-auto {
+    margin-left: auto !important;
+  }
+  .mb-sm-0 {
+    margin-bottom: 0 !important;
+  }
+  .mb-sm-1 {
+    margin-bottom: 0.25rem !important;
+  }
+  .mb-sm-2 {
+    margin-bottom: 0.5rem !important;
+  }
+  .mb-sm-3 {
+    margin-bottom: 1rem !important;
+  }
+  .mb-sm-4 {
+    margin-bottom: 1.5rem !important;
+  }
+  .mb-sm-5 {
+    margin-bottom: 2rem !important;
+  }
+  .mb-sm-6 {
+    margin-bottom: 3rem !important;
+  }
+  .mb-sm-7 {
+    margin-bottom: 5rem !important;
+  }
+  .mb-sm-8 {
+    margin-bottom: 8rem !important;
+  }
+  .mb-sm-auto {
+    margin-bottom: auto !important;
+  }
+  .ms-sm-0 {
+    margin-right: 0 !important;
+  }
+  .ms-sm-1 {
+    margin-right: 0.25rem !important;
+  }
+  .ms-sm-2 {
+    margin-right: 0.5rem !important;
+  }
+  .ms-sm-3 {
+    margin-right: 1rem !important;
+  }
+  .ms-sm-4 {
+    margin-right: 1.5rem !important;
+  }
+  .ms-sm-5 {
+    margin-right: 2rem !important;
+  }
+  .ms-sm-6 {
+    margin-right: 3rem !important;
+  }
+  .ms-sm-7 {
+    margin-right: 5rem !important;
+  }
+  .ms-sm-8 {
+    margin-right: 8rem !important;
+  }
+  .ms-sm-auto {
+    margin-right: auto !important;
+  }
+  .p-sm-0 {
+    padding: 0 !important;
+  }
+  .p-sm-1 {
+    padding: 0.25rem !important;
+  }
+  .p-sm-2 {
+    padding: 0.5rem !important;
+  }
+  .p-sm-3 {
+    padding: 1rem !important;
+  }
+  .p-sm-4 {
+    padding: 1.5rem !important;
+  }
+  .p-sm-5 {
+    padding: 2rem !important;
+  }
+  .p-sm-6 {
+    padding: 3rem !important;
+  }
+  .p-sm-7 {
+    padding: 5rem !important;
+  }
+  .p-sm-8 {
+    padding: 8rem !important;
+  }
+  .px-sm-0 {
+    padding-left: 0 !important;
+    padding-right: 0 !important;
+  }
+  .px-sm-1 {
+    padding-left: 0.25rem !important;
+    padding-right: 0.25rem !important;
+  }
+  .px-sm-2 {
+    padding-left: 0.5rem !important;
+    padding-right: 0.5rem !important;
+  }
+  .px-sm-3 {
+    padding-left: 1rem !important;
+    padding-right: 1rem !important;
+  }
+  .px-sm-4 {
+    padding-left: 1.5rem !important;
+    padding-right: 1.5rem !important;
+  }
+  .px-sm-5 {
+    padding-left: 2rem !important;
+    padding-right: 2rem !important;
+  }
+  .px-sm-6 {
+    padding-left: 3rem !important;
+    padding-right: 3rem !important;
+  }
+  .px-sm-7 {
+    padding-left: 5rem !important;
+    padding-right: 5rem !important;
+  }
+  .px-sm-8 {
+    padding-left: 8rem !important;
+    padding-right: 8rem !important;
+  }
+  .py-sm-0 {
+    padding-top: 0 !important;
+    padding-bottom: 0 !important;
+  }
+  .py-sm-1 {
+    padding-top: 0.25rem !important;
+    padding-bottom: 0.25rem !important;
+  }
+  .py-sm-2 {
+    padding-top: 0.5rem !important;
+    padding-bottom: 0.5rem !important;
+  }
+  .py-sm-3 {
+    padding-top: 1rem !important;
+    padding-bottom: 1rem !important;
+  }
+  .py-sm-4 {
+    padding-top: 1.5rem !important;
+    padding-bottom: 1.5rem !important;
+  }
+  .py-sm-5 {
+    padding-top: 2rem !important;
+    padding-bottom: 2rem !important;
+  }
+  .py-sm-6 {
+    padding-top: 3rem !important;
+    padding-bottom: 3rem !important;
+  }
+  .py-sm-7 {
+    padding-top: 5rem !important;
+    padding-bottom: 5rem !important;
+  }
+  .py-sm-8 {
+    padding-top: 8rem !important;
+    padding-bottom: 8rem !important;
+  }
+  .pt-sm-0 {
+    padding-top: 0 !important;
+  }
+  .pt-sm-1 {
+    padding-top: 0.25rem !important;
+  }
+  .pt-sm-2 {
+    padding-top: 0.5rem !important;
+  }
+  .pt-sm-3 {
+    padding-top: 1rem !important;
+  }
+  .pt-sm-4 {
+    padding-top: 1.5rem !important;
+  }
+  .pt-sm-5 {
+    padding-top: 2rem !important;
+  }
+  .pt-sm-6 {
+    padding-top: 3rem !important;
+  }
+  .pt-sm-7 {
+    padding-top: 5rem !important;
+  }
+  .pt-sm-8 {
+    padding-top: 8rem !important;
+  }
+  .pe-sm-0 {
+    padding-left: 0 !important;
+  }
+  .pe-sm-1 {
+    padding-left: 0.25rem !important;
+  }
+  .pe-sm-2 {
+    padding-left: 0.5rem !important;
+  }
+  .pe-sm-3 {
+    padding-left: 1rem !important;
+  }
+  .pe-sm-4 {
+    padding-left: 1.5rem !important;
+  }
+  .pe-sm-5 {
+    padding-left: 2rem !important;
+  }
+  .pe-sm-6 {
+    padding-left: 3rem !important;
+  }
+  .pe-sm-7 {
+    padding-left: 5rem !important;
+  }
+  .pe-sm-8 {
+    padding-left: 8rem !important;
+  }
+  .pb-sm-0 {
+    padding-bottom: 0 !important;
+  }
+  .pb-sm-1 {
+    padding-bottom: 0.25rem !important;
+  }
+  .pb-sm-2 {
+    padding-bottom: 0.5rem !important;
+  }
+  .pb-sm-3 {
+    padding-bottom: 1rem !important;
+  }
+  .pb-sm-4 {
+    padding-bottom: 1.5rem !important;
+  }
+  .pb-sm-5 {
+    padding-bottom: 2rem !important;
+  }
+  .pb-sm-6 {
+    padding-bottom: 3rem !important;
+  }
+  .pb-sm-7 {
+    padding-bottom: 5rem !important;
+  }
+  .pb-sm-8 {
+    padding-bottom: 8rem !important;
+  }
+  .ps-sm-0 {
+    padding-right: 0 !important;
+  }
+  .ps-sm-1 {
+    padding-right: 0.25rem !important;
+  }
+  .ps-sm-2 {
+    padding-right: 0.5rem !important;
+  }
+  .ps-sm-3 {
+    padding-right: 1rem !important;
+  }
+  .ps-sm-4 {
+    padding-right: 1.5rem !important;
+  }
+  .ps-sm-5 {
+    padding-right: 2rem !important;
+  }
+  .ps-sm-6 {
+    padding-right: 3rem !important;
+  }
+  .ps-sm-7 {
+    padding-right: 5rem !important;
+  }
+  .ps-sm-8 {
+    padding-right: 8rem !important;
+  }
+  .gap-sm-0 {
+    gap: 0 !important;
+  }
+  .gap-sm-1 {
+    gap: 0.25rem !important;
+  }
+  .gap-sm-2 {
+    gap: 0.5rem !important;
+  }
+  .gap-sm-3 {
+    gap: 1rem !important;
+  }
+  .gap-sm-4 {
+    gap: 1.5rem !important;
+  }
+  .gap-sm-5 {
+    gap: 2rem !important;
+  }
+  .gap-sm-6 {
+    gap: 3rem !important;
+  }
+  .gap-sm-7 {
+    gap: 5rem !important;
+  }
+  .gap-sm-8 {
+    gap: 8rem !important;
+  }
+  .row-gap-sm-0 {
+    row-gap: 0 !important;
+  }
+  .row-gap-sm-1 {
+    row-gap: 0.25rem !important;
+  }
+  .row-gap-sm-2 {
+    row-gap: 0.5rem !important;
+  }
+  .row-gap-sm-3 {
+    row-gap: 1rem !important;
+  }
+  .row-gap-sm-4 {
+    row-gap: 1.5rem !important;
+  }
+  .row-gap-sm-5 {
+    row-gap: 2rem !important;
+  }
+  .row-gap-sm-6 {
+    row-gap: 3rem !important;
+  }
+  .row-gap-sm-7 {
+    row-gap: 5rem !important;
+  }
+  .row-gap-sm-8 {
+    row-gap: 8rem !important;
+  }
+  .column-gap-sm-0 {
+    -moz-column-gap: 0 !important;
+         column-gap: 0 !important;
+  }
+  .column-gap-sm-1 {
+    -moz-column-gap: 0.25rem !important;
+         column-gap: 0.25rem !important;
+  }
+  .column-gap-sm-2 {
+    -moz-column-gap: 0.5rem !important;
+         column-gap: 0.5rem !important;
+  }
+  .column-gap-sm-3 {
+    -moz-column-gap: 1rem !important;
+         column-gap: 1rem !important;
+  }
+  .column-gap-sm-4 {
+    -moz-column-gap: 1.5rem !important;
+         column-gap: 1.5rem !important;
+  }
+  .column-gap-sm-5 {
+    -moz-column-gap: 2rem !important;
+         column-gap: 2rem !important;
+  }
+  .column-gap-sm-6 {
+    -moz-column-gap: 3rem !important;
+         column-gap: 3rem !important;
+  }
+  .column-gap-sm-7 {
+    -moz-column-gap: 5rem !important;
+         column-gap: 5rem !important;
+  }
+  .column-gap-sm-8 {
+    -moz-column-gap: 8rem !important;
+         column-gap: 8rem !important;
+  }
+  .text-sm-start {
+    text-align: right !important;
+  }
+  .text-sm-end {
+    text-align: left !important;
+  }
+  .text-sm-center {
+    text-align: center !important;
+  }
+  .columns-sm-2 {
+    -moz-columns: 2 !important;
+         columns: 2 !important;
+  }
+  .columns-sm-3 {
+    -moz-columns: 3 !important;
+         columns: 3 !important;
+  }
+  .columns-sm-4 {
+    -moz-columns: 4 !important;
+         columns: 4 !important;
+  }
+}
+@media (min-width: 768px) {
+  .float-md-start {
+    float: right !important;
+  }
+  .float-md-end {
+    float: left !important;
+  }
+  .float-md-none {
+    float: none !important;
+  }
+  .object-fit-md-contain {
+    -o-object-fit: contain !important;
+       object-fit: contain !important;
+  }
+  .object-fit-md-cover {
+    -o-object-fit: cover !important;
+       object-fit: cover !important;
+  }
+  .object-fit-md-fill {
+    -o-object-fit: fill !important;
+       object-fit: fill !important;
+  }
+  .object-fit-md-scale {
+    -o-object-fit: scale-down !important;
+       object-fit: scale-down !important;
+  }
+  .object-fit-md-none {
+    -o-object-fit: none !important;
+       object-fit: none !important;
+  }
+  .d-md-inline {
+    display: inline !important;
+  }
+  .d-md-inline-block {
+    display: inline-block !important;
+  }
+  .d-md-block {
+    display: block !important;
+  }
+  .d-md-grid {
+    display: grid !important;
+  }
+  .d-md-inline-grid {
+    display: inline-grid !important;
+  }
+  .d-md-table {
+    display: table !important;
+  }
+  .d-md-table-row {
+    display: table-row !important;
+  }
+  .d-md-table-cell {
+    display: table-cell !important;
+  }
+  .d-md-flex {
+    display: flex !important;
+  }
+  .d-md-inline-flex {
+    display: inline-flex !important;
+  }
+  .d-md-none {
+    display: none !important;
+  }
+  .flex-md-fill {
+    flex: 1 1 auto !important;
+  }
+  .flex-md-row {
+    flex-direction: row !important;
+  }
+  .flex-md-column {
+    flex-direction: column !important;
+  }
+  .flex-md-row-reverse {
+    flex-direction: row-reverse !important;
+  }
+  .flex-md-column-reverse {
+    flex-direction: column-reverse !important;
+  }
+  .flex-md-grow-0 {
+    flex-grow: 0 !important;
+  }
+  .flex-md-grow-1 {
+    flex-grow: 1 !important;
+  }
+  .flex-md-shrink-0 {
+    flex-shrink: 0 !important;
+  }
+  .flex-md-shrink-1 {
+    flex-shrink: 1 !important;
+  }
+  .flex-md-wrap {
+    flex-wrap: wrap !important;
+  }
+  .flex-md-nowrap {
+    flex-wrap: nowrap !important;
+  }
+  .flex-md-wrap-reverse {
+    flex-wrap: wrap-reverse !important;
+  }
+  .justify-content-md-start {
+    justify-content: flex-start !important;
+  }
+  .justify-content-md-end {
+    justify-content: flex-end !important;
+  }
+  .justify-content-md-center {
+    justify-content: center !important;
+  }
+  .justify-content-md-between {
+    justify-content: space-between !important;
+  }
+  .justify-content-md-around {
+    justify-content: space-around !important;
+  }
+  .justify-content-md-evenly {
+    justify-content: space-evenly !important;
+  }
+  .align-items-md-start {
+    align-items: flex-start !important;
+  }
+  .align-items-md-end {
+    align-items: flex-end !important;
+  }
+  .align-items-md-center {
+    align-items: center !important;
+  }
+  .align-items-md-baseline {
+    align-items: baseline !important;
+  }
+  .align-items-md-stretch {
+    align-items: stretch !important;
+  }
+  .align-content-md-start {
+    align-content: flex-start !important;
+  }
+  .align-content-md-end {
+    align-content: flex-end !important;
+  }
+  .align-content-md-center {
+    align-content: center !important;
+  }
+  .align-content-md-between {
+    align-content: space-between !important;
+  }
+  .align-content-md-around {
+    align-content: space-around !important;
+  }
+  .align-content-md-stretch {
+    align-content: stretch !important;
+  }
+  .align-self-md-auto {
+    align-self: auto !important;
+  }
+  .align-self-md-start {
+    align-self: flex-start !important;
+  }
+  .align-self-md-end {
+    align-self: flex-end !important;
+  }
+  .align-self-md-center {
+    align-self: center !important;
+  }
+  .align-self-md-baseline {
+    align-self: baseline !important;
+  }
+  .align-self-md-stretch {
+    align-self: stretch !important;
+  }
+  .order-md-first {
+    order: -1 !important;
+  }
+  .order-md-0 {
+    order: 0 !important;
+  }
+  .order-md-1 {
+    order: 1 !important;
+  }
+  .order-md-2 {
+    order: 2 !important;
+  }
+  .order-md-3 {
+    order: 3 !important;
+  }
+  .order-md-4 {
+    order: 4 !important;
+  }
+  .order-md-5 {
+    order: 5 !important;
+  }
+  .order-md-last {
+    order: 6 !important;
+  }
+  .m-md-0 {
+    margin: 0 !important;
+  }
+  .m-md-1 {
+    margin: 0.25rem !important;
+  }
+  .m-md-2 {
+    margin: 0.5rem !important;
+  }
+  .m-md-3 {
+    margin: 1rem !important;
+  }
+  .m-md-4 {
+    margin: 1.5rem !important;
+  }
+  .m-md-5 {
+    margin: 2rem !important;
+  }
+  .m-md-6 {
+    margin: 3rem !important;
+  }
+  .m-md-7 {
+    margin: 5rem !important;
+  }
+  .m-md-8 {
+    margin: 8rem !important;
+  }
+  .m-md-auto {
+    margin: auto !important;
+  }
+  .mx-md-0 {
+    margin-left: 0 !important;
+    margin-right: 0 !important;
+  }
+  .mx-md-1 {
+    margin-left: 0.25rem !important;
+    margin-right: 0.25rem !important;
+  }
+  .mx-md-2 {
+    margin-left: 0.5rem !important;
+    margin-right: 0.5rem !important;
+  }
+  .mx-md-3 {
+    margin-left: 1rem !important;
+    margin-right: 1rem !important;
+  }
+  .mx-md-4 {
+    margin-left: 1.5rem !important;
+    margin-right: 1.5rem !important;
+  }
+  .mx-md-5 {
+    margin-left: 2rem !important;
+    margin-right: 2rem !important;
+  }
+  .mx-md-6 {
+    margin-left: 3rem !important;
+    margin-right: 3rem !important;
+  }
+  .mx-md-7 {
+    margin-left: 5rem !important;
+    margin-right: 5rem !important;
+  }
+  .mx-md-8 {
+    margin-left: 8rem !important;
+    margin-right: 8rem !important;
+  }
+  .mx-md-auto {
+    margin-left: auto !important;
+    margin-right: auto !important;
+  }
+  .my-md-0 {
+    margin-top: 0 !important;
+    margin-bottom: 0 !important;
+  }
+  .my-md-1 {
+    margin-top: 0.25rem !important;
+    margin-bottom: 0.25rem !important;
+  }
+  .my-md-2 {
+    margin-top: 0.5rem !important;
+    margin-bottom: 0.5rem !important;
+  }
+  .my-md-3 {
+    margin-top: 1rem !important;
+    margin-bottom: 1rem !important;
+  }
+  .my-md-4 {
+    margin-top: 1.5rem !important;
+    margin-bottom: 1.5rem !important;
+  }
+  .my-md-5 {
+    margin-top: 2rem !important;
+    margin-bottom: 2rem !important;
+  }
+  .my-md-6 {
+    margin-top: 3rem !important;
+    margin-bottom: 3rem !important;
+  }
+  .my-md-7 {
+    margin-top: 5rem !important;
+    margin-bottom: 5rem !important;
+  }
+  .my-md-8 {
+    margin-top: 8rem !important;
+    margin-bottom: 8rem !important;
+  }
+  .my-md-auto {
+    margin-top: auto !important;
+    margin-bottom: auto !important;
+  }
+  .mt-md-0 {
+    margin-top: 0 !important;
+  }
+  .mt-md-1 {
+    margin-top: 0.25rem !important;
+  }
+  .mt-md-2 {
+    margin-top: 0.5rem !important;
+  }
+  .mt-md-3 {
+    margin-top: 1rem !important;
+  }
+  .mt-md-4 {
+    margin-top: 1.5rem !important;
+  }
+  .mt-md-5 {
+    margin-top: 2rem !important;
+  }
+  .mt-md-6 {
+    margin-top: 3rem !important;
+  }
+  .mt-md-7 {
+    margin-top: 5rem !important;
+  }
+  .mt-md-8 {
+    margin-top: 8rem !important;
+  }
+  .mt-md-auto {
+    margin-top: auto !important;
+  }
+  .me-md-0 {
+    margin-left: 0 !important;
+  }
+  .me-md-1 {
+    margin-left: 0.25rem !important;
+  }
+  .me-md-2 {
+    margin-left: 0.5rem !important;
+  }
+  .me-md-3 {
+    margin-left: 1rem !important;
+  }
+  .me-md-4 {
+    margin-left: 1.5rem !important;
+  }
+  .me-md-5 {
+    margin-left: 2rem !important;
+  }
+  .me-md-6 {
+    margin-left: 3rem !important;
+  }
+  .me-md-7 {
+    margin-left: 5rem !important;
+  }
+  .me-md-8 {
+    margin-left: 8rem !important;
+  }
+  .me-md-auto {
+    margin-left: auto !important;
+  }
+  .mb-md-0 {
+    margin-bottom: 0 !important;
+  }
+  .mb-md-1 {
+    margin-bottom: 0.25rem !important;
+  }
+  .mb-md-2 {
+    margin-bottom: 0.5rem !important;
+  }
+  .mb-md-3 {
+    margin-bottom: 1rem !important;
+  }
+  .mb-md-4 {
+    margin-bottom: 1.5rem !important;
+  }
+  .mb-md-5 {
+    margin-bottom: 2rem !important;
+  }
+  .mb-md-6 {
+    margin-bottom: 3rem !important;
+  }
+  .mb-md-7 {
+    margin-bottom: 5rem !important;
+  }
+  .mb-md-8 {
+    margin-bottom: 8rem !important;
+  }
+  .mb-md-auto {
+    margin-bottom: auto !important;
+  }
+  .ms-md-0 {
+    margin-right: 0 !important;
+  }
+  .ms-md-1 {
+    margin-right: 0.25rem !important;
+  }
+  .ms-md-2 {
+    margin-right: 0.5rem !important;
+  }
+  .ms-md-3 {
+    margin-right: 1rem !important;
+  }
+  .ms-md-4 {
+    margin-right: 1.5rem !important;
+  }
+  .ms-md-5 {
+    margin-right: 2rem !important;
+  }
+  .ms-md-6 {
+    margin-right: 3rem !important;
+  }
+  .ms-md-7 {
+    margin-right: 5rem !important;
+  }
+  .ms-md-8 {
+    margin-right: 8rem !important;
+  }
+  .ms-md-auto {
+    margin-right: auto !important;
+  }
+  .p-md-0 {
+    padding: 0 !important;
+  }
+  .p-md-1 {
+    padding: 0.25rem !important;
+  }
+  .p-md-2 {
+    padding: 0.5rem !important;
+  }
+  .p-md-3 {
+    padding: 1rem !important;
+  }
+  .p-md-4 {
+    padding: 1.5rem !important;
+  }
+  .p-md-5 {
+    padding: 2rem !important;
+  }
+  .p-md-6 {
+    padding: 3rem !important;
+  }
+  .p-md-7 {
+    padding: 5rem !important;
+  }
+  .p-md-8 {
+    padding: 8rem !important;
+  }
+  .px-md-0 {
+    padding-left: 0 !important;
+    padding-right: 0 !important;
+  }
+  .px-md-1 {
+    padding-left: 0.25rem !important;
+    padding-right: 0.25rem !important;
+  }
+  .px-md-2 {
+    padding-left: 0.5rem !important;
+    padding-right: 0.5rem !important;
+  }
+  .px-md-3 {
+    padding-left: 1rem !important;
+    padding-right: 1rem !important;
+  }
+  .px-md-4 {
+    padding-left: 1.5rem !important;
+    padding-right: 1.5rem !important;
+  }
+  .px-md-5 {
+    padding-left: 2rem !important;
+    padding-right: 2rem !important;
+  }
+  .px-md-6 {
+    padding-left: 3rem !important;
+    padding-right: 3rem !important;
+  }
+  .px-md-7 {
+    padding-left: 5rem !important;
+    padding-right: 5rem !important;
+  }
+  .px-md-8 {
+    padding-left: 8rem !important;
+    padding-right: 8rem !important;
+  }
+  .py-md-0 {
+    padding-top: 0 !important;
+    padding-bottom: 0 !important;
+  }
+  .py-md-1 {
+    padding-top: 0.25rem !important;
+    padding-bottom: 0.25rem !important;
+  }
+  .py-md-2 {
+    padding-top: 0.5rem !important;
+    padding-bottom: 0.5rem !important;
+  }
+  .py-md-3 {
+    padding-top: 1rem !important;
+    padding-bottom: 1rem !important;
+  }
+  .py-md-4 {
+    padding-top: 1.5rem !important;
+    padding-bottom: 1.5rem !important;
+  }
+  .py-md-5 {
+    padding-top: 2rem !important;
+    padding-bottom: 2rem !important;
+  }
+  .py-md-6 {
+    padding-top: 3rem !important;
+    padding-bottom: 3rem !important;
+  }
+  .py-md-7 {
+    padding-top: 5rem !important;
+    padding-bottom: 5rem !important;
+  }
+  .py-md-8 {
+    padding-top: 8rem !important;
+    padding-bottom: 8rem !important;
+  }
+  .pt-md-0 {
+    padding-top: 0 !important;
+  }
+  .pt-md-1 {
+    padding-top: 0.25rem !important;
+  }
+  .pt-md-2 {
+    padding-top: 0.5rem !important;
+  }
+  .pt-md-3 {
+    padding-top: 1rem !important;
+  }
+  .pt-md-4 {
+    padding-top: 1.5rem !important;
+  }
+  .pt-md-5 {
+    padding-top: 2rem !important;
+  }
+  .pt-md-6 {
+    padding-top: 3rem !important;
+  }
+  .pt-md-7 {
+    padding-top: 5rem !important;
+  }
+  .pt-md-8 {
+    padding-top: 8rem !important;
+  }
+  .pe-md-0 {
+    padding-left: 0 !important;
+  }
+  .pe-md-1 {
+    padding-left: 0.25rem !important;
+  }
+  .pe-md-2 {
+    padding-left: 0.5rem !important;
+  }
+  .pe-md-3 {
+    padding-left: 1rem !important;
+  }
+  .pe-md-4 {
+    padding-left: 1.5rem !important;
+  }
+  .pe-md-5 {
+    padding-left: 2rem !important;
+  }
+  .pe-md-6 {
+    padding-left: 3rem !important;
+  }
+  .pe-md-7 {
+    padding-left: 5rem !important;
+  }
+  .pe-md-8 {
+    padding-left: 8rem !important;
+  }
+  .pb-md-0 {
+    padding-bottom: 0 !important;
+  }
+  .pb-md-1 {
+    padding-bottom: 0.25rem !important;
+  }
+  .pb-md-2 {
+    padding-bottom: 0.5rem !important;
+  }
+  .pb-md-3 {
+    padding-bottom: 1rem !important;
+  }
+  .pb-md-4 {
+    padding-bottom: 1.5rem !important;
+  }
+  .pb-md-5 {
+    padding-bottom: 2rem !important;
+  }
+  .pb-md-6 {
+    padding-bottom: 3rem !important;
+  }
+  .pb-md-7 {
+    padding-bottom: 5rem !important;
+  }
+  .pb-md-8 {
+    padding-bottom: 8rem !important;
+  }
+  .ps-md-0 {
+    padding-right: 0 !important;
+  }
+  .ps-md-1 {
+    padding-right: 0.25rem !important;
+  }
+  .ps-md-2 {
+    padding-right: 0.5rem !important;
+  }
+  .ps-md-3 {
+    padding-right: 1rem !important;
+  }
+  .ps-md-4 {
+    padding-right: 1.5rem !important;
+  }
+  .ps-md-5 {
+    padding-right: 2rem !important;
+  }
+  .ps-md-6 {
+    padding-right: 3rem !important;
+  }
+  .ps-md-7 {
+    padding-right: 5rem !important;
+  }
+  .ps-md-8 {
+    padding-right: 8rem !important;
+  }
+  .gap-md-0 {
+    gap: 0 !important;
+  }
+  .gap-md-1 {
+    gap: 0.25rem !important;
+  }
+  .gap-md-2 {
+    gap: 0.5rem !important;
+  }
+  .gap-md-3 {
+    gap: 1rem !important;
+  }
+  .gap-md-4 {
+    gap: 1.5rem !important;
+  }
+  .gap-md-5 {
+    gap: 2rem !important;
+  }
+  .gap-md-6 {
+    gap: 3rem !important;
+  }
+  .gap-md-7 {
+    gap: 5rem !important;
+  }
+  .gap-md-8 {
+    gap: 8rem !important;
+  }
+  .row-gap-md-0 {
+    row-gap: 0 !important;
+  }
+  .row-gap-md-1 {
+    row-gap: 0.25rem !important;
+  }
+  .row-gap-md-2 {
+    row-gap: 0.5rem !important;
+  }
+  .row-gap-md-3 {
+    row-gap: 1rem !important;
+  }
+  .row-gap-md-4 {
+    row-gap: 1.5rem !important;
+  }
+  .row-gap-md-5 {
+    row-gap: 2rem !important;
+  }
+  .row-gap-md-6 {
+    row-gap: 3rem !important;
+  }
+  .row-gap-md-7 {
+    row-gap: 5rem !important;
+  }
+  .row-gap-md-8 {
+    row-gap: 8rem !important;
+  }
+  .column-gap-md-0 {
+    -moz-column-gap: 0 !important;
+         column-gap: 0 !important;
+  }
+  .column-gap-md-1 {
+    -moz-column-gap: 0.25rem !important;
+         column-gap: 0.25rem !important;
+  }
+  .column-gap-md-2 {
+    -moz-column-gap: 0.5rem !important;
+         column-gap: 0.5rem !important;
+  }
+  .column-gap-md-3 {
+    -moz-column-gap: 1rem !important;
+         column-gap: 1rem !important;
+  }
+  .column-gap-md-4 {
+    -moz-column-gap: 1.5rem !important;
+         column-gap: 1.5rem !important;
+  }
+  .column-gap-md-5 {
+    -moz-column-gap: 2rem !important;
+         column-gap: 2rem !important;
+  }
+  .column-gap-md-6 {
+    -moz-column-gap: 3rem !important;
+         column-gap: 3rem !important;
+  }
+  .column-gap-md-7 {
+    -moz-column-gap: 5rem !important;
+         column-gap: 5rem !important;
+  }
+  .column-gap-md-8 {
+    -moz-column-gap: 8rem !important;
+         column-gap: 8rem !important;
+  }
+  .text-md-start {
+    text-align: right !important;
+  }
+  .text-md-end {
+    text-align: left !important;
+  }
+  .text-md-center {
+    text-align: center !important;
+  }
+  .columns-md-2 {
+    -moz-columns: 2 !important;
+         columns: 2 !important;
+  }
+  .columns-md-3 {
+    -moz-columns: 3 !important;
+         columns: 3 !important;
+  }
+  .columns-md-4 {
+    -moz-columns: 4 !important;
+         columns: 4 !important;
+  }
+}
+@media (min-width: 992px) {
+  .float-lg-start {
+    float: right !important;
+  }
+  .float-lg-end {
+    float: left !important;
+  }
+  .float-lg-none {
+    float: none !important;
+  }
+  .object-fit-lg-contain {
+    -o-object-fit: contain !important;
+       object-fit: contain !important;
+  }
+  .object-fit-lg-cover {
+    -o-object-fit: cover !important;
+       object-fit: cover !important;
+  }
+  .object-fit-lg-fill {
+    -o-object-fit: fill !important;
+       object-fit: fill !important;
+  }
+  .object-fit-lg-scale {
+    -o-object-fit: scale-down !important;
+       object-fit: scale-down !important;
+  }
+  .object-fit-lg-none {
+    -o-object-fit: none !important;
+       object-fit: none !important;
+  }
+  .d-lg-inline {
+    display: inline !important;
+  }
+  .d-lg-inline-block {
+    display: inline-block !important;
+  }
+  .d-lg-block {
+    display: block !important;
+  }
+  .d-lg-grid {
+    display: grid !important;
+  }
+  .d-lg-inline-grid {
+    display: inline-grid !important;
+  }
+  .d-lg-table {
+    display: table !important;
+  }
+  .d-lg-table-row {
+    display: table-row !important;
+  }
+  .d-lg-table-cell {
+    display: table-cell !important;
+  }
+  .d-lg-flex {
+    display: flex !important;
+  }
+  .d-lg-inline-flex {
+    display: inline-flex !important;
+  }
+  .d-lg-none {
+    display: none !important;
+  }
+  .flex-lg-fill {
+    flex: 1 1 auto !important;
+  }
+  .flex-lg-row {
+    flex-direction: row !important;
+  }
+  .flex-lg-column {
+    flex-direction: column !important;
+  }
+  .flex-lg-row-reverse {
+    flex-direction: row-reverse !important;
+  }
+  .flex-lg-column-reverse {
+    flex-direction: column-reverse !important;
+  }
+  .flex-lg-grow-0 {
+    flex-grow: 0 !important;
+  }
+  .flex-lg-grow-1 {
+    flex-grow: 1 !important;
+  }
+  .flex-lg-shrink-0 {
+    flex-shrink: 0 !important;
+  }
+  .flex-lg-shrink-1 {
+    flex-shrink: 1 !important;
+  }
+  .flex-lg-wrap {
+    flex-wrap: wrap !important;
+  }
+  .flex-lg-nowrap {
+    flex-wrap: nowrap !important;
+  }
+  .flex-lg-wrap-reverse {
+    flex-wrap: wrap-reverse !important;
+  }
+  .justify-content-lg-start {
+    justify-content: flex-start !important;
+  }
+  .justify-content-lg-end {
+    justify-content: flex-end !important;
+  }
+  .justify-content-lg-center {
+    justify-content: center !important;
+  }
+  .justify-content-lg-between {
+    justify-content: space-between !important;
+  }
+  .justify-content-lg-around {
+    justify-content: space-around !important;
+  }
+  .justify-content-lg-evenly {
+    justify-content: space-evenly !important;
+  }
+  .align-items-lg-start {
+    align-items: flex-start !important;
+  }
+  .align-items-lg-end {
+    align-items: flex-end !important;
+  }
+  .align-items-lg-center {
+    align-items: center !important;
+  }
+  .align-items-lg-baseline {
+    align-items: baseline !important;
+  }
+  .align-items-lg-stretch {
+    align-items: stretch !important;
+  }
+  .align-content-lg-start {
+    align-content: flex-start !important;
+  }
+  .align-content-lg-end {
+    align-content: flex-end !important;
+  }
+  .align-content-lg-center {
+    align-content: center !important;
+  }
+  .align-content-lg-between {
+    align-content: space-between !important;
+  }
+  .align-content-lg-around {
+    align-content: space-around !important;
+  }
+  .align-content-lg-stretch {
+    align-content: stretch !important;
+  }
+  .align-self-lg-auto {
+    align-self: auto !important;
+  }
+  .align-self-lg-start {
+    align-self: flex-start !important;
+  }
+  .align-self-lg-end {
+    align-self: flex-end !important;
+  }
+  .align-self-lg-center {
+    align-self: center !important;
+  }
+  .align-self-lg-baseline {
+    align-self: baseline !important;
+  }
+  .align-self-lg-stretch {
+    align-self: stretch !important;
+  }
+  .order-lg-first {
+    order: -1 !important;
+  }
+  .order-lg-0 {
+    order: 0 !important;
+  }
+  .order-lg-1 {
+    order: 1 !important;
+  }
+  .order-lg-2 {
+    order: 2 !important;
+  }
+  .order-lg-3 {
+    order: 3 !important;
+  }
+  .order-lg-4 {
+    order: 4 !important;
+  }
+  .order-lg-5 {
+    order: 5 !important;
+  }
+  .order-lg-last {
+    order: 6 !important;
+  }
+  .m-lg-0 {
+    margin: 0 !important;
+  }
+  .m-lg-1 {
+    margin: 0.25rem !important;
+  }
+  .m-lg-2 {
+    margin: 0.5rem !important;
+  }
+  .m-lg-3 {
+    margin: 1rem !important;
+  }
+  .m-lg-4 {
+    margin: 1.5rem !important;
+  }
+  .m-lg-5 {
+    margin: 2rem !important;
+  }
+  .m-lg-6 {
+    margin: 3rem !important;
+  }
+  .m-lg-7 {
+    margin: 5rem !important;
+  }
+  .m-lg-8 {
+    margin: 8rem !important;
+  }
+  .m-lg-auto {
+    margin: auto !important;
+  }
+  .mx-lg-0 {
+    margin-left: 0 !important;
+    margin-right: 0 !important;
+  }
+  .mx-lg-1 {
+    margin-left: 0.25rem !important;
+    margin-right: 0.25rem !important;
+  }
+  .mx-lg-2 {
+    margin-left: 0.5rem !important;
+    margin-right: 0.5rem !important;
+  }
+  .mx-lg-3 {
+    margin-left: 1rem !important;
+    margin-right: 1rem !important;
+  }
+  .mx-lg-4 {
+    margin-left: 1.5rem !important;
+    margin-right: 1.5rem !important;
+  }
+  .mx-lg-5 {
+    margin-left: 2rem !important;
+    margin-right: 2rem !important;
+  }
+  .mx-lg-6 {
+    margin-left: 3rem !important;
+    margin-right: 3rem !important;
+  }
+  .mx-lg-7 {
+    margin-left: 5rem !important;
+    margin-right: 5rem !important;
+  }
+  .mx-lg-8 {
+    margin-left: 8rem !important;
+    margin-right: 8rem !important;
+  }
+  .mx-lg-auto {
+    margin-left: auto !important;
+    margin-right: auto !important;
+  }
+  .my-lg-0 {
+    margin-top: 0 !important;
+    margin-bottom: 0 !important;
+  }
+  .my-lg-1 {
+    margin-top: 0.25rem !important;
+    margin-bottom: 0.25rem !important;
+  }
+  .my-lg-2 {
+    margin-top: 0.5rem !important;
+    margin-bottom: 0.5rem !important;
+  }
+  .my-lg-3 {
+    margin-top: 1rem !important;
+    margin-bottom: 1rem !important;
+  }
+  .my-lg-4 {
+    margin-top: 1.5rem !important;
+    margin-bottom: 1.5rem !important;
+  }
+  .my-lg-5 {
+    margin-top: 2rem !important;
+    margin-bottom: 2rem !important;
+  }
+  .my-lg-6 {
+    margin-top: 3rem !important;
+    margin-bottom: 3rem !important;
+  }
+  .my-lg-7 {
+    margin-top: 5rem !important;
+    margin-bottom: 5rem !important;
+  }
+  .my-lg-8 {
+    margin-top: 8rem !important;
+    margin-bottom: 8rem !important;
+  }
+  .my-lg-auto {
+    margin-top: auto !important;
+    margin-bottom: auto !important;
+  }
+  .mt-lg-0 {
+    margin-top: 0 !important;
+  }
+  .mt-lg-1 {
+    margin-top: 0.25rem !important;
+  }
+  .mt-lg-2 {
+    margin-top: 0.5rem !important;
+  }
+  .mt-lg-3 {
+    margin-top: 1rem !important;
+  }
+  .mt-lg-4 {
+    margin-top: 1.5rem !important;
+  }
+  .mt-lg-5 {
+    margin-top: 2rem !important;
+  }
+  .mt-lg-6 {
+    margin-top: 3rem !important;
+  }
+  .mt-lg-7 {
+    margin-top: 5rem !important;
+  }
+  .mt-lg-8 {
+    margin-top: 8rem !important;
+  }
+  .mt-lg-auto {
+    margin-top: auto !important;
+  }
+  .me-lg-0 {
+    margin-left: 0 !important;
+  }
+  .me-lg-1 {
+    margin-left: 0.25rem !important;
+  }
+  .me-lg-2 {
+    margin-left: 0.5rem !important;
+  }
+  .me-lg-3 {
+    margin-left: 1rem !important;
+  }
+  .me-lg-4 {
+    margin-left: 1.5rem !important;
+  }
+  .me-lg-5 {
+    margin-left: 2rem !important;
+  }
+  .me-lg-6 {
+    margin-left: 3rem !important;
+  }
+  .me-lg-7 {
+    margin-left: 5rem !important;
+  }
+  .me-lg-8 {
+    margin-left: 8rem !important;
+  }
+  .me-lg-auto {
+    margin-left: auto !important;
+  }
+  .mb-lg-0 {
+    margin-bottom: 0 !important;
+  }
+  .mb-lg-1 {
+    margin-bottom: 0.25rem !important;
+  }
+  .mb-lg-2 {
+    margin-bottom: 0.5rem !important;
+  }
+  .mb-lg-3 {
+    margin-bottom: 1rem !important;
+  }
+  .mb-lg-4 {
+    margin-bottom: 1.5rem !important;
+  }
+  .mb-lg-5 {
+    margin-bottom: 2rem !important;
+  }
+  .mb-lg-6 {
+    margin-bottom: 3rem !important;
+  }
+  .mb-lg-7 {
+    margin-bottom: 5rem !important;
+  }
+  .mb-lg-8 {
+    margin-bottom: 8rem !important;
+  }
+  .mb-lg-auto {
+    margin-bottom: auto !important;
+  }
+  .ms-lg-0 {
+    margin-right: 0 !important;
+  }
+  .ms-lg-1 {
+    margin-right: 0.25rem !important;
+  }
+  .ms-lg-2 {
+    margin-right: 0.5rem !important;
+  }
+  .ms-lg-3 {
+    margin-right: 1rem !important;
+  }
+  .ms-lg-4 {
+    margin-right: 1.5rem !important;
+  }
+  .ms-lg-5 {
+    margin-right: 2rem !important;
+  }
+  .ms-lg-6 {
+    margin-right: 3rem !important;
+  }
+  .ms-lg-7 {
+    margin-right: 5rem !important;
+  }
+  .ms-lg-8 {
+    margin-right: 8rem !important;
+  }
+  .ms-lg-auto {
+    margin-right: auto !important;
+  }
+  .p-lg-0 {
+    padding: 0 !important;
+  }
+  .p-lg-1 {
+    padding: 0.25rem !important;
+  }
+  .p-lg-2 {
+    padding: 0.5rem !important;
+  }
+  .p-lg-3 {
+    padding: 1rem !important;
+  }
+  .p-lg-4 {
+    padding: 1.5rem !important;
+  }
+  .p-lg-5 {
+    padding: 2rem !important;
+  }
+  .p-lg-6 {
+    padding: 3rem !important;
+  }
+  .p-lg-7 {
+    padding: 5rem !important;
+  }
+  .p-lg-8 {
+    padding: 8rem !important;
+  }
+  .px-lg-0 {
+    padding-left: 0 !important;
+    padding-right: 0 !important;
+  }
+  .px-lg-1 {
+    padding-left: 0.25rem !important;
+    padding-right: 0.25rem !important;
+  }
+  .px-lg-2 {
+    padding-left: 0.5rem !important;
+    padding-right: 0.5rem !important;
+  }
+  .px-lg-3 {
+    padding-left: 1rem !important;
+    padding-right: 1rem !important;
+  }
+  .px-lg-4 {
+    padding-left: 1.5rem !important;
+    padding-right: 1.5rem !important;
+  }
+  .px-lg-5 {
+    padding-left: 2rem !important;
+    padding-right: 2rem !important;
+  }
+  .px-lg-6 {
+    padding-left: 3rem !important;
+    padding-right: 3rem !important;
+  }
+  .px-lg-7 {
+    padding-left: 5rem !important;
+    padding-right: 5rem !important;
+  }
+  .px-lg-8 {
+    padding-left: 8rem !important;
+    padding-right: 8rem !important;
+  }
+  .py-lg-0 {
+    padding-top: 0 !important;
+    padding-bottom: 0 !important;
+  }
+  .py-lg-1 {
+    padding-top: 0.25rem !important;
+    padding-bottom: 0.25rem !important;
+  }
+  .py-lg-2 {
+    padding-top: 0.5rem !important;
+    padding-bottom: 0.5rem !important;
+  }
+  .py-lg-3 {
+    padding-top: 1rem !important;
+    padding-bottom: 1rem !important;
+  }
+  .py-lg-4 {
+    padding-top: 1.5rem !important;
+    padding-bottom: 1.5rem !important;
+  }
+  .py-lg-5 {
+    padding-top: 2rem !important;
+    padding-bottom: 2rem !important;
+  }
+  .py-lg-6 {
+    padding-top: 3rem !important;
+    padding-bottom: 3rem !important;
+  }
+  .py-lg-7 {
+    padding-top: 5rem !important;
+    padding-bottom: 5rem !important;
+  }
+  .py-lg-8 {
+    padding-top: 8rem !important;
+    padding-bottom: 8rem !important;
+  }
+  .pt-lg-0 {
+    padding-top: 0 !important;
+  }
+  .pt-lg-1 {
+    padding-top: 0.25rem !important;
+  }
+  .pt-lg-2 {
+    padding-top: 0.5rem !important;
+  }
+  .pt-lg-3 {
+    padding-top: 1rem !important;
+  }
+  .pt-lg-4 {
+    padding-top: 1.5rem !important;
+  }
+  .pt-lg-5 {
+    padding-top: 2rem !important;
+  }
+  .pt-lg-6 {
+    padding-top: 3rem !important;
+  }
+  .pt-lg-7 {
+    padding-top: 5rem !important;
+  }
+  .pt-lg-8 {
+    padding-top: 8rem !important;
+  }
+  .pe-lg-0 {
+    padding-left: 0 !important;
+  }
+  .pe-lg-1 {
+    padding-left: 0.25rem !important;
+  }
+  .pe-lg-2 {
+    padding-left: 0.5rem !important;
+  }
+  .pe-lg-3 {
+    padding-left: 1rem !important;
+  }
+  .pe-lg-4 {
+    padding-left: 1.5rem !important;
+  }
+  .pe-lg-5 {
+    padding-left: 2rem !important;
+  }
+  .pe-lg-6 {
+    padding-left: 3rem !important;
+  }
+  .pe-lg-7 {
+    padding-left: 5rem !important;
+  }
+  .pe-lg-8 {
+    padding-left: 8rem !important;
+  }
+  .pb-lg-0 {
+    padding-bottom: 0 !important;
+  }
+  .pb-lg-1 {
+    padding-bottom: 0.25rem !important;
+  }
+  .pb-lg-2 {
+    padding-bottom: 0.5rem !important;
+  }
+  .pb-lg-3 {
+    padding-bottom: 1rem !important;
+  }
+  .pb-lg-4 {
+    padding-bottom: 1.5rem !important;
+  }
+  .pb-lg-5 {
+    padding-bottom: 2rem !important;
+  }
+  .pb-lg-6 {
+    padding-bottom: 3rem !important;
+  }
+  .pb-lg-7 {
+    padding-bottom: 5rem !important;
+  }
+  .pb-lg-8 {
+    padding-bottom: 8rem !important;
+  }
+  .ps-lg-0 {
+    padding-right: 0 !important;
+  }
+  .ps-lg-1 {
+    padding-right: 0.25rem !important;
+  }
+  .ps-lg-2 {
+    padding-right: 0.5rem !important;
+  }
+  .ps-lg-3 {
+    padding-right: 1rem !important;
+  }
+  .ps-lg-4 {
+    padding-right: 1.5rem !important;
+  }
+  .ps-lg-5 {
+    padding-right: 2rem !important;
+  }
+  .ps-lg-6 {
+    padding-right: 3rem !important;
+  }
+  .ps-lg-7 {
+    padding-right: 5rem !important;
+  }
+  .ps-lg-8 {
+    padding-right: 8rem !important;
+  }
+  .gap-lg-0 {
+    gap: 0 !important;
+  }
+  .gap-lg-1 {
+    gap: 0.25rem !important;
+  }
+  .gap-lg-2 {
+    gap: 0.5rem !important;
+  }
+  .gap-lg-3 {
+    gap: 1rem !important;
+  }
+  .gap-lg-4 {
+    gap: 1.5rem !important;
+  }
+  .gap-lg-5 {
+    gap: 2rem !important;
+  }
+  .gap-lg-6 {
+    gap: 3rem !important;
+  }
+  .gap-lg-7 {
+    gap: 5rem !important;
+  }
+  .gap-lg-8 {
+    gap: 8rem !important;
+  }
+  .row-gap-lg-0 {
+    row-gap: 0 !important;
+  }
+  .row-gap-lg-1 {
+    row-gap: 0.25rem !important;
+  }
+  .row-gap-lg-2 {
+    row-gap: 0.5rem !important;
+  }
+  .row-gap-lg-3 {
+    row-gap: 1rem !important;
+  }
+  .row-gap-lg-4 {
+    row-gap: 1.5rem !important;
+  }
+  .row-gap-lg-5 {
+    row-gap: 2rem !important;
+  }
+  .row-gap-lg-6 {
+    row-gap: 3rem !important;
+  }
+  .row-gap-lg-7 {
+    row-gap: 5rem !important;
+  }
+  .row-gap-lg-8 {
+    row-gap: 8rem !important;
+  }
+  .column-gap-lg-0 {
+    -moz-column-gap: 0 !important;
+         column-gap: 0 !important;
+  }
+  .column-gap-lg-1 {
+    -moz-column-gap: 0.25rem !important;
+         column-gap: 0.25rem !important;
+  }
+  .column-gap-lg-2 {
+    -moz-column-gap: 0.5rem !important;
+         column-gap: 0.5rem !important;
+  }
+  .column-gap-lg-3 {
+    -moz-column-gap: 1rem !important;
+         column-gap: 1rem !important;
+  }
+  .column-gap-lg-4 {
+    -moz-column-gap: 1.5rem !important;
+         column-gap: 1.5rem !important;
+  }
+  .column-gap-lg-5 {
+    -moz-column-gap: 2rem !important;
+         column-gap: 2rem !important;
+  }
+  .column-gap-lg-6 {
+    -moz-column-gap: 3rem !important;
+         column-gap: 3rem !important;
+  }
+  .column-gap-lg-7 {
+    -moz-column-gap: 5rem !important;
+         column-gap: 5rem !important;
+  }
+  .column-gap-lg-8 {
+    -moz-column-gap: 8rem !important;
+         column-gap: 8rem !important;
+  }
+  .text-lg-start {
+    text-align: right !important;
+  }
+  .text-lg-end {
+    text-align: left !important;
+  }
+  .text-lg-center {
+    text-align: center !important;
+  }
+  .columns-lg-2 {
+    -moz-columns: 2 !important;
+         columns: 2 !important;
+  }
+  .columns-lg-3 {
+    -moz-columns: 3 !important;
+         columns: 3 !important;
+  }
+  .columns-lg-4 {
+    -moz-columns: 4 !important;
+         columns: 4 !important;
+  }
+}
+@media (min-width: 1200px) {
+  .float-xl-start {
+    float: right !important;
+  }
+  .float-xl-end {
+    float: left !important;
+  }
+  .float-xl-none {
+    float: none !important;
+  }
+  .object-fit-xl-contain {
+    -o-object-fit: contain !important;
+       object-fit: contain !important;
+  }
+  .object-fit-xl-cover {
+    -o-object-fit: cover !important;
+       object-fit: cover !important;
+  }
+  .object-fit-xl-fill {
+    -o-object-fit: fill !important;
+       object-fit: fill !important;
+  }
+  .object-fit-xl-scale {
+    -o-object-fit: scale-down !important;
+       object-fit: scale-down !important;
+  }
+  .object-fit-xl-none {
+    -o-object-fit: none !important;
+       object-fit: none !important;
+  }
+  .d-xl-inline {
+    display: inline !important;
+  }
+  .d-xl-inline-block {
+    display: inline-block !important;
+  }
+  .d-xl-block {
+    display: block !important;
+  }
+  .d-xl-grid {
+    display: grid !important;
+  }
+  .d-xl-inline-grid {
+    display: inline-grid !important;
+  }
+  .d-xl-table {
+    display: table !important;
+  }
+  .d-xl-table-row {
+    display: table-row !important;
+  }
+  .d-xl-table-cell {
+    display: table-cell !important;
+  }
+  .d-xl-flex {
+    display: flex !important;
+  }
+  .d-xl-inline-flex {
+    display: inline-flex !important;
+  }
+  .d-xl-none {
+    display: none !important;
+  }
+  .flex-xl-fill {
+    flex: 1 1 auto !important;
+  }
+  .flex-xl-row {
+    flex-direction: row !important;
+  }
+  .flex-xl-column {
+    flex-direction: column !important;
+  }
+  .flex-xl-row-reverse {
+    flex-direction: row-reverse !important;
+  }
+  .flex-xl-column-reverse {
+    flex-direction: column-reverse !important;
+  }
+  .flex-xl-grow-0 {
+    flex-grow: 0 !important;
+  }
+  .flex-xl-grow-1 {
+    flex-grow: 1 !important;
+  }
+  .flex-xl-shrink-0 {
+    flex-shrink: 0 !important;
+  }
+  .flex-xl-shrink-1 {
+    flex-shrink: 1 !important;
+  }
+  .flex-xl-wrap {
+    flex-wrap: wrap !important;
+  }
+  .flex-xl-nowrap {
+    flex-wrap: nowrap !important;
+  }
+  .flex-xl-wrap-reverse {
+    flex-wrap: wrap-reverse !important;
+  }
+  .justify-content-xl-start {
+    justify-content: flex-start !important;
+  }
+  .justify-content-xl-end {
+    justify-content: flex-end !important;
+  }
+  .justify-content-xl-center {
+    justify-content: center !important;
+  }
+  .justify-content-xl-between {
+    justify-content: space-between !important;
+  }
+  .justify-content-xl-around {
+    justify-content: space-around !important;
+  }
+  .justify-content-xl-evenly {
+    justify-content: space-evenly !important;
+  }
+  .align-items-xl-start {
+    align-items: flex-start !important;
+  }
+  .align-items-xl-end {
+    align-items: flex-end !important;
+  }
+  .align-items-xl-center {
+    align-items: center !important;
+  }
+  .align-items-xl-baseline {
+    align-items: baseline !important;
+  }
+  .align-items-xl-stretch {
+    align-items: stretch !important;
+  }
+  .align-content-xl-start {
+    align-content: flex-start !important;
+  }
+  .align-content-xl-end {
+    align-content: flex-end !important;
+  }
+  .align-content-xl-center {
+    align-content: center !important;
+  }
+  .align-content-xl-between {
+    align-content: space-between !important;
+  }
+  .align-content-xl-around {
+    align-content: space-around !important;
+  }
+  .align-content-xl-stretch {
+    align-content: stretch !important;
+  }
+  .align-self-xl-auto {
+    align-self: auto !important;
+  }
+  .align-self-xl-start {
+    align-self: flex-start !important;
+  }
+  .align-self-xl-end {
+    align-self: flex-end !important;
+  }
+  .align-self-xl-center {
+    align-self: center !important;
+  }
+  .align-self-xl-baseline {
+    align-self: baseline !important;
+  }
+  .align-self-xl-stretch {
+    align-self: stretch !important;
+  }
+  .order-xl-first {
+    order: -1 !important;
+  }
+  .order-xl-0 {
+    order: 0 !important;
+  }
+  .order-xl-1 {
+    order: 1 !important;
+  }
+  .order-xl-2 {
+    order: 2 !important;
+  }
+  .order-xl-3 {
+    order: 3 !important;
+  }
+  .order-xl-4 {
+    order: 4 !important;
+  }
+  .order-xl-5 {
+    order: 5 !important;
+  }
+  .order-xl-last {
+    order: 6 !important;
+  }
+  .m-xl-0 {
+    margin: 0 !important;
+  }
+  .m-xl-1 {
+    margin: 0.25rem !important;
+  }
+  .m-xl-2 {
+    margin: 0.5rem !important;
+  }
+  .m-xl-3 {
+    margin: 1rem !important;
+  }
+  .m-xl-4 {
+    margin: 1.5rem !important;
+  }
+  .m-xl-5 {
+    margin: 2rem !important;
+  }
+  .m-xl-6 {
+    margin: 3rem !important;
+  }
+  .m-xl-7 {
+    margin: 5rem !important;
+  }
+  .m-xl-8 {
+    margin: 8rem !important;
+  }
+  .m-xl-auto {
+    margin: auto !important;
+  }
+  .mx-xl-0 {
+    margin-left: 0 !important;
+    margin-right: 0 !important;
+  }
+  .mx-xl-1 {
+    margin-left: 0.25rem !important;
+    margin-right: 0.25rem !important;
+  }
+  .mx-xl-2 {
+    margin-left: 0.5rem !important;
+    margin-right: 0.5rem !important;
+  }
+  .mx-xl-3 {
+    margin-left: 1rem !important;
+    margin-right: 1rem !important;
+  }
+  .mx-xl-4 {
+    margin-left: 1.5rem !important;
+    margin-right: 1.5rem !important;
+  }
+  .mx-xl-5 {
+    margin-left: 2rem !important;
+    margin-right: 2rem !important;
+  }
+  .mx-xl-6 {
+    margin-left: 3rem !important;
+    margin-right: 3rem !important;
+  }
+  .mx-xl-7 {
+    margin-left: 5rem !important;
+    margin-right: 5rem !important;
+  }
+  .mx-xl-8 {
+    margin-left: 8rem !important;
+    margin-right: 8rem !important;
+  }
+  .mx-xl-auto {
+    margin-left: auto !important;
+    margin-right: auto !important;
+  }
+  .my-xl-0 {
+    margin-top: 0 !important;
+    margin-bottom: 0 !important;
+  }
+  .my-xl-1 {
+    margin-top: 0.25rem !important;
+    margin-bottom: 0.25rem !important;
+  }
+  .my-xl-2 {
+    margin-top: 0.5rem !important;
+    margin-bottom: 0.5rem !important;
+  }
+  .my-xl-3 {
+    margin-top: 1rem !important;
+    margin-bottom: 1rem !important;
+  }
+  .my-xl-4 {
+    margin-top: 1.5rem !important;
+    margin-bottom: 1.5rem !important;
+  }
+  .my-xl-5 {
+    margin-top: 2rem !important;
+    margin-bottom: 2rem !important;
+  }
+  .my-xl-6 {
+    margin-top: 3rem !important;
+    margin-bottom: 3rem !important;
+  }
+  .my-xl-7 {
+    margin-top: 5rem !important;
+    margin-bottom: 5rem !important;
+  }
+  .my-xl-8 {
+    margin-top: 8rem !important;
+    margin-bottom: 8rem !important;
+  }
+  .my-xl-auto {
+    margin-top: auto !important;
+    margin-bottom: auto !important;
+  }
+  .mt-xl-0 {
+    margin-top: 0 !important;
+  }
+  .mt-xl-1 {
+    margin-top: 0.25rem !important;
+  }
+  .mt-xl-2 {
+    margin-top: 0.5rem !important;
+  }
+  .mt-xl-3 {
+    margin-top: 1rem !important;
+  }
+  .mt-xl-4 {
+    margin-top: 1.5rem !important;
+  }
+  .mt-xl-5 {
+    margin-top: 2rem !important;
+  }
+  .mt-xl-6 {
+    margin-top: 3rem !important;
+  }
+  .mt-xl-7 {
+    margin-top: 5rem !important;
+  }
+  .mt-xl-8 {
+    margin-top: 8rem !important;
+  }
+  .mt-xl-auto {
+    margin-top: auto !important;
+  }
+  .me-xl-0 {
+    margin-left: 0 !important;
+  }
+  .me-xl-1 {
+    margin-left: 0.25rem !important;
+  }
+  .me-xl-2 {
+    margin-left: 0.5rem !important;
+  }
+  .me-xl-3 {
+    margin-left: 1rem !important;
+  }
+  .me-xl-4 {
+    margin-left: 1.5rem !important;
+  }
+  .me-xl-5 {
+    margin-left: 2rem !important;
+  }
+  .me-xl-6 {
+    margin-left: 3rem !important;
+  }
+  .me-xl-7 {
+    margin-left: 5rem !important;
+  }
+  .me-xl-8 {
+    margin-left: 8rem !important;
+  }
+  .me-xl-auto {
+    margin-left: auto !important;
+  }
+  .mb-xl-0 {
+    margin-bottom: 0 !important;
+  }
+  .mb-xl-1 {
+    margin-bottom: 0.25rem !important;
+  }
+  .mb-xl-2 {
+    margin-bottom: 0.5rem !important;
+  }
+  .mb-xl-3 {
+    margin-bottom: 1rem !important;
+  }
+  .mb-xl-4 {
+    margin-bottom: 1.5rem !important;
+  }
+  .mb-xl-5 {
+    margin-bottom: 2rem !important;
+  }
+  .mb-xl-6 {
+    margin-bottom: 3rem !important;
+  }
+  .mb-xl-7 {
+    margin-bottom: 5rem !important;
+  }
+  .mb-xl-8 {
+    margin-bottom: 8rem !important;
+  }
+  .mb-xl-auto {
+    margin-bottom: auto !important;
+  }
+  .ms-xl-0 {
+    margin-right: 0 !important;
+  }
+  .ms-xl-1 {
+    margin-right: 0.25rem !important;
+  }
+  .ms-xl-2 {
+    margin-right: 0.5rem !important;
+  }
+  .ms-xl-3 {
+    margin-right: 1rem !important;
+  }
+  .ms-xl-4 {
+    margin-right: 1.5rem !important;
+  }
+  .ms-xl-5 {
+    margin-right: 2rem !important;
+  }
+  .ms-xl-6 {
+    margin-right: 3rem !important;
+  }
+  .ms-xl-7 {
+    margin-right: 5rem !important;
+  }
+  .ms-xl-8 {
+    margin-right: 8rem !important;
+  }
+  .ms-xl-auto {
+    margin-right: auto !important;
+  }
+  .p-xl-0 {
+    padding: 0 !important;
+  }
+  .p-xl-1 {
+    padding: 0.25rem !important;
+  }
+  .p-xl-2 {
+    padding: 0.5rem !important;
+  }
+  .p-xl-3 {
+    padding: 1rem !important;
+  }
+  .p-xl-4 {
+    padding: 1.5rem !important;
+  }
+  .p-xl-5 {
+    padding: 2rem !important;
+  }
+  .p-xl-6 {
+    padding: 3rem !important;
+  }
+  .p-xl-7 {
+    padding: 5rem !important;
+  }
+  .p-xl-8 {
+    padding: 8rem !important;
+  }
+  .px-xl-0 {
+    padding-left: 0 !important;
+    padding-right: 0 !important;
+  }
+  .px-xl-1 {
+    padding-left: 0.25rem !important;
+    padding-right: 0.25rem !important;
+  }
+  .px-xl-2 {
+    padding-left: 0.5rem !important;
+    padding-right: 0.5rem !important;
+  }
+  .px-xl-3 {
+    padding-left: 1rem !important;
+    padding-right: 1rem !important;
+  }
+  .px-xl-4 {
+    padding-left: 1.5rem !important;
+    padding-right: 1.5rem !important;
+  }
+  .px-xl-5 {
+    padding-left: 2rem !important;
+    padding-right: 2rem !important;
+  }
+  .px-xl-6 {
+    padding-left: 3rem !important;
+    padding-right: 3rem !important;
+  }
+  .px-xl-7 {
+    padding-left: 5rem !important;
+    padding-right: 5rem !important;
+  }
+  .px-xl-8 {
+    padding-left: 8rem !important;
+    padding-right: 8rem !important;
+  }
+  .py-xl-0 {
+    padding-top: 0 !important;
+    padding-bottom: 0 !important;
+  }
+  .py-xl-1 {
+    padding-top: 0.25rem !important;
+    padding-bottom: 0.25rem !important;
+  }
+  .py-xl-2 {
+    padding-top: 0.5rem !important;
+    padding-bottom: 0.5rem !important;
+  }
+  .py-xl-3 {
+    padding-top: 1rem !important;
+    padding-bottom: 1rem !important;
+  }
+  .py-xl-4 {
+    padding-top: 1.5rem !important;
+    padding-bottom: 1.5rem !important;
+  }
+  .py-xl-5 {
+    padding-top: 2rem !important;
+    padding-bottom: 2rem !important;
+  }
+  .py-xl-6 {
+    padding-top: 3rem !important;
+    padding-bottom: 3rem !important;
+  }
+  .py-xl-7 {
+    padding-top: 5rem !important;
+    padding-bottom: 5rem !important;
+  }
+  .py-xl-8 {
+    padding-top: 8rem !important;
+    padding-bottom: 8rem !important;
+  }
+  .pt-xl-0 {
+    padding-top: 0 !important;
+  }
+  .pt-xl-1 {
+    padding-top: 0.25rem !important;
+  }
+  .pt-xl-2 {
+    padding-top: 0.5rem !important;
+  }
+  .pt-xl-3 {
+    padding-top: 1rem !important;
+  }
+  .pt-xl-4 {
+    padding-top: 1.5rem !important;
+  }
+  .pt-xl-5 {
+    padding-top: 2rem !important;
+  }
+  .pt-xl-6 {
+    padding-top: 3rem !important;
+  }
+  .pt-xl-7 {
+    padding-top: 5rem !important;
+  }
+  .pt-xl-8 {
+    padding-top: 8rem !important;
+  }
+  .pe-xl-0 {
+    padding-left: 0 !important;
+  }
+  .pe-xl-1 {
+    padding-left: 0.25rem !important;
+  }
+  .pe-xl-2 {
+    padding-left: 0.5rem !important;
+  }
+  .pe-xl-3 {
+    padding-left: 1rem !important;
+  }
+  .pe-xl-4 {
+    padding-left: 1.5rem !important;
+  }
+  .pe-xl-5 {
+    padding-left: 2rem !important;
+  }
+  .pe-xl-6 {
+    padding-left: 3rem !important;
+  }
+  .pe-xl-7 {
+    padding-left: 5rem !important;
+  }
+  .pe-xl-8 {
+    padding-left: 8rem !important;
+  }
+  .pb-xl-0 {
+    padding-bottom: 0 !important;
+  }
+  .pb-xl-1 {
+    padding-bottom: 0.25rem !important;
+  }
+  .pb-xl-2 {
+    padding-bottom: 0.5rem !important;
+  }
+  .pb-xl-3 {
+    padding-bottom: 1rem !important;
+  }
+  .pb-xl-4 {
+    padding-bottom: 1.5rem !important;
+  }
+  .pb-xl-5 {
+    padding-bottom: 2rem !important;
+  }
+  .pb-xl-6 {
+    padding-bottom: 3rem !important;
+  }
+  .pb-xl-7 {
+    padding-bottom: 5rem !important;
+  }
+  .pb-xl-8 {
+    padding-bottom: 8rem !important;
+  }
+  .ps-xl-0 {
+    padding-right: 0 !important;
+  }
+  .ps-xl-1 {
+    padding-right: 0.25rem !important;
+  }
+  .ps-xl-2 {
+    padding-right: 0.5rem !important;
+  }
+  .ps-xl-3 {
+    padding-right: 1rem !important;
+  }
+  .ps-xl-4 {
+    padding-right: 1.5rem !important;
+  }
+  .ps-xl-5 {
+    padding-right: 2rem !important;
+  }
+  .ps-xl-6 {
+    padding-right: 3rem !important;
+  }
+  .ps-xl-7 {
+    padding-right: 5rem !important;
+  }
+  .ps-xl-8 {
+    padding-right: 8rem !important;
+  }
+  .gap-xl-0 {
+    gap: 0 !important;
+  }
+  .gap-xl-1 {
+    gap: 0.25rem !important;
+  }
+  .gap-xl-2 {
+    gap: 0.5rem !important;
+  }
+  .gap-xl-3 {
+    gap: 1rem !important;
+  }
+  .gap-xl-4 {
+    gap: 1.5rem !important;
+  }
+  .gap-xl-5 {
+    gap: 2rem !important;
+  }
+  .gap-xl-6 {
+    gap: 3rem !important;
+  }
+  .gap-xl-7 {
+    gap: 5rem !important;
+  }
+  .gap-xl-8 {
+    gap: 8rem !important;
+  }
+  .row-gap-xl-0 {
+    row-gap: 0 !important;
+  }
+  .row-gap-xl-1 {
+    row-gap: 0.25rem !important;
+  }
+  .row-gap-xl-2 {
+    row-gap: 0.5rem !important;
+  }
+  .row-gap-xl-3 {
+    row-gap: 1rem !important;
+  }
+  .row-gap-xl-4 {
+    row-gap: 1.5rem !important;
+  }
+  .row-gap-xl-5 {
+    row-gap: 2rem !important;
+  }
+  .row-gap-xl-6 {
+    row-gap: 3rem !important;
+  }
+  .row-gap-xl-7 {
+    row-gap: 5rem !important;
+  }
+  .row-gap-xl-8 {
+    row-gap: 8rem !important;
+  }
+  .column-gap-xl-0 {
+    -moz-column-gap: 0 !important;
+         column-gap: 0 !important;
+  }
+  .column-gap-xl-1 {
+    -moz-column-gap: 0.25rem !important;
+         column-gap: 0.25rem !important;
+  }
+  .column-gap-xl-2 {
+    -moz-column-gap: 0.5rem !important;
+         column-gap: 0.5rem !important;
+  }
+  .column-gap-xl-3 {
+    -moz-column-gap: 1rem !important;
+         column-gap: 1rem !important;
+  }
+  .column-gap-xl-4 {
+    -moz-column-gap: 1.5rem !important;
+         column-gap: 1.5rem !important;
+  }
+  .column-gap-xl-5 {
+    -moz-column-gap: 2rem !important;
+         column-gap: 2rem !important;
+  }
+  .column-gap-xl-6 {
+    -moz-column-gap: 3rem !important;
+         column-gap: 3rem !important;
+  }
+  .column-gap-xl-7 {
+    -moz-column-gap: 5rem !important;
+         column-gap: 5rem !important;
+  }
+  .column-gap-xl-8 {
+    -moz-column-gap: 8rem !important;
+         column-gap: 8rem !important;
+  }
+  .text-xl-start {
+    text-align: right !important;
+  }
+  .text-xl-end {
+    text-align: left !important;
+  }
+  .text-xl-center {
+    text-align: center !important;
+  }
+  .columns-xl-2 {
+    -moz-columns: 2 !important;
+         columns: 2 !important;
+  }
+  .columns-xl-3 {
+    -moz-columns: 3 !important;
+         columns: 3 !important;
+  }
+  .columns-xl-4 {
+    -moz-columns: 4 !important;
+         columns: 4 !important;
+  }
+}
+@media (min-width: 1400px) {
+  .float-xxl-start {
+    float: right !important;
+  }
+  .float-xxl-end {
+    float: left !important;
+  }
+  .float-xxl-none {
+    float: none !important;
+  }
+  .object-fit-xxl-contain {
+    -o-object-fit: contain !important;
+       object-fit: contain !important;
+  }
+  .object-fit-xxl-cover {
+    -o-object-fit: cover !important;
+       object-fit: cover !important;
+  }
+  .object-fit-xxl-fill {
+    -o-object-fit: fill !important;
+       object-fit: fill !important;
+  }
+  .object-fit-xxl-scale {
+    -o-object-fit: scale-down !important;
+       object-fit: scale-down !important;
+  }
+  .object-fit-xxl-none {
+    -o-object-fit: none !important;
+       object-fit: none !important;
+  }
+  .d-xxl-inline {
+    display: inline !important;
+  }
+  .d-xxl-inline-block {
+    display: inline-block !important;
+  }
+  .d-xxl-block {
+    display: block !important;
+  }
+  .d-xxl-grid {
+    display: grid !important;
+  }
+  .d-xxl-inline-grid {
+    display: inline-grid !important;
+  }
+  .d-xxl-table {
+    display: table !important;
+  }
+  .d-xxl-table-row {
+    display: table-row !important;
+  }
+  .d-xxl-table-cell {
+    display: table-cell !important;
+  }
+  .d-xxl-flex {
+    display: flex !important;
+  }
+  .d-xxl-inline-flex {
+    display: inline-flex !important;
+  }
+  .d-xxl-none {
+    display: none !important;
+  }
+  .flex-xxl-fill {
+    flex: 1 1 auto !important;
+  }
+  .flex-xxl-row {
+    flex-direction: row !important;
+  }
+  .flex-xxl-column {
+    flex-direction: column !important;
+  }
+  .flex-xxl-row-reverse {
+    flex-direction: row-reverse !important;
+  }
+  .flex-xxl-column-reverse {
+    flex-direction: column-reverse !important;
+  }
+  .flex-xxl-grow-0 {
+    flex-grow: 0 !important;
+  }
+  .flex-xxl-grow-1 {
+    flex-grow: 1 !important;
+  }
+  .flex-xxl-shrink-0 {
+    flex-shrink: 0 !important;
+  }
+  .flex-xxl-shrink-1 {
+    flex-shrink: 1 !important;
+  }
+  .flex-xxl-wrap {
+    flex-wrap: wrap !important;
+  }
+  .flex-xxl-nowrap {
+    flex-wrap: nowrap !important;
+  }
+  .flex-xxl-wrap-reverse {
+    flex-wrap: wrap-reverse !important;
+  }
+  .justify-content-xxl-start {
+    justify-content: flex-start !important;
+  }
+  .justify-content-xxl-end {
+    justify-content: flex-end !important;
+  }
+  .justify-content-xxl-center {
+    justify-content: center !important;
+  }
+  .justify-content-xxl-between {
+    justify-content: space-between !important;
+  }
+  .justify-content-xxl-around {
+    justify-content: space-around !important;
+  }
+  .justify-content-xxl-evenly {
+    justify-content: space-evenly !important;
+  }
+  .align-items-xxl-start {
+    align-items: flex-start !important;
+  }
+  .align-items-xxl-end {
+    align-items: flex-end !important;
+  }
+  .align-items-xxl-center {
+    align-items: center !important;
+  }
+  .align-items-xxl-baseline {
+    align-items: baseline !important;
+  }
+  .align-items-xxl-stretch {
+    align-items: stretch !important;
+  }
+  .align-content-xxl-start {
+    align-content: flex-start !important;
+  }
+  .align-content-xxl-end {
+    align-content: flex-end !important;
+  }
+  .align-content-xxl-center {
+    align-content: center !important;
+  }
+  .align-content-xxl-between {
+    align-content: space-between !important;
+  }
+  .align-content-xxl-around {
+    align-content: space-around !important;
+  }
+  .align-content-xxl-stretch {
+    align-content: stretch !important;
+  }
+  .align-self-xxl-auto {
+    align-self: auto !important;
+  }
+  .align-self-xxl-start {
+    align-self: flex-start !important;
+  }
+  .align-self-xxl-end {
+    align-self: flex-end !important;
+  }
+  .align-self-xxl-center {
+    align-self: center !important;
+  }
+  .align-self-xxl-baseline {
+    align-self: baseline !important;
+  }
+  .align-self-xxl-stretch {
+    align-self: stretch !important;
+  }
+  .order-xxl-first {
+    order: -1 !important;
+  }
+  .order-xxl-0 {
+    order: 0 !important;
+  }
+  .order-xxl-1 {
+    order: 1 !important;
+  }
+  .order-xxl-2 {
+    order: 2 !important;
+  }
+  .order-xxl-3 {
+    order: 3 !important;
+  }
+  .order-xxl-4 {
+    order: 4 !important;
+  }
+  .order-xxl-5 {
+    order: 5 !important;
+  }
+  .order-xxl-last {
+    order: 6 !important;
+  }
+  .m-xxl-0 {
+    margin: 0 !important;
+  }
+  .m-xxl-1 {
+    margin: 0.25rem !important;
+  }
+  .m-xxl-2 {
+    margin: 0.5rem !important;
+  }
+  .m-xxl-3 {
+    margin: 1rem !important;
+  }
+  .m-xxl-4 {
+    margin: 1.5rem !important;
+  }
+  .m-xxl-5 {
+    margin: 2rem !important;
+  }
+  .m-xxl-6 {
+    margin: 3rem !important;
+  }
+  .m-xxl-7 {
+    margin: 5rem !important;
+  }
+  .m-xxl-8 {
+    margin: 8rem !important;
+  }
+  .m-xxl-auto {
+    margin: auto !important;
+  }
+  .mx-xxl-0 {
+    margin-left: 0 !important;
+    margin-right: 0 !important;
+  }
+  .mx-xxl-1 {
+    margin-left: 0.25rem !important;
+    margin-right: 0.25rem !important;
+  }
+  .mx-xxl-2 {
+    margin-left: 0.5rem !important;
+    margin-right: 0.5rem !important;
+  }
+  .mx-xxl-3 {
+    margin-left: 1rem !important;
+    margin-right: 1rem !important;
+  }
+  .mx-xxl-4 {
+    margin-left: 1.5rem !important;
+    margin-right: 1.5rem !important;
+  }
+  .mx-xxl-5 {
+    margin-left: 2rem !important;
+    margin-right: 2rem !important;
+  }
+  .mx-xxl-6 {
+    margin-left: 3rem !important;
+    margin-right: 3rem !important;
+  }
+  .mx-xxl-7 {
+    margin-left: 5rem !important;
+    margin-right: 5rem !important;
+  }
+  .mx-xxl-8 {
+    margin-left: 8rem !important;
+    margin-right: 8rem !important;
+  }
+  .mx-xxl-auto {
+    margin-left: auto !important;
+    margin-right: auto !important;
+  }
+  .my-xxl-0 {
+    margin-top: 0 !important;
+    margin-bottom: 0 !important;
+  }
+  .my-xxl-1 {
+    margin-top: 0.25rem !important;
+    margin-bottom: 0.25rem !important;
+  }
+  .my-xxl-2 {
+    margin-top: 0.5rem !important;
+    margin-bottom: 0.5rem !important;
+  }
+  .my-xxl-3 {
+    margin-top: 1rem !important;
+    margin-bottom: 1rem !important;
+  }
+  .my-xxl-4 {
+    margin-top: 1.5rem !important;
+    margin-bottom: 1.5rem !important;
+  }
+  .my-xxl-5 {
+    margin-top: 2rem !important;
+    margin-bottom: 2rem !important;
+  }
+  .my-xxl-6 {
+    margin-top: 3rem !important;
+    margin-bottom: 3rem !important;
+  }
+  .my-xxl-7 {
+    margin-top: 5rem !important;
+    margin-bottom: 5rem !important;
+  }
+  .my-xxl-8 {
+    margin-top: 8rem !important;
+    margin-bottom: 8rem !important;
+  }
+  .my-xxl-auto {
+    margin-top: auto !important;
+    margin-bottom: auto !important;
+  }
+  .mt-xxl-0 {
+    margin-top: 0 !important;
+  }
+  .mt-xxl-1 {
+    margin-top: 0.25rem !important;
+  }
+  .mt-xxl-2 {
+    margin-top: 0.5rem !important;
+  }
+  .mt-xxl-3 {
+    margin-top: 1rem !important;
+  }
+  .mt-xxl-4 {
+    margin-top: 1.5rem !important;
+  }
+  .mt-xxl-5 {
+    margin-top: 2rem !important;
+  }
+  .mt-xxl-6 {
+    margin-top: 3rem !important;
+  }
+  .mt-xxl-7 {
+    margin-top: 5rem !important;
+  }
+  .mt-xxl-8 {
+    margin-top: 8rem !important;
+  }
+  .mt-xxl-auto {
+    margin-top: auto !important;
+  }
+  .me-xxl-0 {
+    margin-left: 0 !important;
+  }
+  .me-xxl-1 {
+    margin-left: 0.25rem !important;
+  }
+  .me-xxl-2 {
+    margin-left: 0.5rem !important;
+  }
+  .me-xxl-3 {
+    margin-left: 1rem !important;
+  }
+  .me-xxl-4 {
+    margin-left: 1.5rem !important;
+  }
+  .me-xxl-5 {
+    margin-left: 2rem !important;
+  }
+  .me-xxl-6 {
+    margin-left: 3rem !important;
+  }
+  .me-xxl-7 {
+    margin-left: 5rem !important;
+  }
+  .me-xxl-8 {
+    margin-left: 8rem !important;
+  }
+  .me-xxl-auto {
+    margin-left: auto !important;
+  }
+  .mb-xxl-0 {
+    margin-bottom: 0 !important;
+  }
+  .mb-xxl-1 {
+    margin-bottom: 0.25rem !important;
+  }
+  .mb-xxl-2 {
+    margin-bottom: 0.5rem !important;
+  }
+  .mb-xxl-3 {
+    margin-bottom: 1rem !important;
+  }
+  .mb-xxl-4 {
+    margin-bottom: 1.5rem !important;
+  }
+  .mb-xxl-5 {
+    margin-bottom: 2rem !important;
+  }
+  .mb-xxl-6 {
+    margin-bottom: 3rem !important;
+  }
+  .mb-xxl-7 {
+    margin-bottom: 5rem !important;
+  }
+  .mb-xxl-8 {
+    margin-bottom: 8rem !important;
+  }
+  .mb-xxl-auto {
+    margin-bottom: auto !important;
+  }
+  .ms-xxl-0 {
+    margin-right: 0 !important;
+  }
+  .ms-xxl-1 {
+    margin-right: 0.25rem !important;
+  }
+  .ms-xxl-2 {
+    margin-right: 0.5rem !important;
+  }
+  .ms-xxl-3 {
+    margin-right: 1rem !important;
+  }
+  .ms-xxl-4 {
+    margin-right: 1.5rem !important;
+  }
+  .ms-xxl-5 {
+    margin-right: 2rem !important;
+  }
+  .ms-xxl-6 {
+    margin-right: 3rem !important;
+  }
+  .ms-xxl-7 {
+    margin-right: 5rem !important;
+  }
+  .ms-xxl-8 {
+    margin-right: 8rem !important;
+  }
+  .ms-xxl-auto {
+    margin-right: auto !important;
+  }
+  .p-xxl-0 {
+    padding: 0 !important;
+  }
+  .p-xxl-1 {
+    padding: 0.25rem !important;
+  }
+  .p-xxl-2 {
+    padding: 0.5rem !important;
+  }
+  .p-xxl-3 {
+    padding: 1rem !important;
+  }
+  .p-xxl-4 {
+    padding: 1.5rem !important;
+  }
+  .p-xxl-5 {
+    padding: 2rem !important;
+  }
+  .p-xxl-6 {
+    padding: 3rem !important;
+  }
+  .p-xxl-7 {
+    padding: 5rem !important;
+  }
+  .p-xxl-8 {
+    padding: 8rem !important;
+  }
+  .px-xxl-0 {
+    padding-left: 0 !important;
+    padding-right: 0 !important;
+  }
+  .px-xxl-1 {
+    padding-left: 0.25rem !important;
+    padding-right: 0.25rem !important;
+  }
+  .px-xxl-2 {
+    padding-left: 0.5rem !important;
+    padding-right: 0.5rem !important;
+  }
+  .px-xxl-3 {
+    padding-left: 1rem !important;
+    padding-right: 1rem !important;
+  }
+  .px-xxl-4 {
+    padding-left: 1.5rem !important;
+    padding-right: 1.5rem !important;
+  }
+  .px-xxl-5 {
+    padding-left: 2rem !important;
+    padding-right: 2rem !important;
+  }
+  .px-xxl-6 {
+    padding-left: 3rem !important;
+    padding-right: 3rem !important;
+  }
+  .px-xxl-7 {
+    padding-left: 5rem !important;
+    padding-right: 5rem !important;
+  }
+  .px-xxl-8 {
+    padding-left: 8rem !important;
+    padding-right: 8rem !important;
+  }
+  .py-xxl-0 {
+    padding-top: 0 !important;
+    padding-bottom: 0 !important;
+  }
+  .py-xxl-1 {
+    padding-top: 0.25rem !important;
+    padding-bottom: 0.25rem !important;
+  }
+  .py-xxl-2 {
+    padding-top: 0.5rem !important;
+    padding-bottom: 0.5rem !important;
+  }
+  .py-xxl-3 {
+    padding-top: 1rem !important;
+    padding-bottom: 1rem !important;
+  }
+  .py-xxl-4 {
+    padding-top: 1.5rem !important;
+    padding-bottom: 1.5rem !important;
+  }
+  .py-xxl-5 {
+    padding-top: 2rem !important;
+    padding-bottom: 2rem !important;
+  }
+  .py-xxl-6 {
+    padding-top: 3rem !important;
+    padding-bottom: 3rem !important;
+  }
+  .py-xxl-7 {
+    padding-top: 5rem !important;
+    padding-bottom: 5rem !important;
+  }
+  .py-xxl-8 {
+    padding-top: 8rem !important;
+    padding-bottom: 8rem !important;
+  }
+  .pt-xxl-0 {
+    padding-top: 0 !important;
+  }
+  .pt-xxl-1 {
+    padding-top: 0.25rem !important;
+  }
+  .pt-xxl-2 {
+    padding-top: 0.5rem !important;
+  }
+  .pt-xxl-3 {
+    padding-top: 1rem !important;
+  }
+  .pt-xxl-4 {
+    padding-top: 1.5rem !important;
+  }
+  .pt-xxl-5 {
+    padding-top: 2rem !important;
+  }
+  .pt-xxl-6 {
+    padding-top: 3rem !important;
+  }
+  .pt-xxl-7 {
+    padding-top: 5rem !important;
+  }
+  .pt-xxl-8 {
+    padding-top: 8rem !important;
+  }
+  .pe-xxl-0 {
+    padding-left: 0 !important;
+  }
+  .pe-xxl-1 {
+    padding-left: 0.25rem !important;
+  }
+  .pe-xxl-2 {
+    padding-left: 0.5rem !important;
+  }
+  .pe-xxl-3 {
+    padding-left: 1rem !important;
+  }
+  .pe-xxl-4 {
+    padding-left: 1.5rem !important;
+  }
+  .pe-xxl-5 {
+    padding-left: 2rem !important;
+  }
+  .pe-xxl-6 {
+    padding-left: 3rem !important;
+  }
+  .pe-xxl-7 {
+    padding-left: 5rem !important;
+  }
+  .pe-xxl-8 {
+    padding-left: 8rem !important;
+  }
+  .pb-xxl-0 {
+    padding-bottom: 0 !important;
+  }
+  .pb-xxl-1 {
+    padding-bottom: 0.25rem !important;
+  }
+  .pb-xxl-2 {
+    padding-bottom: 0.5rem !important;
+  }
+  .pb-xxl-3 {
+    padding-bottom: 1rem !important;
+  }
+  .pb-xxl-4 {
+    padding-bottom: 1.5rem !important;
+  }
+  .pb-xxl-5 {
+    padding-bottom: 2rem !important;
+  }
+  .pb-xxl-6 {
+    padding-bottom: 3rem !important;
+  }
+  .pb-xxl-7 {
+    padding-bottom: 5rem !important;
+  }
+  .pb-xxl-8 {
+    padding-bottom: 8rem !important;
+  }
+  .ps-xxl-0 {
+    padding-right: 0 !important;
+  }
+  .ps-xxl-1 {
+    padding-right: 0.25rem !important;
+  }
+  .ps-xxl-2 {
+    padding-right: 0.5rem !important;
+  }
+  .ps-xxl-3 {
+    padding-right: 1rem !important;
+  }
+  .ps-xxl-4 {
+    padding-right: 1.5rem !important;
+  }
+  .ps-xxl-5 {
+    padding-right: 2rem !important;
+  }
+  .ps-xxl-6 {
+    padding-right: 3rem !important;
+  }
+  .ps-xxl-7 {
+    padding-right: 5rem !important;
+  }
+  .ps-xxl-8 {
+    padding-right: 8rem !important;
+  }
+  .gap-xxl-0 {
+    gap: 0 !important;
+  }
+  .gap-xxl-1 {
+    gap: 0.25rem !important;
+  }
+  .gap-xxl-2 {
+    gap: 0.5rem !important;
+  }
+  .gap-xxl-3 {
+    gap: 1rem !important;
+  }
+  .gap-xxl-4 {
+    gap: 1.5rem !important;
+  }
+  .gap-xxl-5 {
+    gap: 2rem !important;
+  }
+  .gap-xxl-6 {
+    gap: 3rem !important;
+  }
+  .gap-xxl-7 {
+    gap: 5rem !important;
+  }
+  .gap-xxl-8 {
+    gap: 8rem !important;
+  }
+  .row-gap-xxl-0 {
+    row-gap: 0 !important;
+  }
+  .row-gap-xxl-1 {
+    row-gap: 0.25rem !important;
+  }
+  .row-gap-xxl-2 {
+    row-gap: 0.5rem !important;
+  }
+  .row-gap-xxl-3 {
+    row-gap: 1rem !important;
+  }
+  .row-gap-xxl-4 {
+    row-gap: 1.5rem !important;
+  }
+  .row-gap-xxl-5 {
+    row-gap: 2rem !important;
+  }
+  .row-gap-xxl-6 {
+    row-gap: 3rem !important;
+  }
+  .row-gap-xxl-7 {
+    row-gap: 5rem !important;
+  }
+  .row-gap-xxl-8 {
+    row-gap: 8rem !important;
+  }
+  .column-gap-xxl-0 {
+    -moz-column-gap: 0 !important;
+         column-gap: 0 !important;
+  }
+  .column-gap-xxl-1 {
+    -moz-column-gap: 0.25rem !important;
+         column-gap: 0.25rem !important;
+  }
+  .column-gap-xxl-2 {
+    -moz-column-gap: 0.5rem !important;
+         column-gap: 0.5rem !important;
+  }
+  .column-gap-xxl-3 {
+    -moz-column-gap: 1rem !important;
+         column-gap: 1rem !important;
+  }
+  .column-gap-xxl-4 {
+    -moz-column-gap: 1.5rem !important;
+         column-gap: 1.5rem !important;
+  }
+  .column-gap-xxl-5 {
+    -moz-column-gap: 2rem !important;
+         column-gap: 2rem !important;
+  }
+  .column-gap-xxl-6 {
+    -moz-column-gap: 3rem !important;
+         column-gap: 3rem !important;
+  }
+  .column-gap-xxl-7 {
+    -moz-column-gap: 5rem !important;
+         column-gap: 5rem !important;
+  }
+  .column-gap-xxl-8 {
+    -moz-column-gap: 8rem !important;
+         column-gap: 8rem !important;
+  }
+  .text-xxl-start {
+    text-align: right !important;
+  }
+  .text-xxl-end {
+    text-align: left !important;
+  }
+  .text-xxl-center {
+    text-align: center !important;
+  }
+  .columns-xxl-2 {
+    -moz-columns: 2 !important;
+         columns: 2 !important;
+  }
+  .columns-xxl-3 {
+    -moz-columns: 3 !important;
+         columns: 3 !important;
+  }
+  .columns-xxl-4 {
+    -moz-columns: 4 !important;
+         columns: 4 !important;
+  }
+}
+@media print {
+  .d-print-inline {
+    display: inline !important;
+  }
+  .d-print-inline-block {
+    display: inline-block !important;
+  }
+  .d-print-block {
+    display: block !important;
+  }
+  .d-print-grid {
+    display: grid !important;
+  }
+  .d-print-inline-grid {
+    display: inline-grid !important;
+  }
+  .d-print-table {
+    display: table !important;
+  }
+  .d-print-table-row {
+    display: table-row !important;
+  }
+  .d-print-table-cell {
+    display: table-cell !important;
+  }
+  .d-print-flex {
+    display: flex !important;
+  }
+  .d-print-inline-flex {
+    display: inline-flex !important;
+  }
+  .d-print-none {
+    display: none !important;
+  }
+}
+:root,
+:host {
+  font-size: 16px;
+  height: 100%;
+}
+
+:root,
+:host,
+[data-bs-theme=light] {
+  --tblr-primary: #0054a6;
+  --tblr-primary-rgb: 0, 84, 166;
+  --tblr-primary-fg: var(--tblr-light);
+  --tblr-primary-darken: #004c95;
+  --tblr-primary-lt: #e6eef6;
+  --tblr-primary-lt-rgb: 230, 238, 246;
+  --tblr-secondary: #667382;
+  --tblr-secondary-rgb: 102, 115, 130;
+  --tblr-secondary-fg: var(--tblr-light);
+  --tblr-secondary-darken: #5c6875;
+  --tblr-secondary-lt: #f0f1f3;
+  --tblr-secondary-lt-rgb: 240, 241, 243;
+  --tblr-success: #2fb344;
+  --tblr-success-rgb: 47, 179, 68;
+  --tblr-success-fg: var(--tblr-light);
+  --tblr-success-darken: #2aa13d;
+  --tblr-success-lt: #eaf7ec;
+  --tblr-success-lt-rgb: 234, 247, 236;
+  --tblr-info: #4299e1;
+  --tblr-info-rgb: 66, 153, 225;
+  --tblr-info-fg: var(--tblr-light);
+  --tblr-info-darken: #3b8acb;
+  --tblr-info-lt: #ecf5fc;
+  --tblr-info-lt-rgb: 236, 245, 252;
+  --tblr-warning: #f76707;
+  --tblr-warning-rgb: 247, 103, 7;
+  --tblr-warning-fg: var(--tblr-light);
+  --tblr-warning-darken: #de5d06;
+  --tblr-warning-lt: #fef0e6;
+  --tblr-warning-lt-rgb: 254, 240, 230;
+  --tblr-danger: #d63939;
+  --tblr-danger-rgb: 214, 57, 57;
+  --tblr-danger-fg: var(--tblr-light);
+  --tblr-danger-darken: #c13333;
+  --tblr-danger-lt: #fbebeb;
+  --tblr-danger-lt-rgb: 251, 235, 235;
+  --tblr-light: #fcfdfe;
+  --tblr-light-rgb: 252, 253, 254;
+  --tblr-light-fg: var(--tblr-dark);
+  --tblr-light-darken: #e3e4e5;
+  --tblr-light-lt: white;
+  --tblr-light-lt-rgb: 255, 255, 255;
+  --tblr-dark: #182433;
+  --tblr-dark-rgb: 24, 36, 51;
+  --tblr-dark-fg: var(--tblr-light);
+  --tblr-dark-darken: #16202e;
+  --tblr-dark-lt: #e8e9eb;
+  --tblr-dark-lt-rgb: 232, 233, 235;
+  --tblr-muted: #667382;
+  --tblr-muted-rgb: 102, 115, 130;
+  --tblr-muted-fg: var(--tblr-light);
+  --tblr-muted-darken: #5c6875;
+  --tblr-muted-lt: #f0f1f3;
+  --tblr-muted-lt-rgb: 240, 241, 243;
+  --tblr-blue: #0054a6;
+  --tblr-blue-rgb: 0, 84, 166;
+  --tblr-blue-fg: var(--tblr-light);
+  --tblr-blue-darken: #004c95;
+  --tblr-blue-lt: #e6eef6;
+  --tblr-blue-lt-rgb: 230, 238, 246;
+  --tblr-azure: #4299e1;
+  --tblr-azure-rgb: 66, 153, 225;
+  --tblr-azure-fg: var(--tblr-light);
+  --tblr-azure-darken: #3b8acb;
+  --tblr-azure-lt: #ecf5fc;
+  --tblr-azure-lt-rgb: 236, 245, 252;
+  --tblr-indigo: #4263eb;
+  --tblr-indigo-rgb: 66, 99, 235;
+  --tblr-indigo-fg: var(--tblr-light);
+  --tblr-indigo-darken: #3b59d4;
+  --tblr-indigo-lt: #eceffd;
+  --tblr-indigo-lt-rgb: 236, 239, 253;
+  --tblr-purple: #ae3ec9;
+  --tblr-purple-rgb: 174, 62, 201;
+  --tblr-purple-fg: var(--tblr-light);
+  --tblr-purple-darken: #9d38b5;
+  --tblr-purple-lt: #f7ecfa;
+  --tblr-purple-lt-rgb: 247, 236, 250;
+  --tblr-pink: #d6336c;
+  --tblr-pink-rgb: 214, 51, 108;
+  --tblr-pink-fg: var(--tblr-light);
+  --tblr-pink-darken: #c12e61;
+  --tblr-pink-lt: #fbebf0;
+  --tblr-pink-lt-rgb: 251, 235, 240;
+  --tblr-red: #d63939;
+  --tblr-red-rgb: 214, 57, 57;
+  --tblr-red-fg: var(--tblr-light);
+  --tblr-red-darken: #c13333;
+  --tblr-red-lt: #fbebeb;
+  --tblr-red-lt-rgb: 251, 235, 235;
+  --tblr-orange: #f76707;
+  --tblr-orange-rgb: 247, 103, 7;
+  --tblr-orange-fg: var(--tblr-light);
+  --tblr-orange-darken: #de5d06;
+  --tblr-orange-lt: #fef0e6;
+  --tblr-orange-lt-rgb: 254, 240, 230;
+  --tblr-yellow: #f59f00;
+  --tblr-yellow-rgb: 245, 159, 0;
+  --tblr-yellow-fg: var(--tblr-light);
+  --tblr-yellow-darken: #dd8f00;
+  --tblr-yellow-lt: #fef5e6;
+  --tblr-yellow-lt-rgb: 254, 245, 230;
+  --tblr-lime: #74b816;
+  --tblr-lime-rgb: 116, 184, 22;
+  --tblr-lime-fg: var(--tblr-light);
+  --tblr-lime-darken: #68a614;
+  --tblr-lime-lt: #f1f8e8;
+  --tblr-lime-lt-rgb: 241, 248, 232;
+  --tblr-green: #2fb344;
+  --tblr-green-rgb: 47, 179, 68;
+  --tblr-green-fg: var(--tblr-light);
+  --tblr-green-darken: #2aa13d;
+  --tblr-green-lt: #eaf7ec;
+  --tblr-green-lt-rgb: 234, 247, 236;
+  --tblr-teal: #0ca678;
+  --tblr-teal-rgb: 12, 166, 120;
+  --tblr-teal-fg: var(--tblr-light);
+  --tblr-teal-darken: #0b956c;
+  --tblr-teal-lt: #e7f6f2;
+  --tblr-teal-lt-rgb: 231, 246, 242;
+  --tblr-cyan: #17a2b8;
+  --tblr-cyan-rgb: 23, 162, 184;
+  --tblr-cyan-fg: var(--tblr-light);
+  --tblr-cyan-darken: #1592a6;
+  --tblr-cyan-lt: #e8f6f8;
+  --tblr-cyan-lt-rgb: 232, 246, 248;
+  --tblr-facebook: #1877f2;
+  --tblr-facebook-rgb: 24, 119, 242;
+  --tblr-facebook-fg: var(--tblr-light);
+  --tblr-facebook-darken: #166bda;
+  --tblr-facebook-lt: #e8f1fe;
+  --tblr-facebook-lt-rgb: 232, 241, 254;
+  --tblr-twitter: #1da1f2;
+  --tblr-twitter-rgb: 29, 161, 242;
+  --tblr-twitter-fg: var(--tblr-light);
+  --tblr-twitter-darken: #1a91da;
+  --tblr-twitter-lt: #e8f6fe;
+  --tblr-twitter-lt-rgb: 232, 246, 254;
+  --tblr-linkedin: #0a66c2;
+  --tblr-linkedin-rgb: 10, 102, 194;
+  --tblr-linkedin-fg: var(--tblr-light);
+  --tblr-linkedin-darken: #095caf;
+  --tblr-linkedin-lt: #e7f0f9;
+  --tblr-linkedin-lt-rgb: 231, 240, 249;
+  --tblr-google: #dc4e41;
+  --tblr-google-rgb: 220, 78, 65;
+  --tblr-google-fg: var(--tblr-light);
+  --tblr-google-darken: #c6463b;
+  --tblr-google-lt: #fcedec;
+  --tblr-google-lt-rgb: 252, 237, 236;
+  --tblr-youtube: #ff0000;
+  --tblr-youtube-rgb: 255, 0, 0;
+  --tblr-youtube-fg: var(--tblr-light);
+  --tblr-youtube-darken: #e60000;
+  --tblr-youtube-lt: #ffe6e6;
+  --tblr-youtube-lt-rgb: 255, 230, 230;
+  --tblr-vimeo: #1ab7ea;
+  --tblr-vimeo-rgb: 26, 183, 234;
+  --tblr-vimeo-fg: var(--tblr-light);
+  --tblr-vimeo-darken: #17a5d3;
+  --tblr-vimeo-lt: #e8f8fd;
+  --tblr-vimeo-lt-rgb: 232, 248, 253;
+  --tblr-dribbble: #ea4c89;
+  --tblr-dribbble-rgb: 234, 76, 137;
+  --tblr-dribbble-fg: var(--tblr-light);
+  --tblr-dribbble-darken: #d3447b;
+  --tblr-dribbble-lt: #fdedf3;
+  --tblr-dribbble-lt-rgb: 253, 237, 243;
+  --tblr-github: #181717;
+  --tblr-github-rgb: 24, 23, 23;
+  --tblr-github-fg: var(--tblr-light);
+  --tblr-github-darken: #161515;
+  --tblr-github-lt: #e8e8e8;
+  --tblr-github-lt-rgb: 232, 232, 232;
+  --tblr-instagram: #e4405f;
+  --tblr-instagram-rgb: 228, 64, 95;
+  --tblr-instagram-fg: var(--tblr-light);
+  --tblr-instagram-darken: #cd3a56;
+  --tblr-instagram-lt: #fcecef;
+  --tblr-instagram-lt-rgb: 252, 236, 239;
+  --tblr-pinterest: #bd081c;
+  --tblr-pinterest-rgb: 189, 8, 28;
+  --tblr-pinterest-fg: var(--tblr-light);
+  --tblr-pinterest-darken: #aa0719;
+  --tblr-pinterest-lt: #f8e6e8;
+  --tblr-pinterest-lt-rgb: 248, 230, 232;
+  --tblr-vk: #6383a8;
+  --tblr-vk-rgb: 99, 131, 168;
+  --tblr-vk-fg: var(--tblr-light);
+  --tblr-vk-darken: #597697;
+  --tblr-vk-lt: #eff3f6;
+  --tblr-vk-lt-rgb: 239, 243, 246;
+  --tblr-rss: #ffa500;
+  --tblr-rss-rgb: 255, 165, 0;
+  --tblr-rss-fg: var(--tblr-light);
+  --tblr-rss-darken: #e69500;
+  --tblr-rss-lt: #fff6e6;
+  --tblr-rss-lt-rgb: 255, 246, 230;
+  --tblr-flickr: #0063dc;
+  --tblr-flickr-rgb: 0, 99, 220;
+  --tblr-flickr-fg: var(--tblr-light);
+  --tblr-flickr-darken: #0059c6;
+  --tblr-flickr-lt: #e6effc;
+  --tblr-flickr-lt-rgb: 230, 239, 252;
+  --tblr-bitbucket: #0052cc;
+  --tblr-bitbucket-rgb: 0, 82, 204;
+  --tblr-bitbucket-fg: var(--tblr-light);
+  --tblr-bitbucket-darken: #004ab8;
+  --tblr-bitbucket-lt: #e6eefa;
+  --tblr-bitbucket-lt-rgb: 230, 238, 250;
+  --tblr-tabler: #0054a6;
+  --tblr-tabler-rgb: 0, 84, 166;
+  --tblr-tabler-fg: var(--tblr-light);
+  --tblr-tabler-darken: #004c95;
+  --tblr-tabler-lt: #e6eef6;
+  --tblr-tabler-lt-rgb: 230, 238, 246;
+  --tblr-gray-50: #fcfdfe;
+  --tblr-gray-50-rgb: 252, 253, 254;
+  --tblr-gray-50-fg: var(--tblr-dark);
+  --tblr-gray-50-darken: #e3e4e5;
+  --tblr-gray-50-lt: white;
+  --tblr-gray-50-lt-rgb: 255, 255, 255;
+  --tblr-gray-100: #f6f8fb;
+  --tblr-gray-100-rgb: 246, 248, 251;
+  --tblr-gray-100-fg: var(--tblr-dark);
+  --tblr-gray-100-darken: #dddfe2;
+  --tblr-gray-100-lt: #fefeff;
+  --tblr-gray-100-lt-rgb: 254, 254, 255;
+  --tblr-gray-200: #eef1f4;
+  --tblr-gray-200-rgb: 238, 241, 244;
+  --tblr-gray-200-fg: var(--tblr-dark);
+  --tblr-gray-200-darken: #d6d9dc;
+  --tblr-gray-200-lt: #fdfefe;
+  --tblr-gray-200-lt-rgb: 253, 254, 254;
+  --tblr-gray-300: #dadfe5;
+  --tblr-gray-300-rgb: 218, 223, 229;
+  --tblr-gray-300-fg: var(--tblr-dark);
+  --tblr-gray-300-darken: #c4c9ce;
+  --tblr-gray-300-lt: #fbfcfc;
+  --tblr-gray-300-lt-rgb: 251, 252, 252;
+  --tblr-gray-400: #bbc3cd;
+  --tblr-gray-400-rgb: 187, 195, 205;
+  --tblr-gray-400-fg: var(--tblr-light);
+  --tblr-gray-400-darken: #a8b0b9;
+  --tblr-gray-400-lt: #f8f9fa;
+  --tblr-gray-400-lt-rgb: 248, 249, 250;
+  --tblr-gray-500: #929dab;
+  --tblr-gray-500-rgb: 146, 157, 171;
+  --tblr-gray-500-fg: var(--tblr-light);
+  --tblr-gray-500-darken: #838d9a;
+  --tblr-gray-500-lt: #f4f5f7;
+  --tblr-gray-500-lt-rgb: 244, 245, 247;
+  --tblr-gray-600: #667382;
+  --tblr-gray-600-rgb: 102, 115, 130;
+  --tblr-gray-600-fg: var(--tblr-light);
+  --tblr-gray-600-darken: #5c6875;
+  --tblr-gray-600-lt: #f0f1f3;
+  --tblr-gray-600-lt-rgb: 240, 241, 243;
+  --tblr-gray-700: #3a4859;
+  --tblr-gray-700-rgb: 58, 72, 89;
+  --tblr-gray-700-fg: var(--tblr-light);
+  --tblr-gray-700-darken: #344150;
+  --tblr-gray-700-lt: #ebedee;
+  --tblr-gray-700-lt-rgb: 235, 237, 238;
+  --tblr-gray-800: #182433;
+  --tblr-gray-800-rgb: 24, 36, 51;
+  --tblr-gray-800-fg: var(--tblr-light);
+  --tblr-gray-800-darken: #16202e;
+  --tblr-gray-800-lt: #e8e9eb;
+  --tblr-gray-800-lt-rgb: 232, 233, 235;
+  --tblr-gray-900: #040a11;
+  --tblr-gray-900-rgb: 4, 10, 17;
+  --tblr-gray-900-fg: var(--tblr-light);
+  --tblr-gray-900-darken: #04090f;
+  --tblr-gray-900-lt: #e6e7e7;
+  --tblr-gray-900-lt-rgb: 230, 231, 231;
+  --tblr-spacer-0: 0;
+  --tblr-spacer-1: 0.25rem;
+  --tblr-spacer-2: 0.5rem;
+  --tblr-spacer-3: 1rem;
+  --tblr-spacer-4: 1.5rem;
+  --tblr-spacer-5: 2rem;
+  --tblr-spacer-6: 3rem;
+  --tblr-spacer-7: 5rem;
+  --tblr-spacer-8: 8rem;
+  --tblr-spacer: 1rem;
+  --tblr-bg-surface: var(--tblr-white);
+  --tblr-bg-surface-secondary: var(--tblr-gray-100);
+  --tblr-bg-surface-tertiary: var(--tblr-gray-50);
+  --tblr-bg-surface-dark: var(--tblr-dark);
+  --tblr-bg-forms: var(--tblr-bg-surface);
+  --tblr-border-color: #dadfe5;
+  --tblr-border-color-translucent: rgba(4, 32, 69, 0.14);
+  --tblr-border-dark-color: #bbc3cd;
+  --tblr-border-dark-color-translucent: rgba(4, 32, 69, 0.27);
+  --tblr-border-active-color: #b6bcc3;
+  --tblr-icon-color: var(--tblr-gray-500);
+  --tblr-active-bg: rgba(var(--tblr-primary-rgb), 0.04);
+  --tblr-disabled-bg: var(--tblr-bg-surface-secondary);
+  --tblr-disabled-color: var(--tblr-gray-300);
+  --tblr-code-color: var(--tblr-gray-600);
+  --tblr-code-bg: var(--tblr-bg-surface-secondary);
+  --tblr-dark-mode-border-color: #1f2e41;
+  --tblr-dark-mode-border-color-translucent: rgba(72, 110, 149, 0.14);
+  --tblr-dark-mode-border-color-active: #2c415d;
+  --tblr-dark-mode-border-dark-color: #1f2e41;
+  --tblr-page-padding: var(--tblr-spacer-3);
+  --tblr-page-padding-y: var(--tblr-spacer-4);
+  --tblr-font-weight-light: 300;
+  --tblr-font-weight-normal: 400;
+  --tblr-font-weight-medium: 500;
+  --tblr-font-weight-bold: 600;
+  --tblr-font-weight-headings: var(--tblr-font-weight-bold);
+  --tblr-font-size-h1: 1.5rem;
+  --tblr-font-size-h2: 1.25rem;
+  --tblr-font-size-h3: 1rem;
+  --tblr-font-size-h4: 0.875rem;
+  --tblr-font-size-h5: 0.75rem;
+  --tblr-font-size-h6: 0.625rem;
+  --tblr-line-height-h1: 2rem;
+  --tblr-line-height-h2: 1.75rem;
+  --tblr-line-height-h3: 1.5rem;
+  --tblr-line-height-h4: 1.25rem;
+  --tblr-line-height-h5: 1rem;
+  --tblr-line-height-h6: 1rem;
+  --tblr-box-shadow: rgba(var(--tblr-body-color-rgb), 0.04) 0 2px 4px 0;
+  --tblr-box-shadow-border: inset 0 0 0 1px var(--tblr-border-color-translucent);
+  --tblr-box-shadow-transparent: 0 0 0 0 transparent;
+  --tblr-box-shadow-input: 0 1px 1px rgba(var(--tblr-body-color-rgb), 0.06);
+  --tblr-box-shadow-card: 0 0 4px rgba(var(--tblr-body-color-rgb), 0.04);
+  --tblr-box-shadow-card-hover: rgba(var(--tblr-body-color-rgb), 0.16) 0 2px 16px 0;
+  --tblr-box-shadow-dropdown: 0 16px 24px 2px rgba(0, 0, 0, 0.07), 0 6px 30px 5px rgba(0, 0, 0, 0.06), 0 8px 10px -5px rgba(0, 0, 0, 0.1);
+}
+@media (max-width: 991.98px) {
+  :root,
+  :host,
+  [data-bs-theme=light] {
+    --tblr-page-padding: var(--tblr-spacer-2);
+  }
+}
+
+@keyframes pulse {
+  from {
+    opacity: 1;
+    transform: scale3d(0.8, 0.8, 0.8);
+  }
+  50% {
+    transform: scale3d(1, 1, 1);
+    opacity: 1;
+  }
+  to {
+    opacity: 1;
+    transform: scale3d(0.8, 0.8, 0.8);
+  }
+}
+@keyframes tada {
+  0% {
+    transform: scale3d(1, 1, 1);
+  }
+  10%, 5% {
+    transform: scale3d(0.9, 0.9, 0.9) rotate3d(0, 0, 1, 5deg);
+  }
+  15%, 25%, 35%, 45% {
+    transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -5deg);
+  }
+  20%, 30%, 40% {
+    transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 5deg);
+  }
+  50% {
+    transform: scale3d(1, 1, 1);
+  }
+}
+@keyframes rotate-360 {
+  from {
+    transform: rotate(0deg);
+  }
+  to {
+    transform: rotate(-360deg);
+  }
+}
+@keyframes blink {
+  from {
+    opacity: 0;
+  }
+  50% {
+    opacity: 1;
+  }
+  to {
+    opacity: 0;
+  }
+}
+body {
+  letter-spacing: 0;
+  touch-action: manipulation;
+  text-rendering: optimizeLegibility;
+  font-feature-settings: "liga" 0;
+  position: relative;
+  min-height: 100%;
+  height: 100%;
+  -webkit-font-smoothing: antialiased;
+  -moz-osx-font-smoothing: grayscale;
+}
+@media print {
+  body {
+    background: transparent;
+  }
+}
+
+* {
+  scrollbar-color: rgba(var(--tblr-scrollbar-color, var(--tblr-body-color-rgb)), 0.16) transparent;
+}
+
+*::-webkit-scrollbar {
+  width: 1rem;
+  height: 1rem;
+  -webkit-transition: background 0.3s;
+  transition: background 0.3s;
+}
+@media (prefers-reduced-motion: reduce) {
+  *::-webkit-scrollbar {
+    -webkit-transition: none;
+    transition: none;
+  }
+}
+
+*::-webkit-scrollbar-thumb {
+  border-radius: 1rem;
+  border: 5px solid transparent;
+  box-shadow: inset 0 0 0 1rem rgba(var(--tblr-scrollbar-color, var(--tblr-body-color-rgb)), 0.16);
+}
+
+*::-webkit-scrollbar-track {
+  background: transparent;
+}
+
+*:hover::-webkit-scrollbar-thumb {
+  box-shadow: inset 0 0 0 1rem rgba(var(--tblr-scrollbar-color, var(--tblr-body-color-rgb)), 0.32);
+}
+
+*::-webkit-scrollbar-corner {
+  background: transparent;
+}
+
+.layout-fluid .container,
+.layout-fluid [class^=container-],
+.layout-fluid [class*=" container-"] {
+  max-width: 100%;
+}
+
+.layout-boxed {
+  --tblr-theme-boxed-border-radius: 0;
+  --tblr-theme-boxed-width: 1320px;
+}
+@media (min-width: 768px) {
+  .layout-boxed {
+    background: #182433 linear-gradient(to left, rgba(255, 255, 255, 0.1), transparent) fixed;
+    padding: 1rem;
+    --tblr-theme-boxed-border-radius: 4px;
+  }
+}
+.layout-boxed .page {
+  margin: 0 auto;
+  max-width: var(--tblr-theme-boxed-width);
+  border-radius: var(--tblr-theme-boxed-border-radius);
+  color: var(--tblr-body-color);
+}
+@media (min-width: 768px) {
+  .layout-boxed .page {
+    border: var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color);
+    background: var(--tblr-body-bg);
+  }
+}
+.layout-boxed .page > .navbar:first-child {
+  border-top-right-radius: var(--tblr-theme-boxed-border-radius);
+  border-top-left-radius: var(--tblr-theme-boxed-border-radius);
+}
+
+/**
+Navbar
+ */
+.navbar {
+  --tblr-navbar-bg: var(--tblr-bg-surface);
+  --tblr-navbar-border-width: var(--tblr-border-width);
+  --tblr-navbar-active-border-color: var(--tblr-primary);
+  --tblr-navbar-active-bg: rgba(0, 0, 0, 0.06);
+  --tblr-navbar-color: var(--tblr-body-color);
+  --tblr-navbar-border-color: var(--tblr-border-color);
+  align-items: stretch;
+  min-height: 3.5rem;
+  box-shadow: inset 0 calc(-1 * var(--tblr-navbar-border-width)) 0 0 var(--tblr-navbar-border-color);
+  background: var(--tblr-navbar-bg);
+  color: var(--tblr-navbar-color);
+}
+.navbar-collapse .navbar {
+  flex-grow: 1;
+}
+.navbar.collapsing {
+  min-height: 0;
+}
+.navbar .dropdown-menu {
+  position: absolute;
+  z-index: 1030;
+}
+.navbar .navbar-nav {
+  min-height: 3rem;
+}
+.navbar .navbar-nav .nav-link {
+  position: relative;
+  min-width: 2rem;
+  min-height: 2rem;
+  justify-content: center;
+  border-radius: var(--tblr-border-radius);
+}
+.navbar .navbar-nav .nav-link .badge {
+  position: absolute;
+  top: 0.375rem;
+  left: 0.375rem;
+  transform: translate(-50%, -50%);
+}
+
+.navbar-nav {
+  margin: 0;
+  padding: 0;
+}
+
+@media (max-width: 575.98px) {
+  .navbar-expand-sm .navbar-collapse {
+    flex-direction: column;
+  }
+  .navbar-expand-sm .navbar-collapse [class^=container] {
+    flex-direction: column;
+    align-items: stretch;
+    padding: 0;
+  }
+  .navbar-expand-sm .navbar-collapse .navbar-nav {
+    margin-right: 0;
+    margin-left: 0;
+  }
+  .navbar-expand-sm .navbar-collapse .navbar-nav .nav-link {
+    padding: 0.5rem calc(calc(var(--tblr-page-padding) * 2) / 2);
+    justify-content: flex-start;
+  }
+  .navbar-expand-sm .navbar-collapse .dropdown-menu-columns {
+    flex-direction: column;
+  }
+  .navbar-expand-sm .navbar-collapse .dropdown-menu {
+    padding: 0;
+    background: transparent;
+    position: static;
+    color: inherit;
+    box-shadow: none;
+    border: none;
+    min-width: 0;
+    margin: 0;
+  }
+  .navbar-expand-sm .navbar-collapse .dropdown-menu .dropdown-item {
+    min-width: 0;
+    display: flex;
+    width: auto;
+    padding-right: calc(calc(calc(var(--tblr-page-padding) * 2) / 2) + 1.75rem);
+    color: inherit;
+  }
+  .navbar-expand-sm .navbar-collapse .dropdown-menu .dropdown-item.active, .navbar-expand-sm .navbar-collapse .dropdown-menu .dropdown-item:active {
+    background: var(--tblr-navbar-active-bg);
+  }
+  .navbar-expand-sm .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-item {
+    padding-right: calc(calc(calc(var(--tblr-page-padding) * 2) / 2) + 3.25rem);
+  }
+  .navbar-expand-sm .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-menu .dropdown-item {
+    padding-right: calc(calc(calc(var(--tblr-page-padding) * 2) / 2) + 4.75rem);
+  }
+  .navbar-expand-sm .navbar-collapse .dropdown-toggle:after {
+    margin-right: auto;
+  }
+  .navbar-expand-sm .navbar-collapse .nav-item.active:after {
+    border-bottom-width: 0;
+    border-right-width: 3px;
+    left: auto;
+    top: 0;
+    bottom: 0;
+  }
+}
+@media (min-width: 576px) {
+  .navbar-expand-sm .navbar-collapse {
+    width: auto;
+    flex: 1 1 auto;
+  }
+  .navbar-expand-sm .nav-item.active {
+    position: relative;
+  }
+  .navbar-expand-sm .nav-item.active:after {
+    content: "";
+    position: absolute;
+    right: 0;
+    left: 0;
+    bottom: -0.25rem;
+    border: 0 var(--tblr-border-style) var(--tblr-navbar-active-border-color);
+    border-bottom-width: 2px;
+  }
+  .navbar-expand-sm.navbar-vertical {
+    box-shadow: inset calc(-1*(-1 * var(--tblr-navbar-border-width))) 0 0 0 var(--tblr-navbar-border-color);
+  }
+  .navbar-expand-sm.navbar-vertical.navbar-right {
+    box-shadow: inset calc(-1*(1 * var(--tblr-navbar-border-width))) 0 0 0 var(--tblr-navbar-border-color);
+  }
+  .navbar-expand-sm.navbar-vertical ~ .navbar,
+  .navbar-expand-sm.navbar-vertical ~ .page-wrapper {
+    margin-right: 15rem;
+  }
+  .navbar-expand-sm.navbar-vertical.navbar-right ~ .navbar,
+  .navbar-expand-sm.navbar-vertical.navbar-right ~ .page-wrapper {
+    margin-right: 0;
+    margin-left: 15rem;
+  }
+}
+@media (max-width: 767.98px) {
+  .navbar-expand-md .navbar-collapse {
+    flex-direction: column;
+  }
+  .navbar-expand-md .navbar-collapse [class^=container] {
+    flex-direction: column;
+    align-items: stretch;
+    padding: 0;
+  }
+  .navbar-expand-md .navbar-collapse .navbar-nav {
+    margin-right: 0;
+    margin-left: 0;
+  }
+  .navbar-expand-md .navbar-collapse .navbar-nav .nav-link {
+    padding: 0.5rem calc(calc(var(--tblr-page-padding) * 2) / 2);
+    justify-content: flex-start;
+  }
+  .navbar-expand-md .navbar-collapse .dropdown-menu-columns {
+    flex-direction: column;
+  }
+  .navbar-expand-md .navbar-collapse .dropdown-menu {
+    padding: 0;
+    background: transparent;
+    position: static;
+    color: inherit;
+    box-shadow: none;
+    border: none;
+    min-width: 0;
+    margin: 0;
+  }
+  .navbar-expand-md .navbar-collapse .dropdown-menu .dropdown-item {
+    min-width: 0;
+    display: flex;
+    width: auto;
+    padding-right: calc(calc(calc(var(--tblr-page-padding) * 2) / 2) + 1.75rem);
+    color: inherit;
+  }
+  .navbar-expand-md .navbar-collapse .dropdown-menu .dropdown-item.active, .navbar-expand-md .navbar-collapse .dropdown-menu .dropdown-item:active {
+    background: var(--tblr-navbar-active-bg);
+  }
+  .navbar-expand-md .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-item {
+    padding-right: calc(calc(calc(var(--tblr-page-padding) * 2) / 2) + 3.25rem);
+  }
+  .navbar-expand-md .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-menu .dropdown-item {
+    padding-right: calc(calc(calc(var(--tblr-page-padding) * 2) / 2) + 4.75rem);
+  }
+  .navbar-expand-md .navbar-collapse .dropdown-toggle:after {
+    margin-right: auto;
+  }
+  .navbar-expand-md .navbar-collapse .nav-item.active:after {
+    border-bottom-width: 0;
+    border-right-width: 3px;
+    left: auto;
+    top: 0;
+    bottom: 0;
+  }
+}
+@media (min-width: 768px) {
+  .navbar-expand-md .navbar-collapse {
+    width: auto;
+    flex: 1 1 auto;
+  }
+  .navbar-expand-md .nav-item.active {
+    position: relative;
+  }
+  .navbar-expand-md .nav-item.active:after {
+    content: "";
+    position: absolute;
+    right: 0;
+    left: 0;
+    bottom: -0.25rem;
+    border: 0 var(--tblr-border-style) var(--tblr-navbar-active-border-color);
+    border-bottom-width: 2px;
+  }
+  .navbar-expand-md.navbar-vertical {
+    box-shadow: inset calc(-1*(-1 * var(--tblr-navbar-border-width))) 0 0 0 var(--tblr-navbar-border-color);
+  }
+  .navbar-expand-md.navbar-vertical.navbar-right {
+    box-shadow: inset calc(-1*(1 * var(--tblr-navbar-border-width))) 0 0 0 var(--tblr-navbar-border-color);
+  }
+  .navbar-expand-md.navbar-vertical ~ .navbar,
+  .navbar-expand-md.navbar-vertical ~ .page-wrapper {
+    margin-right: 15rem;
+  }
+  .navbar-expand-md.navbar-vertical.navbar-right ~ .navbar,
+  .navbar-expand-md.navbar-vertical.navbar-right ~ .page-wrapper {
+    margin-right: 0;
+    margin-left: 15rem;
+  }
+}
+@media (max-width: 991.98px) {
+  .navbar-expand-lg .navbar-collapse {
+    flex-direction: column;
+  }
+  .navbar-expand-lg .navbar-collapse [class^=container] {
+    flex-direction: column;
+    align-items: stretch;
+    padding: 0;
+  }
+  .navbar-expand-lg .navbar-collapse .navbar-nav {
+    margin-right: 0;
+    margin-left: 0;
+  }
+  .navbar-expand-lg .navbar-collapse .navbar-nav .nav-link {
+    padding: 0.5rem calc(calc(var(--tblr-page-padding) * 2) / 2);
+    justify-content: flex-start;
+  }
+  .navbar-expand-lg .navbar-collapse .dropdown-menu-columns {
+    flex-direction: column;
+  }
+  .navbar-expand-lg .navbar-collapse .dropdown-menu {
+    padding: 0;
+    background: transparent;
+    position: static;
+    color: inherit;
+    box-shadow: none;
+    border: none;
+    min-width: 0;
+    margin: 0;
+  }
+  .navbar-expand-lg .navbar-collapse .dropdown-menu .dropdown-item {
+    min-width: 0;
+    display: flex;
+    width: auto;
+    padding-right: calc(calc(calc(var(--tblr-page-padding) * 2) / 2) + 1.75rem);
+    color: inherit;
+  }
+  .navbar-expand-lg .navbar-collapse .dropdown-menu .dropdown-item.active, .navbar-expand-lg .navbar-collapse .dropdown-menu .dropdown-item:active {
+    background: var(--tblr-navbar-active-bg);
+  }
+  .navbar-expand-lg .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-item {
+    padding-right: calc(calc(calc(var(--tblr-page-padding) * 2) / 2) + 3.25rem);
+  }
+  .navbar-expand-lg .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-menu .dropdown-item {
+    padding-right: calc(calc(calc(var(--tblr-page-padding) * 2) / 2) + 4.75rem);
+  }
+  .navbar-expand-lg .navbar-collapse .dropdown-toggle:after {
+    margin-right: auto;
+  }
+  .navbar-expand-lg .navbar-collapse .nav-item.active:after {
+    border-bottom-width: 0;
+    border-right-width: 3px;
+    left: auto;
+    top: 0;
+    bottom: 0;
+  }
+}
+@media (min-width: 992px) {
+  .navbar-expand-lg .navbar-collapse {
+    width: auto;
+    flex: 1 1 auto;
+  }
+  .navbar-expand-lg .nav-item.active {
+    position: relative;
+  }
+  .navbar-expand-lg .nav-item.active:after {
+    content: "";
+    position: absolute;
+    right: 0;
+    left: 0;
+    bottom: -0.25rem;
+    border: 0 var(--tblr-border-style) var(--tblr-navbar-active-border-color);
+    border-bottom-width: 2px;
+  }
+  .navbar-expand-lg.navbar-vertical {
+    box-shadow: inset calc(-1*(-1 * var(--tblr-navbar-border-width))) 0 0 0 var(--tblr-navbar-border-color);
+  }
+  .navbar-expand-lg.navbar-vertical.navbar-right {
+    box-shadow: inset calc(-1*(1 * var(--tblr-navbar-border-width))) 0 0 0 var(--tblr-navbar-border-color);
+  }
+  .navbar-expand-lg.navbar-vertical ~ .navbar,
+  .navbar-expand-lg.navbar-vertical ~ .page-wrapper {
+    margin-right: 15rem;
+  }
+  .navbar-expand-lg.navbar-vertical.navbar-right ~ .navbar,
+  .navbar-expand-lg.navbar-vertical.navbar-right ~ .page-wrapper {
+    margin-right: 0;
+    margin-left: 15rem;
+  }
+}
+@media (max-width: 1199.98px) {
+  .navbar-expand-xl .navbar-collapse {
+    flex-direction: column;
+  }
+  .navbar-expand-xl .navbar-collapse [class^=container] {
+    flex-direction: column;
+    align-items: stretch;
+    padding: 0;
+  }
+  .navbar-expand-xl .navbar-collapse .navbar-nav {
+    margin-right: 0;
+    margin-left: 0;
+  }
+  .navbar-expand-xl .navbar-collapse .navbar-nav .nav-link {
+    padding: 0.5rem calc(calc(var(--tblr-page-padding) * 2) / 2);
+    justify-content: flex-start;
+  }
+  .navbar-expand-xl .navbar-collapse .dropdown-menu-columns {
+    flex-direction: column;
+  }
+  .navbar-expand-xl .navbar-collapse .dropdown-menu {
+    padding: 0;
+    background: transparent;
+    position: static;
+    color: inherit;
+    box-shadow: none;
+    border: none;
+    min-width: 0;
+    margin: 0;
+  }
+  .navbar-expand-xl .navbar-collapse .dropdown-menu .dropdown-item {
+    min-width: 0;
+    display: flex;
+    width: auto;
+    padding-right: calc(calc(calc(var(--tblr-page-padding) * 2) / 2) + 1.75rem);
+    color: inherit;
+  }
+  .navbar-expand-xl .navbar-collapse .dropdown-menu .dropdown-item.active, .navbar-expand-xl .navbar-collapse .dropdown-menu .dropdown-item:active {
+    background: var(--tblr-navbar-active-bg);
+  }
+  .navbar-expand-xl .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-item {
+    padding-right: calc(calc(calc(var(--tblr-page-padding) * 2) / 2) + 3.25rem);
+  }
+  .navbar-expand-xl .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-menu .dropdown-item {
+    padding-right: calc(calc(calc(var(--tblr-page-padding) * 2) / 2) + 4.75rem);
+  }
+  .navbar-expand-xl .navbar-collapse .dropdown-toggle:after {
+    margin-right: auto;
+  }
+  .navbar-expand-xl .navbar-collapse .nav-item.active:after {
+    border-bottom-width: 0;
+    border-right-width: 3px;
+    left: auto;
+    top: 0;
+    bottom: 0;
+  }
+}
+@media (min-width: 1200px) {
+  .navbar-expand-xl .navbar-collapse {
+    width: auto;
+    flex: 1 1 auto;
+  }
+  .navbar-expand-xl .nav-item.active {
+    position: relative;
+  }
+  .navbar-expand-xl .nav-item.active:after {
+    content: "";
+    position: absolute;
+    right: 0;
+    left: 0;
+    bottom: -0.25rem;
+    border: 0 var(--tblr-border-style) var(--tblr-navbar-active-border-color);
+    border-bottom-width: 2px;
+  }
+  .navbar-expand-xl.navbar-vertical {
+    box-shadow: inset calc(-1*(-1 * var(--tblr-navbar-border-width))) 0 0 0 var(--tblr-navbar-border-color);
+  }
+  .navbar-expand-xl.navbar-vertical.navbar-right {
+    box-shadow: inset calc(-1*(1 * var(--tblr-navbar-border-width))) 0 0 0 var(--tblr-navbar-border-color);
+  }
+  .navbar-expand-xl.navbar-vertical ~ .navbar,
+  .navbar-expand-xl.navbar-vertical ~ .page-wrapper {
+    margin-right: 15rem;
+  }
+  .navbar-expand-xl.navbar-vertical.navbar-right ~ .navbar,
+  .navbar-expand-xl.navbar-vertical.navbar-right ~ .page-wrapper {
+    margin-right: 0;
+    margin-left: 15rem;
+  }
+}
+@media (max-width: 1399.98px) {
+  .navbar-expand-xxl .navbar-collapse {
+    flex-direction: column;
+  }
+  .navbar-expand-xxl .navbar-collapse [class^=container] {
+    flex-direction: column;
+    align-items: stretch;
+    padding: 0;
+  }
+  .navbar-expand-xxl .navbar-collapse .navbar-nav {
+    margin-right: 0;
+    margin-left: 0;
+  }
+  .navbar-expand-xxl .navbar-collapse .navbar-nav .nav-link {
+    padding: 0.5rem calc(calc(var(--tblr-page-padding) * 2) / 2);
+    justify-content: flex-start;
+  }
+  .navbar-expand-xxl .navbar-collapse .dropdown-menu-columns {
+    flex-direction: column;
+  }
+  .navbar-expand-xxl .navbar-collapse .dropdown-menu {
+    padding: 0;
+    background: transparent;
+    position: static;
+    color: inherit;
+    box-shadow: none;
+    border: none;
+    min-width: 0;
+    margin: 0;
+  }
+  .navbar-expand-xxl .navbar-collapse .dropdown-menu .dropdown-item {
+    min-width: 0;
+    display: flex;
+    width: auto;
+    padding-right: calc(calc(calc(var(--tblr-page-padding) * 2) / 2) + 1.75rem);
+    color: inherit;
+  }
+  .navbar-expand-xxl .navbar-collapse .dropdown-menu .dropdown-item.active, .navbar-expand-xxl .navbar-collapse .dropdown-menu .dropdown-item:active {
+    background: var(--tblr-navbar-active-bg);
+  }
+  .navbar-expand-xxl .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-item {
+    padding-right: calc(calc(calc(var(--tblr-page-padding) * 2) / 2) + 3.25rem);
+  }
+  .navbar-expand-xxl .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-menu .dropdown-item {
+    padding-right: calc(calc(calc(var(--tblr-page-padding) * 2) / 2) + 4.75rem);
+  }
+  .navbar-expand-xxl .navbar-collapse .dropdown-toggle:after {
+    margin-right: auto;
+  }
+  .navbar-expand-xxl .navbar-collapse .nav-item.active:after {
+    border-bottom-width: 0;
+    border-right-width: 3px;
+    left: auto;
+    top: 0;
+    bottom: 0;
+  }
+}
+@media (min-width: 1400px) {
+  .navbar-expand-xxl .navbar-collapse {
+    width: auto;
+    flex: 1 1 auto;
+  }
+  .navbar-expand-xxl .nav-item.active {
+    position: relative;
+  }
+  .navbar-expand-xxl .nav-item.active:after {
+    content: "";
+    position: absolute;
+    right: 0;
+    left: 0;
+    bottom: -0.25rem;
+    border: 0 var(--tblr-border-style) var(--tblr-navbar-active-border-color);
+    border-bottom-width: 2px;
+  }
+  .navbar-expand-xxl.navbar-vertical {
+    box-shadow: inset calc(-1*(-1 * var(--tblr-navbar-border-width))) 0 0 0 var(--tblr-navbar-border-color);
+  }
+  .navbar-expand-xxl.navbar-vertical.navbar-right {
+    box-shadow: inset calc(-1*(1 * var(--tblr-navbar-border-width))) 0 0 0 var(--tblr-navbar-border-color);
+  }
+  .navbar-expand-xxl.navbar-vertical ~ .navbar,
+  .navbar-expand-xxl.navbar-vertical ~ .page-wrapper {
+    margin-right: 15rem;
+  }
+  .navbar-expand-xxl.navbar-vertical.navbar-right ~ .navbar,
+  .navbar-expand-xxl.navbar-vertical.navbar-right ~ .page-wrapper {
+    margin-right: 0;
+    margin-left: 15rem;
+  }
+}
+.navbar-expand .navbar-collapse {
+  flex-direction: column;
+}
+.navbar-expand .navbar-collapse [class^=container] {
+  flex-direction: column;
+  align-items: stretch;
+  padding: 0;
+}
+.navbar-expand .navbar-collapse .navbar-nav {
+  margin-right: 0;
+  margin-left: 0;
+}
+.navbar-expand .navbar-collapse .navbar-nav .nav-link {
+  padding: 0.5rem calc(calc(var(--tblr-page-padding) * 2) / 2);
+  justify-content: flex-start;
+}
+.navbar-expand .navbar-collapse .dropdown-menu-columns {
+  flex-direction: column;
+}
+.navbar-expand .navbar-collapse .dropdown-menu {
+  padding: 0;
+  background: transparent;
+  position: static;
+  color: inherit;
+  box-shadow: none;
+  border: none;
+  min-width: 0;
+  margin: 0;
+}
+.navbar-expand .navbar-collapse .dropdown-menu .dropdown-item {
+  min-width: 0;
+  display: flex;
+  width: auto;
+  padding-right: calc(calc(calc(var(--tblr-page-padding) * 2) / 2) + 1.75rem);
+  color: inherit;
+}
+.navbar-expand .navbar-collapse .dropdown-menu .dropdown-item.active, .navbar-expand .navbar-collapse .dropdown-menu .dropdown-item:active {
+  background: var(--tblr-navbar-active-bg);
+}
+.navbar-expand .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-item {
+  padding-right: calc(calc(calc(var(--tblr-page-padding) * 2) / 2) + 3.25rem);
+}
+.navbar-expand .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-menu .dropdown-item {
+  padding-right: calc(calc(calc(var(--tblr-page-padding) * 2) / 2) + 4.75rem);
+}
+.navbar-expand .navbar-collapse .dropdown-toggle:after {
+  margin-right: auto;
+}
+.navbar-expand .navbar-collapse .nav-item.active:after {
+  border-bottom-width: 0;
+  border-right-width: 3px;
+  left: auto;
+  top: 0;
+  bottom: 0;
+}
+.navbar-expand .navbar-collapse {
+  width: auto;
+  flex: 1 1 auto;
+}
+.navbar-expand .nav-item.active {
+  position: relative;
+}
+.navbar-expand .nav-item.active:after {
+  content: "";
+  position: absolute;
+  right: 0;
+  left: 0;
+  bottom: -0.25rem;
+  border: 0 var(--tblr-border-style) var(--tblr-navbar-active-border-color);
+  border-bottom-width: 2px;
+}
+.navbar-expand.navbar-vertical {
+  box-shadow: inset calc(-1*(-1 * var(--tblr-navbar-border-width))) 0 0 0 var(--tblr-navbar-border-color);
+}
+.navbar-expand.navbar-vertical.navbar-right {
+  box-shadow: inset calc(-1*(1 * var(--tblr-navbar-border-width))) 0 0 0 var(--tblr-navbar-border-color);
+}
+.navbar-expand.navbar-vertical ~ .navbar,
+.navbar-expand.navbar-vertical ~ .page-wrapper {
+  margin-right: 15rem;
+}
+.navbar-expand.navbar-vertical.navbar-right ~ .navbar,
+.navbar-expand.navbar-vertical.navbar-right ~ .page-wrapper {
+  margin-right: 0;
+  margin-left: 15rem;
+}
+
+/**
+Navbar brand
+ */
+.navbar-brand {
+  display: inline-flex;
+  align-items: center;
+  font-weight: var(--tblr-font-weight-bold);
+  margin: 0;
+  line-height: 1;
+  gap: 0.5rem;
+}
+
+.navbar-brand-image {
+  height: 2rem;
+  width: auto;
+}
+
+/**
+Navbar toggler
+ */
+.navbar-toggler {
+  border: 0;
+  width: 2rem;
+  height: 2rem;
+  position: relative;
+  display: flex;
+  align-items: center;
+  justify-content: center;
+}
+
+.navbar-toggler-icon {
+  height: 2px;
+  width: 1.25em;
+  background: currentColor;
+  border-radius: 10px;
+  transition: top 0.2s 0.2s, bottom 0.2s 0.2s, transform 0.2s, opacity 0s 0.2s;
+  position: relative;
+}
+@media (prefers-reduced-motion: reduce) {
+  .navbar-toggler-icon {
+    transition: none;
+  }
+}
+.navbar-toggler-icon:before, .navbar-toggler-icon:after {
+  content: "";
+  display: block;
+  height: inherit;
+  width: inherit;
+  border-radius: inherit;
+  background: inherit;
+  position: absolute;
+  right: 0;
+  transition: inherit;
+}
+@media (prefers-reduced-motion: reduce) {
+  .navbar-toggler-icon:before, .navbar-toggler-icon:after {
+    transition: none;
+  }
+}
+.navbar-toggler-icon:before {
+  top: -0.45em;
+}
+.navbar-toggler-icon:after {
+  bottom: -0.45em;
+}
+.navbar-toggler[aria-expanded=true] .navbar-toggler-icon {
+  transform: rotate(-45deg);
+  transition: top 0.3s, bottom 0.3s, transform 0.3s 0.3s, opacity 0s 0.3s;
+}
+@media (prefers-reduced-motion: reduce) {
+  .navbar-toggler[aria-expanded=true] .navbar-toggler-icon {
+    transition: none;
+  }
+}
+.navbar-toggler[aria-expanded=true] .navbar-toggler-icon:before {
+  top: 0;
+  transform: rotate(90deg);
+}
+.navbar-toggler[aria-expanded=true] .navbar-toggler-icon:after {
+  bottom: 0;
+  opacity: 0;
+}
+
+/**
+Navbar transparent
+ */
+.navbar-transparent {
+  --tblr-navbar-border-color: transparent !important;
+  background: transparent !important;
+}
+
+/**
+Navbar nav
+ */
+.navbar-nav {
+  align-items: stretch;
+}
+.navbar-nav .nav-item {
+  display: flex;
+  flex-direction: column;
+  justify-content: center;
+}
+
+/**
+Navbar side
+ */
+.navbar-side {
+  margin: 0;
+  display: flex;
+  flex-direction: row;
+  align-items: center;
+  justify-content: space-around;
+}
+
+/**
+Navbar vertical
+ */
+@media (min-width: 576px) {
+  .navbar-vertical.navbar-expand-sm {
+    width: 15rem;
+    position: fixed;
+    top: 0;
+    right: 0;
+    bottom: 0;
+    z-index: 1030;
+    align-items: flex-start;
+    transition: transform 0.3s;
+    overflow-y: scroll;
+    padding: 0;
+  }
+}
+@media (min-width: 576px) and (prefers-reduced-motion: reduce) {
+  .navbar-vertical.navbar-expand-sm {
+    transition: none;
+  }
+}
+@media (min-width: 576px) {
+  .navbar-vertical.navbar-expand-sm.navbar-right {
+    right: auto;
+    left: 0;
+  }
+  .navbar-vertical.navbar-expand-sm .navbar-brand {
+    padding: 0.75rem 0;
+    justify-content: center;
+  }
+  .navbar-vertical.navbar-expand-sm .navbar-collapse {
+    align-items: stretch;
+  }
+  .navbar-vertical.navbar-expand-sm .navbar-nav {
+    flex-direction: column;
+    flex-grow: 1;
+    min-height: auto;
+  }
+  .navbar-vertical.navbar-expand-sm .navbar-nav .nav-link {
+    padding-top: 0.5rem;
+    padding-bottom: 0.5rem;
+  }
+  .navbar-vertical.navbar-expand-sm > [class^=container] {
+    flex-direction: column;
+    align-items: stretch;
+    min-height: 100%;
+    justify-content: flex-start;
+    padding: 0;
+  }
+  .navbar-vertical.navbar-expand-sm ~ .page {
+    padding-right: 15rem;
+  }
+  .navbar-vertical.navbar-expand-sm ~ .page [class^=container] {
+    padding-right: 1.5rem;
+    padding-left: 1.5rem;
+  }
+  .navbar-vertical.navbar-expand-sm.navbar-right ~ .page {
+    padding-right: 0;
+    padding-left: 15rem;
+  }
+  .navbar-vertical.navbar-expand-sm .navbar-collapse {
+    flex-direction: column;
+  }
+  .navbar-vertical.navbar-expand-sm .navbar-collapse [class^=container] {
+    flex-direction: column;
+    align-items: stretch;
+    padding: 0;
+  }
+  .navbar-vertical.navbar-expand-sm .navbar-collapse .navbar-nav {
+    margin-right: 0;
+    margin-left: 0;
+  }
+  .navbar-vertical.navbar-expand-sm .navbar-collapse .navbar-nav .nav-link {
+    padding: 0.5rem calc(calc(var(--tblr-page-padding) * 2) / 2);
+    justify-content: flex-start;
+  }
+  .navbar-vertical.navbar-expand-sm .navbar-collapse .dropdown-menu-columns {
+    flex-direction: column;
+  }
+  .navbar-vertical.navbar-expand-sm .navbar-collapse .dropdown-menu {
+    padding: 0;
+    background: transparent;
+    position: static;
+    color: inherit;
+    box-shadow: none;
+    border: none;
+    min-width: 0;
+    margin: 0;
+  }
+  .navbar-vertical.navbar-expand-sm .navbar-collapse .dropdown-menu .dropdown-item {
+    min-width: 0;
+    display: flex;
+    width: auto;
+    padding-right: calc(calc(calc(var(--tblr-page-padding) * 2) / 2) + 1.75rem);
+    color: inherit;
+  }
+  .navbar-vertical.navbar-expand-sm .navbar-collapse .dropdown-menu .dropdown-item.active, .navbar-vertical.navbar-expand-sm .navbar-collapse .dropdown-menu .dropdown-item:active {
+    background: var(--tblr-navbar-active-bg);
+  }
+  .navbar-vertical.navbar-expand-sm .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-item {
+    padding-right: calc(calc(calc(var(--tblr-page-padding) * 2) / 2) + 3.25rem);
+  }
+  .navbar-vertical.navbar-expand-sm .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-menu .dropdown-item {
+    padding-right: calc(calc(calc(var(--tblr-page-padding) * 2) / 2) + 4.75rem);
+  }
+  .navbar-vertical.navbar-expand-sm .navbar-collapse .dropdown-toggle:after {
+    margin-right: auto;
+  }
+  .navbar-vertical.navbar-expand-sm .navbar-collapse .nav-item.active:after {
+    border-bottom-width: 0;
+    border-right-width: 3px;
+    left: auto;
+    top: 0;
+    bottom: 0;
+  }
+}
+@media (min-width: 768px) {
+  .navbar-vertical.navbar-expand-md {
+    width: 15rem;
+    position: fixed;
+    top: 0;
+    right: 0;
+    bottom: 0;
+    z-index: 1030;
+    align-items: flex-start;
+    transition: transform 0.3s;
+    overflow-y: scroll;
+    padding: 0;
+  }
+}
+@media (min-width: 768px) and (prefers-reduced-motion: reduce) {
+  .navbar-vertical.navbar-expand-md {
+    transition: none;
+  }
+}
+@media (min-width: 768px) {
+  .navbar-vertical.navbar-expand-md.navbar-right {
+    right: auto;
+    left: 0;
+  }
+  .navbar-vertical.navbar-expand-md .navbar-brand {
+    padding: 0.75rem 0;
+    justify-content: center;
+  }
+  .navbar-vertical.navbar-expand-md .navbar-collapse {
+    align-items: stretch;
+  }
+  .navbar-vertical.navbar-expand-md .navbar-nav {
+    flex-direction: column;
+    flex-grow: 1;
+    min-height: auto;
+  }
+  .navbar-vertical.navbar-expand-md .navbar-nav .nav-link {
+    padding-top: 0.5rem;
+    padding-bottom: 0.5rem;
+  }
+  .navbar-vertical.navbar-expand-md > [class^=container] {
+    flex-direction: column;
+    align-items: stretch;
+    min-height: 100%;
+    justify-content: flex-start;
+    padding: 0;
+  }
+  .navbar-vertical.navbar-expand-md ~ .page {
+    padding-right: 15rem;
+  }
+  .navbar-vertical.navbar-expand-md ~ .page [class^=container] {
+    padding-right: 1.5rem;
+    padding-left: 1.5rem;
+  }
+  .navbar-vertical.navbar-expand-md.navbar-right ~ .page {
+    padding-right: 0;
+    padding-left: 15rem;
+  }
+  .navbar-vertical.navbar-expand-md .navbar-collapse {
+    flex-direction: column;
+  }
+  .navbar-vertical.navbar-expand-md .navbar-collapse [class^=container] {
+    flex-direction: column;
+    align-items: stretch;
+    padding: 0;
+  }
+  .navbar-vertical.navbar-expand-md .navbar-collapse .navbar-nav {
+    margin-right: 0;
+    margin-left: 0;
+  }
+  .navbar-vertical.navbar-expand-md .navbar-collapse .navbar-nav .nav-link {
+    padding: 0.5rem calc(calc(var(--tblr-page-padding) * 2) / 2);
+    justify-content: flex-start;
+  }
+  .navbar-vertical.navbar-expand-md .navbar-collapse .dropdown-menu-columns {
+    flex-direction: column;
+  }
+  .navbar-vertical.navbar-expand-md .navbar-collapse .dropdown-menu {
+    padding: 0;
+    background: transparent;
+    position: static;
+    color: inherit;
+    box-shadow: none;
+    border: none;
+    min-width: 0;
+    margin: 0;
+  }
+  .navbar-vertical.navbar-expand-md .navbar-collapse .dropdown-menu .dropdown-item {
+    min-width: 0;
+    display: flex;
+    width: auto;
+    padding-right: calc(calc(calc(var(--tblr-page-padding) * 2) / 2) + 1.75rem);
+    color: inherit;
+  }
+  .navbar-vertical.navbar-expand-md .navbar-collapse .dropdown-menu .dropdown-item.active, .navbar-vertical.navbar-expand-md .navbar-collapse .dropdown-menu .dropdown-item:active {
+    background: var(--tblr-navbar-active-bg);
+  }
+  .navbar-vertical.navbar-expand-md .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-item {
+    padding-right: calc(calc(calc(var(--tblr-page-padding) * 2) / 2) + 3.25rem);
+  }
+  .navbar-vertical.navbar-expand-md .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-menu .dropdown-item {
+    padding-right: calc(calc(calc(var(--tblr-page-padding) * 2) / 2) + 4.75rem);
+  }
+  .navbar-vertical.navbar-expand-md .navbar-collapse .dropdown-toggle:after {
+    margin-right: auto;
+  }
+  .navbar-vertical.navbar-expand-md .navbar-collapse .nav-item.active:after {
+    border-bottom-width: 0;
+    border-right-width: 3px;
+    left: auto;
+    top: 0;
+    bottom: 0;
+  }
+}
+@media (min-width: 992px) {
+  .navbar-vertical.navbar-expand-lg {
+    width: 15rem;
+    position: fixed;
+    top: 0;
+    right: 0;
+    bottom: 0;
+    z-index: 1030;
+    align-items: flex-start;
+    transition: transform 0.3s;
+    overflow-y: scroll;
+    padding: 0;
+  }
+}
+@media (min-width: 992px) and (prefers-reduced-motion: reduce) {
+  .navbar-vertical.navbar-expand-lg {
+    transition: none;
+  }
+}
+@media (min-width: 992px) {
+  .navbar-vertical.navbar-expand-lg.navbar-right {
+    right: auto;
+    left: 0;
+  }
+  .navbar-vertical.navbar-expand-lg .navbar-brand {
+    padding: 0.75rem 0;
+    justify-content: center;
+  }
+  .navbar-vertical.navbar-expand-lg .navbar-collapse {
+    align-items: stretch;
+  }
+  .navbar-vertical.navbar-expand-lg .navbar-nav {
+    flex-direction: column;
+    flex-grow: 1;
+    min-height: auto;
+  }
+  .navbar-vertical.navbar-expand-lg .navbar-nav .nav-link {
+    padding-top: 0.5rem;
+    padding-bottom: 0.5rem;
+  }
+  .navbar-vertical.navbar-expand-lg > [class^=container] {
+    flex-direction: column;
+    align-items: stretch;
+    min-height: 100%;
+    justify-content: flex-start;
+    padding: 0;
+  }
+  .navbar-vertical.navbar-expand-lg ~ .page {
+    padding-right: 15rem;
+  }
+  .navbar-vertical.navbar-expand-lg ~ .page [class^=container] {
+    padding-right: 1.5rem;
+    padding-left: 1.5rem;
+  }
+  .navbar-vertical.navbar-expand-lg.navbar-right ~ .page {
+    padding-right: 0;
+    padding-left: 15rem;
+  }
+  .navbar-vertical.navbar-expand-lg .navbar-collapse {
+    flex-direction: column;
+  }
+  .navbar-vertical.navbar-expand-lg .navbar-collapse [class^=container] {
+    flex-direction: column;
+    align-items: stretch;
+    padding: 0;
+  }
+  .navbar-vertical.navbar-expand-lg .navbar-collapse .navbar-nav {
+    margin-right: 0;
+    margin-left: 0;
+  }
+  .navbar-vertical.navbar-expand-lg .navbar-collapse .navbar-nav .nav-link {
+    padding: 0.5rem calc(calc(var(--tblr-page-padding) * 2) / 2);
+    justify-content: flex-start;
+  }
+  .navbar-vertical.navbar-expand-lg .navbar-collapse .dropdown-menu-columns {
+    flex-direction: column;
+  }
+  .navbar-vertical.navbar-expand-lg .navbar-collapse .dropdown-menu {
+    padding: 0;
+    background: transparent;
+    position: static;
+    color: inherit;
+    box-shadow: none;
+    border: none;
+    min-width: 0;
+    margin: 0;
+  }
+  .navbar-vertical.navbar-expand-lg .navbar-collapse .dropdown-menu .dropdown-item {
+    min-width: 0;
+    display: flex;
+    width: auto;
+    padding-right: calc(calc(calc(var(--tblr-page-padding) * 2) / 2) + 1.75rem);
+    color: inherit;
+  }
+  .navbar-vertical.navbar-expand-lg .navbar-collapse .dropdown-menu .dropdown-item.active, .navbar-vertical.navbar-expand-lg .navbar-collapse .dropdown-menu .dropdown-item:active {
+    background: var(--tblr-navbar-active-bg);
+  }
+  .navbar-vertical.navbar-expand-lg .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-item {
+    padding-right: calc(calc(calc(var(--tblr-page-padding) * 2) / 2) + 3.25rem);
+  }
+  .navbar-vertical.navbar-expand-lg .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-menu .dropdown-item {
+    padding-right: calc(calc(calc(var(--tblr-page-padding) * 2) / 2) + 4.75rem);
+  }
+  .navbar-vertical.navbar-expand-lg .navbar-collapse .dropdown-toggle:after {
+    margin-right: auto;
+  }
+  .navbar-vertical.navbar-expand-lg .navbar-collapse .nav-item.active:after {
+    border-bottom-width: 0;
+    border-right-width: 3px;
+    left: auto;
+    top: 0;
+    bottom: 0;
+  }
+}
+@media (min-width: 1200px) {
+  .navbar-vertical.navbar-expand-xl {
+    width: 15rem;
+    position: fixed;
+    top: 0;
+    right: 0;
+    bottom: 0;
+    z-index: 1030;
+    align-items: flex-start;
+    transition: transform 0.3s;
+    overflow-y: scroll;
+    padding: 0;
+  }
+}
+@media (min-width: 1200px) and (prefers-reduced-motion: reduce) {
+  .navbar-vertical.navbar-expand-xl {
+    transition: none;
+  }
+}
+@media (min-width: 1200px) {
+  .navbar-vertical.navbar-expand-xl.navbar-right {
+    right: auto;
+    left: 0;
+  }
+  .navbar-vertical.navbar-expand-xl .navbar-brand {
+    padding: 0.75rem 0;
+    justify-content: center;
+  }
+  .navbar-vertical.navbar-expand-xl .navbar-collapse {
+    align-items: stretch;
+  }
+  .navbar-vertical.navbar-expand-xl .navbar-nav {
+    flex-direction: column;
+    flex-grow: 1;
+    min-height: auto;
+  }
+  .navbar-vertical.navbar-expand-xl .navbar-nav .nav-link {
+    padding-top: 0.5rem;
+    padding-bottom: 0.5rem;
+  }
+  .navbar-vertical.navbar-expand-xl > [class^=container] {
+    flex-direction: column;
+    align-items: stretch;
+    min-height: 100%;
+    justify-content: flex-start;
+    padding: 0;
+  }
+  .navbar-vertical.navbar-expand-xl ~ .page {
+    padding-right: 15rem;
+  }
+  .navbar-vertical.navbar-expand-xl ~ .page [class^=container] {
+    padding-right: 1.5rem;
+    padding-left: 1.5rem;
+  }
+  .navbar-vertical.navbar-expand-xl.navbar-right ~ .page {
+    padding-right: 0;
+    padding-left: 15rem;
+  }
+  .navbar-vertical.navbar-expand-xl .navbar-collapse {
+    flex-direction: column;
+  }
+  .navbar-vertical.navbar-expand-xl .navbar-collapse [class^=container] {
+    flex-direction: column;
+    align-items: stretch;
+    padding: 0;
+  }
+  .navbar-vertical.navbar-expand-xl .navbar-collapse .navbar-nav {
+    margin-right: 0;
+    margin-left: 0;
+  }
+  .navbar-vertical.navbar-expand-xl .navbar-collapse .navbar-nav .nav-link {
+    padding: 0.5rem calc(calc(var(--tblr-page-padding) * 2) / 2);
+    justify-content: flex-start;
+  }
+  .navbar-vertical.navbar-expand-xl .navbar-collapse .dropdown-menu-columns {
+    flex-direction: column;
+  }
+  .navbar-vertical.navbar-expand-xl .navbar-collapse .dropdown-menu {
+    padding: 0;
+    background: transparent;
+    position: static;
+    color: inherit;
+    box-shadow: none;
+    border: none;
+    min-width: 0;
+    margin: 0;
+  }
+  .navbar-vertical.navbar-expand-xl .navbar-collapse .dropdown-menu .dropdown-item {
+    min-width: 0;
+    display: flex;
+    width: auto;
+    padding-right: calc(calc(calc(var(--tblr-page-padding) * 2) / 2) + 1.75rem);
+    color: inherit;
+  }
+  .navbar-vertical.navbar-expand-xl .navbar-collapse .dropdown-menu .dropdown-item.active, .navbar-vertical.navbar-expand-xl .navbar-collapse .dropdown-menu .dropdown-item:active {
+    background: var(--tblr-navbar-active-bg);
+  }
+  .navbar-vertical.navbar-expand-xl .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-item {
+    padding-right: calc(calc(calc(var(--tblr-page-padding) * 2) / 2) + 3.25rem);
+  }
+  .navbar-vertical.navbar-expand-xl .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-menu .dropdown-item {
+    padding-right: calc(calc(calc(var(--tblr-page-padding) * 2) / 2) + 4.75rem);
+  }
+  .navbar-vertical.navbar-expand-xl .navbar-collapse .dropdown-toggle:after {
+    margin-right: auto;
+  }
+  .navbar-vertical.navbar-expand-xl .navbar-collapse .nav-item.active:after {
+    border-bottom-width: 0;
+    border-right-width: 3px;
+    left: auto;
+    top: 0;
+    bottom: 0;
+  }
+}
+@media (min-width: 1400px) {
+  .navbar-vertical.navbar-expand-xxl {
+    width: 15rem;
+    position: fixed;
+    top: 0;
+    right: 0;
+    bottom: 0;
+    z-index: 1030;
+    align-items: flex-start;
+    transition: transform 0.3s;
+    overflow-y: scroll;
+    padding: 0;
+  }
+}
+@media (min-width: 1400px) and (prefers-reduced-motion: reduce) {
+  .navbar-vertical.navbar-expand-xxl {
+    transition: none;
+  }
+}
+@media (min-width: 1400px) {
+  .navbar-vertical.navbar-expand-xxl.navbar-right {
+    right: auto;
+    left: 0;
+  }
+  .navbar-vertical.navbar-expand-xxl .navbar-brand {
+    padding: 0.75rem 0;
+    justify-content: center;
+  }
+  .navbar-vertical.navbar-expand-xxl .navbar-collapse {
+    align-items: stretch;
+  }
+  .navbar-vertical.navbar-expand-xxl .navbar-nav {
+    flex-direction: column;
+    flex-grow: 1;
+    min-height: auto;
+  }
+  .navbar-vertical.navbar-expand-xxl .navbar-nav .nav-link {
+    padding-top: 0.5rem;
+    padding-bottom: 0.5rem;
+  }
+  .navbar-vertical.navbar-expand-xxl > [class^=container] {
+    flex-direction: column;
+    align-items: stretch;
+    min-height: 100%;
+    justify-content: flex-start;
+    padding: 0;
+  }
+  .navbar-vertical.navbar-expand-xxl ~ .page {
+    padding-right: 15rem;
+  }
+  .navbar-vertical.navbar-expand-xxl ~ .page [class^=container] {
+    padding-right: 1.5rem;
+    padding-left: 1.5rem;
+  }
+  .navbar-vertical.navbar-expand-xxl.navbar-right ~ .page {
+    padding-right: 0;
+    padding-left: 15rem;
+  }
+  .navbar-vertical.navbar-expand-xxl .navbar-collapse {
+    flex-direction: column;
+  }
+  .navbar-vertical.navbar-expand-xxl .navbar-collapse [class^=container] {
+    flex-direction: column;
+    align-items: stretch;
+    padding: 0;
+  }
+  .navbar-vertical.navbar-expand-xxl .navbar-collapse .navbar-nav {
+    margin-right: 0;
+    margin-left: 0;
+  }
+  .navbar-vertical.navbar-expand-xxl .navbar-collapse .navbar-nav .nav-link {
+    padding: 0.5rem calc(calc(var(--tblr-page-padding) * 2) / 2);
+    justify-content: flex-start;
+  }
+  .navbar-vertical.navbar-expand-xxl .navbar-collapse .dropdown-menu-columns {
+    flex-direction: column;
+  }
+  .navbar-vertical.navbar-expand-xxl .navbar-collapse .dropdown-menu {
+    padding: 0;
+    background: transparent;
+    position: static;
+    color: inherit;
+    box-shadow: none;
+    border: none;
+    min-width: 0;
+    margin: 0;
+  }
+  .navbar-vertical.navbar-expand-xxl .navbar-collapse .dropdown-menu .dropdown-item {
+    min-width: 0;
+    display: flex;
+    width: auto;
+    padding-right: calc(calc(calc(var(--tblr-page-padding) * 2) / 2) + 1.75rem);
+    color: inherit;
+  }
+  .navbar-vertical.navbar-expand-xxl .navbar-collapse .dropdown-menu .dropdown-item.active, .navbar-vertical.navbar-expand-xxl .navbar-collapse .dropdown-menu .dropdown-item:active {
+    background: var(--tblr-navbar-active-bg);
+  }
+  .navbar-vertical.navbar-expand-xxl .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-item {
+    padding-right: calc(calc(calc(var(--tblr-page-padding) * 2) / 2) + 3.25rem);
+  }
+  .navbar-vertical.navbar-expand-xxl .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-menu .dropdown-item {
+    padding-right: calc(calc(calc(var(--tblr-page-padding) * 2) / 2) + 4.75rem);
+  }
+  .navbar-vertical.navbar-expand-xxl .navbar-collapse .dropdown-toggle:after {
+    margin-right: auto;
+  }
+  .navbar-vertical.navbar-expand-xxl .navbar-collapse .nav-item.active:after {
+    border-bottom-width: 0;
+    border-right-width: 3px;
+    left: auto;
+    top: 0;
+    bottom: 0;
+  }
+}
+.navbar-vertical.navbar-expand {
+  width: 15rem;
+  position: fixed;
+  top: 0;
+  right: 0;
+  bottom: 0;
+  z-index: 1030;
+  align-items: flex-start;
+  transition: transform 0.3s;
+  overflow-y: scroll;
+  padding: 0;
+}
+@media (prefers-reduced-motion: reduce) {
+  .navbar-vertical.navbar-expand {
+    transition: none;
+  }
+}
+.navbar-vertical.navbar-expand.navbar-right {
+  right: auto;
+  left: 0;
+}
+.navbar-vertical.navbar-expand .navbar-brand {
+  padding: 0.75rem 0;
+  justify-content: center;
+}
+.navbar-vertical.navbar-expand .navbar-collapse {
+  align-items: stretch;
+}
+.navbar-vertical.navbar-expand .navbar-nav {
+  flex-direction: column;
+  flex-grow: 1;
+  min-height: auto;
+}
+.navbar-vertical.navbar-expand .navbar-nav .nav-link {
+  padding-top: 0.5rem;
+  padding-bottom: 0.5rem;
+}
+.navbar-vertical.navbar-expand > [class^=container] {
+  flex-direction: column;
+  align-items: stretch;
+  min-height: 100%;
+  justify-content: flex-start;
+  padding: 0;
+}
+.navbar-vertical.navbar-expand ~ .page {
+  padding-right: 15rem;
+}
+.navbar-vertical.navbar-expand ~ .page [class^=container] {
+  padding-right: 1.5rem;
+  padding-left: 1.5rem;
+}
+.navbar-vertical.navbar-expand.navbar-right ~ .page {
+  padding-right: 0;
+  padding-left: 15rem;
+}
+.navbar-vertical.navbar-expand .navbar-collapse {
+  flex-direction: column;
+}
+.navbar-vertical.navbar-expand .navbar-collapse [class^=container] {
+  flex-direction: column;
+  align-items: stretch;
+  padding: 0;
+}
+.navbar-vertical.navbar-expand .navbar-collapse .navbar-nav {
+  margin-right: 0;
+  margin-left: 0;
+}
+.navbar-vertical.navbar-expand .navbar-collapse .navbar-nav .nav-link {
+  padding: 0.5rem calc(calc(var(--tblr-page-padding) * 2) / 2);
+  justify-content: flex-start;
+}
+.navbar-vertical.navbar-expand .navbar-collapse .dropdown-menu-columns {
+  flex-direction: column;
+}
+.navbar-vertical.navbar-expand .navbar-collapse .dropdown-menu {
+  padding: 0;
+  background: transparent;
+  position: static;
+  color: inherit;
+  box-shadow: none;
+  border: none;
+  min-width: 0;
+  margin: 0;
+}
+.navbar-vertical.navbar-expand .navbar-collapse .dropdown-menu .dropdown-item {
+  min-width: 0;
+  display: flex;
+  width: auto;
+  padding-right: calc(calc(calc(var(--tblr-page-padding) * 2) / 2) + 1.75rem);
+  color: inherit;
+}
+.navbar-vertical.navbar-expand .navbar-collapse .dropdown-menu .dropdown-item.active, .navbar-vertical.navbar-expand .navbar-collapse .dropdown-menu .dropdown-item:active {
+  background: var(--tblr-navbar-active-bg);
+}
+.navbar-vertical.navbar-expand .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-item {
+  padding-right: calc(calc(calc(var(--tblr-page-padding) * 2) / 2) + 3.25rem);
+}
+.navbar-vertical.navbar-expand .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-menu .dropdown-item {
+  padding-right: calc(calc(calc(var(--tblr-page-padding) * 2) / 2) + 4.75rem);
+}
+.navbar-vertical.navbar-expand .navbar-collapse .dropdown-toggle:after {
+  margin-right: auto;
+}
+.navbar-vertical.navbar-expand .navbar-collapse .nav-item.active:after {
+  border-bottom-width: 0;
+  border-right-width: 3px;
+  left: auto;
+  top: 0;
+  bottom: 0;
+}
+
+.navbar-overlap:after {
+  content: "";
+  height: 9rem;
+  position: absolute;
+  top: 100%;
+  right: 0;
+  left: 0;
+  background: inherit;
+  z-index: -1;
+  box-shadow: inherit;
+}
+
+.page {
+  display: flex;
+  flex-direction: column;
+  position: relative;
+  min-height: 100%;
+}
+
+.page-center .container {
+  margin-top: auto;
+  margin-bottom: auto;
+}
+
+.page-wrapper {
+  flex: 1;
+  display: flex;
+  flex-direction: column;
+}
+@media print {
+  .page-wrapper {
+    margin: 0 !important;
+  }
+}
+
+.page-wrapper-full .page-body:first-child {
+  margin: 0;
+  border-top: 0;
+}
+
+.page-body {
+  margin-top: var(--tblr-page-padding-y);
+  margin-bottom: var(--tblr-page-padding-y);
+}
+
+.page-body-card {
+  background: var(--tblr-bg-surface);
+  border-top: var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent);
+  padding: var(--tblr-page-padding) 0;
+  margin-bottom: 0;
+  flex: 1;
+}
+.page-body ~ .page-body-card {
+  margin-top: 0;
+}
+
+.page-cover {
+  background: no-repeat center/cover;
+  min-height: 9rem;
+}
+@media (min-width: 768px) {
+  .page-cover {
+    min-height: 12rem;
+  }
+}
+@media (min-width: 992px) {
+  .page-cover {
+    min-height: 15rem;
+  }
+}
+
+.page-cover-overlay {
+  position: relative;
+}
+.page-cover-overlay:after {
+  content: "";
+  position: absolute;
+  top: 0;
+  right: 0;
+  left: 0;
+  bottom: 0;
+  background-image: linear-gradient(-180deg, rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 0.6) 100%);
+}
+
+.page-header {
+  display: flex;
+  flex-wrap: wrap;
+  min-height: 2.25rem;
+  flex-direction: column;
+  justify-content: center;
+}
+.page-wrapper .page-header {
+  margin: var(--tblr-page-padding-y) 0 0;
+}
+
+.page-header-border {
+  border-bottom: var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color);
+  padding: var(--tblr-page-padding-y) 0;
+  margin: 0 !important;
+  background-color: var(--tblr-bg-surface);
+}
+
+.page-pretitle {
+  font-size: 0.625rem;
+  font-weight: var(--tblr-font-weight-bold);
+  text-transform: uppercase;
+  letter-spacing: 0.04em;
+  line-height: 1rem;
+  color: var(--tblr-secondary);
+}
+
+.page-title {
+  margin: 0;
+  font-size: var(--tblr-font-size-h2);
+  line-height: var(--tblr-line-height-h4);
+  font-weight: var(--tblr-font-weight-headings);
+  color: inherit;
+  display: flex;
+  align-items: center;
+}
+.page-title svg {
+  width: 1.5rem;
+  height: 1.5rem;
+  margin-left: 0.25rem;
+}
+
+.page-title-lg {
+  font-size: 1.5rem;
+  line-height: 2rem;
+}
+
+.page-subtitle {
+  margin-top: 0.25rem;
+  color: var(--tblr-secondary);
+}
+
+.page-cover {
+  --tblr-page-cover-blur: 20px;
+  --tblr-page-cover-padding: 1rem;
+  min-height: 6rem;
+  padding: var(--tblr-page-cover-padding) 0;
+  position: relative;
+  overflow: hidden;
+}
+
+.page-cover-img {
+  position: absolute;
+  top: calc(-2 * var(--tblr-page-cover-blur, 0));
+  right: calc(-2 * var(--tblr-page-cover-blur, 0));
+  left: calc(-2 * var(--tblr-page-cover-blur, 0));
+  bottom: calc(-2 * var(--tblr-page-cover-blur, 0));
+  pointer-events: none;
+  filter: blur(var(--tblr-page-cover-blur));
+  -o-object-fit: cover;
+     object-fit: cover;
+  background-size: cover;
+  background-position: center;
+  z-index: -1;
+}
+
+.page-tabs {
+  margin-top: 0.5rem;
+  position: relative;
+}
+
+.page-header-tabs .nav-bordered {
+  border: 0;
+}
+.page-header-tabs + .page-body-card {
+  margin-top: 0;
+}
+
+.footer {
+  border-top: var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color);
+  background-color: #ffffff;
+  padding: 2rem 0;
+  color: var(--tblr-secondary);
+  margin-top: auto;
+}
+
+.footer-transparent {
+  background-color: transparent;
+  border-top: 0;
+}
+
+body:not(.theme-dark):not([data-bs-theme=dark]) .hide-theme-light {
+  display: none !important;
+}
+body.theme-dark .hide-theme-dark, body[data-bs-theme=dark] .hide-theme-dark {
+  display: none !important;
+}
+
+[data-bs-theme=dark], body[data-bs-theme=dark] [data-bs-theme=light] {
+  --tblr-body-color: #fcfdfe;
+  --tblr-body-color-rgb: 252, 253, 254;
+  --tblr-muted: #3a4859;
+  --tblr-body-bg: #151f2c;
+  --tblr-body-bg-rgb: 21, 31, 44;
+  --tblr-emphasis-color: #ffffff;
+  --tblr-emphasis-color-rgb: 255, 255, 255;
+  --tblr-bg-forms: #151f2c;
+  --tblr-bg-surface: #182433;
+  --tblr-bg-surface-dark: #151f2c;
+  --tblr-bg-surface-secondary: #1b293a;
+  --tblr-bg-surface-tertiary: #151f2c;
+  --tblr-link-color: #0069cf;
+  --tblr-link-hover-color: #0054a6;
+  --tblr-active-bg: #1b293a;
+  --tblr-disabled-color: var(--tblr-gray-700);
+  --tblr-border-color: var(--tblr-dark-mode-border-color);
+  --tblr-border-color-translucent: var(
+    --tblr-dark-mode-border-color-translucent
+  );
+  --tblr-border-dark-color: var(--tblr-dark-mode-border-dark-color);
+  --tblr-border-color-active: var(
+    --tblr-dark-mode-border-color-active
+  );
+  --tblr-btn-color: #151f2c;
+  --tblr-code-color: var(--tblr-body-color);
+  --tblr-code-bg: #1f2e41;
+  --tblr-primary-lt: #16293f;
+  --tblr-primary-lt-rgb: 22, 41, 63;
+  --tblr-secondary-lt: #202c3b;
+  --tblr-secondary-lt-rgb: 32, 44, 59;
+  --tblr-success-lt: #1a3235;
+  --tblr-success-lt-rgb: 26, 50, 53;
+  --tblr-info-lt: #1c3044;
+  --tblr-info-lt-rgb: 28, 48, 68;
+  --tblr-warning-lt: #2e2b2f;
+  --tblr-warning-lt-rgb: 46, 43, 47;
+  --tblr-danger-lt: #2b2634;
+  --tblr-danger-lt-rgb: 43, 38, 52;
+  --tblr-light-lt: #2f3a47;
+  --tblr-light-lt-rgb: 47, 58, 71;
+  --tblr-dark-lt: #182433;
+  --tblr-dark-lt-rgb: 24, 36, 51;
+  --tblr-muted-lt: #202c3b;
+  --tblr-muted-lt-rgb: 32, 44, 59;
+  --tblr-blue-lt: #16293f;
+  --tblr-blue-lt-rgb: 22, 41, 63;
+  --tblr-azure-lt: #1c3044;
+  --tblr-azure-lt-rgb: 28, 48, 68;
+  --tblr-indigo-lt: #1c2a45;
+  --tblr-indigo-lt-rgb: 28, 42, 69;
+  --tblr-purple-lt: #272742;
+  --tblr-purple-lt-rgb: 39, 39, 66;
+  --tblr-pink-lt: #2b2639;
+  --tblr-pink-lt-rgb: 43, 38, 57;
+  --tblr-red-lt: #2b2634;
+  --tblr-red-lt-rgb: 43, 38, 52;
+  --tblr-orange-lt: #2e2b2f;
+  --tblr-orange-lt-rgb: 46, 43, 47;
+  --tblr-yellow-lt: #2e302e;
+  --tblr-yellow-lt-rgb: 46, 48, 46;
+  --tblr-lime-lt: #213330;
+  --tblr-lime-lt-rgb: 33, 51, 48;
+  --tblr-green-lt: #1a3235;
+  --tblr-green-lt-rgb: 26, 50, 53;
+  --tblr-teal-lt: #17313a;
+  --tblr-teal-lt-rgb: 23, 49, 58;
+  --tblr-cyan-lt: #183140;
+  --tblr-cyan-lt-rgb: 24, 49, 64;
+  --tblr-facebook-lt: #182c46;
+  --tblr-facebook-lt-rgb: 24, 44, 70;
+  --tblr-twitter-lt: #193146;
+  --tblr-twitter-lt-rgb: 25, 49, 70;
+  --tblr-linkedin-lt: #172b41;
+  --tblr-linkedin-lt-rgb: 23, 43, 65;
+  --tblr-google-lt: #2c2834;
+  --tblr-google-lt-rgb: 44, 40, 52;
+  --tblr-youtube-lt: #2f202e;
+  --tblr-youtube-lt-rgb: 47, 32, 46;
+  --tblr-vimeo-lt: #183345;
+  --tblr-vimeo-lt-rgb: 24, 51, 69;
+  --tblr-dribbble-lt: #2d283c;
+  --tblr-dribbble-lt-rgb: 45, 40, 60;
+  --tblr-github-lt: #182330;
+  --tblr-github-lt-rgb: 24, 35, 48;
+  --tblr-instagram-lt: #2c2737;
+  --tblr-instagram-lt-rgb: 44, 39, 55;
+  --tblr-pinterest-lt: #292131;
+  --tblr-pinterest-lt-rgb: 41, 33, 49;
+  --tblr-vk-lt: #202e3f;
+  --tblr-vk-lt-rgb: 32, 46, 63;
+  --tblr-rss-lt: #2f312e;
+  --tblr-rss-lt-rgb: 47, 49, 46;
+  --tblr-flickr-lt: #162a44;
+  --tblr-flickr-lt-rgb: 22, 42, 68;
+  --tblr-bitbucket-lt: #162942;
+  --tblr-bitbucket-lt-rgb: 22, 41, 66;
+  --tblr-tabler-lt: #16293f;
+  --tblr-tabler-lt-rgb: 22, 41, 63;
+}
+[data-bs-theme=dark] .navbar-brand-autodark .navbar-brand-image {
+  filter: brightness(0) invert(1);
+}
+
+.accordion {
+  --tblr-accordion-color: var(--tblr-body-color);
+}
+
+.accordion-button:focus:not(:focus-visible) {
+  outline: none;
+  box-shadow: none;
+}
+.accordion-button:after {
+  opacity: 0.7;
+}
+.accordion-button:not(.collapsed) {
+  font-weight: var(--tblr-font-weight-bold);
+  border-bottom-color: transparent;
+  box-shadow: none;
+}
+.accordion-button:not(.collapsed):after {
+  opacity: 1;
+}
+
+.alert {
+  --tblr-alert-color: var(--tblr-secondary);
+  --tblr-alert-bg: var(--tblr-surface);
+  border: var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent);
+  border-right: 0.25rem var(--tblr-border-style) var(--tblr-alert-color);
+  box-shadow: rgba(24, 36, 51, 0.04) 0 2px 4px 0;
+}
+.alert > :last-child {
+  margin-bottom: 0;
+}
+
+.alert-important {
+  border-color: transparent;
+  background: var(--tblr-alert-color);
+  color: #fff;
+}
+.alert-important .alert-icon,
+.alert-important .alert-link,
+.alert-important .alert-title {
+  color: inherit;
+}
+.alert-important .alert-link:hover {
+  color: inherit;
+}
+.alert-important .btn-close {
+  filter: var(--tblr-btn-close-white-filter);
+}
+
+.alert-link, .alert-link:hover {
+  color: var(--tblr-alert-color);
+}
+
+.alert-primary {
+  --tblr-alert-color: var(--tblr-primary);
+}
+
+.alert-secondary {
+  --tblr-alert-color: var(--tblr-secondary);
+}
+
+.alert-success {
+  --tblr-alert-color: var(--tblr-success);
+}
+
+.alert-info {
+  --tblr-alert-color: var(--tblr-info);
+}
+
+.alert-warning {
+  --tblr-alert-color: var(--tblr-warning);
+}
+
+.alert-danger {
+  --tblr-alert-color: var(--tblr-danger);
+}
+
+.alert-light {
+  --tblr-alert-color: var(--tblr-light);
+}
+
+.alert-dark {
+  --tblr-alert-color: var(--tblr-dark);
+}
+
+.alert-muted {
+  --tblr-alert-color: var(--tblr-muted);
+}
+
+.alert-blue {
+  --tblr-alert-color: var(--tblr-blue);
+}
+
+.alert-azure {
+  --tblr-alert-color: var(--tblr-azure);
+}
+
+.alert-indigo {
+  --tblr-alert-color: var(--tblr-indigo);
+}
+
+.alert-purple {
+  --tblr-alert-color: var(--tblr-purple);
+}
+
+.alert-pink {
+  --tblr-alert-color: var(--tblr-pink);
+}
+
+.alert-red {
+  --tblr-alert-color: var(--tblr-red);
+}
+
+.alert-orange {
+  --tblr-alert-color: var(--tblr-orange);
+}
+
+.alert-yellow {
+  --tblr-alert-color: var(--tblr-yellow);
+}
+
+.alert-lime {
+  --tblr-alert-color: var(--tblr-lime);
+}
+
+.alert-green {
+  --tblr-alert-color: var(--tblr-green);
+}
+
+.alert-teal {
+  --tblr-alert-color: var(--tblr-teal);
+}
+
+.alert-cyan {
+  --tblr-alert-color: var(--tblr-cyan);
+}
+
+.alert-facebook {
+  --tblr-alert-color: var(--tblr-facebook);
+}
+
+.alert-twitter {
+  --tblr-alert-color: var(--tblr-twitter);
+}
+
+.alert-linkedin {
+  --tblr-alert-color: var(--tblr-linkedin);
+}
+
+.alert-google {
+  --tblr-alert-color: var(--tblr-google);
+}
+
+.alert-youtube {
+  --tblr-alert-color: var(--tblr-youtube);
+}
+
+.alert-vimeo {
+  --tblr-alert-color: var(--tblr-vimeo);
+}
+
+.alert-dribbble {
+  --tblr-alert-color: var(--tblr-dribbble);
+}
+
+.alert-github {
+  --tblr-alert-color: var(--tblr-github);
+}
+
+.alert-instagram {
+  --tblr-alert-color: var(--tblr-instagram);
+}
+
+.alert-pinterest {
+  --tblr-alert-color: var(--tblr-pinterest);
+}
+
+.alert-vk {
+  --tblr-alert-color: var(--tblr-vk);
+}
+
+.alert-rss {
+  --tblr-alert-color: var(--tblr-rss);
+}
+
+.alert-flickr {
+  --tblr-alert-color: var(--tblr-flickr);
+}
+
+.alert-bitbucket {
+  --tblr-alert-color: var(--tblr-bitbucket);
+}
+
+.alert-tabler {
+  --tblr-alert-color: var(--tblr-tabler);
+}
+
+.alert-icon {
+  color: var(--tblr-alert-color);
+  width: 1.5rem !important;
+  height: 1.5rem !important;
+  margin: -0.125rem 0 -0.125rem 1rem;
+}
+
+.alert-title {
+  font-size: 0.875rem;
+  line-height: 1.25rem;
+  font-weight: var(--tblr-font-weight-bold);
+  margin-bottom: 0.25rem;
+  color: var(--tblr-alert-color);
+}
+
+.avatar {
+  --tblr-avatar-size: 2.5rem;
+  --tblr-avatar-status-size: 0.75rem;
+  --tblr-avatar-bg: var(--tblr-bg-surface-secondary);
+  --tblr-avatar-box-shadow: var(--tblr-box-shadow-border);
+  --tblr-avatar-font-size: 1rem;
+  --tblr-avatar-icon-size: 1.5rem;
+  position: relative;
+  width: var(--tblr-avatar-size);
+  height: var(--tblr-avatar-size);
+  font-size: var(--tblr-avatar-font-size);
+  font-weight: var(--tblr-font-weight-medium);
+  line-height: 1;
+  display: inline-flex;
+  align-items: center;
+  justify-content: center;
+  color: var(--tblr-secondary);
+  text-align: center;
+  text-transform: uppercase;
+  vertical-align: bottom;
+  -webkit-user-select: none;
+     -moz-user-select: none;
+      -ms-user-select: none;
+          user-select: none;
+  background: var(--tblr-avatar-bg) no-repeat center/cover;
+  border-radius: var(--tblr-border-radius);
+  box-shadow: var(--tblr-avatar-box-shadow);
+}
+.avatar .icon {
+  width: var(--tblr-avatar-icon-size);
+  height: var(--tblr-avatar-icon-size);
+}
+.avatar .badge {
+  position: absolute;
+  left: 0;
+  bottom: 0;
+  border-radius: 100rem;
+  box-shadow: 0 0 0 calc(var(--tblr-avatar-status-size) / 4) var(--tblr-bg-surface);
+}
+a.avatar {
+  cursor: pointer;
+}
+
+.avatar-rounded {
+  border-radius: 100rem;
+}
+
+.avatar-xxs {
+  --tblr-avatar-size: 1rem;
+  --tblr-avatar-status-size: 0.25rem;
+  --tblr-avatar-font-size: 0.5rem;
+  --tblr-avatar-icon-size: 0.75rem;
+}
+
+.avatar-xxs .badge:empty {
+  width: 0.25rem;
+  height: 0.25rem;
+}
+
+.avatar-xs {
+  --tblr-avatar-size: 1.25rem;
+  --tblr-avatar-status-size: 0.375rem;
+  --tblr-avatar-font-size: 0.625rem;
+  --tblr-avatar-icon-size: 1rem;
+}
+
+.avatar-xs .badge:empty {
+  width: 0.375rem;
+  height: 0.375rem;
+}
+
+.avatar-sm {
+  --tblr-avatar-size: 2rem;
+  --tblr-avatar-status-size: 0.5rem;
+  --tblr-avatar-font-size: 0.75rem;
+  --tblr-avatar-icon-size: 1.25rem;
+}
+
+.avatar-sm .badge:empty {
+  width: 0.5rem;
+  height: 0.5rem;
+}
+
+.avatar-md {
+  --tblr-avatar-size: 2.5rem;
+  --tblr-avatar-status-size: 0.75rem;
+  --tblr-avatar-font-size: 0.875rem;
+  --tblr-avatar-icon-size: 1.5rem;
+}
+
+.avatar-md .badge:empty {
+  width: 0.75rem;
+  height: 0.75rem;
+}
+
+.avatar-lg {
+  --tblr-avatar-size: 3rem;
+  --tblr-avatar-status-size: 0.75rem;
+  --tblr-avatar-font-size: 1.25rem;
+  --tblr-avatar-icon-size: 2rem;
+}
+
+.avatar-lg .badge:empty {
+  width: 0.75rem;
+  height: 0.75rem;
+}
+
+.avatar-xl {
+  --tblr-avatar-size: 5rem;
+  --tblr-avatar-status-size: 1rem;
+  --tblr-avatar-font-size: 2rem;
+  --tblr-avatar-icon-size: 3rem;
+}
+
+.avatar-xl .badge:empty {
+  width: 1rem;
+  height: 1rem;
+}
+
+.avatar-2xl {
+  --tblr-avatar-size: 7rem;
+  --tblr-avatar-status-size: 1rem;
+  --tblr-avatar-font-size: 3rem;
+  --tblr-avatar-icon-size: 5rem;
+}
+
+.avatar-2xl .badge:empty {
+  width: 1rem;
+  height: 1rem;
+}
+
+.avatar-list {
+  --tblr-list-gap: 0.5rem;
+  display: flex;
+  flex-wrap: wrap;
+  gap: var(--tblr-list-gap);
+}
+.avatar-list a.avatar:hover {
+  z-index: 1;
+}
+
+.avatar-list-stacked {
+  display: block;
+  --tblr-list-gap: 0;
+}
+.avatar-list-stacked .avatar {
+  margin-left: calc(-0.5 * var(--tblr-avatar-size)) !important;
+  box-shadow: var(--tblr-avatar-box-shadow), 0 0 0 2px var(--tblr-card-cap-bg, var(--tblr-card-bg, var(--tblr-bg-surface)));
+}
+
+.avatar-upload {
+  width: 4rem;
+  height: 4rem;
+  border: var(--tblr-border-width) dashed var(--tblr-border-color);
+  background: var(--tblr-bg-forms);
+  flex-direction: column;
+  transition: color 0.3s, background-color 0.3s;
+}
+@media (prefers-reduced-motion: reduce) {
+  .avatar-upload {
+    transition: none;
+  }
+}
+.avatar-upload svg {
+  width: 1.5rem;
+  height: 1.5rem;
+  stroke-width: 1;
+}
+.avatar-upload:hover {
+  border-color: var(--tblr-primary);
+  color: var(--tblr-primary);
+  text-decoration: none;
+}
+
+.avatar-upload-text {
+  font-size: 0.625rem;
+  line-height: 1;
+  margin-top: 0.25rem;
+}
+
+.avatar-cover {
+  margin-top: calc(-0.5 * var(--tblr-avatar-size));
+  box-shadow: 0 0 0 0.25rem var(--tblr-card-bg, var(--tblr-body-bg));
+}
+
+.badge {
+  justify-content: center;
+  align-items: center;
+  background: var(--tblr-bg-surface-secondary);
+  overflow: hidden;
+  -webkit-user-select: none;
+     -moz-user-select: none;
+      -ms-user-select: none;
+          user-select: none;
+  border: var(--tblr-border-width) var(--tblr-border-style) transparent;
+  min-width: 1.35714285em;
+  font-weight: var(--tblr-font-weight-bold);
+  letter-spacing: 0.04em;
+  vertical-align: bottom;
+}
+a.badge {
+  color: var(--tblr-bg-surface);
+}
+
+.badge .avatar {
+  box-sizing: content-box;
+  width: 1.25rem;
+  height: 1.25rem;
+  margin: 0 -0.5rem 0 0.5rem;
+}
+.badge .icon {
+  width: 1em;
+  height: 1em;
+  font-size: 1rem;
+  stroke-width: 2;
+}
+
+.badge:empty,
+.badge-empty {
+  display: inline-block;
+  width: 0.5rem;
+  height: 0.5rem;
+  min-width: 0;
+  min-height: auto;
+  padding: 0;
+  border-radius: 100rem;
+  vertical-align: baseline;
+}
+
+.badge-outline {
+  background-color: transparent;
+  border: var(--tblr-border-width) var(--tblr-border-style) currentColor;
+}
+
+.badge-pill {
+  border-radius: 100rem;
+}
+
+.badges-list {
+  --tblr-list-gap: 0.5rem;
+  display: flex;
+  flex-wrap: wrap;
+  gap: var(--tblr-list-gap);
+}
+
+.badge-notification {
+  position: absolute !important;
+  top: 0 !important;
+  left: 0 !important;
+  transform: translate(-50%, -50%);
+  z-index: 1;
+}
+
+.badge-blink {
+  animation: blink 2s infinite;
+}
+
+.breadcrumb {
+  --tblr-breadcrumb-item-active-font-weight: var(--tblr-font-weight-bold);
+  --tblr-breadcrumb-item-disabled-color: var(--tblr-disabled-color);
+  --tblr-breadcrumb-link-color: var(--tblr-link-color);
+  padding: 0;
+  margin: 0;
+  background: transparent;
+}
+.breadcrumb a {
+  color: var(--tblr-breadcrumb-link-color);
+}
+.breadcrumb a:hover {
+  text-decoration: underline;
+}
+
+.breadcrumb-muted {
+  --tblr-breadcrumb-link-color: var(--tblr-secondary);
+}
+
+.breadcrumb-item.active {
+  font-weight: var(--tblr-breadcrumb-item-active-font-weight);
+}
+.breadcrumb-item.active a {
+  color: inherit;
+  pointer-events: none;
+}
+.breadcrumb-item.disabled {
+  color: var(--tblr-breadcrumb-item-disabled-color);
+}
+.breadcrumb-item.disabled:before {
+  color: inherit;
+}
+.breadcrumb-item.disabled a {
+  color: inherit;
+  pointer-events: none;
+}
+
+.breadcrumb-dots {
+  --tblr-breadcrumb-divider: "·";
+}
+
+.breadcrumb-arrows {
+  --tblr-breadcrumb-divider: "›";
+}
+
+.breadcrumb-bullets {
+  --tblr-breadcrumb-divider: "•";
+}
+
+.btn {
+  --tblr-btn-icon-size: 1.25rem;
+  --tblr-btn-bg: var(--tblr-bg-surface);
+  --tblr-btn-color: var(--tblr-body-color);
+  --tblr-btn-border-color: var(--tblr-border-color);
+  --tblr-btn-hover-bg: var(--tblr-btn-bg);
+  --tblr-btn-hover-border-color: var(--tblr-border-color-active);
+  --tblr-btn-box-shadow: var(--tblr-box-shadow-input);
+  --tblr-btn-active-color: var(--tblr-primary);
+  --tblr-btn-active-bg: rgba(var(--tblr-primary-rgb), 0.04);
+  --tblr-btn-active-border-color: var(--tblr-primary);
+  display: inline-flex;
+  align-items: center;
+  justify-content: center;
+  white-space: nowrap;
+  box-shadow: var(--tblr-btn-box-shadow);
+}
+.btn .icon {
+  width: var(--tblr-btn-icon-size);
+  height: var(--tblr-btn-icon-size);
+  min-width: var(--tblr-btn-icon-size);
+  margin: 0 calc(var(--tblr-btn-padding-x) / -4) 0 calc(var(--tblr-btn-padding-x) / 2);
+  vertical-align: bottom;
+  color: inherit;
+}
+.btn .avatar {
+  width: var(--tblr-btn-icon-size);
+  height: var(--tblr-btn-icon-size);
+  margin: 0 calc(var(--tblr-btn-padding-x) / -4) 0 calc(var(--tblr-btn-padding-x) / 2);
+}
+.btn .icon-right {
+  margin: 0 calc(var(--tblr-btn-padding-x) / 2) 0 calc(var(--tblr-btn-padding-x) / -4);
+}
+.btn .badge {
+  top: auto;
+}
+.btn-check + .btn:hover {
+  color: var(--tblr-btn-hover-color);
+  background-color: var(--tblr-btn-hover-bg);
+  border-color: var(--tblr-btn-hover-border-color);
+}
+
+.btn-link {
+  color: #0054a6;
+  background-color: transparent;
+  border-color: transparent;
+  box-shadow: none;
+}
+.btn-link .icon {
+  color: inherit;
+}
+.btn-link:hover {
+  color: #004385;
+  border-color: transparent;
+}
+
+.btn-primary {
+  --tblr-btn-border-color: transparent;
+  --tblr-btn-hover-border-color: transparent;
+  --tblr-btn-active-border-color: transparent;
+  --tblr-btn-color: var(--tblr-primary-fg);
+  --tblr-btn-bg: var(--tblr-primary);
+  --tblr-btn-hover-color: var(--tblr-primary-fg);
+  --tblr-btn-hover-bg: rgba(var(--tblr-primary-rgb), .8);
+  --tblr-btn-active-color: var(--tblr-primary-fg);
+  --tblr-btn-active-bg: rgba(var(--tblr-primary-rgb), .8);
+  --tblr-btn-disabled-bg: var(--tblr-primary);
+  --tblr-btn-disabled-color: var(--tblr-primary-fg);
+  --tblr-btn-box-shadow: var(--tblr-box-shadow-input);
+}
+
+.btn-outline-primary {
+  --tblr-btn-color: var(--tblr-primary);
+  --tblr-btn-bg: transparent;
+  --tblr-btn-border-color: var(--tblr-primary);
+  --tblr-btn-hover-color: var(--tblr-primary-fg);
+  --tblr-btn-hover-border-color: transparent;
+  --tblr-btn-hover-bg: var(--tblr-primary);
+  --tblr-btn-active-color: var(--tblr-primary-fg);
+  --tblr-btn-active-bg: var(--tblr-primary);
+  --tblr-btn-disabled-color: var(--tblr-primary);
+  --tblr-btn-disabled-border-color: var(--tblr-primary);
+}
+
+.btn-secondary {
+  --tblr-btn-border-color: transparent;
+  --tblr-btn-hover-border-color: transparent;
+  --tblr-btn-active-border-color: transparent;
+  --tblr-btn-color: var(--tblr-secondary-fg);
+  --tblr-btn-bg: var(--tblr-secondary);
+  --tblr-btn-hover-color: var(--tblr-secondary-fg);
+  --tblr-btn-hover-bg: rgba(var(--tblr-secondary-rgb), .8);
+  --tblr-btn-active-color: var(--tblr-secondary-fg);
+  --tblr-btn-active-bg: rgba(var(--tblr-secondary-rgb), .8);
+  --tblr-btn-disabled-bg: var(--tblr-secondary);
+  --tblr-btn-disabled-color: var(--tblr-secondary-fg);
+  --tblr-btn-box-shadow: var(--tblr-box-shadow-input);
+}
+
+.btn-outline-secondary {
+  --tblr-btn-color: var(--tblr-secondary);
+  --tblr-btn-bg: transparent;
+  --tblr-btn-border-color: var(--tblr-secondary);
+  --tblr-btn-hover-color: var(--tblr-secondary-fg);
+  --tblr-btn-hover-border-color: transparent;
+  --tblr-btn-hover-bg: var(--tblr-secondary);
+  --tblr-btn-active-color: var(--tblr-secondary-fg);
+  --tblr-btn-active-bg: var(--tblr-secondary);
+  --tblr-btn-disabled-color: var(--tblr-secondary);
+  --tblr-btn-disabled-border-color: var(--tblr-secondary);
+}
+
+.btn-success {
+  --tblr-btn-border-color: transparent;
+  --tblr-btn-hover-border-color: transparent;
+  --tblr-btn-active-border-color: transparent;
+  --tblr-btn-color: var(--tblr-success-fg);
+  --tblr-btn-bg: var(--tblr-success);
+  --tblr-btn-hover-color: var(--tblr-success-fg);
+  --tblr-btn-hover-bg: rgba(var(--tblr-success-rgb), .8);
+  --tblr-btn-active-color: var(--tblr-success-fg);
+  --tblr-btn-active-bg: rgba(var(--tblr-success-rgb), .8);
+  --tblr-btn-disabled-bg: var(--tblr-success);
+  --tblr-btn-disabled-color: var(--tblr-success-fg);
+  --tblr-btn-box-shadow: var(--tblr-box-shadow-input);
+}
+
+.btn-outline-success {
+  --tblr-btn-color: var(--tblr-success);
+  --tblr-btn-bg: transparent;
+  --tblr-btn-border-color: var(--tblr-success);
+  --tblr-btn-hover-color: var(--tblr-success-fg);
+  --tblr-btn-hover-border-color: transparent;
+  --tblr-btn-hover-bg: var(--tblr-success);
+  --tblr-btn-active-color: var(--tblr-success-fg);
+  --tblr-btn-active-bg: var(--tblr-success);
+  --tblr-btn-disabled-color: var(--tblr-success);
+  --tblr-btn-disabled-border-color: var(--tblr-success);
+}
+
+.btn-info {
+  --tblr-btn-border-color: transparent;
+  --tblr-btn-hover-border-color: transparent;
+  --tblr-btn-active-border-color: transparent;
+  --tblr-btn-color: var(--tblr-info-fg);
+  --tblr-btn-bg: var(--tblr-info);
+  --tblr-btn-hover-color: var(--tblr-info-fg);
+  --tblr-btn-hover-bg: rgba(var(--tblr-info-rgb), .8);
+  --tblr-btn-active-color: var(--tblr-info-fg);
+  --tblr-btn-active-bg: rgba(var(--tblr-info-rgb), .8);
+  --tblr-btn-disabled-bg: var(--tblr-info);
+  --tblr-btn-disabled-color: var(--tblr-info-fg);
+  --tblr-btn-box-shadow: var(--tblr-box-shadow-input);
+}
+
+.btn-outline-info {
+  --tblr-btn-color: var(--tblr-info);
+  --tblr-btn-bg: transparent;
+  --tblr-btn-border-color: var(--tblr-info);
+  --tblr-btn-hover-color: var(--tblr-info-fg);
+  --tblr-btn-hover-border-color: transparent;
+  --tblr-btn-hover-bg: var(--tblr-info);
+  --tblr-btn-active-color: var(--tblr-info-fg);
+  --tblr-btn-active-bg: var(--tblr-info);
+  --tblr-btn-disabled-color: var(--tblr-info);
+  --tblr-btn-disabled-border-color: var(--tblr-info);
+}
+
+.btn-warning {
+  --tblr-btn-border-color: transparent;
+  --tblr-btn-hover-border-color: transparent;
+  --tblr-btn-active-border-color: transparent;
+  --tblr-btn-color: var(--tblr-warning-fg);
+  --tblr-btn-bg: var(--tblr-warning);
+  --tblr-btn-hover-color: var(--tblr-warning-fg);
+  --tblr-btn-hover-bg: rgba(var(--tblr-warning-rgb), .8);
+  --tblr-btn-active-color: var(--tblr-warning-fg);
+  --tblr-btn-active-bg: rgba(var(--tblr-warning-rgb), .8);
+  --tblr-btn-disabled-bg: var(--tblr-warning);
+  --tblr-btn-disabled-color: var(--tblr-warning-fg);
+  --tblr-btn-box-shadow: var(--tblr-box-shadow-input);
+}
+
+.btn-outline-warning {
+  --tblr-btn-color: var(--tblr-warning);
+  --tblr-btn-bg: transparent;
+  --tblr-btn-border-color: var(--tblr-warning);
+  --tblr-btn-hover-color: var(--tblr-warning-fg);
+  --tblr-btn-hover-border-color: transparent;
+  --tblr-btn-hover-bg: var(--tblr-warning);
+  --tblr-btn-active-color: var(--tblr-warning-fg);
+  --tblr-btn-active-bg: var(--tblr-warning);
+  --tblr-btn-disabled-color: var(--tblr-warning);
+  --tblr-btn-disabled-border-color: var(--tblr-warning);
+}
+
+.btn-danger {
+  --tblr-btn-border-color: transparent;
+  --tblr-btn-hover-border-color: transparent;
+  --tblr-btn-active-border-color: transparent;
+  --tblr-btn-color: var(--tblr-danger-fg);
+  --tblr-btn-bg: var(--tblr-danger);
+  --tblr-btn-hover-color: var(--tblr-danger-fg);
+  --tblr-btn-hover-bg: rgba(var(--tblr-danger-rgb), .8);
+  --tblr-btn-active-color: var(--tblr-danger-fg);
+  --tblr-btn-active-bg: rgba(var(--tblr-danger-rgb), .8);
+  --tblr-btn-disabled-bg: var(--tblr-danger);
+  --tblr-btn-disabled-color: var(--tblr-danger-fg);
+  --tblr-btn-box-shadow: var(--tblr-box-shadow-input);
+}
+
+.btn-outline-danger {
+  --tblr-btn-color: var(--tblr-danger);
+  --tblr-btn-bg: transparent;
+  --tblr-btn-border-color: var(--tblr-danger);
+  --tblr-btn-hover-color: var(--tblr-danger-fg);
+  --tblr-btn-hover-border-color: transparent;
+  --tblr-btn-hover-bg: var(--tblr-danger);
+  --tblr-btn-active-color: var(--tblr-danger-fg);
+  --tblr-btn-active-bg: var(--tblr-danger);
+  --tblr-btn-disabled-color: var(--tblr-danger);
+  --tblr-btn-disabled-border-color: var(--tblr-danger);
+}
+
+.btn-light {
+  --tblr-btn-border-color: transparent;
+  --tblr-btn-hover-border-color: transparent;
+  --tblr-btn-active-border-color: transparent;
+  --tblr-btn-color: var(--tblr-light-fg);
+  --tblr-btn-bg: var(--tblr-light);
+  --tblr-btn-hover-color: var(--tblr-light-fg);
+  --tblr-btn-hover-bg: rgba(var(--tblr-light-rgb), .8);
+  --tblr-btn-active-color: var(--tblr-light-fg);
+  --tblr-btn-active-bg: rgba(var(--tblr-light-rgb), .8);
+  --tblr-btn-disabled-bg: var(--tblr-light);
+  --tblr-btn-disabled-color: var(--tblr-light-fg);
+  --tblr-btn-box-shadow: var(--tblr-box-shadow-input);
+}
+
+.btn-outline-light {
+  --tblr-btn-color: var(--tblr-light);
+  --tblr-btn-bg: transparent;
+  --tblr-btn-border-color: var(--tblr-light);
+  --tblr-btn-hover-color: var(--tblr-light-fg);
+  --tblr-btn-hover-border-color: transparent;
+  --tblr-btn-hover-bg: var(--tblr-light);
+  --tblr-btn-active-color: var(--tblr-light-fg);
+  --tblr-btn-active-bg: var(--tblr-light);
+  --tblr-btn-disabled-color: var(--tblr-light);
+  --tblr-btn-disabled-border-color: var(--tblr-light);
+}
+
+.btn-dark {
+  --tblr-btn-border-color: var(--tblr-dark-mode-border-color);
+  --tblr-btn-hover-border-color: var(--tblr-dark-mode-border-color-active);
+  --tblr-btn-active-border-color: var(--tblr-dark-mode-border-color-active);
+  --tblr-btn-color: var(--tblr-dark-fg);
+  --tblr-btn-bg: var(--tblr-dark);
+  --tblr-btn-hover-color: var(--tblr-dark-fg);
+  --tblr-btn-hover-bg: rgba(var(--tblr-dark-rgb), .8);
+  --tblr-btn-active-color: var(--tblr-dark-fg);
+  --tblr-btn-active-bg: rgba(var(--tblr-dark-rgb), .8);
+  --tblr-btn-disabled-bg: var(--tblr-dark);
+  --tblr-btn-disabled-color: var(--tblr-dark-fg);
+  --tblr-btn-box-shadow: var(--tblr-box-shadow-input);
+}
+
+.btn-outline-dark {
+  --tblr-btn-color: var(--tblr-dark);
+  --tblr-btn-bg: transparent;
+  --tblr-btn-border-color: var(--tblr-dark);
+  --tblr-btn-hover-color: var(--tblr-dark-fg);
+  --tblr-btn-hover-border-color: transparent;
+  --tblr-btn-hover-bg: var(--tblr-dark);
+  --tblr-btn-active-color: var(--tblr-dark-fg);
+  --tblr-btn-active-bg: var(--tblr-dark);
+  --tblr-btn-disabled-color: var(--tblr-dark);
+  --tblr-btn-disabled-border-color: var(--tblr-dark);
+}
+
+.btn-muted {
+  --tblr-btn-border-color: transparent;
+  --tblr-btn-hover-border-color: transparent;
+  --tblr-btn-active-border-color: transparent;
+  --tblr-btn-color: var(--tblr-muted-fg);
+  --tblr-btn-bg: var(--tblr-muted);
+  --tblr-btn-hover-color: var(--tblr-muted-fg);
+  --tblr-btn-hover-bg: rgba(var(--tblr-muted-rgb), .8);
+  --tblr-btn-active-color: var(--tblr-muted-fg);
+  --tblr-btn-active-bg: rgba(var(--tblr-muted-rgb), .8);
+  --tblr-btn-disabled-bg: var(--tblr-muted);
+  --tblr-btn-disabled-color: var(--tblr-muted-fg);
+  --tblr-btn-box-shadow: var(--tblr-box-shadow-input);
+}
+
+.btn-outline-muted {
+  --tblr-btn-color: var(--tblr-muted);
+  --tblr-btn-bg: transparent;
+  --tblr-btn-border-color: var(--tblr-muted);
+  --tblr-btn-hover-color: var(--tblr-muted-fg);
+  --tblr-btn-hover-border-color: transparent;
+  --tblr-btn-hover-bg: var(--tblr-muted);
+  --tblr-btn-active-color: var(--tblr-muted-fg);
+  --tblr-btn-active-bg: var(--tblr-muted);
+  --tblr-btn-disabled-color: var(--tblr-muted);
+  --tblr-btn-disabled-border-color: var(--tblr-muted);
+}
+
+.btn-blue {
+  --tblr-btn-border-color: transparent;
+  --tblr-btn-hover-border-color: transparent;
+  --tblr-btn-active-border-color: transparent;
+  --tblr-btn-color: var(--tblr-blue-fg);
+  --tblr-btn-bg: var(--tblr-blue);
+  --tblr-btn-hover-color: var(--tblr-blue-fg);
+  --tblr-btn-hover-bg: rgba(var(--tblr-blue-rgb), .8);
+  --tblr-btn-active-color: var(--tblr-blue-fg);
+  --tblr-btn-active-bg: rgba(var(--tblr-blue-rgb), .8);
+  --tblr-btn-disabled-bg: var(--tblr-blue);
+  --tblr-btn-disabled-color: var(--tblr-blue-fg);
+  --tblr-btn-box-shadow: var(--tblr-box-shadow-input);
+}
+
+.btn-outline-blue {
+  --tblr-btn-color: var(--tblr-blue);
+  --tblr-btn-bg: transparent;
+  --tblr-btn-border-color: var(--tblr-blue);
+  --tblr-btn-hover-color: var(--tblr-blue-fg);
+  --tblr-btn-hover-border-color: transparent;
+  --tblr-btn-hover-bg: var(--tblr-blue);
+  --tblr-btn-active-color: var(--tblr-blue-fg);
+  --tblr-btn-active-bg: var(--tblr-blue);
+  --tblr-btn-disabled-color: var(--tblr-blue);
+  --tblr-btn-disabled-border-color: var(--tblr-blue);
+}
+
+.btn-azure {
+  --tblr-btn-border-color: transparent;
+  --tblr-btn-hover-border-color: transparent;
+  --tblr-btn-active-border-color: transparent;
+  --tblr-btn-color: var(--tblr-azure-fg);
+  --tblr-btn-bg: var(--tblr-azure);
+  --tblr-btn-hover-color: var(--tblr-azure-fg);
+  --tblr-btn-hover-bg: rgba(var(--tblr-azure-rgb), .8);
+  --tblr-btn-active-color: var(--tblr-azure-fg);
+  --tblr-btn-active-bg: rgba(var(--tblr-azure-rgb), .8);
+  --tblr-btn-disabled-bg: var(--tblr-azure);
+  --tblr-btn-disabled-color: var(--tblr-azure-fg);
+  --tblr-btn-box-shadow: var(--tblr-box-shadow-input);
+}
+
+.btn-outline-azure {
+  --tblr-btn-color: var(--tblr-azure);
+  --tblr-btn-bg: transparent;
+  --tblr-btn-border-color: var(--tblr-azure);
+  --tblr-btn-hover-color: var(--tblr-azure-fg);
+  --tblr-btn-hover-border-color: transparent;
+  --tblr-btn-hover-bg: var(--tblr-azure);
+  --tblr-btn-active-color: var(--tblr-azure-fg);
+  --tblr-btn-active-bg: var(--tblr-azure);
+  --tblr-btn-disabled-color: var(--tblr-azure);
+  --tblr-btn-disabled-border-color: var(--tblr-azure);
+}
+
+.btn-indigo {
+  --tblr-btn-border-color: transparent;
+  --tblr-btn-hover-border-color: transparent;
+  --tblr-btn-active-border-color: transparent;
+  --tblr-btn-color: var(--tblr-indigo-fg);
+  --tblr-btn-bg: var(--tblr-indigo);
+  --tblr-btn-hover-color: var(--tblr-indigo-fg);
+  --tblr-btn-hover-bg: rgba(var(--tblr-indigo-rgb), .8);
+  --tblr-btn-active-color: var(--tblr-indigo-fg);
+  --tblr-btn-active-bg: rgba(var(--tblr-indigo-rgb), .8);
+  --tblr-btn-disabled-bg: var(--tblr-indigo);
+  --tblr-btn-disabled-color: var(--tblr-indigo-fg);
+  --tblr-btn-box-shadow: var(--tblr-box-shadow-input);
+}
+
+.btn-outline-indigo {
+  --tblr-btn-color: var(--tblr-indigo);
+  --tblr-btn-bg: transparent;
+  --tblr-btn-border-color: var(--tblr-indigo);
+  --tblr-btn-hover-color: var(--tblr-indigo-fg);
+  --tblr-btn-hover-border-color: transparent;
+  --tblr-btn-hover-bg: var(--tblr-indigo);
+  --tblr-btn-active-color: var(--tblr-indigo-fg);
+  --tblr-btn-active-bg: var(--tblr-indigo);
+  --tblr-btn-disabled-color: var(--tblr-indigo);
+  --tblr-btn-disabled-border-color: var(--tblr-indigo);
+}
+
+.btn-purple {
+  --tblr-btn-border-color: transparent;
+  --tblr-btn-hover-border-color: transparent;
+  --tblr-btn-active-border-color: transparent;
+  --tblr-btn-color: var(--tblr-purple-fg);
+  --tblr-btn-bg: var(--tblr-purple);
+  --tblr-btn-hover-color: var(--tblr-purple-fg);
+  --tblr-btn-hover-bg: rgba(var(--tblr-purple-rgb), .8);
+  --tblr-btn-active-color: var(--tblr-purple-fg);
+  --tblr-btn-active-bg: rgba(var(--tblr-purple-rgb), .8);
+  --tblr-btn-disabled-bg: var(--tblr-purple);
+  --tblr-btn-disabled-color: var(--tblr-purple-fg);
+  --tblr-btn-box-shadow: var(--tblr-box-shadow-input);
+}
+
+.btn-outline-purple {
+  --tblr-btn-color: var(--tblr-purple);
+  --tblr-btn-bg: transparent;
+  --tblr-btn-border-color: var(--tblr-purple);
+  --tblr-btn-hover-color: var(--tblr-purple-fg);
+  --tblr-btn-hover-border-color: transparent;
+  --tblr-btn-hover-bg: var(--tblr-purple);
+  --tblr-btn-active-color: var(--tblr-purple-fg);
+  --tblr-btn-active-bg: var(--tblr-purple);
+  --tblr-btn-disabled-color: var(--tblr-purple);
+  --tblr-btn-disabled-border-color: var(--tblr-purple);
+}
+
+.btn-pink {
+  --tblr-btn-border-color: transparent;
+  --tblr-btn-hover-border-color: transparent;
+  --tblr-btn-active-border-color: transparent;
+  --tblr-btn-color: var(--tblr-pink-fg);
+  --tblr-btn-bg: var(--tblr-pink);
+  --tblr-btn-hover-color: var(--tblr-pink-fg);
+  --tblr-btn-hover-bg: rgba(var(--tblr-pink-rgb), .8);
+  --tblr-btn-active-color: var(--tblr-pink-fg);
+  --tblr-btn-active-bg: rgba(var(--tblr-pink-rgb), .8);
+  --tblr-btn-disabled-bg: var(--tblr-pink);
+  --tblr-btn-disabled-color: var(--tblr-pink-fg);
+  --tblr-btn-box-shadow: var(--tblr-box-shadow-input);
+}
+
+.btn-outline-pink {
+  --tblr-btn-color: var(--tblr-pink);
+  --tblr-btn-bg: transparent;
+  --tblr-btn-border-color: var(--tblr-pink);
+  --tblr-btn-hover-color: var(--tblr-pink-fg);
+  --tblr-btn-hover-border-color: transparent;
+  --tblr-btn-hover-bg: var(--tblr-pink);
+  --tblr-btn-active-color: var(--tblr-pink-fg);
+  --tblr-btn-active-bg: var(--tblr-pink);
+  --tblr-btn-disabled-color: var(--tblr-pink);
+  --tblr-btn-disabled-border-color: var(--tblr-pink);
+}
+
+.btn-red {
+  --tblr-btn-border-color: transparent;
+  --tblr-btn-hover-border-color: transparent;
+  --tblr-btn-active-border-color: transparent;
+  --tblr-btn-color: var(--tblr-red-fg);
+  --tblr-btn-bg: var(--tblr-red);
+  --tblr-btn-hover-color: var(--tblr-red-fg);
+  --tblr-btn-hover-bg: rgba(var(--tblr-red-rgb), .8);
+  --tblr-btn-active-color: var(--tblr-red-fg);
+  --tblr-btn-active-bg: rgba(var(--tblr-red-rgb), .8);
+  --tblr-btn-disabled-bg: var(--tblr-red);
+  --tblr-btn-disabled-color: var(--tblr-red-fg);
+  --tblr-btn-box-shadow: var(--tblr-box-shadow-input);
+}
+
+.btn-outline-red {
+  --tblr-btn-color: var(--tblr-red);
+  --tblr-btn-bg: transparent;
+  --tblr-btn-border-color: var(--tblr-red);
+  --tblr-btn-hover-color: var(--tblr-red-fg);
+  --tblr-btn-hover-border-color: transparent;
+  --tblr-btn-hover-bg: var(--tblr-red);
+  --tblr-btn-active-color: var(--tblr-red-fg);
+  --tblr-btn-active-bg: var(--tblr-red);
+  --tblr-btn-disabled-color: var(--tblr-red);
+  --tblr-btn-disabled-border-color: var(--tblr-red);
+}
+
+.btn-orange {
+  --tblr-btn-border-color: transparent;
+  --tblr-btn-hover-border-color: transparent;
+  --tblr-btn-active-border-color: transparent;
+  --tblr-btn-color: var(--tblr-orange-fg);
+  --tblr-btn-bg: var(--tblr-orange);
+  --tblr-btn-hover-color: var(--tblr-orange-fg);
+  --tblr-btn-hover-bg: rgba(var(--tblr-orange-rgb), .8);
+  --tblr-btn-active-color: var(--tblr-orange-fg);
+  --tblr-btn-active-bg: rgba(var(--tblr-orange-rgb), .8);
+  --tblr-btn-disabled-bg: var(--tblr-orange);
+  --tblr-btn-disabled-color: var(--tblr-orange-fg);
+  --tblr-btn-box-shadow: var(--tblr-box-shadow-input);
+}
+
+.btn-outline-orange {
+  --tblr-btn-color: var(--tblr-orange);
+  --tblr-btn-bg: transparent;
+  --tblr-btn-border-color: var(--tblr-orange);
+  --tblr-btn-hover-color: var(--tblr-orange-fg);
+  --tblr-btn-hover-border-color: transparent;
+  --tblr-btn-hover-bg: var(--tblr-orange);
+  --tblr-btn-active-color: var(--tblr-orange-fg);
+  --tblr-btn-active-bg: var(--tblr-orange);
+  --tblr-btn-disabled-color: var(--tblr-orange);
+  --tblr-btn-disabled-border-color: var(--tblr-orange);
+}
+
+.btn-yellow {
+  --tblr-btn-border-color: transparent;
+  --tblr-btn-hover-border-color: transparent;
+  --tblr-btn-active-border-color: transparent;
+  --tblr-btn-color: var(--tblr-yellow-fg);
+  --tblr-btn-bg: var(--tblr-yellow);
+  --tblr-btn-hover-color: var(--tblr-yellow-fg);
+  --tblr-btn-hover-bg: rgba(var(--tblr-yellow-rgb), .8);
+  --tblr-btn-active-color: var(--tblr-yellow-fg);
+  --tblr-btn-active-bg: rgba(var(--tblr-yellow-rgb), .8);
+  --tblr-btn-disabled-bg: var(--tblr-yellow);
+  --tblr-btn-disabled-color: var(--tblr-yellow-fg);
+  --tblr-btn-box-shadow: var(--tblr-box-shadow-input);
+}
+
+.btn-outline-yellow {
+  --tblr-btn-color: var(--tblr-yellow);
+  --tblr-btn-bg: transparent;
+  --tblr-btn-border-color: var(--tblr-yellow);
+  --tblr-btn-hover-color: var(--tblr-yellow-fg);
+  --tblr-btn-hover-border-color: transparent;
+  --tblr-btn-hover-bg: var(--tblr-yellow);
+  --tblr-btn-active-color: var(--tblr-yellow-fg);
+  --tblr-btn-active-bg: var(--tblr-yellow);
+  --tblr-btn-disabled-color: var(--tblr-yellow);
+  --tblr-btn-disabled-border-color: var(--tblr-yellow);
+}
+
+.btn-lime {
+  --tblr-btn-border-color: transparent;
+  --tblr-btn-hover-border-color: transparent;
+  --tblr-btn-active-border-color: transparent;
+  --tblr-btn-color: var(--tblr-lime-fg);
+  --tblr-btn-bg: var(--tblr-lime);
+  --tblr-btn-hover-color: var(--tblr-lime-fg);
+  --tblr-btn-hover-bg: rgba(var(--tblr-lime-rgb), .8);
+  --tblr-btn-active-color: var(--tblr-lime-fg);
+  --tblr-btn-active-bg: rgba(var(--tblr-lime-rgb), .8);
+  --tblr-btn-disabled-bg: var(--tblr-lime);
+  --tblr-btn-disabled-color: var(--tblr-lime-fg);
+  --tblr-btn-box-shadow: var(--tblr-box-shadow-input);
+}
+
+.btn-outline-lime {
+  --tblr-btn-color: var(--tblr-lime);
+  --tblr-btn-bg: transparent;
+  --tblr-btn-border-color: var(--tblr-lime);
+  --tblr-btn-hover-color: var(--tblr-lime-fg);
+  --tblr-btn-hover-border-color: transparent;
+  --tblr-btn-hover-bg: var(--tblr-lime);
+  --tblr-btn-active-color: var(--tblr-lime-fg);
+  --tblr-btn-active-bg: var(--tblr-lime);
+  --tblr-btn-disabled-color: var(--tblr-lime);
+  --tblr-btn-disabled-border-color: var(--tblr-lime);
+}
+
+.btn-green {
+  --tblr-btn-border-color: transparent;
+  --tblr-btn-hover-border-color: transparent;
+  --tblr-btn-active-border-color: transparent;
+  --tblr-btn-color: var(--tblr-green-fg);
+  --tblr-btn-bg: var(--tblr-green);
+  --tblr-btn-hover-color: var(--tblr-green-fg);
+  --tblr-btn-hover-bg: rgba(var(--tblr-green-rgb), .8);
+  --tblr-btn-active-color: var(--tblr-green-fg);
+  --tblr-btn-active-bg: rgba(var(--tblr-green-rgb), .8);
+  --tblr-btn-disabled-bg: var(--tblr-green);
+  --tblr-btn-disabled-color: var(--tblr-green-fg);
+  --tblr-btn-box-shadow: var(--tblr-box-shadow-input);
+}
+
+.btn-outline-green {
+  --tblr-btn-color: var(--tblr-green);
+  --tblr-btn-bg: transparent;
+  --tblr-btn-border-color: var(--tblr-green);
+  --tblr-btn-hover-color: var(--tblr-green-fg);
+  --tblr-btn-hover-border-color: transparent;
+  --tblr-btn-hover-bg: var(--tblr-green);
+  --tblr-btn-active-color: var(--tblr-green-fg);
+  --tblr-btn-active-bg: var(--tblr-green);
+  --tblr-btn-disabled-color: var(--tblr-green);
+  --tblr-btn-disabled-border-color: var(--tblr-green);
+}
+
+.btn-teal {
+  --tblr-btn-border-color: transparent;
+  --tblr-btn-hover-border-color: transparent;
+  --tblr-btn-active-border-color: transparent;
+  --tblr-btn-color: var(--tblr-teal-fg);
+  --tblr-btn-bg: var(--tblr-teal);
+  --tblr-btn-hover-color: var(--tblr-teal-fg);
+  --tblr-btn-hover-bg: rgba(var(--tblr-teal-rgb), .8);
+  --tblr-btn-active-color: var(--tblr-teal-fg);
+  --tblr-btn-active-bg: rgba(var(--tblr-teal-rgb), .8);
+  --tblr-btn-disabled-bg: var(--tblr-teal);
+  --tblr-btn-disabled-color: var(--tblr-teal-fg);
+  --tblr-btn-box-shadow: var(--tblr-box-shadow-input);
+}
+
+.btn-outline-teal {
+  --tblr-btn-color: var(--tblr-teal);
+  --tblr-btn-bg: transparent;
+  --tblr-btn-border-color: var(--tblr-teal);
+  --tblr-btn-hover-color: var(--tblr-teal-fg);
+  --tblr-btn-hover-border-color: transparent;
+  --tblr-btn-hover-bg: var(--tblr-teal);
+  --tblr-btn-active-color: var(--tblr-teal-fg);
+  --tblr-btn-active-bg: var(--tblr-teal);
+  --tblr-btn-disabled-color: var(--tblr-teal);
+  --tblr-btn-disabled-border-color: var(--tblr-teal);
+}
+
+.btn-cyan {
+  --tblr-btn-border-color: transparent;
+  --tblr-btn-hover-border-color: transparent;
+  --tblr-btn-active-border-color: transparent;
+  --tblr-btn-color: var(--tblr-cyan-fg);
+  --tblr-btn-bg: var(--tblr-cyan);
+  --tblr-btn-hover-color: var(--tblr-cyan-fg);
+  --tblr-btn-hover-bg: rgba(var(--tblr-cyan-rgb), .8);
+  --tblr-btn-active-color: var(--tblr-cyan-fg);
+  --tblr-btn-active-bg: rgba(var(--tblr-cyan-rgb), .8);
+  --tblr-btn-disabled-bg: var(--tblr-cyan);
+  --tblr-btn-disabled-color: var(--tblr-cyan-fg);
+  --tblr-btn-box-shadow: var(--tblr-box-shadow-input);
+}
+
+.btn-outline-cyan {
+  --tblr-btn-color: var(--tblr-cyan);
+  --tblr-btn-bg: transparent;
+  --tblr-btn-border-color: var(--tblr-cyan);
+  --tblr-btn-hover-color: var(--tblr-cyan-fg);
+  --tblr-btn-hover-border-color: transparent;
+  --tblr-btn-hover-bg: var(--tblr-cyan);
+  --tblr-btn-active-color: var(--tblr-cyan-fg);
+  --tblr-btn-active-bg: var(--tblr-cyan);
+  --tblr-btn-disabled-color: var(--tblr-cyan);
+  --tblr-btn-disabled-border-color: var(--tblr-cyan);
+}
+
+.btn-facebook {
+  --tblr-btn-border-color: transparent;
+  --tblr-btn-hover-border-color: transparent;
+  --tblr-btn-active-border-color: transparent;
+  --tblr-btn-color: var(--tblr-facebook-fg);
+  --tblr-btn-bg: var(--tblr-facebook);
+  --tblr-btn-hover-color: var(--tblr-facebook-fg);
+  --tblr-btn-hover-bg: rgba(var(--tblr-facebook-rgb), .8);
+  --tblr-btn-active-color: var(--tblr-facebook-fg);
+  --tblr-btn-active-bg: rgba(var(--tblr-facebook-rgb), .8);
+  --tblr-btn-disabled-bg: var(--tblr-facebook);
+  --tblr-btn-disabled-color: var(--tblr-facebook-fg);
+  --tblr-btn-box-shadow: var(--tblr-box-shadow-input);
+}
+
+.btn-outline-facebook {
+  --tblr-btn-color: var(--tblr-facebook);
+  --tblr-btn-bg: transparent;
+  --tblr-btn-border-color: var(--tblr-facebook);
+  --tblr-btn-hover-color: var(--tblr-facebook-fg);
+  --tblr-btn-hover-border-color: transparent;
+  --tblr-btn-hover-bg: var(--tblr-facebook);
+  --tblr-btn-active-color: var(--tblr-facebook-fg);
+  --tblr-btn-active-bg: var(--tblr-facebook);
+  --tblr-btn-disabled-color: var(--tblr-facebook);
+  --tblr-btn-disabled-border-color: var(--tblr-facebook);
+}
+
+.btn-twitter {
+  --tblr-btn-border-color: transparent;
+  --tblr-btn-hover-border-color: transparent;
+  --tblr-btn-active-border-color: transparent;
+  --tblr-btn-color: var(--tblr-twitter-fg);
+  --tblr-btn-bg: var(--tblr-twitter);
+  --tblr-btn-hover-color: var(--tblr-twitter-fg);
+  --tblr-btn-hover-bg: rgba(var(--tblr-twitter-rgb), .8);
+  --tblr-btn-active-color: var(--tblr-twitter-fg);
+  --tblr-btn-active-bg: rgba(var(--tblr-twitter-rgb), .8);
+  --tblr-btn-disabled-bg: var(--tblr-twitter);
+  --tblr-btn-disabled-color: var(--tblr-twitter-fg);
+  --tblr-btn-box-shadow: var(--tblr-box-shadow-input);
+}
+
+.btn-outline-twitter {
+  --tblr-btn-color: var(--tblr-twitter);
+  --tblr-btn-bg: transparent;
+  --tblr-btn-border-color: var(--tblr-twitter);
+  --tblr-btn-hover-color: var(--tblr-twitter-fg);
+  --tblr-btn-hover-border-color: transparent;
+  --tblr-btn-hover-bg: var(--tblr-twitter);
+  --tblr-btn-active-color: var(--tblr-twitter-fg);
+  --tblr-btn-active-bg: var(--tblr-twitter);
+  --tblr-btn-disabled-color: var(--tblr-twitter);
+  --tblr-btn-disabled-border-color: var(--tblr-twitter);
+}
+
+.btn-linkedin {
+  --tblr-btn-border-color: transparent;
+  --tblr-btn-hover-border-color: transparent;
+  --tblr-btn-active-border-color: transparent;
+  --tblr-btn-color: var(--tblr-linkedin-fg);
+  --tblr-btn-bg: var(--tblr-linkedin);
+  --tblr-btn-hover-color: var(--tblr-linkedin-fg);
+  --tblr-btn-hover-bg: rgba(var(--tblr-linkedin-rgb), .8);
+  --tblr-btn-active-color: var(--tblr-linkedin-fg);
+  --tblr-btn-active-bg: rgba(var(--tblr-linkedin-rgb), .8);
+  --tblr-btn-disabled-bg: var(--tblr-linkedin);
+  --tblr-btn-disabled-color: var(--tblr-linkedin-fg);
+  --tblr-btn-box-shadow: var(--tblr-box-shadow-input);
+}
+
+.btn-outline-linkedin {
+  --tblr-btn-color: var(--tblr-linkedin);
+  --tblr-btn-bg: transparent;
+  --tblr-btn-border-color: var(--tblr-linkedin);
+  --tblr-btn-hover-color: var(--tblr-linkedin-fg);
+  --tblr-btn-hover-border-color: transparent;
+  --tblr-btn-hover-bg: var(--tblr-linkedin);
+  --tblr-btn-active-color: var(--tblr-linkedin-fg);
+  --tblr-btn-active-bg: var(--tblr-linkedin);
+  --tblr-btn-disabled-color: var(--tblr-linkedin);
+  --tblr-btn-disabled-border-color: var(--tblr-linkedin);
+}
+
+.btn-google {
+  --tblr-btn-border-color: transparent;
+  --tblr-btn-hover-border-color: transparent;
+  --tblr-btn-active-border-color: transparent;
+  --tblr-btn-color: var(--tblr-google-fg);
+  --tblr-btn-bg: var(--tblr-google);
+  --tblr-btn-hover-color: var(--tblr-google-fg);
+  --tblr-btn-hover-bg: rgba(var(--tblr-google-rgb), .8);
+  --tblr-btn-active-color: var(--tblr-google-fg);
+  --tblr-btn-active-bg: rgba(var(--tblr-google-rgb), .8);
+  --tblr-btn-disabled-bg: var(--tblr-google);
+  --tblr-btn-disabled-color: var(--tblr-google-fg);
+  --tblr-btn-box-shadow: var(--tblr-box-shadow-input);
+}
+
+.btn-outline-google {
+  --tblr-btn-color: var(--tblr-google);
+  --tblr-btn-bg: transparent;
+  --tblr-btn-border-color: var(--tblr-google);
+  --tblr-btn-hover-color: var(--tblr-google-fg);
+  --tblr-btn-hover-border-color: transparent;
+  --tblr-btn-hover-bg: var(--tblr-google);
+  --tblr-btn-active-color: var(--tblr-google-fg);
+  --tblr-btn-active-bg: var(--tblr-google);
+  --tblr-btn-disabled-color: var(--tblr-google);
+  --tblr-btn-disabled-border-color: var(--tblr-google);
+}
+
+.btn-youtube {
+  --tblr-btn-border-color: transparent;
+  --tblr-btn-hover-border-color: transparent;
+  --tblr-btn-active-border-color: transparent;
+  --tblr-btn-color: var(--tblr-youtube-fg);
+  --tblr-btn-bg: var(--tblr-youtube);
+  --tblr-btn-hover-color: var(--tblr-youtube-fg);
+  --tblr-btn-hover-bg: rgba(var(--tblr-youtube-rgb), .8);
+  --tblr-btn-active-color: var(--tblr-youtube-fg);
+  --tblr-btn-active-bg: rgba(var(--tblr-youtube-rgb), .8);
+  --tblr-btn-disabled-bg: var(--tblr-youtube);
+  --tblr-btn-disabled-color: var(--tblr-youtube-fg);
+  --tblr-btn-box-shadow: var(--tblr-box-shadow-input);
+}
+
+.btn-outline-youtube {
+  --tblr-btn-color: var(--tblr-youtube);
+  --tblr-btn-bg: transparent;
+  --tblr-btn-border-color: var(--tblr-youtube);
+  --tblr-btn-hover-color: var(--tblr-youtube-fg);
+  --tblr-btn-hover-border-color: transparent;
+  --tblr-btn-hover-bg: var(--tblr-youtube);
+  --tblr-btn-active-color: var(--tblr-youtube-fg);
+  --tblr-btn-active-bg: var(--tblr-youtube);
+  --tblr-btn-disabled-color: var(--tblr-youtube);
+  --tblr-btn-disabled-border-color: var(--tblr-youtube);
+}
+
+.btn-vimeo {
+  --tblr-btn-border-color: transparent;
+  --tblr-btn-hover-border-color: transparent;
+  --tblr-btn-active-border-color: transparent;
+  --tblr-btn-color: var(--tblr-vimeo-fg);
+  --tblr-btn-bg: var(--tblr-vimeo);
+  --tblr-btn-hover-color: var(--tblr-vimeo-fg);
+  --tblr-btn-hover-bg: rgba(var(--tblr-vimeo-rgb), .8);
+  --tblr-btn-active-color: var(--tblr-vimeo-fg);
+  --tblr-btn-active-bg: rgba(var(--tblr-vimeo-rgb), .8);
+  --tblr-btn-disabled-bg: var(--tblr-vimeo);
+  --tblr-btn-disabled-color: var(--tblr-vimeo-fg);
+  --tblr-btn-box-shadow: var(--tblr-box-shadow-input);
+}
+
+.btn-outline-vimeo {
+  --tblr-btn-color: var(--tblr-vimeo);
+  --tblr-btn-bg: transparent;
+  --tblr-btn-border-color: var(--tblr-vimeo);
+  --tblr-btn-hover-color: var(--tblr-vimeo-fg);
+  --tblr-btn-hover-border-color: transparent;
+  --tblr-btn-hover-bg: var(--tblr-vimeo);
+  --tblr-btn-active-color: var(--tblr-vimeo-fg);
+  --tblr-btn-active-bg: var(--tblr-vimeo);
+  --tblr-btn-disabled-color: var(--tblr-vimeo);
+  --tblr-btn-disabled-border-color: var(--tblr-vimeo);
+}
+
+.btn-dribbble {
+  --tblr-btn-border-color: transparent;
+  --tblr-btn-hover-border-color: transparent;
+  --tblr-btn-active-border-color: transparent;
+  --tblr-btn-color: var(--tblr-dribbble-fg);
+  --tblr-btn-bg: var(--tblr-dribbble);
+  --tblr-btn-hover-color: var(--tblr-dribbble-fg);
+  --tblr-btn-hover-bg: rgba(var(--tblr-dribbble-rgb), .8);
+  --tblr-btn-active-color: var(--tblr-dribbble-fg);
+  --tblr-btn-active-bg: rgba(var(--tblr-dribbble-rgb), .8);
+  --tblr-btn-disabled-bg: var(--tblr-dribbble);
+  --tblr-btn-disabled-color: var(--tblr-dribbble-fg);
+  --tblr-btn-box-shadow: var(--tblr-box-shadow-input);
+}
+
+.btn-outline-dribbble {
+  --tblr-btn-color: var(--tblr-dribbble);
+  --tblr-btn-bg: transparent;
+  --tblr-btn-border-color: var(--tblr-dribbble);
+  --tblr-btn-hover-color: var(--tblr-dribbble-fg);
+  --tblr-btn-hover-border-color: transparent;
+  --tblr-btn-hover-bg: var(--tblr-dribbble);
+  --tblr-btn-active-color: var(--tblr-dribbble-fg);
+  --tblr-btn-active-bg: var(--tblr-dribbble);
+  --tblr-btn-disabled-color: var(--tblr-dribbble);
+  --tblr-btn-disabled-border-color: var(--tblr-dribbble);
+}
+
+.btn-github {
+  --tblr-btn-border-color: transparent;
+  --tblr-btn-hover-border-color: transparent;
+  --tblr-btn-active-border-color: transparent;
+  --tblr-btn-color: var(--tblr-github-fg);
+  --tblr-btn-bg: var(--tblr-github);
+  --tblr-btn-hover-color: var(--tblr-github-fg);
+  --tblr-btn-hover-bg: rgba(var(--tblr-github-rgb), .8);
+  --tblr-btn-active-color: var(--tblr-github-fg);
+  --tblr-btn-active-bg: rgba(var(--tblr-github-rgb), .8);
+  --tblr-btn-disabled-bg: var(--tblr-github);
+  --tblr-btn-disabled-color: var(--tblr-github-fg);
+  --tblr-btn-box-shadow: var(--tblr-box-shadow-input);
+}
+
+.btn-outline-github {
+  --tblr-btn-color: var(--tblr-github);
+  --tblr-btn-bg: transparent;
+  --tblr-btn-border-color: var(--tblr-github);
+  --tblr-btn-hover-color: var(--tblr-github-fg);
+  --tblr-btn-hover-border-color: transparent;
+  --tblr-btn-hover-bg: var(--tblr-github);
+  --tblr-btn-active-color: var(--tblr-github-fg);
+  --tblr-btn-active-bg: var(--tblr-github);
+  --tblr-btn-disabled-color: var(--tblr-github);
+  --tblr-btn-disabled-border-color: var(--tblr-github);
+}
+
+.btn-instagram {
+  --tblr-btn-border-color: transparent;
+  --tblr-btn-hover-border-color: transparent;
+  --tblr-btn-active-border-color: transparent;
+  --tblr-btn-color: var(--tblr-instagram-fg);
+  --tblr-btn-bg: var(--tblr-instagram);
+  --tblr-btn-hover-color: var(--tblr-instagram-fg);
+  --tblr-btn-hover-bg: rgba(var(--tblr-instagram-rgb), .8);
+  --tblr-btn-active-color: var(--tblr-instagram-fg);
+  --tblr-btn-active-bg: rgba(var(--tblr-instagram-rgb), .8);
+  --tblr-btn-disabled-bg: var(--tblr-instagram);
+  --tblr-btn-disabled-color: var(--tblr-instagram-fg);
+  --tblr-btn-box-shadow: var(--tblr-box-shadow-input);
+}
+
+.btn-outline-instagram {
+  --tblr-btn-color: var(--tblr-instagram);
+  --tblr-btn-bg: transparent;
+  --tblr-btn-border-color: var(--tblr-instagram);
+  --tblr-btn-hover-color: var(--tblr-instagram-fg);
+  --tblr-btn-hover-border-color: transparent;
+  --tblr-btn-hover-bg: var(--tblr-instagram);
+  --tblr-btn-active-color: var(--tblr-instagram-fg);
+  --tblr-btn-active-bg: var(--tblr-instagram);
+  --tblr-btn-disabled-color: var(--tblr-instagram);
+  --tblr-btn-disabled-border-color: var(--tblr-instagram);
+}
+
+.btn-pinterest {
+  --tblr-btn-border-color: transparent;
+  --tblr-btn-hover-border-color: transparent;
+  --tblr-btn-active-border-color: transparent;
+  --tblr-btn-color: var(--tblr-pinterest-fg);
+  --tblr-btn-bg: var(--tblr-pinterest);
+  --tblr-btn-hover-color: var(--tblr-pinterest-fg);
+  --tblr-btn-hover-bg: rgba(var(--tblr-pinterest-rgb), .8);
+  --tblr-btn-active-color: var(--tblr-pinterest-fg);
+  --tblr-btn-active-bg: rgba(var(--tblr-pinterest-rgb), .8);
+  --tblr-btn-disabled-bg: var(--tblr-pinterest);
+  --tblr-btn-disabled-color: var(--tblr-pinterest-fg);
+  --tblr-btn-box-shadow: var(--tblr-box-shadow-input);
+}
+
+.btn-outline-pinterest {
+  --tblr-btn-color: var(--tblr-pinterest);
+  --tblr-btn-bg: transparent;
+  --tblr-btn-border-color: var(--tblr-pinterest);
+  --tblr-btn-hover-color: var(--tblr-pinterest-fg);
+  --tblr-btn-hover-border-color: transparent;
+  --tblr-btn-hover-bg: var(--tblr-pinterest);
+  --tblr-btn-active-color: var(--tblr-pinterest-fg);
+  --tblr-btn-active-bg: var(--tblr-pinterest);
+  --tblr-btn-disabled-color: var(--tblr-pinterest);
+  --tblr-btn-disabled-border-color: var(--tblr-pinterest);
+}
+
+.btn-vk {
+  --tblr-btn-border-color: transparent;
+  --tblr-btn-hover-border-color: transparent;
+  --tblr-btn-active-border-color: transparent;
+  --tblr-btn-color: var(--tblr-vk-fg);
+  --tblr-btn-bg: var(--tblr-vk);
+  --tblr-btn-hover-color: var(--tblr-vk-fg);
+  --tblr-btn-hover-bg: rgba(var(--tblr-vk-rgb), .8);
+  --tblr-btn-active-color: var(--tblr-vk-fg);
+  --tblr-btn-active-bg: rgba(var(--tblr-vk-rgb), .8);
+  --tblr-btn-disabled-bg: var(--tblr-vk);
+  --tblr-btn-disabled-color: var(--tblr-vk-fg);
+  --tblr-btn-box-shadow: var(--tblr-box-shadow-input);
+}
+
+.btn-outline-vk {
+  --tblr-btn-color: var(--tblr-vk);
+  --tblr-btn-bg: transparent;
+  --tblr-btn-border-color: var(--tblr-vk);
+  --tblr-btn-hover-color: var(--tblr-vk-fg);
+  --tblr-btn-hover-border-color: transparent;
+  --tblr-btn-hover-bg: var(--tblr-vk);
+  --tblr-btn-active-color: var(--tblr-vk-fg);
+  --tblr-btn-active-bg: var(--tblr-vk);
+  --tblr-btn-disabled-color: var(--tblr-vk);
+  --tblr-btn-disabled-border-color: var(--tblr-vk);
+}
+
+.btn-rss {
+  --tblr-btn-border-color: transparent;
+  --tblr-btn-hover-border-color: transparent;
+  --tblr-btn-active-border-color: transparent;
+  --tblr-btn-color: var(--tblr-rss-fg);
+  --tblr-btn-bg: var(--tblr-rss);
+  --tblr-btn-hover-color: var(--tblr-rss-fg);
+  --tblr-btn-hover-bg: rgba(var(--tblr-rss-rgb), .8);
+  --tblr-btn-active-color: var(--tblr-rss-fg);
+  --tblr-btn-active-bg: rgba(var(--tblr-rss-rgb), .8);
+  --tblr-btn-disabled-bg: var(--tblr-rss);
+  --tblr-btn-disabled-color: var(--tblr-rss-fg);
+  --tblr-btn-box-shadow: var(--tblr-box-shadow-input);
+}
+
+.btn-outline-rss {
+  --tblr-btn-color: var(--tblr-rss);
+  --tblr-btn-bg: transparent;
+  --tblr-btn-border-color: var(--tblr-rss);
+  --tblr-btn-hover-color: var(--tblr-rss-fg);
+  --tblr-btn-hover-border-color: transparent;
+  --tblr-btn-hover-bg: var(--tblr-rss);
+  --tblr-btn-active-color: var(--tblr-rss-fg);
+  --tblr-btn-active-bg: var(--tblr-rss);
+  --tblr-btn-disabled-color: var(--tblr-rss);
+  --tblr-btn-disabled-border-color: var(--tblr-rss);
+}
+
+.btn-flickr {
+  --tblr-btn-border-color: transparent;
+  --tblr-btn-hover-border-color: transparent;
+  --tblr-btn-active-border-color: transparent;
+  --tblr-btn-color: var(--tblr-flickr-fg);
+  --tblr-btn-bg: var(--tblr-flickr);
+  --tblr-btn-hover-color: var(--tblr-flickr-fg);
+  --tblr-btn-hover-bg: rgba(var(--tblr-flickr-rgb), .8);
+  --tblr-btn-active-color: var(--tblr-flickr-fg);
+  --tblr-btn-active-bg: rgba(var(--tblr-flickr-rgb), .8);
+  --tblr-btn-disabled-bg: var(--tblr-flickr);
+  --tblr-btn-disabled-color: var(--tblr-flickr-fg);
+  --tblr-btn-box-shadow: var(--tblr-box-shadow-input);
+}
+
+.btn-outline-flickr {
+  --tblr-btn-color: var(--tblr-flickr);
+  --tblr-btn-bg: transparent;
+  --tblr-btn-border-color: var(--tblr-flickr);
+  --tblr-btn-hover-color: var(--tblr-flickr-fg);
+  --tblr-btn-hover-border-color: transparent;
+  --tblr-btn-hover-bg: var(--tblr-flickr);
+  --tblr-btn-active-color: var(--tblr-flickr-fg);
+  --tblr-btn-active-bg: var(--tblr-flickr);
+  --tblr-btn-disabled-color: var(--tblr-flickr);
+  --tblr-btn-disabled-border-color: var(--tblr-flickr);
+}
+
+.btn-bitbucket {
+  --tblr-btn-border-color: transparent;
+  --tblr-btn-hover-border-color: transparent;
+  --tblr-btn-active-border-color: transparent;
+  --tblr-btn-color: var(--tblr-bitbucket-fg);
+  --tblr-btn-bg: var(--tblr-bitbucket);
+  --tblr-btn-hover-color: var(--tblr-bitbucket-fg);
+  --tblr-btn-hover-bg: rgba(var(--tblr-bitbucket-rgb), .8);
+  --tblr-btn-active-color: var(--tblr-bitbucket-fg);
+  --tblr-btn-active-bg: rgba(var(--tblr-bitbucket-rgb), .8);
+  --tblr-btn-disabled-bg: var(--tblr-bitbucket);
+  --tblr-btn-disabled-color: var(--tblr-bitbucket-fg);
+  --tblr-btn-box-shadow: var(--tblr-box-shadow-input);
+}
+
+.btn-outline-bitbucket {
+  --tblr-btn-color: var(--tblr-bitbucket);
+  --tblr-btn-bg: transparent;
+  --tblr-btn-border-color: var(--tblr-bitbucket);
+  --tblr-btn-hover-color: var(--tblr-bitbucket-fg);
+  --tblr-btn-hover-border-color: transparent;
+  --tblr-btn-hover-bg: var(--tblr-bitbucket);
+  --tblr-btn-active-color: var(--tblr-bitbucket-fg);
+  --tblr-btn-active-bg: var(--tblr-bitbucket);
+  --tblr-btn-disabled-color: var(--tblr-bitbucket);
+  --tblr-btn-disabled-border-color: var(--tblr-bitbucket);
+}
+
+.btn-tabler {
+  --tblr-btn-border-color: transparent;
+  --tblr-btn-hover-border-color: transparent;
+  --tblr-btn-active-border-color: transparent;
+  --tblr-btn-color: var(--tblr-tabler-fg);
+  --tblr-btn-bg: var(--tblr-tabler);
+  --tblr-btn-hover-color: var(--tblr-tabler-fg);
+  --tblr-btn-hover-bg: rgba(var(--tblr-tabler-rgb), .8);
+  --tblr-btn-active-color: var(--tblr-tabler-fg);
+  --tblr-btn-active-bg: rgba(var(--tblr-tabler-rgb), .8);
+  --tblr-btn-disabled-bg: var(--tblr-tabler);
+  --tblr-btn-disabled-color: var(--tblr-tabler-fg);
+  --tblr-btn-box-shadow: var(--tblr-box-shadow-input);
+}
+
+.btn-outline-tabler {
+  --tblr-btn-color: var(--tblr-tabler);
+  --tblr-btn-bg: transparent;
+  --tblr-btn-border-color: var(--tblr-tabler);
+  --tblr-btn-hover-color: var(--tblr-tabler-fg);
+  --tblr-btn-hover-border-color: transparent;
+  --tblr-btn-hover-bg: var(--tblr-tabler);
+  --tblr-btn-active-color: var(--tblr-tabler-fg);
+  --tblr-btn-active-bg: var(--tblr-tabler);
+  --tblr-btn-disabled-color: var(--tblr-tabler);
+  --tblr-btn-disabled-border-color: var(--tblr-tabler);
+}
+
+.btn-ghost-primary {
+  --tblr-btn-color: var(--tblr-primary);
+  --tblr-btn-bg: transparent;
+  --tblr-btn-border-color: transparent;
+  --tblr-btn-hover-color: var(--tblr-primary-fg);
+  --tblr-btn-hover-bg: var(--tblr-primary);
+  --tblr-btn-hover-border-color: var(--tblr-primary);
+  --tblr-btn-active-color: var(--tblr-primary-fg);
+  --tblr-btn-active-bg: var(--tblr-primary);
+  --tblr-btn-active-border-color: transparent;
+  --tblr-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
+  --tblr-btn-disabled-color: var(--tblr-primary);
+  --tblr-btn-disabled-bg: transparent;
+  --tblr-btn-disabled-border-color: transparent;
+  --tblr-gradient: none;
+  --tblr-btn-box-shadow: none;
+}
+
+.btn-ghost-secondary {
+  --tblr-btn-color: var(--tblr-secondary);
+  --tblr-btn-bg: transparent;
+  --tblr-btn-border-color: transparent;
+  --tblr-btn-hover-color: var(--tblr-secondary-fg);
+  --tblr-btn-hover-bg: var(--tblr-secondary);
+  --tblr-btn-hover-border-color: var(--tblr-secondary);
+  --tblr-btn-active-color: var(--tblr-secondary-fg);
+  --tblr-btn-active-bg: var(--tblr-secondary);
+  --tblr-btn-active-border-color: transparent;
+  --tblr-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
+  --tblr-btn-disabled-color: var(--tblr-secondary);
+  --tblr-btn-disabled-bg: transparent;
+  --tblr-btn-disabled-border-color: transparent;
+  --tblr-gradient: none;
+  --tblr-btn-box-shadow: none;
+}
+
+.btn-ghost-success {
+  --tblr-btn-color: var(--tblr-success);
+  --tblr-btn-bg: transparent;
+  --tblr-btn-border-color: transparent;
+  --tblr-btn-hover-color: var(--tblr-success-fg);
+  --tblr-btn-hover-bg: var(--tblr-success);
+  --tblr-btn-hover-border-color: var(--tblr-success);
+  --tblr-btn-active-color: var(--tblr-success-fg);
+  --tblr-btn-active-bg: var(--tblr-success);
+  --tblr-btn-active-border-color: transparent;
+  --tblr-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
+  --tblr-btn-disabled-color: var(--tblr-success);
+  --tblr-btn-disabled-bg: transparent;
+  --tblr-btn-disabled-border-color: transparent;
+  --tblr-gradient: none;
+  --tblr-btn-box-shadow: none;
+}
+
+.btn-ghost-info {
+  --tblr-btn-color: var(--tblr-info);
+  --tblr-btn-bg: transparent;
+  --tblr-btn-border-color: transparent;
+  --tblr-btn-hover-color: var(--tblr-info-fg);
+  --tblr-btn-hover-bg: var(--tblr-info);
+  --tblr-btn-hover-border-color: var(--tblr-info);
+  --tblr-btn-active-color: var(--tblr-info-fg);
+  --tblr-btn-active-bg: var(--tblr-info);
+  --tblr-btn-active-border-color: transparent;
+  --tblr-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
+  --tblr-btn-disabled-color: var(--tblr-info);
+  --tblr-btn-disabled-bg: transparent;
+  --tblr-btn-disabled-border-color: transparent;
+  --tblr-gradient: none;
+  --tblr-btn-box-shadow: none;
+}
+
+.btn-ghost-warning {
+  --tblr-btn-color: var(--tblr-warning);
+  --tblr-btn-bg: transparent;
+  --tblr-btn-border-color: transparent;
+  --tblr-btn-hover-color: var(--tblr-warning-fg);
+  --tblr-btn-hover-bg: var(--tblr-warning);
+  --tblr-btn-hover-border-color: var(--tblr-warning);
+  --tblr-btn-active-color: var(--tblr-warning-fg);
+  --tblr-btn-active-bg: var(--tblr-warning);
+  --tblr-btn-active-border-color: transparent;
+  --tblr-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
+  --tblr-btn-disabled-color: var(--tblr-warning);
+  --tblr-btn-disabled-bg: transparent;
+  --tblr-btn-disabled-border-color: transparent;
+  --tblr-gradient: none;
+  --tblr-btn-box-shadow: none;
+}
+
+.btn-ghost-danger {
+  --tblr-btn-color: var(--tblr-danger);
+  --tblr-btn-bg: transparent;
+  --tblr-btn-border-color: transparent;
+  --tblr-btn-hover-color: var(--tblr-danger-fg);
+  --tblr-btn-hover-bg: var(--tblr-danger);
+  --tblr-btn-hover-border-color: var(--tblr-danger);
+  --tblr-btn-active-color: var(--tblr-danger-fg);
+  --tblr-btn-active-bg: var(--tblr-danger);
+  --tblr-btn-active-border-color: transparent;
+  --tblr-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
+  --tblr-btn-disabled-color: var(--tblr-danger);
+  --tblr-btn-disabled-bg: transparent;
+  --tblr-btn-disabled-border-color: transparent;
+  --tblr-gradient: none;
+  --tblr-btn-box-shadow: none;
+}
+
+.btn-ghost-light {
+  --tblr-btn-color: var(--tblr-light);
+  --tblr-btn-bg: transparent;
+  --tblr-btn-border-color: transparent;
+  --tblr-btn-hover-color: var(--tblr-light-fg);
+  --tblr-btn-hover-bg: var(--tblr-light);
+  --tblr-btn-hover-border-color: var(--tblr-light);
+  --tblr-btn-active-color: var(--tblr-light-fg);
+  --tblr-btn-active-bg: var(--tblr-light);
+  --tblr-btn-active-border-color: transparent;
+  --tblr-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
+  --tblr-btn-disabled-color: var(--tblr-light);
+  --tblr-btn-disabled-bg: transparent;
+  --tblr-btn-disabled-border-color: transparent;
+  --tblr-gradient: none;
+  --tblr-btn-box-shadow: none;
+}
+
+.btn-ghost-dark {
+  --tblr-btn-color: var(--tblr-dark);
+  --tblr-btn-bg: transparent;
+  --tblr-btn-border-color: transparent;
+  --tblr-btn-hover-color: var(--tblr-dark-fg);
+  --tblr-btn-hover-bg: var(--tblr-dark);
+  --tblr-btn-hover-border-color: var(--tblr-dark);
+  --tblr-btn-active-color: var(--tblr-dark-fg);
+  --tblr-btn-active-bg: var(--tblr-dark);
+  --tblr-btn-active-border-color: transparent;
+  --tblr-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
+  --tblr-btn-disabled-color: var(--tblr-dark);
+  --tblr-btn-disabled-bg: transparent;
+  --tblr-btn-disabled-border-color: transparent;
+  --tblr-gradient: none;
+  --tblr-btn-box-shadow: none;
+}
+
+.btn-ghost-muted {
+  --tblr-btn-color: var(--tblr-muted);
+  --tblr-btn-bg: transparent;
+  --tblr-btn-border-color: transparent;
+  --tblr-btn-hover-color: var(--tblr-muted-fg);
+  --tblr-btn-hover-bg: var(--tblr-muted);
+  --tblr-btn-hover-border-color: var(--tblr-muted);
+  --tblr-btn-active-color: var(--tblr-muted-fg);
+  --tblr-btn-active-bg: var(--tblr-muted);
+  --tblr-btn-active-border-color: transparent;
+  --tblr-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
+  --tblr-btn-disabled-color: var(--tblr-muted);
+  --tblr-btn-disabled-bg: transparent;
+  --tblr-btn-disabled-border-color: transparent;
+  --tblr-gradient: none;
+  --tblr-btn-box-shadow: none;
+}
+
+.btn-ghost-blue {
+  --tblr-btn-color: var(--tblr-blue);
+  --tblr-btn-bg: transparent;
+  --tblr-btn-border-color: transparent;
+  --tblr-btn-hover-color: var(--tblr-blue-fg);
+  --tblr-btn-hover-bg: var(--tblr-blue);
+  --tblr-btn-hover-border-color: var(--tblr-blue);
+  --tblr-btn-active-color: var(--tblr-blue-fg);
+  --tblr-btn-active-bg: var(--tblr-blue);
+  --tblr-btn-active-border-color: transparent;
+  --tblr-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
+  --tblr-btn-disabled-color: var(--tblr-blue);
+  --tblr-btn-disabled-bg: transparent;
+  --tblr-btn-disabled-border-color: transparent;
+  --tblr-gradient: none;
+  --tblr-btn-box-shadow: none;
+}
+
+.btn-ghost-azure {
+  --tblr-btn-color: var(--tblr-azure);
+  --tblr-btn-bg: transparent;
+  --tblr-btn-border-color: transparent;
+  --tblr-btn-hover-color: var(--tblr-azure-fg);
+  --tblr-btn-hover-bg: var(--tblr-azure);
+  --tblr-btn-hover-border-color: var(--tblr-azure);
+  --tblr-btn-active-color: var(--tblr-azure-fg);
+  --tblr-btn-active-bg: var(--tblr-azure);
+  --tblr-btn-active-border-color: transparent;
+  --tblr-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
+  --tblr-btn-disabled-color: var(--tblr-azure);
+  --tblr-btn-disabled-bg: transparent;
+  --tblr-btn-disabled-border-color: transparent;
+  --tblr-gradient: none;
+  --tblr-btn-box-shadow: none;
+}
+
+.btn-ghost-indigo {
+  --tblr-btn-color: var(--tblr-indigo);
+  --tblr-btn-bg: transparent;
+  --tblr-btn-border-color: transparent;
+  --tblr-btn-hover-color: var(--tblr-indigo-fg);
+  --tblr-btn-hover-bg: var(--tblr-indigo);
+  --tblr-btn-hover-border-color: var(--tblr-indigo);
+  --tblr-btn-active-color: var(--tblr-indigo-fg);
+  --tblr-btn-active-bg: var(--tblr-indigo);
+  --tblr-btn-active-border-color: transparent;
+  --tblr-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
+  --tblr-btn-disabled-color: var(--tblr-indigo);
+  --tblr-btn-disabled-bg: transparent;
+  --tblr-btn-disabled-border-color: transparent;
+  --tblr-gradient: none;
+  --tblr-btn-box-shadow: none;
+}
+
+.btn-ghost-purple {
+  --tblr-btn-color: var(--tblr-purple);
+  --tblr-btn-bg: transparent;
+  --tblr-btn-border-color: transparent;
+  --tblr-btn-hover-color: var(--tblr-purple-fg);
+  --tblr-btn-hover-bg: var(--tblr-purple);
+  --tblr-btn-hover-border-color: var(--tblr-purple);
+  --tblr-btn-active-color: var(--tblr-purple-fg);
+  --tblr-btn-active-bg: var(--tblr-purple);
+  --tblr-btn-active-border-color: transparent;
+  --tblr-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
+  --tblr-btn-disabled-color: var(--tblr-purple);
+  --tblr-btn-disabled-bg: transparent;
+  --tblr-btn-disabled-border-color: transparent;
+  --tblr-gradient: none;
+  --tblr-btn-box-shadow: none;
+}
+
+.btn-ghost-pink {
+  --tblr-btn-color: var(--tblr-pink);
+  --tblr-btn-bg: transparent;
+  --tblr-btn-border-color: transparent;
+  --tblr-btn-hover-color: var(--tblr-pink-fg);
+  --tblr-btn-hover-bg: var(--tblr-pink);
+  --tblr-btn-hover-border-color: var(--tblr-pink);
+  --tblr-btn-active-color: var(--tblr-pink-fg);
+  --tblr-btn-active-bg: var(--tblr-pink);
+  --tblr-btn-active-border-color: transparent;
+  --tblr-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
+  --tblr-btn-disabled-color: var(--tblr-pink);
+  --tblr-btn-disabled-bg: transparent;
+  --tblr-btn-disabled-border-color: transparent;
+  --tblr-gradient: none;
+  --tblr-btn-box-shadow: none;
+}
+
+.btn-ghost-red {
+  --tblr-btn-color: var(--tblr-red);
+  --tblr-btn-bg: transparent;
+  --tblr-btn-border-color: transparent;
+  --tblr-btn-hover-color: var(--tblr-red-fg);
+  --tblr-btn-hover-bg: var(--tblr-red);
+  --tblr-btn-hover-border-color: var(--tblr-red);
+  --tblr-btn-active-color: var(--tblr-red-fg);
+  --tblr-btn-active-bg: var(--tblr-red);
+  --tblr-btn-active-border-color: transparent;
+  --tblr-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
+  --tblr-btn-disabled-color: var(--tblr-red);
+  --tblr-btn-disabled-bg: transparent;
+  --tblr-btn-disabled-border-color: transparent;
+  --tblr-gradient: none;
+  --tblr-btn-box-shadow: none;
+}
+
+.btn-ghost-orange {
+  --tblr-btn-color: var(--tblr-orange);
+  --tblr-btn-bg: transparent;
+  --tblr-btn-border-color: transparent;
+  --tblr-btn-hover-color: var(--tblr-orange-fg);
+  --tblr-btn-hover-bg: var(--tblr-orange);
+  --tblr-btn-hover-border-color: var(--tblr-orange);
+  --tblr-btn-active-color: var(--tblr-orange-fg);
+  --tblr-btn-active-bg: var(--tblr-orange);
+  --tblr-btn-active-border-color: transparent;
+  --tblr-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
+  --tblr-btn-disabled-color: var(--tblr-orange);
+  --tblr-btn-disabled-bg: transparent;
+  --tblr-btn-disabled-border-color: transparent;
+  --tblr-gradient: none;
+  --tblr-btn-box-shadow: none;
+}
+
+.btn-ghost-yellow {
+  --tblr-btn-color: var(--tblr-yellow);
+  --tblr-btn-bg: transparent;
+  --tblr-btn-border-color: transparent;
+  --tblr-btn-hover-color: var(--tblr-yellow-fg);
+  --tblr-btn-hover-bg: var(--tblr-yellow);
+  --tblr-btn-hover-border-color: var(--tblr-yellow);
+  --tblr-btn-active-color: var(--tblr-yellow-fg);
+  --tblr-btn-active-bg: var(--tblr-yellow);
+  --tblr-btn-active-border-color: transparent;
+  --tblr-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
+  --tblr-btn-disabled-color: var(--tblr-yellow);
+  --tblr-btn-disabled-bg: transparent;
+  --tblr-btn-disabled-border-color: transparent;
+  --tblr-gradient: none;
+  --tblr-btn-box-shadow: none;
+}
+
+.btn-ghost-lime {
+  --tblr-btn-color: var(--tblr-lime);
+  --tblr-btn-bg: transparent;
+  --tblr-btn-border-color: transparent;
+  --tblr-btn-hover-color: var(--tblr-lime-fg);
+  --tblr-btn-hover-bg: var(--tblr-lime);
+  --tblr-btn-hover-border-color: var(--tblr-lime);
+  --tblr-btn-active-color: var(--tblr-lime-fg);
+  --tblr-btn-active-bg: var(--tblr-lime);
+  --tblr-btn-active-border-color: transparent;
+  --tblr-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
+  --tblr-btn-disabled-color: var(--tblr-lime);
+  --tblr-btn-disabled-bg: transparent;
+  --tblr-btn-disabled-border-color: transparent;
+  --tblr-gradient: none;
+  --tblr-btn-box-shadow: none;
+}
+
+.btn-ghost-green {
+  --tblr-btn-color: var(--tblr-green);
+  --tblr-btn-bg: transparent;
+  --tblr-btn-border-color: transparent;
+  --tblr-btn-hover-color: var(--tblr-green-fg);
+  --tblr-btn-hover-bg: var(--tblr-green);
+  --tblr-btn-hover-border-color: var(--tblr-green);
+  --tblr-btn-active-color: var(--tblr-green-fg);
+  --tblr-btn-active-bg: var(--tblr-green);
+  --tblr-btn-active-border-color: transparent;
+  --tblr-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
+  --tblr-btn-disabled-color: var(--tblr-green);
+  --tblr-btn-disabled-bg: transparent;
+  --tblr-btn-disabled-border-color: transparent;
+  --tblr-gradient: none;
+  --tblr-btn-box-shadow: none;
+}
+
+.btn-ghost-teal {
+  --tblr-btn-color: var(--tblr-teal);
+  --tblr-btn-bg: transparent;
+  --tblr-btn-border-color: transparent;
+  --tblr-btn-hover-color: var(--tblr-teal-fg);
+  --tblr-btn-hover-bg: var(--tblr-teal);
+  --tblr-btn-hover-border-color: var(--tblr-teal);
+  --tblr-btn-active-color: var(--tblr-teal-fg);
+  --tblr-btn-active-bg: var(--tblr-teal);
+  --tblr-btn-active-border-color: transparent;
+  --tblr-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
+  --tblr-btn-disabled-color: var(--tblr-teal);
+  --tblr-btn-disabled-bg: transparent;
+  --tblr-btn-disabled-border-color: transparent;
+  --tblr-gradient: none;
+  --tblr-btn-box-shadow: none;
+}
+
+.btn-ghost-cyan {
+  --tblr-btn-color: var(--tblr-cyan);
+  --tblr-btn-bg: transparent;
+  --tblr-btn-border-color: transparent;
+  --tblr-btn-hover-color: var(--tblr-cyan-fg);
+  --tblr-btn-hover-bg: var(--tblr-cyan);
+  --tblr-btn-hover-border-color: var(--tblr-cyan);
+  --tblr-btn-active-color: var(--tblr-cyan-fg);
+  --tblr-btn-active-bg: var(--tblr-cyan);
+  --tblr-btn-active-border-color: transparent;
+  --tblr-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
+  --tblr-btn-disabled-color: var(--tblr-cyan);
+  --tblr-btn-disabled-bg: transparent;
+  --tblr-btn-disabled-border-color: transparent;
+  --tblr-gradient: none;
+  --tblr-btn-box-shadow: none;
+}
+
+.btn-ghost-facebook {
+  --tblr-btn-color: var(--tblr-facebook);
+  --tblr-btn-bg: transparent;
+  --tblr-btn-border-color: transparent;
+  --tblr-btn-hover-color: var(--tblr-facebook-fg);
+  --tblr-btn-hover-bg: var(--tblr-facebook);
+  --tblr-btn-hover-border-color: var(--tblr-facebook);
+  --tblr-btn-active-color: var(--tblr-facebook-fg);
+  --tblr-btn-active-bg: var(--tblr-facebook);
+  --tblr-btn-active-border-color: transparent;
+  --tblr-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
+  --tblr-btn-disabled-color: var(--tblr-facebook);
+  --tblr-btn-disabled-bg: transparent;
+  --tblr-btn-disabled-border-color: transparent;
+  --tblr-gradient: none;
+  --tblr-btn-box-shadow: none;
+}
+
+.btn-ghost-twitter {
+  --tblr-btn-color: var(--tblr-twitter);
+  --tblr-btn-bg: transparent;
+  --tblr-btn-border-color: transparent;
+  --tblr-btn-hover-color: var(--tblr-twitter-fg);
+  --tblr-btn-hover-bg: var(--tblr-twitter);
+  --tblr-btn-hover-border-color: var(--tblr-twitter);
+  --tblr-btn-active-color: var(--tblr-twitter-fg);
+  --tblr-btn-active-bg: var(--tblr-twitter);
+  --tblr-btn-active-border-color: transparent;
+  --tblr-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
+  --tblr-btn-disabled-color: var(--tblr-twitter);
+  --tblr-btn-disabled-bg: transparent;
+  --tblr-btn-disabled-border-color: transparent;
+  --tblr-gradient: none;
+  --tblr-btn-box-shadow: none;
+}
+
+.btn-ghost-linkedin {
+  --tblr-btn-color: var(--tblr-linkedin);
+  --tblr-btn-bg: transparent;
+  --tblr-btn-border-color: transparent;
+  --tblr-btn-hover-color: var(--tblr-linkedin-fg);
+  --tblr-btn-hover-bg: var(--tblr-linkedin);
+  --tblr-btn-hover-border-color: var(--tblr-linkedin);
+  --tblr-btn-active-color: var(--tblr-linkedin-fg);
+  --tblr-btn-active-bg: var(--tblr-linkedin);
+  --tblr-btn-active-border-color: transparent;
+  --tblr-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
+  --tblr-btn-disabled-color: var(--tblr-linkedin);
+  --tblr-btn-disabled-bg: transparent;
+  --tblr-btn-disabled-border-color: transparent;
+  --tblr-gradient: none;
+  --tblr-btn-box-shadow: none;
+}
+
+.btn-ghost-google {
+  --tblr-btn-color: var(--tblr-google);
+  --tblr-btn-bg: transparent;
+  --tblr-btn-border-color: transparent;
+  --tblr-btn-hover-color: var(--tblr-google-fg);
+  --tblr-btn-hover-bg: var(--tblr-google);
+  --tblr-btn-hover-border-color: var(--tblr-google);
+  --tblr-btn-active-color: var(--tblr-google-fg);
+  --tblr-btn-active-bg: var(--tblr-google);
+  --tblr-btn-active-border-color: transparent;
+  --tblr-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
+  --tblr-btn-disabled-color: var(--tblr-google);
+  --tblr-btn-disabled-bg: transparent;
+  --tblr-btn-disabled-border-color: transparent;
+  --tblr-gradient: none;
+  --tblr-btn-box-shadow: none;
+}
+
+.btn-ghost-youtube {
+  --tblr-btn-color: var(--tblr-youtube);
+  --tblr-btn-bg: transparent;
+  --tblr-btn-border-color: transparent;
+  --tblr-btn-hover-color: var(--tblr-youtube-fg);
+  --tblr-btn-hover-bg: var(--tblr-youtube);
+  --tblr-btn-hover-border-color: var(--tblr-youtube);
+  --tblr-btn-active-color: var(--tblr-youtube-fg);
+  --tblr-btn-active-bg: var(--tblr-youtube);
+  --tblr-btn-active-border-color: transparent;
+  --tblr-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
+  --tblr-btn-disabled-color: var(--tblr-youtube);
+  --tblr-btn-disabled-bg: transparent;
+  --tblr-btn-disabled-border-color: transparent;
+  --tblr-gradient: none;
+  --tblr-btn-box-shadow: none;
+}
+
+.btn-ghost-vimeo {
+  --tblr-btn-color: var(--tblr-vimeo);
+  --tblr-btn-bg: transparent;
+  --tblr-btn-border-color: transparent;
+  --tblr-btn-hover-color: var(--tblr-vimeo-fg);
+  --tblr-btn-hover-bg: var(--tblr-vimeo);
+  --tblr-btn-hover-border-color: var(--tblr-vimeo);
+  --tblr-btn-active-color: var(--tblr-vimeo-fg);
+  --tblr-btn-active-bg: var(--tblr-vimeo);
+  --tblr-btn-active-border-color: transparent;
+  --tblr-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
+  --tblr-btn-disabled-color: var(--tblr-vimeo);
+  --tblr-btn-disabled-bg: transparent;
+  --tblr-btn-disabled-border-color: transparent;
+  --tblr-gradient: none;
+  --tblr-btn-box-shadow: none;
+}
+
+.btn-ghost-dribbble {
+  --tblr-btn-color: var(--tblr-dribbble);
+  --tblr-btn-bg: transparent;
+  --tblr-btn-border-color: transparent;
+  --tblr-btn-hover-color: var(--tblr-dribbble-fg);
+  --tblr-btn-hover-bg: var(--tblr-dribbble);
+  --tblr-btn-hover-border-color: var(--tblr-dribbble);
+  --tblr-btn-active-color: var(--tblr-dribbble-fg);
+  --tblr-btn-active-bg: var(--tblr-dribbble);
+  --tblr-btn-active-border-color: transparent;
+  --tblr-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
+  --tblr-btn-disabled-color: var(--tblr-dribbble);
+  --tblr-btn-disabled-bg: transparent;
+  --tblr-btn-disabled-border-color: transparent;
+  --tblr-gradient: none;
+  --tblr-btn-box-shadow: none;
+}
+
+.btn-ghost-github {
+  --tblr-btn-color: var(--tblr-github);
+  --tblr-btn-bg: transparent;
+  --tblr-btn-border-color: transparent;
+  --tblr-btn-hover-color: var(--tblr-github-fg);
+  --tblr-btn-hover-bg: var(--tblr-github);
+  --tblr-btn-hover-border-color: var(--tblr-github);
+  --tblr-btn-active-color: var(--tblr-github-fg);
+  --tblr-btn-active-bg: var(--tblr-github);
+  --tblr-btn-active-border-color: transparent;
+  --tblr-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
+  --tblr-btn-disabled-color: var(--tblr-github);
+  --tblr-btn-disabled-bg: transparent;
+  --tblr-btn-disabled-border-color: transparent;
+  --tblr-gradient: none;
+  --tblr-btn-box-shadow: none;
+}
+
+.btn-ghost-instagram {
+  --tblr-btn-color: var(--tblr-instagram);
+  --tblr-btn-bg: transparent;
+  --tblr-btn-border-color: transparent;
+  --tblr-btn-hover-color: var(--tblr-instagram-fg);
+  --tblr-btn-hover-bg: var(--tblr-instagram);
+  --tblr-btn-hover-border-color: var(--tblr-instagram);
+  --tblr-btn-active-color: var(--tblr-instagram-fg);
+  --tblr-btn-active-bg: var(--tblr-instagram);
+  --tblr-btn-active-border-color: transparent;
+  --tblr-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
+  --tblr-btn-disabled-color: var(--tblr-instagram);
+  --tblr-btn-disabled-bg: transparent;
+  --tblr-btn-disabled-border-color: transparent;
+  --tblr-gradient: none;
+  --tblr-btn-box-shadow: none;
+}
+
+.btn-ghost-pinterest {
+  --tblr-btn-color: var(--tblr-pinterest);
+  --tblr-btn-bg: transparent;
+  --tblr-btn-border-color: transparent;
+  --tblr-btn-hover-color: var(--tblr-pinterest-fg);
+  --tblr-btn-hover-bg: var(--tblr-pinterest);
+  --tblr-btn-hover-border-color: var(--tblr-pinterest);
+  --tblr-btn-active-color: var(--tblr-pinterest-fg);
+  --tblr-btn-active-bg: var(--tblr-pinterest);
+  --tblr-btn-active-border-color: transparent;
+  --tblr-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
+  --tblr-btn-disabled-color: var(--tblr-pinterest);
+  --tblr-btn-disabled-bg: transparent;
+  --tblr-btn-disabled-border-color: transparent;
+  --tblr-gradient: none;
+  --tblr-btn-box-shadow: none;
+}
+
+.btn-ghost-vk {
+  --tblr-btn-color: var(--tblr-vk);
+  --tblr-btn-bg: transparent;
+  --tblr-btn-border-color: transparent;
+  --tblr-btn-hover-color: var(--tblr-vk-fg);
+  --tblr-btn-hover-bg: var(--tblr-vk);
+  --tblr-btn-hover-border-color: var(--tblr-vk);
+  --tblr-btn-active-color: var(--tblr-vk-fg);
+  --tblr-btn-active-bg: var(--tblr-vk);
+  --tblr-btn-active-border-color: transparent;
+  --tblr-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
+  --tblr-btn-disabled-color: var(--tblr-vk);
+  --tblr-btn-disabled-bg: transparent;
+  --tblr-btn-disabled-border-color: transparent;
+  --tblr-gradient: none;
+  --tblr-btn-box-shadow: none;
+}
+
+.btn-ghost-rss {
+  --tblr-btn-color: var(--tblr-rss);
+  --tblr-btn-bg: transparent;
+  --tblr-btn-border-color: transparent;
+  --tblr-btn-hover-color: var(--tblr-rss-fg);
+  --tblr-btn-hover-bg: var(--tblr-rss);
+  --tblr-btn-hover-border-color: var(--tblr-rss);
+  --tblr-btn-active-color: var(--tblr-rss-fg);
+  --tblr-btn-active-bg: var(--tblr-rss);
+  --tblr-btn-active-border-color: transparent;
+  --tblr-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
+  --tblr-btn-disabled-color: var(--tblr-rss);
+  --tblr-btn-disabled-bg: transparent;
+  --tblr-btn-disabled-border-color: transparent;
+  --tblr-gradient: none;
+  --tblr-btn-box-shadow: none;
+}
+
+.btn-ghost-flickr {
+  --tblr-btn-color: var(--tblr-flickr);
+  --tblr-btn-bg: transparent;
+  --tblr-btn-border-color: transparent;
+  --tblr-btn-hover-color: var(--tblr-flickr-fg);
+  --tblr-btn-hover-bg: var(--tblr-flickr);
+  --tblr-btn-hover-border-color: var(--tblr-flickr);
+  --tblr-btn-active-color: var(--tblr-flickr-fg);
+  --tblr-btn-active-bg: var(--tblr-flickr);
+  --tblr-btn-active-border-color: transparent;
+  --tblr-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
+  --tblr-btn-disabled-color: var(--tblr-flickr);
+  --tblr-btn-disabled-bg: transparent;
+  --tblr-btn-disabled-border-color: transparent;
+  --tblr-gradient: none;
+  --tblr-btn-box-shadow: none;
+}
+
+.btn-ghost-bitbucket {
+  --tblr-btn-color: var(--tblr-bitbucket);
+  --tblr-btn-bg: transparent;
+  --tblr-btn-border-color: transparent;
+  --tblr-btn-hover-color: var(--tblr-bitbucket-fg);
+  --tblr-btn-hover-bg: var(--tblr-bitbucket);
+  --tblr-btn-hover-border-color: var(--tblr-bitbucket);
+  --tblr-btn-active-color: var(--tblr-bitbucket-fg);
+  --tblr-btn-active-bg: var(--tblr-bitbucket);
+  --tblr-btn-active-border-color: transparent;
+  --tblr-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
+  --tblr-btn-disabled-color: var(--tblr-bitbucket);
+  --tblr-btn-disabled-bg: transparent;
+  --tblr-btn-disabled-border-color: transparent;
+  --tblr-gradient: none;
+  --tblr-btn-box-shadow: none;
+}
+
+.btn-ghost-tabler {
+  --tblr-btn-color: var(--tblr-tabler);
+  --tblr-btn-bg: transparent;
+  --tblr-btn-border-color: transparent;
+  --tblr-btn-hover-color: var(--tblr-tabler-fg);
+  --tblr-btn-hover-bg: var(--tblr-tabler);
+  --tblr-btn-hover-border-color: var(--tblr-tabler);
+  --tblr-btn-active-color: var(--tblr-tabler-fg);
+  --tblr-btn-active-bg: var(--tblr-tabler);
+  --tblr-btn-active-border-color: transparent;
+  --tblr-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
+  --tblr-btn-disabled-color: var(--tblr-tabler);
+  --tblr-btn-disabled-bg: transparent;
+  --tblr-btn-disabled-border-color: transparent;
+  --tblr-gradient: none;
+  --tblr-btn-box-shadow: none;
+}
+
+.btn-sm, .btn-group-sm > .btn {
+  --tblr-btn-line-height: 1.5;
+  --tblr-btn-icon-size: .75rem;
+}
+
+.btn-lg, .btn-group-lg > .btn {
+  --tblr-btn-line-height: 1.5;
+  --tblr-btn-icon-size: 2rem;
+}
+
+.btn-pill {
+  padding-left: 1.5em;
+  padding-right: 1.5em;
+  border-radius: 10rem;
+}
+.btn-pill[class*=btn-icon] {
+  padding: 0.375rem 15px;
+}
+
+.btn-square {
+  border-radius: 0;
+}
+
+.btn-icon {
+  min-width: calc(var(--tblr-btn-line-height) * var(--tblr-btn-font-size) + var(--tblr-btn-padding-y) * 2 + var(--tblr-btn-border-width) * 2);
+  min-height: calc(var(--tblr-btn-line-height) * var(--tblr-btn-font-size) + var(--tblr-btn-padding-y) * 2 + var(--tblr-btn-border-width) * 2);
+  padding-right: 0;
+  padding-left: 0;
+}
+.btn-icon .icon {
+  margin: calc(-1 * var(--tblr-btn-padding-x));
+}
+
+.btn-list {
+  --tblr-list-gap: 0.5rem;
+  display: flex;
+  flex-wrap: wrap;
+  gap: var(--tblr-list-gap);
+}
+
+.btn-floating {
+  position: fixed;
+  z-index: 1030;
+  bottom: 1.5rem;
+  left: 1.5rem;
+  border-radius: 100rem;
+}
+
+.btn-loading {
+  position: relative;
+  color: transparent !important;
+  text-shadow: none !important;
+  pointer-events: none;
+}
+.btn-loading > * {
+  opacity: 0;
+}
+.btn-loading:after {
+  content: "";
+  display: inline-block;
+  vertical-align: text-bottom;
+  border: 2px var(--tblr-border-style) currentColor;
+  border-left-color: transparent;
+  border-radius: 100rem;
+  color: var(--tblr-btn-color);
+  position: absolute;
+  width: var(--tblr-btn-icon-size);
+  height: var(--tblr-btn-icon-size);
+  right: calc(50% - var(--tblr-btn-icon-size) / 2);
+  top: calc(50% - var(--tblr-btn-icon-size) / 2);
+  animation: spinner-border 0.75s linear infinite;
+}
+
+.btn-action {
+  padding: 0;
+  border: 0;
+  color: var(--tblr-secondary);
+  display: inline-flex;
+  width: 2rem;
+  height: 2rem;
+  align-items: center;
+  justify-content: center;
+  border-radius: var(--tblr-border-radius);
+  background: transparent;
+}
+.btn-action:after {
+  content: none;
+}
+.btn-action:focus {
+  outline: none;
+  box-shadow: none;
+}
+.btn-action:hover, .btn-action.show {
+  color: var(--tblr-body-color);
+  background: var(--tblr-active-bg);
+}
+.btn-action.show {
+  color: var(--tblr-primary);
+}
+.btn-action .icon {
+  margin: 0;
+  width: 1.25rem;
+  height: 1.25rem;
+  font-size: 1.25rem;
+  stroke-width: 1;
+}
+
+.btn-actions {
+  display: flex;
+}
+
+.btn-group,
+.btn-group-vertical {
+  box-shadow: var(--tblr-box-shadow-input);
+}
+.btn-group > .btn-check:checked + .btn,
+.btn-group > .btn:active,
+.btn-group > .btn.active,
+.btn-group-vertical > .btn-check:checked + .btn,
+.btn-group-vertical > .btn:active,
+.btn-group-vertical > .btn.active {
+  z-index: 5;
+}
+.btn-group > .btn-check:focus + .btn,
+.btn-group > .btn:hover,
+.btn-group > .btn:focus,
+.btn-group-vertical > .btn-check:focus + .btn,
+.btn-group-vertical > .btn:hover,
+.btn-group-vertical > .btn:focus {
+  z-index: 1;
+}
+
+.calendar {
+  display: block;
+  font-size: 0.765625rem;
+  border: var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color);
+  border-radius: var(--tblr-border-radius);
+}
+
+.calendar-nav {
+  display: flex;
+  align-items: center;
+}
+
+.calendar-title {
+  flex: 1;
+  text-align: center;
+}
+
+.calendar-body,
+.calendar-header {
+  display: flex;
+  flex-wrap: wrap;
+  justify-content: flex-start;
+  padding: 0.5rem 0;
+}
+
+.calendar-header {
+  color: var(--tblr-secondary);
+}
+
+.calendar-date {
+  flex: 0 0 14.2857142857%;
+  max-width: 14.2857142857%;
+  padding: 0.2rem;
+  text-align: center;
+  border: 0;
+}
+.calendar-date.next-month, .calendar-date.prev-month {
+  opacity: 0.25;
+}
+.calendar-date .date-item {
+  position: relative;
+  display: inline-block;
+  width: 1.4rem;
+  height: 1.4rem;
+  line-height: 1.4rem;
+  color: #66758c;
+  text-align: center;
+  text-decoration: none;
+  white-space: nowrap;
+  vertical-align: middle;
+  cursor: pointer;
+  background: 100% 0;
+  border: var(--tblr-border-width) var(--tblr-border-style) transparent;
+  border-radius: 100rem;
+  outline: 0;
+  transition: background 0.3s, border 0.3s, box-shadow 0.32s, color 0.3s;
+}
+@media (prefers-reduced-motion: reduce) {
+  .calendar-date .date-item {
+    transition: none;
+  }
+}
+.calendar-date .date-item:hover {
+  color: var(--tblr-primary);
+  text-decoration: none;
+  background: #fefeff;
+  border-color: var(--tblr-border-color);
+}
+.calendar-date .date-today {
+  color: var(--tblr-primary);
+  border-color: var(--tblr-border-color);
+}
+
+.calendar-range {
+  position: relative;
+}
+.calendar-range:before {
+  position: absolute;
+  top: 50%;
+  left: 0;
+  right: 0;
+  height: 1.4rem;
+  content: "";
+  background: rgba(var(--tblr-primary-rgb), 0.1);
+  transform: translateY(-50%);
+}
+.calendar-range.range-start .date-item, .calendar-range.range-end .date-item {
+  color: #ffffff;
+  background: var(--tblr-primary);
+  border-color: var(--tblr-primary);
+}
+.calendar-range.range-start:before {
+  right: 50%;
+}
+.calendar-range.range-end:before {
+  left: 50%;
+}
+
+.carousel-indicators-vertical {
+  right: auto;
+  top: 0;
+  margin: 0 0 0 1rem;
+  flex-direction: column;
+}
+.carousel-indicators-vertical [data-bs-target] {
+  margin: 3px 0 3px;
+  width: 3px;
+  height: 30px;
+  border: 0;
+  border-right: 10px var(--tblr-border-style) transparent;
+  border-left: 10px var(--tblr-border-style) transparent;
+}
+
+.carousel-indicators-dot [data-bs-target] {
+  width: 0.5rem;
+  height: 0.5rem;
+  border-radius: 100rem;
+  border: 10px var(--tblr-border-style) transparent;
+  margin: 0;
+}
+
+.carousel-indicators-thumb [data-bs-target] {
+  width: 2rem;
+  height: auto;
+  background: no-repeat center/cover;
+  border: 0;
+  border-radius: var(--tblr-border-radius);
+  box-shadow: rgba(var(--tblr-body-color-rgb), 0.04) 0 2px 4px 0;
+  margin: 0 3px;
+  opacity: 0.75;
+}
+@media (min-width: 992px) {
+  .carousel-indicators-thumb [data-bs-target] {
+    width: 4rem;
+  }
+}
+.carousel-indicators-thumb [data-bs-target]:before {
+  content: "";
+  padding-top: var(--tblr-aspect-ratio, 100%);
+  display: block;
+}
+.carousel-indicators-thumb.carousel-indicators-vertical [data-bs-target] {
+  margin: 3px 0;
+}
+
+.carousel-caption-background {
+  background: red;
+  position: absolute;
+  right: 0;
+  left: 0;
+  bottom: 0;
+  height: 90%;
+  background: linear-gradient(0deg, rgba(24, 36, 51, 0.9), rgba(24, 36, 51, 0));
+}
+
+.card {
+  transition: transform 0.3s ease-out, opacity 0.3s ease-out, box-shadow 0.3s ease-out;
+}
+@media (prefers-reduced-motion: reduce) {
+  .card {
+    transition: none;
+  }
+}
+@media print {
+  .card {
+    border: none;
+    box-shadow: none;
+  }
+}
+a.card {
+  color: inherit;
+}
+a.card:hover {
+  text-decoration: none;
+  box-shadow: rgba(var(--tblr-body-color-rgb), 0.16) 0 2px 16px 0;
+}
+
+.card .card {
+  box-shadow: none;
+}
+
+.card-borderless,
+.card-borderless .card-header,
+.card-borderless .card-footer {
+  border-color: transparent;
+}
+
+.card-stamp {
+  --tblr-stamp-size: 7rem;
+  position: absolute;
+  top: 0;
+  left: 0;
+  width: calc(var(--tblr-stamp-size) * 1);
+  height: calc(var(--tblr-stamp-size) * 1);
+  max-height: 100%;
+  border-top-left-radius: 4px;
+  opacity: 0.2;
+  overflow: hidden;
+  pointer-events: none;
+}
+
+.card-stamp-lg {
+  --tblr-stamp-size: 13rem;
+}
+
+.card-stamp-icon {
+  background: var(--tblr-secondary);
+  color: var(--tblr-card-bg, var(--tblr-bg-surface));
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  border-radius: 100rem;
+  width: calc(var(--tblr-stamp-size) * 1);
+  height: calc(var(--tblr-stamp-size) * 1);
+  position: relative;
+  top: calc(var(--tblr-stamp-size) * -0.25);
+  left: calc(var(--tblr-stamp-size) * -0.25);
+  font-size: calc(var(--tblr-stamp-size) * 0.75);
+  transform: rotate(-10deg);
+}
+.card-stamp-icon .icon {
+  stroke-width: 2;
+  width: calc(var(--tblr-stamp-size) * 0.75);
+  height: calc(var(--tblr-stamp-size) * 0.75);
+}
+
+.card-img,
+.card-img-start {
+  border-top-right-radius: calc(var(--tblr-border-radius) - (var(--tblr-border-width)));
+  border-bottom-right-radius: calc(var(--tblr-border-radius) - (var(--tblr-border-width)));
+}
+
+.card-img,
+.card-img-end {
+  border-top-left-radius: calc(var(--tblr-border-radius) - (var(--tblr-border-width)));
+  border-bottom-left-radius: calc(var(--tblr-border-radius) - (var(--tblr-border-width)));
+}
+
+.card-img-overlay {
+  display: flex;
+  flex-direction: column;
+  justify-content: flex-end;
+}
+
+.card-img-overlay-dark {
+  background-image: linear-gradient(-180deg, rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 0.6) 100%);
+}
+
+.card-inactive {
+  pointer-events: none;
+  box-shadow: none;
+}
+.card-inactive .card-body {
+  opacity: 0.64;
+}
+
+.card-active {
+  --tblr-card-border-color: var(--tblr-primary);
+  --tblr-card-bg: var(--tblr-active-bg);
+}
+
+.card-btn {
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  padding: 1.25rem 1.25rem;
+  text-align: center;
+  transition: background 0.3s;
+  border-top: var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color);
+  flex: 1;
+  color: inherit;
+  font-weight: var(--tblr-font-weight-medium);
+}
+@media (prefers-reduced-motion: reduce) {
+  .card-btn {
+    transition: none;
+  }
+}
+.card-btn:hover {
+  text-decoration: none;
+  background: rgba(var(--tblr-primary-rgb), 0.04);
+}
+.card-btn + .card-btn {
+  border-right: var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color);
+}
+
+/**
+Stacked card
+ */
+.card-stacked {
+  --tblr-card-stacked-offset: .25rem;
+  position: relative;
+}
+.card-stacked:after {
+  position: absolute;
+  top: calc(-1 * var(--tblr-card-stacked-offset));
+  left: var(--tblr-card-stacked-offset);
+  right: var(--tblr-card-stacked-offset);
+  height: var(--tblr-card-stacked-offset);
+  content: "";
+  background: var(--tblr-card-bg, var(--tblr-bg-surface));
+  border: var(--tblr-border-width) var(--tblr-border-style) var(--tblr-card-border-color);
+  border-radius: var(--tblr-card-border-radius) var(--tblr-card-border-radius) 0 0;
+}
+
+.card-cover {
+  position: relative;
+  padding: 1.25rem 1.25rem;
+  background: #666666 no-repeat center/cover;
+}
+.card-cover:before {
+  position: absolute;
+  top: 0;
+  left: 0;
+  bottom: 0;
+  right: 0;
+  content: "";
+  background: rgba(24, 36, 51, 0.48);
+}
+.card-cover:first-child, .card-cover:first-child:before {
+  border-radius: 4px 4px 0 0;
+}
+
+.card-cover-blurred:before {
+  -webkit-backdrop-filter: blur(2px);
+          backdrop-filter: blur(2px);
+}
+
+.card-actions {
+  margin: -0.5rem auto -0.5rem -0.5rem;
+  padding-right: 0.5rem;
+}
+.card-actions a {
+  text-decoration: none;
+}
+
+.card-header {
+  color: inherit;
+  display: flex;
+  align-items: center;
+  background: transparent;
+}
+.card-header:first-child {
+  border-radius: var(--tblr-card-border-radius) var(--tblr-card-border-radius) 0 0;
+}
+
+.card-header-light {
+  border-bottom-color: transparent;
+  background: var(--tblr-bg-surface-tertiary);
+}
+
+.card-header-tabs {
+  background: var(--tblr-bg-surface-tertiary);
+  flex: 1;
+  margin: calc(var(--tblr-card-cap-padding-y) * -1) calc(var(--tblr-card-cap-padding-x) * -1) calc(var(--tblr-card-cap-padding-y) * -1);
+  padding: calc(var(--tblr-card-cap-padding-y) * 0.5) calc(var(--tblr-card-cap-padding-x) * 0.5) 0;
+}
+
+.card-header-pills {
+  flex: 1;
+  margin-top: -0.5rem;
+  margin-bottom: -0.5rem;
+}
+
+.card-rotate-left {
+  transform: rotate(1.5deg);
+}
+
+.card-rotate-right {
+  transform: rotate(-1.5deg);
+}
+
+.card-link {
+  color: inherit;
+}
+.card-link:hover {
+  color: inherit;
+  text-decoration: none;
+  box-shadow: 0 1px 6px 0 rgba(0, 0, 0, 0.08);
+}
+
+.card-link-rotate:hover {
+  transform: rotate(-1.5deg);
+  opacity: 1;
+}
+
+.card-link-pop:hover {
+  transform: translateY(-2px);
+  opacity: 1;
+}
+
+.card-footer {
+  margin-top: auto;
+}
+.card-footer:last-child {
+  border-radius: 0 0 var(--tblr-card-border-radius) var(--tblr-card-border-radius);
+}
+
+.card-footer-transparent {
+  background: transparent;
+  border-color: transparent;
+  padding-top: 0;
+}
+
+.card-footer-borderless {
+  border-top: none;
+}
+
+.card-progress {
+  height: 0.25rem;
+}
+.card-progress:last-child {
+  border-radius: 0 0 2px 2px;
+}
+.card-progress:first-child {
+  border-radius: 2px 2px 0 0;
+}
+
+.card-meta {
+  color: var(--tblr-secondary);
+}
+
+.card-title {
+  display: block;
+  margin: 0 0 1rem;
+  font-size: 1rem;
+  font-weight: var(--tblr-font-weight-medium);
+  color: inherit;
+  line-height: 1.5rem;
+}
+a.card-title:hover {
+  color: inherit;
+}
+
+.card-header .card-title {
+  margin: 0;
+}
+
+.card-subtitle {
+  margin-bottom: 1.25rem;
+  color: var(--tblr-secondary);
+  font-weight: normal;
+}
+.card-header .card-subtitle {
+  margin: 0;
+}
+.card-title .card-subtitle {
+  margin: 0 0.25rem 0 0;
+  font-size: 0.875rem;
+}
+
+.card-body {
+  position: relative;
+}
+.card-body > :last-child {
+  margin-bottom: 0;
+}
+.card-sm > .card-body {
+  padding: 1rem;
+}
+@media (min-width: 768px) {
+  .card-md > .card-body {
+    padding: 2.5rem;
+  }
+}
+@media (min-width: 768px) {
+  .card-lg > .card-body {
+    padding: 2rem;
+  }
+}
+@media (min-width: 992px) {
+  .card-lg > .card-body {
+    padding: 4rem;
+  }
+}
+@media print {
+  .card-body {
+    padding: 0;
+  }
+}
+.card-body + .card-body {
+  border-top: var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color);
+}
+
+.card-body-scrollable {
+  overflow: auto;
+}
+
+/**
+Card optinos
+ */
+.card-options {
+  top: 1.5rem;
+  left: 0.75rem;
+  display: flex;
+  margin-right: auto;
+}
+
+.card-options-link {
+  display: inline-block;
+  min-width: 1rem;
+  margin-right: 0.25rem;
+  color: var(--tblr-secondary);
+}
+
+/**
+Card status
+ */
+.card-status-top {
+  position: absolute;
+  top: 0;
+  left: 0;
+  right: 0;
+  height: 2px;
+  border-radius: var(--tblr-card-border-radius) var(--tblr-card-border-radius) 0 0;
+}
+
+.card-status-start {
+  position: absolute;
+  left: auto;
+  bottom: 0;
+  width: 2px;
+  height: 100%;
+  border-radius: 0 var(--tblr-card-border-radius) var(--tblr-card-border-radius) 0;
+}
+
+.card-status-bottom {
+  position: absolute;
+  top: initial;
+  bottom: 0;
+  width: 100%;
+  height: 2px;
+  border-radius: 0 0 var(--tblr-card-border-radius) var(--tblr-card-border-radius);
+}
+
+/**
+Card table
+ */
+.card-table {
+  margin-bottom: 0 !important;
+}
+.card-table tr td:first-child,
+.card-table tr th:first-child {
+  padding-right: 1.25rem;
+  border-right: 0;
+}
+.card-table tr td:last-child,
+.card-table tr th:last-child {
+  padding-left: 1.25rem;
+  border-left: 0;
+}
+.card-table thead tr:first-child,
+.card-table tbody tr:first-child,
+.card-table tfoot tr:first-child {
+  border-top: 0;
+}
+.card-table thead tr:first-child td,
+.card-table thead tr:first-child th,
+.card-table tbody tr:first-child td,
+.card-table tbody tr:first-child th,
+.card-table tfoot tr:first-child td,
+.card-table tfoot tr:first-child th {
+  border-top: 0;
+}
+.card-body + .card-table {
+  border-top: var(--tblr-border-width) var(--tblr-border-style) var(--tblr-table-border-color);
+}
+
+/*
+Card code
+ */
+.card-code {
+  padding: 0;
+}
+.card-code .highlight {
+  margin: 0;
+  border: 0;
+}
+.card-code pre {
+  margin: 0 !important;
+  border: 0 !important;
+}
+
+/*
+Card chart
+ */
+.card-chart {
+  position: relative;
+  z-index: 1;
+  height: 3.5rem;
+}
+
+/**
+Card avatar
+ */
+.card-avatar {
+  margin-right: auto;
+  margin-left: auto;
+  box-shadow: 0 0 0 0.25rem var(--tblr-card-bg, var(--tblr-bg-surface));
+  margin-top: calc(-1 * var(--tblr-avatar-size) * 0.5);
+}
+
+/*
+Card list group
+ */
+.card-body + .card-list-group {
+  border-top: var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color);
+}
+.card-list-group .list-group-item {
+  padding-left: 1.25rem;
+  padding-right: 1.25rem;
+  border-left: 0;
+  border-right: 0;
+  border-radius: 0;
+}
+.card-list-group .list-group-item:last-child {
+  border-bottom: 0;
+}
+.card-list-group .list-group-item:first-child {
+  border-top: 0;
+}
+
+.card-tabs .nav-tabs {
+  position: relative;
+  z-index: 1000;
+  border-bottom: 0;
+}
+.card-tabs .nav-tabs .nav-link {
+  background: var(--tblr-bg-surface-tertiary);
+  border: var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent);
+}
+.card-tabs .nav-tabs .nav-link.active, .card-tabs .nav-tabs .nav-link:active, .card-tabs .nav-tabs .nav-link:hover {
+  border-color: var(--tblr-border-color-translucent);
+  color: var(--tblr-body-color);
+}
+.card-tabs .nav-tabs .nav-link.active {
+  color: inherit;
+  background: var(--tblr-card-bg, var(--tblr-bg-surface));
+  border-bottom-color: transparent;
+}
+.card-tabs .nav-tabs .nav-item:not(:first-child) .nav-link {
+  border-top-right-radius: 0;
+}
+.card-tabs .nav-tabs .nav-item:not(:last-child) .nav-link {
+  border-top-left-radius: 0;
+}
+.card-tabs .nav-tabs .nav-item + .nav-item {
+  margin-right: calc(-1 * var(--tblr-border-width));
+}
+.card-tabs .nav-tabs-bottom {
+  margin-bottom: 0;
+}
+.card-tabs .nav-tabs-bottom .nav-link {
+  margin-bottom: 0;
+}
+.card-tabs .nav-tabs-bottom .nav-link.active {
+  border-top-color: transparent;
+}
+.card-tabs .nav-tabs-bottom .nav-item {
+  margin-top: calc(-1 * var(--tblr-border-width));
+  margin-bottom: 0;
+}
+.card-tabs .nav-tabs-bottom .nav-item .nav-link {
+  border-bottom: var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent);
+  border-radius: 0 0 var(--tblr-border-radius) var(--tblr-border-radius);
+}
+.card-tabs .nav-tabs-bottom .nav-item:not(:first-child) .nav-link {
+  border-bottom-right-radius: 0;
+}
+.card-tabs .nav-tabs-bottom .nav-item:not(:last-child) .nav-link {
+  border-bottom-left-radius: 0;
+}
+.card-tabs .card {
+  border-bottom-right-radius: 0;
+}
+.card-tabs .nav-tabs + .tab-content .card {
+  border-bottom-right-radius: var(--tblr-card-border-radius);
+  border-top-right-radius: 0;
+}
+
+/**
+Card note
+*/
+.card-note {
+  --tblr-card-bg: #fff7dd;
+  --tblr-card-border-color: #fff1c9;
+}
+
+.btn-close {
+  cursor: pointer;
+}
+.btn-close:focus {
+  outline: none;
+}
+
+.dropdown-menu {
+  -webkit-user-select: none;
+     -moz-user-select: none;
+      -ms-user-select: none;
+          user-select: none;
+}
+.dropdown-menu.card {
+  padding: 0;
+  min-width: 25rem;
+  display: none;
+}
+.dropdown-menu.card.show {
+  display: flex;
+}
+
+.dropdown-item {
+  min-width: 11rem;
+  display: flex;
+  align-items: center;
+  margin: 0;
+  line-height: 1.4285714286;
+}
+
+.dropdown-item-icon {
+  width: 1.25rem !important;
+  height: 1.25rem !important;
+  margin-left: 0.5rem;
+  color: var(--tblr-secondary);
+  opacity: 0.7;
+  text-align: center;
+}
+
+.dropdown-item-indicator {
+  margin-left: 0.5rem;
+  margin-right: -0.25rem;
+  height: 1.25rem;
+  display: inline-flex;
+  line-height: 1;
+  vertical-align: bottom;
+  align-items: center;
+}
+
+.dropdown-header {
+  font-size: 0.625rem;
+  font-weight: var(--tblr-font-weight-bold);
+  text-transform: uppercase;
+  letter-spacing: 0.04em;
+  line-height: 1rem;
+  color: var(--tblr-secondary);
+  padding-bottom: 0.25rem;
+  pointer-events: none;
+}
+
+.dropdown-menu-scrollable {
+  height: auto;
+  max-height: 13rem;
+  overflow-x: hidden;
+}
+
+.dropdown-menu-column {
+  min-width: 11rem;
+}
+.dropdown-menu-column .dropdown-item {
+  min-width: 0;
+}
+
+.dropdown-menu-columns {
+  display: flex;
+  flex: 0 0.25rem;
+}
+
+.dropdown-menu-arrow:before {
+  content: "";
+  position: absolute;
+  top: -0.25rem;
+  right: 0.75rem;
+  display: block;
+  background: inherit;
+  width: 14px;
+  height: 14px;
+  transform: rotate(45deg);
+  transform-origin: center;
+  border: 1px solid;
+  border-color: inherit;
+  z-index: -1;
+  clip: rect(0px, 9px, 9px, 0px);
+}
+.dropdown-menu-arrow.dropdown-menu-end:before {
+  left: 0.75rem;
+  right: auto;
+}
+
+.dropend > .dropdown-menu {
+  margin-top: calc(-0.25rem - 1px);
+  margin-right: -0.25rem;
+}
+.dropend .dropdown-toggle:after {
+  margin-right: auto;
+}
+
+.dropdown-menu-card {
+  padding: 0;
+}
+.dropdown-menu-card > .card {
+  margin: 0;
+  border: 0;
+  box-shadow: none;
+}
+
+.datagrid {
+  --tblr-datagrid-padding: 1.5rem;
+  --tblr-datagrid-item-width: 15rem;
+  display: grid;
+  grid-gap: var(--tblr-datagrid-padding);
+  grid-template-columns: repeat(auto-fit, minmax(var(--tblr-datagrid-item-width), 1fr));
+}
+
+.datagrid-title {
+  font-size: 0.625rem;
+  font-weight: var(--tblr-font-weight-bold);
+  text-transform: uppercase;
+  letter-spacing: 0.04em;
+  line-height: 1rem;
+  color: var(--tblr-secondary);
+  margin-bottom: 0.25rem;
+}
+
+.empty {
+  display: flex;
+  flex-direction: column;
+  align-items: center;
+  justify-content: center;
+  height: 100%;
+  padding: 1rem;
+  text-align: center;
+}
+@media (min-width: 768px) {
+  .empty {
+    padding: 3rem;
+  }
+}
+
+.empty-icon {
+  margin: 0 0 1rem;
+  width: 3rem;
+  height: 3rem;
+  line-height: 1;
+  color: var(--tblr-secondary);
+}
+.empty-icon svg {
+  width: 100%;
+  height: 100%;
+}
+
+.empty-img {
+  margin: 0 0 2rem;
+  line-height: 1;
+}
+.empty-img img {
+  height: 8rem;
+  width: auto;
+}
+
+.empty-header {
+  margin: 0 0 1rem;
+  font-size: 4rem;
+  font-weight: var(--tblr-font-weight-light);
+  line-height: 1;
+  color: var(--tblr-secondary);
+}
+
+.empty-title {
+  font-size: 1.25rem;
+  line-height: 1.75rem;
+  font-weight: var(--tblr-font-weight-bold);
+}
+
+.empty-title,
+.empty-subtitle {
+  margin: 0 0 0.5rem;
+}
+
+.empty-action {
+  margin-top: 1.5rem;
+}
+
+.empty-bordered {
+  border: var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color);
+  border-radius: var(--tblr-border-radius);
+}
+
+.row > * {
+  min-width: 0;
+}
+
+.col-separator {
+  border-right: var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color);
+}
+
+.container-slim {
+  --tblr-gutter-x: calc(var(--tblr-page-padding) * 2);
+  --tblr-gutter-y: 0;
+  width: 100%;
+  padding-left: calc(var(--tblr-gutter-x) * 0.5);
+  padding-right: calc(var(--tblr-gutter-x) * 0.5);
+  margin-left: auto;
+  margin-right: auto;
+  max-width: 16rem;
+}
+.container-tight {
+  --tblr-gutter-x: calc(var(--tblr-page-padding) * 2);
+  --tblr-gutter-y: 0;
+  width: 100%;
+  padding-left: calc(var(--tblr-gutter-x) * 0.5);
+  padding-right: calc(var(--tblr-gutter-x) * 0.5);
+  margin-left: auto;
+  margin-right: auto;
+  max-width: 30rem;
+}
+.container-narrow {
+  --tblr-gutter-x: calc(var(--tblr-page-padding) * 2);
+  --tblr-gutter-y: 0;
+  width: 100%;
+  padding-left: calc(var(--tblr-gutter-x) * 0.5);
+  padding-right: calc(var(--tblr-gutter-x) * 0.5);
+  margin-left: auto;
+  margin-right: auto;
+  max-width: 45rem;
+}
+
+.row-0 {
+  margin-left: 0;
+  margin-right: 0;
+}
+.row-0 > .col,
+.row-0 > [class*=col-] {
+  padding-left: 0;
+  padding-right: 0;
+}
+.row-0 .card {
+  margin-bottom: 0;
+}
+
+.row-sm {
+  margin-left: -0.375rem;
+  margin-right: -0.375rem;
+}
+.row-sm > .col,
+.row-sm > [class*=col-] {
+  padding-left: 0.375rem;
+  padding-right: 0.375rem;
+}
+.row-sm .card {
+  margin-bottom: 0.75rem;
+}
+
+.row-md {
+  margin-left: -1.5rem;
+  margin-right: -1.5rem;
+}
+.row-md > .col,
+.row-md > [class*=col-] {
+  padding-left: 1.5rem;
+  padding-right: 1.5rem;
+}
+.row-md .card {
+  margin-bottom: 3rem;
+}
+
+.row-lg {
+  margin-left: -3rem;
+  margin-right: -3rem;
+}
+.row-lg > .col,
+.row-lg > [class*=col-] {
+  padding-left: 3rem;
+  padding-right: 3rem;
+}
+.row-lg .card {
+  margin-bottom: 6rem;
+}
+
+.row-deck > .col,
+.row-deck > [class*=col-] {
+  display: flex;
+  align-items: stretch;
+}
+.row-deck > .col .card,
+.row-deck > [class*=col-] .card {
+  flex: 1 1 auto;
+}
+
+.row-cards {
+  --tblr-gutter-x: var(--tblr-page-padding);
+  --tblr-gutter-y: var(--tblr-page-padding);
+  min-width: 0;
+}
+.row-cards .row-cards {
+  flex: 1;
+}
+
+.space-y {
+  display: flex;
+  flex-direction: column;
+  gap: 1rem;
+}
+
+.space-x {
+  display: flex;
+  gap: 1rem;
+}
+
+.space-y-0 {
+  display: flex;
+  flex-direction: column;
+  gap: 0;
+}
+
+.space-x-0 {
+  display: flex;
+  gap: 0;
+}
+
+.space-y-1 {
+  display: flex;
+  flex-direction: column;
+  gap: 0.25rem;
+}
+
+.space-x-1 {
+  display: flex;
+  gap: 0.25rem;
+}
+
+.space-y-2 {
+  display: flex;
+  flex-direction: column;
+  gap: 0.5rem;
+}
+
+.space-x-2 {
+  display: flex;
+  gap: 0.5rem;
+}
+
+.space-y-3 {
+  display: flex;
+  flex-direction: column;
+  gap: 1rem;
+}
+
+.space-x-3 {
+  display: flex;
+  gap: 1rem;
+}
+
+.space-y-4 {
+  display: flex;
+  flex-direction: column;
+  gap: 1.5rem;
+}
+
+.space-x-4 {
+  display: flex;
+  gap: 1.5rem;
+}
+
+.space-y-5 {
+  display: flex;
+  flex-direction: column;
+  gap: 2rem;
+}
+
+.space-x-5 {
+  display: flex;
+  gap: 2rem;
+}
+
+.space-y-6 {
+  display: flex;
+  flex-direction: column;
+  gap: 3rem;
+}
+
+.space-x-6 {
+  display: flex;
+  gap: 3rem;
+}
+
+.space-y-7 {
+  display: flex;
+  flex-direction: column;
+  gap: 5rem;
+}
+
+.space-x-7 {
+  display: flex;
+  gap: 5rem;
+}
+
+.space-y-8 {
+  display: flex;
+  flex-direction: column;
+  gap: 8rem;
+}
+
+.space-x-8 {
+  display: flex;
+  gap: 8rem;
+}
+
+.divide-y > :not(template) ~ :not(template) {
+  border-top: var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent) !important;
+}
+.divide-y > :not(template):not(:first-child) {
+  padding-top: 1rem !important;
+}
+.divide-y > :not(template):not(:last-child) {
+  padding-bottom: 1rem !important;
+}
+
+.divide-x > :not(template) ~ :not(template) {
+  border-right: var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent) !important;
+}
+.divide-x > :not(template):not(:first-child) {
+  padding-right: 1rem !important;
+}
+.divide-x > :not(template):not(:last-child) {
+  padding-left: 1rem !important;
+}
+
+.divide-y-0 > :not(template) ~ :not(template) {
+  border-top: var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent) !important;
+}
+.divide-y-0 > :not(template):not(:first-child) {
+  padding-top: 0 !important;
+}
+.divide-y-0 > :not(template):not(:last-child) {
+  padding-bottom: 0 !important;
+}
+
+.divide-x-0 > :not(template) ~ :not(template) {
+  border-right: var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent) !important;
+}
+.divide-x-0 > :not(template):not(:first-child) {
+  padding-right: 0 !important;
+}
+.divide-x-0 > :not(template):not(:last-child) {
+  padding-left: 0 !important;
+}
+
+.divide-y-1 > :not(template) ~ :not(template) {
+  border-top: var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent) !important;
+}
+.divide-y-1 > :not(template):not(:first-child) {
+  padding-top: 0.25rem !important;
+}
+.divide-y-1 > :not(template):not(:last-child) {
+  padding-bottom: 0.25rem !important;
+}
+
+.divide-x-1 > :not(template) ~ :not(template) {
+  border-right: var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent) !important;
+}
+.divide-x-1 > :not(template):not(:first-child) {
+  padding-right: 0.25rem !important;
+}
+.divide-x-1 > :not(template):not(:last-child) {
+  padding-left: 0.25rem !important;
+}
+
+.divide-y-2 > :not(template) ~ :not(template) {
+  border-top: var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent) !important;
+}
+.divide-y-2 > :not(template):not(:first-child) {
+  padding-top: 0.5rem !important;
+}
+.divide-y-2 > :not(template):not(:last-child) {
+  padding-bottom: 0.5rem !important;
+}
+
+.divide-x-2 > :not(template) ~ :not(template) {
+  border-right: var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent) !important;
+}
+.divide-x-2 > :not(template):not(:first-child) {
+  padding-right: 0.5rem !important;
+}
+.divide-x-2 > :not(template):not(:last-child) {
+  padding-left: 0.5rem !important;
+}
+
+.divide-y-3 > :not(template) ~ :not(template) {
+  border-top: var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent) !important;
+}
+.divide-y-3 > :not(template):not(:first-child) {
+  padding-top: 1rem !important;
+}
+.divide-y-3 > :not(template):not(:last-child) {
+  padding-bottom: 1rem !important;
+}
+
+.divide-x-3 > :not(template) ~ :not(template) {
+  border-right: var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent) !important;
+}
+.divide-x-3 > :not(template):not(:first-child) {
+  padding-right: 1rem !important;
+}
+.divide-x-3 > :not(template):not(:last-child) {
+  padding-left: 1rem !important;
+}
+
+.divide-y-4 > :not(template) ~ :not(template) {
+  border-top: var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent) !important;
+}
+.divide-y-4 > :not(template):not(:first-child) {
+  padding-top: 1.5rem !important;
+}
+.divide-y-4 > :not(template):not(:last-child) {
+  padding-bottom: 1.5rem !important;
+}
+
+.divide-x-4 > :not(template) ~ :not(template) {
+  border-right: var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent) !important;
+}
+.divide-x-4 > :not(template):not(:first-child) {
+  padding-right: 1.5rem !important;
+}
+.divide-x-4 > :not(template):not(:last-child) {
+  padding-left: 1.5rem !important;
+}
+
+.divide-y-5 > :not(template) ~ :not(template) {
+  border-top: var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent) !important;
+}
+.divide-y-5 > :not(template):not(:first-child) {
+  padding-top: 2rem !important;
+}
+.divide-y-5 > :not(template):not(:last-child) {
+  padding-bottom: 2rem !important;
+}
+
+.divide-x-5 > :not(template) ~ :not(template) {
+  border-right: var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent) !important;
+}
+.divide-x-5 > :not(template):not(:first-child) {
+  padding-right: 2rem !important;
+}
+.divide-x-5 > :not(template):not(:last-child) {
+  padding-left: 2rem !important;
+}
+
+.divide-y-6 > :not(template) ~ :not(template) {
+  border-top: var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent) !important;
+}
+.divide-y-6 > :not(template):not(:first-child) {
+  padding-top: 3rem !important;
+}
+.divide-y-6 > :not(template):not(:last-child) {
+  padding-bottom: 3rem !important;
+}
+
+.divide-x-6 > :not(template) ~ :not(template) {
+  border-right: var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent) !important;
+}
+.divide-x-6 > :not(template):not(:first-child) {
+  padding-right: 3rem !important;
+}
+.divide-x-6 > :not(template):not(:last-child) {
+  padding-left: 3rem !important;
+}
+
+.divide-y-7 > :not(template) ~ :not(template) {
+  border-top: var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent) !important;
+}
+.divide-y-7 > :not(template):not(:first-child) {
+  padding-top: 5rem !important;
+}
+.divide-y-7 > :not(template):not(:last-child) {
+  padding-bottom: 5rem !important;
+}
+
+.divide-x-7 > :not(template) ~ :not(template) {
+  border-right: var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent) !important;
+}
+.divide-x-7 > :not(template):not(:first-child) {
+  padding-right: 5rem !important;
+}
+.divide-x-7 > :not(template):not(:last-child) {
+  padding-left: 5rem !important;
+}
+
+.divide-y-8 > :not(template) ~ :not(template) {
+  border-top: var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent) !important;
+}
+.divide-y-8 > :not(template):not(:first-child) {
+  padding-top: 8rem !important;
+}
+.divide-y-8 > :not(template):not(:last-child) {
+  padding-bottom: 8rem !important;
+}
+
+.divide-x-8 > :not(template) ~ :not(template) {
+  border-right: var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent) !important;
+}
+.divide-x-8 > :not(template):not(:first-child) {
+  padding-right: 8rem !important;
+}
+.divide-x-8 > :not(template):not(:last-child) {
+  padding-left: 8rem !important;
+}
+
+.divide-y-fill {
+  display: flex;
+  flex-direction: column;
+  height: 100%;
+}
+.divide-y-fill > :not(template) {
+  flex: 1;
+  display: flex;
+  justify-content: center;
+  flex-direction: column;
+}
+
+.icon {
+  --tblr-icon-size: 1.25rem;
+  width: var(--tblr-icon-size);
+  height: var(--tblr-icon-size);
+  font-size: var(--tblr-icon-size);
+  vertical-align: bottom;
+  stroke-width: 1.5;
+}
+.icon:hover {
+  text-decoration: none;
+}
+
+.icon-inline {
+  --tblr-icon-size: 1rem;
+  vertical-align: -0.2rem;
+}
+
+.icon-filled {
+  fill: currentColor;
+}
+
+.icon-sm {
+  --tblr-icon-size: 1rem;
+  stroke-width: 1;
+}
+
+.icon-md {
+  --tblr-icon-size: 2.5rem;
+  stroke-width: 1;
+}
+
+.icon-lg {
+  --tblr-icon-size: 3.5rem;
+  stroke-width: 1;
+}
+
+.icon-pulse {
+  transition: all 0.15s ease 0s;
+  animation: pulse 2s ease infinite;
+  animation-fill-mode: both;
+}
+
+.icon-tada {
+  transition: all 0.15s ease 0s;
+  animation: tada 3s ease infinite;
+  animation-fill-mode: both;
+}
+
+.icon-rotate {
+  transition: all 0.15s ease 0s;
+  animation: rotate-360 3s linear infinite;
+  animation-fill-mode: both;
+}
+
+.img-responsive {
+  --tblr-img-responsive-ratio: 75%;
+  background: no-repeat center/cover;
+  padding-top: var(--tblr-img-responsive-ratio);
+}
+
+.img-responsive-grid {
+  padding-top: calc(var(--tblr-img-responsive-ratio) - var(--tblr-gutter-y) / 2);
+}
+
+.img-responsive-1x1 {
+  --tblr-img-responsive-ratio: 100%;
+}
+
+.img-responsive-2x1 {
+  --tblr-img-responsive-ratio: 50%;
+}
+
+.img-responsive-1x2 {
+  --tblr-img-responsive-ratio: 200%;
+}
+
+.img-responsive-3x1 {
+  --tblr-img-responsive-ratio: 33.3333333333%;
+}
+
+.img-responsive-1x3 {
+  --tblr-img-responsive-ratio: 300%;
+}
+
+.img-responsive-4x3 {
+  --tblr-img-responsive-ratio: 75%;
+}
+
+.img-responsive-3x4 {
+  --tblr-img-responsive-ratio: 133.3333333333%;
+}
+
+.img-responsive-16x9 {
+  --tblr-img-responsive-ratio: 56.25%;
+}
+
+.img-responsive-9x16 {
+  --tblr-img-responsive-ratio: 177.7777777778%;
+}
+
+.img-responsive-21x9 {
+  --tblr-img-responsive-ratio: 42.8571428571%;
+}
+
+.img-responsive-9x21 {
+  --tblr-img-responsive-ratio: 233.3333333333%;
+}
+
+textarea[cols] {
+  height: auto;
+}
+
+/**
+Form label
+ */
+.col-form-label,
+.form-label {
+  display: block;
+  font-weight: var(--tblr-font-weight-medium);
+}
+.col-form-label.required:after,
+.form-label.required:after {
+  content: "*";
+  margin-right: 0.25rem;
+  color: #d63939;
+}
+
+.form-label-description {
+  float: left;
+  font-weight: var(--tblr-font-weight-normal);
+  color: var(--tblr-secondary);
+}
+
+/**
+Form hint
+ */
+.form-hint {
+  display: block;
+  color: var(--tblr-secondary);
+}
+.form-hint:last-child {
+  margin-bottom: 0;
+}
+.form-hint + .form-control {
+  margin-top: 0.25rem;
+}
+.form-label + .form-hint {
+  margin-top: -0.25rem;
+}
+.input-group + .form-hint, .form-control + .form-hint, .form-select + .form-hint {
+  margin-top: 0.5rem;
+}
+
+/**
+Form select
+ */
+.form-select:-moz-focusring {
+  color: var(--tblr-body-color);
+}
+
+/**
+Form control
+ */
+.form-control:-webkit-autofill {
+  box-shadow: 0 0 0 1000px var(--tblr-body-bg) inset;
+  color: var(--tblr-body-color);
+  -webkit-text-fill-color: var(--tblr-body-color);
+}
+.form-control:disabled, .form-control.disabled {
+  color: var(--tblr-secondary);
+  -webkit-user-select: none;
+     -moz-user-select: none;
+      -ms-user-select: none;
+          user-select: none;
+}
+.form-control[size] {
+  width: auto;
+}
+
+.form-control-light {
+  background-color: var(--tblr-gray-100);
+  border-color: transparent;
+}
+
+.form-control-dark {
+  background-color: rgba(0, 0, 0, 0.1);
+  color: #ffffff;
+  border-color: transparent;
+}
+.form-control-dark:focus {
+  background-color: rgba(0, 0, 0, 0.1);
+  box-shadow: none;
+  border-color: rgba(255, 255, 255, 0.24);
+}
+.form-control-dark::-webkit-input-placeholder {
+  color: rgba(255, 255, 255, 0.6);
+}
+.form-control-dark:-ms-input-placeholder {
+  color: rgba(255, 255, 255, 0.6);
+}
+.form-control-dark::-ms-input-placeholder {
+  color: rgba(255, 255, 255, 0.6);
+}
+.form-control-dark::placeholder {
+  color: rgba(255, 255, 255, 0.6);
+}
+
+.form-control-rounded {
+  border-radius: 10rem;
+}
+
+.form-control-flush {
+  padding: 0;
+  background: none !important;
+  border-color: transparent !important;
+  resize: none;
+  box-shadow: none !important;
+  line-height: inherit;
+}
+
+.form-footer {
+  margin-top: 2rem;
+}
+
+.form-fieldset {
+  padding: 1rem;
+  margin-bottom: 1rem;
+  background: var(--tblr-body-bg);
+  border: var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color);
+  border-radius: var(--tblr-border-radius);
+}
+
+/**
+Form help
+ */
+.form-help {
+  display: inline-flex;
+  font-weight: var(--tblr-font-weight-bold);
+  align-items: center;
+  justify-content: center;
+  width: 1.125rem;
+  height: 1.125rem;
+  font-size: 0.75rem;
+  color: var(--tblr-secondary);
+  text-align: center;
+  text-decoration: none;
+  cursor: pointer;
+  -webkit-user-select: none;
+     -moz-user-select: none;
+      -ms-user-select: none;
+          user-select: none;
+  background: var(--tblr-gray-100);
+  border-radius: 100rem;
+  transition: background-color 0.3s, color 0.3s;
+}
+@media (prefers-reduced-motion: reduce) {
+  .form-help {
+    transition: none;
+  }
+}
+.form-help:hover, .form-help[aria-describedby] {
+  color: #ffffff;
+  background: var(--tblr-primary);
+}
+
+/**
+Input group
+ */
+.input-group {
+  box-shadow: var(--tblr-box-shadow-input);
+  border-radius: var(--tblr-border-radius);
+}
+.input-group .form-control,
+.input-group .btn {
+  box-shadow: none;
+}
+
+.input-group-link {
+  font-size: 0.75rem;
+}
+
+.input-group-flat:focus-within {
+  box-shadow: 0 0 0 0.25rem rgba(var(--tblr-primary-rgb), 0.25);
+  border-radius: var(--tblr-border-radius);
+}
+.input-group-flat:focus-within .form-control,
+.input-group-flat:focus-within .input-group-text {
+  border-color: #80aad3 !important;
+}
+.input-group-flat .form-control:focus {
+  border-color: var(--tblr-border-color);
+  box-shadow: none;
+}
+.input-group-flat .form-control:not(:last-child) {
+  border-left: 0;
+}
+.input-group-flat .form-control:not(:first-child) {
+  border-right: 0;
+}
+.input-group-flat .input-group-text {
+  background: var(--tblr-bg-forms);
+  transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
+}
+@media (prefers-reduced-motion: reduce) {
+  .input-group-flat .input-group-text {
+    transition: none;
+  }
+}
+.input-group-flat .input-group-text:first-child {
+  padding-left: 0;
+}
+.input-group-flat .input-group-text:last-child {
+  padding-right: 0;
+}
+
+/**
+Upload files
+ */
+.form-file-button {
+  margin-right: 0;
+  border-right: 0;
+}
+
+/**
+Icon input
+ */
+.input-icon {
+  position: relative;
+}
+.input-icon .form-control:not(:last-child),
+.input-icon .form-select:not(:last-child) {
+  padding-left: 2.5rem;
+}
+.input-icon .form-control:not(:first-child),
+.input-icon .form-select:not(:last-child) {
+  padding-right: 2.5rem;
+}
+
+.input-icon-addon {
+  position: absolute;
+  top: 0;
+  bottom: 0;
+  right: 0;
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  min-width: 2.5rem;
+  color: var(--tblr-icon-color);
+  pointer-events: none;
+  font-size: 1.2em;
+}
+.input-icon-addon:last-child {
+  left: 0;
+  right: auto;
+}
+
+/*
+Color Input
+ */
+.form-colorinput {
+  position: relative;
+  display: inline-block;
+  margin: 0;
+  line-height: 1;
+  cursor: pointer;
+}
+
+.form-colorinput-input {
+  position: absolute;
+  z-index: -1;
+  opacity: 0;
+}
+
+.form-colorinput-color {
+  display: block;
+  width: 1.5rem;
+  height: 1.5rem;
+  color: #ffffff;
+  border: var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent);
+  border-radius: 3px;
+  box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.05);
+}
+.form-colorinput-color:before {
+  position: absolute;
+  top: 0;
+  right: 0;
+  width: 100%;
+  height: 100%;
+  content: "";
+  background: no-repeat center center/1.25rem;
+  background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' width='16' height='16'%3e%3cpath fill='none' stroke='%23ffffff' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M4 8.5l2.5 2.5l5.5 -5.5'/%3e%3c/svg%3e");
+  opacity: 0;
+  transition: opacity 0.3s;
+}
+@media (prefers-reduced-motion: reduce) {
+  .form-colorinput-color:before {
+    transition: none;
+  }
+}
+.form-colorinput-input:checked ~ .form-colorinput-color:before {
+  opacity: 1;
+}
+.form-colorinput-input:focus ~ .form-colorinput-color {
+  border-color: var(--tblr-primary);
+  box-shadow: 0 0 0 0.25rem rgba(var(--tblr-primary-rgb), 0.25);
+}
+.form-colorinput-light .form-colorinput-color:before {
+  background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' width='16' height='16'%3e%3cpath fill='none' stroke='%23182433' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M4 8.5l2.5 2.5l5.5 -5.5'/%3e%3c/svg%3e");
+}
+
+/**
+Image check
+ */
+.form-imagecheck {
+  position: relative;
+  margin: 0;
+  cursor: pointer;
+}
+
+.form-imagecheck-input {
+  position: absolute;
+  z-index: -1;
+  opacity: 0;
+}
+
+.form-imagecheck-figure {
+  position: relative;
+  display: block;
+  margin: 0;
+  -webkit-user-select: none;
+     -moz-user-select: none;
+      -ms-user-select: none;
+          user-select: none;
+  border: var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color);
+  border-radius: 3px;
+}
+.form-imagecheck-input:focus ~ .form-imagecheck-figure {
+  border-color: var(--tblr-primary);
+  box-shadow: 0 0 0 0.25rem rgba(var(--tblr-primary-rgb), 0.25);
+}
+.form-imagecheck-input:checked ~ .form-imagecheck-figure {
+  border-color: var(--tblr-primary);
+}
+.form-imagecheck-figure:before {
+  position: absolute;
+  top: 0.25rem;
+  right: 0.25rem;
+  z-index: 1;
+  display: block;
+  width: 1.25rem;
+  height: 1.25rem;
+  color: #ffffff;
+  pointer-events: none;
+  content: "";
+  -webkit-user-select: none;
+     -moz-user-select: none;
+      -ms-user-select: none;
+          user-select: none;
+  background: var(--tblr-bg-forms);
+  border: var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color);
+  border-radius: var(--tblr-border-radius);
+  transition: opacity 0.3s;
+}
+@media (prefers-reduced-motion: reduce) {
+  .form-imagecheck-figure:before {
+    transition: none;
+  }
+}
+.form-imagecheck-input:checked ~ .form-imagecheck-figure:before {
+  background-color: var(--tblr-primary);
+  background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' width='16' height='16'%3e%3cpath fill='none' stroke='%23ffffff' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M4 8.5l2.5 2.5l5.5 -5.5'/%3e%3c/svg%3e");
+  background-repeat: repeat;
+  background-position: center;
+  background-size: 1.25rem;
+  border-color: var(--tblr-border-color-translucent);
+}
+.form-imagecheck-input[type=radio] ~ .form-imagecheck-figure:before {
+  border-radius: 50%;
+}
+.form-imagecheck-input[type=radio]:checked ~ .form-imagecheck-figure:before {
+  background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3ccircle r='3' fill='%23ffffff' cx='8' cy='8' /%3e%3c/svg%3e");
+}
+
+.form-imagecheck-image {
+  max-width: 100%;
+  display: block;
+  opacity: 0.64;
+  transition: opacity 0.3s;
+}
+@media (prefers-reduced-motion: reduce) {
+  .form-imagecheck-image {
+    transition: none;
+  }
+}
+.form-imagecheck-image:first-child {
+  border-top-right-radius: 2px;
+  border-top-left-radius: 2px;
+}
+.form-imagecheck-image:last-child {
+  border-bottom-left-radius: 2px;
+  border-bottom-right-radius: 2px;
+}
+.form-imagecheck:hover .form-imagecheck-image, .form-imagecheck-input:focus ~ .form-imagecheck-figure .form-imagecheck-image, .form-imagecheck-input:checked ~ .form-imagecheck-figure .form-imagecheck-image {
+  opacity: 1;
+}
+
+.form-imagecheck-caption {
+  padding: 0.25rem;
+  font-size: 0.765625rem;
+  color: var(--tblr-secondary);
+  text-align: center;
+  transition: color 0.3s;
+}
+@media (prefers-reduced-motion: reduce) {
+  .form-imagecheck-caption {
+    transition: none;
+  }
+}
+.form-imagecheck:hover .form-imagecheck-caption, .form-imagecheck-input:focus ~ .form-imagecheck-figure .form-imagecheck-caption, .form-imagecheck-input:checked ~ .form-imagecheck-figure .form-imagecheck-caption {
+  color: var(--tblr-body-color);
+}
+
+/*
+Select group
+ */
+.form-selectgroup {
+  display: inline-flex;
+  margin: 0 0 -0.5rem -0.5rem;
+  flex-wrap: wrap;
+}
+.form-selectgroup .form-selectgroup-item {
+  margin: 0 0 0.5rem 0.5rem;
+}
+
+.form-selectgroup-vertical {
+  flex-direction: column;
+}
+
+.form-selectgroup-item {
+  display: block;
+  position: relative;
+}
+
+.form-selectgroup-input {
+  position: absolute;
+  top: 0;
+  right: 0;
+  z-index: -1;
+  opacity: 0;
+}
+
+.form-selectgroup-label {
+  position: relative;
+  display: block;
+  min-width: calc(1.4285714286em + 1.125rem + calc(var(--tblr-border-width) * 2));
+  margin: 0;
+  padding: 0.5625rem 0.75rem;
+  font-size: 0.875rem;
+  line-height: 1.4285714286;
+  color: var(--tblr-secondary);
+  background: var(--tblr-bg-forms);
+  text-align: center;
+  cursor: pointer;
+  -webkit-user-select: none;
+     -moz-user-select: none;
+      -ms-user-select: none;
+          user-select: none;
+  border: var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color);
+  border-radius: 3px;
+  box-shadow: var(--tblr-box-shadow-input);
+  transition: border-color 0.3s, background 0.3s, color 0.3s;
+}
+@media (prefers-reduced-motion: reduce) {
+  .form-selectgroup-label {
+    transition: none;
+  }
+}
+.form-selectgroup-label .icon:only-child {
+  margin: 0 -0.25rem;
+}
+.form-selectgroup-label:hover {
+  color: var(--tblr-body-color);
+}
+
+.form-selectgroup-check {
+  display: inline-block;
+  width: 1.25rem;
+  height: 1.25rem;
+  border: var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent);
+  vertical-align: middle;
+  box-shadow: var(--tblr-box-shadow-input);
+}
+.form-selectgroup-input[type=checkbox] + .form-selectgroup-label .form-selectgroup-check {
+  border-radius: var(--tblr-border-radius);
+}
+.form-selectgroup-input[type=radio] + .form-selectgroup-label .form-selectgroup-check {
+  border-radius: 50%;
+}
+.form-selectgroup-input:checked + .form-selectgroup-label .form-selectgroup-check {
+  background-color: var(--tblr-primary);
+  background-repeat: repeat;
+  background-position: center;
+  background-size: 1.25rem;
+  border-color: var(--tblr-border-color-translucent);
+}
+.form-selectgroup-input[type=checkbox]:checked + .form-selectgroup-label .form-selectgroup-check {
+  background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' width='16' height='16'%3e%3cpath fill='none' stroke='%23ffffff' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M4 8.5l2.5 2.5l5.5 -5.5'/%3e%3c/svg%3e");
+}
+.form-selectgroup-input[type=radio]:checked + .form-selectgroup-label .form-selectgroup-check {
+  background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3ccircle r='3' fill='%23ffffff' cx='8' cy='8' /%3e%3c/svg%3e");
+}
+
+.form-selectgroup-check-floated {
+  position: absolute;
+  top: 0.5625rem;
+  left: 0.5625rem;
+}
+
+.form-selectgroup-input:checked + .form-selectgroup-label {
+  z-index: 1;
+  color: var(--tblr-primary);
+  background: rgba(var(--tblr-primary-rgb), 0.04);
+  border-color: var(--tblr-primary);
+}
+
+.form-selectgroup-input:focus + .form-selectgroup-label {
+  z-index: 2;
+  color: var(--tblr-primary);
+  border-color: var(--tblr-primary);
+  box-shadow: 0 0 0 0.25rem rgba(var(--tblr-primary-rgb), 0.25);
+}
+
+/**
+Alternate version of form select group
+ */
+.form-selectgroup-boxes .form-selectgroup-label {
+  text-align: right;
+  padding: 1.25rem 1.25rem;
+  color: inherit;
+}
+.form-selectgroup-boxes .form-selectgroup-input:checked + .form-selectgroup-label {
+  color: inherit;
+}
+.form-selectgroup-boxes .form-selectgroup-input:checked + .form-selectgroup-label .form-selectgroup-title {
+  color: var(--tblr-primary);
+}
+.form-selectgroup-boxes .form-selectgroup-input:checked + .form-selectgroup-label .form-selectgroup-label-content {
+  opacity: 1;
+}
+
+/**
+Select group
+ */
+.form-selectgroup-pills {
+  flex-wrap: wrap;
+  align-items: flex-start;
+}
+.form-selectgroup-pills .form-selectgroup-item {
+  flex-grow: 0;
+}
+.form-selectgroup-pills .form-selectgroup-label {
+  border-radius: 50px;
+}
+
+/**
+Bootstrap color input
+ */
+.form-control-color::-webkit-color-swatch {
+  border: none;
+}
+
+/**
+Remove the cancel buttons in Chrome and Safari on macOS.
+ */
+[type=search]::-webkit-search-cancel-button {
+  -webkit-appearance: none;
+}
+
+/**
+Form control dark theme fix
+ */
+.form-control::-webkit-file-upload-button {
+  background-color: var(--tblr-btn-color, var(--tblr-tertiary-bg));
+}
+.form-control::file-selector-button {
+  background-color: var(--tblr-btn-color, var(--tblr-tertiary-bg));
+}
+.form-control:hover:not(:disabled):not([readonly])::-webkit-file-upload-button {
+  background-color: var(--tblr-btn-color, var(--tblr-secondary-bg));
+}
+.form-control:hover:not(:disabled):not([readonly])::file-selector-button {
+  background-color: var(--tblr-btn-color, var(--tblr-secondary-bg));
+}
+
+/*
+Form check
+ */
+.form-check {
+  -webkit-user-select: none;
+     -moz-user-select: none;
+      -ms-user-select: none;
+          user-select: none;
+}
+.form-check.form-check-highlight .form-check-input:not(:checked) ~ .form-check-label {
+  color: var(--tblr-secondary);
+}
+.form-check .form-check-label-off {
+  color: var(--tblr-secondary);
+}
+.form-check .form-check-input:checked ~ .form-check-label-off {
+  display: none;
+}
+.form-check .form-check-input:not(:checked) ~ .form-check-label-on {
+  display: none;
+}
+
+.form-check-input {
+  background-size: 1.25rem;
+  margin-top: 0rem;
+  box-shadow: var(--tblr-box-shadow-input);
+}
+.form-switch .form-check-input {
+  transition: background-color 0.3s, background-position 0.3s;
+}
+@media (prefers-reduced-motion: reduce) {
+  .form-switch .form-check-input {
+    transition: none;
+  }
+}
+
+.form-check-label {
+  display: block;
+}
+.form-check-label.required:after {
+  content: "*";
+  margin-right: 0.25rem;
+  color: #d63939;
+}
+
+.form-check-description {
+  display: block;
+  color: var(--tblr-secondary);
+  font-size: 0.75rem;
+  margin-top: 0.25rem;
+}
+
+.form-check-single {
+  margin: 0;
+}
+.form-check-single .form-check-input {
+  margin: 0;
+}
+
+/*
+Form switch
+ */
+.form-switch .form-check-input {
+  height: 1.25rem;
+  margin-top: 0rem;
+}
+
+.form-switch-lg {
+  padding-right: 3.5rem;
+  min-height: 1.5rem;
+}
+.form-switch-lg .form-check-input {
+  height: 1.5rem;
+  width: 2.75rem;
+  background-size: 1.5rem;
+  margin-right: -3.5rem;
+}
+.form-switch-lg .form-check-label {
+  padding-top: 0.125rem;
+}
+
+/*Correction of Form-check position*/
+.form-check-input:checked {
+  border: none;
+}
+
+.form-select.is-invalid-lite, .form-control.is-invalid-lite, .form-select.is-valid-lite, .form-control.is-valid-lite {
+  border-color: var(--tblr-border-color) !important;
+}
+
+/**
+Legend
+ */
+.legend {
+  --tblr-legend-size: 0.75em;
+  display: inline-block;
+  background: var(--tblr-border-color);
+  width: var(--tblr-legend-size);
+  height: var(--tblr-legend-size);
+  border-radius: var(--tblr-border-radius-sm);
+  border: 1px solid var(--tblr-border-color-translucent);
+}
+
+.list-group {
+  margin-right: 0;
+  margin-left: 0;
+}
+
+.list-group-header {
+  background: var(--tblr-bg-surface-tertiary);
+  padding: 0.5rem 1.25rem;
+  font-size: 0.75rem;
+  font-weight: var(--tblr-font-weight-medium);
+  line-height: 1;
+  text-transform: uppercase;
+  color: var(--tblr-secondary);
+  border-bottom: var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color);
+}
+.list-group-flush > .list-group-header:last-child {
+  border-bottom-width: 0;
+}
+
+.list-group-item {
+  background-color: inherit;
+}
+
+.list-group-item.active {
+  background-color: rgba(var(--tblr-text-secondary-rgb), 0.04);
+  border-right-color: #0054a6;
+  border-right-width: 2px;
+}
+
+.list-group-item:active, .list-group-item:focus, .list-group-item:hover {
+  background-color: rgba(var(--tblr-text-secondary-rgb), 0.04);
+}
+
+.list-group-item.disabled, .list-group-item:disabled {
+  color: #929dab;
+  background-color: rgba(var(--tblr-text-secondary-rgb), 0.04);
+}
+
+.list-bordered .list-item {
+  border-top: var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color);
+  margin-top: -1px;
+}
+.list-bordered .list-item:first-child {
+  border-top: none;
+}
+
+.list-group-hoverable .list-group-item-actions {
+  opacity: 0;
+  transition: opacity 0.3s;
+}
+@media (prefers-reduced-motion: reduce) {
+  .list-group-hoverable .list-group-item-actions {
+    transition: none;
+  }
+}
+.list-group-hoverable .list-group-item:hover .list-group-item-actions,
+.list-group-hoverable .list-group-item-actions.show {
+  opacity: 1;
+}
+
+.list-group-transparent {
+  --tblr-list-group-border-radius: 0;
+  margin: 0 -1.25rem;
+}
+.list-group-transparent .list-group-item {
+  background: none;
+  border: 0;
+}
+.list-group-transparent .list-group-item .icon {
+  color: var(--tblr-secondary);
+}
+.list-group-transparent .list-group-item.active {
+  font-weight: var(--tblr-font-weight-bold);
+  color: inherit;
+  background: var(--tblr-active-bg);
+}
+.list-group-transparent .list-group-item.active .icon {
+  color: inherit;
+}
+
+.list-separated-item {
+  padding: 1rem 0;
+}
+.list-separated-item:first-child {
+  padding-top: 0;
+}
+.list-separated-item:last-child {
+  padding-bottom: 0;
+}
+.list-separated-item + .list-separated-item {
+  border-top: var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color);
+}
+
+/**
+Inline list
+ */
+.list-inline-item:not(:last-child) {
+  margin-left: auto;
+  -webkit-margin-end: 0.5rem;
+          margin-inline-end: 0.5rem;
+}
+
+.list-inline-dots .list-inline-item + .list-inline-item:before {
+  content: " · ";
+  -webkit-margin-end: 0.5rem;
+          margin-inline-end: 0.5rem;
+}
+
+.loader {
+  position: relative;
+  display: block;
+  width: 2.5rem;
+  height: 2.5rem;
+  color: #0054a6;
+  vertical-align: middle;
+}
+.loader:after {
+  position: absolute;
+  top: 0;
+  right: 0;
+  width: 100%;
+  height: 100%;
+  content: "";
+  border: 1px var(--tblr-border-style);
+  border-color: transparent;
+  border-top-color: currentColor;
+  border-right-color: currentColor;
+  border-radius: 100rem;
+  animation: rotate-360 0.6s linear;
+  animation-iteration-count: infinite;
+}
+
+/**
+Dimmer
+*/
+.dimmer {
+  position: relative;
+}
+.dimmer .loader {
+  position: absolute;
+  top: 50%;
+  left: 0;
+  right: 0;
+  display: none;
+  margin: 0 auto;
+  transform: translateY(-50%);
+}
+.dimmer.active .loader {
+  display: block;
+}
+.dimmer.active .dimmer-content {
+  pointer-events: none;
+  opacity: 0.1;
+}
+
+@keyframes animated-dots {
+  0% {
+    transform: translateX(100%);
+  }
+}
+.animated-dots {
+  display: inline-block;
+  overflow: hidden;
+  vertical-align: bottom;
+}
+.animated-dots:after {
+  display: inline-block;
+  content: "...";
+  animation: animated-dots 1.2s steps(4, jump-none) infinite;
+}
+
+.modal-content .btn-close {
+  position: absolute;
+  top: 0;
+  left: 0;
+  width: 3.5rem;
+  height: 3.5rem;
+  margin: 0;
+  padding: 0;
+  z-index: 10;
+}
+
+.modal-body {
+  scrollbar-color: rgba(var(--tblr-scrollbar-color, var(--tblr-body-color-rgb)), 0.16) transparent;
+}
+.modal-body::-webkit-scrollbar {
+  width: 1rem;
+  height: 1rem;
+  -webkit-transition: background 0.3s;
+  transition: background 0.3s;
+}
+@media (prefers-reduced-motion: reduce) {
+  .modal-body::-webkit-scrollbar {
+    -webkit-transition: none;
+    transition: none;
+  }
+}
+.modal-body::-webkit-scrollbar-thumb {
+  border-radius: 1rem;
+  border: 5px solid transparent;
+  box-shadow: inset 0 0 0 1rem rgba(var(--tblr-scrollbar-color, var(--tblr-body-color-rgb)), 0.16);
+}
+.modal-body::-webkit-scrollbar-track {
+  background: transparent;
+}
+.modal-body:hover::-webkit-scrollbar-thumb {
+  box-shadow: inset 0 0 0 1rem rgba(var(--tblr-scrollbar-color, var(--tblr-body-color-rgb)), 0.32);
+}
+.modal-body::-webkit-scrollbar-corner {
+  background: transparent;
+}
+.modal-body .modal-title {
+  margin-bottom: 1rem;
+}
+.modal-body + .modal-body {
+  border-top: var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color);
+}
+
+.modal-status {
+  position: absolute;
+  top: 0;
+  right: 0;
+  left: 0;
+  height: 2px;
+  background: var(--tblr-secondary);
+  border-radius: var(--tblr-border-radius-lg) var(--tblr-border-radius-lg) 0 0;
+}
+
+.modal-header {
+  align-items: center;
+  min-height: 3.5rem;
+  background: transparent;
+  padding: 0 1.5rem 0 3.5rem;
+}
+
+.modal-title {
+  font-size: 1rem;
+  font-weight: var(--tblr-font-weight-bold);
+  color: inherit;
+  line-height: 1.4285714286;
+}
+
+.modal-footer {
+  padding-top: 0.75rem;
+  padding-bottom: 0.75rem;
+}
+
+.modal-blur {
+  -webkit-backdrop-filter: blur(4px);
+          backdrop-filter: blur(4px);
+}
+
+.modal-full-width {
+  max-width: none;
+  margin: 0 0.5rem;
+}
+
+.nav-vertical,
+.nav-vertical .nav {
+  flex-direction: column;
+  flex-wrap: nowrap;
+}
+.nav-vertical .nav {
+  margin-right: 1.25rem;
+  border-right: var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color);
+  padding-right: 0.5rem;
+}
+.nav-vertical .nav-link.active,
+.nav-vertical .nav-item.show .nav-link {
+  font-weight: var(--tblr-font-weight-bold);
+}
+.nav-vertical.nav-pills {
+  margin: 0 -0.75rem;
+}
+
+.nav-bordered {
+  border-bottom: var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color);
+}
+.nav-bordered .nav-item + .nav-item {
+  margin-right: 1.25rem;
+}
+.nav-bordered .nav-link {
+  padding-right: 0;
+  padding-left: 0;
+  margin: 0 0 -var(--tblr-border-width);
+  border: 0;
+  border-bottom: 2px var(--tblr-border-style) transparent;
+  color: var(--tblr-secondary);
+}
+.nav-bordered .nav-link.active,
+.nav-bordered .nav-item.show .nav-link {
+  color: var(--tblr-primary);
+  border-color: var(--tblr-primary);
+}
+
+.nav-link {
+  display: flex;
+  transition: color 0.3s;
+  align-items: center;
+}
+@media (prefers-reduced-motion: reduce) {
+  .nav-link {
+    transition: none;
+  }
+}
+
+.nav-link-toggle {
+  margin-right: auto;
+  padding: 0 0.25rem;
+  transition: transform 0.3s;
+}
+@media (prefers-reduced-motion: reduce) {
+  .nav-link-toggle {
+    transition: none;
+  }
+}
+.nav-link-toggle:after {
+  content: "";
+  display: inline-block;
+  vertical-align: 0.306em;
+  width: 0.36em;
+  height: 0.36em;
+  border-bottom: 1px var(--tblr-border-style);
+  border-right: 1px var(--tblr-border-style);
+  margin-left: 0.1em;
+  margin-right: 0.4em;
+  transform: rotate(45deg);
+}
+.nav-link-toggle:after {
+  margin: 0;
+}
+.nav-link[aria-expanded=true] .nav-link-toggle {
+  transform: rotate(-180deg);
+}
+
+.nav-link-icon {
+  width: 1.25rem;
+  height: 1.25rem;
+  margin-left: 0.5rem;
+  color: var(--tblr-icon-color);
+}
+.nav-link-icon svg {
+  display: block;
+  height: 100%;
+}
+
+.nav-fill .nav-item .nav-link {
+  justify-content: center;
+}
+
+.stars {
+  display: inline-flex;
+  color: #bbc3cd;
+  font-size: 0.75rem;
+}
+.stars .star:not(:first-child) {
+  margin-right: 0.25rem;
+}
+
+.pagination {
+  -webkit-user-select: none;
+     -moz-user-select: none;
+      -ms-user-select: none;
+          user-select: none;
+}
+
+.page-link {
+  min-width: 1.75rem;
+  border-radius: var(--tblr-border-radius);
+}
+
+.page-item {
+  text-align: center;
+}
+.page-item:not(.active) .page-link:hover {
+  background: transparent;
+}
+.page-item.page-prev, .page-item.page-next {
+  flex: 0 0 50%;
+  text-align: right;
+}
+.page-item.page-next {
+  margin-right: auto;
+  text-align: left;
+}
+
+.page-item-subtitle {
+  margin-bottom: 2px;
+  font-size: 12px;
+  color: var(--tblr-secondary);
+  text-transform: uppercase;
+}
+.page-item.disabled .page-item-subtitle {
+  color: var(--tblr-disabled-color);
+}
+
+.page-item-title {
+  font-size: 1rem;
+  font-weight: var(--tblr-font-weight-normal);
+  color: var(--tblr-body-color);
+}
+.page-link:hover .page-item-title {
+  color: #0054a6;
+}
+.page-item.disabled .page-item-title {
+  color: var(--tblr-disabled-color);
+}
+
+@keyframes progress-indeterminate {
+  0% {
+    left: 100%;
+    right: -35%;
+  }
+  100%, 60% {
+    left: -90%;
+    right: 100%;
+  }
+}
+/**
+Progress
+ */
+.progress {
+  position: relative;
+  width: 100%;
+  line-height: 0.5rem;
+  -webkit-appearance: none;
+     -moz-appearance: none;
+          appearance: none;
+}
+.progress::-webkit-progress-bar {
+  background: var(--tblr-progress-bg);
+}
+.progress::-webkit-progress-value {
+  background-color: var(--tblr-primary);
+}
+.progress::-moz-progress-bar {
+  background-color: var(--tblr-primary);
+}
+.progress::-ms-fill {
+  background-color: var(--tblr-primary);
+  border: none;
+}
+
+.progress-sm {
+  height: 0.25rem;
+}
+
+/**
+Progress bar
+ */
+.progress-bar {
+  height: 100%;
+}
+
+.progress-bar-indeterminate:after, .progress-bar-indeterminate:before {
+  position: absolute;
+  top: 0;
+  bottom: 0;
+  right: 0;
+  content: "";
+  background-color: inherit;
+  will-change: left, right;
+}
+.progress-bar-indeterminate:before {
+  animation: progress-indeterminate 1.5s cubic-bezier(0.65, 0.815, 0.735, 0.395) infinite;
+}
+
+.progress-separated .progress-bar {
+  box-shadow: 0 0 0 2px var(--tblr-card-bg, var(--tblr-bg-surface));
+}
+
+/**
+Progressbg
+ */
+.progressbg {
+  position: relative;
+  padding: 0.25rem 0.5rem;
+  display: flex;
+}
+
+.progressbg-text {
+  position: relative;
+  z-index: 1;
+  overflow: hidden;
+  text-overflow: ellipsis;
+  white-space: nowrap;
+}
+
+.progressbg-progress {
+  position: absolute;
+  top: 0;
+  left: 0;
+  bottom: 0;
+  right: 0;
+  z-index: 0;
+  height: 100%;
+  background: transparent;
+  pointer-events: none;
+}
+
+.progressbg-value {
+  font-weight: var(--tblr-font-weight-medium);
+  margin-right: auto;
+  padding-right: 2rem;
+}
+
+.ribbon {
+  --tblr-ribbon-margin: 0.25rem;
+  --tblr-ribbon-border-radius: var(--tblr-border-radius);
+  position: absolute;
+  top: 0.75rem;
+  left: calc(-1 * var(--tblr-ribbon-margin));
+  z-index: 1;
+  padding: 0.25rem 0.75rem;
+  font-size: 0.625rem;
+  font-weight: var(--tblr-font-weight-bold);
+  line-height: 1;
+  color: #ffffff;
+  text-align: center;
+  text-transform: uppercase;
+  background: var(--tblr-primary);
+  border-color: var(--tblr-primary);
+  border-radius: 0 var(--tblr-ribbon-border-radius) var(--tblr-ribbon-border-radius) var(--tblr-ribbon-border-radius);
+  display: inline-flex;
+  align-items: center;
+  justify-content: center;
+  min-height: 2rem;
+  min-width: 2rem;
+}
+.ribbon:before {
+  position: absolute;
+  left: 0;
+  bottom: 100%;
+  width: 0;
+  height: 0;
+  content: "";
+  filter: brightness(70%);
+  border: calc(var(--tblr-ribbon-margin) * 0.5) var(--tblr-border-style);
+  border-color: inherit;
+  border-top-color: transparent;
+  border-left-color: transparent;
+}
+.ribbon.bg-blue {
+  border-color: var(--tblr-blue);
+}
+.ribbon.bg-blue-lt {
+  border-color: rgba(var(--tblr-blue-rgb), 0.1) !important;
+}
+.ribbon.bg-azure {
+  border-color: var(--tblr-azure);
+}
+.ribbon.bg-azure-lt {
+  border-color: rgba(var(--tblr-azure-rgb), 0.1) !important;
+}
+.ribbon.bg-indigo {
+  border-color: var(--tblr-indigo);
+}
+.ribbon.bg-indigo-lt {
+  border-color: rgba(var(--tblr-indigo-rgb), 0.1) !important;
+}
+.ribbon.bg-purple {
+  border-color: var(--tblr-purple);
+}
+.ribbon.bg-purple-lt {
+  border-color: rgba(var(--tblr-purple-rgb), 0.1) !important;
+}
+.ribbon.bg-pink {
+  border-color: var(--tblr-pink);
+}
+.ribbon.bg-pink-lt {
+  border-color: rgba(var(--tblr-pink-rgb), 0.1) !important;
+}
+.ribbon.bg-red {
+  border-color: var(--tblr-red);
+}
+.ribbon.bg-red-lt {
+  border-color: rgba(var(--tblr-red-rgb), 0.1) !important;
+}
+.ribbon.bg-orange {
+  border-color: var(--tblr-orange);
+}
+.ribbon.bg-orange-lt {
+  border-color: rgba(var(--tblr-orange-rgb), 0.1) !important;
+}
+.ribbon.bg-yellow {
+  border-color: var(--tblr-yellow);
+}
+.ribbon.bg-yellow-lt {
+  border-color: rgba(var(--tblr-yellow-rgb), 0.1) !important;
+}
+.ribbon.bg-lime {
+  border-color: var(--tblr-lime);
+}
+.ribbon.bg-lime-lt {
+  border-color: rgba(var(--tblr-lime-rgb), 0.1) !important;
+}
+.ribbon.bg-green {
+  border-color: var(--tblr-green);
+}
+.ribbon.bg-green-lt {
+  border-color: rgba(var(--tblr-green-rgb), 0.1) !important;
+}
+.ribbon.bg-teal {
+  border-color: var(--tblr-teal);
+}
+.ribbon.bg-teal-lt {
+  border-color: rgba(var(--tblr-teal-rgb), 0.1) !important;
+}
+.ribbon.bg-cyan {
+  border-color: var(--tblr-cyan);
+}
+.ribbon.bg-cyan-lt {
+  border-color: rgba(var(--tblr-cyan-rgb), 0.1) !important;
+}
+.ribbon .icon {
+  width: 1.25rem;
+  height: 1.25rem;
+  font-size: 1.25rem;
+}
+
+.ribbon-top {
+  top: calc(-1 * var(--tblr-ribbon-margin));
+  left: 0.75rem;
+  width: 2rem;
+  padding: 0.5rem 0;
+  border-radius: var(--tblr-ribbon-border-radius) 0 var(--tblr-ribbon-border-radius) var(--tblr-ribbon-border-radius);
+}
+.ribbon-top:before {
+  top: 0;
+  left: 100%;
+  bottom: auto;
+  border-color: inherit;
+  border-top-color: transparent;
+  border-right-color: transparent;
+}
+.ribbon-top.ribbon-start {
+  left: auto;
+  right: 0.75rem;
+}
+.ribbon-top.ribbon-start:before {
+  top: 0;
+  left: 100%;
+  right: auto;
+}
+
+.ribbon-start {
+  left: auto;
+  right: calc(-1 * var(--tblr-ribbon-margin));
+}
+.ribbon-start:before {
+  top: auto;
+  bottom: 100%;
+  right: 0;
+  border-color: inherit;
+  border-top-color: transparent;
+  border-right-color: transparent;
+}
+
+.ribbon-bottom {
+  top: auto;
+  bottom: 0.75rem;
+}
+
+.ribbon-bookmark {
+  padding-right: 0.25rem;
+  border-radius: 0 0 0 var(--tblr-ribbon-border-radius);
+}
+.ribbon-bookmark:after {
+  position: absolute;
+  top: 0;
+  left: 100%;
+  display: block;
+  width: 0;
+  height: 0;
+  content: "";
+  border: 1rem var(--tblr-border-style);
+  border-color: inherit;
+  border-left-width: 0;
+  border-right-color: transparent;
+  border-right-width: 0.5rem;
+}
+.ribbon-bookmark.ribbon-left {
+  padding-left: 0.5rem;
+}
+.ribbon-bookmark.ribbon-left:after {
+  left: auto;
+  right: 100%;
+  border-left-color: transparent;
+  border-left-width: 0.5rem;
+  border-right-width: 0;
+}
+.ribbon-bookmark.ribbon-top {
+  padding-left: 0;
+  padding-bottom: 0.25rem;
+  padding-right: 0;
+  border-radius: var(--tblr-ribbon-border-radius) 0 0 0;
+}
+.ribbon-bookmark.ribbon-top:after {
+  top: 100%;
+  left: 0;
+  right: 0;
+  border-color: inherit;
+  border-width: 1rem;
+  border-top-width: 0;
+  border-bottom-color: transparent;
+  border-bottom-width: 0.5rem;
+}
+
+/**
+Markdown
+ */
+.markdown {
+  line-height: 1.7142857143;
+}
+.markdown > :first-child {
+  margin-top: 0;
+}
+.markdown > :last-child,
+.markdown > :last-child .highlight {
+  margin-bottom: 0;
+}
+@media (min-width: 768px) {
+  .markdown > hr, .markdown > .hr {
+    margin-top: 3em;
+    margin-bottom: 3em;
+  }
+}
+.markdown > h1, .markdown > .h1, .markdown > h2, .markdown > .h2, .markdown > h3, .markdown > .h3, .markdown > h4, .markdown > .h4, .markdown > h5, .markdown > .h5, .markdown > h6, .markdown > .h6 {
+  font-weight: var(--tblr-font-weight-bold);
+}
+.markdown > blockquote {
+  font-size: 1rem;
+  margin: 1.5rem 0;
+  padding: 0.5rem 1.5rem;
+}
+.markdown > img {
+  border-radius: var(--tblr-border-radius);
+}
+
+.placeholder:not(.btn):not([class*=bg-]) {
+  background-color: currentColor !important;
+}
+.placeholder:not(.avatar):not([class*=card-img-]) {
+  border-radius: var(--tblr-border-radius);
+}
+
+.steps {
+  --tblr-steps-color: var(--tblr-primary);
+  --tblr-steps-inactive-color: var(--tblr-border-color);
+  --tblr-steps-dot-size: .5rem;
+  --tblr-steps-border-width: 2px;
+  display: flex;
+  flex-wrap: nowrap;
+  width: 100%;
+  padding: 0;
+  margin: 0;
+  list-style: none;
+}
+
+.steps-blue {
+  --tblr-steps-color: var(--tblr-blue);
+}
+
+.steps-azure {
+  --tblr-steps-color: var(--tblr-azure);
+}
+
+.steps-indigo {
+  --tblr-steps-color: var(--tblr-indigo);
+}
+
+.steps-purple {
+  --tblr-steps-color: var(--tblr-purple);
+}
+
+.steps-pink {
+  --tblr-steps-color: var(--tblr-pink);
+}
+
+.steps-red {
+  --tblr-steps-color: var(--tblr-red);
+}
+
+.steps-orange {
+  --tblr-steps-color: var(--tblr-orange);
+}
+
+.steps-yellow {
+  --tblr-steps-color: var(--tblr-yellow);
+}
+
+.steps-lime {
+  --tblr-steps-color: var(--tblr-lime);
+}
+
+.steps-green {
+  --tblr-steps-color: var(--tblr-green);
+}
+
+.steps-teal {
+  --tblr-steps-color: var(--tblr-teal);
+}
+
+.steps-cyan {
+  --tblr-steps-color: var(--tblr-cyan);
+}
+
+.step-item {
+  position: relative;
+  flex: 1 1 0;
+  min-height: 1rem;
+  margin-top: 0;
+  color: inherit;
+  text-align: center;
+  cursor: default;
+  padding-top: calc(var(--tblr-steps-dot-size));
+}
+a.step-item {
+  cursor: pointer;
+}
+a.step-item:hover {
+  color: inherit;
+}
+
+.step-item:after, .step-item:before {
+  background: var(--tblr-steps-color);
+}
+.step-item:not(:last-child):after {
+  position: absolute;
+  right: 50%;
+  width: 100%;
+  content: "";
+  transform: translateY(-50%);
+}
+.step-item:after {
+  top: calc(var(--tblr-steps-dot-size) * 0.5);
+  height: var(--tblr-steps-border-width);
+}
+.step-item:before {
+  content: "";
+  position: absolute;
+  top: 0;
+  right: 50%;
+  z-index: 1;
+  box-sizing: content-box;
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  border-radius: 100rem;
+  transform: translateX(50%);
+  color: var(--tblr-white);
+  width: var(--tblr-steps-dot-size);
+  height: var(--tblr-steps-dot-size);
+}
+.step-item.active {
+  font-weight: var(--tblr-font-weight-bold);
+}
+.step-item.active:after {
+  background: var(--tblr-steps-inactive-color);
+}
+.step-item.active ~ .step-item {
+  color: var(--tblr-disabled-color);
+}
+.step-item.active ~ .step-item:after, .step-item.active ~ .step-item:before {
+  background: var(--tblr-steps-inactive-color);
+}
+
+.steps-counter {
+  --tblr-steps-dot-size: 1.5rem;
+  counter-reset: steps;
+}
+.steps-counter .step-item {
+  counter-increment: steps;
+}
+.steps-counter .step-item:before {
+  content: counter(steps);
+}
+
+.steps-vertical {
+  --tblr-steps-dot-offset: 6px;
+  flex-direction: column;
+}
+.steps-vertical.steps-counter {
+  --tblr-steps-dot-offset: -2px;
+}
+.steps-vertical .step-item {
+  text-align: right;
+  padding-top: 0;
+  padding-right: calc(var(--tblr-steps-dot-size) + 1rem);
+  min-height: auto;
+}
+.steps-vertical .step-item:not(:first-child) {
+  margin-top: 1rem;
+}
+.steps-vertical .step-item:before {
+  top: var(--tblr-steps-dot-offset);
+  right: 0;
+  transform: translate(0, 0);
+}
+.steps-vertical .step-item:not(:last-child):after {
+  position: absolute;
+  content: "";
+  transform: translateX(50%);
+  top: var(--tblr-steps-dot-offset);
+  right: calc(var(--tblr-steps-dot-size) * 0.5);
+  width: var(--tblr-steps-border-width);
+  height: calc(100% + 1rem);
+}
+
+@keyframes status-pulsate-main {
+  40% {
+    transform: scale(1.25, 1.25);
+  }
+  60% {
+    transform: scale(1.25, 1.25);
+  }
+}
+@keyframes status-pulsate-secondary {
+  10% {
+    transform: scale(1, 1);
+  }
+  30% {
+    transform: scale(3, 3);
+  }
+  80% {
+    transform: scale(3, 3);
+  }
+  100% {
+    transform: scale(1, 1);
+  }
+}
+@keyframes status-pulsate-tertiary {
+  25% {
+    transform: scale(1, 1);
+  }
+  80% {
+    transform: scale(3, 3);
+    opacity: 0;
+  }
+  100% {
+    transform: scale(3, 3);
+    opacity: 0;
+  }
+}
+.status {
+  --tblr-status-height: 1.5rem;
+  --tblr-status-color: #667382;
+  --tblr-status-color-rgb: 102, 115, 130;
+  display: inline-flex;
+  align-items: center;
+  height: var(--tblr-status-height);
+  padding: 0.25rem 0.75rem;
+  gap: 0.5rem;
+  color: var(--tblr-status-color);
+  background: rgba(var(--tblr-status-color-rgb), 0.1);
+  font-size: 0.875rem;
+  text-transform: none;
+  letter-spacing: normal;
+  border-radius: 100rem;
+  font-weight: var(--tblr-font-weight-medium);
+  line-height: 1;
+  margin: 0;
+}
+.status .status-dot {
+  background: var(--tblr-status-color);
+}
+.status .icon {
+  font-size: 1.25rem;
+}
+
+.status-lite {
+  border: var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color) !important;
+  background: transparent !important;
+  color: var(--tblr-body-color) !important;
+}
+
+.status-primary {
+  --tblr-status-color: #0054a6;
+  --tblr-status-color-rgb: 0, 84, 166;
+}
+
+.status-secondary {
+  --tblr-status-color: #667382;
+  --tblr-status-color-rgb: 102, 115, 130;
+}
+
+.status-success {
+  --tblr-status-color: #2fb344;
+  --tblr-status-color-rgb: 47, 179, 68;
+}
+
+.status-info {
+  --tblr-status-color: #4299e1;
+  --tblr-status-color-rgb: 66, 153, 225;
+}
+
+.status-warning {
+  --tblr-status-color: #f76707;
+  --tblr-status-color-rgb: 247, 103, 7;
+}
+
+.status-danger {
+  --tblr-status-color: #d63939;
+  --tblr-status-color-rgb: 214, 57, 57;
+}
+
+.status-light {
+  --tblr-status-color: #fcfdfe;
+  --tblr-status-color-rgb: 252, 253, 254;
+}
+
+.status-dark {
+  --tblr-status-color: #182433;
+  --tblr-status-color-rgb: 24, 36, 51;
+}
+
+.status-muted {
+  --tblr-status-color: #667382;
+  --tblr-status-color-rgb: 102, 115, 130;
+}
+
+.status-blue {
+  --tblr-status-color: #0054a6;
+  --tblr-status-color-rgb: 0, 84, 166;
+}
+
+.status-azure {
+  --tblr-status-color: #4299e1;
+  --tblr-status-color-rgb: 66, 153, 225;
+}
+
+.status-indigo {
+  --tblr-status-color: #4263eb;
+  --tblr-status-color-rgb: 66, 99, 235;
+}
+
+.status-purple {
+  --tblr-status-color: #ae3ec9;
+  --tblr-status-color-rgb: 174, 62, 201;
+}
+
+.status-pink {
+  --tblr-status-color: #d6336c;
+  --tblr-status-color-rgb: 214, 51, 108;
+}
+
+.status-red {
+  --tblr-status-color: #d63939;
+  --tblr-status-color-rgb: 214, 57, 57;
+}
+
+.status-orange {
+  --tblr-status-color: #f76707;
+  --tblr-status-color-rgb: 247, 103, 7;
+}
+
+.status-yellow {
+  --tblr-status-color: #f59f00;
+  --tblr-status-color-rgb: 245, 159, 0;
+}
+
+.status-lime {
+  --tblr-status-color: #74b816;
+  --tblr-status-color-rgb: 116, 184, 22;
+}
+
+.status-green {
+  --tblr-status-color: #2fb344;
+  --tblr-status-color-rgb: 47, 179, 68;
+}
+
+.status-teal {
+  --tblr-status-color: #0ca678;
+  --tblr-status-color-rgb: 12, 166, 120;
+}
+
+.status-cyan {
+  --tblr-status-color: #17a2b8;
+  --tblr-status-color-rgb: 23, 162, 184;
+}
+
+.status-facebook {
+  --tblr-status-color: #1877f2;
+  --tblr-status-color-rgb: 24, 119, 242;
+}
+
+.status-twitter {
+  --tblr-status-color: #1da1f2;
+  --tblr-status-color-rgb: 29, 161, 242;
+}
+
+.status-linkedin {
+  --tblr-status-color: #0a66c2;
+  --tblr-status-color-rgb: 10, 102, 194;
+}
+
+.status-google {
+  --tblr-status-color: #dc4e41;
+  --tblr-status-color-rgb: 220, 78, 65;
+}
+
+.status-youtube {
+  --tblr-status-color: #ff0000;
+  --tblr-status-color-rgb: 255, 0, 0;
+}
+
+.status-vimeo {
+  --tblr-status-color: #1ab7ea;
+  --tblr-status-color-rgb: 26, 183, 234;
+}
+
+.status-dribbble {
+  --tblr-status-color: #ea4c89;
+  --tblr-status-color-rgb: 234, 76, 137;
+}
+
+.status-github {
+  --tblr-status-color: #181717;
+  --tblr-status-color-rgb: 24, 23, 23;
+}
+
+.status-instagram {
+  --tblr-status-color: #e4405f;
+  --tblr-status-color-rgb: 228, 64, 95;
+}
+
+.status-pinterest {
+  --tblr-status-color: #bd081c;
+  --tblr-status-color-rgb: 189, 8, 28;
+}
+
+.status-vk {
+  --tblr-status-color: #6383a8;
+  --tblr-status-color-rgb: 99, 131, 168;
+}
+
+.status-rss {
+  --tblr-status-color: #ffa500;
+  --tblr-status-color-rgb: 255, 165, 0;
+}
+
+.status-flickr {
+  --tblr-status-color: #0063dc;
+  --tblr-status-color-rgb: 0, 99, 220;
+}
+
+.status-bitbucket {
+  --tblr-status-color: #0052cc;
+  --tblr-status-color-rgb: 0, 82, 204;
+}
+
+.status-tabler {
+  --tblr-status-color: #0054a6;
+  --tblr-status-color-rgb: 0, 84, 166;
+}
+
+.status-dot {
+  --tblr-status-dot-color: var(--tblr-status-color, #667382);
+  --tblr-status-size: 0.5rem;
+  position: relative;
+  display: inline-block;
+  width: var(--tblr-status-size);
+  height: var(--tblr-status-size);
+  background: var(--tblr-status-dot-color);
+  border-radius: 100rem;
+}
+
+.status-dot-animated:before {
+  content: "";
+  position: absolute;
+  inset: 0;
+  z-index: 0;
+  background: inherit;
+  border-radius: inherit;
+  opacity: 0.6;
+  animation: 1s linear 2s backwards infinite status-pulsate-tertiary;
+}
+
+.status-indicator {
+  --tblr-status-indicator-size: 2.5rem;
+  --tblr-status-indicator-color: var(--tblr-status-color, #667382);
+  display: block;
+  position: relative;
+  width: var(--tblr-status-indicator-size);
+  height: var(--tblr-status-indicator-size);
+}
+
+.status-indicator-circle {
+  --tblr-status-circle-size: .75rem;
+  position: absolute;
+  right: 50%;
+  top: 50%;
+  margin: calc(var(--tblr-status-circle-size) / -2) calc(var(--tblr-status-circle-size) / -2) 0 0;
+  width: var(--tblr-status-circle-size);
+  height: var(--tblr-status-circle-size);
+  border-radius: 100rem;
+  background: var(--tblr-status-color);
+}
+.status-indicator-circle:nth-child(1) {
+  z-index: 3;
+}
+.status-indicator-circle:nth-child(2) {
+  z-index: 2;
+  opacity: 0.1;
+}
+.status-indicator-circle:nth-child(3) {
+  z-index: 1;
+  opacity: 0.3;
+}
+
+.status-indicator-animated .status-indicator-circle:nth-child(1) {
+  animation: 2s linear 1s infinite backwards status-pulsate-main;
+}
+.status-indicator-animated .status-indicator-circle:nth-child(2) {
+  animation: 2s linear 1s infinite backwards status-pulsate-secondary;
+}
+.status-indicator-animated .status-indicator-circle:nth-child(3) {
+  animation: 2s linear 1s infinite backwards status-pulsate-tertiary;
+}
+
+.switch-icon {
+  display: inline-block;
+  line-height: 1;
+  border: 0;
+  padding: 0;
+  background: transparent;
+  width: 1.25rem;
+  height: 1.25rem;
+  vertical-align: bottom;
+  position: relative;
+  cursor: pointer;
+}
+.switch-icon.disabled {
+  pointer-events: none;
+  opacity: 0.4;
+}
+.switch-icon:focus {
+  outline: none;
+}
+.switch-icon svg {
+  display: block;
+  width: 100%;
+  height: 100%;
+}
+.switch-icon .switch-icon-a,
+.switch-icon .switch-icon-b {
+  display: block;
+  width: 100%;
+  height: 100%;
+}
+.switch-icon .switch-icon-a {
+  opacity: 1;
+}
+.switch-icon .switch-icon-b {
+  position: absolute;
+  top: 0;
+  right: 0;
+  opacity: 0;
+}
+.switch-icon.active .switch-icon-a {
+  opacity: 0;
+}
+.switch-icon.active .switch-icon-b {
+  opacity: 1;
+}
+
+.switch-icon-fade .switch-icon-a,
+.switch-icon-fade .switch-icon-b {
+  transition: opacity 0.5s;
+}
+@media (prefers-reduced-motion: reduce) {
+  .switch-icon-fade .switch-icon-a,
+  .switch-icon-fade .switch-icon-b {
+    transition: none;
+  }
+}
+
+.switch-icon-scale .switch-icon-a,
+.switch-icon-scale .switch-icon-b {
+  transition: opacity 0.5s, transform 0s 0.5s;
+}
+@media (prefers-reduced-motion: reduce) {
+  .switch-icon-scale .switch-icon-a,
+  .switch-icon-scale .switch-icon-b {
+    transition: none;
+  }
+}
+.switch-icon-scale .switch-icon-b {
+  transform: scale(1.5);
+}
+.switch-icon-scale.active .switch-icon-a,
+.switch-icon-scale.active .switch-icon-b {
+  transition: opacity 0s, transform 0.5s;
+}
+@media (prefers-reduced-motion: reduce) {
+  .switch-icon-scale.active .switch-icon-a,
+  .switch-icon-scale.active .switch-icon-b {
+    transition: none;
+  }
+}
+.switch-icon-scale.active .switch-icon-b {
+  transform: scale(1);
+}
+
+.switch-icon-flip {
+  perspective: 10em;
+}
+.switch-icon-flip .switch-icon-a,
+.switch-icon-flip .switch-icon-b {
+  -webkit-backface-visibility: hidden;
+          backface-visibility: hidden;
+  transform-style: preserve-3d;
+  transition: opacity 0s 0.2s, transform 0.4s ease-in-out;
+}
+@media (prefers-reduced-motion: reduce) {
+  .switch-icon-flip .switch-icon-a,
+  .switch-icon-flip .switch-icon-b {
+    transition: none;
+  }
+}
+.switch-icon-flip .switch-icon-a {
+  opacity: 1;
+  transform: rotateY(0deg);
+}
+.switch-icon-flip .switch-icon-b {
+  opacity: 1;
+  transform: rotateY(180deg);
+}
+.switch-icon-flip.active .switch-icon-a {
+  opacity: 1;
+  transform: rotateY(-180deg);
+}
+.switch-icon-flip.active .switch-icon-b {
+  opacity: 1;
+  transform: rotateY(0deg);
+}
+
+.switch-icon-slide-up,
+.switch-icon-slide-right,
+.switch-icon-slide-left,
+.switch-icon-slide-down {
+  overflow: hidden;
+}
+.switch-icon-slide-up .switch-icon-a,
+.switch-icon-slide-up .switch-icon-b,
+.switch-icon-slide-right .switch-icon-a,
+.switch-icon-slide-right .switch-icon-b,
+.switch-icon-slide-left .switch-icon-a,
+.switch-icon-slide-left .switch-icon-b,
+.switch-icon-slide-down .switch-icon-a,
+.switch-icon-slide-down .switch-icon-b {
+  transition: opacity 0.3s, transform 0.3s;
+}
+@media (prefers-reduced-motion: reduce) {
+  .switch-icon-slide-up .switch-icon-a,
+  .switch-icon-slide-up .switch-icon-b,
+  .switch-icon-slide-right .switch-icon-a,
+  .switch-icon-slide-right .switch-icon-b,
+  .switch-icon-slide-left .switch-icon-a,
+  .switch-icon-slide-left .switch-icon-b,
+  .switch-icon-slide-down .switch-icon-a,
+  .switch-icon-slide-down .switch-icon-b {
+    transition: none;
+  }
+}
+.switch-icon-slide-up .switch-icon-a,
+.switch-icon-slide-right .switch-icon-a,
+.switch-icon-slide-left .switch-icon-a,
+.switch-icon-slide-down .switch-icon-a {
+  transform: translateY(0);
+}
+.switch-icon-slide-up .switch-icon-b,
+.switch-icon-slide-right .switch-icon-b,
+.switch-icon-slide-left .switch-icon-b,
+.switch-icon-slide-down .switch-icon-b {
+  transform: translateY(100%);
+}
+.switch-icon-slide-up.active .switch-icon-a,
+.switch-icon-slide-right.active .switch-icon-a,
+.switch-icon-slide-left.active .switch-icon-a,
+.switch-icon-slide-down.active .switch-icon-a {
+  transform: translateY(-100%);
+}
+.switch-icon-slide-up.active .switch-icon-b,
+.switch-icon-slide-right.active .switch-icon-b,
+.switch-icon-slide-left.active .switch-icon-b,
+.switch-icon-slide-down.active .switch-icon-b {
+  transform: translateY(0);
+}
+
+.switch-icon-slide-right .switch-icon-a {
+  transform: translateX(0);
+}
+.switch-icon-slide-left .switch-icon-b {
+  transform: translateX(-100%);
+}
+.switch-icon-slide-left.active .switch-icon-a {
+  transform: translateX(100%);
+}
+.switch-icon-slide-right.active .switch-icon-b {
+  transform: translateX(0);
+}
+
+.switch-icon-slide-left .switch-icon-a {
+  transform: translateX(0);
+}
+.switch-icon-slide-right .switch-icon-b {
+  transform: translateX(100%);
+}
+.switch-icon-slide-right.active .switch-icon-a {
+  transform: translateX(-100%);
+}
+.switch-icon-slide-left.active .switch-icon-b {
+  transform: translateX(0);
+}
+
+.switch-icon-slide-down .switch-icon-a {
+  transform: translateY(0);
+}
+.switch-icon-slide-down .switch-icon-b {
+  transform: translateY(-100%);
+}
+.switch-icon-slide-down.active .switch-icon-a {
+  transform: translateY(100%);
+}
+.switch-icon-slide-down.active .switch-icon-b {
+  transform: translateY(0);
+}
+
+.table thead th, .markdown > table thead th {
+  color: var(--tblr-secondary);
+  background: var(--tblr-bg-surface-tertiary);
+  font-size: 0.625rem;
+  font-weight: var(--tblr-font-weight-bold);
+  text-transform: uppercase;
+  letter-spacing: 0.04em;
+  line-height: 1rem;
+  color: var(--tblr-secondary);
+  padding-top: 0.5rem;
+  padding-bottom: 0.5rem;
+  white-space: nowrap;
+}
+@media print {
+  .table thead th, .markdown > table thead th {
+    background: transparent;
+  }
+}
+
+.table-responsive .table, .table-responsive .markdown > table {
+  margin-bottom: 0;
+}
+.table-responsive + .card-footer {
+  border-top: 0;
+}
+
+.table-transparent thead th {
+  background: transparent;
+}
+
+.table-nowrap > :not(caption) > * > * {
+  white-space: nowrap;
+}
+
+.table-vcenter > :not(caption) > * > * {
+  vertical-align: middle;
+}
+
+.table-center > :not(caption) > * > * {
+  text-align: center;
+}
+
+.td-truncate {
+  max-width: 1px;
+  width: 100%;
+}
+
+.table-mobile {
+  display: block;
+}
+.table-mobile thead {
+  display: none;
+}
+.table-mobile tbody,
+.table-mobile tr {
+  display: flex;
+  flex-direction: column;
+}
+.table-mobile td {
+  display: block;
+  padding: 0.75rem 0.75rem !important;
+  border: none;
+  color: var(--tblr-body-color) !important;
+}
+.table-mobile td[data-label]:before {
+  font-size: 0.625rem;
+  font-weight: var(--tblr-font-weight-bold);
+  text-transform: uppercase;
+  letter-spacing: 0.04em;
+  line-height: 1rem;
+  color: var(--tblr-secondary);
+  content: attr(data-label);
+  display: block;
+}
+.table-mobile tr {
+  border-bottom: var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent);
+}
+.table-mobile .btn {
+  display: block;
+}
+@media (max-width: 575.98px) {
+  .table-mobile-sm {
+    display: block;
+  }
+  .table-mobile-sm thead {
+    display: none;
+  }
+  .table-mobile-sm tbody,
+  .table-mobile-sm tr {
+    display: flex;
+    flex-direction: column;
+  }
+  .table-mobile-sm td {
+    display: block;
+    padding: 0.75rem 0.75rem !important;
+    border: none;
+    color: var(--tblr-body-color) !important;
+  }
+  .table-mobile-sm td[data-label]:before {
+    font-size: 0.625rem;
+    font-weight: var(--tblr-font-weight-bold);
+    text-transform: uppercase;
+    letter-spacing: 0.04em;
+    line-height: 1rem;
+    color: var(--tblr-secondary);
+    content: attr(data-label);
+    display: block;
+  }
+  .table-mobile-sm tr {
+    border-bottom: var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent);
+  }
+  .table-mobile-sm .btn {
+    display: block;
+  }
+}
+@media (max-width: 767.98px) {
+  .table-mobile-md {
+    display: block;
+  }
+  .table-mobile-md thead {
+    display: none;
+  }
+  .table-mobile-md tbody,
+  .table-mobile-md tr {
+    display: flex;
+    flex-direction: column;
+  }
+  .table-mobile-md td {
+    display: block;
+    padding: 0.75rem 0.75rem !important;
+    border: none;
+    color: var(--tblr-body-color) !important;
+  }
+  .table-mobile-md td[data-label]:before {
+    font-size: 0.625rem;
+    font-weight: var(--tblr-font-weight-bold);
+    text-transform: uppercase;
+    letter-spacing: 0.04em;
+    line-height: 1rem;
+    color: var(--tblr-secondary);
+    content: attr(data-label);
+    display: block;
+  }
+  .table-mobile-md tr {
+    border-bottom: var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent);
+  }
+  .table-mobile-md .btn {
+    display: block;
+  }
+}
+@media (max-width: 991.98px) {
+  .table-mobile-lg {
+    display: block;
+  }
+  .table-mobile-lg thead {
+    display: none;
+  }
+  .table-mobile-lg tbody,
+  .table-mobile-lg tr {
+    display: flex;
+    flex-direction: column;
+  }
+  .table-mobile-lg td {
+    display: block;
+    padding: 0.75rem 0.75rem !important;
+    border: none;
+    color: var(--tblr-body-color) !important;
+  }
+  .table-mobile-lg td[data-label]:before {
+    font-size: 0.625rem;
+    font-weight: var(--tblr-font-weight-bold);
+    text-transform: uppercase;
+    letter-spacing: 0.04em;
+    line-height: 1rem;
+    color: var(--tblr-secondary);
+    content: attr(data-label);
+    display: block;
+  }
+  .table-mobile-lg tr {
+    border-bottom: var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent);
+  }
+  .table-mobile-lg .btn {
+    display: block;
+  }
+}
+@media (max-width: 1199.98px) {
+  .table-mobile-xl {
+    display: block;
+  }
+  .table-mobile-xl thead {
+    display: none;
+  }
+  .table-mobile-xl tbody,
+  .table-mobile-xl tr {
+    display: flex;
+    flex-direction: column;
+  }
+  .table-mobile-xl td {
+    display: block;
+    padding: 0.75rem 0.75rem !important;
+    border: none;
+    color: var(--tblr-body-color) !important;
+  }
+  .table-mobile-xl td[data-label]:before {
+    font-size: 0.625rem;
+    font-weight: var(--tblr-font-weight-bold);
+    text-transform: uppercase;
+    letter-spacing: 0.04em;
+    line-height: 1rem;
+    color: var(--tblr-secondary);
+    content: attr(data-label);
+    display: block;
+  }
+  .table-mobile-xl tr {
+    border-bottom: var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent);
+  }
+  .table-mobile-xl .btn {
+    display: block;
+  }
+}
+@media (max-width: 1399.98px) {
+  .table-mobile-xxl {
+    display: block;
+  }
+  .table-mobile-xxl thead {
+    display: none;
+  }
+  .table-mobile-xxl tbody,
+  .table-mobile-xxl tr {
+    display: flex;
+    flex-direction: column;
+  }
+  .table-mobile-xxl td {
+    display: block;
+    padding: 0.75rem 0.75rem !important;
+    border: none;
+    color: var(--tblr-body-color) !important;
+  }
+  .table-mobile-xxl td[data-label]:before {
+    font-size: 0.625rem;
+    font-weight: var(--tblr-font-weight-bold);
+    text-transform: uppercase;
+    letter-spacing: 0.04em;
+    line-height: 1rem;
+    color: var(--tblr-secondary);
+    content: attr(data-label);
+    display: block;
+  }
+  .table-mobile-xxl tr {
+    border-bottom: var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent);
+  }
+  .table-mobile-xxl .btn {
+    display: block;
+  }
+}
+
+/**
+Table sort
+ */
+.table-sort {
+  font: inherit;
+  color: inherit;
+  text-transform: inherit;
+  letter-spacing: inherit;
+  border: 0;
+  background: inherit;
+  display: block;
+  width: 100%;
+  text-align: inherit;
+  transition: color 0.3s;
+  margin: -0.5rem -0.75rem;
+  padding: 0.5rem 0.75rem;
+}
+@media (prefers-reduced-motion: reduce) {
+  .table-sort {
+    transition: none;
+  }
+}
+.table-sort:hover, .table-sort.asc, .table-sort.desc {
+  color: var(--tblr-body-color);
+}
+.table-sort:after {
+  content: "";
+  display: inline-flex;
+  width: 1rem;
+  height: 1rem;
+  vertical-align: bottom;
+  -webkit-mask-image: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' width='16' height='16' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='1'><path d='M5 7l3 -3l3 3'/><path d='M5 10l3 3l3 -3'/></svg>");
+          mask-image: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' width='16' height='16' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='1'><path d='M5 7l3 -3l3 3'/><path d='M5 10l3 3l3 -3'/></svg>");
+  background: currentColor;
+  margin-right: 0.25rem;
+}
+.table-sort.asc:after {
+  -webkit-mask-image: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' width='16' height='16'><path fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='1' d='M5 10l3 -3l3 3'/></svg>");
+          mask-image: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' width='16' height='16'><path fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='1' d='M5 10l3 -3l3 3'/></svg>");
+}
+.table-sort.desc:after {
+  -webkit-mask-image: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' width='16' height='16'><path fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='1' d='M5 7l3 3l3 -3'/></svg>");
+          mask-image: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' width='16' height='16'><path fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='1' d='M5 7l3 3l3 -3'/></svg>");
+}
+
+.table-borderless thead th {
+  background: transparent;
+}
+
+.tag {
+  --tblr-tag-height: 1.5rem;
+  border: 1px solid var(--tblr-border-color);
+  display: inline-flex;
+  align-items: center;
+  height: var(--tblr-tag-height);
+  border-radius: var(--tblr-border-radius);
+  padding: 0 0.5rem;
+  background: var(--tblr-bg-surface);
+  box-shadow: var(--tblr-box-shadow-input);
+  gap: 0.5rem;
+}
+.tag .btn-close {
+  margin-left: -0.25rem;
+  margin-right: -0.125rem;
+  padding: 0;
+  width: 1rem;
+  height: 1rem;
+  font-size: 0.5rem;
+}
+
+.tag-badge {
+  --tblr-badge-font-size: 0.625rem;
+  --tblr-badge-padding-x: .25rem;
+  --tblr-badge-padding-y: .125rem;
+  margin-left: -0.25rem;
+}
+
+.tag-avatar,
+.tag-flag,
+.tag-payment,
+.tag-icon,
+.tag-check {
+  margin-right: -0.25rem;
+}
+
+.tag-icon {
+  color: var(--tblr-secondary);
+  margin-left: -0.125rem;
+  width: 1rem;
+  height: 1rem;
+}
+
+.tag-check {
+  width: 1rem;
+  height: 1rem;
+  background-size: 1rem;
+}
+
+.tags-list {
+  --tblr-list-gap: 0.5rem;
+  display: flex;
+  flex-wrap: wrap;
+  gap: var(--tblr-list-gap);
+}
+
+.toast {
+  background: #ffffff;
+  border: var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent);
+  box-shadow: rgba(24, 36, 51, 0.04) 0 2px 4px 0;
+}
+.toast .toast-header {
+  -webkit-user-select: none;
+     -moz-user-select: none;
+      -ms-user-select: none;
+          user-select: none;
+}
+.toast button[data-bs-dismiss=toast] {
+  outline: none;
+}
+
+.toast-primary {
+  --tblr-toast-color: #0054a6;
+}
+
+.toast-secondary {
+  --tblr-toast-color: #667382;
+}
+
+.toast-success {
+  --tblr-toast-color: #2fb344;
+}
+
+.toast-info {
+  --tblr-toast-color: #4299e1;
+}
+
+.toast-warning {
+  --tblr-toast-color: #f76707;
+}
+
+.toast-danger {
+  --tblr-toast-color: #d63939;
+}
+
+.toast-light {
+  --tblr-toast-color: #fcfdfe;
+}
+
+.toast-dark {
+  --tblr-toast-color: #182433;
+}
+
+.toast-muted {
+  --tblr-toast-color: #667382;
+}
+
+.toast-blue {
+  --tblr-toast-color: #0054a6;
+}
+
+.toast-azure {
+  --tblr-toast-color: #4299e1;
+}
+
+.toast-indigo {
+  --tblr-toast-color: #4263eb;
+}
+
+.toast-purple {
+  --tblr-toast-color: #ae3ec9;
+}
+
+.toast-pink {
+  --tblr-toast-color: #d6336c;
+}
+
+.toast-red {
+  --tblr-toast-color: #d63939;
+}
+
+.toast-orange {
+  --tblr-toast-color: #f76707;
+}
+
+.toast-yellow {
+  --tblr-toast-color: #f59f00;
+}
+
+.toast-lime {
+  --tblr-toast-color: #74b816;
+}
+
+.toast-green {
+  --tblr-toast-color: #2fb344;
+}
+
+.toast-teal {
+  --tblr-toast-color: #0ca678;
+}
+
+.toast-cyan {
+  --tblr-toast-color: #17a2b8;
+}
+
+.toast-facebook {
+  --tblr-toast-color: #1877f2;
+}
+
+.toast-twitter {
+  --tblr-toast-color: #1da1f2;
+}
+
+.toast-linkedin {
+  --tblr-toast-color: #0a66c2;
+}
+
+.toast-google {
+  --tblr-toast-color: #dc4e41;
+}
+
+.toast-youtube {
+  --tblr-toast-color: #ff0000;
+}
+
+.toast-vimeo {
+  --tblr-toast-color: #1ab7ea;
+}
+
+.toast-dribbble {
+  --tblr-toast-color: #ea4c89;
+}
+
+.toast-github {
+  --tblr-toast-color: #181717;
+}
+
+.toast-instagram {
+  --tblr-toast-color: #e4405f;
+}
+
+.toast-pinterest {
+  --tblr-toast-color: #bd081c;
+}
+
+.toast-vk {
+  --tblr-toast-color: #6383a8;
+}
+
+.toast-rss {
+  --tblr-toast-color: #ffa500;
+}
+
+.toast-flickr {
+  --tblr-toast-color: #0063dc;
+}
+
+.toast-bitbucket {
+  --tblr-toast-color: #0052cc;
+}
+
+.toast-tabler {
+  --tblr-toast-color: #0054a6;
+}
+
+.toolbar {
+  display: flex;
+  flex-wrap: nowrap;
+  flex-shrink: 0;
+  margin: 0 -0.5rem;
+}
+.toolbar > * {
+  margin: 0 0.5rem;
+}
+
+.tracking {
+  --tblr-tracking-height: 1.5rem;
+  --tblr-tracking-gap-width: 0.125rem;
+  --tblr-tracking-block-border-radius: var(--tblr-border-radius);
+  display: flex;
+  gap: var(--tblr-tracking-gap-width);
+}
+
+.tracking-squares {
+  --tblr-tracking-block-border-radius: var(--tblr-border-radius-sm);
+}
+.tracking-squares .tracking-block {
+  height: auto;
+}
+.tracking-squares .tracking-block:before {
+  content: "";
+  display: block;
+  padding-top: 100%;
+}
+
+.tracking-block {
+  flex: 1;
+  border-radius: var(--tblr-tracking-block-border-radius);
+  height: var(--tblr-tracking-height);
+  min-width: 0.25rem;
+  background: var(--tblr-border-color);
+}
+
+.timeline {
+  --tblr-timeline-icon-size: 2.5rem;
+  position: relative;
+  list-style: none;
+  padding: 0;
+}
+
+.timeline-event {
+  position: relative;
+}
+.timeline-event:not(:last-child) {
+  margin-bottom: var(--tblr-page-padding);
+}
+.timeline-event:not(:last-child):before {
+  content: "";
+  position: absolute;
+  top: var(--tblr-timeline-icon-size);
+  right: calc(var(--tblr-timeline-icon-size) / 2);
+  bottom: calc(-1 * var(--tblr-page-padding));
+  width: var(--tblr-border-width);
+  background-color: var(--tblr-border-color);
+  border-radius: var(--tblr-border-radius);
+}
+
+.timeline-event-icon {
+  position: absolute;
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  width: var(--tblr-timeline-icon-size, 2.5rem);
+  height: var(--tblr-timeline-icon-size, 2.5rem);
+  background: var(--tblr-gray-200);
+  color: var(--tblr-secondary);
+  border-radius: var(--tblr-border-radius);
+  z-index: 5;
+}
+
+.timeline-event-card {
+  margin-right: calc(var(--tblr-timeline-icon-size, 2.5rem) + var(--tblr-page-padding));
+}
+
+.timeline-simple .timeline-event-icon {
+  display: none;
+}
+.timeline-simple .timeline-event-card {
+  margin-right: 0;
+}
+
+/**
+Horizontal rules
+ */
+/**
+Hr text
+ */
+.hr-text {
+  display: flex;
+  align-items: center;
+  margin: 2rem 0;
+  font-size: 0.625rem;
+  font-weight: var(--tblr-font-weight-bold);
+  text-transform: uppercase;
+  letter-spacing: 0.04em;
+  line-height: 1rem;
+  color: var(--tblr-secondary);
+  height: 1px;
+}
+.hr-text:after, .hr-text:before {
+  flex: 1 1 auto;
+  height: 1px;
+  background-color: var(--tblr-border-color);
+}
+.hr-text:before {
+  content: "";
+  margin-left: 0.5rem;
+}
+.hr-text:after {
+  content: "";
+  margin-right: 0.5rem;
+}
+.hr-text > *:first-child {
+  padding-left: 0.5rem;
+  padding-right: 0;
+  color: var(--tblr-secondary);
+}
+.hr-text.hr-text-right:before {
+  content: none;
+}
+.hr-text.hr-text-left > *:first-child {
+  padding-left: 0.5rem;
+  padding-right: 0.5rem;
+}
+.hr-text.hr-text-left:before {
+  content: "";
+}
+.hr-text.hr-text-left:after {
+  content: none;
+}
+.hr-text.hr-text-right > *:first-child {
+  padding-left: 0;
+  padding-right: 0.5rem;
+}
+.card > .hr-text {
+  margin: 0;
+}
+
+.hr-text-spaceless {
+  margin: -0.5rem 0;
+}
+
+.lead {
+  line-height: 1.4;
+}
+
+a {
+  -webkit-text-decoration-skip: ink;
+          text-decoration-skip-ink: auto;
+}
+
+h1 a,
+h2 a,
+h3 a,
+h4 a,
+h5 a,
+h6 a,
+.h1 a,
+.h2 a,
+.h3 a,
+.h4 a,
+.h5 a,
+.h6 a {
+  color: inherit;
+}
+h1 a:hover,
+h2 a:hover,
+h3 a:hover,
+h4 a:hover,
+h5 a:hover,
+h6 a:hover,
+.h1 a:hover,
+.h2 a:hover,
+.h3 a:hover,
+.h4 a:hover,
+.h5 a:hover,
+.h6 a:hover {
+  color: inherit;
+}
+
+h1,
+.h1 {
+  font-size: var(--tblr-font-size-h1);
+  line-height: var(--tblr-line-height-h1);
+}
+
+h2,
+.h2 {
+  font-size: var(--tblr-font-size-h2);
+  line-height: var(--tblr-line-height-h2);
+}
+
+h3,
+.h3 {
+  font-size: var(--tblr-font-size-h3);
+  line-height: var(--tblr-line-height-h3);
+}
+
+h4,
+.h4 {
+  font-size: var(--tblr-font-size-h4);
+  line-height: var(--tblr-line-height-h4);
+}
+
+h5,
+.h5 {
+  font-size: var(--tblr-font-size-h5);
+  line-height: var(--tblr-line-height-h5);
+}
+
+h6,
+.h6 {
+  font-size: var(--tblr-font-size-h6);
+  line-height: var(--tblr-line-height-h6);
+}
+
+strong,
+.strong,
+b {
+  font-weight: var(--tblr-font-weight-bold);
+}
+
+blockquote {
+  padding-right: 1rem;
+  border-right: 2px var(--tblr-border-style) var(--tblr-border-color);
+}
+blockquote p {
+  margin-bottom: 1rem;
+}
+blockquote cite {
+  display: block;
+  text-align: left;
+}
+blockquote cite:before {
+  content: "— ";
+}
+
+ul, ol {
+  padding-right: 1.5rem;
+}
+
+hr, .hr {
+  margin: 2rem 0;
+}
+
+dl dd:last-child {
+  margin-bottom: 0;
+}
+
+pre {
+  padding: 1rem;
+  background: var(--tblr-bg-surface-dark);
+  color: var(--tblr-light);
+  border-radius: var(--tblr-border-radius);
+}
+pre code {
+  background: transparent;
+}
+
+code {
+  background: var(--tblr-code-bg);
+  padding: 2px 4px;
+  border-radius: var(--tblr-border-radius);
+}
+
+kbd,
+.kbd {
+  border: var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color);
+  display: inline-block;
+  box-sizing: border-box;
+  max-width: 100%;
+  font-size: var(--tblr-font-size-h5);
+  font-weight: var(--tblr-font-weight-medium);
+  line-height: 1;
+  vertical-align: baseline;
+  border-radius: var(--tblr-border-radius);
+}
+
+img {
+  max-width: 100%;
+}
+
+.list-unstyled {
+  margin-right: 0;
+}
+
+/**
+Selection
+ */
+::-moz-selection {
+  background-color: rgba(var(--tblr-primary-rgb), 0.16);
+}
+::selection {
+  background-color: rgba(var(--tblr-primary-rgb), 0.16);
+}
+
+/**
+Links
+ */
+[class^=link-].disabled, [class*=" link-"].disabled {
+  color: var(--tblr-disabled-color);
+  pointer-events: none;
+}
+
+/**
+Subheader
+ */
+.subheader {
+  font-size: 0.625rem;
+  font-weight: var(--tblr-font-weight-bold);
+  text-transform: uppercase;
+  letter-spacing: 0.04em;
+  line-height: 1rem;
+  color: var(--tblr-secondary);
+}
+
+.chart {
+  display: block;
+  min-height: 10rem;
+}
+.chart text {
+  font-family: inherit;
+}
+
+.chart-sm {
+  height: 2.5rem;
+}
+
+.chart-lg {
+  height: 15rem;
+}
+
+.chart-square {
+  height: 5.75rem;
+}
+
+/**
+Chart sparkline
+ */
+.chart-sparkline {
+  position: relative;
+  width: 4rem;
+  height: 2.5rem;
+  line-height: 1;
+  min-height: 0 !important;
+}
+
+.chart-sparkline-sm {
+  height: 1.5rem;
+}
+
+.chart-sparkline-square {
+  width: 2.5rem;
+}
+
+.chart-sparkline-wide {
+  width: 6rem;
+}
+
+.chart-sparkline-label {
+  position: absolute;
+  top: 0;
+  left: 0;
+  bottom: 0;
+  right: 0;
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  font-size: 0.625rem;
+}
+.chart-sparkline-label .icon {
+  width: 1rem;
+  height: 1rem;
+  font-size: 1rem;
+}
+
+.offcanvas-header {
+  border-bottom: var(--tblr-border-width) var(--tblr-border-style) rgba(4, 32, 69, 0.14);
+}
+
+.offcanvas-footer {
+  padding: 1.5rem 1.5rem;
+}
+
+.offcanvas-title {
+  font-size: 1rem;
+  font-weight: var(--tblr-font-weight-medium);
+  line-height: 1.5rem;
+}
+
+.offcanvas-narrow {
+  width: 20rem;
+}
+
+.chat-bubbles {
+  display: flex;
+  flex-direction: column;
+  gap: 1rem;
+}
+
+.chat-bubble {
+  background: var(--tblr-bg-surface-secondary);
+  border-radius: var(--tblr-border-radius-lg);
+  padding: 1rem;
+  position: relative;
+}
+
+.chat-bubble-me {
+  background-color: var(--tblr-primary-lt);
+  box-shadow: none;
+}
+
+.chat-bubble-title {
+  margin-bottom: 0.25rem;
+}
+
+.chat-bubble-author {
+  font-weight: 600;
+}
+
+.chat-bubble-date {
+  color: var(--tblr-secondary);
+}
+
+.chat-bubble-body > *:last-child {
+  margin-bottom: 0;
+}
+
+.bg-white-overlay {
+  color: #ffffff;
+  background-color: rgba(252, 253, 254, 0.24);
+}
+
+.bg-dark-overlay {
+  color: #ffffff;
+  background-color: rgba(24, 36, 51, 0.24);
+}
+
+.bg-cover {
+  background-repeat: no-repeat;
+  background-size: cover;
+  background-position: center;
+}
+
+.bg-primary {
+  --tblr-bg-opacity: 1;
+  background-color: rgba(var(--tblr-primary-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.bg-primary-lt {
+  --tblr-bg-opacity: 1;
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-primary-rgb), var(--tblr-text-opacity)) !important;
+  background-color: rgba(var(--tblr-primary-lt-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.border-primary {
+  border-color: #0054a6 !important;
+}
+
+.bg-secondary {
+  --tblr-bg-opacity: 1;
+  background-color: rgba(var(--tblr-secondary-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.bg-secondary-lt {
+  --tblr-bg-opacity: 1;
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-secondary-rgb), var(--tblr-text-opacity)) !important;
+  background-color: rgba(var(--tblr-secondary-lt-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.border-secondary {
+  border-color: #667382 !important;
+}
+
+.bg-success {
+  --tblr-bg-opacity: 1;
+  background-color: rgba(var(--tblr-success-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.bg-success-lt {
+  --tblr-bg-opacity: 1;
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-success-rgb), var(--tblr-text-opacity)) !important;
+  background-color: rgba(var(--tblr-success-lt-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.border-success {
+  border-color: #2fb344 !important;
+}
+
+.bg-info {
+  --tblr-bg-opacity: 1;
+  background-color: rgba(var(--tblr-info-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.bg-info-lt {
+  --tblr-bg-opacity: 1;
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-info-rgb), var(--tblr-text-opacity)) !important;
+  background-color: rgba(var(--tblr-info-lt-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.border-info {
+  border-color: #4299e1 !important;
+}
+
+.bg-warning {
+  --tblr-bg-opacity: 1;
+  background-color: rgba(var(--tblr-warning-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.bg-warning-lt {
+  --tblr-bg-opacity: 1;
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-warning-rgb), var(--tblr-text-opacity)) !important;
+  background-color: rgba(var(--tblr-warning-lt-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.border-warning {
+  border-color: #f76707 !important;
+}
+
+.bg-danger {
+  --tblr-bg-opacity: 1;
+  background-color: rgba(var(--tblr-danger-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.bg-danger-lt {
+  --tblr-bg-opacity: 1;
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-danger-rgb), var(--tblr-text-opacity)) !important;
+  background-color: rgba(var(--tblr-danger-lt-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.border-danger {
+  border-color: #d63939 !important;
+}
+
+.bg-light {
+  --tblr-bg-opacity: 1;
+  background-color: rgba(var(--tblr-light-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.bg-light-lt {
+  --tblr-bg-opacity: 1;
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-light-rgb), var(--tblr-text-opacity)) !important;
+  background-color: rgba(var(--tblr-light-lt-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.border-light {
+  border-color: #fcfdfe !important;
+}
+
+.bg-dark {
+  --tblr-bg-opacity: 1;
+  background-color: rgba(var(--tblr-dark-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.bg-dark-lt {
+  --tblr-bg-opacity: 1;
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-dark-rgb), var(--tblr-text-opacity)) !important;
+  background-color: rgba(var(--tblr-dark-lt-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.border-dark {
+  border-color: #182433 !important;
+}
+
+.bg-muted {
+  --tblr-bg-opacity: 1;
+  background-color: rgba(var(--tblr-muted-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.bg-muted-lt {
+  --tblr-bg-opacity: 1;
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-muted-rgb), var(--tblr-text-opacity)) !important;
+  background-color: rgba(var(--tblr-muted-lt-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.border-muted {
+  border-color: #667382 !important;
+}
+
+.bg-blue {
+  --tblr-bg-opacity: 1;
+  background-color: rgba(var(--tblr-blue-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.bg-blue-lt {
+  --tblr-bg-opacity: 1;
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-blue-rgb), var(--tblr-text-opacity)) !important;
+  background-color: rgba(var(--tblr-blue-lt-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.border-blue {
+  border-color: #0054a6 !important;
+}
+
+.bg-azure {
+  --tblr-bg-opacity: 1;
+  background-color: rgba(var(--tblr-azure-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.bg-azure-lt {
+  --tblr-bg-opacity: 1;
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-azure-rgb), var(--tblr-text-opacity)) !important;
+  background-color: rgba(var(--tblr-azure-lt-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.border-azure {
+  border-color: #4299e1 !important;
+}
+
+.bg-indigo {
+  --tblr-bg-opacity: 1;
+  background-color: rgba(var(--tblr-indigo-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.bg-indigo-lt {
+  --tblr-bg-opacity: 1;
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-indigo-rgb), var(--tblr-text-opacity)) !important;
+  background-color: rgba(var(--tblr-indigo-lt-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.border-indigo {
+  border-color: #4263eb !important;
+}
+
+.bg-purple {
+  --tblr-bg-opacity: 1;
+  background-color: rgba(var(--tblr-purple-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.bg-purple-lt {
+  --tblr-bg-opacity: 1;
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-purple-rgb), var(--tblr-text-opacity)) !important;
+  background-color: rgba(var(--tblr-purple-lt-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.border-purple {
+  border-color: #ae3ec9 !important;
+}
+
+.bg-pink {
+  --tblr-bg-opacity: 1;
+  background-color: rgba(var(--tblr-pink-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.bg-pink-lt {
+  --tblr-bg-opacity: 1;
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-pink-rgb), var(--tblr-text-opacity)) !important;
+  background-color: rgba(var(--tblr-pink-lt-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.border-pink {
+  border-color: #d6336c !important;
+}
+
+.bg-red {
+  --tblr-bg-opacity: 1;
+  background-color: rgba(var(--tblr-red-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.bg-red-lt {
+  --tblr-bg-opacity: 1;
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-red-rgb), var(--tblr-text-opacity)) !important;
+  background-color: rgba(var(--tblr-red-lt-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.border-red {
+  border-color: #d63939 !important;
+}
+
+.bg-orange {
+  --tblr-bg-opacity: 1;
+  background-color: rgba(var(--tblr-orange-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.bg-orange-lt {
+  --tblr-bg-opacity: 1;
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-orange-rgb), var(--tblr-text-opacity)) !important;
+  background-color: rgba(var(--tblr-orange-lt-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.border-orange {
+  border-color: #f76707 !important;
+}
+
+.bg-yellow {
+  --tblr-bg-opacity: 1;
+  background-color: rgba(var(--tblr-yellow-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.bg-yellow-lt {
+  --tblr-bg-opacity: 1;
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-yellow-rgb), var(--tblr-text-opacity)) !important;
+  background-color: rgba(var(--tblr-yellow-lt-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.border-yellow {
+  border-color: #f59f00 !important;
+}
+
+.bg-lime {
+  --tblr-bg-opacity: 1;
+  background-color: rgba(var(--tblr-lime-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.bg-lime-lt {
+  --tblr-bg-opacity: 1;
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-lime-rgb), var(--tblr-text-opacity)) !important;
+  background-color: rgba(var(--tblr-lime-lt-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.border-lime {
+  border-color: #74b816 !important;
+}
+
+.bg-green {
+  --tblr-bg-opacity: 1;
+  background-color: rgba(var(--tblr-green-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.bg-green-lt {
+  --tblr-bg-opacity: 1;
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-green-rgb), var(--tblr-text-opacity)) !important;
+  background-color: rgba(var(--tblr-green-lt-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.border-green {
+  border-color: #2fb344 !important;
+}
+
+.bg-teal {
+  --tblr-bg-opacity: 1;
+  background-color: rgba(var(--tblr-teal-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.bg-teal-lt {
+  --tblr-bg-opacity: 1;
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-teal-rgb), var(--tblr-text-opacity)) !important;
+  background-color: rgba(var(--tblr-teal-lt-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.border-teal {
+  border-color: #0ca678 !important;
+}
+
+.bg-cyan {
+  --tblr-bg-opacity: 1;
+  background-color: rgba(var(--tblr-cyan-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.bg-cyan-lt {
+  --tblr-bg-opacity: 1;
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-cyan-rgb), var(--tblr-text-opacity)) !important;
+  background-color: rgba(var(--tblr-cyan-lt-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.border-cyan {
+  border-color: #17a2b8 !important;
+}
+
+.bg-facebook {
+  --tblr-bg-opacity: 1;
+  background-color: rgba(var(--tblr-facebook-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.bg-facebook-lt {
+  --tblr-bg-opacity: 1;
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-facebook-rgb), var(--tblr-text-opacity)) !important;
+  background-color: rgba(var(--tblr-facebook-lt-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.border-facebook {
+  border-color: #1877f2 !important;
+}
+
+.bg-twitter {
+  --tblr-bg-opacity: 1;
+  background-color: rgba(var(--tblr-twitter-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.bg-twitter-lt {
+  --tblr-bg-opacity: 1;
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-twitter-rgb), var(--tblr-text-opacity)) !important;
+  background-color: rgba(var(--tblr-twitter-lt-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.border-twitter {
+  border-color: #1da1f2 !important;
+}
+
+.bg-linkedin {
+  --tblr-bg-opacity: 1;
+  background-color: rgba(var(--tblr-linkedin-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.bg-linkedin-lt {
+  --tblr-bg-opacity: 1;
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-linkedin-rgb), var(--tblr-text-opacity)) !important;
+  background-color: rgba(var(--tblr-linkedin-lt-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.border-linkedin {
+  border-color: #0a66c2 !important;
+}
+
+.bg-google {
+  --tblr-bg-opacity: 1;
+  background-color: rgba(var(--tblr-google-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.bg-google-lt {
+  --tblr-bg-opacity: 1;
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-google-rgb), var(--tblr-text-opacity)) !important;
+  background-color: rgba(var(--tblr-google-lt-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.border-google {
+  border-color: #dc4e41 !important;
+}
+
+.bg-youtube {
+  --tblr-bg-opacity: 1;
+  background-color: rgba(var(--tblr-youtube-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.bg-youtube-lt {
+  --tblr-bg-opacity: 1;
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-youtube-rgb), var(--tblr-text-opacity)) !important;
+  background-color: rgba(var(--tblr-youtube-lt-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.border-youtube {
+  border-color: #ff0000 !important;
+}
+
+.bg-vimeo {
+  --tblr-bg-opacity: 1;
+  background-color: rgba(var(--tblr-vimeo-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.bg-vimeo-lt {
+  --tblr-bg-opacity: 1;
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-vimeo-rgb), var(--tblr-text-opacity)) !important;
+  background-color: rgba(var(--tblr-vimeo-lt-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.border-vimeo {
+  border-color: #1ab7ea !important;
+}
+
+.bg-dribbble {
+  --tblr-bg-opacity: 1;
+  background-color: rgba(var(--tblr-dribbble-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.bg-dribbble-lt {
+  --tblr-bg-opacity: 1;
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-dribbble-rgb), var(--tblr-text-opacity)) !important;
+  background-color: rgba(var(--tblr-dribbble-lt-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.border-dribbble {
+  border-color: #ea4c89 !important;
+}
+
+.bg-github {
+  --tblr-bg-opacity: 1;
+  background-color: rgba(var(--tblr-github-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.bg-github-lt {
+  --tblr-bg-opacity: 1;
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-github-rgb), var(--tblr-text-opacity)) !important;
+  background-color: rgba(var(--tblr-github-lt-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.border-github {
+  border-color: #181717 !important;
+}
+
+.bg-instagram {
+  --tblr-bg-opacity: 1;
+  background-color: rgba(var(--tblr-instagram-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.bg-instagram-lt {
+  --tblr-bg-opacity: 1;
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-instagram-rgb), var(--tblr-text-opacity)) !important;
+  background-color: rgba(var(--tblr-instagram-lt-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.border-instagram {
+  border-color: #e4405f !important;
+}
+
+.bg-pinterest {
+  --tblr-bg-opacity: 1;
+  background-color: rgba(var(--tblr-pinterest-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.bg-pinterest-lt {
+  --tblr-bg-opacity: 1;
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-pinterest-rgb), var(--tblr-text-opacity)) !important;
+  background-color: rgba(var(--tblr-pinterest-lt-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.border-pinterest {
+  border-color: #bd081c !important;
+}
+
+.bg-vk {
+  --tblr-bg-opacity: 1;
+  background-color: rgba(var(--tblr-vk-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.bg-vk-lt {
+  --tblr-bg-opacity: 1;
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-vk-rgb), var(--tblr-text-opacity)) !important;
+  background-color: rgba(var(--tblr-vk-lt-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.border-vk {
+  border-color: #6383a8 !important;
+}
+
+.bg-rss {
+  --tblr-bg-opacity: 1;
+  background-color: rgba(var(--tblr-rss-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.bg-rss-lt {
+  --tblr-bg-opacity: 1;
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-rss-rgb), var(--tblr-text-opacity)) !important;
+  background-color: rgba(var(--tblr-rss-lt-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.border-rss {
+  border-color: #ffa500 !important;
+}
+
+.bg-flickr {
+  --tblr-bg-opacity: 1;
+  background-color: rgba(var(--tblr-flickr-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.bg-flickr-lt {
+  --tblr-bg-opacity: 1;
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-flickr-rgb), var(--tblr-text-opacity)) !important;
+  background-color: rgba(var(--tblr-flickr-lt-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.border-flickr {
+  border-color: #0063dc !important;
+}
+
+.bg-bitbucket {
+  --tblr-bg-opacity: 1;
+  background-color: rgba(var(--tblr-bitbucket-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.bg-bitbucket-lt {
+  --tblr-bg-opacity: 1;
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-bitbucket-rgb), var(--tblr-text-opacity)) !important;
+  background-color: rgba(var(--tblr-bitbucket-lt-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.border-bitbucket {
+  border-color: #0052cc !important;
+}
+
+.bg-tabler {
+  --tblr-bg-opacity: 1;
+  background-color: rgba(var(--tblr-tabler-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.bg-tabler-lt {
+  --tblr-bg-opacity: 1;
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-tabler-rgb), var(--tblr-text-opacity)) !important;
+  background-color: rgba(var(--tblr-tabler-lt-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.border-tabler {
+  border-color: #0054a6 !important;
+}
+
+.bg-white {
+  --tblr-bg-opacity: 1;
+  background-color: rgba(var(--tblr-white-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.bg-white-lt {
+  --tblr-bg-opacity: 1;
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-white-rgb), var(--tblr-text-opacity)) !important;
+  background-color: rgba(var(--tblr-white-lt-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.border-white {
+  border-color: #ffffff !important;
+}
+
+.text-primary {
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-primary-rgb), var(--tblr-text-opacity)) !important;
+}
+
+.text-primary-fg {
+  color: var(--tblr-primary-fg) !important;
+}
+
+.text-secondary {
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-secondary-rgb), var(--tblr-text-opacity)) !important;
+}
+
+.text-secondary-fg {
+  color: var(--tblr-secondary-fg) !important;
+}
+
+.text-success {
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-success-rgb), var(--tblr-text-opacity)) !important;
+}
+
+.text-success-fg {
+  color: var(--tblr-success-fg) !important;
+}
+
+.text-info {
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-info-rgb), var(--tblr-text-opacity)) !important;
+}
+
+.text-info-fg {
+  color: var(--tblr-info-fg) !important;
+}
+
+.text-warning {
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-warning-rgb), var(--tblr-text-opacity)) !important;
+}
+
+.text-warning-fg {
+  color: var(--tblr-warning-fg) !important;
+}
+
+.text-danger {
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-danger-rgb), var(--tblr-text-opacity)) !important;
+}
+
+.text-danger-fg {
+  color: var(--tblr-danger-fg) !important;
+}
+
+.text-light {
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-light-rgb), var(--tblr-text-opacity)) !important;
+}
+
+.text-light-fg {
+  color: var(--tblr-light-fg) !important;
+}
+
+.text-dark {
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-dark-rgb), var(--tblr-text-opacity)) !important;
+}
+
+.text-dark-fg {
+  color: var(--tblr-dark-fg) !important;
+}
+
+.text-muted {
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-muted-rgb), var(--tblr-text-opacity)) !important;
+}
+
+.text-muted-fg {
+  color: var(--tblr-muted-fg) !important;
+}
+
+.text-blue {
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-blue-rgb), var(--tblr-text-opacity)) !important;
+}
+
+.text-blue-fg {
+  color: var(--tblr-blue-fg) !important;
+}
+
+.text-azure {
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-azure-rgb), var(--tblr-text-opacity)) !important;
+}
+
+.text-azure-fg {
+  color: var(--tblr-azure-fg) !important;
+}
+
+.text-indigo {
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-indigo-rgb), var(--tblr-text-opacity)) !important;
+}
+
+.text-indigo-fg {
+  color: var(--tblr-indigo-fg) !important;
+}
+
+.text-purple {
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-purple-rgb), var(--tblr-text-opacity)) !important;
+}
+
+.text-purple-fg {
+  color: var(--tblr-purple-fg) !important;
+}
+
+.text-pink {
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-pink-rgb), var(--tblr-text-opacity)) !important;
+}
+
+.text-pink-fg {
+  color: var(--tblr-pink-fg) !important;
+}
+
+.text-red {
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-red-rgb), var(--tblr-text-opacity)) !important;
+}
+
+.text-red-fg {
+  color: var(--tblr-red-fg) !important;
+}
+
+.text-orange {
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-orange-rgb), var(--tblr-text-opacity)) !important;
+}
+
+.text-orange-fg {
+  color: var(--tblr-orange-fg) !important;
+}
+
+.text-yellow {
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-yellow-rgb), var(--tblr-text-opacity)) !important;
+}
+
+.text-yellow-fg {
+  color: var(--tblr-yellow-fg) !important;
+}
+
+.text-lime {
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-lime-rgb), var(--tblr-text-opacity)) !important;
+}
+
+.text-lime-fg {
+  color: var(--tblr-lime-fg) !important;
+}
+
+.text-green {
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-green-rgb), var(--tblr-text-opacity)) !important;
+}
+
+.text-green-fg {
+  color: var(--tblr-green-fg) !important;
+}
+
+.text-teal {
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-teal-rgb), var(--tblr-text-opacity)) !important;
+}
+
+.text-teal-fg {
+  color: var(--tblr-teal-fg) !important;
+}
+
+.text-cyan {
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-cyan-rgb), var(--tblr-text-opacity)) !important;
+}
+
+.text-cyan-fg {
+  color: var(--tblr-cyan-fg) !important;
+}
+
+.text-facebook {
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-facebook-rgb), var(--tblr-text-opacity)) !important;
+}
+
+.text-facebook-fg {
+  color: var(--tblr-facebook-fg) !important;
+}
+
+.text-twitter {
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-twitter-rgb), var(--tblr-text-opacity)) !important;
+}
+
+.text-twitter-fg {
+  color: var(--tblr-twitter-fg) !important;
+}
+
+.text-linkedin {
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-linkedin-rgb), var(--tblr-text-opacity)) !important;
+}
+
+.text-linkedin-fg {
+  color: var(--tblr-linkedin-fg) !important;
+}
+
+.text-google {
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-google-rgb), var(--tblr-text-opacity)) !important;
+}
+
+.text-google-fg {
+  color: var(--tblr-google-fg) !important;
+}
+
+.text-youtube {
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-youtube-rgb), var(--tblr-text-opacity)) !important;
+}
+
+.text-youtube-fg {
+  color: var(--tblr-youtube-fg) !important;
+}
+
+.text-vimeo {
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-vimeo-rgb), var(--tblr-text-opacity)) !important;
+}
+
+.text-vimeo-fg {
+  color: var(--tblr-vimeo-fg) !important;
+}
+
+.text-dribbble {
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-dribbble-rgb), var(--tblr-text-opacity)) !important;
+}
+
+.text-dribbble-fg {
+  color: var(--tblr-dribbble-fg) !important;
+}
+
+.text-github {
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-github-rgb), var(--tblr-text-opacity)) !important;
+}
+
+.text-github-fg {
+  color: var(--tblr-github-fg) !important;
+}
+
+.text-instagram {
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-instagram-rgb), var(--tblr-text-opacity)) !important;
+}
+
+.text-instagram-fg {
+  color: var(--tblr-instagram-fg) !important;
+}
+
+.text-pinterest {
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-pinterest-rgb), var(--tblr-text-opacity)) !important;
+}
+
+.text-pinterest-fg {
+  color: var(--tblr-pinterest-fg) !important;
+}
+
+.text-vk {
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-vk-rgb), var(--tblr-text-opacity)) !important;
+}
+
+.text-vk-fg {
+  color: var(--tblr-vk-fg) !important;
+}
+
+.text-rss {
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-rss-rgb), var(--tblr-text-opacity)) !important;
+}
+
+.text-rss-fg {
+  color: var(--tblr-rss-fg) !important;
+}
+
+.text-flickr {
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-flickr-rgb), var(--tblr-text-opacity)) !important;
+}
+
+.text-flickr-fg {
+  color: var(--tblr-flickr-fg) !important;
+}
+
+.text-bitbucket {
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-bitbucket-rgb), var(--tblr-text-opacity)) !important;
+}
+
+.text-bitbucket-fg {
+  color: var(--tblr-bitbucket-fg) !important;
+}
+
+.text-tabler {
+  --tblr-text-opacity: 1;
+  color: rgba(var(--tblr-tabler-rgb), var(--tblr-text-opacity)) !important;
+}
+
+.text-tabler-fg {
+  color: var(--tblr-tabler-fg) !important;
+}
+
+.bg-gray-50 {
+  --tblr-bg-opacity: .1;
+  background-color: rgba(var(--tblr-gray-50-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.text-gray-50-fg {
+  color: #182433 !important;
+}
+
+.bg-gray-100 {
+  --tblr-bg-opacity: .1;
+  background-color: rgba(var(--tblr-gray-100-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.text-gray-100-fg {
+  color: #182433 !important;
+}
+
+.bg-gray-200 {
+  --tblr-bg-opacity: .1;
+  background-color: rgba(var(--tblr-gray-200-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.text-gray-200-fg {
+  color: #182433 !important;
+}
+
+.bg-gray-300 {
+  --tblr-bg-opacity: .1;
+  background-color: rgba(var(--tblr-gray-300-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.text-gray-300-fg {
+  color: #182433 !important;
+}
+
+.bg-gray-400 {
+  --tblr-bg-opacity: .1;
+  background-color: rgba(var(--tblr-gray-400-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.text-gray-400-fg {
+  color: #fcfdfe !important;
+}
+
+.bg-gray-500 {
+  --tblr-bg-opacity: .1;
+  background-color: rgba(var(--tblr-gray-500-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.text-gray-500-fg {
+  color: #fcfdfe !important;
+}
+
+.bg-gray-600 {
+  --tblr-bg-opacity: .1;
+  background-color: rgba(var(--tblr-gray-600-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.text-gray-600-fg {
+  color: #fcfdfe !important;
+}
+
+.bg-gray-700 {
+  --tblr-bg-opacity: .1;
+  background-color: rgba(var(--tblr-gray-700-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.text-gray-700-fg {
+  color: #fcfdfe !important;
+}
+
+.bg-gray-800 {
+  --tblr-bg-opacity: .1;
+  background-color: rgba(var(--tblr-gray-800-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.text-gray-800-fg {
+  color: #fcfdfe !important;
+}
+
+.bg-gray-900 {
+  --tblr-bg-opacity: .1;
+  background-color: rgba(var(--tblr-gray-900-rgb), var(--tblr-bg-opacity)) !important;
+}
+
+.text-gray-900-fg {
+  color: #fcfdfe !important;
+}
+
+/*
+Scrollable
+*/
+.scrollable {
+  overflow-x: hidden;
+  overflow-y: auto;
+  -webkit-overflow-scrolling: touch;
+}
+.scrollable.hover {
+  overflow-y: hidden;
+}
+.scrollable.hover > * {
+  margin-top: -1px;
+}
+.scrollable.hover:hover, .scrollable.hover:focus, .scrollable.hover:active {
+  overflow: visible;
+  overflow-y: auto;
+}
+.touch .scrollable {
+  overflow-y: auto !important;
+}
+
+.scroll-x,
+.scroll-y {
+  overflow: hidden;
+  -webkit-overflow-scrolling: touch;
+}
+
+.scroll-y {
+  overflow-y: auto;
+}
+
+.scroll-x {
+  overflow-x: auto;
+}
+
+.no-scroll {
+  overflow: hidden;
+}
+
+.w-0 {
+  width: 0 !important;
+}
+
+.h-0 {
+  height: 0 !important;
+}
+
+.w-1 {
+  width: 0.25rem !important;
+}
+
+.h-1 {
+  height: 0.25rem !important;
+}
+
+.w-2 {
+  width: 0.5rem !important;
+}
+
+.h-2 {
+  height: 0.5rem !important;
+}
+
+.w-3 {
+  width: 1rem !important;
+}
+
+.h-3 {
+  height: 1rem !important;
+}
+
+.w-4 {
+  width: 1.5rem !important;
+}
+
+.h-4 {
+  height: 1.5rem !important;
+}
+
+.w-5 {
+  width: 2rem !important;
+}
+
+.h-5 {
+  height: 2rem !important;
+}
+
+.w-6 {
+  width: 3rem !important;
+}
+
+.h-6 {
+  height: 3rem !important;
+}
+
+.w-7 {
+  width: 5rem !important;
+}
+
+.h-7 {
+  height: 5rem !important;
+}
+
+.w-8 {
+  width: 8rem !important;
+}
+
+.h-8 {
+  height: 8rem !important;
+}
+
+.w-auto {
+  width: auto !important;
+}
+
+.h-auto {
+  height: auto !important;
+}
+
+.w-px {
+  width: 1px !important;
+}
+
+.h-px {
+  height: 1px !important;
+}
+
+.w-full {
+  width: 100% !important;
+}
+
+.h-full {
+  height: 100% !important;
+}
+
+.opacity-0 {
+  opacity: 0 !important;
+}
+
+.opacity-5 {
+  opacity: 0.05 !important;
+}
+
+.opacity-10 {
+  opacity: 0.1 !important;
+}
+
+.opacity-15 {
+  opacity: 0.15 !important;
+}
+
+.opacity-20 {
+  opacity: 0.2 !important;
+}
+
+.opacity-25 {
+  opacity: 0.25 !important;
+}
+
+.opacity-30 {
+  opacity: 0.3 !important;
+}
+
+.opacity-35 {
+  opacity: 0.35 !important;
+}
+
+.opacity-40 {
+  opacity: 0.4 !important;
+}
+
+.opacity-45 {
+  opacity: 0.45 !important;
+}
+
+.opacity-50 {
+  opacity: 0.5 !important;
+}
+
+.opacity-55 {
+  opacity: 0.55 !important;
+}
+
+.opacity-60 {
+  opacity: 0.6 !important;
+}
+
+.opacity-65 {
+  opacity: 0.65 !important;
+}
+
+.opacity-70 {
+  opacity: 0.7 !important;
+}
+
+.opacity-75 {
+  opacity: 0.75 !important;
+}
+
+.opacity-80 {
+  opacity: 0.8 !important;
+}
+
+.opacity-85 {
+  opacity: 0.85 !important;
+}
+
+.opacity-90 {
+  opacity: 0.9 !important;
+}
+
+.opacity-95 {
+  opacity: 0.95 !important;
+}
+
+.opacity-100 {
+  opacity: 1 !important;
+}
+
+.hover-shadow-sm:hover {
+  box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075) !important;
+}
+
+.hover-shadow:hover {
+  box-shadow: rgba(var(--tblr-body-color-rgb), 0.04) 0 2px 4px 0 !important;
+}
+
+.hover-shadow-lg:hover {
+  box-shadow: 0 1rem 3rem rgba(0, 0, 0, 0.175) !important;
+}
+
+.hover-shadow-none:hover {
+  box-shadow: none !important;
+}
+
+/**
+Antialiasing
+ */
+.antialiased {
+  -webkit-font-smoothing: antialiased;
+  -moz-osx-font-smoothing: grayscale;
+}
+
+.subpixel-antialiased {
+  -webkit-font-smoothing: auto;
+  -moz-osx-font-smoothing: auto;
+}

Різницю між файлами не показано, бо вона завелика
+ 8 - 0
public/css/tabler.rtl.min.css


+ 3 - 3
public/js/demo-theme.js

@@ -1,6 +1,6 @@
 /*!
-* Tabler v1.0.0-beta19 (https://tabler.io)
-* @version 1.0.0-beta19
+* Tabler v1.0.0-beta20 (https://tabler.io)
+* @version 1.0.0-beta20
 * @link https://tabler.io
 * Copyright 2018-2023 The Tabler Authors
 * Copyright 2018-2023 codecalm.net Paweł Kuna
@@ -12,7 +12,7 @@
 })((function () { 'use strict';
 
 	var themeStorageKey = "tablerTheme";
-	var defaultTheme = "dark";
+	var defaultTheme = "light";
 	var selectedTheme;
 	var params = new Proxy(new URLSearchParams(window.location.search), {
 	  get: function get(searchParams, prop) {

+ 9 - 0
public/js/demo-theme.min.js

@@ -0,0 +1,9 @@
+/*!
+* Tabler v1.0.0-beta20 (https://tabler.io)
+* @version 1.0.0-beta20
+* @link https://tabler.io
+* Copyright 2018-2023 The Tabler Authors
+* Copyright 2018-2023 codecalm.net Paweł Kuna
+* Licensed under MIT (https://github.com/tabler/tabler/blob/master/LICENSE)
+*/
+!function(e){"function"==typeof define&&define.amd?define(e):e()}((function(){"use strict";var e,t="tablerTheme",a=new Proxy(new URLSearchParams(window.location.search),{get:function(e,t){return e.get(t)}});if(a.theme)localStorage.setItem(t,a.theme),e=a.theme;else{var n=localStorage.getItem(t);e=n||"light"}"dark"===e?document.body.setAttribute("data-bs-theme",e):document.body.removeAttribute("data-bs-theme")}));

+ 2 - 2
public/js/demo.js

@@ -1,6 +1,6 @@
 /*!
-* Tabler v1.0.0-beta19 (https://tabler.io)
-* @version 1.0.0-beta19
+* Tabler v1.0.0-beta20 (https://tabler.io)
+* @version 1.0.0-beta20
 * @link https://tabler.io
 * Copyright 2018-2023 The Tabler Authors
 * Copyright 2018-2023 codecalm.net Paweł Kuna

+ 2 - 2
public/js/demo.min.js

@@ -1,6 +1,6 @@
 /*!
-* Tabler v1.0.0-beta19 (https://tabler.io)
-* @version 1.0.0-beta19
+* Tabler v1.0.0-beta20 (https://tabler.io)
+* @version 1.0.0-beta20
 * @link https://tabler.io
 * Copyright 2018-2023 The Tabler Authors
 * Copyright 2018-2023 codecalm.net Paweł Kuna

+ 27 - 0
public/js/dweebui.js

@@ -0,0 +1,27 @@
+var themeStorageKey = "tablerTheme";
+var defaultTheme = "dark";
+var selectedTheme;
+
+(function () {
+  'use strict';
+
+  var storedTheme = localStorage.getItem(themeStorageKey);
+  selectedTheme = storedTheme ? storedTheme : defaultTheme;
+
+  if (selectedTheme === 'dark') {
+    document.body.setAttribute("data-bs-theme", selectedTheme);
+  } else {
+    document.body.removeAttribute("data-bs-theme");
+  }
+})();
+
+function toggleTheme(button) {
+  if (button.value == 'dark-theme') {
+    document.body.setAttribute("data-bs-theme", 'dark');
+    localStorage.setItem(themeStorageKey, 'dark');
+  }
+  else if (button.value == 'light-theme') {
+    document.body.removeAttribute("data-bs-theme");
+    localStorage.setItem(themeStorageKey, 'light');
+  }
+}

+ 282 - 347
public/js/htmx-sse.js

@@ -6,350 +6,285 @@ This extension adds support for Server Sent Events to htmx.  See /www/extensions
 */
 
 (function() {
-
-	/** @type {import("../htmx").HtmxInternalApi} */
-	var api;
-
-	htmx.defineExtension("sse", {
-
-		/**
-		 * Init saves the provided reference to the internal HTMX API.
-		 * 
-		 * @param {import("../htmx").HtmxInternalApi} api 
-		 * @returns void
-		 */
-		init: function(apiRef) {
-			// store a reference to the internal API.
-			api = apiRef;
-
-			// set a function in the public API for creating new EventSource objects
-			if (htmx.createEventSource == undefined) {
-				htmx.createEventSource = createEventSource;
-			}
-		},
-
-		/**
-		 * onEvent handles all events passed to this extension.
-		 * 
-		 * @param {string} name 
-		 * @param {Event} evt 
-		 * @returns void
-		 */
-		onEvent: function(name, evt) {
-
-			switch (name) {
-
-				case "htmx:beforeCleanupElement":
-					var internalData = api.getInternalData(evt.target)
-					// Try to remove remove an EventSource when elements are removed
-					if (internalData.sseEventSource) {
-						internalData.sseEventSource.close();
-					}
-
-					return;
-
-				// Try to create EventSources when elements are processed
-				case "htmx:afterProcessNode":
-					ensureEventSourceOnElement(evt.target);
-					registerSSE(evt.target);
-			}
-		}
-	});
-
-	///////////////////////////////////////////////
-	// HELPER FUNCTIONS
-	///////////////////////////////////////////////
-
-
-	/**
-	 * createEventSource is the default method for creating new EventSource objects.
-	 * it is hoisted into htmx.config.createEventSource to be overridden by the user, if needed.
-	 * 
-	 * @param {string} url 
-	 * @returns EventSource
-	 */
-	function createEventSource(url) {
-		return new EventSource(url, { withCredentials: true });
-	}
-
-	function splitOnWhitespace(trigger) {
-		return trigger.trim().split(/\s+/);
-	}
-
-	function getLegacySSEURL(elt) {
-		var legacySSEValue = api.getAttributeValue(elt, "hx-sse");
-		if (legacySSEValue) {
-			var values = splitOnWhitespace(legacySSEValue);
-			for (var i = 0; i < values.length; i++) {
-				var value = values[i].split(/:(.+)/);
-				if (value[0] === "connect") {
-					return value[1];
-				}
-			}
-		}
-	}
-
-	function getLegacySSESwaps(elt) {
-		var legacySSEValue = api.getAttributeValue(elt, "hx-sse");
-		var returnArr = [];
-		if (legacySSEValue != null) {
-			var values = splitOnWhitespace(legacySSEValue);
-			for (var i = 0; i < values.length; i++) {
-				var value = values[i].split(/:(.+)/);
-				if (value[0] === "swap") {
-					returnArr.push(value[1]);
-				}
-			}
-		}
-		return returnArr;
-	}
-
-	/**
-	 * registerSSE looks for attributes that can contain sse events, right 
-	 * now hx-trigger and sse-swap and adds listeners based on these attributes too
-	 * the closest event source
-	 *
-	 * @param {HTMLElement} elt
-	 */
-	function registerSSE(elt) {
-		// Find closest existing event source
-		var sourceElement = api.getClosestMatch(elt, hasEventSource);
-		if (sourceElement == null) {
-			// api.triggerErrorEvent(elt, "htmx:noSSESourceError")
-			return null; // no eventsource in parentage, orphaned element
-		}
-
-		// Set internalData and source
-		var internalData = api.getInternalData(sourceElement);
-		var source = internalData.sseEventSource;
-
-		// Add message handlers for every `sse-swap` attribute
-		queryAttributeOnThisOrChildren(elt, "sse-swap").forEach(function(child) {
-
-			var sseSwapAttr = api.getAttributeValue(child, "sse-swap");
-			if (sseSwapAttr) {
-				var sseEventNames = sseSwapAttr.split(",");
-			} else {
-				var sseEventNames = getLegacySSESwaps(child);
-			}
-
-			for (var i = 0; i < sseEventNames.length; i++) {
-				var sseEventName = sseEventNames[i].trim();
-				var listener = function(event) {
-
-					// If the source is missing then close SSE
-					if (maybeCloseSSESource(sourceElement)) {
-						return;
-					}
-
-					// If the body no longer contains the element, remove the listener
-					if (!api.bodyContains(child)) {
-						source.removeEventListener(sseEventName, listener);
-					}
-
-					// swap the response into the DOM and trigger a notification
-					swap(child, event.data);
-					api.triggerEvent(elt, "htmx:sseMessage", event);
-				};
-
-				// Register the new listener
-				api.getInternalData(child).sseEventListener = listener;
-				source.addEventListener(sseEventName, listener);
-			}
-		});
-
-		// Add message handlers for every `hx-trigger="sse:*"` attribute
-		queryAttributeOnThisOrChildren(elt, "hx-trigger").forEach(function(child) {
-
-			var sseEventName = api.getAttributeValue(child, "hx-trigger");
-			if (sseEventName == null) {
-				return;
-			}
-
-			// Only process hx-triggers for events with the "sse:" prefix
-			if (sseEventName.slice(0, 4) != "sse:") {
-				return;
-			}
-			
-			// remove the sse: prefix from here on out
-			sseEventName = sseEventName.substr(4);
-
-			var listener = function() {
-				if (maybeCloseSSESource(sourceElement)) {
-					return
-				}
-
-				if (!api.bodyContains(child)) {
-					source.removeEventListener(sseEventName, listener);
-				}
-			}
-		});
-	}
-
-	/**
-	 * ensureEventSourceOnElement creates a new EventSource connection on the provided element.
-	 * If a usable EventSource already exists, then it is returned.  If not, then a new EventSource
-	 * is created and stored in the element's internalData.
-	 * @param {HTMLElement} elt
-	 * @param {number} retryCount
-	 * @returns {EventSource | null}
-	 */
-	function ensureEventSourceOnElement(elt, retryCount) {
-
-		if (elt == null) {
-			return null;
-		}
-
-		// handle extension source creation attribute
-		queryAttributeOnThisOrChildren(elt, "sse-connect").forEach(function(child) {
-			var sseURL = api.getAttributeValue(child, "sse-connect");
-			if (sseURL == null) {
-				return;
-			}
-
-			ensureEventSource(child, sseURL, retryCount);
-		});
-
-		// handle legacy sse, remove for HTMX2
-		queryAttributeOnThisOrChildren(elt, "hx-sse").forEach(function(child) {
-			var sseURL = getLegacySSEURL(child);
-			if (sseURL == null) {
-				return;
-			}
-
-			ensureEventSource(child, sseURL, retryCount);
-		});
-
-	}
-
-	function ensureEventSource(elt, url, retryCount) {
-		var source = htmx.createEventSource(url);
-
-		source.onerror = function(err) {
-
-			// Log an error event
-			api.triggerErrorEvent(elt, "htmx:sseError", { error: err, source: source });
-
-			// If parent no longer exists in the document, then clean up this EventSource
-			if (maybeCloseSSESource(elt)) {
-				return;
-			}
-
-			// Otherwise, try to reconnect the EventSource
-			if (source.readyState === EventSource.CLOSED) {
-				retryCount = retryCount || 0;
-				var timeout = Math.random() * (2 ^ retryCount) * 500;
-				window.setTimeout(function() {
-					ensureEventSourceOnElement(elt, Math.min(7, retryCount + 1));
-				}, timeout);
-			}
-		};
-
-		source.onopen = function(evt) {
-			api.triggerEvent(elt, "htmx:sseOpen", { source: source });
-		}
-
-		api.getInternalData(elt).sseEventSource = source;
-	}
-
-	/**
-	 * maybeCloseSSESource confirms that the parent element still exists.
-	 * If not, then any associated SSE source is closed and the function returns true.
-	 * 
-	 * @param {HTMLElement} elt 
-	 * @returns boolean
-	 */
-	function maybeCloseSSESource(elt) {
-		if (!api.bodyContains(elt)) {
-			var source = api.getInternalData(elt).sseEventSource;
-			if (source != undefined) {
-				source.close();
-				// source = null
-				return true;
-			}
-		}
-		return false;
-	}
-
-	/**
-	 * queryAttributeOnThisOrChildren returns all nodes that contain the requested attributeName, INCLUDING THE PROVIDED ROOT ELEMENT.
-	 * 
-	 * @param {HTMLElement} elt 
-	 * @param {string} attributeName 
-	 */
-	function queryAttributeOnThisOrChildren(elt, attributeName) {
-
-		var result = [];
-
-		// If the parent element also contains the requested attribute, then add it to the results too.
-		if (api.hasAttribute(elt, attributeName)) {
-			result.push(elt);
-		}
-
-		// Search all child nodes that match the requested attribute
-		elt.querySelectorAll("[" + attributeName + "], [data-" + attributeName + "]").forEach(function(node) {
-			result.push(node);
-		});
-
-		return result;
-	}
-
-	/**
-	 * @param {HTMLElement} elt
-	 * @param {string} content 
-	 */
-	function swap(elt, content) {
-
-		api.withExtensions(elt, function(extension) {
-			content = extension.transformResponse(content, null, elt);
-		});
-
-		var swapSpec = api.getSwapSpecification(elt);
-		var target = api.getTarget(elt);
-		var settleInfo = api.makeSettleInfo(elt);
-
-		api.selectAndSwap(swapSpec.swapStyle, target, elt, content, settleInfo);
-
-		settleInfo.elts.forEach(function(elt) {
-			if (elt.classList) {
-				elt.classList.add(htmx.config.settlingClass);
-			}
-			api.triggerEvent(elt, 'htmx:beforeSettle');
-		});
-
-		// Handle settle tasks (with delay if requested)
-		if (swapSpec.settleDelay > 0) {
-			setTimeout(doSettle(settleInfo), swapSpec.settleDelay);
-		} else {
-			doSettle(settleInfo)();
-		}
-	}
-
-	/**
-	 * doSettle mirrors much of the functionality in htmx that 
-	 * settles elements after their content has been swapped.
-	 * TODO: this should be published by htmx, and not duplicated here
-	 * @param {import("../htmx").HtmxSettleInfo} settleInfo 
-	 * @returns () => void
-	 */
-	function doSettle(settleInfo) {
-
-		return function() {
-			settleInfo.tasks.forEach(function(task) {
-				task.call();
-			});
-
-			settleInfo.elts.forEach(function(elt) {
-				if (elt.classList) {
-					elt.classList.remove(htmx.config.settlingClass);
-				}
-				api.triggerEvent(elt, 'htmx:afterSettle');
-			});
-		}
-	}
-
-	function hasEventSource(node) {
-		return api.getInternalData(node).sseEventSource != null;
-	}
-
-})();
+  /** @type {import("../htmx").HtmxInternalApi} */
+  var api
+
+  htmx.defineExtension('sse', {
+
+    /**
+     * Init saves the provided reference to the internal HTMX API.
+     *
+     * @param {import("../htmx").HtmxInternalApi} api
+     * @returns void
+     */
+    init: function(apiRef) {
+      // store a reference to the internal API.
+      api = apiRef
+
+      // set a function in the public API for creating new EventSource objects
+      if (htmx.createEventSource == undefined) {
+        htmx.createEventSource = createEventSource
+      }
+    },
+
+    getSelectors: function() {
+      return ['[sse-connect]', '[data-sse-connect]', '[sse-swap]', '[data-sse-swap]']
+    },
+
+    /**
+     * onEvent handles all events passed to this extension.
+     *
+     * @param {string} name
+     * @param {Event} evt
+     * @returns void
+     */
+    onEvent: function(name, evt) {
+      var parent = evt.target || evt.detail.elt
+      switch (name) {
+        case 'htmx:beforeCleanupElement':
+          var internalData = api.getInternalData(parent)
+          // Try to remove remove an EventSource when elements are removed
+          var source = internalData.sseEventSource
+          if (source) {
+            api.triggerEvent(parent, 'htmx:sseClose', {
+              source,
+              type: 'nodeReplaced',
+            })
+            internalData.sseEventSource.close()
+          }
+
+          return
+
+        // Try to create EventSources when elements are processed
+        case 'htmx:afterProcessNode':
+          ensureEventSourceOnElement(parent)
+      }
+    }
+  })
+
+  /// ////////////////////////////////////////////
+  // HELPER FUNCTIONS
+  /// ////////////////////////////////////////////
+
+  /**
+   * createEventSource is the default method for creating new EventSource objects.
+   * it is hoisted into htmx.config.createEventSource to be overridden by the user, if needed.
+   *
+   * @param {string} url
+   * @returns EventSource
+   */
+  function createEventSource(url) {
+    return new EventSource(url, { withCredentials: true })
+  }
+
+  /**
+   * registerSSE looks for attributes that can contain sse events, right
+   * now hx-trigger and sse-swap and adds listeners based on these attributes too
+   * the closest event source
+   *
+   * @param {HTMLElement} elt
+   */
+  function registerSSE(elt) {
+    // Add message handlers for every `sse-swap` attribute
+    if (api.getAttributeValue(elt, 'sse-swap')) {
+      // Find closest existing event source
+      var sourceElement = api.getClosestMatch(elt, hasEventSource)
+      if (sourceElement == null) {
+        // api.triggerErrorEvent(elt, "htmx:noSSESourceError")
+        return null // no eventsource in parentage, orphaned element
+      }
+
+      // Set internalData and source
+      var internalData = api.getInternalData(sourceElement)
+      var source = internalData.sseEventSource
+
+      var sseSwapAttr = api.getAttributeValue(elt, 'sse-swap')
+      var sseEventNames = sseSwapAttr.split(',')
+
+      for (var i = 0; i < sseEventNames.length; i++) {
+        const sseEventName = sseEventNames[i].trim()
+        const listener = function(event) {
+          // If the source is missing then close SSE
+          if (maybeCloseSSESource(sourceElement)) {
+            return
+          }
+
+          // If the body no longer contains the element, remove the listener
+          if (!api.bodyContains(elt)) {
+            source.removeEventListener(sseEventName, listener)
+            return
+          }
+
+          // swap the response into the DOM and trigger a notification
+          if (!api.triggerEvent(elt, 'htmx:sseBeforeMessage', event)) {
+            return
+          }
+          swap(elt, event.data)
+          api.triggerEvent(elt, 'htmx:sseMessage', event)
+        }
+
+        // Register the new listener
+        api.getInternalData(elt).sseEventListener = listener
+        source.addEventListener(sseEventName, listener)
+      }
+    }
+
+    // Add message handlers for every `hx-trigger="sse:*"` attribute
+    if (api.getAttributeValue(elt, 'hx-trigger')) {
+      // Find closest existing event source
+      var sourceElement = api.getClosestMatch(elt, hasEventSource)
+      if (sourceElement == null) {
+        // api.triggerErrorEvent(elt, "htmx:noSSESourceError")
+        return null // no eventsource in parentage, orphaned element
+      }
+
+      // Set internalData and source
+      var internalData = api.getInternalData(sourceElement)
+      var source = internalData.sseEventSource
+
+      var triggerSpecs = api.getTriggerSpecs(elt)
+      triggerSpecs.forEach(function(ts) {
+        if (ts.trigger.slice(0, 4) !== 'sse:') {
+          return
+        }
+
+        var listener = function (event) {
+          if (maybeCloseSSESource(sourceElement)) {
+            return
+          }
+          if (!api.bodyContains(elt)) {
+            source.removeEventListener(ts.trigger.slice(4), listener)
+          }
+          // Trigger events to be handled by the rest of htmx
+          htmx.trigger(elt, ts.trigger, event)
+          htmx.trigger(elt, 'htmx:sseMessage', event)
+        }
+
+        // Register the new listener
+        api.getInternalData(elt).sseEventListener = listener
+        source.addEventListener(ts.trigger.slice(4), listener)
+      })
+    }
+  }
+
+  /**
+   * ensureEventSourceOnElement creates a new EventSource connection on the provided element.
+   * If a usable EventSource already exists, then it is returned.  If not, then a new EventSource
+   * is created and stored in the element's internalData.
+   * @param {HTMLElement} elt
+   * @param {number} retryCount
+   * @returns {EventSource | null}
+   */
+  function ensureEventSourceOnElement(elt, retryCount) {
+    if (elt == null) {
+      return null
+    }
+
+    // handle extension source creation attribute
+    if (api.getAttributeValue(elt, 'sse-connect')) {
+      var sseURL = api.getAttributeValue(elt, 'sse-connect')
+      if (sseURL == null) {
+        return
+      }
+
+      ensureEventSource(elt, sseURL, retryCount)
+    }
+
+    registerSSE(elt)
+  }
+
+  function ensureEventSource(elt, url, retryCount) {
+    var source = htmx.createEventSource(url)
+
+    source.onerror = function(err) {
+      // Log an error event
+      api.triggerErrorEvent(elt, 'htmx:sseError', { error: err, source })
+
+      // If parent no longer exists in the document, then clean up this EventSource
+      if (maybeCloseSSESource(elt)) {
+        return
+      }
+
+      // Otherwise, try to reconnect the EventSource
+      if (source.readyState === EventSource.CLOSED) {
+        retryCount = retryCount || 0
+        retryCount = Math.max(Math.min(retryCount * 2, 128), 1)
+        var timeout = retryCount * 500
+        window.setTimeout(function() {
+          ensureEventSourceOnElement(elt, retryCount)
+        }, timeout)
+      }
+    }
+
+    source.onopen = function(evt) {
+      api.triggerEvent(elt, 'htmx:sseOpen', { source })
+
+      if (retryCount && retryCount > 0) {
+        const childrenToFix = elt.querySelectorAll("[sse-swap], [data-sse-swap], [hx-trigger], [data-hx-trigger]")
+        for (let i = 0; i < childrenToFix.length; i++) {
+          registerSSE(childrenToFix[i])
+        }
+        // We want to increase the reconnection delay for consecutive failed attempts only
+        retryCount = 0
+      }
+    }
+
+    api.getInternalData(elt).sseEventSource = source
+
+
+    var closeAttribute = api.getAttributeValue(elt, "sse-close");
+    if (closeAttribute) {
+      // close eventsource when this message is received
+      source.addEventListener(closeAttribute, function() {
+        api.triggerEvent(elt, 'htmx:sseClose', {
+          source,
+          type: 'message',
+        })
+        source.close()
+      });
+    }
+  }
+
+  /**
+   * maybeCloseSSESource confirms that the parent element still exists.
+   * If not, then any associated SSE source is closed and the function returns true.
+   *
+   * @param {HTMLElement} elt
+   * @returns boolean
+   */
+  function maybeCloseSSESource(elt) {
+    if (!api.bodyContains(elt)) {
+      var source = api.getInternalData(elt).sseEventSource
+      if (source != undefined) {
+        api.triggerEvent(elt, 'htmx:sseClose', {
+          source,
+          type: 'nodeMissing',
+        })
+        source.close()
+        // source = null
+        return true
+      }
+    }
+    return false
+  }
+
+
+  /**
+   * @param {HTMLElement} elt
+   * @param {string} content
+   */
+  function swap(elt, content) {
+    api.withExtensions(elt, function(extension) {
+      content = extension.transformResponse(content, null, elt)
+    })
+
+    var swapSpec = api.getSwapSpecification(elt)
+    var target = api.getTarget(elt)
+    api.swap(target, content, swapSpec)
+  }
+
+
+  function hasEventSource(node) {
+    return api.getInternalData(node).sseEventSource != null
+  }
+})()

Різницю між файлами не показано, бо вона завелика
+ 0 - 0
public/js/htmx.min.js


Різницю між файлами не показано, бо вона завелика
+ 8 - 0
public/js/tabler.esm.js


Різницю між файлами не показано, бо вона завелика
+ 8 - 0
public/js/tabler.esm.min.js


Різницю між файлами не показано, бо вона завелика
+ 13 - 0
public/js/tabler.js


Різницю між файлами не показано, бо вона завелика
+ 2 - 2
public/js/tabler.min.js


Різницю між файлами не показано, бо вона завелика
+ 13728 - 0
public/libs/apexcharts/dist/apexcharts.js


+ 6314 - 0
public/libs/bootstrap/dist/js/bootstrap.bundle.js

@@ -0,0 +1,6314 @@
+/*!
+  * Bootstrap v5.3.1 (https://getbootstrap.com/)
+  * Copyright 2011-2023 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
+  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
+  */
+(function (global, factory) {
+  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
+  typeof define === 'function' && define.amd ? define(factory) :
+  (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.bootstrap = factory());
+})(this, (function () { 'use strict';
+
+  /**
+   * --------------------------------------------------------------------------
+   * Bootstrap dom/data.js
+   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
+   * --------------------------------------------------------------------------
+   */
+
+  /**
+   * Constants
+   */
+
+  const elementMap = new Map();
+  const Data = {
+    set(element, key, instance) {
+      if (!elementMap.has(element)) {
+        elementMap.set(element, new Map());
+      }
+      const instanceMap = elementMap.get(element);
+
+      // make it clear we only want one instance per element
+      // can be removed later when multiple key/instances are fine to be used
+      if (!instanceMap.has(key) && instanceMap.size !== 0) {
+        // eslint-disable-next-line no-console
+        console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(instanceMap.keys())[0]}.`);
+        return;
+      }
+      instanceMap.set(key, instance);
+    },
+    get(element, key) {
+      if (elementMap.has(element)) {
+        return elementMap.get(element).get(key) || null;
+      }
+      return null;
+    },
+    remove(element, key) {
+      if (!elementMap.has(element)) {
+        return;
+      }
+      const instanceMap = elementMap.get(element);
+      instanceMap.delete(key);
+
+      // free up element references if there are no instances left for an element
+      if (instanceMap.size === 0) {
+        elementMap.delete(element);
+      }
+    }
+  };
+
+  /**
+   * --------------------------------------------------------------------------
+   * Bootstrap util/index.js
+   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
+   * --------------------------------------------------------------------------
+   */
+
+  const MAX_UID = 1000000;
+  const MILLISECONDS_MULTIPLIER = 1000;
+  const TRANSITION_END = 'transitionend';
+
+  /**
+   * Properly escape IDs selectors to handle weird IDs
+   * @param {string} selector
+   * @returns {string}
+   */
+  const parseSelector = selector => {
+    if (selector && window.CSS && window.CSS.escape) {
+      // document.querySelector needs escaping to handle IDs (html5+) containing for instance /
+      selector = selector.replace(/#([^\s"#']+)/g, (match, id) => `#${CSS.escape(id)}`);
+    }
+    return selector;
+  };
+
+  // Shout-out Angus Croll (https://goo.gl/pxwQGp)
+  const toType = object => {
+    if (object === null || object === undefined) {
+      return `${object}`;
+    }
+    return Object.prototype.toString.call(object).match(/\s([a-z]+)/i)[1].toLowerCase();
+  };
+
+  /**
+   * Public Util API
+   */
+
+  const getUID = prefix => {
+    do {
+      prefix += Math.floor(Math.random() * MAX_UID);
+    } while (document.getElementById(prefix));
+    return prefix;
+  };
+  const getTransitionDurationFromElement = element => {
+    if (!element) {
+      return 0;
+    }
+
+    // Get transition-duration of the element
+    let {
+      transitionDuration,
+      transitionDelay
+    } = window.getComputedStyle(element);
+    const floatTransitionDuration = Number.parseFloat(transitionDuration);
+    const floatTransitionDelay = Number.parseFloat(transitionDelay);
+
+    // Return 0 if element or transition duration is not found
+    if (!floatTransitionDuration && !floatTransitionDelay) {
+      return 0;
+    }
+
+    // If multiple durations are defined, take the first
+    transitionDuration = transitionDuration.split(',')[0];
+    transitionDelay = transitionDelay.split(',')[0];
+    return (Number.parseFloat(transitionDuration) + Number.parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER;
+  };
+  const triggerTransitionEnd = element => {
+    element.dispatchEvent(new Event(TRANSITION_END));
+  };
+  const isElement$1 = object => {
+    if (!object || typeof object !== 'object') {
+      return false;
+    }
+    if (typeof object.jquery !== 'undefined') {
+      object = object[0];
+    }
+    return typeof object.nodeType !== 'undefined';
+  };
+  const getElement = object => {
+    // it's a jQuery object or a node element
+    if (isElement$1(object)) {
+      return object.jquery ? object[0] : object;
+    }
+    if (typeof object === 'string' && object.length > 0) {
+      return document.querySelector(parseSelector(object));
+    }
+    return null;
+  };
+  const isVisible = element => {
+    if (!isElement$1(element) || element.getClientRects().length === 0) {
+      return false;
+    }
+    const elementIsVisible = getComputedStyle(element).getPropertyValue('visibility') === 'visible';
+    // Handle `details` element as its content may falsie appear visible when it is closed
+    const closedDetails = element.closest('details:not([open])');
+    if (!closedDetails) {
+      return elementIsVisible;
+    }
+    if (closedDetails !== element) {
+      const summary = element.closest('summary');
+      if (summary && summary.parentNode !== closedDetails) {
+        return false;
+      }
+      if (summary === null) {
+        return false;
+      }
+    }
+    return elementIsVisible;
+  };
+  const isDisabled = element => {
+    if (!element || element.nodeType !== Node.ELEMENT_NODE) {
+      return true;
+    }
+    if (element.classList.contains('disabled')) {
+      return true;
+    }
+    if (typeof element.disabled !== 'undefined') {
+      return element.disabled;
+    }
+    return element.hasAttribute('disabled') && element.getAttribute('disabled') !== 'false';
+  };
+  const findShadowRoot = element => {
+    if (!document.documentElement.attachShadow) {
+      return null;
+    }
+
+    // Can find the shadow root otherwise it'll return the document
+    if (typeof element.getRootNode === 'function') {
+      const root = element.getRootNode();
+      return root instanceof ShadowRoot ? root : null;
+    }
+    if (element instanceof ShadowRoot) {
+      return element;
+    }
+
+    // when we don't find a shadow root
+    if (!element.parentNode) {
+      return null;
+    }
+    return findShadowRoot(element.parentNode);
+  };
+  const noop = () => {};
+
+  /**
+   * Trick to restart an element's animation
+   *
+   * @param {HTMLElement} element
+   * @return void
+   *
+   * @see https://www.charistheo.io/blog/2021/02/restart-a-css-animation-with-javascript/#restarting-a-css-animation
+   */
+  const reflow = element => {
+    element.offsetHeight; // eslint-disable-line no-unused-expressions
+  };
+
+  const getjQuery = () => {
+    if (window.jQuery && !document.body.hasAttribute('data-bs-no-jquery')) {
+      return window.jQuery;
+    }
+    return null;
+  };
+  const DOMContentLoadedCallbacks = [];
+  const onDOMContentLoaded = callback => {
+    if (document.readyState === 'loading') {
+      // add listener on the first call when the document is in loading state
+      if (!DOMContentLoadedCallbacks.length) {
+        document.addEventListener('DOMContentLoaded', () => {
+          for (const callback of DOMContentLoadedCallbacks) {
+            callback();
+          }
+        });
+      }
+      DOMContentLoadedCallbacks.push(callback);
+    } else {
+      callback();
+    }
+  };
+  const isRTL = () => document.documentElement.dir === 'rtl';
+  const defineJQueryPlugin = plugin => {
+    onDOMContentLoaded(() => {
+      const $ = getjQuery();
+      /* istanbul ignore if */
+      if ($) {
+        const name = plugin.NAME;
+        const JQUERY_NO_CONFLICT = $.fn[name];
+        $.fn[name] = plugin.jQueryInterface;
+        $.fn[name].Constructor = plugin;
+        $.fn[name].noConflict = () => {
+          $.fn[name] = JQUERY_NO_CONFLICT;
+          return plugin.jQueryInterface;
+        };
+      }
+    });
+  };
+  const execute = (possibleCallback, args = [], defaultValue = possibleCallback) => {
+    return typeof possibleCallback === 'function' ? possibleCallback(...args) : defaultValue;
+  };
+  const executeAfterTransition = (callback, transitionElement, waitForTransition = true) => {
+    if (!waitForTransition) {
+      execute(callback);
+      return;
+    }
+    const durationPadding = 5;
+    const emulatedDuration = getTransitionDurationFromElement(transitionElement) + durationPadding;
+    let called = false;
+    const handler = ({
+      target
+    }) => {
+      if (target !== transitionElement) {
+        return;
+      }
+      called = true;
+      transitionElement.removeEventListener(TRANSITION_END, handler);
+      execute(callback);
+    };
+    transitionElement.addEventListener(TRANSITION_END, handler);
+    setTimeout(() => {
+      if (!called) {
+        triggerTransitionEnd(transitionElement);
+      }
+    }, emulatedDuration);
+  };
+
+  /**
+   * Return the previous/next element of a list.
+   *
+   * @param {array} list    The list of elements
+   * @param activeElement   The active element
+   * @param shouldGetNext   Choose to get next or previous element
+   * @param isCycleAllowed
+   * @return {Element|elem} The proper element
+   */
+  const getNextActiveElement = (list, activeElement, shouldGetNext, isCycleAllowed) => {
+    const listLength = list.length;
+    let index = list.indexOf(activeElement);
+
+    // if the element does not exist in the list return an element
+    // depending on the direction and if cycle is allowed
+    if (index === -1) {
+      return !shouldGetNext && isCycleAllowed ? list[listLength - 1] : list[0];
+    }
+    index += shouldGetNext ? 1 : -1;
+    if (isCycleAllowed) {
+      index = (index + listLength) % listLength;
+    }
+    return list[Math.max(0, Math.min(index, listLength - 1))];
+  };
+
+  /**
+   * --------------------------------------------------------------------------
+   * Bootstrap dom/event-handler.js
+   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
+   * --------------------------------------------------------------------------
+   */
+
+
+  /**
+   * Constants
+   */
+
+  const namespaceRegex = /[^.]*(?=\..*)\.|.*/;
+  const stripNameRegex = /\..*/;
+  const stripUidRegex = /::\d+$/;
+  const eventRegistry = {}; // Events storage
+  let uidEvent = 1;
+  const customEvents = {
+    mouseenter: 'mouseover',
+    mouseleave: 'mouseout'
+  };
+  const nativeEvents = new Set(['click', 'dblclick', 'mouseup', 'mousedown', 'contextmenu', 'mousewheel', 'DOMMouseScroll', 'mouseover', 'mouseout', 'mousemove', 'selectstart', 'selectend', 'keydown', 'keypress', 'keyup', 'orientationchange', 'touchstart', 'touchmove', 'touchend', 'touchcancel', 'pointerdown', 'pointermove', 'pointerup', 'pointerleave', 'pointercancel', 'gesturestart', 'gesturechange', 'gestureend', 'focus', 'blur', 'change', 'reset', 'select', 'submit', 'focusin', 'focusout', 'load', 'unload', 'beforeunload', 'resize', 'move', 'DOMContentLoaded', 'readystatechange', 'error', 'abort', 'scroll']);
+
+  /**
+   * Private methods
+   */
+
+  function makeEventUid(element, uid) {
+    return uid && `${uid}::${uidEvent++}` || element.uidEvent || uidEvent++;
+  }
+  function getElementEvents(element) {
+    const uid = makeEventUid(element);
+    element.uidEvent = uid;
+    eventRegistry[uid] = eventRegistry[uid] || {};
+    return eventRegistry[uid];
+  }
+  function bootstrapHandler(element, fn) {
+    return function handler(event) {
+      hydrateObj(event, {
+        delegateTarget: element
+      });
+      if (handler.oneOff) {
+        EventHandler.off(element, event.type, fn);
+      }
+      return fn.apply(element, [event]);
+    };
+  }
+  function bootstrapDelegationHandler(element, selector, fn) {
+    return function handler(event) {
+      const domElements = element.querySelectorAll(selector);
+      for (let {
+        target
+      } = event; target && target !== this; target = target.parentNode) {
+        for (const domElement of domElements) {
+          if (domElement !== target) {
+            continue;
+          }
+          hydrateObj(event, {
+            delegateTarget: target
+          });
+          if (handler.oneOff) {
+            EventHandler.off(element, event.type, selector, fn);
+          }
+          return fn.apply(target, [event]);
+        }
+      }
+    };
+  }
+  function findHandler(events, callable, delegationSelector = null) {
+    return Object.values(events).find(event => event.callable === callable && event.delegationSelector === delegationSelector);
+  }
+  function normalizeParameters(originalTypeEvent, handler, delegationFunction) {
+    const isDelegated = typeof handler === 'string';
+    // TODO: tooltip passes `false` instead of selector, so we need to check
+    const callable = isDelegated ? delegationFunction : handler || delegationFunction;
+    let typeEvent = getTypeEvent(originalTypeEvent);
+    if (!nativeEvents.has(typeEvent)) {
+      typeEvent = originalTypeEvent;
+    }
+    return [isDelegated, callable, typeEvent];
+  }
+  function addHandler(element, originalTypeEvent, handler, delegationFunction, oneOff) {
+    if (typeof originalTypeEvent !== 'string' || !element) {
+      return;
+    }
+    let [isDelegated, callable, typeEvent] = normalizeParameters(originalTypeEvent, handler, delegationFunction);
+
+    // in case of mouseenter or mouseleave wrap the handler within a function that checks for its DOM position
+    // this prevents the handler from being dispatched the same way as mouseover or mouseout does
+    if (originalTypeEvent in customEvents) {
+      const wrapFunction = fn => {
+        return function (event) {
+          if (!event.relatedTarget || event.relatedTarget !== event.delegateTarget && !event.delegateTarget.contains(event.relatedTarget)) {
+            return fn.call(this, event);
+          }
+        };
+      };
+      callable = wrapFunction(callable);
+    }
+    const events = getElementEvents(element);
+    const handlers = events[typeEvent] || (events[typeEvent] = {});
+    const previousFunction = findHandler(handlers, callable, isDelegated ? handler : null);
+    if (previousFunction) {
+      previousFunction.oneOff = previousFunction.oneOff && oneOff;
+      return;
+    }
+    const uid = makeEventUid(callable, originalTypeEvent.replace(namespaceRegex, ''));
+    const fn = isDelegated ? bootstrapDelegationHandler(element, handler, callable) : bootstrapHandler(element, callable);
+    fn.delegationSelector = isDelegated ? handler : null;
+    fn.callable = callable;
+    fn.oneOff = oneOff;
+    fn.uidEvent = uid;
+    handlers[uid] = fn;
+    element.addEventListener(typeEvent, fn, isDelegated);
+  }
+  function removeHandler(element, events, typeEvent, handler, delegationSelector) {
+    const fn = findHandler(events[typeEvent], handler, delegationSelector);
+    if (!fn) {
+      return;
+    }
+    element.removeEventListener(typeEvent, fn, Boolean(delegationSelector));
+    delete events[typeEvent][fn.uidEvent];
+  }
+  function removeNamespacedHandlers(element, events, typeEvent, namespace) {
+    const storeElementEvent = events[typeEvent] || {};
+    for (const [handlerKey, event] of Object.entries(storeElementEvent)) {
+      if (handlerKey.includes(namespace)) {
+        removeHandler(element, events, typeEvent, event.callable, event.delegationSelector);
+      }
+    }
+  }
+  function getTypeEvent(event) {
+    // allow to get the native events from namespaced events ('click.bs.button' --> 'click')
+    event = event.replace(stripNameRegex, '');
+    return customEvents[event] || event;
+  }
+  const EventHandler = {
+    on(element, event, handler, delegationFunction) {
+      addHandler(element, event, handler, delegationFunction, false);
+    },
+    one(element, event, handler, delegationFunction) {
+      addHandler(element, event, handler, delegationFunction, true);
+    },
+    off(element, originalTypeEvent, handler, delegationFunction) {
+      if (typeof originalTypeEvent !== 'string' || !element) {
+        return;
+      }
+      const [isDelegated, callable, typeEvent] = normalizeParameters(originalTypeEvent, handler, delegationFunction);
+      const inNamespace = typeEvent !== originalTypeEvent;
+      const events = getElementEvents(element);
+      const storeElementEvent = events[typeEvent] || {};
+      const isNamespace = originalTypeEvent.startsWith('.');
+      if (typeof callable !== 'undefined') {
+        // Simplest case: handler is passed, remove that listener ONLY.
+        if (!Object.keys(storeElementEvent).length) {
+          return;
+        }
+        removeHandler(element, events, typeEvent, callable, isDelegated ? handler : null);
+        return;
+      }
+      if (isNamespace) {
+        for (const elementEvent of Object.keys(events)) {
+          removeNamespacedHandlers(element, events, elementEvent, originalTypeEvent.slice(1));
+        }
+      }
+      for (const [keyHandlers, event] of Object.entries(storeElementEvent)) {
+        const handlerKey = keyHandlers.replace(stripUidRegex, '');
+        if (!inNamespace || originalTypeEvent.includes(handlerKey)) {
+          removeHandler(element, events, typeEvent, event.callable, event.delegationSelector);
+        }
+      }
+    },
+    trigger(element, event, args) {
+      if (typeof event !== 'string' || !element) {
+        return null;
+      }
+      const $ = getjQuery();
+      const typeEvent = getTypeEvent(event);
+      const inNamespace = event !== typeEvent;
+      let jQueryEvent = null;
+      let bubbles = true;
+      let nativeDispatch = true;
+      let defaultPrevented = false;
+      if (inNamespace && $) {
+        jQueryEvent = $.Event(event, args);
+        $(element).trigger(jQueryEvent);
+        bubbles = !jQueryEvent.isPropagationStopped();
+        nativeDispatch = !jQueryEvent.isImmediatePropagationStopped();
+        defaultPrevented = jQueryEvent.isDefaultPrevented();
+      }
+      const evt = hydrateObj(new Event(event, {
+        bubbles,
+        cancelable: true
+      }), args);
+      if (defaultPrevented) {
+        evt.preventDefault();
+      }
+      if (nativeDispatch) {
+        element.dispatchEvent(evt);
+      }
+      if (evt.defaultPrevented && jQueryEvent) {
+        jQueryEvent.preventDefault();
+      }
+      return evt;
+    }
+  };
+  function hydrateObj(obj, meta = {}) {
+    for (const [key, value] of Object.entries(meta)) {
+      try {
+        obj[key] = value;
+      } catch (_unused) {
+        Object.defineProperty(obj, key, {
+          configurable: true,
+          get() {
+            return value;
+          }
+        });
+      }
+    }
+    return obj;
+  }
+
+  /**
+   * --------------------------------------------------------------------------
+   * Bootstrap dom/manipulator.js
+   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
+   * --------------------------------------------------------------------------
+   */
+
+  function normalizeData(value) {
+    if (value === 'true') {
+      return true;
+    }
+    if (value === 'false') {
+      return false;
+    }
+    if (value === Number(value).toString()) {
+      return Number(value);
+    }
+    if (value === '' || value === 'null') {
+      return null;
+    }
+    if (typeof value !== 'string') {
+      return value;
+    }
+    try {
+      return JSON.parse(decodeURIComponent(value));
+    } catch (_unused) {
+      return value;
+    }
+  }
+  function normalizeDataKey(key) {
+    return key.replace(/[A-Z]/g, chr => `-${chr.toLowerCase()}`);
+  }
+  const Manipulator = {
+    setDataAttribute(element, key, value) {
+      element.setAttribute(`data-bs-${normalizeDataKey(key)}`, value);
+    },
+    removeDataAttribute(element, key) {
+      element.removeAttribute(`data-bs-${normalizeDataKey(key)}`);
+    },
+    getDataAttributes(element) {
+      if (!element) {
+        return {};
+      }
+      const attributes = {};
+      const bsKeys = Object.keys(element.dataset).filter(key => key.startsWith('bs') && !key.startsWith('bsConfig'));
+      for (const key of bsKeys) {
+        let pureKey = key.replace(/^bs/, '');
+        pureKey = pureKey.charAt(0).toLowerCase() + pureKey.slice(1, pureKey.length);
+        attributes[pureKey] = normalizeData(element.dataset[key]);
+      }
+      return attributes;
+    },
+    getDataAttribute(element, key) {
+      return normalizeData(element.getAttribute(`data-bs-${normalizeDataKey(key)}`));
+    }
+  };
+
+  /**
+   * --------------------------------------------------------------------------
+   * Bootstrap util/config.js
+   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
+   * --------------------------------------------------------------------------
+   */
+
+
+  /**
+   * Class definition
+   */
+
+  class Config {
+    // Getters
+    static get Default() {
+      return {};
+    }
+    static get DefaultType() {
+      return {};
+    }
+    static get NAME() {
+      throw new Error('You have to implement the static method "NAME", for each component!');
+    }
+    _getConfig(config) {
+      config = this._mergeConfigObj(config);
+      config = this._configAfterMerge(config);
+      this._typeCheckConfig(config);
+      return config;
+    }
+    _configAfterMerge(config) {
+      return config;
+    }
+    _mergeConfigObj(config, element) {
+      const jsonConfig = isElement$1(element) ? Manipulator.getDataAttribute(element, 'config') : {}; // try to parse
+
+      return {
+        ...this.constructor.Default,
+        ...(typeof jsonConfig === 'object' ? jsonConfig : {}),
+        ...(isElement$1(element) ? Manipulator.getDataAttributes(element) : {}),
+        ...(typeof config === 'object' ? config : {})
+      };
+    }
+    _typeCheckConfig(config, configTypes = this.constructor.DefaultType) {
+      for (const [property, expectedTypes] of Object.entries(configTypes)) {
+        const value = config[property];
+        const valueType = isElement$1(value) ? 'element' : toType(value);
+        if (!new RegExp(expectedTypes).test(valueType)) {
+          throw new TypeError(`${this.constructor.NAME.toUpperCase()}: Option "${property}" provided type "${valueType}" but expected type "${expectedTypes}".`);
+        }
+      }
+    }
+  }
+
+  /**
+   * --------------------------------------------------------------------------
+   * Bootstrap base-component.js
+   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
+   * --------------------------------------------------------------------------
+   */
+
+
+  /**
+   * Constants
+   */
+
+  const VERSION = '5.3.1';
+
+  /**
+   * Class definition
+   */
+
+  class BaseComponent extends Config {
+    constructor(element, config) {
+      super();
+      element = getElement(element);
+      if (!element) {
+        return;
+      }
+      this._element = element;
+      this._config = this._getConfig(config);
+      Data.set(this._element, this.constructor.DATA_KEY, this);
+    }
+
+    // Public
+    dispose() {
+      Data.remove(this._element, this.constructor.DATA_KEY);
+      EventHandler.off(this._element, this.constructor.EVENT_KEY);
+      for (const propertyName of Object.getOwnPropertyNames(this)) {
+        this[propertyName] = null;
+      }
+    }
+    _queueCallback(callback, element, isAnimated = true) {
+      executeAfterTransition(callback, element, isAnimated);
+    }
+    _getConfig(config) {
+      config = this._mergeConfigObj(config, this._element);
+      config = this._configAfterMerge(config);
+      this._typeCheckConfig(config);
+      return config;
+    }
+
+    // Static
+    static getInstance(element) {
+      return Data.get(getElement(element), this.DATA_KEY);
+    }
+    static getOrCreateInstance(element, config = {}) {
+      return this.getInstance(element) || new this(element, typeof config === 'object' ? config : null);
+    }
+    static get VERSION() {
+      return VERSION;
+    }
+    static get DATA_KEY() {
+      return `bs.${this.NAME}`;
+    }
+    static get EVENT_KEY() {
+      return `.${this.DATA_KEY}`;
+    }
+    static eventName(name) {
+      return `${name}${this.EVENT_KEY}`;
+    }
+  }
+
+  /**
+   * --------------------------------------------------------------------------
+   * Bootstrap dom/selector-engine.js
+   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
+   * --------------------------------------------------------------------------
+   */
+
+  const getSelector = element => {
+    let selector = element.getAttribute('data-bs-target');
+    if (!selector || selector === '#') {
+      let hrefAttribute = element.getAttribute('href');
+
+      // The only valid content that could double as a selector are IDs or classes,
+      // so everything starting with `#` or `.`. If a "real" URL is used as the selector,
+      // `document.querySelector` will rightfully complain it is invalid.
+      // See https://github.com/twbs/bootstrap/issues/32273
+      if (!hrefAttribute || !hrefAttribute.includes('#') && !hrefAttribute.startsWith('.')) {
+        return null;
+      }
+
+      // Just in case some CMS puts out a full URL with the anchor appended
+      if (hrefAttribute.includes('#') && !hrefAttribute.startsWith('#')) {
+        hrefAttribute = `#${hrefAttribute.split('#')[1]}`;
+      }
+      selector = hrefAttribute && hrefAttribute !== '#' ? hrefAttribute.trim() : null;
+    }
+    return parseSelector(selector);
+  };
+  const SelectorEngine = {
+    find(selector, element = document.documentElement) {
+      return [].concat(...Element.prototype.querySelectorAll.call(element, selector));
+    },
+    findOne(selector, element = document.documentElement) {
+      return Element.prototype.querySelector.call(element, selector);
+    },
+    children(element, selector) {
+      return [].concat(...element.children).filter(child => child.matches(selector));
+    },
+    parents(element, selector) {
+      const parents = [];
+      let ancestor = element.parentNode.closest(selector);
+      while (ancestor) {
+        parents.push(ancestor);
+        ancestor = ancestor.parentNode.closest(selector);
+      }
+      return parents;
+    },
+    prev(element, selector) {
+      let previous = element.previousElementSibling;
+      while (previous) {
+        if (previous.matches(selector)) {
+          return [previous];
+        }
+        previous = previous.previousElementSibling;
+      }
+      return [];
+    },
+    // TODO: this is now unused; remove later along with prev()
+    next(element, selector) {
+      let next = element.nextElementSibling;
+      while (next) {
+        if (next.matches(selector)) {
+          return [next];
+        }
+        next = next.nextElementSibling;
+      }
+      return [];
+    },
+    focusableChildren(element) {
+      const focusables = ['a', 'button', 'input', 'textarea', 'select', 'details', '[tabindex]', '[contenteditable="true"]'].map(selector => `${selector}:not([tabindex^="-"])`).join(',');
+      return this.find(focusables, element).filter(el => !isDisabled(el) && isVisible(el));
+    },
+    getSelectorFromElement(element) {
+      const selector = getSelector(element);
+      if (selector) {
+        return SelectorEngine.findOne(selector) ? selector : null;
+      }
+      return null;
+    },
+    getElementFromSelector(element) {
+      const selector = getSelector(element);
+      return selector ? SelectorEngine.findOne(selector) : null;
+    },
+    getMultipleElementsFromSelector(element) {
+      const selector = getSelector(element);
+      return selector ? SelectorEngine.find(selector) : [];
+    }
+  };
+
+  /**
+   * --------------------------------------------------------------------------
+   * Bootstrap util/component-functions.js
+   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
+   * --------------------------------------------------------------------------
+   */
+
+  const enableDismissTrigger = (component, method = 'hide') => {
+    const clickEvent = `click.dismiss${component.EVENT_KEY}`;
+    const name = component.NAME;
+    EventHandler.on(document, clickEvent, `[data-bs-dismiss="${name}"]`, function (event) {
+      if (['A', 'AREA'].includes(this.tagName)) {
+        event.preventDefault();
+      }
+      if (isDisabled(this)) {
+        return;
+      }
+      const target = SelectorEngine.getElementFromSelector(this) || this.closest(`.${name}`);
+      const instance = component.getOrCreateInstance(target);
+
+      // Method argument is left, for Alert and only, as it doesn't implement the 'hide' method
+      instance[method]();
+    });
+  };
+
+  /**
+   * --------------------------------------------------------------------------
+   * Bootstrap alert.js
+   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
+   * --------------------------------------------------------------------------
+   */
+
+
+  /**
+   * Constants
+   */
+
+  const NAME$f = 'alert';
+  const DATA_KEY$a = 'bs.alert';
+  const EVENT_KEY$b = `.${DATA_KEY$a}`;
+  const EVENT_CLOSE = `close${EVENT_KEY$b}`;
+  const EVENT_CLOSED = `closed${EVENT_KEY$b}`;
+  const CLASS_NAME_FADE$5 = 'fade';
+  const CLASS_NAME_SHOW$8 = 'show';
+
+  /**
+   * Class definition
+   */
+
+  class Alert extends BaseComponent {
+    // Getters
+    static get NAME() {
+      return NAME$f;
+    }
+
+    // Public
+    close() {
+      const closeEvent = EventHandler.trigger(this._element, EVENT_CLOSE);
+      if (closeEvent.defaultPrevented) {
+        return;
+      }
+      this._element.classList.remove(CLASS_NAME_SHOW$8);
+      const isAnimated = this._element.classList.contains(CLASS_NAME_FADE$5);
+      this._queueCallback(() => this._destroyElement(), this._element, isAnimated);
+    }
+
+    // Private
+    _destroyElement() {
+      this._element.remove();
+      EventHandler.trigger(this._element, EVENT_CLOSED);
+      this.dispose();
+    }
+
+    // Static
+    static jQueryInterface(config) {
+      return this.each(function () {
+        const data = Alert.getOrCreateInstance(this);
+        if (typeof config !== 'string') {
+          return;
+        }
+        if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {
+          throw new TypeError(`No method named "${config}"`);
+        }
+        data[config](this);
+      });
+    }
+  }
+
+  /**
+   * Data API implementation
+   */
+
+  enableDismissTrigger(Alert, 'close');
+
+  /**
+   * jQuery
+   */
+
+  defineJQueryPlugin(Alert);
+
+  /**
+   * --------------------------------------------------------------------------
+   * Bootstrap button.js
+   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
+   * --------------------------------------------------------------------------
+   */
+
+
+  /**
+   * Constants
+   */
+
+  const NAME$e = 'button';
+  const DATA_KEY$9 = 'bs.button';
+  const EVENT_KEY$a = `.${DATA_KEY$9}`;
+  const DATA_API_KEY$6 = '.data-api';
+  const CLASS_NAME_ACTIVE$3 = 'active';
+  const SELECTOR_DATA_TOGGLE$5 = '[data-bs-toggle="button"]';
+  const EVENT_CLICK_DATA_API$6 = `click${EVENT_KEY$a}${DATA_API_KEY$6}`;
+
+  /**
+   * Class definition
+   */
+
+  class Button extends BaseComponent {
+    // Getters
+    static get NAME() {
+      return NAME$e;
+    }
+
+    // Public
+    toggle() {
+      // Toggle class and sync the `aria-pressed` attribute with the return value of the `.toggle()` method
+      this._element.setAttribute('aria-pressed', this._element.classList.toggle(CLASS_NAME_ACTIVE$3));
+    }
+
+    // Static
+    static jQueryInterface(config) {
+      return this.each(function () {
+        const data = Button.getOrCreateInstance(this);
+        if (config === 'toggle') {
+          data[config]();
+        }
+      });
+    }
+  }
+
+  /**
+   * Data API implementation
+   */
+
+  EventHandler.on(document, EVENT_CLICK_DATA_API$6, SELECTOR_DATA_TOGGLE$5, event => {
+    event.preventDefault();
+    const button = event.target.closest(SELECTOR_DATA_TOGGLE$5);
+    const data = Button.getOrCreateInstance(button);
+    data.toggle();
+  });
+
+  /**
+   * jQuery
+   */
+
+  defineJQueryPlugin(Button);
+
+  /**
+   * --------------------------------------------------------------------------
+   * Bootstrap util/swipe.js
+   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
+   * --------------------------------------------------------------------------
+   */
+
+
+  /**
+   * Constants
+   */
+
+  const NAME$d = 'swipe';
+  const EVENT_KEY$9 = '.bs.swipe';
+  const EVENT_TOUCHSTART = `touchstart${EVENT_KEY$9}`;
+  const EVENT_TOUCHMOVE = `touchmove${EVENT_KEY$9}`;
+  const EVENT_TOUCHEND = `touchend${EVENT_KEY$9}`;
+  const EVENT_POINTERDOWN = `pointerdown${EVENT_KEY$9}`;
+  const EVENT_POINTERUP = `pointerup${EVENT_KEY$9}`;
+  const POINTER_TYPE_TOUCH = 'touch';
+  const POINTER_TYPE_PEN = 'pen';
+  const CLASS_NAME_POINTER_EVENT = 'pointer-event';
+  const SWIPE_THRESHOLD = 40;
+  const Default$c = {
+    endCallback: null,
+    leftCallback: null,
+    rightCallback: null
+  };
+  const DefaultType$c = {
+    endCallback: '(function|null)',
+    leftCallback: '(function|null)',
+    rightCallback: '(function|null)'
+  };
+
+  /**
+   * Class definition
+   */
+
+  class Swipe extends Config {
+    constructor(element, config) {
+      super();
+      this._element = element;
+      if (!element || !Swipe.isSupported()) {
+        return;
+      }
+      this._config = this._getConfig(config);
+      this._deltaX = 0;
+      this._supportPointerEvents = Boolean(window.PointerEvent);
+      this._initEvents();
+    }
+
+    // Getters
+    static get Default() {
+      return Default$c;
+    }
+    static get DefaultType() {
+      return DefaultType$c;
+    }
+    static get NAME() {
+      return NAME$d;
+    }
+
+    // Public
+    dispose() {
+      EventHandler.off(this._element, EVENT_KEY$9);
+    }
+
+    // Private
+    _start(event) {
+      if (!this._supportPointerEvents) {
+        this._deltaX = event.touches[0].clientX;
+        return;
+      }
+      if (this._eventIsPointerPenTouch(event)) {
+        this._deltaX = event.clientX;
+      }
+    }
+    _end(event) {
+      if (this._eventIsPointerPenTouch(event)) {
+        this._deltaX = event.clientX - this._deltaX;
+      }
+      this._handleSwipe();
+      execute(this._config.endCallback);
+    }
+    _move(event) {
+      this._deltaX = event.touches && event.touches.length > 1 ? 0 : event.touches[0].clientX - this._deltaX;
+    }
+    _handleSwipe() {
+      const absDeltaX = Math.abs(this._deltaX);
+      if (absDeltaX <= SWIPE_THRESHOLD) {
+        return;
+      }
+      const direction = absDeltaX / this._deltaX;
+      this._deltaX = 0;
+      if (!direction) {
+        return;
+      }
+      execute(direction > 0 ? this._config.rightCallback : this._config.leftCallback);
+    }
+    _initEvents() {
+      if (this._supportPointerEvents) {
+        EventHandler.on(this._element, EVENT_POINTERDOWN, event => this._start(event));
+        EventHandler.on(this._element, EVENT_POINTERUP, event => this._end(event));
+        this._element.classList.add(CLASS_NAME_POINTER_EVENT);
+      } else {
+        EventHandler.on(this._element, EVENT_TOUCHSTART, event => this._start(event));
+        EventHandler.on(this._element, EVENT_TOUCHMOVE, event => this._move(event));
+        EventHandler.on(this._element, EVENT_TOUCHEND, event => this._end(event));
+      }
+    }
+    _eventIsPointerPenTouch(event) {
+      return this._supportPointerEvents && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH);
+    }
+
+    // Static
+    static isSupported() {
+      return 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0;
+    }
+  }
+
+  /**
+   * --------------------------------------------------------------------------
+   * Bootstrap carousel.js
+   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
+   * --------------------------------------------------------------------------
+   */
+
+
+  /**
+   * Constants
+   */
+
+  const NAME$c = 'carousel';
+  const DATA_KEY$8 = 'bs.carousel';
+  const EVENT_KEY$8 = `.${DATA_KEY$8}`;
+  const DATA_API_KEY$5 = '.data-api';
+  const ARROW_LEFT_KEY$1 = 'ArrowLeft';
+  const ARROW_RIGHT_KEY$1 = 'ArrowRight';
+  const TOUCHEVENT_COMPAT_WAIT = 500; // Time for mouse compat events to fire after touch
+
+  const ORDER_NEXT = 'next';
+  const ORDER_PREV = 'prev';
+  const DIRECTION_LEFT = 'left';
+  const DIRECTION_RIGHT = 'right';
+  const EVENT_SLIDE = `slide${EVENT_KEY$8}`;
+  const EVENT_SLID = `slid${EVENT_KEY$8}`;
+  const EVENT_KEYDOWN$1 = `keydown${EVENT_KEY$8}`;
+  const EVENT_MOUSEENTER$1 = `mouseenter${EVENT_KEY$8}`;
+  const EVENT_MOUSELEAVE$1 = `mouseleave${EVENT_KEY$8}`;
+  const EVENT_DRAG_START = `dragstart${EVENT_KEY$8}`;
+  const EVENT_LOAD_DATA_API$3 = `load${EVENT_KEY$8}${DATA_API_KEY$5}`;
+  const EVENT_CLICK_DATA_API$5 = `click${EVENT_KEY$8}${DATA_API_KEY$5}`;
+  const CLASS_NAME_CAROUSEL = 'carousel';
+  const CLASS_NAME_ACTIVE$2 = 'active';
+  const CLASS_NAME_SLIDE = 'slide';
+  const CLASS_NAME_END = 'carousel-item-end';
+  const CLASS_NAME_START = 'carousel-item-start';
+  const CLASS_NAME_NEXT = 'carousel-item-next';
+  const CLASS_NAME_PREV = 'carousel-item-prev';
+  const SELECTOR_ACTIVE = '.active';
+  const SELECTOR_ITEM = '.carousel-item';
+  const SELECTOR_ACTIVE_ITEM = SELECTOR_ACTIVE + SELECTOR_ITEM;
+  const SELECTOR_ITEM_IMG = '.carousel-item img';
+  const SELECTOR_INDICATORS = '.carousel-indicators';
+  const SELECTOR_DATA_SLIDE = '[data-bs-slide], [data-bs-slide-to]';
+  const SELECTOR_DATA_RIDE = '[data-bs-ride="carousel"]';
+  const KEY_TO_DIRECTION = {
+    [ARROW_LEFT_KEY$1]: DIRECTION_RIGHT,
+    [ARROW_RIGHT_KEY$1]: DIRECTION_LEFT
+  };
+  const Default$b = {
+    interval: 5000,
+    keyboard: true,
+    pause: 'hover',
+    ride: false,
+    touch: true,
+    wrap: true
+  };
+  const DefaultType$b = {
+    interval: '(number|boolean)',
+    // TODO:v6 remove boolean support
+    keyboard: 'boolean',
+    pause: '(string|boolean)',
+    ride: '(boolean|string)',
+    touch: 'boolean',
+    wrap: 'boolean'
+  };
+
+  /**
+   * Class definition
+   */
+
+  class Carousel extends BaseComponent {
+    constructor(element, config) {
+      super(element, config);
+      this._interval = null;
+      this._activeElement = null;
+      this._isSliding = false;
+      this.touchTimeout = null;
+      this._swipeHelper = null;
+      this._indicatorsElement = SelectorEngine.findOne(SELECTOR_INDICATORS, this._element);
+      this._addEventListeners();
+      if (this._config.ride === CLASS_NAME_CAROUSEL) {
+        this.cycle();
+      }
+    }
+
+    // Getters
+    static get Default() {
+      return Default$b;
+    }
+    static get DefaultType() {
+      return DefaultType$b;
+    }
+    static get NAME() {
+      return NAME$c;
+    }
+
+    // Public
+    next() {
+      this._slide(ORDER_NEXT);
+    }
+    nextWhenVisible() {
+      // FIXME TODO use `document.visibilityState`
+      // Don't call next when the page isn't visible
+      // or the carousel or its parent isn't visible
+      if (!document.hidden && isVisible(this._element)) {
+        this.next();
+      }
+    }
+    prev() {
+      this._slide(ORDER_PREV);
+    }
+    pause() {
+      if (this._isSliding) {
+        triggerTransitionEnd(this._element);
+      }
+      this._clearInterval();
+    }
+    cycle() {
+      this._clearInterval();
+      this._updateInterval();
+      this._interval = setInterval(() => this.nextWhenVisible(), this._config.interval);
+    }
+    _maybeEnableCycle() {
+      if (!this._config.ride) {
+        return;
+      }
+      if (this._isSliding) {
+        EventHandler.one(this._element, EVENT_SLID, () => this.cycle());
+        return;
+      }
+      this.cycle();
+    }
+    to(index) {
+      const items = this._getItems();
+      if (index > items.length - 1 || index < 0) {
+        return;
+      }
+      if (this._isSliding) {
+        EventHandler.one(this._element, EVENT_SLID, () => this.to(index));
+        return;
+      }
+      const activeIndex = this._getItemIndex(this._getActive());
+      if (activeIndex === index) {
+        return;
+      }
+      const order = index > activeIndex ? ORDER_NEXT : ORDER_PREV;
+      this._slide(order, items[index]);
+    }
+    dispose() {
+      if (this._swipeHelper) {
+        this._swipeHelper.dispose();
+      }
+      super.dispose();
+    }
+
+    // Private
+    _configAfterMerge(config) {
+      config.defaultInterval = config.interval;
+      return config;
+    }
+    _addEventListeners() {
+      if (this._config.keyboard) {
+        EventHandler.on(this._element, EVENT_KEYDOWN$1, event => this._keydown(event));
+      }
+      if (this._config.pause === 'hover') {
+        EventHandler.on(this._element, EVENT_MOUSEENTER$1, () => this.pause());
+        EventHandler.on(this._element, EVENT_MOUSELEAVE$1, () => this._maybeEnableCycle());
+      }
+      if (this._config.touch && Swipe.isSupported()) {
+        this._addTouchEventListeners();
+      }
+    }
+    _addTouchEventListeners() {
+      for (const img of SelectorEngine.find(SELECTOR_ITEM_IMG, this._element)) {
+        EventHandler.on(img, EVENT_DRAG_START, event => event.preventDefault());
+      }
+      const endCallBack = () => {
+        if (this._config.pause !== 'hover') {
+          return;
+        }
+
+        // If it's a touch-enabled device, mouseenter/leave are fired as
+        // part of the mouse compatibility events on first tap - the carousel
+        // would stop cycling until user tapped out of it;
+        // here, we listen for touchend, explicitly pause the carousel
+        // (as if it's the second time we tap on it, mouseenter compat event
+        // is NOT fired) and after a timeout (to allow for mouse compatibility
+        // events to fire) we explicitly restart cycling
+
+        this.pause();
+        if (this.touchTimeout) {
+          clearTimeout(this.touchTimeout);
+        }
+        this.touchTimeout = setTimeout(() => this._maybeEnableCycle(), TOUCHEVENT_COMPAT_WAIT + this._config.interval);
+      };
+      const swipeConfig = {
+        leftCallback: () => this._slide(this._directionToOrder(DIRECTION_LEFT)),
+        rightCallback: () => this._slide(this._directionToOrder(DIRECTION_RIGHT)),
+        endCallback: endCallBack
+      };
+      this._swipeHelper = new Swipe(this._element, swipeConfig);
+    }
+    _keydown(event) {
+      if (/input|textarea/i.test(event.target.tagName)) {
+        return;
+      }
+      const direction = KEY_TO_DIRECTION[event.key];
+      if (direction) {
+        event.preventDefault();
+        this._slide(this._directionToOrder(direction));
+      }
+    }
+    _getItemIndex(element) {
+      return this._getItems().indexOf(element);
+    }
+    _setActiveIndicatorElement(index) {
+      if (!this._indicatorsElement) {
+        return;
+      }
+      const activeIndicator = SelectorEngine.findOne(SELECTOR_ACTIVE, this._indicatorsElement);
+      activeIndicator.classList.remove(CLASS_NAME_ACTIVE$2);
+      activeIndicator.removeAttribute('aria-current');
+      const newActiveIndicator = SelectorEngine.findOne(`[data-bs-slide-to="${index}"]`, this._indicatorsElement);
+      if (newActiveIndicator) {
+        newActiveIndicator.classList.add(CLASS_NAME_ACTIVE$2);
+        newActiveIndicator.setAttribute('aria-current', 'true');
+      }
+    }
+    _updateInterval() {
+      const element = this._activeElement || this._getActive();
+      if (!element) {
+        return;
+      }
+      const elementInterval = Number.parseInt(element.getAttribute('data-bs-interval'), 10);
+      this._config.interval = elementInterval || this._config.defaultInterval;
+    }
+    _slide(order, element = null) {
+      if (this._isSliding) {
+        return;
+      }
+      const activeElement = this._getActive();
+      const isNext = order === ORDER_NEXT;
+      const nextElement = element || getNextActiveElement(this._getItems(), activeElement, isNext, this._config.wrap);
+      if (nextElement === activeElement) {
+        return;
+      }
+      const nextElementIndex = this._getItemIndex(nextElement);
+      const triggerEvent = eventName => {
+        return EventHandler.trigger(this._element, eventName, {
+          relatedTarget: nextElement,
+          direction: this._orderToDirection(order),
+          from: this._getItemIndex(activeElement),
+          to: nextElementIndex
+        });
+      };
+      const slideEvent = triggerEvent(EVENT_SLIDE);
+      if (slideEvent.defaultPrevented) {
+        return;
+      }
+      if (!activeElement || !nextElement) {
+        // Some weirdness is happening, so we bail
+        // TODO: change tests that use empty divs to avoid this check
+        return;
+      }
+      const isCycling = Boolean(this._interval);
+      this.pause();
+      this._isSliding = true;
+      this._setActiveIndicatorElement(nextElementIndex);
+      this._activeElement = nextElement;
+      const directionalClassName = isNext ? CLASS_NAME_START : CLASS_NAME_END;
+      const orderClassName = isNext ? CLASS_NAME_NEXT : CLASS_NAME_PREV;
+      nextElement.classList.add(orderClassName);
+      reflow(nextElement);
+      activeElement.classList.add(directionalClassName);
+      nextElement.classList.add(directionalClassName);
+      const completeCallBack = () => {
+        nextElement.classList.remove(directionalClassName, orderClassName);
+        nextElement.classList.add(CLASS_NAME_ACTIVE$2);
+        activeElement.classList.remove(CLASS_NAME_ACTIVE$2, orderClassName, directionalClassName);
+        this._isSliding = false;
+        triggerEvent(EVENT_SLID);
+      };
+      this._queueCallback(completeCallBack, activeElement, this._isAnimated());
+      if (isCycling) {
+        this.cycle();
+      }
+    }
+    _isAnimated() {
+      return this._element.classList.contains(CLASS_NAME_SLIDE);
+    }
+    _getActive() {
+      return SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);
+    }
+    _getItems() {
+      return SelectorEngine.find(SELECTOR_ITEM, this._element);
+    }
+    _clearInterval() {
+      if (this._interval) {
+        clearInterval(this._interval);
+        this._interval = null;
+      }
+    }
+    _directionToOrder(direction) {
+      if (isRTL()) {
+        return direction === DIRECTION_LEFT ? ORDER_PREV : ORDER_NEXT;
+      }
+      return direction === DIRECTION_LEFT ? ORDER_NEXT : ORDER_PREV;
+    }
+    _orderToDirection(order) {
+      if (isRTL()) {
+        return order === ORDER_PREV ? DIRECTION_LEFT : DIRECTION_RIGHT;
+      }
+      return order === ORDER_PREV ? DIRECTION_RIGHT : DIRECTION_LEFT;
+    }
+
+    // Static
+    static jQueryInterface(config) {
+      return this.each(function () {
+        const data = Carousel.getOrCreateInstance(this, config);
+        if (typeof config === 'number') {
+          data.to(config);
+          return;
+        }
+        if (typeof config === 'string') {
+          if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {
+            throw new TypeError(`No method named "${config}"`);
+          }
+          data[config]();
+        }
+      });
+    }
+  }
+
+  /**
+   * Data API implementation
+   */
+
+  EventHandler.on(document, EVENT_CLICK_DATA_API$5, SELECTOR_DATA_SLIDE, function (event) {
+    const target = SelectorEngine.getElementFromSelector(this);
+    if (!target || !target.classList.contains(CLASS_NAME_CAROUSEL)) {
+      return;
+    }
+    event.preventDefault();
+    const carousel = Carousel.getOrCreateInstance(target);
+    const slideIndex = this.getAttribute('data-bs-slide-to');
+    if (slideIndex) {
+      carousel.to(slideIndex);
+      carousel._maybeEnableCycle();
+      return;
+    }
+    if (Manipulator.getDataAttribute(this, 'slide') === 'next') {
+      carousel.next();
+      carousel._maybeEnableCycle();
+      return;
+    }
+    carousel.prev();
+    carousel._maybeEnableCycle();
+  });
+  EventHandler.on(window, EVENT_LOAD_DATA_API$3, () => {
+    const carousels = SelectorEngine.find(SELECTOR_DATA_RIDE);
+    for (const carousel of carousels) {
+      Carousel.getOrCreateInstance(carousel);
+    }
+  });
+
+  /**
+   * jQuery
+   */
+
+  defineJQueryPlugin(Carousel);
+
+  /**
+   * --------------------------------------------------------------------------
+   * Bootstrap collapse.js
+   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
+   * --------------------------------------------------------------------------
+   */
+
+
+  /**
+   * Constants
+   */
+
+  const NAME$b = 'collapse';
+  const DATA_KEY$7 = 'bs.collapse';
+  const EVENT_KEY$7 = `.${DATA_KEY$7}`;
+  const DATA_API_KEY$4 = '.data-api';
+  const EVENT_SHOW$6 = `show${EVENT_KEY$7}`;
+  const EVENT_SHOWN$6 = `shown${EVENT_KEY$7}`;
+  const EVENT_HIDE$6 = `hide${EVENT_KEY$7}`;
+  const EVENT_HIDDEN$6 = `hidden${EVENT_KEY$7}`;
+  const EVENT_CLICK_DATA_API$4 = `click${EVENT_KEY$7}${DATA_API_KEY$4}`;
+  const CLASS_NAME_SHOW$7 = 'show';
+  const CLASS_NAME_COLLAPSE = 'collapse';
+  const CLASS_NAME_COLLAPSING = 'collapsing';
+  const CLASS_NAME_COLLAPSED = 'collapsed';
+  const CLASS_NAME_DEEPER_CHILDREN = `:scope .${CLASS_NAME_COLLAPSE} .${CLASS_NAME_COLLAPSE}`;
+  const CLASS_NAME_HORIZONTAL = 'collapse-horizontal';
+  const WIDTH = 'width';
+  const HEIGHT = 'height';
+  const SELECTOR_ACTIVES = '.collapse.show, .collapse.collapsing';
+  const SELECTOR_DATA_TOGGLE$4 = '[data-bs-toggle="collapse"]';
+  const Default$a = {
+    parent: null,
+    toggle: true
+  };
+  const DefaultType$a = {
+    parent: '(null|element)',
+    toggle: 'boolean'
+  };
+
+  /**
+   * Class definition
+   */
+
+  class Collapse extends BaseComponent {
+    constructor(element, config) {
+      super(element, config);
+      this._isTransitioning = false;
+      this._triggerArray = [];
+      const toggleList = SelectorEngine.find(SELECTOR_DATA_TOGGLE$4);
+      for (const elem of toggleList) {
+        const selector = SelectorEngine.getSelectorFromElement(elem);
+        const filterElement = SelectorEngine.find(selector).filter(foundElement => foundElement === this._element);
+        if (selector !== null && filterElement.length) {
+          this._triggerArray.push(elem);
+        }
+      }
+      this._initializeChildren();
+      if (!this._config.parent) {
+        this._addAriaAndCollapsedClass(this._triggerArray, this._isShown());
+      }
+      if (this._config.toggle) {
+        this.toggle();
+      }
+    }
+
+    // Getters
+    static get Default() {
+      return Default$a;
+    }
+    static get DefaultType() {
+      return DefaultType$a;
+    }
+    static get NAME() {
+      return NAME$b;
+    }
+
+    // Public
+    toggle() {
+      if (this._isShown()) {
+        this.hide();
+      } else {
+        this.show();
+      }
+    }
+    show() {
+      if (this._isTransitioning || this._isShown()) {
+        return;
+      }
+      let activeChildren = [];
+
+      // find active children
+      if (this._config.parent) {
+        activeChildren = this._getFirstLevelChildren(SELECTOR_ACTIVES).filter(element => element !== this._element).map(element => Collapse.getOrCreateInstance(element, {
+          toggle: false
+        }));
+      }
+      if (activeChildren.length && activeChildren[0]._isTransitioning) {
+        return;
+      }
+      const startEvent = EventHandler.trigger(this._element, EVENT_SHOW$6);
+      if (startEvent.defaultPrevented) {
+        return;
+      }
+      for (const activeInstance of activeChildren) {
+        activeInstance.hide();
+      }
+      const dimension = this._getDimension();
+      this._element.classList.remove(CLASS_NAME_COLLAPSE);
+      this._element.classList.add(CLASS_NAME_COLLAPSING);
+      this._element.style[dimension] = 0;
+      this._addAriaAndCollapsedClass(this._triggerArray, true);
+      this._isTransitioning = true;
+      const complete = () => {
+        this._isTransitioning = false;
+        this._element.classList.remove(CLASS_NAME_COLLAPSING);
+        this._element.classList.add(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$7);
+        this._element.style[dimension] = '';
+        EventHandler.trigger(this._element, EVENT_SHOWN$6);
+      };
+      const capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1);
+      const scrollSize = `scroll${capitalizedDimension}`;
+      this._queueCallback(complete, this._element, true);
+      this._element.style[dimension] = `${this._element[scrollSize]}px`;
+    }
+    hide() {
+      if (this._isTransitioning || !this._isShown()) {
+        return;
+      }
+      const startEvent = EventHandler.trigger(this._element, EVENT_HIDE$6);
+      if (startEvent.defaultPrevented) {
+        return;
+      }
+      const dimension = this._getDimension();
+      this._element.style[dimension] = `${this._element.getBoundingClientRect()[dimension]}px`;
+      reflow(this._element);
+      this._element.classList.add(CLASS_NAME_COLLAPSING);
+      this._element.classList.remove(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$7);
+      for (const trigger of this._triggerArray) {
+        const element = SelectorEngine.getElementFromSelector(trigger);
+        if (element && !this._isShown(element)) {
+          this._addAriaAndCollapsedClass([trigger], false);
+        }
+      }
+      this._isTransitioning = true;
+      const complete = () => {
+        this._isTransitioning = false;
+        this._element.classList.remove(CLASS_NAME_COLLAPSING);
+        this._element.classList.add(CLASS_NAME_COLLAPSE);
+        EventHandler.trigger(this._element, EVENT_HIDDEN$6);
+      };
+      this._element.style[dimension] = '';
+      this._queueCallback(complete, this._element, true);
+    }
+    _isShown(element = this._element) {
+      return element.classList.contains(CLASS_NAME_SHOW$7);
+    }
+
+    // Private
+    _configAfterMerge(config) {
+      config.toggle = Boolean(config.toggle); // Coerce string values
+      config.parent = getElement(config.parent);
+      return config;
+    }
+    _getDimension() {
+      return this._element.classList.contains(CLASS_NAME_HORIZONTAL) ? WIDTH : HEIGHT;
+    }
+    _initializeChildren() {
+      if (!this._config.parent) {
+        return;
+      }
+      const children = this._getFirstLevelChildren(SELECTOR_DATA_TOGGLE$4);
+      for (const element of children) {
+        const selected = SelectorEngine.getElementFromSelector(element);
+        if (selected) {
+          this._addAriaAndCollapsedClass([element], this._isShown(selected));
+        }
+      }
+    }
+    _getFirstLevelChildren(selector) {
+      const children = SelectorEngine.find(CLASS_NAME_DEEPER_CHILDREN, this._config.parent);
+      // remove children if greater depth
+      return SelectorEngine.find(selector, this._config.parent).filter(element => !children.includes(element));
+    }
+    _addAriaAndCollapsedClass(triggerArray, isOpen) {
+      if (!triggerArray.length) {
+        return;
+      }
+      for (const element of triggerArray) {
+        element.classList.toggle(CLASS_NAME_COLLAPSED, !isOpen);
+        element.setAttribute('aria-expanded', isOpen);
+      }
+    }
+
+    // Static
+    static jQueryInterface(config) {
+      const _config = {};
+      if (typeof config === 'string' && /show|hide/.test(config)) {
+        _config.toggle = false;
+      }
+      return this.each(function () {
+        const data = Collapse.getOrCreateInstance(this, _config);
+        if (typeof config === 'string') {
+          if (typeof data[config] === 'undefined') {
+            throw new TypeError(`No method named "${config}"`);
+          }
+          data[config]();
+        }
+      });
+    }
+  }
+
+  /**
+   * Data API implementation
+   */
+
+  EventHandler.on(document, EVENT_CLICK_DATA_API$4, SELECTOR_DATA_TOGGLE$4, function (event) {
+    // preventDefault only for <a> elements (which change the URL) not inside the collapsible element
+    if (event.target.tagName === 'A' || event.delegateTarget && event.delegateTarget.tagName === 'A') {
+      event.preventDefault();
+    }
+    for (const element of SelectorEngine.getMultipleElementsFromSelector(this)) {
+      Collapse.getOrCreateInstance(element, {
+        toggle: false
+      }).toggle();
+    }
+  });
+
+  /**
+   * jQuery
+   */
+
+  defineJQueryPlugin(Collapse);
+
+  var top = 'top';
+  var bottom = 'bottom';
+  var right = 'right';
+  var left = 'left';
+  var auto = 'auto';
+  var basePlacements = [top, bottom, right, left];
+  var start = 'start';
+  var end = 'end';
+  var clippingParents = 'clippingParents';
+  var viewport = 'viewport';
+  var popper = 'popper';
+  var reference = 'reference';
+  var variationPlacements = /*#__PURE__*/basePlacements.reduce(function (acc, placement) {
+    return acc.concat([placement + "-" + start, placement + "-" + end]);
+  }, []);
+  var placements = /*#__PURE__*/[].concat(basePlacements, [auto]).reduce(function (acc, placement) {
+    return acc.concat([placement, placement + "-" + start, placement + "-" + end]);
+  }, []); // modifiers that need to read the DOM
+
+  var beforeRead = 'beforeRead';
+  var read = 'read';
+  var afterRead = 'afterRead'; // pure-logic modifiers
+
+  var beforeMain = 'beforeMain';
+  var main = 'main';
+  var afterMain = 'afterMain'; // modifier with the purpose to write to the DOM (or write into a framework state)
+
+  var beforeWrite = 'beforeWrite';
+  var write = 'write';
+  var afterWrite = 'afterWrite';
+  var modifierPhases = [beforeRead, read, afterRead, beforeMain, main, afterMain, beforeWrite, write, afterWrite];
+
+  function getNodeName(element) {
+    return element ? (element.nodeName || '').toLowerCase() : null;
+  }
+
+  function getWindow(node) {
+    if (node == null) {
+      return window;
+    }
+
+    if (node.toString() !== '[object Window]') {
+      var ownerDocument = node.ownerDocument;
+      return ownerDocument ? ownerDocument.defaultView || window : window;
+    }
+
+    return node;
+  }
+
+  function isElement(node) {
+    var OwnElement = getWindow(node).Element;
+    return node instanceof OwnElement || node instanceof Element;
+  }
+
+  function isHTMLElement(node) {
+    var OwnElement = getWindow(node).HTMLElement;
+    return node instanceof OwnElement || node instanceof HTMLElement;
+  }
+
+  function isShadowRoot(node) {
+    // IE 11 has no ShadowRoot
+    if (typeof ShadowRoot === 'undefined') {
+      return false;
+    }
+
+    var OwnElement = getWindow(node).ShadowRoot;
+    return node instanceof OwnElement || node instanceof ShadowRoot;
+  }
+
+  // and applies them to the HTMLElements such as popper and arrow
+
+  function applyStyles(_ref) {
+    var state = _ref.state;
+    Object.keys(state.elements).forEach(function (name) {
+      var style = state.styles[name] || {};
+      var attributes = state.attributes[name] || {};
+      var element = state.elements[name]; // arrow is optional + virtual elements
+
+      if (!isHTMLElement(element) || !getNodeName(element)) {
+        return;
+      } // Flow doesn't support to extend this property, but it's the most
+      // effective way to apply styles to an HTMLElement
+      // $FlowFixMe[cannot-write]
+
+
+      Object.assign(element.style, style);
+      Object.keys(attributes).forEach(function (name) {
+        var value = attributes[name];
+
+        if (value === false) {
+          element.removeAttribute(name);
+        } else {
+          element.setAttribute(name, value === true ? '' : value);
+        }
+      });
+    });
+  }
+
+  function effect$2(_ref2) {
+    var state = _ref2.state;
+    var initialStyles = {
+      popper: {
+        position: state.options.strategy,
+        left: '0',
+        top: '0',
+        margin: '0'
+      },
+      arrow: {
+        position: 'absolute'
+      },
+      reference: {}
+    };
+    Object.assign(state.elements.popper.style, initialStyles.popper);
+    state.styles = initialStyles;
+
+    if (state.elements.arrow) {
+      Object.assign(state.elements.arrow.style, initialStyles.arrow);
+    }
+
+    return function () {
+      Object.keys(state.elements).forEach(function (name) {
+        var element = state.elements[name];
+        var attributes = state.attributes[name] || {};
+        var styleProperties = Object.keys(state.styles.hasOwnProperty(name) ? state.styles[name] : initialStyles[name]); // Set all values to an empty string to unset them
+
+        var style = styleProperties.reduce(function (style, property) {
+          style[property] = '';
+          return style;
+        }, {}); // arrow is optional + virtual elements
+
+        if (!isHTMLElement(element) || !getNodeName(element)) {
+          return;
+        }
+
+        Object.assign(element.style, style);
+        Object.keys(attributes).forEach(function (attribute) {
+          element.removeAttribute(attribute);
+        });
+      });
+    };
+  } // eslint-disable-next-line import/no-unused-modules
+
+
+  const applyStyles$1 = {
+    name: 'applyStyles',
+    enabled: true,
+    phase: 'write',
+    fn: applyStyles,
+    effect: effect$2,
+    requires: ['computeStyles']
+  };
+
+  function getBasePlacement(placement) {
+    return placement.split('-')[0];
+  }
+
+  var max = Math.max;
+  var min = Math.min;
+  var round = Math.round;
+
+  function getUAString() {
+    var uaData = navigator.userAgentData;
+
+    if (uaData != null && uaData.brands && Array.isArray(uaData.brands)) {
+      return uaData.brands.map(function (item) {
+        return item.brand + "/" + item.version;
+      }).join(' ');
+    }
+
+    return navigator.userAgent;
+  }
+
+  function isLayoutViewport() {
+    return !/^((?!chrome|android).)*safari/i.test(getUAString());
+  }
+
+  function getBoundingClientRect(element, includeScale, isFixedStrategy) {
+    if (includeScale === void 0) {
+      includeScale = false;
+    }
+
+    if (isFixedStrategy === void 0) {
+      isFixedStrategy = false;
+    }
+
+    var clientRect = element.getBoundingClientRect();
+    var scaleX = 1;
+    var scaleY = 1;
+
+    if (includeScale && isHTMLElement(element)) {
+      scaleX = element.offsetWidth > 0 ? round(clientRect.width) / element.offsetWidth || 1 : 1;
+      scaleY = element.offsetHeight > 0 ? round(clientRect.height) / element.offsetHeight || 1 : 1;
+    }
+
+    var _ref = isElement(element) ? getWindow(element) : window,
+        visualViewport = _ref.visualViewport;
+
+    var addVisualOffsets = !isLayoutViewport() && isFixedStrategy;
+    var x = (clientRect.left + (addVisualOffsets && visualViewport ? visualViewport.offsetLeft : 0)) / scaleX;
+    var y = (clientRect.top + (addVisualOffsets && visualViewport ? visualViewport.offsetTop : 0)) / scaleY;
+    var width = clientRect.width / scaleX;
+    var height = clientRect.height / scaleY;
+    return {
+      width: width,
+      height: height,
+      top: y,
+      right: x + width,
+      bottom: y + height,
+      left: x,
+      x: x,
+      y: y
+    };
+  }
+
+  // means it doesn't take into account transforms.
+
+  function getLayoutRect(element) {
+    var clientRect = getBoundingClientRect(element); // Use the clientRect sizes if it's not been transformed.
+    // Fixes https://github.com/popperjs/popper-core/issues/1223
+
+    var width = element.offsetWidth;
+    var height = element.offsetHeight;
+
+    if (Math.abs(clientRect.width - width) <= 1) {
+      width = clientRect.width;
+    }
+
+    if (Math.abs(clientRect.height - height) <= 1) {
+      height = clientRect.height;
+    }
+
+    return {
+      x: element.offsetLeft,
+      y: element.offsetTop,
+      width: width,
+      height: height
+    };
+  }
+
+  function contains(parent, child) {
+    var rootNode = child.getRootNode && child.getRootNode(); // First, attempt with faster native method
+
+    if (parent.contains(child)) {
+      return true;
+    } // then fallback to custom implementation with Shadow DOM support
+    else if (rootNode && isShadowRoot(rootNode)) {
+        var next = child;
+
+        do {
+          if (next && parent.isSameNode(next)) {
+            return true;
+          } // $FlowFixMe[prop-missing]: need a better way to handle this...
+
+
+          next = next.parentNode || next.host;
+        } while (next);
+      } // Give up, the result is false
+
+
+    return false;
+  }
+
+  function getComputedStyle$1(element) {
+    return getWindow(element).getComputedStyle(element);
+  }
+
+  function isTableElement(element) {
+    return ['table', 'td', 'th'].indexOf(getNodeName(element)) >= 0;
+  }
+
+  function getDocumentElement(element) {
+    // $FlowFixMe[incompatible-return]: assume body is always available
+    return ((isElement(element) ? element.ownerDocument : // $FlowFixMe[prop-missing]
+    element.document) || window.document).documentElement;
+  }
+
+  function getParentNode(element) {
+    if (getNodeName(element) === 'html') {
+      return element;
+    }
+
+    return (// this is a quicker (but less type safe) way to save quite some bytes from the bundle
+      // $FlowFixMe[incompatible-return]
+      // $FlowFixMe[prop-missing]
+      element.assignedSlot || // step into the shadow DOM of the parent of a slotted node
+      element.parentNode || ( // DOM Element detected
+      isShadowRoot(element) ? element.host : null) || // ShadowRoot detected
+      // $FlowFixMe[incompatible-call]: HTMLElement is a Node
+      getDocumentElement(element) // fallback
+
+    );
+  }
+
+  function getTrueOffsetParent(element) {
+    if (!isHTMLElement(element) || // https://github.com/popperjs/popper-core/issues/837
+    getComputedStyle$1(element).position === 'fixed') {
+      return null;
+    }
+
+    return element.offsetParent;
+  } // `.offsetParent` reports `null` for fixed elements, while absolute elements
+  // return the containing block
+
+
+  function getContainingBlock(element) {
+    var isFirefox = /firefox/i.test(getUAString());
+    var isIE = /Trident/i.test(getUAString());
+
+    if (isIE && isHTMLElement(element)) {
+      // In IE 9, 10 and 11 fixed elements containing block is always established by the viewport
+      var elementCss = getComputedStyle$1(element);
+
+      if (elementCss.position === 'fixed') {
+        return null;
+      }
+    }
+
+    var currentNode = getParentNode(element);
+
+    if (isShadowRoot(currentNode)) {
+      currentNode = currentNode.host;
+    }
+
+    while (isHTMLElement(currentNode) && ['html', 'body'].indexOf(getNodeName(currentNode)) < 0) {
+      var css = getComputedStyle$1(currentNode); // This is non-exhaustive but covers the most common CSS properties that
+      // create a containing block.
+      // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block
+
+      if (css.transform !== 'none' || css.perspective !== 'none' || css.contain === 'paint' || ['transform', 'perspective'].indexOf(css.willChange) !== -1 || isFirefox && css.willChange === 'filter' || isFirefox && css.filter && css.filter !== 'none') {
+        return currentNode;
+      } else {
+        currentNode = currentNode.parentNode;
+      }
+    }
+
+    return null;
+  } // Gets the closest ancestor positioned element. Handles some edge cases,
+  // such as table ancestors and cross browser bugs.
+
+
+  function getOffsetParent(element) {
+    var window = getWindow(element);
+    var offsetParent = getTrueOffsetParent(element);
+
+    while (offsetParent && isTableElement(offsetParent) && getComputedStyle$1(offsetParent).position === 'static') {
+      offsetParent = getTrueOffsetParent(offsetParent);
+    }
+
+    if (offsetParent && (getNodeName(offsetParent) === 'html' || getNodeName(offsetParent) === 'body' && getComputedStyle$1(offsetParent).position === 'static')) {
+      return window;
+    }
+
+    return offsetParent || getContainingBlock(element) || window;
+  }
+
+  function getMainAxisFromPlacement(placement) {
+    return ['top', 'bottom'].indexOf(placement) >= 0 ? 'x' : 'y';
+  }
+
+  function within(min$1, value, max$1) {
+    return max(min$1, min(value, max$1));
+  }
+  function withinMaxClamp(min, value, max) {
+    var v = within(min, value, max);
+    return v > max ? max : v;
+  }
+
+  function getFreshSideObject() {
+    return {
+      top: 0,
+      right: 0,
+      bottom: 0,
+      left: 0
+    };
+  }
+
+  function mergePaddingObject(paddingObject) {
+    return Object.assign({}, getFreshSideObject(), paddingObject);
+  }
+
+  function expandToHashMap(value, keys) {
+    return keys.reduce(function (hashMap, key) {
+      hashMap[key] = value;
+      return hashMap;
+    }, {});
+  }
+
+  var toPaddingObject = function toPaddingObject(padding, state) {
+    padding = typeof padding === 'function' ? padding(Object.assign({}, state.rects, {
+      placement: state.placement
+    })) : padding;
+    return mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));
+  };
+
+  function arrow(_ref) {
+    var _state$modifiersData$;
+
+    var state = _ref.state,
+        name = _ref.name,
+        options = _ref.options;
+    var arrowElement = state.elements.arrow;
+    var popperOffsets = state.modifiersData.popperOffsets;
+    var basePlacement = getBasePlacement(state.placement);
+    var axis = getMainAxisFromPlacement(basePlacement);
+    var isVertical = [left, right].indexOf(basePlacement) >= 0;
+    var len = isVertical ? 'height' : 'width';
+
+    if (!arrowElement || !popperOffsets) {
+      return;
+    }
+
+    var paddingObject = toPaddingObject(options.padding, state);
+    var arrowRect = getLayoutRect(arrowElement);
+    var minProp = axis === 'y' ? top : left;
+    var maxProp = axis === 'y' ? bottom : right;
+    var endDiff = state.rects.reference[len] + state.rects.reference[axis] - popperOffsets[axis] - state.rects.popper[len];
+    var startDiff = popperOffsets[axis] - state.rects.reference[axis];
+    var arrowOffsetParent = getOffsetParent(arrowElement);
+    var clientSize = arrowOffsetParent ? axis === 'y' ? arrowOffsetParent.clientHeight || 0 : arrowOffsetParent.clientWidth || 0 : 0;
+    var centerToReference = endDiff / 2 - startDiff / 2; // Make sure the arrow doesn't overflow the popper if the center point is
+    // outside of the popper bounds
+
+    var min = paddingObject[minProp];
+    var max = clientSize - arrowRect[len] - paddingObject[maxProp];
+    var center = clientSize / 2 - arrowRect[len] / 2 + centerToReference;
+    var offset = within(min, center, max); // Prevents breaking syntax highlighting...
+
+    var axisProp = axis;
+    state.modifiersData[name] = (_state$modifiersData$ = {}, _state$modifiersData$[axisProp] = offset, _state$modifiersData$.centerOffset = offset - center, _state$modifiersData$);
+  }
+
+  function effect$1(_ref2) {
+    var state = _ref2.state,
+        options = _ref2.options;
+    var _options$element = options.element,
+        arrowElement = _options$element === void 0 ? '[data-popper-arrow]' : _options$element;
+
+    if (arrowElement == null) {
+      return;
+    } // CSS selector
+
+
+    if (typeof arrowElement === 'string') {
+      arrowElement = state.elements.popper.querySelector(arrowElement);
+
+      if (!arrowElement) {
+        return;
+      }
+    }
+
+    if (!contains(state.elements.popper, arrowElement)) {
+      return;
+    }
+
+    state.elements.arrow = arrowElement;
+  } // eslint-disable-next-line import/no-unused-modules
+
+
+  const arrow$1 = {
+    name: 'arrow',
+    enabled: true,
+    phase: 'main',
+    fn: arrow,
+    effect: effect$1,
+    requires: ['popperOffsets'],
+    requiresIfExists: ['preventOverflow']
+  };
+
+  function getVariation(placement) {
+    return placement.split('-')[1];
+  }
+
+  var unsetSides = {
+    top: 'auto',
+    right: 'auto',
+    bottom: 'auto',
+    left: 'auto'
+  }; // Round the offsets to the nearest suitable subpixel based on the DPR.
+  // Zooming can change the DPR, but it seems to report a value that will
+  // cleanly divide the values into the appropriate subpixels.
+
+  function roundOffsetsByDPR(_ref, win) {
+    var x = _ref.x,
+        y = _ref.y;
+    var dpr = win.devicePixelRatio || 1;
+    return {
+      x: round(x * dpr) / dpr || 0,
+      y: round(y * dpr) / dpr || 0
+    };
+  }
+
+  function mapToStyles(_ref2) {
+    var _Object$assign2;
+
+    var popper = _ref2.popper,
+        popperRect = _ref2.popperRect,
+        placement = _ref2.placement,
+        variation = _ref2.variation,
+        offsets = _ref2.offsets,
+        position = _ref2.position,
+        gpuAcceleration = _ref2.gpuAcceleration,
+        adaptive = _ref2.adaptive,
+        roundOffsets = _ref2.roundOffsets,
+        isFixed = _ref2.isFixed;
+    var _offsets$x = offsets.x,
+        x = _offsets$x === void 0 ? 0 : _offsets$x,
+        _offsets$y = offsets.y,
+        y = _offsets$y === void 0 ? 0 : _offsets$y;
+
+    var _ref3 = typeof roundOffsets === 'function' ? roundOffsets({
+      x: x,
+      y: y
+    }) : {
+      x: x,
+      y: y
+    };
+
+    x = _ref3.x;
+    y = _ref3.y;
+    var hasX = offsets.hasOwnProperty('x');
+    var hasY = offsets.hasOwnProperty('y');
+    var sideX = left;
+    var sideY = top;
+    var win = window;
+
+    if (adaptive) {
+      var offsetParent = getOffsetParent(popper);
+      var heightProp = 'clientHeight';
+      var widthProp = 'clientWidth';
+
+      if (offsetParent === getWindow(popper)) {
+        offsetParent = getDocumentElement(popper);
+
+        if (getComputedStyle$1(offsetParent).position !== 'static' && position === 'absolute') {
+          heightProp = 'scrollHeight';
+          widthProp = 'scrollWidth';
+        }
+      } // $FlowFixMe[incompatible-cast]: force type refinement, we compare offsetParent with window above, but Flow doesn't detect it
+
+
+      offsetParent = offsetParent;
+
+      if (placement === top || (placement === left || placement === right) && variation === end) {
+        sideY = bottom;
+        var offsetY = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.height : // $FlowFixMe[prop-missing]
+        offsetParent[heightProp];
+        y -= offsetY - popperRect.height;
+        y *= gpuAcceleration ? 1 : -1;
+      }
+
+      if (placement === left || (placement === top || placement === bottom) && variation === end) {
+        sideX = right;
+        var offsetX = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.width : // $FlowFixMe[prop-missing]
+        offsetParent[widthProp];
+        x -= offsetX - popperRect.width;
+        x *= gpuAcceleration ? 1 : -1;
+      }
+    }
+
+    var commonStyles = Object.assign({
+      position: position
+    }, adaptive && unsetSides);
+
+    var _ref4 = roundOffsets === true ? roundOffsetsByDPR({
+      x: x,
+      y: y
+    }, getWindow(popper)) : {
+      x: x,
+      y: y
+    };
+
+    x = _ref4.x;
+    y = _ref4.y;
+
+    if (gpuAcceleration) {
+      var _Object$assign;
+
+      return Object.assign({}, commonStyles, (_Object$assign = {}, _Object$assign[sideY] = hasY ? '0' : '', _Object$assign[sideX] = hasX ? '0' : '', _Object$assign.transform = (win.devicePixelRatio || 1) <= 1 ? "translate(" + x + "px, " + y + "px)" : "translate3d(" + x + "px, " + y + "px, 0)", _Object$assign));
+    }
+
+    return Object.assign({}, commonStyles, (_Object$assign2 = {}, _Object$assign2[sideY] = hasY ? y + "px" : '', _Object$assign2[sideX] = hasX ? x + "px" : '', _Object$assign2.transform = '', _Object$assign2));
+  }
+
+  function computeStyles(_ref5) {
+    var state = _ref5.state,
+        options = _ref5.options;
+    var _options$gpuAccelerat = options.gpuAcceleration,
+        gpuAcceleration = _options$gpuAccelerat === void 0 ? true : _options$gpuAccelerat,
+        _options$adaptive = options.adaptive,
+        adaptive = _options$adaptive === void 0 ? true : _options$adaptive,
+        _options$roundOffsets = options.roundOffsets,
+        roundOffsets = _options$roundOffsets === void 0 ? true : _options$roundOffsets;
+    var commonStyles = {
+      placement: getBasePlacement(state.placement),
+      variation: getVariation(state.placement),
+      popper: state.elements.popper,
+      popperRect: state.rects.popper,
+      gpuAcceleration: gpuAcceleration,
+      isFixed: state.options.strategy === 'fixed'
+    };
+
+    if (state.modifiersData.popperOffsets != null) {
+      state.styles.popper = Object.assign({}, state.styles.popper, mapToStyles(Object.assign({}, commonStyles, {
+        offsets: state.modifiersData.popperOffsets,
+        position: state.options.strategy,
+        adaptive: adaptive,
+        roundOffsets: roundOffsets
+      })));
+    }
+
+    if (state.modifiersData.arrow != null) {
+      state.styles.arrow = Object.assign({}, state.styles.arrow, mapToStyles(Object.assign({}, commonStyles, {
+        offsets: state.modifiersData.arrow,
+        position: 'absolute',
+        adaptive: false,
+        roundOffsets: roundOffsets
+      })));
+    }
+
+    state.attributes.popper = Object.assign({}, state.attributes.popper, {
+      'data-popper-placement': state.placement
+    });
+  } // eslint-disable-next-line import/no-unused-modules
+
+
+  const computeStyles$1 = {
+    name: 'computeStyles',
+    enabled: true,
+    phase: 'beforeWrite',
+    fn: computeStyles,
+    data: {}
+  };
+
+  var passive = {
+    passive: true
+  };
+
+  function effect(_ref) {
+    var state = _ref.state,
+        instance = _ref.instance,
+        options = _ref.options;
+    var _options$scroll = options.scroll,
+        scroll = _options$scroll === void 0 ? true : _options$scroll,
+        _options$resize = options.resize,
+        resize = _options$resize === void 0 ? true : _options$resize;
+    var window = getWindow(state.elements.popper);
+    var scrollParents = [].concat(state.scrollParents.reference, state.scrollParents.popper);
+
+    if (scroll) {
+      scrollParents.forEach(function (scrollParent) {
+        scrollParent.addEventListener('scroll', instance.update, passive);
+      });
+    }
+
+    if (resize) {
+      window.addEventListener('resize', instance.update, passive);
+    }
+
+    return function () {
+      if (scroll) {
+        scrollParents.forEach(function (scrollParent) {
+          scrollParent.removeEventListener('scroll', instance.update, passive);
+        });
+      }
+
+      if (resize) {
+        window.removeEventListener('resize', instance.update, passive);
+      }
+    };
+  } // eslint-disable-next-line import/no-unused-modules
+
+
+  const eventListeners = {
+    name: 'eventListeners',
+    enabled: true,
+    phase: 'write',
+    fn: function fn() {},
+    effect: effect,
+    data: {}
+  };
+
+  var hash$1 = {
+    left: 'right',
+    right: 'left',
+    bottom: 'top',
+    top: 'bottom'
+  };
+  function getOppositePlacement(placement) {
+    return placement.replace(/left|right|bottom|top/g, function (matched) {
+      return hash$1[matched];
+    });
+  }
+
+  var hash = {
+    start: 'end',
+    end: 'start'
+  };
+  function getOppositeVariationPlacement(placement) {
+    return placement.replace(/start|end/g, function (matched) {
+      return hash[matched];
+    });
+  }
+
+  function getWindowScroll(node) {
+    var win = getWindow(node);
+    var scrollLeft = win.pageXOffset;
+    var scrollTop = win.pageYOffset;
+    return {
+      scrollLeft: scrollLeft,
+      scrollTop: scrollTop
+    };
+  }
+
+  function getWindowScrollBarX(element) {
+    // If <html> has a CSS width greater than the viewport, then this will be
+    // incorrect for RTL.
+    // Popper 1 is broken in this case and never had a bug report so let's assume
+    // it's not an issue. I don't think anyone ever specifies width on <html>
+    // anyway.
+    // Browsers where the left scrollbar doesn't cause an issue report `0` for
+    // this (e.g. Edge 2019, IE11, Safari)
+    return getBoundingClientRect(getDocumentElement(element)).left + getWindowScroll(element).scrollLeft;
+  }
+
+  function getViewportRect(element, strategy) {
+    var win = getWindow(element);
+    var html = getDocumentElement(element);
+    var visualViewport = win.visualViewport;
+    var width = html.clientWidth;
+    var height = html.clientHeight;
+    var x = 0;
+    var y = 0;
+
+    if (visualViewport) {
+      width = visualViewport.width;
+      height = visualViewport.height;
+      var layoutViewport = isLayoutViewport();
+
+      if (layoutViewport || !layoutViewport && strategy === 'fixed') {
+        x = visualViewport.offsetLeft;
+        y = visualViewport.offsetTop;
+      }
+    }
+
+    return {
+      width: width,
+      height: height,
+      x: x + getWindowScrollBarX(element),
+      y: y
+    };
+  }
+
+  // of the `<html>` and `<body>` rect bounds if horizontally scrollable
+
+  function getDocumentRect(element) {
+    var _element$ownerDocumen;
+
+    var html = getDocumentElement(element);
+    var winScroll = getWindowScroll(element);
+    var body = (_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body;
+    var width = max(html.scrollWidth, html.clientWidth, body ? body.scrollWidth : 0, body ? body.clientWidth : 0);
+    var height = max(html.scrollHeight, html.clientHeight, body ? body.scrollHeight : 0, body ? body.clientHeight : 0);
+    var x = -winScroll.scrollLeft + getWindowScrollBarX(element);
+    var y = -winScroll.scrollTop;
+
+    if (getComputedStyle$1(body || html).direction === 'rtl') {
+      x += max(html.clientWidth, body ? body.clientWidth : 0) - width;
+    }
+
+    return {
+      width: width,
+      height: height,
+      x: x,
+      y: y
+    };
+  }
+
+  function isScrollParent(element) {
+    // Firefox wants us to check `-x` and `-y` variations as well
+    var _getComputedStyle = getComputedStyle$1(element),
+        overflow = _getComputedStyle.overflow,
+        overflowX = _getComputedStyle.overflowX,
+        overflowY = _getComputedStyle.overflowY;
+
+    return /auto|scroll|overlay|hidden/.test(overflow + overflowY + overflowX);
+  }
+
+  function getScrollParent(node) {
+    if (['html', 'body', '#document'].indexOf(getNodeName(node)) >= 0) {
+      // $FlowFixMe[incompatible-return]: assume body is always available
+      return node.ownerDocument.body;
+    }
+
+    if (isHTMLElement(node) && isScrollParent(node)) {
+      return node;
+    }
+
+    return getScrollParent(getParentNode(node));
+  }
+
+  /*
+  given a DOM element, return the list of all scroll parents, up the list of ancesors
+  until we get to the top window object. This list is what we attach scroll listeners
+  to, because if any of these parent elements scroll, we'll need to re-calculate the
+  reference element's position.
+  */
+
+  function listScrollParents(element, list) {
+    var _element$ownerDocumen;
+
+    if (list === void 0) {
+      list = [];
+    }
+
+    var scrollParent = getScrollParent(element);
+    var isBody = scrollParent === ((_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body);
+    var win = getWindow(scrollParent);
+    var target = isBody ? [win].concat(win.visualViewport || [], isScrollParent(scrollParent) ? scrollParent : []) : scrollParent;
+    var updatedList = list.concat(target);
+    return isBody ? updatedList : // $FlowFixMe[incompatible-call]: isBody tells us target will be an HTMLElement here
+    updatedList.concat(listScrollParents(getParentNode(target)));
+  }
+
+  function rectToClientRect(rect) {
+    return Object.assign({}, rect, {
+      left: rect.x,
+      top: rect.y,
+      right: rect.x + rect.width,
+      bottom: rect.y + rect.height
+    });
+  }
+
+  function getInnerBoundingClientRect(element, strategy) {
+    var rect = getBoundingClientRect(element, false, strategy === 'fixed');
+    rect.top = rect.top + element.clientTop;
+    rect.left = rect.left + element.clientLeft;
+    rect.bottom = rect.top + element.clientHeight;
+    rect.right = rect.left + element.clientWidth;
+    rect.width = element.clientWidth;
+    rect.height = element.clientHeight;
+    rect.x = rect.left;
+    rect.y = rect.top;
+    return rect;
+  }
+
+  function getClientRectFromMixedType(element, clippingParent, strategy) {
+    return clippingParent === viewport ? rectToClientRect(getViewportRect(element, strategy)) : isElement(clippingParent) ? getInnerBoundingClientRect(clippingParent, strategy) : rectToClientRect(getDocumentRect(getDocumentElement(element)));
+  } // A "clipping parent" is an overflowable container with the characteristic of
+  // clipping (or hiding) overflowing elements with a position different from
+  // `initial`
+
+
+  function getClippingParents(element) {
+    var clippingParents = listScrollParents(getParentNode(element));
+    var canEscapeClipping = ['absolute', 'fixed'].indexOf(getComputedStyle$1(element).position) >= 0;
+    var clipperElement = canEscapeClipping && isHTMLElement(element) ? getOffsetParent(element) : element;
+
+    if (!isElement(clipperElement)) {
+      return [];
+    } // $FlowFixMe[incompatible-return]: https://github.com/facebook/flow/issues/1414
+
+
+    return clippingParents.filter(function (clippingParent) {
+      return isElement(clippingParent) && contains(clippingParent, clipperElement) && getNodeName(clippingParent) !== 'body';
+    });
+  } // Gets the maximum area that the element is visible in due to any number of
+  // clipping parents
+
+
+  function getClippingRect(element, boundary, rootBoundary, strategy) {
+    var mainClippingParents = boundary === 'clippingParents' ? getClippingParents(element) : [].concat(boundary);
+    var clippingParents = [].concat(mainClippingParents, [rootBoundary]);
+    var firstClippingParent = clippingParents[0];
+    var clippingRect = clippingParents.reduce(function (accRect, clippingParent) {
+      var rect = getClientRectFromMixedType(element, clippingParent, strategy);
+      accRect.top = max(rect.top, accRect.top);
+      accRect.right = min(rect.right, accRect.right);
+      accRect.bottom = min(rect.bottom, accRect.bottom);
+      accRect.left = max(rect.left, accRect.left);
+      return accRect;
+    }, getClientRectFromMixedType(element, firstClippingParent, strategy));
+    clippingRect.width = clippingRect.right - clippingRect.left;
+    clippingRect.height = clippingRect.bottom - clippingRect.top;
+    clippingRect.x = clippingRect.left;
+    clippingRect.y = clippingRect.top;
+    return clippingRect;
+  }
+
+  function computeOffsets(_ref) {
+    var reference = _ref.reference,
+        element = _ref.element,
+        placement = _ref.placement;
+    var basePlacement = placement ? getBasePlacement(placement) : null;
+    var variation = placement ? getVariation(placement) : null;
+    var commonX = reference.x + reference.width / 2 - element.width / 2;
+    var commonY = reference.y + reference.height / 2 - element.height / 2;
+    var offsets;
+
+    switch (basePlacement) {
+      case top:
+        offsets = {
+          x: commonX,
+          y: reference.y - element.height
+        };
+        break;
+
+      case bottom:
+        offsets = {
+          x: commonX,
+          y: reference.y + reference.height
+        };
+        break;
+
+      case right:
+        offsets = {
+          x: reference.x + reference.width,
+          y: commonY
+        };
+        break;
+
+      case left:
+        offsets = {
+          x: reference.x - element.width,
+          y: commonY
+        };
+        break;
+
+      default:
+        offsets = {
+          x: reference.x,
+          y: reference.y
+        };
+    }
+
+    var mainAxis = basePlacement ? getMainAxisFromPlacement(basePlacement) : null;
+
+    if (mainAxis != null) {
+      var len = mainAxis === 'y' ? 'height' : 'width';
+
+      switch (variation) {
+        case start:
+          offsets[mainAxis] = offsets[mainAxis] - (reference[len] / 2 - element[len] / 2);
+          break;
+
+        case end:
+          offsets[mainAxis] = offsets[mainAxis] + (reference[len] / 2 - element[len] / 2);
+          break;
+      }
+    }
+
+    return offsets;
+  }
+
+  function detectOverflow(state, options) {
+    if (options === void 0) {
+      options = {};
+    }
+
+    var _options = options,
+        _options$placement = _options.placement,
+        placement = _options$placement === void 0 ? state.placement : _options$placement,
+        _options$strategy = _options.strategy,
+        strategy = _options$strategy === void 0 ? state.strategy : _options$strategy,
+        _options$boundary = _options.boundary,
+        boundary = _options$boundary === void 0 ? clippingParents : _options$boundary,
+        _options$rootBoundary = _options.rootBoundary,
+        rootBoundary = _options$rootBoundary === void 0 ? viewport : _options$rootBoundary,
+        _options$elementConte = _options.elementContext,
+        elementContext = _options$elementConte === void 0 ? popper : _options$elementConte,
+        _options$altBoundary = _options.altBoundary,
+        altBoundary = _options$altBoundary === void 0 ? false : _options$altBoundary,
+        _options$padding = _options.padding,
+        padding = _options$padding === void 0 ? 0 : _options$padding;
+    var paddingObject = mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));
+    var altContext = elementContext === popper ? reference : popper;
+    var popperRect = state.rects.popper;
+    var element = state.elements[altBoundary ? altContext : elementContext];
+    var clippingClientRect = getClippingRect(isElement(element) ? element : element.contextElement || getDocumentElement(state.elements.popper), boundary, rootBoundary, strategy);
+    var referenceClientRect = getBoundingClientRect(state.elements.reference);
+    var popperOffsets = computeOffsets({
+      reference: referenceClientRect,
+      element: popperRect,
+      strategy: 'absolute',
+      placement: placement
+    });
+    var popperClientRect = rectToClientRect(Object.assign({}, popperRect, popperOffsets));
+    var elementClientRect = elementContext === popper ? popperClientRect : referenceClientRect; // positive = overflowing the clipping rect
+    // 0 or negative = within the clipping rect
+
+    var overflowOffsets = {
+      top: clippingClientRect.top - elementClientRect.top + paddingObject.top,
+      bottom: elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom,
+      left: clippingClientRect.left - elementClientRect.left + paddingObject.left,
+      right: elementClientRect.right - clippingClientRect.right + paddingObject.right
+    };
+    var offsetData = state.modifiersData.offset; // Offsets can be applied only to the popper element
+
+    if (elementContext === popper && offsetData) {
+      var offset = offsetData[placement];
+      Object.keys(overflowOffsets).forEach(function (key) {
+        var multiply = [right, bottom].indexOf(key) >= 0 ? 1 : -1;
+        var axis = [top, bottom].indexOf(key) >= 0 ? 'y' : 'x';
+        overflowOffsets[key] += offset[axis] * multiply;
+      });
+    }
+
+    return overflowOffsets;
+  }
+
+  function computeAutoPlacement(state, options) {
+    if (options === void 0) {
+      options = {};
+    }
+
+    var _options = options,
+        placement = _options.placement,
+        boundary = _options.boundary,
+        rootBoundary = _options.rootBoundary,
+        padding = _options.padding,
+        flipVariations = _options.flipVariations,
+        _options$allowedAutoP = _options.allowedAutoPlacements,
+        allowedAutoPlacements = _options$allowedAutoP === void 0 ? placements : _options$allowedAutoP;
+    var variation = getVariation(placement);
+    var placements$1 = variation ? flipVariations ? variationPlacements : variationPlacements.filter(function (placement) {
+      return getVariation(placement) === variation;
+    }) : basePlacements;
+    var allowedPlacements = placements$1.filter(function (placement) {
+      return allowedAutoPlacements.indexOf(placement) >= 0;
+    });
+
+    if (allowedPlacements.length === 0) {
+      allowedPlacements = placements$1;
+    } // $FlowFixMe[incompatible-type]: Flow seems to have problems with two array unions...
+
+
+    var overflows = allowedPlacements.reduce(function (acc, placement) {
+      acc[placement] = detectOverflow(state, {
+        placement: placement,
+        boundary: boundary,
+        rootBoundary: rootBoundary,
+        padding: padding
+      })[getBasePlacement(placement)];
+      return acc;
+    }, {});
+    return Object.keys(overflows).sort(function (a, b) {
+      return overflows[a] - overflows[b];
+    });
+  }
+
+  function getExpandedFallbackPlacements(placement) {
+    if (getBasePlacement(placement) === auto) {
+      return [];
+    }
+
+    var oppositePlacement = getOppositePlacement(placement);
+    return [getOppositeVariationPlacement(placement), oppositePlacement, getOppositeVariationPlacement(oppositePlacement)];
+  }
+
+  function flip(_ref) {
+    var state = _ref.state,
+        options = _ref.options,
+        name = _ref.name;
+
+    if (state.modifiersData[name]._skip) {
+      return;
+    }
+
+    var _options$mainAxis = options.mainAxis,
+        checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,
+        _options$altAxis = options.altAxis,
+        checkAltAxis = _options$altAxis === void 0 ? true : _options$altAxis,
+        specifiedFallbackPlacements = options.fallbackPlacements,
+        padding = options.padding,
+        boundary = options.boundary,
+        rootBoundary = options.rootBoundary,
+        altBoundary = options.altBoundary,
+        _options$flipVariatio = options.flipVariations,
+        flipVariations = _options$flipVariatio === void 0 ? true : _options$flipVariatio,
+        allowedAutoPlacements = options.allowedAutoPlacements;
+    var preferredPlacement = state.options.placement;
+    var basePlacement = getBasePlacement(preferredPlacement);
+    var isBasePlacement = basePlacement === preferredPlacement;
+    var fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipVariations ? [getOppositePlacement(preferredPlacement)] : getExpandedFallbackPlacements(preferredPlacement));
+    var placements = [preferredPlacement].concat(fallbackPlacements).reduce(function (acc, placement) {
+      return acc.concat(getBasePlacement(placement) === auto ? computeAutoPlacement(state, {
+        placement: placement,
+        boundary: boundary,
+        rootBoundary: rootBoundary,
+        padding: padding,
+        flipVariations: flipVariations,
+        allowedAutoPlacements: allowedAutoPlacements
+      }) : placement);
+    }, []);
+    var referenceRect = state.rects.reference;
+    var popperRect = state.rects.popper;
+    var checksMap = new Map();
+    var makeFallbackChecks = true;
+    var firstFittingPlacement = placements[0];
+
+    for (var i = 0; i < placements.length; i++) {
+      var placement = placements[i];
+
+      var _basePlacement = getBasePlacement(placement);
+
+      var isStartVariation = getVariation(placement) === start;
+      var isVertical = [top, bottom].indexOf(_basePlacement) >= 0;
+      var len = isVertical ? 'width' : 'height';
+      var overflow = detectOverflow(state, {
+        placement: placement,
+        boundary: boundary,
+        rootBoundary: rootBoundary,
+        altBoundary: altBoundary,
+        padding: padding
+      });
+      var mainVariationSide = isVertical ? isStartVariation ? right : left : isStartVariation ? bottom : top;
+
+      if (referenceRect[len] > popperRect[len]) {
+        mainVariationSide = getOppositePlacement(mainVariationSide);
+      }
+
+      var altVariationSide = getOppositePlacement(mainVariationSide);
+      var checks = [];
+
+      if (checkMainAxis) {
+        checks.push(overflow[_basePlacement] <= 0);
+      }
+
+      if (checkAltAxis) {
+        checks.push(overflow[mainVariationSide] <= 0, overflow[altVariationSide] <= 0);
+      }
+
+      if (checks.every(function (check) {
+        return check;
+      })) {
+        firstFittingPlacement = placement;
+        makeFallbackChecks = false;
+        break;
+      }
+
+      checksMap.set(placement, checks);
+    }
+
+    if (makeFallbackChecks) {
+      // `2` may be desired in some cases – research later
+      var numberOfChecks = flipVariations ? 3 : 1;
+
+      var _loop = function _loop(_i) {
+        var fittingPlacement = placements.find(function (placement) {
+          var checks = checksMap.get(placement);
+
+          if (checks) {
+            return checks.slice(0, _i).every(function (check) {
+              return check;
+            });
+          }
+        });
+
+        if (fittingPlacement) {
+          firstFittingPlacement = fittingPlacement;
+          return "break";
+        }
+      };
+
+      for (var _i = numberOfChecks; _i > 0; _i--) {
+        var _ret = _loop(_i);
+
+        if (_ret === "break") break;
+      }
+    }
+
+    if (state.placement !== firstFittingPlacement) {
+      state.modifiersData[name]._skip = true;
+      state.placement = firstFittingPlacement;
+      state.reset = true;
+    }
+  } // eslint-disable-next-line import/no-unused-modules
+
+
+  const flip$1 = {
+    name: 'flip',
+    enabled: true,
+    phase: 'main',
+    fn: flip,
+    requiresIfExists: ['offset'],
+    data: {
+      _skip: false
+    }
+  };
+
+  function getSideOffsets(overflow, rect, preventedOffsets) {
+    if (preventedOffsets === void 0) {
+      preventedOffsets = {
+        x: 0,
+        y: 0
+      };
+    }
+
+    return {
+      top: overflow.top - rect.height - preventedOffsets.y,
+      right: overflow.right - rect.width + preventedOffsets.x,
+      bottom: overflow.bottom - rect.height + preventedOffsets.y,
+      left: overflow.left - rect.width - preventedOffsets.x
+    };
+  }
+
+  function isAnySideFullyClipped(overflow) {
+    return [top, right, bottom, left].some(function (side) {
+      return overflow[side] >= 0;
+    });
+  }
+
+  function hide(_ref) {
+    var state = _ref.state,
+        name = _ref.name;
+    var referenceRect = state.rects.reference;
+    var popperRect = state.rects.popper;
+    var preventedOffsets = state.modifiersData.preventOverflow;
+    var referenceOverflow = detectOverflow(state, {
+      elementContext: 'reference'
+    });
+    var popperAltOverflow = detectOverflow(state, {
+      altBoundary: true
+    });
+    var referenceClippingOffsets = getSideOffsets(referenceOverflow, referenceRect);
+    var popperEscapeOffsets = getSideOffsets(popperAltOverflow, popperRect, preventedOffsets);
+    var isReferenceHidden = isAnySideFullyClipped(referenceClippingOffsets);
+    var hasPopperEscaped = isAnySideFullyClipped(popperEscapeOffsets);
+    state.modifiersData[name] = {
+      referenceClippingOffsets: referenceClippingOffsets,
+      popperEscapeOffsets: popperEscapeOffsets,
+      isReferenceHidden: isReferenceHidden,
+      hasPopperEscaped: hasPopperEscaped
+    };
+    state.attributes.popper = Object.assign({}, state.attributes.popper, {
+      'data-popper-reference-hidden': isReferenceHidden,
+      'data-popper-escaped': hasPopperEscaped
+    });
+  } // eslint-disable-next-line import/no-unused-modules
+
+
+  const hide$1 = {
+    name: 'hide',
+    enabled: true,
+    phase: 'main',
+    requiresIfExists: ['preventOverflow'],
+    fn: hide
+  };
+
+  function distanceAndSkiddingToXY(placement, rects, offset) {
+    var basePlacement = getBasePlacement(placement);
+    var invertDistance = [left, top].indexOf(basePlacement) >= 0 ? -1 : 1;
+
+    var _ref = typeof offset === 'function' ? offset(Object.assign({}, rects, {
+      placement: placement
+    })) : offset,
+        skidding = _ref[0],
+        distance = _ref[1];
+
+    skidding = skidding || 0;
+    distance = (distance || 0) * invertDistance;
+    return [left, right].indexOf(basePlacement) >= 0 ? {
+      x: distance,
+      y: skidding
+    } : {
+      x: skidding,
+      y: distance
+    };
+  }
+
+  function offset(_ref2) {
+    var state = _ref2.state,
+        options = _ref2.options,
+        name = _ref2.name;
+    var _options$offset = options.offset,
+        offset = _options$offset === void 0 ? [0, 0] : _options$offset;
+    var data = placements.reduce(function (acc, placement) {
+      acc[placement] = distanceAndSkiddingToXY(placement, state.rects, offset);
+      return acc;
+    }, {});
+    var _data$state$placement = data[state.placement],
+        x = _data$state$placement.x,
+        y = _data$state$placement.y;
+
+    if (state.modifiersData.popperOffsets != null) {
+      state.modifiersData.popperOffsets.x += x;
+      state.modifiersData.popperOffsets.y += y;
+    }
+
+    state.modifiersData[name] = data;
+  } // eslint-disable-next-line import/no-unused-modules
+
+
+  const offset$1 = {
+    name: 'offset',
+    enabled: true,
+    phase: 'main',
+    requires: ['popperOffsets'],
+    fn: offset
+  };
+
+  function popperOffsets(_ref) {
+    var state = _ref.state,
+        name = _ref.name;
+    // Offsets are the actual position the popper needs to have to be
+    // properly positioned near its reference element
+    // This is the most basic placement, and will be adjusted by
+    // the modifiers in the next step
+    state.modifiersData[name] = computeOffsets({
+      reference: state.rects.reference,
+      element: state.rects.popper,
+      strategy: 'absolute',
+      placement: state.placement
+    });
+  } // eslint-disable-next-line import/no-unused-modules
+
+
+  const popperOffsets$1 = {
+    name: 'popperOffsets',
+    enabled: true,
+    phase: 'read',
+    fn: popperOffsets,
+    data: {}
+  };
+
+  function getAltAxis(axis) {
+    return axis === 'x' ? 'y' : 'x';
+  }
+
+  function preventOverflow(_ref) {
+    var state = _ref.state,
+        options = _ref.options,
+        name = _ref.name;
+    var _options$mainAxis = options.mainAxis,
+        checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,
+        _options$altAxis = options.altAxis,
+        checkAltAxis = _options$altAxis === void 0 ? false : _options$altAxis,
+        boundary = options.boundary,
+        rootBoundary = options.rootBoundary,
+        altBoundary = options.altBoundary,
+        padding = options.padding,
+        _options$tether = options.tether,
+        tether = _options$tether === void 0 ? true : _options$tether,
+        _options$tetherOffset = options.tetherOffset,
+        tetherOffset = _options$tetherOffset === void 0 ? 0 : _options$tetherOffset;
+    var overflow = detectOverflow(state, {
+      boundary: boundary,
+      rootBoundary: rootBoundary,
+      padding: padding,
+      altBoundary: altBoundary
+    });
+    var basePlacement = getBasePlacement(state.placement);
+    var variation = getVariation(state.placement);
+    var isBasePlacement = !variation;
+    var mainAxis = getMainAxisFromPlacement(basePlacement);
+    var altAxis = getAltAxis(mainAxis);
+    var popperOffsets = state.modifiersData.popperOffsets;
+    var referenceRect = state.rects.reference;
+    var popperRect = state.rects.popper;
+    var tetherOffsetValue = typeof tetherOffset === 'function' ? tetherOffset(Object.assign({}, state.rects, {
+      placement: state.placement
+    })) : tetherOffset;
+    var normalizedTetherOffsetValue = typeof tetherOffsetValue === 'number' ? {
+      mainAxis: tetherOffsetValue,
+      altAxis: tetherOffsetValue
+    } : Object.assign({
+      mainAxis: 0,
+      altAxis: 0
+    }, tetherOffsetValue);
+    var offsetModifierState = state.modifiersData.offset ? state.modifiersData.offset[state.placement] : null;
+    var data = {
+      x: 0,
+      y: 0
+    };
+
+    if (!popperOffsets) {
+      return;
+    }
+
+    if (checkMainAxis) {
+      var _offsetModifierState$;
+
+      var mainSide = mainAxis === 'y' ? top : left;
+      var altSide = mainAxis === 'y' ? bottom : right;
+      var len = mainAxis === 'y' ? 'height' : 'width';
+      var offset = popperOffsets[mainAxis];
+      var min$1 = offset + overflow[mainSide];
+      var max$1 = offset - overflow[altSide];
+      var additive = tether ? -popperRect[len] / 2 : 0;
+      var minLen = variation === start ? referenceRect[len] : popperRect[len];
+      var maxLen = variation === start ? -popperRect[len] : -referenceRect[len]; // We need to include the arrow in the calculation so the arrow doesn't go
+      // outside the reference bounds
+
+      var arrowElement = state.elements.arrow;
+      var arrowRect = tether && arrowElement ? getLayoutRect(arrowElement) : {
+        width: 0,
+        height: 0
+      };
+      var arrowPaddingObject = state.modifiersData['arrow#persistent'] ? state.modifiersData['arrow#persistent'].padding : getFreshSideObject();
+      var arrowPaddingMin = arrowPaddingObject[mainSide];
+      var arrowPaddingMax = arrowPaddingObject[altSide]; // If the reference length is smaller than the arrow length, we don't want
+      // to include its full size in the calculation. If the reference is small
+      // and near the edge of a boundary, the popper can overflow even if the
+      // reference is not overflowing as well (e.g. virtual elements with no
+      // width or height)
+
+      var arrowLen = within(0, referenceRect[len], arrowRect[len]);
+      var minOffset = isBasePlacement ? referenceRect[len] / 2 - additive - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis : minLen - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis;
+      var maxOffset = isBasePlacement ? -referenceRect[len] / 2 + additive + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis : maxLen + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis;
+      var arrowOffsetParent = state.elements.arrow && getOffsetParent(state.elements.arrow);
+      var clientOffset = arrowOffsetParent ? mainAxis === 'y' ? arrowOffsetParent.clientTop || 0 : arrowOffsetParent.clientLeft || 0 : 0;
+      var offsetModifierValue = (_offsetModifierState$ = offsetModifierState == null ? void 0 : offsetModifierState[mainAxis]) != null ? _offsetModifierState$ : 0;
+      var tetherMin = offset + minOffset - offsetModifierValue - clientOffset;
+      var tetherMax = offset + maxOffset - offsetModifierValue;
+      var preventedOffset = within(tether ? min(min$1, tetherMin) : min$1, offset, tether ? max(max$1, tetherMax) : max$1);
+      popperOffsets[mainAxis] = preventedOffset;
+      data[mainAxis] = preventedOffset - offset;
+    }
+
+    if (checkAltAxis) {
+      var _offsetModifierState$2;
+
+      var _mainSide = mainAxis === 'x' ? top : left;
+
+      var _altSide = mainAxis === 'x' ? bottom : right;
+
+      var _offset = popperOffsets[altAxis];
+
+      var _len = altAxis === 'y' ? 'height' : 'width';
+
+      var _min = _offset + overflow[_mainSide];
+
+      var _max = _offset - overflow[_altSide];
+
+      var isOriginSide = [top, left].indexOf(basePlacement) !== -1;
+
+      var _offsetModifierValue = (_offsetModifierState$2 = offsetModifierState == null ? void 0 : offsetModifierState[altAxis]) != null ? _offsetModifierState$2 : 0;
+
+      var _tetherMin = isOriginSide ? _min : _offset - referenceRect[_len] - popperRect[_len] - _offsetModifierValue + normalizedTetherOffsetValue.altAxis;
+
+      var _tetherMax = isOriginSide ? _offset + referenceRect[_len] + popperRect[_len] - _offsetModifierValue - normalizedTetherOffsetValue.altAxis : _max;
+
+      var _preventedOffset = tether && isOriginSide ? withinMaxClamp(_tetherMin, _offset, _tetherMax) : within(tether ? _tetherMin : _min, _offset, tether ? _tetherMax : _max);
+
+      popperOffsets[altAxis] = _preventedOffset;
+      data[altAxis] = _preventedOffset - _offset;
+    }
+
+    state.modifiersData[name] = data;
+  } // eslint-disable-next-line import/no-unused-modules
+
+
+  const preventOverflow$1 = {
+    name: 'preventOverflow',
+    enabled: true,
+    phase: 'main',
+    fn: preventOverflow,
+    requiresIfExists: ['offset']
+  };
+
+  function getHTMLElementScroll(element) {
+    return {
+      scrollLeft: element.scrollLeft,
+      scrollTop: element.scrollTop
+    };
+  }
+
+  function getNodeScroll(node) {
+    if (node === getWindow(node) || !isHTMLElement(node)) {
+      return getWindowScroll(node);
+    } else {
+      return getHTMLElementScroll(node);
+    }
+  }
+
+  function isElementScaled(element) {
+    var rect = element.getBoundingClientRect();
+    var scaleX = round(rect.width) / element.offsetWidth || 1;
+    var scaleY = round(rect.height) / element.offsetHeight || 1;
+    return scaleX !== 1 || scaleY !== 1;
+  } // Returns the composite rect of an element relative to its offsetParent.
+  // Composite means it takes into account transforms as well as layout.
+
+
+  function getCompositeRect(elementOrVirtualElement, offsetParent, isFixed) {
+    if (isFixed === void 0) {
+      isFixed = false;
+    }
+
+    var isOffsetParentAnElement = isHTMLElement(offsetParent);
+    var offsetParentIsScaled = isHTMLElement(offsetParent) && isElementScaled(offsetParent);
+    var documentElement = getDocumentElement(offsetParent);
+    var rect = getBoundingClientRect(elementOrVirtualElement, offsetParentIsScaled, isFixed);
+    var scroll = {
+      scrollLeft: 0,
+      scrollTop: 0
+    };
+    var offsets = {
+      x: 0,
+      y: 0
+    };
+
+    if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {
+      if (getNodeName(offsetParent) !== 'body' || // https://github.com/popperjs/popper-core/issues/1078
+      isScrollParent(documentElement)) {
+        scroll = getNodeScroll(offsetParent);
+      }
+
+      if (isHTMLElement(offsetParent)) {
+        offsets = getBoundingClientRect(offsetParent, true);
+        offsets.x += offsetParent.clientLeft;
+        offsets.y += offsetParent.clientTop;
+      } else if (documentElement) {
+        offsets.x = getWindowScrollBarX(documentElement);
+      }
+    }
+
+    return {
+      x: rect.left + scroll.scrollLeft - offsets.x,
+      y: rect.top + scroll.scrollTop - offsets.y,
+      width: rect.width,
+      height: rect.height
+    };
+  }
+
+  function order(modifiers) {
+    var map = new Map();
+    var visited = new Set();
+    var result = [];
+    modifiers.forEach(function (modifier) {
+      map.set(modifier.name, modifier);
+    }); // On visiting object, check for its dependencies and visit them recursively
+
+    function sort(modifier) {
+      visited.add(modifier.name);
+      var requires = [].concat(modifier.requires || [], modifier.requiresIfExists || []);
+      requires.forEach(function (dep) {
+        if (!visited.has(dep)) {
+          var depModifier = map.get(dep);
+
+          if (depModifier) {
+            sort(depModifier);
+          }
+        }
+      });
+      result.push(modifier);
+    }
+
+    modifiers.forEach(function (modifier) {
+      if (!visited.has(modifier.name)) {
+        // check for visited object
+        sort(modifier);
+      }
+    });
+    return result;
+  }
+
+  function orderModifiers(modifiers) {
+    // order based on dependencies
+    var orderedModifiers = order(modifiers); // order based on phase
+
+    return modifierPhases.reduce(function (acc, phase) {
+      return acc.concat(orderedModifiers.filter(function (modifier) {
+        return modifier.phase === phase;
+      }));
+    }, []);
+  }
+
+  function debounce(fn) {
+    var pending;
+    return function () {
+      if (!pending) {
+        pending = new Promise(function (resolve) {
+          Promise.resolve().then(function () {
+            pending = undefined;
+            resolve(fn());
+          });
+        });
+      }
+
+      return pending;
+    };
+  }
+
+  function mergeByName(modifiers) {
+    var merged = modifiers.reduce(function (merged, current) {
+      var existing = merged[current.name];
+      merged[current.name] = existing ? Object.assign({}, existing, current, {
+        options: Object.assign({}, existing.options, current.options),
+        data: Object.assign({}, existing.data, current.data)
+      }) : current;
+      return merged;
+    }, {}); // IE11 does not support Object.values
+
+    return Object.keys(merged).map(function (key) {
+      return merged[key];
+    });
+  }
+
+  var DEFAULT_OPTIONS = {
+    placement: 'bottom',
+    modifiers: [],
+    strategy: 'absolute'
+  };
+
+  function areValidElements() {
+    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
+      args[_key] = arguments[_key];
+    }
+
+    return !args.some(function (element) {
+      return !(element && typeof element.getBoundingClientRect === 'function');
+    });
+  }
+
+  function popperGenerator(generatorOptions) {
+    if (generatorOptions === void 0) {
+      generatorOptions = {};
+    }
+
+    var _generatorOptions = generatorOptions,
+        _generatorOptions$def = _generatorOptions.defaultModifiers,
+        defaultModifiers = _generatorOptions$def === void 0 ? [] : _generatorOptions$def,
+        _generatorOptions$def2 = _generatorOptions.defaultOptions,
+        defaultOptions = _generatorOptions$def2 === void 0 ? DEFAULT_OPTIONS : _generatorOptions$def2;
+    return function createPopper(reference, popper, options) {
+      if (options === void 0) {
+        options = defaultOptions;
+      }
+
+      var state = {
+        placement: 'bottom',
+        orderedModifiers: [],
+        options: Object.assign({}, DEFAULT_OPTIONS, defaultOptions),
+        modifiersData: {},
+        elements: {
+          reference: reference,
+          popper: popper
+        },
+        attributes: {},
+        styles: {}
+      };
+      var effectCleanupFns = [];
+      var isDestroyed = false;
+      var instance = {
+        state: state,
+        setOptions: function setOptions(setOptionsAction) {
+          var options = typeof setOptionsAction === 'function' ? setOptionsAction(state.options) : setOptionsAction;
+          cleanupModifierEffects();
+          state.options = Object.assign({}, defaultOptions, state.options, options);
+          state.scrollParents = {
+            reference: isElement(reference) ? listScrollParents(reference) : reference.contextElement ? listScrollParents(reference.contextElement) : [],
+            popper: listScrollParents(popper)
+          }; // Orders the modifiers based on their dependencies and `phase`
+          // properties
+
+          var orderedModifiers = orderModifiers(mergeByName([].concat(defaultModifiers, state.options.modifiers))); // Strip out disabled modifiers
+
+          state.orderedModifiers = orderedModifiers.filter(function (m) {
+            return m.enabled;
+          });
+          runModifierEffects();
+          return instance.update();
+        },
+        // Sync update – it will always be executed, even if not necessary. This
+        // is useful for low frequency updates where sync behavior simplifies the
+        // logic.
+        // For high frequency updates (e.g. `resize` and `scroll` events), always
+        // prefer the async Popper#update method
+        forceUpdate: function forceUpdate() {
+          if (isDestroyed) {
+            return;
+          }
+
+          var _state$elements = state.elements,
+              reference = _state$elements.reference,
+              popper = _state$elements.popper; // Don't proceed if `reference` or `popper` are not valid elements
+          // anymore
+
+          if (!areValidElements(reference, popper)) {
+            return;
+          } // Store the reference and popper rects to be read by modifiers
+
+
+          state.rects = {
+            reference: getCompositeRect(reference, getOffsetParent(popper), state.options.strategy === 'fixed'),
+            popper: getLayoutRect(popper)
+          }; // Modifiers have the ability to reset the current update cycle. The
+          // most common use case for this is the `flip` modifier changing the
+          // placement, which then needs to re-run all the modifiers, because the
+          // logic was previously ran for the previous placement and is therefore
+          // stale/incorrect
+
+          state.reset = false;
+          state.placement = state.options.placement; // On each update cycle, the `modifiersData` property for each modifier
+          // is filled with the initial data specified by the modifier. This means
+          // it doesn't persist and is fresh on each update.
+          // To ensure persistent data, use `${name}#persistent`
+
+          state.orderedModifiers.forEach(function (modifier) {
+            return state.modifiersData[modifier.name] = Object.assign({}, modifier.data);
+          });
+
+          for (var index = 0; index < state.orderedModifiers.length; index++) {
+            if (state.reset === true) {
+              state.reset = false;
+              index = -1;
+              continue;
+            }
+
+            var _state$orderedModifie = state.orderedModifiers[index],
+                fn = _state$orderedModifie.fn,
+                _state$orderedModifie2 = _state$orderedModifie.options,
+                _options = _state$orderedModifie2 === void 0 ? {} : _state$orderedModifie2,
+                name = _state$orderedModifie.name;
+
+            if (typeof fn === 'function') {
+              state = fn({
+                state: state,
+                options: _options,
+                name: name,
+                instance: instance
+              }) || state;
+            }
+          }
+        },
+        // Async and optimistically optimized update – it will not be executed if
+        // not necessary (debounced to run at most once-per-tick)
+        update: debounce(function () {
+          return new Promise(function (resolve) {
+            instance.forceUpdate();
+            resolve(state);
+          });
+        }),
+        destroy: function destroy() {
+          cleanupModifierEffects();
+          isDestroyed = true;
+        }
+      };
+
+      if (!areValidElements(reference, popper)) {
+        return instance;
+      }
+
+      instance.setOptions(options).then(function (state) {
+        if (!isDestroyed && options.onFirstUpdate) {
+          options.onFirstUpdate(state);
+        }
+      }); // Modifiers have the ability to execute arbitrary code before the first
+      // update cycle runs. They will be executed in the same order as the update
+      // cycle. This is useful when a modifier adds some persistent data that
+      // other modifiers need to use, but the modifier is run after the dependent
+      // one.
+
+      function runModifierEffects() {
+        state.orderedModifiers.forEach(function (_ref) {
+          var name = _ref.name,
+              _ref$options = _ref.options,
+              options = _ref$options === void 0 ? {} : _ref$options,
+              effect = _ref.effect;
+
+          if (typeof effect === 'function') {
+            var cleanupFn = effect({
+              state: state,
+              name: name,
+              instance: instance,
+              options: options
+            });
+
+            var noopFn = function noopFn() {};
+
+            effectCleanupFns.push(cleanupFn || noopFn);
+          }
+        });
+      }
+
+      function cleanupModifierEffects() {
+        effectCleanupFns.forEach(function (fn) {
+          return fn();
+        });
+        effectCleanupFns = [];
+      }
+
+      return instance;
+    };
+  }
+  var createPopper$2 = /*#__PURE__*/popperGenerator(); // eslint-disable-next-line import/no-unused-modules
+
+  var defaultModifiers$1 = [eventListeners, popperOffsets$1, computeStyles$1, applyStyles$1];
+  var createPopper$1 = /*#__PURE__*/popperGenerator({
+    defaultModifiers: defaultModifiers$1
+  }); // eslint-disable-next-line import/no-unused-modules
+
+  var defaultModifiers = [eventListeners, popperOffsets$1, computeStyles$1, applyStyles$1, offset$1, flip$1, preventOverflow$1, arrow$1, hide$1];
+  var createPopper = /*#__PURE__*/popperGenerator({
+    defaultModifiers: defaultModifiers
+  }); // eslint-disable-next-line import/no-unused-modules
+
+  const Popper = /*#__PURE__*/Object.freeze(/*#__PURE__*/Object.defineProperty({
+    __proto__: null,
+    afterMain,
+    afterRead,
+    afterWrite,
+    applyStyles: applyStyles$1,
+    arrow: arrow$1,
+    auto,
+    basePlacements,
+    beforeMain,
+    beforeRead,
+    beforeWrite,
+    bottom,
+    clippingParents,
+    computeStyles: computeStyles$1,
+    createPopper,
+    createPopperBase: createPopper$2,
+    createPopperLite: createPopper$1,
+    detectOverflow,
+    end,
+    eventListeners,
+    flip: flip$1,
+    hide: hide$1,
+    left,
+    main,
+    modifierPhases,
+    offset: offset$1,
+    placements,
+    popper,
+    popperGenerator,
+    popperOffsets: popperOffsets$1,
+    preventOverflow: preventOverflow$1,
+    read,
+    reference,
+    right,
+    start,
+    top,
+    variationPlacements,
+    viewport,
+    write
+  }, Symbol.toStringTag, { value: 'Module' }));
+
+  /**
+   * --------------------------------------------------------------------------
+   * Bootstrap dropdown.js
+   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
+   * --------------------------------------------------------------------------
+   */
+
+
+  /**
+   * Constants
+   */
+
+  const NAME$a = 'dropdown';
+  const DATA_KEY$6 = 'bs.dropdown';
+  const EVENT_KEY$6 = `.${DATA_KEY$6}`;
+  const DATA_API_KEY$3 = '.data-api';
+  const ESCAPE_KEY$2 = 'Escape';
+  const TAB_KEY$1 = 'Tab';
+  const ARROW_UP_KEY$1 = 'ArrowUp';
+  const ARROW_DOWN_KEY$1 = 'ArrowDown';
+  const RIGHT_MOUSE_BUTTON = 2; // MouseEvent.button value for the secondary button, usually the right button
+
+  const EVENT_HIDE$5 = `hide${EVENT_KEY$6}`;
+  const EVENT_HIDDEN$5 = `hidden${EVENT_KEY$6}`;
+  const EVENT_SHOW$5 = `show${EVENT_KEY$6}`;
+  const EVENT_SHOWN$5 = `shown${EVENT_KEY$6}`;
+  const EVENT_CLICK_DATA_API$3 = `click${EVENT_KEY$6}${DATA_API_KEY$3}`;
+  const EVENT_KEYDOWN_DATA_API = `keydown${EVENT_KEY$6}${DATA_API_KEY$3}`;
+  const EVENT_KEYUP_DATA_API = `keyup${EVENT_KEY$6}${DATA_API_KEY$3}`;
+  const CLASS_NAME_SHOW$6 = 'show';
+  const CLASS_NAME_DROPUP = 'dropup';
+  const CLASS_NAME_DROPEND = 'dropend';
+  const CLASS_NAME_DROPSTART = 'dropstart';
+  const CLASS_NAME_DROPUP_CENTER = 'dropup-center';
+  const CLASS_NAME_DROPDOWN_CENTER = 'dropdown-center';
+  const SELECTOR_DATA_TOGGLE$3 = '[data-bs-toggle="dropdown"]:not(.disabled):not(:disabled)';
+  const SELECTOR_DATA_TOGGLE_SHOWN = `${SELECTOR_DATA_TOGGLE$3}.${CLASS_NAME_SHOW$6}`;
+  const SELECTOR_MENU = '.dropdown-menu';
+  const SELECTOR_NAVBAR = '.navbar';
+  const SELECTOR_NAVBAR_NAV = '.navbar-nav';
+  const SELECTOR_VISIBLE_ITEMS = '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)';
+  const PLACEMENT_TOP = isRTL() ? 'top-end' : 'top-start';
+  const PLACEMENT_TOPEND = isRTL() ? 'top-start' : 'top-end';
+  const PLACEMENT_BOTTOM = isRTL() ? 'bottom-end' : 'bottom-start';
+  const PLACEMENT_BOTTOMEND = isRTL() ? 'bottom-start' : 'bottom-end';
+  const PLACEMENT_RIGHT = isRTL() ? 'left-start' : 'right-start';
+  const PLACEMENT_LEFT = isRTL() ? 'right-start' : 'left-start';
+  const PLACEMENT_TOPCENTER = 'top';
+  const PLACEMENT_BOTTOMCENTER = 'bottom';
+  const Default$9 = {
+    autoClose: true,
+    boundary: 'clippingParents',
+    display: 'dynamic',
+    offset: [0, 2],
+    popperConfig: null,
+    reference: 'toggle'
+  };
+  const DefaultType$9 = {
+    autoClose: '(boolean|string)',
+    boundary: '(string|element)',
+    display: 'string',
+    offset: '(array|string|function)',
+    popperConfig: '(null|object|function)',
+    reference: '(string|element|object)'
+  };
+
+  /**
+   * Class definition
+   */
+
+  class Dropdown extends BaseComponent {
+    constructor(element, config) {
+      super(element, config);
+      this._popper = null;
+      this._parent = this._element.parentNode; // dropdown wrapper
+      // TODO: v6 revert #37011 & change markup https://getbootstrap.com/docs/5.3/forms/input-group/
+      this._menu = SelectorEngine.next(this._element, SELECTOR_MENU)[0] || SelectorEngine.prev(this._element, SELECTOR_MENU)[0] || SelectorEngine.findOne(SELECTOR_MENU, this._parent);
+      this._inNavbar = this._detectNavbar();
+    }
+
+    // Getters
+    static get Default() {
+      return Default$9;
+    }
+    static get DefaultType() {
+      return DefaultType$9;
+    }
+    static get NAME() {
+      return NAME$a;
+    }
+
+    // Public
+    toggle() {
+      return this._isShown() ? this.hide() : this.show();
+    }
+    show() {
+      if (isDisabled(this._element) || this._isShown()) {
+        return;
+      }
+      const relatedTarget = {
+        relatedTarget: this._element
+      };
+      const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$5, relatedTarget);
+      if (showEvent.defaultPrevented) {
+        return;
+      }
+      this._createPopper();
+
+      // If this is a touch-enabled device we add extra
+      // empty mouseover listeners to the body's immediate children;
+      // only needed because of broken event delegation on iOS
+      // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html
+      if ('ontouchstart' in document.documentElement && !this._parent.closest(SELECTOR_NAVBAR_NAV)) {
+        for (const element of [].concat(...document.body.children)) {
+          EventHandler.on(element, 'mouseover', noop);
+        }
+      }
+      this._element.focus();
+      this._element.setAttribute('aria-expanded', true);
+      this._menu.classList.add(CLASS_NAME_SHOW$6);
+      this._element.classList.add(CLASS_NAME_SHOW$6);
+      EventHandler.trigger(this._element, EVENT_SHOWN$5, relatedTarget);
+    }
+    hide() {
+      if (isDisabled(this._element) || !this._isShown()) {
+        return;
+      }
+      const relatedTarget = {
+        relatedTarget: this._element
+      };
+      this._completeHide(relatedTarget);
+    }
+    dispose() {
+      if (this._popper) {
+        this._popper.destroy();
+      }
+      super.dispose();
+    }
+    update() {
+      this._inNavbar = this._detectNavbar();
+      if (this._popper) {
+        this._popper.update();
+      }
+    }
+
+    // Private
+    _completeHide(relatedTarget) {
+      const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$5, relatedTarget);
+      if (hideEvent.defaultPrevented) {
+        return;
+      }
+
+      // If this is a touch-enabled device we remove the extra
+      // empty mouseover listeners we added for iOS support
+      if ('ontouchstart' in document.documentElement) {
+        for (const element of [].concat(...document.body.children)) {
+          EventHandler.off(element, 'mouseover', noop);
+        }
+      }
+      if (this._popper) {
+        this._popper.destroy();
+      }
+      this._menu.classList.remove(CLASS_NAME_SHOW$6);
+      this._element.classList.remove(CLASS_NAME_SHOW$6);
+      this._element.setAttribute('aria-expanded', 'false');
+      Manipulator.removeDataAttribute(this._menu, 'popper');
+      EventHandler.trigger(this._element, EVENT_HIDDEN$5, relatedTarget);
+    }
+    _getConfig(config) {
+      config = super._getConfig(config);
+      if (typeof config.reference === 'object' && !isElement$1(config.reference) && typeof config.reference.getBoundingClientRect !== 'function') {
+        // Popper virtual elements require a getBoundingClientRect method
+        throw new TypeError(`${NAME$a.toUpperCase()}: Option "reference" provided type "object" without a required "getBoundingClientRect" method.`);
+      }
+      return config;
+    }
+    _createPopper() {
+      if (typeof Popper === 'undefined') {
+        throw new TypeError('Bootstrap\'s dropdowns require Popper (https://popper.js.org)');
+      }
+      let referenceElement = this._element;
+      if (this._config.reference === 'parent') {
+        referenceElement = this._parent;
+      } else if (isElement$1(this._config.reference)) {
+        referenceElement = getElement(this._config.reference);
+      } else if (typeof this._config.reference === 'object') {
+        referenceElement = this._config.reference;
+      }
+      const popperConfig = this._getPopperConfig();
+      this._popper = createPopper(referenceElement, this._menu, popperConfig);
+    }
+    _isShown() {
+      return this._menu.classList.contains(CLASS_NAME_SHOW$6);
+    }
+    _getPlacement() {
+      const parentDropdown = this._parent;
+      if (parentDropdown.classList.contains(CLASS_NAME_DROPEND)) {
+        return PLACEMENT_RIGHT;
+      }
+      if (parentDropdown.classList.contains(CLASS_NAME_DROPSTART)) {
+        return PLACEMENT_LEFT;
+      }
+      if (parentDropdown.classList.contains(CLASS_NAME_DROPUP_CENTER)) {
+        return PLACEMENT_TOPCENTER;
+      }
+      if (parentDropdown.classList.contains(CLASS_NAME_DROPDOWN_CENTER)) {
+        return PLACEMENT_BOTTOMCENTER;
+      }
+
+      // We need to trim the value because custom properties can also include spaces
+      const isEnd = getComputedStyle(this._menu).getPropertyValue('--bs-position').trim() === 'end';
+      if (parentDropdown.classList.contains(CLASS_NAME_DROPUP)) {
+        return isEnd ? PLACEMENT_TOPEND : PLACEMENT_TOP;
+      }
+      return isEnd ? PLACEMENT_BOTTOMEND : PLACEMENT_BOTTOM;
+    }
+    _detectNavbar() {
+      return this._element.closest(SELECTOR_NAVBAR) !== null;
+    }
+    _getOffset() {
+      const {
+        offset
+      } = this._config;
+      if (typeof offset === 'string') {
+        return offset.split(',').map(value => Number.parseInt(value, 10));
+      }
+      if (typeof offset === 'function') {
+        return popperData => offset(popperData, this._element);
+      }
+      return offset;
+    }
+    _getPopperConfig() {
+      const defaultBsPopperConfig = {
+        placement: this._getPlacement(),
+        modifiers: [{
+          name: 'preventOverflow',
+          options: {
+            boundary: this._config.boundary
+          }
+        }, {
+          name: 'offset',
+          options: {
+            offset: this._getOffset()
+          }
+        }]
+      };
+
+      // Disable Popper if we have a static display or Dropdown is in Navbar
+      if (this._inNavbar || this._config.display === 'static') {
+        Manipulator.setDataAttribute(this._menu, 'popper', 'static'); // TODO: v6 remove
+        defaultBsPopperConfig.modifiers = [{
+          name: 'applyStyles',
+          enabled: false
+        }];
+      }
+      return {
+        ...defaultBsPopperConfig,
+        ...execute(this._config.popperConfig, [defaultBsPopperConfig])
+      };
+    }
+    _selectMenuItem({
+      key,
+      target
+    }) {
+      const items = SelectorEngine.find(SELECTOR_VISIBLE_ITEMS, this._menu).filter(element => isVisible(element));
+      if (!items.length) {
+        return;
+      }
+
+      // if target isn't included in items (e.g. when expanding the dropdown)
+      // allow cycling to get the last item in case key equals ARROW_UP_KEY
+      getNextActiveElement(items, target, key === ARROW_DOWN_KEY$1, !items.includes(target)).focus();
+    }
+
+    // Static
+    static jQueryInterface(config) {
+      return this.each(function () {
+        const data = Dropdown.getOrCreateInstance(this, config);
+        if (typeof config !== 'string') {
+          return;
+        }
+        if (typeof data[config] === 'undefined') {
+          throw new TypeError(`No method named "${config}"`);
+        }
+        data[config]();
+      });
+    }
+    static clearMenus(event) {
+      if (event.button === RIGHT_MOUSE_BUTTON || event.type === 'keyup' && event.key !== TAB_KEY$1) {
+        return;
+      }
+      const openToggles = SelectorEngine.find(SELECTOR_DATA_TOGGLE_SHOWN);
+      for (const toggle of openToggles) {
+        const context = Dropdown.getInstance(toggle);
+        if (!context || context._config.autoClose === false) {
+          continue;
+        }
+        const composedPath = event.composedPath();
+        const isMenuTarget = composedPath.includes(context._menu);
+        if (composedPath.includes(context._element) || context._config.autoClose === 'inside' && !isMenuTarget || context._config.autoClose === 'outside' && isMenuTarget) {
+          continue;
+        }
+
+        // Tab navigation through the dropdown menu or events from contained inputs shouldn't close the menu
+        if (context._menu.contains(event.target) && (event.type === 'keyup' && event.key === TAB_KEY$1 || /input|select|option|textarea|form/i.test(event.target.tagName))) {
+          continue;
+        }
+        const relatedTarget = {
+          relatedTarget: context._element
+        };
+        if (event.type === 'click') {
+          relatedTarget.clickEvent = event;
+        }
+        context._completeHide(relatedTarget);
+      }
+    }
+    static dataApiKeydownHandler(event) {
+      // If not an UP | DOWN | ESCAPE key => not a dropdown command
+      // If input/textarea && if key is other than ESCAPE => not a dropdown command
+
+      const isInput = /input|textarea/i.test(event.target.tagName);
+      const isEscapeEvent = event.key === ESCAPE_KEY$2;
+      const isUpOrDownEvent = [ARROW_UP_KEY$1, ARROW_DOWN_KEY$1].includes(event.key);
+      if (!isUpOrDownEvent && !isEscapeEvent) {
+        return;
+      }
+      if (isInput && !isEscapeEvent) {
+        return;
+      }
+      event.preventDefault();
+
+      // TODO: v6 revert #37011 & change markup https://getbootstrap.com/docs/5.3/forms/input-group/
+      const getToggleButton = this.matches(SELECTOR_DATA_TOGGLE$3) ? this : SelectorEngine.prev(this, SELECTOR_DATA_TOGGLE$3)[0] || SelectorEngine.next(this, SELECTOR_DATA_TOGGLE$3)[0] || SelectorEngine.findOne(SELECTOR_DATA_TOGGLE$3, event.delegateTarget.parentNode);
+      const instance = Dropdown.getOrCreateInstance(getToggleButton);
+      if (isUpOrDownEvent) {
+        event.stopPropagation();
+        instance.show();
+        instance._selectMenuItem(event);
+        return;
+      }
+      if (instance._isShown()) {
+        // else is escape and we check if it is shown
+        event.stopPropagation();
+        instance.hide();
+        getToggleButton.focus();
+      }
+    }
+  }
+
+  /**
+   * Data API implementation
+   */
+
+  EventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE$3, Dropdown.dataApiKeydownHandler);
+  EventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown.dataApiKeydownHandler);
+  EventHandler.on(document, EVENT_CLICK_DATA_API$3, Dropdown.clearMenus);
+  EventHandler.on(document, EVENT_KEYUP_DATA_API, Dropdown.clearMenus);
+  EventHandler.on(document, EVENT_CLICK_DATA_API$3, SELECTOR_DATA_TOGGLE$3, function (event) {
+    event.preventDefault();
+    Dropdown.getOrCreateInstance(this).toggle();
+  });
+
+  /**
+   * jQuery
+   */
+
+  defineJQueryPlugin(Dropdown);
+
+  /**
+   * --------------------------------------------------------------------------
+   * Bootstrap util/backdrop.js
+   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
+   * --------------------------------------------------------------------------
+   */
+
+
+  /**
+   * Constants
+   */
+
+  const NAME$9 = 'backdrop';
+  const CLASS_NAME_FADE$4 = 'fade';
+  const CLASS_NAME_SHOW$5 = 'show';
+  const EVENT_MOUSEDOWN = `mousedown.bs.${NAME$9}`;
+  const Default$8 = {
+    className: 'modal-backdrop',
+    clickCallback: null,
+    isAnimated: false,
+    isVisible: true,
+    // if false, we use the backdrop helper without adding any element to the dom
+    rootElement: 'body' // give the choice to place backdrop under different elements
+  };
+
+  const DefaultType$8 = {
+    className: 'string',
+    clickCallback: '(function|null)',
+    isAnimated: 'boolean',
+    isVisible: 'boolean',
+    rootElement: '(element|string)'
+  };
+
+  /**
+   * Class definition
+   */
+
+  class Backdrop extends Config {
+    constructor(config) {
+      super();
+      this._config = this._getConfig(config);
+      this._isAppended = false;
+      this._element = null;
+    }
+
+    // Getters
+    static get Default() {
+      return Default$8;
+    }
+    static get DefaultType() {
+      return DefaultType$8;
+    }
+    static get NAME() {
+      return NAME$9;
+    }
+
+    // Public
+    show(callback) {
+      if (!this._config.isVisible) {
+        execute(callback);
+        return;
+      }
+      this._append();
+      const element = this._getElement();
+      if (this._config.isAnimated) {
+        reflow(element);
+      }
+      element.classList.add(CLASS_NAME_SHOW$5);
+      this._emulateAnimation(() => {
+        execute(callback);
+      });
+    }
+    hide(callback) {
+      if (!this._config.isVisible) {
+        execute(callback);
+        return;
+      }
+      this._getElement().classList.remove(CLASS_NAME_SHOW$5);
+      this._emulateAnimation(() => {
+        this.dispose();
+        execute(callback);
+      });
+    }
+    dispose() {
+      if (!this._isAppended) {
+        return;
+      }
+      EventHandler.off(this._element, EVENT_MOUSEDOWN);
+      this._element.remove();
+      this._isAppended = false;
+    }
+
+    // Private
+    _getElement() {
+      if (!this._element) {
+        const backdrop = document.createElement('div');
+        backdrop.className = this._config.className;
+        if (this._config.isAnimated) {
+          backdrop.classList.add(CLASS_NAME_FADE$4);
+        }
+        this._element = backdrop;
+      }
+      return this._element;
+    }
+    _configAfterMerge(config) {
+      // use getElement() with the default "body" to get a fresh Element on each instantiation
+      config.rootElement = getElement(config.rootElement);
+      return config;
+    }
+    _append() {
+      if (this._isAppended) {
+        return;
+      }
+      const element = this._getElement();
+      this._config.rootElement.append(element);
+      EventHandler.on(element, EVENT_MOUSEDOWN, () => {
+        execute(this._config.clickCallback);
+      });
+      this._isAppended = true;
+    }
+    _emulateAnimation(callback) {
+      executeAfterTransition(callback, this._getElement(), this._config.isAnimated);
+    }
+  }
+
+  /**
+   * --------------------------------------------------------------------------
+   * Bootstrap util/focustrap.js
+   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
+   * --------------------------------------------------------------------------
+   */
+
+
+  /**
+   * Constants
+   */
+
+  const NAME$8 = 'focustrap';
+  const DATA_KEY$5 = 'bs.focustrap';
+  const EVENT_KEY$5 = `.${DATA_KEY$5}`;
+  const EVENT_FOCUSIN$2 = `focusin${EVENT_KEY$5}`;
+  const EVENT_KEYDOWN_TAB = `keydown.tab${EVENT_KEY$5}`;
+  const TAB_KEY = 'Tab';
+  const TAB_NAV_FORWARD = 'forward';
+  const TAB_NAV_BACKWARD = 'backward';
+  const Default$7 = {
+    autofocus: true,
+    trapElement: null // The element to trap focus inside of
+  };
+
+  const DefaultType$7 = {
+    autofocus: 'boolean',
+    trapElement: 'element'
+  };
+
+  /**
+   * Class definition
+   */
+
+  class FocusTrap extends Config {
+    constructor(config) {
+      super();
+      this._config = this._getConfig(config);
+      this._isActive = false;
+      this._lastTabNavDirection = null;
+    }
+
+    // Getters
+    static get Default() {
+      return Default$7;
+    }
+    static get DefaultType() {
+      return DefaultType$7;
+    }
+    static get NAME() {
+      return NAME$8;
+    }
+
+    // Public
+    activate() {
+      if (this._isActive) {
+        return;
+      }
+      if (this._config.autofocus) {
+        this._config.trapElement.focus();
+      }
+      EventHandler.off(document, EVENT_KEY$5); // guard against infinite focus loop
+      EventHandler.on(document, EVENT_FOCUSIN$2, event => this._handleFocusin(event));
+      EventHandler.on(document, EVENT_KEYDOWN_TAB, event => this._handleKeydown(event));
+      this._isActive = true;
+    }
+    deactivate() {
+      if (!this._isActive) {
+        return;
+      }
+      this._isActive = false;
+      EventHandler.off(document, EVENT_KEY$5);
+    }
+
+    // Private
+    _handleFocusin(event) {
+      const {
+        trapElement
+      } = this._config;
+      if (event.target === document || event.target === trapElement || trapElement.contains(event.target)) {
+        return;
+      }
+      const elements = SelectorEngine.focusableChildren(trapElement);
+      if (elements.length === 0) {
+        trapElement.focus();
+      } else if (this._lastTabNavDirection === TAB_NAV_BACKWARD) {
+        elements[elements.length - 1].focus();
+      } else {
+        elements[0].focus();
+      }
+    }
+    _handleKeydown(event) {
+      if (event.key !== TAB_KEY) {
+        return;
+      }
+      this._lastTabNavDirection = event.shiftKey ? TAB_NAV_BACKWARD : TAB_NAV_FORWARD;
+    }
+  }
+
+  /**
+   * --------------------------------------------------------------------------
+   * Bootstrap util/scrollBar.js
+   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
+   * --------------------------------------------------------------------------
+   */
+
+
+  /**
+   * Constants
+   */
+
+  const SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top';
+  const SELECTOR_STICKY_CONTENT = '.sticky-top';
+  const PROPERTY_PADDING = 'padding-right';
+  const PROPERTY_MARGIN = 'margin-right';
+
+  /**
+   * Class definition
+   */
+
+  class ScrollBarHelper {
+    constructor() {
+      this._element = document.body;
+    }
+
+    // Public
+    getWidth() {
+      // https://developer.mozilla.org/en-US/docs/Web/API/Window/innerWidth#usage_notes
+      const documentWidth = document.documentElement.clientWidth;
+      return Math.abs(window.innerWidth - documentWidth);
+    }
+    hide() {
+      const width = this.getWidth();
+      this._disableOverFlow();
+      // give padding to element to balance the hidden scrollbar width
+      this._setElementAttributes(this._element, PROPERTY_PADDING, calculatedValue => calculatedValue + width);
+      // trick: We adjust positive paddingRight and negative marginRight to sticky-top elements to keep showing fullwidth
+      this._setElementAttributes(SELECTOR_FIXED_CONTENT, PROPERTY_PADDING, calculatedValue => calculatedValue + width);
+      this._setElementAttributes(SELECTOR_STICKY_CONTENT, PROPERTY_MARGIN, calculatedValue => calculatedValue - width);
+    }
+    reset() {
+      this._resetElementAttributes(this._element, 'overflow');
+      this._resetElementAttributes(this._element, PROPERTY_PADDING);
+      this._resetElementAttributes(SELECTOR_FIXED_CONTENT, PROPERTY_PADDING);
+      this._resetElementAttributes(SELECTOR_STICKY_CONTENT, PROPERTY_MARGIN);
+    }
+    isOverflowing() {
+      return this.getWidth() > 0;
+    }
+
+    // Private
+    _disableOverFlow() {
+      this._saveInitialAttribute(this._element, 'overflow');
+      this._element.style.overflow = 'hidden';
+    }
+    _setElementAttributes(selector, styleProperty, callback) {
+      const scrollbarWidth = this.getWidth();
+      const manipulationCallBack = element => {
+        if (element !== this._element && window.innerWidth > element.clientWidth + scrollbarWidth) {
+          return;
+        }
+        this._saveInitialAttribute(element, styleProperty);
+        const calculatedValue = window.getComputedStyle(element).getPropertyValue(styleProperty);
+        element.style.setProperty(styleProperty, `${callback(Number.parseFloat(calculatedValue))}px`);
+      };
+      this._applyManipulationCallback(selector, manipulationCallBack);
+    }
+    _saveInitialAttribute(element, styleProperty) {
+      const actualValue = element.style.getPropertyValue(styleProperty);
+      if (actualValue) {
+        Manipulator.setDataAttribute(element, styleProperty, actualValue);
+      }
+    }
+    _resetElementAttributes(selector, styleProperty) {
+      const manipulationCallBack = element => {
+        const value = Manipulator.getDataAttribute(element, styleProperty);
+        // We only want to remove the property if the value is `null`; the value can also be zero
+        if (value === null) {
+          element.style.removeProperty(styleProperty);
+          return;
+        }
+        Manipulator.removeDataAttribute(element, styleProperty);
+        element.style.setProperty(styleProperty, value);
+      };
+      this._applyManipulationCallback(selector, manipulationCallBack);
+    }
+    _applyManipulationCallback(selector, callBack) {
+      if (isElement$1(selector)) {
+        callBack(selector);
+        return;
+      }
+      for (const sel of SelectorEngine.find(selector, this._element)) {
+        callBack(sel);
+      }
+    }
+  }
+
+  /**
+   * --------------------------------------------------------------------------
+   * Bootstrap modal.js
+   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
+   * --------------------------------------------------------------------------
+   */
+
+
+  /**
+   * Constants
+   */
+
+  const NAME$7 = 'modal';
+  const DATA_KEY$4 = 'bs.modal';
+  const EVENT_KEY$4 = `.${DATA_KEY$4}`;
+  const DATA_API_KEY$2 = '.data-api';
+  const ESCAPE_KEY$1 = 'Escape';
+  const EVENT_HIDE$4 = `hide${EVENT_KEY$4}`;
+  const EVENT_HIDE_PREVENTED$1 = `hidePrevented${EVENT_KEY$4}`;
+  const EVENT_HIDDEN$4 = `hidden${EVENT_KEY$4}`;
+  const EVENT_SHOW$4 = `show${EVENT_KEY$4}`;
+  const EVENT_SHOWN$4 = `shown${EVENT_KEY$4}`;
+  const EVENT_RESIZE$1 = `resize${EVENT_KEY$4}`;
+  const EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY$4}`;
+  const EVENT_MOUSEDOWN_DISMISS = `mousedown.dismiss${EVENT_KEY$4}`;
+  const EVENT_KEYDOWN_DISMISS$1 = `keydown.dismiss${EVENT_KEY$4}`;
+  const EVENT_CLICK_DATA_API$2 = `click${EVENT_KEY$4}${DATA_API_KEY$2}`;
+  const CLASS_NAME_OPEN = 'modal-open';
+  const CLASS_NAME_FADE$3 = 'fade';
+  const CLASS_NAME_SHOW$4 = 'show';
+  const CLASS_NAME_STATIC = 'modal-static';
+  const OPEN_SELECTOR$1 = '.modal.show';
+  const SELECTOR_DIALOG = '.modal-dialog';
+  const SELECTOR_MODAL_BODY = '.modal-body';
+  const SELECTOR_DATA_TOGGLE$2 = '[data-bs-toggle="modal"]';
+  const Default$6 = {
+    backdrop: true,
+    focus: true,
+    keyboard: true
+  };
+  const DefaultType$6 = {
+    backdrop: '(boolean|string)',
+    focus: 'boolean',
+    keyboard: 'boolean'
+  };
+
+  /**
+   * Class definition
+   */
+
+  class Modal extends BaseComponent {
+    constructor(element, config) {
+      super(element, config);
+      this._dialog = SelectorEngine.findOne(SELECTOR_DIALOG, this._element);
+      this._backdrop = this._initializeBackDrop();
+      this._focustrap = this._initializeFocusTrap();
+      this._isShown = false;
+      this._isTransitioning = false;
+      this._scrollBar = new ScrollBarHelper();
+      this._addEventListeners();
+    }
+
+    // Getters
+    static get Default() {
+      return Default$6;
+    }
+    static get DefaultType() {
+      return DefaultType$6;
+    }
+    static get NAME() {
+      return NAME$7;
+    }
+
+    // Public
+    toggle(relatedTarget) {
+      return this._isShown ? this.hide() : this.show(relatedTarget);
+    }
+    show(relatedTarget) {
+      if (this._isShown || this._isTransitioning) {
+        return;
+      }
+      const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$4, {
+        relatedTarget
+      });
+      if (showEvent.defaultPrevented) {
+        return;
+      }
+      this._isShown = true;
+      this._isTransitioning = true;
+      this._scrollBar.hide();
+      document.body.classList.add(CLASS_NAME_OPEN);
+      this._adjustDialog();
+      this._backdrop.show(() => this._showElement(relatedTarget));
+    }
+    hide() {
+      if (!this._isShown || this._isTransitioning) {
+        return;
+      }
+      const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$4);
+      if (hideEvent.defaultPrevented) {
+        return;
+      }
+      this._isShown = false;
+      this._isTransitioning = true;
+      this._focustrap.deactivate();
+      this._element.classList.remove(CLASS_NAME_SHOW$4);
+      this._queueCallback(() => this._hideModal(), this._element, this._isAnimated());
+    }
+    dispose() {
+      EventHandler.off(window, EVENT_KEY$4);
+      EventHandler.off(this._dialog, EVENT_KEY$4);
+      this._backdrop.dispose();
+      this._focustrap.deactivate();
+      super.dispose();
+    }
+    handleUpdate() {
+      this._adjustDialog();
+    }
+
+    // Private
+    _initializeBackDrop() {
+      return new Backdrop({
+        isVisible: Boolean(this._config.backdrop),
+        // 'static' option will be translated to true, and booleans will keep their value,
+        isAnimated: this._isAnimated()
+      });
+    }
+    _initializeFocusTrap() {
+      return new FocusTrap({
+        trapElement: this._element
+      });
+    }
+    _showElement(relatedTarget) {
+      // try to append dynamic modal
+      if (!document.body.contains(this._element)) {
+        document.body.append(this._element);
+      }
+      this._element.style.display = 'block';
+      this._element.removeAttribute('aria-hidden');
+      this._element.setAttribute('aria-modal', true);
+      this._element.setAttribute('role', 'dialog');
+      this._element.scrollTop = 0;
+      const modalBody = SelectorEngine.findOne(SELECTOR_MODAL_BODY, this._dialog);
+      if (modalBody) {
+        modalBody.scrollTop = 0;
+      }
+      reflow(this._element);
+      this._element.classList.add(CLASS_NAME_SHOW$4);
+      const transitionComplete = () => {
+        if (this._config.focus) {
+          this._focustrap.activate();
+        }
+        this._isTransitioning = false;
+        EventHandler.trigger(this._element, EVENT_SHOWN$4, {
+          relatedTarget
+        });
+      };
+      this._queueCallback(transitionComplete, this._dialog, this._isAnimated());
+    }
+    _addEventListeners() {
+      EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS$1, event => {
+        if (event.key !== ESCAPE_KEY$1) {
+          return;
+        }
+        if (this._config.keyboard) {
+          this.hide();
+          return;
+        }
+        this._triggerBackdropTransition();
+      });
+      EventHandler.on(window, EVENT_RESIZE$1, () => {
+        if (this._isShown && !this._isTransitioning) {
+          this._adjustDialog();
+        }
+      });
+      EventHandler.on(this._element, EVENT_MOUSEDOWN_DISMISS, event => {
+        // a bad trick to segregate clicks that may start inside dialog but end outside, and avoid listen to scrollbar clicks
+        EventHandler.one(this._element, EVENT_CLICK_DISMISS, event2 => {
+          if (this._element !== event.target || this._element !== event2.target) {
+            return;
+          }
+          if (this._config.backdrop === 'static') {
+            this._triggerBackdropTransition();
+            return;
+          }
+          if (this._config.backdrop) {
+            this.hide();
+          }
+        });
+      });
+    }
+    _hideModal() {
+      this._element.style.display = 'none';
+      this._element.setAttribute('aria-hidden', true);
+      this._element.removeAttribute('aria-modal');
+      this._element.removeAttribute('role');
+      this._isTransitioning = false;
+      this._backdrop.hide(() => {
+        document.body.classList.remove(CLASS_NAME_OPEN);
+        this._resetAdjustments();
+        this._scrollBar.reset();
+        EventHandler.trigger(this._element, EVENT_HIDDEN$4);
+      });
+    }
+    _isAnimated() {
+      return this._element.classList.contains(CLASS_NAME_FADE$3);
+    }
+    _triggerBackdropTransition() {
+      const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED$1);
+      if (hideEvent.defaultPrevented) {
+        return;
+      }
+      const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;
+      const initialOverflowY = this._element.style.overflowY;
+      // return if the following background transition hasn't yet completed
+      if (initialOverflowY === 'hidden' || this._element.classList.contains(CLASS_NAME_STATIC)) {
+        return;
+      }
+      if (!isModalOverflowing) {
+        this._element.style.overflowY = 'hidden';
+      }
+      this._element.classList.add(CLASS_NAME_STATIC);
+      this._queueCallback(() => {
+        this._element.classList.remove(CLASS_NAME_STATIC);
+        this._queueCallback(() => {
+          this._element.style.overflowY = initialOverflowY;
+        }, this._dialog);
+      }, this._dialog);
+      this._element.focus();
+    }
+
+    /**
+     * The following methods are used to handle overflowing modals
+     */
+
+    _adjustDialog() {
+      const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;
+      const scrollbarWidth = this._scrollBar.getWidth();
+      const isBodyOverflowing = scrollbarWidth > 0;
+      if (isBodyOverflowing && !isModalOverflowing) {
+        const property = isRTL() ? 'paddingLeft' : 'paddingRight';
+        this._element.style[property] = `${scrollbarWidth}px`;
+      }
+      if (!isBodyOverflowing && isModalOverflowing) {
+        const property = isRTL() ? 'paddingRight' : 'paddingLeft';
+        this._element.style[property] = `${scrollbarWidth}px`;
+      }
+    }
+    _resetAdjustments() {
+      this._element.style.paddingLeft = '';
+      this._element.style.paddingRight = '';
+    }
+
+    // Static
+    static jQueryInterface(config, relatedTarget) {
+      return this.each(function () {
+        const data = Modal.getOrCreateInstance(this, config);
+        if (typeof config !== 'string') {
+          return;
+        }
+        if (typeof data[config] === 'undefined') {
+          throw new TypeError(`No method named "${config}"`);
+        }
+        data[config](relatedTarget);
+      });
+    }
+  }
+
+  /**
+   * Data API implementation
+   */
+
+  EventHandler.on(document, EVENT_CLICK_DATA_API$2, SELECTOR_DATA_TOGGLE$2, function (event) {
+    const target = SelectorEngine.getElementFromSelector(this);
+    if (['A', 'AREA'].includes(this.tagName)) {
+      event.preventDefault();
+    }
+    EventHandler.one(target, EVENT_SHOW$4, showEvent => {
+      if (showEvent.defaultPrevented) {
+        // only register focus restorer if modal will actually get shown
+        return;
+      }
+      EventHandler.one(target, EVENT_HIDDEN$4, () => {
+        if (isVisible(this)) {
+          this.focus();
+        }
+      });
+    });
+
+    // avoid conflict when clicking modal toggler while another one is open
+    const alreadyOpen = SelectorEngine.findOne(OPEN_SELECTOR$1);
+    if (alreadyOpen) {
+      Modal.getInstance(alreadyOpen).hide();
+    }
+    const data = Modal.getOrCreateInstance(target);
+    data.toggle(this);
+  });
+  enableDismissTrigger(Modal);
+
+  /**
+   * jQuery
+   */
+
+  defineJQueryPlugin(Modal);
+
+  /**
+   * --------------------------------------------------------------------------
+   * Bootstrap offcanvas.js
+   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
+   * --------------------------------------------------------------------------
+   */
+
+
+  /**
+   * Constants
+   */
+
+  const NAME$6 = 'offcanvas';
+  const DATA_KEY$3 = 'bs.offcanvas';
+  const EVENT_KEY$3 = `.${DATA_KEY$3}`;
+  const DATA_API_KEY$1 = '.data-api';
+  const EVENT_LOAD_DATA_API$2 = `load${EVENT_KEY$3}${DATA_API_KEY$1}`;
+  const ESCAPE_KEY = 'Escape';
+  const CLASS_NAME_SHOW$3 = 'show';
+  const CLASS_NAME_SHOWING$1 = 'showing';
+  const CLASS_NAME_HIDING = 'hiding';
+  const CLASS_NAME_BACKDROP = 'offcanvas-backdrop';
+  const OPEN_SELECTOR = '.offcanvas.show';
+  const EVENT_SHOW$3 = `show${EVENT_KEY$3}`;
+  const EVENT_SHOWN$3 = `shown${EVENT_KEY$3}`;
+  const EVENT_HIDE$3 = `hide${EVENT_KEY$3}`;
+  const EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY$3}`;
+  const EVENT_HIDDEN$3 = `hidden${EVENT_KEY$3}`;
+  const EVENT_RESIZE = `resize${EVENT_KEY$3}`;
+  const EVENT_CLICK_DATA_API$1 = `click${EVENT_KEY$3}${DATA_API_KEY$1}`;
+  const EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY$3}`;
+  const SELECTOR_DATA_TOGGLE$1 = '[data-bs-toggle="offcanvas"]';
+  const Default$5 = {
+    backdrop: true,
+    keyboard: true,
+    scroll: false
+  };
+  const DefaultType$5 = {
+    backdrop: '(boolean|string)',
+    keyboard: 'boolean',
+    scroll: 'boolean'
+  };
+
+  /**
+   * Class definition
+   */
+
+  class Offcanvas extends BaseComponent {
+    constructor(element, config) {
+      super(element, config);
+      this._isShown = false;
+      this._backdrop = this._initializeBackDrop();
+      this._focustrap = this._initializeFocusTrap();
+      this._addEventListeners();
+    }
+
+    // Getters
+    static get Default() {
+      return Default$5;
+    }
+    static get DefaultType() {
+      return DefaultType$5;
+    }
+    static get NAME() {
+      return NAME$6;
+    }
+
+    // Public
+    toggle(relatedTarget) {
+      return this._isShown ? this.hide() : this.show(relatedTarget);
+    }
+    show(relatedTarget) {
+      if (this._isShown) {
+        return;
+      }
+      const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$3, {
+        relatedTarget
+      });
+      if (showEvent.defaultPrevented) {
+        return;
+      }
+      this._isShown = true;
+      this._backdrop.show();
+      if (!this._config.scroll) {
+        new ScrollBarHelper().hide();
+      }
+      this._element.setAttribute('aria-modal', true);
+      this._element.setAttribute('role', 'dialog');
+      this._element.classList.add(CLASS_NAME_SHOWING$1);
+      const completeCallBack = () => {
+        if (!this._config.scroll || this._config.backdrop) {
+          this._focustrap.activate();
+        }
+        this._element.classList.add(CLASS_NAME_SHOW$3);
+        this._element.classList.remove(CLASS_NAME_SHOWING$1);
+        EventHandler.trigger(this._element, EVENT_SHOWN$3, {
+          relatedTarget
+        });
+      };
+      this._queueCallback(completeCallBack, this._element, true);
+    }
+    hide() {
+      if (!this._isShown) {
+        return;
+      }
+      const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$3);
+      if (hideEvent.defaultPrevented) {
+        return;
+      }
+      this._focustrap.deactivate();
+      this._element.blur();
+      this._isShown = false;
+      this._element.classList.add(CLASS_NAME_HIDING);
+      this._backdrop.hide();
+      const completeCallback = () => {
+        this._element.classList.remove(CLASS_NAME_SHOW$3, CLASS_NAME_HIDING);
+        this._element.removeAttribute('aria-modal');
+        this._element.removeAttribute('role');
+        if (!this._config.scroll) {
+          new ScrollBarHelper().reset();
+        }
+        EventHandler.trigger(this._element, EVENT_HIDDEN$3);
+      };
+      this._queueCallback(completeCallback, this._element, true);
+    }
+    dispose() {
+      this._backdrop.dispose();
+      this._focustrap.deactivate();
+      super.dispose();
+    }
+
+    // Private
+    _initializeBackDrop() {
+      const clickCallback = () => {
+        if (this._config.backdrop === 'static') {
+          EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED);
+          return;
+        }
+        this.hide();
+      };
+
+      // 'static' option will be translated to true, and booleans will keep their value
+      const isVisible = Boolean(this._config.backdrop);
+      return new Backdrop({
+        className: CLASS_NAME_BACKDROP,
+        isVisible,
+        isAnimated: true,
+        rootElement: this._element.parentNode,
+        clickCallback: isVisible ? clickCallback : null
+      });
+    }
+    _initializeFocusTrap() {
+      return new FocusTrap({
+        trapElement: this._element
+      });
+    }
+    _addEventListeners() {
+      EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, event => {
+        if (event.key !== ESCAPE_KEY) {
+          return;
+        }
+        if (this._config.keyboard) {
+          this.hide();
+          return;
+        }
+        EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED);
+      });
+    }
+
+    // Static
+    static jQueryInterface(config) {
+      return this.each(function () {
+        const data = Offcanvas.getOrCreateInstance(this, config);
+        if (typeof config !== 'string') {
+          return;
+        }
+        if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {
+          throw new TypeError(`No method named "${config}"`);
+        }
+        data[config](this);
+      });
+    }
+  }
+
+  /**
+   * Data API implementation
+   */
+
+  EventHandler.on(document, EVENT_CLICK_DATA_API$1, SELECTOR_DATA_TOGGLE$1, function (event) {
+    const target = SelectorEngine.getElementFromSelector(this);
+    if (['A', 'AREA'].includes(this.tagName)) {
+      event.preventDefault();
+    }
+    if (isDisabled(this)) {
+      return;
+    }
+    EventHandler.one(target, EVENT_HIDDEN$3, () => {
+      // focus on trigger when it is closed
+      if (isVisible(this)) {
+        this.focus();
+      }
+    });
+
+    // avoid conflict when clicking a toggler of an offcanvas, while another is open
+    const alreadyOpen = SelectorEngine.findOne(OPEN_SELECTOR);
+    if (alreadyOpen && alreadyOpen !== target) {
+      Offcanvas.getInstance(alreadyOpen).hide();
+    }
+    const data = Offcanvas.getOrCreateInstance(target);
+    data.toggle(this);
+  });
+  EventHandler.on(window, EVENT_LOAD_DATA_API$2, () => {
+    for (const selector of SelectorEngine.find(OPEN_SELECTOR)) {
+      Offcanvas.getOrCreateInstance(selector).show();
+    }
+  });
+  EventHandler.on(window, EVENT_RESIZE, () => {
+    for (const element of SelectorEngine.find('[aria-modal][class*=show][class*=offcanvas-]')) {
+      if (getComputedStyle(element).position !== 'fixed') {
+        Offcanvas.getOrCreateInstance(element).hide();
+      }
+    }
+  });
+  enableDismissTrigger(Offcanvas);
+
+  /**
+   * jQuery
+   */
+
+  defineJQueryPlugin(Offcanvas);
+
+  /**
+   * --------------------------------------------------------------------------
+   * Bootstrap util/sanitizer.js
+   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
+   * --------------------------------------------------------------------------
+   */
+
+  // js-docs-start allow-list
+  const ARIA_ATTRIBUTE_PATTERN = /^aria-[\w-]*$/i;
+  const DefaultAllowlist = {
+    // Global attributes allowed on any supplied element below.
+    '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],
+    a: ['target', 'href', 'title', 'rel'],
+    area: [],
+    b: [],
+    br: [],
+    col: [],
+    code: [],
+    div: [],
+    em: [],
+    hr: [],
+    h1: [],
+    h2: [],
+    h3: [],
+    h4: [],
+    h5: [],
+    h6: [],
+    i: [],
+    img: ['src', 'srcset', 'alt', 'title', 'width', 'height'],
+    li: [],
+    ol: [],
+    p: [],
+    pre: [],
+    s: [],
+    small: [],
+    span: [],
+    sub: [],
+    sup: [],
+    strong: [],
+    u: [],
+    ul: []
+  };
+  // js-docs-end allow-list
+
+  const uriAttributes = new Set(['background', 'cite', 'href', 'itemtype', 'longdesc', 'poster', 'src', 'xlink:href']);
+
+  /**
+   * A pattern that recognizes URLs that are safe wrt. XSS in URL navigation
+   * contexts.
+   *
+   * Shout-out to Angular https://github.com/angular/angular/blob/15.2.8/packages/core/src/sanitization/url_sanitizer.ts#L38
+   */
+  // eslint-disable-next-line unicorn/better-regex
+  const SAFE_URL_PATTERN = /^(?!javascript:)(?:[a-z0-9+.-]+:|[^&:/?#]*(?:[/?#]|$))/i;
+  const allowedAttribute = (attribute, allowedAttributeList) => {
+    const attributeName = attribute.nodeName.toLowerCase();
+    if (allowedAttributeList.includes(attributeName)) {
+      if (uriAttributes.has(attributeName)) {
+        return Boolean(SAFE_URL_PATTERN.test(attribute.nodeValue));
+      }
+      return true;
+    }
+
+    // Check if a regular expression validates the attribute.
+    return allowedAttributeList.filter(attributeRegex => attributeRegex instanceof RegExp).some(regex => regex.test(attributeName));
+  };
+  function sanitizeHtml(unsafeHtml, allowList, sanitizeFunction) {
+    if (!unsafeHtml.length) {
+      return unsafeHtml;
+    }
+    if (sanitizeFunction && typeof sanitizeFunction === 'function') {
+      return sanitizeFunction(unsafeHtml);
+    }
+    const domParser = new window.DOMParser();
+    const createdDocument = domParser.parseFromString(unsafeHtml, 'text/html');
+    const elements = [].concat(...createdDocument.body.querySelectorAll('*'));
+    for (const element of elements) {
+      const elementName = element.nodeName.toLowerCase();
+      if (!Object.keys(allowList).includes(elementName)) {
+        element.remove();
+        continue;
+      }
+      const attributeList = [].concat(...element.attributes);
+      const allowedAttributes = [].concat(allowList['*'] || [], allowList[elementName] || []);
+      for (const attribute of attributeList) {
+        if (!allowedAttribute(attribute, allowedAttributes)) {
+          element.removeAttribute(attribute.nodeName);
+        }
+      }
+    }
+    return createdDocument.body.innerHTML;
+  }
+
+  /**
+   * --------------------------------------------------------------------------
+   * Bootstrap util/template-factory.js
+   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
+   * --------------------------------------------------------------------------
+   */
+
+
+  /**
+   * Constants
+   */
+
+  const NAME$5 = 'TemplateFactory';
+  const Default$4 = {
+    allowList: DefaultAllowlist,
+    content: {},
+    // { selector : text ,  selector2 : text2 , }
+    extraClass: '',
+    html: false,
+    sanitize: true,
+    sanitizeFn: null,
+    template: '<div></div>'
+  };
+  const DefaultType$4 = {
+    allowList: 'object',
+    content: 'object',
+    extraClass: '(string|function)',
+    html: 'boolean',
+    sanitize: 'boolean',
+    sanitizeFn: '(null|function)',
+    template: 'string'
+  };
+  const DefaultContentType = {
+    entry: '(string|element|function|null)',
+    selector: '(string|element)'
+  };
+
+  /**
+   * Class definition
+   */
+
+  class TemplateFactory extends Config {
+    constructor(config) {
+      super();
+      this._config = this._getConfig(config);
+    }
+
+    // Getters
+    static get Default() {
+      return Default$4;
+    }
+    static get DefaultType() {
+      return DefaultType$4;
+    }
+    static get NAME() {
+      return NAME$5;
+    }
+
+    // Public
+    getContent() {
+      return Object.values(this._config.content).map(config => this._resolvePossibleFunction(config)).filter(Boolean);
+    }
+    hasContent() {
+      return this.getContent().length > 0;
+    }
+    changeContent(content) {
+      this._checkContent(content);
+      this._config.content = {
+        ...this._config.content,
+        ...content
+      };
+      return this;
+    }
+    toHtml() {
+      const templateWrapper = document.createElement('div');
+      templateWrapper.innerHTML = this._maybeSanitize(this._config.template);
+      for (const [selector, text] of Object.entries(this._config.content)) {
+        this._setContent(templateWrapper, text, selector);
+      }
+      const template = templateWrapper.children[0];
+      const extraClass = this._resolvePossibleFunction(this._config.extraClass);
+      if (extraClass) {
+        template.classList.add(...extraClass.split(' '));
+      }
+      return template;
+    }
+
+    // Private
+    _typeCheckConfig(config) {
+      super._typeCheckConfig(config);
+      this._checkContent(config.content);
+    }
+    _checkContent(arg) {
+      for (const [selector, content] of Object.entries(arg)) {
+        super._typeCheckConfig({
+          selector,
+          entry: content
+        }, DefaultContentType);
+      }
+    }
+    _setContent(template, content, selector) {
+      const templateElement = SelectorEngine.findOne(selector, template);
+      if (!templateElement) {
+        return;
+      }
+      content = this._resolvePossibleFunction(content);
+      if (!content) {
+        templateElement.remove();
+        return;
+      }
+      if (isElement$1(content)) {
+        this._putElementInTemplate(getElement(content), templateElement);
+        return;
+      }
+      if (this._config.html) {
+        templateElement.innerHTML = this._maybeSanitize(content);
+        return;
+      }
+      templateElement.textContent = content;
+    }
+    _maybeSanitize(arg) {
+      return this._config.sanitize ? sanitizeHtml(arg, this._config.allowList, this._config.sanitizeFn) : arg;
+    }
+    _resolvePossibleFunction(arg) {
+      return execute(arg, [this]);
+    }
+    _putElementInTemplate(element, templateElement) {
+      if (this._config.html) {
+        templateElement.innerHTML = '';
+        templateElement.append(element);
+        return;
+      }
+      templateElement.textContent = element.textContent;
+    }
+  }
+
+  /**
+   * --------------------------------------------------------------------------
+   * Bootstrap tooltip.js
+   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
+   * --------------------------------------------------------------------------
+   */
+
+
+  /**
+   * Constants
+   */
+
+  const NAME$4 = 'tooltip';
+  const DISALLOWED_ATTRIBUTES = new Set(['sanitize', 'allowList', 'sanitizeFn']);
+  const CLASS_NAME_FADE$2 = 'fade';
+  const CLASS_NAME_MODAL = 'modal';
+  const CLASS_NAME_SHOW$2 = 'show';
+  const SELECTOR_TOOLTIP_INNER = '.tooltip-inner';
+  const SELECTOR_MODAL = `.${CLASS_NAME_MODAL}`;
+  const EVENT_MODAL_HIDE = 'hide.bs.modal';
+  const TRIGGER_HOVER = 'hover';
+  const TRIGGER_FOCUS = 'focus';
+  const TRIGGER_CLICK = 'click';
+  const TRIGGER_MANUAL = 'manual';
+  const EVENT_HIDE$2 = 'hide';
+  const EVENT_HIDDEN$2 = 'hidden';
+  const EVENT_SHOW$2 = 'show';
+  const EVENT_SHOWN$2 = 'shown';
+  const EVENT_INSERTED = 'inserted';
+  const EVENT_CLICK$1 = 'click';
+  const EVENT_FOCUSIN$1 = 'focusin';
+  const EVENT_FOCUSOUT$1 = 'focusout';
+  const EVENT_MOUSEENTER = 'mouseenter';
+  const EVENT_MOUSELEAVE = 'mouseleave';
+  const AttachmentMap = {
+    AUTO: 'auto',
+    TOP: 'top',
+    RIGHT: isRTL() ? 'left' : 'right',
+    BOTTOM: 'bottom',
+    LEFT: isRTL() ? 'right' : 'left'
+  };
+  const Default$3 = {
+    allowList: DefaultAllowlist,
+    animation: true,
+    boundary: 'clippingParents',
+    container: false,
+    customClass: '',
+    delay: 0,
+    fallbackPlacements: ['top', 'right', 'bottom', 'left'],
+    html: false,
+    offset: [0, 6],
+    placement: 'top',
+    popperConfig: null,
+    sanitize: true,
+    sanitizeFn: null,
+    selector: false,
+    template: '<div class="tooltip" role="tooltip">' + '<div class="tooltip-arrow"></div>' + '<div class="tooltip-inner"></div>' + '</div>',
+    title: '',
+    trigger: 'hover focus'
+  };
+  const DefaultType$3 = {
+    allowList: 'object',
+    animation: 'boolean',
+    boundary: '(string|element)',
+    container: '(string|element|boolean)',
+    customClass: '(string|function)',
+    delay: '(number|object)',
+    fallbackPlacements: 'array',
+    html: 'boolean',
+    offset: '(array|string|function)',
+    placement: '(string|function)',
+    popperConfig: '(null|object|function)',
+    sanitize: 'boolean',
+    sanitizeFn: '(null|function)',
+    selector: '(string|boolean)',
+    template: 'string',
+    title: '(string|element|function)',
+    trigger: 'string'
+  };
+
+  /**
+   * Class definition
+   */
+
+  class Tooltip extends BaseComponent {
+    constructor(element, config) {
+      if (typeof Popper === 'undefined') {
+        throw new TypeError('Bootstrap\'s tooltips require Popper (https://popper.js.org)');
+      }
+      super(element, config);
+
+      // Private
+      this._isEnabled = true;
+      this._timeout = 0;
+      this._isHovered = null;
+      this._activeTrigger = {};
+      this._popper = null;
+      this._templateFactory = null;
+      this._newContent = null;
+
+      // Protected
+      this.tip = null;
+      this._setListeners();
+      if (!this._config.selector) {
+        this._fixTitle();
+      }
+    }
+
+    // Getters
+    static get Default() {
+      return Default$3;
+    }
+    static get DefaultType() {
+      return DefaultType$3;
+    }
+    static get NAME() {
+      return NAME$4;
+    }
+
+    // Public
+    enable() {
+      this._isEnabled = true;
+    }
+    disable() {
+      this._isEnabled = false;
+    }
+    toggleEnabled() {
+      this._isEnabled = !this._isEnabled;
+    }
+    toggle() {
+      if (!this._isEnabled) {
+        return;
+      }
+      this._activeTrigger.click = !this._activeTrigger.click;
+      if (this._isShown()) {
+        this._leave();
+        return;
+      }
+      this._enter();
+    }
+    dispose() {
+      clearTimeout(this._timeout);
+      EventHandler.off(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE, this._hideModalHandler);
+      if (this._element.getAttribute('data-bs-original-title')) {
+        this._element.setAttribute('title', this._element.getAttribute('data-bs-original-title'));
+      }
+      this._disposePopper();
+      super.dispose();
+    }
+    show() {
+      if (this._element.style.display === 'none') {
+        throw new Error('Please use show on visible elements');
+      }
+      if (!(this._isWithContent() && this._isEnabled)) {
+        return;
+      }
+      const showEvent = EventHandler.trigger(this._element, this.constructor.eventName(EVENT_SHOW$2));
+      const shadowRoot = findShadowRoot(this._element);
+      const isInTheDom = (shadowRoot || this._element.ownerDocument.documentElement).contains(this._element);
+      if (showEvent.defaultPrevented || !isInTheDom) {
+        return;
+      }
+
+      // TODO: v6 remove this or make it optional
+      this._disposePopper();
+      const tip = this._getTipElement();
+      this._element.setAttribute('aria-describedby', tip.getAttribute('id'));
+      const {
+        container
+      } = this._config;
+      if (!this._element.ownerDocument.documentElement.contains(this.tip)) {
+        container.append(tip);
+        EventHandler.trigger(this._element, this.constructor.eventName(EVENT_INSERTED));
+      }
+      this._popper = this._createPopper(tip);
+      tip.classList.add(CLASS_NAME_SHOW$2);
+
+      // If this is a touch-enabled device we add extra
+      // empty mouseover listeners to the body's immediate children;
+      // only needed because of broken event delegation on iOS
+      // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html
+      if ('ontouchstart' in document.documentElement) {
+        for (const element of [].concat(...document.body.children)) {
+          EventHandler.on(element, 'mouseover', noop);
+        }
+      }
+      const complete = () => {
+        EventHandler.trigger(this._element, this.constructor.eventName(EVENT_SHOWN$2));
+        if (this._isHovered === false) {
+          this._leave();
+        }
+        this._isHovered = false;
+      };
+      this._queueCallback(complete, this.tip, this._isAnimated());
+    }
+    hide() {
+      if (!this._isShown()) {
+        return;
+      }
+      const hideEvent = EventHandler.trigger(this._element, this.constructor.eventName(EVENT_HIDE$2));
+      if (hideEvent.defaultPrevented) {
+        return;
+      }
+      const tip = this._getTipElement();
+      tip.classList.remove(CLASS_NAME_SHOW$2);
+
+      // If this is a touch-enabled device we remove the extra
+      // empty mouseover listeners we added for iOS support
+      if ('ontouchstart' in document.documentElement) {
+        for (const element of [].concat(...document.body.children)) {
+          EventHandler.off(element, 'mouseover', noop);
+        }
+      }
+      this._activeTrigger[TRIGGER_CLICK] = false;
+      this._activeTrigger[TRIGGER_FOCUS] = false;
+      this._activeTrigger[TRIGGER_HOVER] = false;
+      this._isHovered = null; // it is a trick to support manual triggering
+
+      const complete = () => {
+        if (this._isWithActiveTrigger()) {
+          return;
+        }
+        if (!this._isHovered) {
+          this._disposePopper();
+        }
+        this._element.removeAttribute('aria-describedby');
+        EventHandler.trigger(this._element, this.constructor.eventName(EVENT_HIDDEN$2));
+      };
+      this._queueCallback(complete, this.tip, this._isAnimated());
+    }
+    update() {
+      if (this._popper) {
+        this._popper.update();
+      }
+    }
+
+    // Protected
+    _isWithContent() {
+      return Boolean(this._getTitle());
+    }
+    _getTipElement() {
+      if (!this.tip) {
+        this.tip = this._createTipElement(this._newContent || this._getContentForTemplate());
+      }
+      return this.tip;
+    }
+    _createTipElement(content) {
+      const tip = this._getTemplateFactory(content).toHtml();
+
+      // TODO: remove this check in v6
+      if (!tip) {
+        return null;
+      }
+      tip.classList.remove(CLASS_NAME_FADE$2, CLASS_NAME_SHOW$2);
+      // TODO: v6 the following can be achieved with CSS only
+      tip.classList.add(`bs-${this.constructor.NAME}-auto`);
+      const tipId = getUID(this.constructor.NAME).toString();
+      tip.setAttribute('id', tipId);
+      if (this._isAnimated()) {
+        tip.classList.add(CLASS_NAME_FADE$2);
+      }
+      return tip;
+    }
+    setContent(content) {
+      this._newContent = content;
+      if (this._isShown()) {
+        this._disposePopper();
+        this.show();
+      }
+    }
+    _getTemplateFactory(content) {
+      if (this._templateFactory) {
+        this._templateFactory.changeContent(content);
+      } else {
+        this._templateFactory = new TemplateFactory({
+          ...this._config,
+          // the `content` var has to be after `this._config`
+          // to override config.content in case of popover
+          content,
+          extraClass: this._resolvePossibleFunction(this._config.customClass)
+        });
+      }
+      return this._templateFactory;
+    }
+    _getContentForTemplate() {
+      return {
+        [SELECTOR_TOOLTIP_INNER]: this._getTitle()
+      };
+    }
+    _getTitle() {
+      return this._resolvePossibleFunction(this._config.title) || this._element.getAttribute('data-bs-original-title');
+    }
+
+    // Private
+    _initializeOnDelegatedTarget(event) {
+      return this.constructor.getOrCreateInstance(event.delegateTarget, this._getDelegateConfig());
+    }
+    _isAnimated() {
+      return this._config.animation || this.tip && this.tip.classList.contains(CLASS_NAME_FADE$2);
+    }
+    _isShown() {
+      return this.tip && this.tip.classList.contains(CLASS_NAME_SHOW$2);
+    }
+    _createPopper(tip) {
+      const placement = execute(this._config.placement, [this, tip, this._element]);
+      const attachment = AttachmentMap[placement.toUpperCase()];
+      return createPopper(this._element, tip, this._getPopperConfig(attachment));
+    }
+    _getOffset() {
+      const {
+        offset
+      } = this._config;
+      if (typeof offset === 'string') {
+        return offset.split(',').map(value => Number.parseInt(value, 10));
+      }
+      if (typeof offset === 'function') {
+        return popperData => offset(popperData, this._element);
+      }
+      return offset;
+    }
+    _resolvePossibleFunction(arg) {
+      return execute(arg, [this._element]);
+    }
+    _getPopperConfig(attachment) {
+      const defaultBsPopperConfig = {
+        placement: attachment,
+        modifiers: [{
+          name: 'flip',
+          options: {
+            fallbackPlacements: this._config.fallbackPlacements
+          }
+        }, {
+          name: 'offset',
+          options: {
+            offset: this._getOffset()
+          }
+        }, {
+          name: 'preventOverflow',
+          options: {
+            boundary: this._config.boundary
+          }
+        }, {
+          name: 'arrow',
+          options: {
+            element: `.${this.constructor.NAME}-arrow`
+          }
+        }, {
+          name: 'preSetPlacement',
+          enabled: true,
+          phase: 'beforeMain',
+          fn: data => {
+            // Pre-set Popper's placement attribute in order to read the arrow sizes properly.
+            // Otherwise, Popper mixes up the width and height dimensions since the initial arrow style is for top placement
+            this._getTipElement().setAttribute('data-popper-placement', data.state.placement);
+          }
+        }]
+      };
+      return {
+        ...defaultBsPopperConfig,
+        ...execute(this._config.popperConfig, [defaultBsPopperConfig])
+      };
+    }
+    _setListeners() {
+      const triggers = this._config.trigger.split(' ');
+      for (const trigger of triggers) {
+        if (trigger === 'click') {
+          EventHandler.on(this._element, this.constructor.eventName(EVENT_CLICK$1), this._config.selector, event => {
+            const context = this._initializeOnDelegatedTarget(event);
+            context.toggle();
+          });
+        } else if (trigger !== TRIGGER_MANUAL) {
+          const eventIn = trigger === TRIGGER_HOVER ? this.constructor.eventName(EVENT_MOUSEENTER) : this.constructor.eventName(EVENT_FOCUSIN$1);
+          const eventOut = trigger === TRIGGER_HOVER ? this.constructor.eventName(EVENT_MOUSELEAVE) : this.constructor.eventName(EVENT_FOCUSOUT$1);
+          EventHandler.on(this._element, eventIn, this._config.selector, event => {
+            const context = this._initializeOnDelegatedTarget(event);
+            context._activeTrigger[event.type === 'focusin' ? TRIGGER_FOCUS : TRIGGER_HOVER] = true;
+            context._enter();
+          });
+          EventHandler.on(this._element, eventOut, this._config.selector, event => {
+            const context = this._initializeOnDelegatedTarget(event);
+            context._activeTrigger[event.type === 'focusout' ? TRIGGER_FOCUS : TRIGGER_HOVER] = context._element.contains(event.relatedTarget);
+            context._leave();
+          });
+        }
+      }
+      this._hideModalHandler = () => {
+        if (this._element) {
+          this.hide();
+        }
+      };
+      EventHandler.on(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE, this._hideModalHandler);
+    }
+    _fixTitle() {
+      const title = this._element.getAttribute('title');
+      if (!title) {
+        return;
+      }
+      if (!this._element.getAttribute('aria-label') && !this._element.textContent.trim()) {
+        this._element.setAttribute('aria-label', title);
+      }
+      this._element.setAttribute('data-bs-original-title', title); // DO NOT USE IT. Is only for backwards compatibility
+      this._element.removeAttribute('title');
+    }
+    _enter() {
+      if (this._isShown() || this._isHovered) {
+        this._isHovered = true;
+        return;
+      }
+      this._isHovered = true;
+      this._setTimeout(() => {
+        if (this._isHovered) {
+          this.show();
+        }
+      }, this._config.delay.show);
+    }
+    _leave() {
+      if (this._isWithActiveTrigger()) {
+        return;
+      }
+      this._isHovered = false;
+      this._setTimeout(() => {
+        if (!this._isHovered) {
+          this.hide();
+        }
+      }, this._config.delay.hide);
+    }
+    _setTimeout(handler, timeout) {
+      clearTimeout(this._timeout);
+      this._timeout = setTimeout(handler, timeout);
+    }
+    _isWithActiveTrigger() {
+      return Object.values(this._activeTrigger).includes(true);
+    }
+    _getConfig(config) {
+      const dataAttributes = Manipulator.getDataAttributes(this._element);
+      for (const dataAttribute of Object.keys(dataAttributes)) {
+        if (DISALLOWED_ATTRIBUTES.has(dataAttribute)) {
+          delete dataAttributes[dataAttribute];
+        }
+      }
+      config = {
+        ...dataAttributes,
+        ...(typeof config === 'object' && config ? config : {})
+      };
+      config = this._mergeConfigObj(config);
+      config = this._configAfterMerge(config);
+      this._typeCheckConfig(config);
+      return config;
+    }
+    _configAfterMerge(config) {
+      config.container = config.container === false ? document.body : getElement(config.container);
+      if (typeof config.delay === 'number') {
+        config.delay = {
+          show: config.delay,
+          hide: config.delay
+        };
+      }
+      if (typeof config.title === 'number') {
+        config.title = config.title.toString();
+      }
+      if (typeof config.content === 'number') {
+        config.content = config.content.toString();
+      }
+      return config;
+    }
+    _getDelegateConfig() {
+      const config = {};
+      for (const [key, value] of Object.entries(this._config)) {
+        if (this.constructor.Default[key] !== value) {
+          config[key] = value;
+        }
+      }
+      config.selector = false;
+      config.trigger = 'manual';
+
+      // In the future can be replaced with:
+      // const keysWithDifferentValues = Object.entries(this._config).filter(entry => this.constructor.Default[entry[0]] !== this._config[entry[0]])
+      // `Object.fromEntries(keysWithDifferentValues)`
+      return config;
+    }
+    _disposePopper() {
+      if (this._popper) {
+        this._popper.destroy();
+        this._popper = null;
+      }
+      if (this.tip) {
+        this.tip.remove();
+        this.tip = null;
+      }
+    }
+
+    // Static
+    static jQueryInterface(config) {
+      return this.each(function () {
+        const data = Tooltip.getOrCreateInstance(this, config);
+        if (typeof config !== 'string') {
+          return;
+        }
+        if (typeof data[config] === 'undefined') {
+          throw new TypeError(`No method named "${config}"`);
+        }
+        data[config]();
+      });
+    }
+  }
+
+  /**
+   * jQuery
+   */
+
+  defineJQueryPlugin(Tooltip);
+
+  /**
+   * --------------------------------------------------------------------------
+   * Bootstrap popover.js
+   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
+   * --------------------------------------------------------------------------
+   */
+
+
+  /**
+   * Constants
+   */
+
+  const NAME$3 = 'popover';
+  const SELECTOR_TITLE = '.popover-header';
+  const SELECTOR_CONTENT = '.popover-body';
+  const Default$2 = {
+    ...Tooltip.Default,
+    content: '',
+    offset: [0, 8],
+    placement: 'right',
+    template: '<div class="popover" role="tooltip">' + '<div class="popover-arrow"></div>' + '<h3 class="popover-header"></h3>' + '<div class="popover-body"></div>' + '</div>',
+    trigger: 'click'
+  };
+  const DefaultType$2 = {
+    ...Tooltip.DefaultType,
+    content: '(null|string|element|function)'
+  };
+
+  /**
+   * Class definition
+   */
+
+  class Popover extends Tooltip {
+    // Getters
+    static get Default() {
+      return Default$2;
+    }
+    static get DefaultType() {
+      return DefaultType$2;
+    }
+    static get NAME() {
+      return NAME$3;
+    }
+
+    // Overrides
+    _isWithContent() {
+      return this._getTitle() || this._getContent();
+    }
+
+    // Private
+    _getContentForTemplate() {
+      return {
+        [SELECTOR_TITLE]: this._getTitle(),
+        [SELECTOR_CONTENT]: this._getContent()
+      };
+    }
+    _getContent() {
+      return this._resolvePossibleFunction(this._config.content);
+    }
+
+    // Static
+    static jQueryInterface(config) {
+      return this.each(function () {
+        const data = Popover.getOrCreateInstance(this, config);
+        if (typeof config !== 'string') {
+          return;
+        }
+        if (typeof data[config] === 'undefined') {
+          throw new TypeError(`No method named "${config}"`);
+        }
+        data[config]();
+      });
+    }
+  }
+
+  /**
+   * jQuery
+   */
+
+  defineJQueryPlugin(Popover);
+
+  /**
+   * --------------------------------------------------------------------------
+   * Bootstrap scrollspy.js
+   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
+   * --------------------------------------------------------------------------
+   */
+
+
+  /**
+   * Constants
+   */
+
+  const NAME$2 = 'scrollspy';
+  const DATA_KEY$2 = 'bs.scrollspy';
+  const EVENT_KEY$2 = `.${DATA_KEY$2}`;
+  const DATA_API_KEY = '.data-api';
+  const EVENT_ACTIVATE = `activate${EVENT_KEY$2}`;
+  const EVENT_CLICK = `click${EVENT_KEY$2}`;
+  const EVENT_LOAD_DATA_API$1 = `load${EVENT_KEY$2}${DATA_API_KEY}`;
+  const CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item';
+  const CLASS_NAME_ACTIVE$1 = 'active';
+  const SELECTOR_DATA_SPY = '[data-bs-spy="scroll"]';
+  const SELECTOR_TARGET_LINKS = '[href]';
+  const SELECTOR_NAV_LIST_GROUP = '.nav, .list-group';
+  const SELECTOR_NAV_LINKS = '.nav-link';
+  const SELECTOR_NAV_ITEMS = '.nav-item';
+  const SELECTOR_LIST_ITEMS = '.list-group-item';
+  const SELECTOR_LINK_ITEMS = `${SELECTOR_NAV_LINKS}, ${SELECTOR_NAV_ITEMS} > ${SELECTOR_NAV_LINKS}, ${SELECTOR_LIST_ITEMS}`;
+  const SELECTOR_DROPDOWN = '.dropdown';
+  const SELECTOR_DROPDOWN_TOGGLE$1 = '.dropdown-toggle';
+  const Default$1 = {
+    offset: null,
+    // TODO: v6 @deprecated, keep it for backwards compatibility reasons
+    rootMargin: '0px 0px -25%',
+    smoothScroll: false,
+    target: null,
+    threshold: [0.1, 0.5, 1]
+  };
+  const DefaultType$1 = {
+    offset: '(number|null)',
+    // TODO v6 @deprecated, keep it for backwards compatibility reasons
+    rootMargin: 'string',
+    smoothScroll: 'boolean',
+    target: 'element',
+    threshold: 'array'
+  };
+
+  /**
+   * Class definition
+   */
+
+  class ScrollSpy extends BaseComponent {
+    constructor(element, config) {
+      super(element, config);
+
+      // this._element is the observablesContainer and config.target the menu links wrapper
+      this._targetLinks = new Map();
+      this._observableSections = new Map();
+      this._rootElement = getComputedStyle(this._element).overflowY === 'visible' ? null : this._element;
+      this._activeTarget = null;
+      this._observer = null;
+      this._previousScrollData = {
+        visibleEntryTop: 0,
+        parentScrollTop: 0
+      };
+      this.refresh(); // initialize
+    }
+
+    // Getters
+    static get Default() {
+      return Default$1;
+    }
+    static get DefaultType() {
+      return DefaultType$1;
+    }
+    static get NAME() {
+      return NAME$2;
+    }
+
+    // Public
+    refresh() {
+      this._initializeTargetsAndObservables();
+      this._maybeEnableSmoothScroll();
+      if (this._observer) {
+        this._observer.disconnect();
+      } else {
+        this._observer = this._getNewObserver();
+      }
+      for (const section of this._observableSections.values()) {
+        this._observer.observe(section);
+      }
+    }
+    dispose() {
+      this._observer.disconnect();
+      super.dispose();
+    }
+
+    // Private
+    _configAfterMerge(config) {
+      // TODO: on v6 target should be given explicitly & remove the {target: 'ss-target'} case
+      config.target = getElement(config.target) || document.body;
+
+      // TODO: v6 Only for backwards compatibility reasons. Use rootMargin only
+      config.rootMargin = config.offset ? `${config.offset}px 0px -30%` : config.rootMargin;
+      if (typeof config.threshold === 'string') {
+        config.threshold = config.threshold.split(',').map(value => Number.parseFloat(value));
+      }
+      return config;
+    }
+    _maybeEnableSmoothScroll() {
+      if (!this._config.smoothScroll) {
+        return;
+      }
+
+      // unregister any previous listeners
+      EventHandler.off(this._config.target, EVENT_CLICK);
+      EventHandler.on(this._config.target, EVENT_CLICK, SELECTOR_TARGET_LINKS, event => {
+        const observableSection = this._observableSections.get(event.target.hash);
+        if (observableSection) {
+          event.preventDefault();
+          const root = this._rootElement || window;
+          const height = observableSection.offsetTop - this._element.offsetTop;
+          if (root.scrollTo) {
+            root.scrollTo({
+              top: height,
+              behavior: 'smooth'
+            });
+            return;
+          }
+
+          // Chrome 60 doesn't support `scrollTo`
+          root.scrollTop = height;
+        }
+      });
+    }
+    _getNewObserver() {
+      const options = {
+        root: this._rootElement,
+        threshold: this._config.threshold,
+        rootMargin: this._config.rootMargin
+      };
+      return new IntersectionObserver(entries => this._observerCallback(entries), options);
+    }
+
+    // The logic of selection
+    _observerCallback(entries) {
+      const targetElement = entry => this._targetLinks.get(`#${entry.target.id}`);
+      const activate = entry => {
+        this._previousScrollData.visibleEntryTop = entry.target.offsetTop;
+        this._process(targetElement(entry));
+      };
+      const parentScrollTop = (this._rootElement || document.documentElement).scrollTop;
+      const userScrollsDown = parentScrollTop >= this._previousScrollData.parentScrollTop;
+      this._previousScrollData.parentScrollTop = parentScrollTop;
+      for (const entry of entries) {
+        if (!entry.isIntersecting) {
+          this._activeTarget = null;
+          this._clearActiveClass(targetElement(entry));
+          continue;
+        }
+        const entryIsLowerThanPrevious = entry.target.offsetTop >= this._previousScrollData.visibleEntryTop;
+        // if we are scrolling down, pick the bigger offsetTop
+        if (userScrollsDown && entryIsLowerThanPrevious) {
+          activate(entry);
+          // if parent isn't scrolled, let's keep the first visible item, breaking the iteration
+          if (!parentScrollTop) {
+            return;
+          }
+          continue;
+        }
+
+        // if we are scrolling up, pick the smallest offsetTop
+        if (!userScrollsDown && !entryIsLowerThanPrevious) {
+          activate(entry);
+        }
+      }
+    }
+    _initializeTargetsAndObservables() {
+      this._targetLinks = new Map();
+      this._observableSections = new Map();
+      const targetLinks = SelectorEngine.find(SELECTOR_TARGET_LINKS, this._config.target);
+      for (const anchor of targetLinks) {
+        // ensure that the anchor has an id and is not disabled
+        if (!anchor.hash || isDisabled(anchor)) {
+          continue;
+        }
+        const observableSection = SelectorEngine.findOne(decodeURI(anchor.hash), this._element);
+
+        // ensure that the observableSection exists & is visible
+        if (isVisible(observableSection)) {
+          this._targetLinks.set(decodeURI(anchor.hash), anchor);
+          this._observableSections.set(anchor.hash, observableSection);
+        }
+      }
+    }
+    _process(target) {
+      if (this._activeTarget === target) {
+        return;
+      }
+      this._clearActiveClass(this._config.target);
+      this._activeTarget = target;
+      target.classList.add(CLASS_NAME_ACTIVE$1);
+      this._activateParents(target);
+      EventHandler.trigger(this._element, EVENT_ACTIVATE, {
+        relatedTarget: target
+      });
+    }
+    _activateParents(target) {
+      // Activate dropdown parents
+      if (target.classList.contains(CLASS_NAME_DROPDOWN_ITEM)) {
+        SelectorEngine.findOne(SELECTOR_DROPDOWN_TOGGLE$1, target.closest(SELECTOR_DROPDOWN)).classList.add(CLASS_NAME_ACTIVE$1);
+        return;
+      }
+      for (const listGroup of SelectorEngine.parents(target, SELECTOR_NAV_LIST_GROUP)) {
+        // Set triggered links parents as active
+        // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor
+        for (const item of SelectorEngine.prev(listGroup, SELECTOR_LINK_ITEMS)) {
+          item.classList.add(CLASS_NAME_ACTIVE$1);
+        }
+      }
+    }
+    _clearActiveClass(parent) {
+      parent.classList.remove(CLASS_NAME_ACTIVE$1);
+      const activeNodes = SelectorEngine.find(`${SELECTOR_TARGET_LINKS}.${CLASS_NAME_ACTIVE$1}`, parent);
+      for (const node of activeNodes) {
+        node.classList.remove(CLASS_NAME_ACTIVE$1);
+      }
+    }
+
+    // Static
+    static jQueryInterface(config) {
+      return this.each(function () {
+        const data = ScrollSpy.getOrCreateInstance(this, config);
+        if (typeof config !== 'string') {
+          return;
+        }
+        if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {
+          throw new TypeError(`No method named "${config}"`);
+        }
+        data[config]();
+      });
+    }
+  }
+
+  /**
+   * Data API implementation
+   */
+
+  EventHandler.on(window, EVENT_LOAD_DATA_API$1, () => {
+    for (const spy of SelectorEngine.find(SELECTOR_DATA_SPY)) {
+      ScrollSpy.getOrCreateInstance(spy);
+    }
+  });
+
+  /**
+   * jQuery
+   */
+
+  defineJQueryPlugin(ScrollSpy);
+
+  /**
+   * --------------------------------------------------------------------------
+   * Bootstrap tab.js
+   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
+   * --------------------------------------------------------------------------
+   */
+
+
+  /**
+   * Constants
+   */
+
+  const NAME$1 = 'tab';
+  const DATA_KEY$1 = 'bs.tab';
+  const EVENT_KEY$1 = `.${DATA_KEY$1}`;
+  const EVENT_HIDE$1 = `hide${EVENT_KEY$1}`;
+  const EVENT_HIDDEN$1 = `hidden${EVENT_KEY$1}`;
+  const EVENT_SHOW$1 = `show${EVENT_KEY$1}`;
+  const EVENT_SHOWN$1 = `shown${EVENT_KEY$1}`;
+  const EVENT_CLICK_DATA_API = `click${EVENT_KEY$1}`;
+  const EVENT_KEYDOWN = `keydown${EVENT_KEY$1}`;
+  const EVENT_LOAD_DATA_API = `load${EVENT_KEY$1}`;
+  const ARROW_LEFT_KEY = 'ArrowLeft';
+  const ARROW_RIGHT_KEY = 'ArrowRight';
+  const ARROW_UP_KEY = 'ArrowUp';
+  const ARROW_DOWN_KEY = 'ArrowDown';
+  const HOME_KEY = 'Home';
+  const END_KEY = 'End';
+  const CLASS_NAME_ACTIVE = 'active';
+  const CLASS_NAME_FADE$1 = 'fade';
+  const CLASS_NAME_SHOW$1 = 'show';
+  const CLASS_DROPDOWN = 'dropdown';
+  const SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle';
+  const SELECTOR_DROPDOWN_MENU = '.dropdown-menu';
+  const NOT_SELECTOR_DROPDOWN_TOGGLE = ':not(.dropdown-toggle)';
+  const SELECTOR_TAB_PANEL = '.list-group, .nav, [role="tablist"]';
+  const SELECTOR_OUTER = '.nav-item, .list-group-item';
+  const SELECTOR_INNER = `.nav-link${NOT_SELECTOR_DROPDOWN_TOGGLE}, .list-group-item${NOT_SELECTOR_DROPDOWN_TOGGLE}, [role="tab"]${NOT_SELECTOR_DROPDOWN_TOGGLE}`;
+  const SELECTOR_DATA_TOGGLE = '[data-bs-toggle="tab"], [data-bs-toggle="pill"], [data-bs-toggle="list"]'; // TODO: could only be `tab` in v6
+  const SELECTOR_INNER_ELEM = `${SELECTOR_INNER}, ${SELECTOR_DATA_TOGGLE}`;
+  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"]`;
+
+  /**
+   * Class definition
+   */
+
+  class Tab extends BaseComponent {
+    constructor(element) {
+      super(element);
+      this._parent = this._element.closest(SELECTOR_TAB_PANEL);
+      if (!this._parent) {
+        return;
+        // TODO: should throw exception in v6
+        // throw new TypeError(`${element.outerHTML} has not a valid parent ${SELECTOR_INNER_ELEM}`)
+      }
+
+      // Set up initial aria attributes
+      this._setInitialAttributes(this._parent, this._getChildren());
+      EventHandler.on(this._element, EVENT_KEYDOWN, event => this._keydown(event));
+    }
+
+    // Getters
+    static get NAME() {
+      return NAME$1;
+    }
+
+    // Public
+    show() {
+      // Shows this elem and deactivate the active sibling if exists
+      const innerElem = this._element;
+      if (this._elemIsActive(innerElem)) {
+        return;
+      }
+
+      // Search for active tab on same parent to deactivate it
+      const active = this._getActiveElem();
+      const hideEvent = active ? EventHandler.trigger(active, EVENT_HIDE$1, {
+        relatedTarget: innerElem
+      }) : null;
+      const showEvent = EventHandler.trigger(innerElem, EVENT_SHOW$1, {
+        relatedTarget: active
+      });
+      if (showEvent.defaultPrevented || hideEvent && hideEvent.defaultPrevented) {
+        return;
+      }
+      this._deactivate(active, innerElem);
+      this._activate(innerElem, active);
+    }
+
+    // Private
+    _activate(element, relatedElem) {
+      if (!element) {
+        return;
+      }
+      element.classList.add(CLASS_NAME_ACTIVE);
+      this._activate(SelectorEngine.getElementFromSelector(element)); // Search and activate/show the proper section
+
+      const complete = () => {
+        if (element.getAttribute('role') !== 'tab') {
+          element.classList.add(CLASS_NAME_SHOW$1);
+          return;
+        }
+        element.removeAttribute('tabindex');
+        element.setAttribute('aria-selected', true);
+        this._toggleDropDown(element, true);
+        EventHandler.trigger(element, EVENT_SHOWN$1, {
+          relatedTarget: relatedElem
+        });
+      };
+      this._queueCallback(complete, element, element.classList.contains(CLASS_NAME_FADE$1));
+    }
+    _deactivate(element, relatedElem) {
+      if (!element) {
+        return;
+      }
+      element.classList.remove(CLASS_NAME_ACTIVE);
+      element.blur();
+      this._deactivate(SelectorEngine.getElementFromSelector(element)); // Search and deactivate the shown section too
+
+      const complete = () => {
+        if (element.getAttribute('role') !== 'tab') {
+          element.classList.remove(CLASS_NAME_SHOW$1);
+          return;
+        }
+        element.setAttribute('aria-selected', false);
+        element.setAttribute('tabindex', '-1');
+        this._toggleDropDown(element, false);
+        EventHandler.trigger(element, EVENT_HIDDEN$1, {
+          relatedTarget: relatedElem
+        });
+      };
+      this._queueCallback(complete, element, element.classList.contains(CLASS_NAME_FADE$1));
+    }
+    _keydown(event) {
+      if (![ARROW_LEFT_KEY, ARROW_RIGHT_KEY, ARROW_UP_KEY, ARROW_DOWN_KEY, HOME_KEY, END_KEY].includes(event.key)) {
+        return;
+      }
+      event.stopPropagation(); // stopPropagation/preventDefault both added to support up/down keys without scrolling the page
+      event.preventDefault();
+      const children = this._getChildren().filter(element => !isDisabled(element));
+      let nextActiveElement;
+      if ([HOME_KEY, END_KEY].includes(event.key)) {
+        nextActiveElement = children[event.key === HOME_KEY ? 0 : children.length - 1];
+      } else {
+        const isNext = [ARROW_RIGHT_KEY, ARROW_DOWN_KEY].includes(event.key);
+        nextActiveElement = getNextActiveElement(children, event.target, isNext, true);
+      }
+      if (nextActiveElement) {
+        nextActiveElement.focus({
+          preventScroll: true
+        });
+        Tab.getOrCreateInstance(nextActiveElement).show();
+      }
+    }
+    _getChildren() {
+      // collection of inner elements
+      return SelectorEngine.find(SELECTOR_INNER_ELEM, this._parent);
+    }
+    _getActiveElem() {
+      return this._getChildren().find(child => this._elemIsActive(child)) || null;
+    }
+    _setInitialAttributes(parent, children) {
+      this._setAttributeIfNotExists(parent, 'role', 'tablist');
+      for (const child of children) {
+        this._setInitialAttributesOnChild(child);
+      }
+    }
+    _setInitialAttributesOnChild(child) {
+      child = this._getInnerElement(child);
+      const isActive = this._elemIsActive(child);
+      const outerElem = this._getOuterElement(child);
+      child.setAttribute('aria-selected', isActive);
+      if (outerElem !== child) {
+        this._setAttributeIfNotExists(outerElem, 'role', 'presentation');
+      }
+      if (!isActive) {
+        child.setAttribute('tabindex', '-1');
+      }
+      this._setAttributeIfNotExists(child, 'role', 'tab');
+
+      // set attributes to the related panel too
+      this._setInitialAttributesOnTargetPanel(child);
+    }
+    _setInitialAttributesOnTargetPanel(child) {
+      const target = SelectorEngine.getElementFromSelector(child);
+      if (!target) {
+        return;
+      }
+      this._setAttributeIfNotExists(target, 'role', 'tabpanel');
+      if (child.id) {
+        this._setAttributeIfNotExists(target, 'aria-labelledby', `${child.id}`);
+      }
+    }
+    _toggleDropDown(element, open) {
+      const outerElem = this._getOuterElement(element);
+      if (!outerElem.classList.contains(CLASS_DROPDOWN)) {
+        return;
+      }
+      const toggle = (selector, className) => {
+        const element = SelectorEngine.findOne(selector, outerElem);
+        if (element) {
+          element.classList.toggle(className, open);
+        }
+      };
+      toggle(SELECTOR_DROPDOWN_TOGGLE, CLASS_NAME_ACTIVE);
+      toggle(SELECTOR_DROPDOWN_MENU, CLASS_NAME_SHOW$1);
+      outerElem.setAttribute('aria-expanded', open);
+    }
+    _setAttributeIfNotExists(element, attribute, value) {
+      if (!element.hasAttribute(attribute)) {
+        element.setAttribute(attribute, value);
+      }
+    }
+    _elemIsActive(elem) {
+      return elem.classList.contains(CLASS_NAME_ACTIVE);
+    }
+
+    // Try to get the inner element (usually the .nav-link)
+    _getInnerElement(elem) {
+      return elem.matches(SELECTOR_INNER_ELEM) ? elem : SelectorEngine.findOne(SELECTOR_INNER_ELEM, elem);
+    }
+
+    // Try to get the outer element (usually the .nav-item)
+    _getOuterElement(elem) {
+      return elem.closest(SELECTOR_OUTER) || elem;
+    }
+
+    // Static
+    static jQueryInterface(config) {
+      return this.each(function () {
+        const data = Tab.getOrCreateInstance(this);
+        if (typeof config !== 'string') {
+          return;
+        }
+        if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {
+          throw new TypeError(`No method named "${config}"`);
+        }
+        data[config]();
+      });
+    }
+  }
+
+  /**
+   * Data API implementation
+   */
+
+  EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {
+    if (['A', 'AREA'].includes(this.tagName)) {
+      event.preventDefault();
+    }
+    if (isDisabled(this)) {
+      return;
+    }
+    Tab.getOrCreateInstance(this).show();
+  });
+
+  /**
+   * Initialize on focus
+   */
+  EventHandler.on(window, EVENT_LOAD_DATA_API, () => {
+    for (const element of SelectorEngine.find(SELECTOR_DATA_TOGGLE_ACTIVE)) {
+      Tab.getOrCreateInstance(element);
+    }
+  });
+  /**
+   * jQuery
+   */
+
+  defineJQueryPlugin(Tab);
+
+  /**
+   * --------------------------------------------------------------------------
+   * Bootstrap toast.js
+   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
+   * --------------------------------------------------------------------------
+   */
+
+
+  /**
+   * Constants
+   */
+
+  const NAME = 'toast';
+  const DATA_KEY = 'bs.toast';
+  const EVENT_KEY = `.${DATA_KEY}`;
+  const EVENT_MOUSEOVER = `mouseover${EVENT_KEY}`;
+  const EVENT_MOUSEOUT = `mouseout${EVENT_KEY}`;
+  const EVENT_FOCUSIN = `focusin${EVENT_KEY}`;
+  const EVENT_FOCUSOUT = `focusout${EVENT_KEY}`;
+  const EVENT_HIDE = `hide${EVENT_KEY}`;
+  const EVENT_HIDDEN = `hidden${EVENT_KEY}`;
+  const EVENT_SHOW = `show${EVENT_KEY}`;
+  const EVENT_SHOWN = `shown${EVENT_KEY}`;
+  const CLASS_NAME_FADE = 'fade';
+  const CLASS_NAME_HIDE = 'hide'; // @deprecated - kept here only for backwards compatibility
+  const CLASS_NAME_SHOW = 'show';
+  const CLASS_NAME_SHOWING = 'showing';
+  const DefaultType = {
+    animation: 'boolean',
+    autohide: 'boolean',
+    delay: 'number'
+  };
+  const Default = {
+    animation: true,
+    autohide: true,
+    delay: 5000
+  };
+
+  /**
+   * Class definition
+   */
+
+  class Toast extends BaseComponent {
+    constructor(element, config) {
+      super(element, config);
+      this._timeout = null;
+      this._hasMouseInteraction = false;
+      this._hasKeyboardInteraction = false;
+      this._setListeners();
+    }
+
+    // Getters
+    static get Default() {
+      return Default;
+    }
+    static get DefaultType() {
+      return DefaultType;
+    }
+    static get NAME() {
+      return NAME;
+    }
+
+    // Public
+    show() {
+      const showEvent = EventHandler.trigger(this._element, EVENT_SHOW);
+      if (showEvent.defaultPrevented) {
+        return;
+      }
+      this._clearTimeout();
+      if (this._config.animation) {
+        this._element.classList.add(CLASS_NAME_FADE);
+      }
+      const complete = () => {
+        this._element.classList.remove(CLASS_NAME_SHOWING);
+        EventHandler.trigger(this._element, EVENT_SHOWN);
+        this._maybeScheduleHide();
+      };
+      this._element.classList.remove(CLASS_NAME_HIDE); // @deprecated
+      reflow(this._element);
+      this._element.classList.add(CLASS_NAME_SHOW, CLASS_NAME_SHOWING);
+      this._queueCallback(complete, this._element, this._config.animation);
+    }
+    hide() {
+      if (!this.isShown()) {
+        return;
+      }
+      const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE);
+      if (hideEvent.defaultPrevented) {
+        return;
+      }
+      const complete = () => {
+        this._element.classList.add(CLASS_NAME_HIDE); // @deprecated
+        this._element.classList.remove(CLASS_NAME_SHOWING, CLASS_NAME_SHOW);
+        EventHandler.trigger(this._element, EVENT_HIDDEN);
+      };
+      this._element.classList.add(CLASS_NAME_SHOWING);
+      this._queueCallback(complete, this._element, this._config.animation);
+    }
+    dispose() {
+      this._clearTimeout();
+      if (this.isShown()) {
+        this._element.classList.remove(CLASS_NAME_SHOW);
+      }
+      super.dispose();
+    }
+    isShown() {
+      return this._element.classList.contains(CLASS_NAME_SHOW);
+    }
+
+    // Private
+
+    _maybeScheduleHide() {
+      if (!this._config.autohide) {
+        return;
+      }
+      if (this._hasMouseInteraction || this._hasKeyboardInteraction) {
+        return;
+      }
+      this._timeout = setTimeout(() => {
+        this.hide();
+      }, this._config.delay);
+    }
+    _onInteraction(event, isInteracting) {
+      switch (event.type) {
+        case 'mouseover':
+        case 'mouseout':
+          {
+            this._hasMouseInteraction = isInteracting;
+            break;
+          }
+        case 'focusin':
+        case 'focusout':
+          {
+            this._hasKeyboardInteraction = isInteracting;
+            break;
+          }
+      }
+      if (isInteracting) {
+        this._clearTimeout();
+        return;
+      }
+      const nextElement = event.relatedTarget;
+      if (this._element === nextElement || this._element.contains(nextElement)) {
+        return;
+      }
+      this._maybeScheduleHide();
+    }
+    _setListeners() {
+      EventHandler.on(this._element, EVENT_MOUSEOVER, event => this._onInteraction(event, true));
+      EventHandler.on(this._element, EVENT_MOUSEOUT, event => this._onInteraction(event, false));
+      EventHandler.on(this._element, EVENT_FOCUSIN, event => this._onInteraction(event, true));
+      EventHandler.on(this._element, EVENT_FOCUSOUT, event => this._onInteraction(event, false));
+    }
+    _clearTimeout() {
+      clearTimeout(this._timeout);
+      this._timeout = null;
+    }
+
+    // Static
+    static jQueryInterface(config) {
+      return this.each(function () {
+        const data = Toast.getOrCreateInstance(this, config);
+        if (typeof config === 'string') {
+          if (typeof data[config] === 'undefined') {
+            throw new TypeError(`No method named "${config}"`);
+          }
+          data[config](this);
+        }
+      });
+    }
+  }
+
+  /**
+   * Data API implementation
+   */
+
+  enableDismissTrigger(Toast);
+
+  /**
+   * jQuery
+   */
+
+  defineJQueryPlugin(Toast);
+
+  /**
+   * --------------------------------------------------------------------------
+   * Bootstrap index.umd.js
+   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
+   * --------------------------------------------------------------------------
+   */
+
+  const index_umd = {
+    Alert,
+    Button,
+    Carousel,
+    Collapse,
+    Dropdown,
+    Modal,
+    Offcanvas,
+    Popover,
+    ScrollSpy,
+    Tab,
+    Toast,
+    Tooltip
+  };
+
+  return index_umd;
+
+}));
+//# sourceMappingURL=bootstrap.bundle.js.map

Різницю між файлами не показано, бо вона завелика
+ 0 - 0
public/libs/bootstrap/dist/js/bootstrap.bundle.js.map


Різницю між файлами не показано, бо вона завелика
+ 5 - 0
public/libs/bootstrap/dist/js/bootstrap.bundle.min.js


Різницю між файлами не показано, бо вона завелика
+ 0 - 0
public/libs/bootstrap/dist/js/bootstrap.bundle.min.js.map


+ 4447 - 0
public/libs/bootstrap/dist/js/bootstrap.esm.js

@@ -0,0 +1,4447 @@
+/*!
+  * Bootstrap v5.3.1 (https://getbootstrap.com/)
+  * Copyright 2011-2023 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
+  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
+  */
+import * as Popper from '@popperjs/core';
+
+/**
+ * --------------------------------------------------------------------------
+ * Bootstrap dom/data.js
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
+ * --------------------------------------------------------------------------
+ */
+
+/**
+ * Constants
+ */
+
+const elementMap = new Map();
+const Data = {
+  set(element, key, instance) {
+    if (!elementMap.has(element)) {
+      elementMap.set(element, new Map());
+    }
+    const instanceMap = elementMap.get(element);
+
+    // make it clear we only want one instance per element
+    // can be removed later when multiple key/instances are fine to be used
+    if (!instanceMap.has(key) && instanceMap.size !== 0) {
+      // eslint-disable-next-line no-console
+      console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(instanceMap.keys())[0]}.`);
+      return;
+    }
+    instanceMap.set(key, instance);
+  },
+  get(element, key) {
+    if (elementMap.has(element)) {
+      return elementMap.get(element).get(key) || null;
+    }
+    return null;
+  },
+  remove(element, key) {
+    if (!elementMap.has(element)) {
+      return;
+    }
+    const instanceMap = elementMap.get(element);
+    instanceMap.delete(key);
+
+    // free up element references if there are no instances left for an element
+    if (instanceMap.size === 0) {
+      elementMap.delete(element);
+    }
+  }
+};
+
+/**
+ * --------------------------------------------------------------------------
+ * Bootstrap util/index.js
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
+ * --------------------------------------------------------------------------
+ */
+
+const MAX_UID = 1000000;
+const MILLISECONDS_MULTIPLIER = 1000;
+const TRANSITION_END = 'transitionend';
+
+/**
+ * Properly escape IDs selectors to handle weird IDs
+ * @param {string} selector
+ * @returns {string}
+ */
+const parseSelector = selector => {
+  if (selector && window.CSS && window.CSS.escape) {
+    // document.querySelector needs escaping to handle IDs (html5+) containing for instance /
+    selector = selector.replace(/#([^\s"#']+)/g, (match, id) => `#${CSS.escape(id)}`);
+  }
+  return selector;
+};
+
+// Shout-out Angus Croll (https://goo.gl/pxwQGp)
+const toType = object => {
+  if (object === null || object === undefined) {
+    return `${object}`;
+  }
+  return Object.prototype.toString.call(object).match(/\s([a-z]+)/i)[1].toLowerCase();
+};
+
+/**
+ * Public Util API
+ */
+
+const getUID = prefix => {
+  do {
+    prefix += Math.floor(Math.random() * MAX_UID);
+  } while (document.getElementById(prefix));
+  return prefix;
+};
+const getTransitionDurationFromElement = element => {
+  if (!element) {
+    return 0;
+  }
+
+  // Get transition-duration of the element
+  let {
+    transitionDuration,
+    transitionDelay
+  } = window.getComputedStyle(element);
+  const floatTransitionDuration = Number.parseFloat(transitionDuration);
+  const floatTransitionDelay = Number.parseFloat(transitionDelay);
+
+  // Return 0 if element or transition duration is not found
+  if (!floatTransitionDuration && !floatTransitionDelay) {
+    return 0;
+  }
+
+  // If multiple durations are defined, take the first
+  transitionDuration = transitionDuration.split(',')[0];
+  transitionDelay = transitionDelay.split(',')[0];
+  return (Number.parseFloat(transitionDuration) + Number.parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER;
+};
+const triggerTransitionEnd = element => {
+  element.dispatchEvent(new Event(TRANSITION_END));
+};
+const isElement = object => {
+  if (!object || typeof object !== 'object') {
+    return false;
+  }
+  if (typeof object.jquery !== 'undefined') {
+    object = object[0];
+  }
+  return typeof object.nodeType !== 'undefined';
+};
+const getElement = object => {
+  // it's a jQuery object or a node element
+  if (isElement(object)) {
+    return object.jquery ? object[0] : object;
+  }
+  if (typeof object === 'string' && object.length > 0) {
+    return document.querySelector(parseSelector(object));
+  }
+  return null;
+};
+const isVisible = element => {
+  if (!isElement(element) || element.getClientRects().length === 0) {
+    return false;
+  }
+  const elementIsVisible = getComputedStyle(element).getPropertyValue('visibility') === 'visible';
+  // Handle `details` element as its content may falsie appear visible when it is closed
+  const closedDetails = element.closest('details:not([open])');
+  if (!closedDetails) {
+    return elementIsVisible;
+  }
+  if (closedDetails !== element) {
+    const summary = element.closest('summary');
+    if (summary && summary.parentNode !== closedDetails) {
+      return false;
+    }
+    if (summary === null) {
+      return false;
+    }
+  }
+  return elementIsVisible;
+};
+const isDisabled = element => {
+  if (!element || element.nodeType !== Node.ELEMENT_NODE) {
+    return true;
+  }
+  if (element.classList.contains('disabled')) {
+    return true;
+  }
+  if (typeof element.disabled !== 'undefined') {
+    return element.disabled;
+  }
+  return element.hasAttribute('disabled') && element.getAttribute('disabled') !== 'false';
+};
+const findShadowRoot = element => {
+  if (!document.documentElement.attachShadow) {
+    return null;
+  }
+
+  // Can find the shadow root otherwise it'll return the document
+  if (typeof element.getRootNode === 'function') {
+    const root = element.getRootNode();
+    return root instanceof ShadowRoot ? root : null;
+  }
+  if (element instanceof ShadowRoot) {
+    return element;
+  }
+
+  // when we don't find a shadow root
+  if (!element.parentNode) {
+    return null;
+  }
+  return findShadowRoot(element.parentNode);
+};
+const noop = () => {};
+
+/**
+ * Trick to restart an element's animation
+ *
+ * @param {HTMLElement} element
+ * @return void
+ *
+ * @see https://www.charistheo.io/blog/2021/02/restart-a-css-animation-with-javascript/#restarting-a-css-animation
+ */
+const reflow = element => {
+  element.offsetHeight; // eslint-disable-line no-unused-expressions
+};
+
+const getjQuery = () => {
+  if (window.jQuery && !document.body.hasAttribute('data-bs-no-jquery')) {
+    return window.jQuery;
+  }
+  return null;
+};
+const DOMContentLoadedCallbacks = [];
+const onDOMContentLoaded = callback => {
+  if (document.readyState === 'loading') {
+    // add listener on the first call when the document is in loading state
+    if (!DOMContentLoadedCallbacks.length) {
+      document.addEventListener('DOMContentLoaded', () => {
+        for (const callback of DOMContentLoadedCallbacks) {
+          callback();
+        }
+      });
+    }
+    DOMContentLoadedCallbacks.push(callback);
+  } else {
+    callback();
+  }
+};
+const isRTL = () => document.documentElement.dir === 'rtl';
+const defineJQueryPlugin = plugin => {
+  onDOMContentLoaded(() => {
+    const $ = getjQuery();
+    /* istanbul ignore if */
+    if ($) {
+      const name = plugin.NAME;
+      const JQUERY_NO_CONFLICT = $.fn[name];
+      $.fn[name] = plugin.jQueryInterface;
+      $.fn[name].Constructor = plugin;
+      $.fn[name].noConflict = () => {
+        $.fn[name] = JQUERY_NO_CONFLICT;
+        return plugin.jQueryInterface;
+      };
+    }
+  });
+};
+const execute = (possibleCallback, args = [], defaultValue = possibleCallback) => {
+  return typeof possibleCallback === 'function' ? possibleCallback(...args) : defaultValue;
+};
+const executeAfterTransition = (callback, transitionElement, waitForTransition = true) => {
+  if (!waitForTransition) {
+    execute(callback);
+    return;
+  }
+  const durationPadding = 5;
+  const emulatedDuration = getTransitionDurationFromElement(transitionElement) + durationPadding;
+  let called = false;
+  const handler = ({
+    target
+  }) => {
+    if (target !== transitionElement) {
+      return;
+    }
+    called = true;
+    transitionElement.removeEventListener(TRANSITION_END, handler);
+    execute(callback);
+  };
+  transitionElement.addEventListener(TRANSITION_END, handler);
+  setTimeout(() => {
+    if (!called) {
+      triggerTransitionEnd(transitionElement);
+    }
+  }, emulatedDuration);
+};
+
+/**
+ * Return the previous/next element of a list.
+ *
+ * @param {array} list    The list of elements
+ * @param activeElement   The active element
+ * @param shouldGetNext   Choose to get next or previous element
+ * @param isCycleAllowed
+ * @return {Element|elem} The proper element
+ */
+const getNextActiveElement = (list, activeElement, shouldGetNext, isCycleAllowed) => {
+  const listLength = list.length;
+  let index = list.indexOf(activeElement);
+
+  // if the element does not exist in the list return an element
+  // depending on the direction and if cycle is allowed
+  if (index === -1) {
+    return !shouldGetNext && isCycleAllowed ? list[listLength - 1] : list[0];
+  }
+  index += shouldGetNext ? 1 : -1;
+  if (isCycleAllowed) {
+    index = (index + listLength) % listLength;
+  }
+  return list[Math.max(0, Math.min(index, listLength - 1))];
+};
+
+/**
+ * --------------------------------------------------------------------------
+ * Bootstrap dom/event-handler.js
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
+ * --------------------------------------------------------------------------
+ */
+
+
+/**
+ * Constants
+ */
+
+const namespaceRegex = /[^.]*(?=\..*)\.|.*/;
+const stripNameRegex = /\..*/;
+const stripUidRegex = /::\d+$/;
+const eventRegistry = {}; // Events storage
+let uidEvent = 1;
+const customEvents = {
+  mouseenter: 'mouseover',
+  mouseleave: 'mouseout'
+};
+const nativeEvents = new Set(['click', 'dblclick', 'mouseup', 'mousedown', 'contextmenu', 'mousewheel', 'DOMMouseScroll', 'mouseover', 'mouseout', 'mousemove', 'selectstart', 'selectend', 'keydown', 'keypress', 'keyup', 'orientationchange', 'touchstart', 'touchmove', 'touchend', 'touchcancel', 'pointerdown', 'pointermove', 'pointerup', 'pointerleave', 'pointercancel', 'gesturestart', 'gesturechange', 'gestureend', 'focus', 'blur', 'change', 'reset', 'select', 'submit', 'focusin', 'focusout', 'load', 'unload', 'beforeunload', 'resize', 'move', 'DOMContentLoaded', 'readystatechange', 'error', 'abort', 'scroll']);
+
+/**
+ * Private methods
+ */
+
+function makeEventUid(element, uid) {
+  return uid && `${uid}::${uidEvent++}` || element.uidEvent || uidEvent++;
+}
+function getElementEvents(element) {
+  const uid = makeEventUid(element);
+  element.uidEvent = uid;
+  eventRegistry[uid] = eventRegistry[uid] || {};
+  return eventRegistry[uid];
+}
+function bootstrapHandler(element, fn) {
+  return function handler(event) {
+    hydrateObj(event, {
+      delegateTarget: element
+    });
+    if (handler.oneOff) {
+      EventHandler.off(element, event.type, fn);
+    }
+    return fn.apply(element, [event]);
+  };
+}
+function bootstrapDelegationHandler(element, selector, fn) {
+  return function handler(event) {
+    const domElements = element.querySelectorAll(selector);
+    for (let {
+      target
+    } = event; target && target !== this; target = target.parentNode) {
+      for (const domElement of domElements) {
+        if (domElement !== target) {
+          continue;
+        }
+        hydrateObj(event, {
+          delegateTarget: target
+        });
+        if (handler.oneOff) {
+          EventHandler.off(element, event.type, selector, fn);
+        }
+        return fn.apply(target, [event]);
+      }
+    }
+  };
+}
+function findHandler(events, callable, delegationSelector = null) {
+  return Object.values(events).find(event => event.callable === callable && event.delegationSelector === delegationSelector);
+}
+function normalizeParameters(originalTypeEvent, handler, delegationFunction) {
+  const isDelegated = typeof handler === 'string';
+  // TODO: tooltip passes `false` instead of selector, so we need to check
+  const callable = isDelegated ? delegationFunction : handler || delegationFunction;
+  let typeEvent = getTypeEvent(originalTypeEvent);
+  if (!nativeEvents.has(typeEvent)) {
+    typeEvent = originalTypeEvent;
+  }
+  return [isDelegated, callable, typeEvent];
+}
+function addHandler(element, originalTypeEvent, handler, delegationFunction, oneOff) {
+  if (typeof originalTypeEvent !== 'string' || !element) {
+    return;
+  }
+  let [isDelegated, callable, typeEvent] = normalizeParameters(originalTypeEvent, handler, delegationFunction);
+
+  // in case of mouseenter or mouseleave wrap the handler within a function that checks for its DOM position
+  // this prevents the handler from being dispatched the same way as mouseover or mouseout does
+  if (originalTypeEvent in customEvents) {
+    const wrapFunction = fn => {
+      return function (event) {
+        if (!event.relatedTarget || event.relatedTarget !== event.delegateTarget && !event.delegateTarget.contains(event.relatedTarget)) {
+          return fn.call(this, event);
+        }
+      };
+    };
+    callable = wrapFunction(callable);
+  }
+  const events = getElementEvents(element);
+  const handlers = events[typeEvent] || (events[typeEvent] = {});
+  const previousFunction = findHandler(handlers, callable, isDelegated ? handler : null);
+  if (previousFunction) {
+    previousFunction.oneOff = previousFunction.oneOff && oneOff;
+    return;
+  }
+  const uid = makeEventUid(callable, originalTypeEvent.replace(namespaceRegex, ''));
+  const fn = isDelegated ? bootstrapDelegationHandler(element, handler, callable) : bootstrapHandler(element, callable);
+  fn.delegationSelector = isDelegated ? handler : null;
+  fn.callable = callable;
+  fn.oneOff = oneOff;
+  fn.uidEvent = uid;
+  handlers[uid] = fn;
+  element.addEventListener(typeEvent, fn, isDelegated);
+}
+function removeHandler(element, events, typeEvent, handler, delegationSelector) {
+  const fn = findHandler(events[typeEvent], handler, delegationSelector);
+  if (!fn) {
+    return;
+  }
+  element.removeEventListener(typeEvent, fn, Boolean(delegationSelector));
+  delete events[typeEvent][fn.uidEvent];
+}
+function removeNamespacedHandlers(element, events, typeEvent, namespace) {
+  const storeElementEvent = events[typeEvent] || {};
+  for (const [handlerKey, event] of Object.entries(storeElementEvent)) {
+    if (handlerKey.includes(namespace)) {
+      removeHandler(element, events, typeEvent, event.callable, event.delegationSelector);
+    }
+  }
+}
+function getTypeEvent(event) {
+  // allow to get the native events from namespaced events ('click.bs.button' --> 'click')
+  event = event.replace(stripNameRegex, '');
+  return customEvents[event] || event;
+}
+const EventHandler = {
+  on(element, event, handler, delegationFunction) {
+    addHandler(element, event, handler, delegationFunction, false);
+  },
+  one(element, event, handler, delegationFunction) {
+    addHandler(element, event, handler, delegationFunction, true);
+  },
+  off(element, originalTypeEvent, handler, delegationFunction) {
+    if (typeof originalTypeEvent !== 'string' || !element) {
+      return;
+    }
+    const [isDelegated, callable, typeEvent] = normalizeParameters(originalTypeEvent, handler, delegationFunction);
+    const inNamespace = typeEvent !== originalTypeEvent;
+    const events = getElementEvents(element);
+    const storeElementEvent = events[typeEvent] || {};
+    const isNamespace = originalTypeEvent.startsWith('.');
+    if (typeof callable !== 'undefined') {
+      // Simplest case: handler is passed, remove that listener ONLY.
+      if (!Object.keys(storeElementEvent).length) {
+        return;
+      }
+      removeHandler(element, events, typeEvent, callable, isDelegated ? handler : null);
+      return;
+    }
+    if (isNamespace) {
+      for (const elementEvent of Object.keys(events)) {
+        removeNamespacedHandlers(element, events, elementEvent, originalTypeEvent.slice(1));
+      }
+    }
+    for (const [keyHandlers, event] of Object.entries(storeElementEvent)) {
+      const handlerKey = keyHandlers.replace(stripUidRegex, '');
+      if (!inNamespace || originalTypeEvent.includes(handlerKey)) {
+        removeHandler(element, events, typeEvent, event.callable, event.delegationSelector);
+      }
+    }
+  },
+  trigger(element, event, args) {
+    if (typeof event !== 'string' || !element) {
+      return null;
+    }
+    const $ = getjQuery();
+    const typeEvent = getTypeEvent(event);
+    const inNamespace = event !== typeEvent;
+    let jQueryEvent = null;
+    let bubbles = true;
+    let nativeDispatch = true;
+    let defaultPrevented = false;
+    if (inNamespace && $) {
+      jQueryEvent = $.Event(event, args);
+      $(element).trigger(jQueryEvent);
+      bubbles = !jQueryEvent.isPropagationStopped();
+      nativeDispatch = !jQueryEvent.isImmediatePropagationStopped();
+      defaultPrevented = jQueryEvent.isDefaultPrevented();
+    }
+    const evt = hydrateObj(new Event(event, {
+      bubbles,
+      cancelable: true
+    }), args);
+    if (defaultPrevented) {
+      evt.preventDefault();
+    }
+    if (nativeDispatch) {
+      element.dispatchEvent(evt);
+    }
+    if (evt.defaultPrevented && jQueryEvent) {
+      jQueryEvent.preventDefault();
+    }
+    return evt;
+  }
+};
+function hydrateObj(obj, meta = {}) {
+  for (const [key, value] of Object.entries(meta)) {
+    try {
+      obj[key] = value;
+    } catch (_unused) {
+      Object.defineProperty(obj, key, {
+        configurable: true,
+        get() {
+          return value;
+        }
+      });
+    }
+  }
+  return obj;
+}
+
+/**
+ * --------------------------------------------------------------------------
+ * Bootstrap dom/manipulator.js
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
+ * --------------------------------------------------------------------------
+ */
+
+function normalizeData(value) {
+  if (value === 'true') {
+    return true;
+  }
+  if (value === 'false') {
+    return false;
+  }
+  if (value === Number(value).toString()) {
+    return Number(value);
+  }
+  if (value === '' || value === 'null') {
+    return null;
+  }
+  if (typeof value !== 'string') {
+    return value;
+  }
+  try {
+    return JSON.parse(decodeURIComponent(value));
+  } catch (_unused) {
+    return value;
+  }
+}
+function normalizeDataKey(key) {
+  return key.replace(/[A-Z]/g, chr => `-${chr.toLowerCase()}`);
+}
+const Manipulator = {
+  setDataAttribute(element, key, value) {
+    element.setAttribute(`data-bs-${normalizeDataKey(key)}`, value);
+  },
+  removeDataAttribute(element, key) {
+    element.removeAttribute(`data-bs-${normalizeDataKey(key)}`);
+  },
+  getDataAttributes(element) {
+    if (!element) {
+      return {};
+    }
+    const attributes = {};
+    const bsKeys = Object.keys(element.dataset).filter(key => key.startsWith('bs') && !key.startsWith('bsConfig'));
+    for (const key of bsKeys) {
+      let pureKey = key.replace(/^bs/, '');
+      pureKey = pureKey.charAt(0).toLowerCase() + pureKey.slice(1, pureKey.length);
+      attributes[pureKey] = normalizeData(element.dataset[key]);
+    }
+    return attributes;
+  },
+  getDataAttribute(element, key) {
+    return normalizeData(element.getAttribute(`data-bs-${normalizeDataKey(key)}`));
+  }
+};
+
+/**
+ * --------------------------------------------------------------------------
+ * Bootstrap util/config.js
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
+ * --------------------------------------------------------------------------
+ */
+
+
+/**
+ * Class definition
+ */
+
+class Config {
+  // Getters
+  static get Default() {
+    return {};
+  }
+  static get DefaultType() {
+    return {};
+  }
+  static get NAME() {
+    throw new Error('You have to implement the static method "NAME", for each component!');
+  }
+  _getConfig(config) {
+    config = this._mergeConfigObj(config);
+    config = this._configAfterMerge(config);
+    this._typeCheckConfig(config);
+    return config;
+  }
+  _configAfterMerge(config) {
+    return config;
+  }
+  _mergeConfigObj(config, element) {
+    const jsonConfig = isElement(element) ? Manipulator.getDataAttribute(element, 'config') : {}; // try to parse
+
+    return {
+      ...this.constructor.Default,
+      ...(typeof jsonConfig === 'object' ? jsonConfig : {}),
+      ...(isElement(element) ? Manipulator.getDataAttributes(element) : {}),
+      ...(typeof config === 'object' ? config : {})
+    };
+  }
+  _typeCheckConfig(config, configTypes = this.constructor.DefaultType) {
+    for (const [property, expectedTypes] of Object.entries(configTypes)) {
+      const value = config[property];
+      const valueType = isElement(value) ? 'element' : toType(value);
+      if (!new RegExp(expectedTypes).test(valueType)) {
+        throw new TypeError(`${this.constructor.NAME.toUpperCase()}: Option "${property}" provided type "${valueType}" but expected type "${expectedTypes}".`);
+      }
+    }
+  }
+}
+
+/**
+ * --------------------------------------------------------------------------
+ * Bootstrap base-component.js
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
+ * --------------------------------------------------------------------------
+ */
+
+
+/**
+ * Constants
+ */
+
+const VERSION = '5.3.1';
+
+/**
+ * Class definition
+ */
+
+class BaseComponent extends Config {
+  constructor(element, config) {
+    super();
+    element = getElement(element);
+    if (!element) {
+      return;
+    }
+    this._element = element;
+    this._config = this._getConfig(config);
+    Data.set(this._element, this.constructor.DATA_KEY, this);
+  }
+
+  // Public
+  dispose() {
+    Data.remove(this._element, this.constructor.DATA_KEY);
+    EventHandler.off(this._element, this.constructor.EVENT_KEY);
+    for (const propertyName of Object.getOwnPropertyNames(this)) {
+      this[propertyName] = null;
+    }
+  }
+  _queueCallback(callback, element, isAnimated = true) {
+    executeAfterTransition(callback, element, isAnimated);
+  }
+  _getConfig(config) {
+    config = this._mergeConfigObj(config, this._element);
+    config = this._configAfterMerge(config);
+    this._typeCheckConfig(config);
+    return config;
+  }
+
+  // Static
+  static getInstance(element) {
+    return Data.get(getElement(element), this.DATA_KEY);
+  }
+  static getOrCreateInstance(element, config = {}) {
+    return this.getInstance(element) || new this(element, typeof config === 'object' ? config : null);
+  }
+  static get VERSION() {
+    return VERSION;
+  }
+  static get DATA_KEY() {
+    return `bs.${this.NAME}`;
+  }
+  static get EVENT_KEY() {
+    return `.${this.DATA_KEY}`;
+  }
+  static eventName(name) {
+    return `${name}${this.EVENT_KEY}`;
+  }
+}
+
+/**
+ * --------------------------------------------------------------------------
+ * Bootstrap dom/selector-engine.js
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
+ * --------------------------------------------------------------------------
+ */
+
+const getSelector = element => {
+  let selector = element.getAttribute('data-bs-target');
+  if (!selector || selector === '#') {
+    let hrefAttribute = element.getAttribute('href');
+
+    // The only valid content that could double as a selector are IDs or classes,
+    // so everything starting with `#` or `.`. If a "real" URL is used as the selector,
+    // `document.querySelector` will rightfully complain it is invalid.
+    // See https://github.com/twbs/bootstrap/issues/32273
+    if (!hrefAttribute || !hrefAttribute.includes('#') && !hrefAttribute.startsWith('.')) {
+      return null;
+    }
+
+    // Just in case some CMS puts out a full URL with the anchor appended
+    if (hrefAttribute.includes('#') && !hrefAttribute.startsWith('#')) {
+      hrefAttribute = `#${hrefAttribute.split('#')[1]}`;
+    }
+    selector = hrefAttribute && hrefAttribute !== '#' ? hrefAttribute.trim() : null;
+  }
+  return parseSelector(selector);
+};
+const SelectorEngine = {
+  find(selector, element = document.documentElement) {
+    return [].concat(...Element.prototype.querySelectorAll.call(element, selector));
+  },
+  findOne(selector, element = document.documentElement) {
+    return Element.prototype.querySelector.call(element, selector);
+  },
+  children(element, selector) {
+    return [].concat(...element.children).filter(child => child.matches(selector));
+  },
+  parents(element, selector) {
+    const parents = [];
+    let ancestor = element.parentNode.closest(selector);
+    while (ancestor) {
+      parents.push(ancestor);
+      ancestor = ancestor.parentNode.closest(selector);
+    }
+    return parents;
+  },
+  prev(element, selector) {
+    let previous = element.previousElementSibling;
+    while (previous) {
+      if (previous.matches(selector)) {
+        return [previous];
+      }
+      previous = previous.previousElementSibling;
+    }
+    return [];
+  },
+  // TODO: this is now unused; remove later along with prev()
+  next(element, selector) {
+    let next = element.nextElementSibling;
+    while (next) {
+      if (next.matches(selector)) {
+        return [next];
+      }
+      next = next.nextElementSibling;
+    }
+    return [];
+  },
+  focusableChildren(element) {
+    const focusables = ['a', 'button', 'input', 'textarea', 'select', 'details', '[tabindex]', '[contenteditable="true"]'].map(selector => `${selector}:not([tabindex^="-"])`).join(',');
+    return this.find(focusables, element).filter(el => !isDisabled(el) && isVisible(el));
+  },
+  getSelectorFromElement(element) {
+    const selector = getSelector(element);
+    if (selector) {
+      return SelectorEngine.findOne(selector) ? selector : null;
+    }
+    return null;
+  },
+  getElementFromSelector(element) {
+    const selector = getSelector(element);
+    return selector ? SelectorEngine.findOne(selector) : null;
+  },
+  getMultipleElementsFromSelector(element) {
+    const selector = getSelector(element);
+    return selector ? SelectorEngine.find(selector) : [];
+  }
+};
+
+/**
+ * --------------------------------------------------------------------------
+ * Bootstrap util/component-functions.js
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
+ * --------------------------------------------------------------------------
+ */
+
+const enableDismissTrigger = (component, method = 'hide') => {
+  const clickEvent = `click.dismiss${component.EVENT_KEY}`;
+  const name = component.NAME;
+  EventHandler.on(document, clickEvent, `[data-bs-dismiss="${name}"]`, function (event) {
+    if (['A', 'AREA'].includes(this.tagName)) {
+      event.preventDefault();
+    }
+    if (isDisabled(this)) {
+      return;
+    }
+    const target = SelectorEngine.getElementFromSelector(this) || this.closest(`.${name}`);
+    const instance = component.getOrCreateInstance(target);
+
+    // Method argument is left, for Alert and only, as it doesn't implement the 'hide' method
+    instance[method]();
+  });
+};
+
+/**
+ * --------------------------------------------------------------------------
+ * Bootstrap alert.js
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
+ * --------------------------------------------------------------------------
+ */
+
+
+/**
+ * Constants
+ */
+
+const NAME$f = 'alert';
+const DATA_KEY$a = 'bs.alert';
+const EVENT_KEY$b = `.${DATA_KEY$a}`;
+const EVENT_CLOSE = `close${EVENT_KEY$b}`;
+const EVENT_CLOSED = `closed${EVENT_KEY$b}`;
+const CLASS_NAME_FADE$5 = 'fade';
+const CLASS_NAME_SHOW$8 = 'show';
+
+/**
+ * Class definition
+ */
+
+class Alert extends BaseComponent {
+  // Getters
+  static get NAME() {
+    return NAME$f;
+  }
+
+  // Public
+  close() {
+    const closeEvent = EventHandler.trigger(this._element, EVENT_CLOSE);
+    if (closeEvent.defaultPrevented) {
+      return;
+    }
+    this._element.classList.remove(CLASS_NAME_SHOW$8);
+    const isAnimated = this._element.classList.contains(CLASS_NAME_FADE$5);
+    this._queueCallback(() => this._destroyElement(), this._element, isAnimated);
+  }
+
+  // Private
+  _destroyElement() {
+    this._element.remove();
+    EventHandler.trigger(this._element, EVENT_CLOSED);
+    this.dispose();
+  }
+
+  // Static
+  static jQueryInterface(config) {
+    return this.each(function () {
+      const data = Alert.getOrCreateInstance(this);
+      if (typeof config !== 'string') {
+        return;
+      }
+      if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {
+        throw new TypeError(`No method named "${config}"`);
+      }
+      data[config](this);
+    });
+  }
+}
+
+/**
+ * Data API implementation
+ */
+
+enableDismissTrigger(Alert, 'close');
+
+/**
+ * jQuery
+ */
+
+defineJQueryPlugin(Alert);
+
+/**
+ * --------------------------------------------------------------------------
+ * Bootstrap button.js
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
+ * --------------------------------------------------------------------------
+ */
+
+
+/**
+ * Constants
+ */
+
+const NAME$e = 'button';
+const DATA_KEY$9 = 'bs.button';
+const EVENT_KEY$a = `.${DATA_KEY$9}`;
+const DATA_API_KEY$6 = '.data-api';
+const CLASS_NAME_ACTIVE$3 = 'active';
+const SELECTOR_DATA_TOGGLE$5 = '[data-bs-toggle="button"]';
+const EVENT_CLICK_DATA_API$6 = `click${EVENT_KEY$a}${DATA_API_KEY$6}`;
+
+/**
+ * Class definition
+ */
+
+class Button extends BaseComponent {
+  // Getters
+  static get NAME() {
+    return NAME$e;
+  }
+
+  // Public
+  toggle() {
+    // Toggle class and sync the `aria-pressed` attribute with the return value of the `.toggle()` method
+    this._element.setAttribute('aria-pressed', this._element.classList.toggle(CLASS_NAME_ACTIVE$3));
+  }
+
+  // Static
+  static jQueryInterface(config) {
+    return this.each(function () {
+      const data = Button.getOrCreateInstance(this);
+      if (config === 'toggle') {
+        data[config]();
+      }
+    });
+  }
+}
+
+/**
+ * Data API implementation
+ */
+
+EventHandler.on(document, EVENT_CLICK_DATA_API$6, SELECTOR_DATA_TOGGLE$5, event => {
+  event.preventDefault();
+  const button = event.target.closest(SELECTOR_DATA_TOGGLE$5);
+  const data = Button.getOrCreateInstance(button);
+  data.toggle();
+});
+
+/**
+ * jQuery
+ */
+
+defineJQueryPlugin(Button);
+
+/**
+ * --------------------------------------------------------------------------
+ * Bootstrap util/swipe.js
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
+ * --------------------------------------------------------------------------
+ */
+
+
+/**
+ * Constants
+ */
+
+const NAME$d = 'swipe';
+const EVENT_KEY$9 = '.bs.swipe';
+const EVENT_TOUCHSTART = `touchstart${EVENT_KEY$9}`;
+const EVENT_TOUCHMOVE = `touchmove${EVENT_KEY$9}`;
+const EVENT_TOUCHEND = `touchend${EVENT_KEY$9}`;
+const EVENT_POINTERDOWN = `pointerdown${EVENT_KEY$9}`;
+const EVENT_POINTERUP = `pointerup${EVENT_KEY$9}`;
+const POINTER_TYPE_TOUCH = 'touch';
+const POINTER_TYPE_PEN = 'pen';
+const CLASS_NAME_POINTER_EVENT = 'pointer-event';
+const SWIPE_THRESHOLD = 40;
+const Default$c = {
+  endCallback: null,
+  leftCallback: null,
+  rightCallback: null
+};
+const DefaultType$c = {
+  endCallback: '(function|null)',
+  leftCallback: '(function|null)',
+  rightCallback: '(function|null)'
+};
+
+/**
+ * Class definition
+ */
+
+class Swipe extends Config {
+  constructor(element, config) {
+    super();
+    this._element = element;
+    if (!element || !Swipe.isSupported()) {
+      return;
+    }
+    this._config = this._getConfig(config);
+    this._deltaX = 0;
+    this._supportPointerEvents = Boolean(window.PointerEvent);
+    this._initEvents();
+  }
+
+  // Getters
+  static get Default() {
+    return Default$c;
+  }
+  static get DefaultType() {
+    return DefaultType$c;
+  }
+  static get NAME() {
+    return NAME$d;
+  }
+
+  // Public
+  dispose() {
+    EventHandler.off(this._element, EVENT_KEY$9);
+  }
+
+  // Private
+  _start(event) {
+    if (!this._supportPointerEvents) {
+      this._deltaX = event.touches[0].clientX;
+      return;
+    }
+    if (this._eventIsPointerPenTouch(event)) {
+      this._deltaX = event.clientX;
+    }
+  }
+  _end(event) {
+    if (this._eventIsPointerPenTouch(event)) {
+      this._deltaX = event.clientX - this._deltaX;
+    }
+    this._handleSwipe();
+    execute(this._config.endCallback);
+  }
+  _move(event) {
+    this._deltaX = event.touches && event.touches.length > 1 ? 0 : event.touches[0].clientX - this._deltaX;
+  }
+  _handleSwipe() {
+    const absDeltaX = Math.abs(this._deltaX);
+    if (absDeltaX <= SWIPE_THRESHOLD) {
+      return;
+    }
+    const direction = absDeltaX / this._deltaX;
+    this._deltaX = 0;
+    if (!direction) {
+      return;
+    }
+    execute(direction > 0 ? this._config.rightCallback : this._config.leftCallback);
+  }
+  _initEvents() {
+    if (this._supportPointerEvents) {
+      EventHandler.on(this._element, EVENT_POINTERDOWN, event => this._start(event));
+      EventHandler.on(this._element, EVENT_POINTERUP, event => this._end(event));
+      this._element.classList.add(CLASS_NAME_POINTER_EVENT);
+    } else {
+      EventHandler.on(this._element, EVENT_TOUCHSTART, event => this._start(event));
+      EventHandler.on(this._element, EVENT_TOUCHMOVE, event => this._move(event));
+      EventHandler.on(this._element, EVENT_TOUCHEND, event => this._end(event));
+    }
+  }
+  _eventIsPointerPenTouch(event) {
+    return this._supportPointerEvents && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH);
+  }
+
+  // Static
+  static isSupported() {
+    return 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0;
+  }
+}
+
+/**
+ * --------------------------------------------------------------------------
+ * Bootstrap carousel.js
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
+ * --------------------------------------------------------------------------
+ */
+
+
+/**
+ * Constants
+ */
+
+const NAME$c = 'carousel';
+const DATA_KEY$8 = 'bs.carousel';
+const EVENT_KEY$8 = `.${DATA_KEY$8}`;
+const DATA_API_KEY$5 = '.data-api';
+const ARROW_LEFT_KEY$1 = 'ArrowLeft';
+const ARROW_RIGHT_KEY$1 = 'ArrowRight';
+const TOUCHEVENT_COMPAT_WAIT = 500; // Time for mouse compat events to fire after touch
+
+const ORDER_NEXT = 'next';
+const ORDER_PREV = 'prev';
+const DIRECTION_LEFT = 'left';
+const DIRECTION_RIGHT = 'right';
+const EVENT_SLIDE = `slide${EVENT_KEY$8}`;
+const EVENT_SLID = `slid${EVENT_KEY$8}`;
+const EVENT_KEYDOWN$1 = `keydown${EVENT_KEY$8}`;
+const EVENT_MOUSEENTER$1 = `mouseenter${EVENT_KEY$8}`;
+const EVENT_MOUSELEAVE$1 = `mouseleave${EVENT_KEY$8}`;
+const EVENT_DRAG_START = `dragstart${EVENT_KEY$8}`;
+const EVENT_LOAD_DATA_API$3 = `load${EVENT_KEY$8}${DATA_API_KEY$5}`;
+const EVENT_CLICK_DATA_API$5 = `click${EVENT_KEY$8}${DATA_API_KEY$5}`;
+const CLASS_NAME_CAROUSEL = 'carousel';
+const CLASS_NAME_ACTIVE$2 = 'active';
+const CLASS_NAME_SLIDE = 'slide';
+const CLASS_NAME_END = 'carousel-item-end';
+const CLASS_NAME_START = 'carousel-item-start';
+const CLASS_NAME_NEXT = 'carousel-item-next';
+const CLASS_NAME_PREV = 'carousel-item-prev';
+const SELECTOR_ACTIVE = '.active';
+const SELECTOR_ITEM = '.carousel-item';
+const SELECTOR_ACTIVE_ITEM = SELECTOR_ACTIVE + SELECTOR_ITEM;
+const SELECTOR_ITEM_IMG = '.carousel-item img';
+const SELECTOR_INDICATORS = '.carousel-indicators';
+const SELECTOR_DATA_SLIDE = '[data-bs-slide], [data-bs-slide-to]';
+const SELECTOR_DATA_RIDE = '[data-bs-ride="carousel"]';
+const KEY_TO_DIRECTION = {
+  [ARROW_LEFT_KEY$1]: DIRECTION_RIGHT,
+  [ARROW_RIGHT_KEY$1]: DIRECTION_LEFT
+};
+const Default$b = {
+  interval: 5000,
+  keyboard: true,
+  pause: 'hover',
+  ride: false,
+  touch: true,
+  wrap: true
+};
+const DefaultType$b = {
+  interval: '(number|boolean)',
+  // TODO:v6 remove boolean support
+  keyboard: 'boolean',
+  pause: '(string|boolean)',
+  ride: '(boolean|string)',
+  touch: 'boolean',
+  wrap: 'boolean'
+};
+
+/**
+ * Class definition
+ */
+
+class Carousel extends BaseComponent {
+  constructor(element, config) {
+    super(element, config);
+    this._interval = null;
+    this._activeElement = null;
+    this._isSliding = false;
+    this.touchTimeout = null;
+    this._swipeHelper = null;
+    this._indicatorsElement = SelectorEngine.findOne(SELECTOR_INDICATORS, this._element);
+    this._addEventListeners();
+    if (this._config.ride === CLASS_NAME_CAROUSEL) {
+      this.cycle();
+    }
+  }
+
+  // Getters
+  static get Default() {
+    return Default$b;
+  }
+  static get DefaultType() {
+    return DefaultType$b;
+  }
+  static get NAME() {
+    return NAME$c;
+  }
+
+  // Public
+  next() {
+    this._slide(ORDER_NEXT);
+  }
+  nextWhenVisible() {
+    // FIXME TODO use `document.visibilityState`
+    // Don't call next when the page isn't visible
+    // or the carousel or its parent isn't visible
+    if (!document.hidden && isVisible(this._element)) {
+      this.next();
+    }
+  }
+  prev() {
+    this._slide(ORDER_PREV);
+  }
+  pause() {
+    if (this._isSliding) {
+      triggerTransitionEnd(this._element);
+    }
+    this._clearInterval();
+  }
+  cycle() {
+    this._clearInterval();
+    this._updateInterval();
+    this._interval = setInterval(() => this.nextWhenVisible(), this._config.interval);
+  }
+  _maybeEnableCycle() {
+    if (!this._config.ride) {
+      return;
+    }
+    if (this._isSliding) {
+      EventHandler.one(this._element, EVENT_SLID, () => this.cycle());
+      return;
+    }
+    this.cycle();
+  }
+  to(index) {
+    const items = this._getItems();
+    if (index > items.length - 1 || index < 0) {
+      return;
+    }
+    if (this._isSliding) {
+      EventHandler.one(this._element, EVENT_SLID, () => this.to(index));
+      return;
+    }
+    const activeIndex = this._getItemIndex(this._getActive());
+    if (activeIndex === index) {
+      return;
+    }
+    const order = index > activeIndex ? ORDER_NEXT : ORDER_PREV;
+    this._slide(order, items[index]);
+  }
+  dispose() {
+    if (this._swipeHelper) {
+      this._swipeHelper.dispose();
+    }
+    super.dispose();
+  }
+
+  // Private
+  _configAfterMerge(config) {
+    config.defaultInterval = config.interval;
+    return config;
+  }
+  _addEventListeners() {
+    if (this._config.keyboard) {
+      EventHandler.on(this._element, EVENT_KEYDOWN$1, event => this._keydown(event));
+    }
+    if (this._config.pause === 'hover') {
+      EventHandler.on(this._element, EVENT_MOUSEENTER$1, () => this.pause());
+      EventHandler.on(this._element, EVENT_MOUSELEAVE$1, () => this._maybeEnableCycle());
+    }
+    if (this._config.touch && Swipe.isSupported()) {
+      this._addTouchEventListeners();
+    }
+  }
+  _addTouchEventListeners() {
+    for (const img of SelectorEngine.find(SELECTOR_ITEM_IMG, this._element)) {
+      EventHandler.on(img, EVENT_DRAG_START, event => event.preventDefault());
+    }
+    const endCallBack = () => {
+      if (this._config.pause !== 'hover') {
+        return;
+      }
+
+      // If it's a touch-enabled device, mouseenter/leave are fired as
+      // part of the mouse compatibility events on first tap - the carousel
+      // would stop cycling until user tapped out of it;
+      // here, we listen for touchend, explicitly pause the carousel
+      // (as if it's the second time we tap on it, mouseenter compat event
+      // is NOT fired) and after a timeout (to allow for mouse compatibility
+      // events to fire) we explicitly restart cycling
+
+      this.pause();
+      if (this.touchTimeout) {
+        clearTimeout(this.touchTimeout);
+      }
+      this.touchTimeout = setTimeout(() => this._maybeEnableCycle(), TOUCHEVENT_COMPAT_WAIT + this._config.interval);
+    };
+    const swipeConfig = {
+      leftCallback: () => this._slide(this._directionToOrder(DIRECTION_LEFT)),
+      rightCallback: () => this._slide(this._directionToOrder(DIRECTION_RIGHT)),
+      endCallback: endCallBack
+    };
+    this._swipeHelper = new Swipe(this._element, swipeConfig);
+  }
+  _keydown(event) {
+    if (/input|textarea/i.test(event.target.tagName)) {
+      return;
+    }
+    const direction = KEY_TO_DIRECTION[event.key];
+    if (direction) {
+      event.preventDefault();
+      this._slide(this._directionToOrder(direction));
+    }
+  }
+  _getItemIndex(element) {
+    return this._getItems().indexOf(element);
+  }
+  _setActiveIndicatorElement(index) {
+    if (!this._indicatorsElement) {
+      return;
+    }
+    const activeIndicator = SelectorEngine.findOne(SELECTOR_ACTIVE, this._indicatorsElement);
+    activeIndicator.classList.remove(CLASS_NAME_ACTIVE$2);
+    activeIndicator.removeAttribute('aria-current');
+    const newActiveIndicator = SelectorEngine.findOne(`[data-bs-slide-to="${index}"]`, this._indicatorsElement);
+    if (newActiveIndicator) {
+      newActiveIndicator.classList.add(CLASS_NAME_ACTIVE$2);
+      newActiveIndicator.setAttribute('aria-current', 'true');
+    }
+  }
+  _updateInterval() {
+    const element = this._activeElement || this._getActive();
+    if (!element) {
+      return;
+    }
+    const elementInterval = Number.parseInt(element.getAttribute('data-bs-interval'), 10);
+    this._config.interval = elementInterval || this._config.defaultInterval;
+  }
+  _slide(order, element = null) {
+    if (this._isSliding) {
+      return;
+    }
+    const activeElement = this._getActive();
+    const isNext = order === ORDER_NEXT;
+    const nextElement = element || getNextActiveElement(this._getItems(), activeElement, isNext, this._config.wrap);
+    if (nextElement === activeElement) {
+      return;
+    }
+    const nextElementIndex = this._getItemIndex(nextElement);
+    const triggerEvent = eventName => {
+      return EventHandler.trigger(this._element, eventName, {
+        relatedTarget: nextElement,
+        direction: this._orderToDirection(order),
+        from: this._getItemIndex(activeElement),
+        to: nextElementIndex
+      });
+    };
+    const slideEvent = triggerEvent(EVENT_SLIDE);
+    if (slideEvent.defaultPrevented) {
+      return;
+    }
+    if (!activeElement || !nextElement) {
+      // Some weirdness is happening, so we bail
+      // TODO: change tests that use empty divs to avoid this check
+      return;
+    }
+    const isCycling = Boolean(this._interval);
+    this.pause();
+    this._isSliding = true;
+    this._setActiveIndicatorElement(nextElementIndex);
+    this._activeElement = nextElement;
+    const directionalClassName = isNext ? CLASS_NAME_START : CLASS_NAME_END;
+    const orderClassName = isNext ? CLASS_NAME_NEXT : CLASS_NAME_PREV;
+    nextElement.classList.add(orderClassName);
+    reflow(nextElement);
+    activeElement.classList.add(directionalClassName);
+    nextElement.classList.add(directionalClassName);
+    const completeCallBack = () => {
+      nextElement.classList.remove(directionalClassName, orderClassName);
+      nextElement.classList.add(CLASS_NAME_ACTIVE$2);
+      activeElement.classList.remove(CLASS_NAME_ACTIVE$2, orderClassName, directionalClassName);
+      this._isSliding = false;
+      triggerEvent(EVENT_SLID);
+    };
+    this._queueCallback(completeCallBack, activeElement, this._isAnimated());
+    if (isCycling) {
+      this.cycle();
+    }
+  }
+  _isAnimated() {
+    return this._element.classList.contains(CLASS_NAME_SLIDE);
+  }
+  _getActive() {
+    return SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);
+  }
+  _getItems() {
+    return SelectorEngine.find(SELECTOR_ITEM, this._element);
+  }
+  _clearInterval() {
+    if (this._interval) {
+      clearInterval(this._interval);
+      this._interval = null;
+    }
+  }
+  _directionToOrder(direction) {
+    if (isRTL()) {
+      return direction === DIRECTION_LEFT ? ORDER_PREV : ORDER_NEXT;
+    }
+    return direction === DIRECTION_LEFT ? ORDER_NEXT : ORDER_PREV;
+  }
+  _orderToDirection(order) {
+    if (isRTL()) {
+      return order === ORDER_PREV ? DIRECTION_LEFT : DIRECTION_RIGHT;
+    }
+    return order === ORDER_PREV ? DIRECTION_RIGHT : DIRECTION_LEFT;
+  }
+
+  // Static
+  static jQueryInterface(config) {
+    return this.each(function () {
+      const data = Carousel.getOrCreateInstance(this, config);
+      if (typeof config === 'number') {
+        data.to(config);
+        return;
+      }
+      if (typeof config === 'string') {
+        if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {
+          throw new TypeError(`No method named "${config}"`);
+        }
+        data[config]();
+      }
+    });
+  }
+}
+
+/**
+ * Data API implementation
+ */
+
+EventHandler.on(document, EVENT_CLICK_DATA_API$5, SELECTOR_DATA_SLIDE, function (event) {
+  const target = SelectorEngine.getElementFromSelector(this);
+  if (!target || !target.classList.contains(CLASS_NAME_CAROUSEL)) {
+    return;
+  }
+  event.preventDefault();
+  const carousel = Carousel.getOrCreateInstance(target);
+  const slideIndex = this.getAttribute('data-bs-slide-to');
+  if (slideIndex) {
+    carousel.to(slideIndex);
+    carousel._maybeEnableCycle();
+    return;
+  }
+  if (Manipulator.getDataAttribute(this, 'slide') === 'next') {
+    carousel.next();
+    carousel._maybeEnableCycle();
+    return;
+  }
+  carousel.prev();
+  carousel._maybeEnableCycle();
+});
+EventHandler.on(window, EVENT_LOAD_DATA_API$3, () => {
+  const carousels = SelectorEngine.find(SELECTOR_DATA_RIDE);
+  for (const carousel of carousels) {
+    Carousel.getOrCreateInstance(carousel);
+  }
+});
+
+/**
+ * jQuery
+ */
+
+defineJQueryPlugin(Carousel);
+
+/**
+ * --------------------------------------------------------------------------
+ * Bootstrap collapse.js
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
+ * --------------------------------------------------------------------------
+ */
+
+
+/**
+ * Constants
+ */
+
+const NAME$b = 'collapse';
+const DATA_KEY$7 = 'bs.collapse';
+const EVENT_KEY$7 = `.${DATA_KEY$7}`;
+const DATA_API_KEY$4 = '.data-api';
+const EVENT_SHOW$6 = `show${EVENT_KEY$7}`;
+const EVENT_SHOWN$6 = `shown${EVENT_KEY$7}`;
+const EVENT_HIDE$6 = `hide${EVENT_KEY$7}`;
+const EVENT_HIDDEN$6 = `hidden${EVENT_KEY$7}`;
+const EVENT_CLICK_DATA_API$4 = `click${EVENT_KEY$7}${DATA_API_KEY$4}`;
+const CLASS_NAME_SHOW$7 = 'show';
+const CLASS_NAME_COLLAPSE = 'collapse';
+const CLASS_NAME_COLLAPSING = 'collapsing';
+const CLASS_NAME_COLLAPSED = 'collapsed';
+const CLASS_NAME_DEEPER_CHILDREN = `:scope .${CLASS_NAME_COLLAPSE} .${CLASS_NAME_COLLAPSE}`;
+const CLASS_NAME_HORIZONTAL = 'collapse-horizontal';
+const WIDTH = 'width';
+const HEIGHT = 'height';
+const SELECTOR_ACTIVES = '.collapse.show, .collapse.collapsing';
+const SELECTOR_DATA_TOGGLE$4 = '[data-bs-toggle="collapse"]';
+const Default$a = {
+  parent: null,
+  toggle: true
+};
+const DefaultType$a = {
+  parent: '(null|element)',
+  toggle: 'boolean'
+};
+
+/**
+ * Class definition
+ */
+
+class Collapse extends BaseComponent {
+  constructor(element, config) {
+    super(element, config);
+    this._isTransitioning = false;
+    this._triggerArray = [];
+    const toggleList = SelectorEngine.find(SELECTOR_DATA_TOGGLE$4);
+    for (const elem of toggleList) {
+      const selector = SelectorEngine.getSelectorFromElement(elem);
+      const filterElement = SelectorEngine.find(selector).filter(foundElement => foundElement === this._element);
+      if (selector !== null && filterElement.length) {
+        this._triggerArray.push(elem);
+      }
+    }
+    this._initializeChildren();
+    if (!this._config.parent) {
+      this._addAriaAndCollapsedClass(this._triggerArray, this._isShown());
+    }
+    if (this._config.toggle) {
+      this.toggle();
+    }
+  }
+
+  // Getters
+  static get Default() {
+    return Default$a;
+  }
+  static get DefaultType() {
+    return DefaultType$a;
+  }
+  static get NAME() {
+    return NAME$b;
+  }
+
+  // Public
+  toggle() {
+    if (this._isShown()) {
+      this.hide();
+    } else {
+      this.show();
+    }
+  }
+  show() {
+    if (this._isTransitioning || this._isShown()) {
+      return;
+    }
+    let activeChildren = [];
+
+    // find active children
+    if (this._config.parent) {
+      activeChildren = this._getFirstLevelChildren(SELECTOR_ACTIVES).filter(element => element !== this._element).map(element => Collapse.getOrCreateInstance(element, {
+        toggle: false
+      }));
+    }
+    if (activeChildren.length && activeChildren[0]._isTransitioning) {
+      return;
+    }
+    const startEvent = EventHandler.trigger(this._element, EVENT_SHOW$6);
+    if (startEvent.defaultPrevented) {
+      return;
+    }
+    for (const activeInstance of activeChildren) {
+      activeInstance.hide();
+    }
+    const dimension = this._getDimension();
+    this._element.classList.remove(CLASS_NAME_COLLAPSE);
+    this._element.classList.add(CLASS_NAME_COLLAPSING);
+    this._element.style[dimension] = 0;
+    this._addAriaAndCollapsedClass(this._triggerArray, true);
+    this._isTransitioning = true;
+    const complete = () => {
+      this._isTransitioning = false;
+      this._element.classList.remove(CLASS_NAME_COLLAPSING);
+      this._element.classList.add(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$7);
+      this._element.style[dimension] = '';
+      EventHandler.trigger(this._element, EVENT_SHOWN$6);
+    };
+    const capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1);
+    const scrollSize = `scroll${capitalizedDimension}`;
+    this._queueCallback(complete, this._element, true);
+    this._element.style[dimension] = `${this._element[scrollSize]}px`;
+  }
+  hide() {
+    if (this._isTransitioning || !this._isShown()) {
+      return;
+    }
+    const startEvent = EventHandler.trigger(this._element, EVENT_HIDE$6);
+    if (startEvent.defaultPrevented) {
+      return;
+    }
+    const dimension = this._getDimension();
+    this._element.style[dimension] = `${this._element.getBoundingClientRect()[dimension]}px`;
+    reflow(this._element);
+    this._element.classList.add(CLASS_NAME_COLLAPSING);
+    this._element.classList.remove(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$7);
+    for (const trigger of this._triggerArray) {
+      const element = SelectorEngine.getElementFromSelector(trigger);
+      if (element && !this._isShown(element)) {
+        this._addAriaAndCollapsedClass([trigger], false);
+      }
+    }
+    this._isTransitioning = true;
+    const complete = () => {
+      this._isTransitioning = false;
+      this._element.classList.remove(CLASS_NAME_COLLAPSING);
+      this._element.classList.add(CLASS_NAME_COLLAPSE);
+      EventHandler.trigger(this._element, EVENT_HIDDEN$6);
+    };
+    this._element.style[dimension] = '';
+    this._queueCallback(complete, this._element, true);
+  }
+  _isShown(element = this._element) {
+    return element.classList.contains(CLASS_NAME_SHOW$7);
+  }
+
+  // Private
+  _configAfterMerge(config) {
+    config.toggle = Boolean(config.toggle); // Coerce string values
+    config.parent = getElement(config.parent);
+    return config;
+  }
+  _getDimension() {
+    return this._element.classList.contains(CLASS_NAME_HORIZONTAL) ? WIDTH : HEIGHT;
+  }
+  _initializeChildren() {
+    if (!this._config.parent) {
+      return;
+    }
+    const children = this._getFirstLevelChildren(SELECTOR_DATA_TOGGLE$4);
+    for (const element of children) {
+      const selected = SelectorEngine.getElementFromSelector(element);
+      if (selected) {
+        this._addAriaAndCollapsedClass([element], this._isShown(selected));
+      }
+    }
+  }
+  _getFirstLevelChildren(selector) {
+    const children = SelectorEngine.find(CLASS_NAME_DEEPER_CHILDREN, this._config.parent);
+    // remove children if greater depth
+    return SelectorEngine.find(selector, this._config.parent).filter(element => !children.includes(element));
+  }
+  _addAriaAndCollapsedClass(triggerArray, isOpen) {
+    if (!triggerArray.length) {
+      return;
+    }
+    for (const element of triggerArray) {
+      element.classList.toggle(CLASS_NAME_COLLAPSED, !isOpen);
+      element.setAttribute('aria-expanded', isOpen);
+    }
+  }
+
+  // Static
+  static jQueryInterface(config) {
+    const _config = {};
+    if (typeof config === 'string' && /show|hide/.test(config)) {
+      _config.toggle = false;
+    }
+    return this.each(function () {
+      const data = Collapse.getOrCreateInstance(this, _config);
+      if (typeof config === 'string') {
+        if (typeof data[config] === 'undefined') {
+          throw new TypeError(`No method named "${config}"`);
+        }
+        data[config]();
+      }
+    });
+  }
+}
+
+/**
+ * Data API implementation
+ */
+
+EventHandler.on(document, EVENT_CLICK_DATA_API$4, SELECTOR_DATA_TOGGLE$4, function (event) {
+  // preventDefault only for <a> elements (which change the URL) not inside the collapsible element
+  if (event.target.tagName === 'A' || event.delegateTarget && event.delegateTarget.tagName === 'A') {
+    event.preventDefault();
+  }
+  for (const element of SelectorEngine.getMultipleElementsFromSelector(this)) {
+    Collapse.getOrCreateInstance(element, {
+      toggle: false
+    }).toggle();
+  }
+});
+
+/**
+ * jQuery
+ */
+
+defineJQueryPlugin(Collapse);
+
+/**
+ * --------------------------------------------------------------------------
+ * Bootstrap dropdown.js
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
+ * --------------------------------------------------------------------------
+ */
+
+
+/**
+ * Constants
+ */
+
+const NAME$a = 'dropdown';
+const DATA_KEY$6 = 'bs.dropdown';
+const EVENT_KEY$6 = `.${DATA_KEY$6}`;
+const DATA_API_KEY$3 = '.data-api';
+const ESCAPE_KEY$2 = 'Escape';
+const TAB_KEY$1 = 'Tab';
+const ARROW_UP_KEY$1 = 'ArrowUp';
+const ARROW_DOWN_KEY$1 = 'ArrowDown';
+const RIGHT_MOUSE_BUTTON = 2; // MouseEvent.button value for the secondary button, usually the right button
+
+const EVENT_HIDE$5 = `hide${EVENT_KEY$6}`;
+const EVENT_HIDDEN$5 = `hidden${EVENT_KEY$6}`;
+const EVENT_SHOW$5 = `show${EVENT_KEY$6}`;
+const EVENT_SHOWN$5 = `shown${EVENT_KEY$6}`;
+const EVENT_CLICK_DATA_API$3 = `click${EVENT_KEY$6}${DATA_API_KEY$3}`;
+const EVENT_KEYDOWN_DATA_API = `keydown${EVENT_KEY$6}${DATA_API_KEY$3}`;
+const EVENT_KEYUP_DATA_API = `keyup${EVENT_KEY$6}${DATA_API_KEY$3}`;
+const CLASS_NAME_SHOW$6 = 'show';
+const CLASS_NAME_DROPUP = 'dropup';
+const CLASS_NAME_DROPEND = 'dropend';
+const CLASS_NAME_DROPSTART = 'dropstart';
+const CLASS_NAME_DROPUP_CENTER = 'dropup-center';
+const CLASS_NAME_DROPDOWN_CENTER = 'dropdown-center';
+const SELECTOR_DATA_TOGGLE$3 = '[data-bs-toggle="dropdown"]:not(.disabled):not(:disabled)';
+const SELECTOR_DATA_TOGGLE_SHOWN = `${SELECTOR_DATA_TOGGLE$3}.${CLASS_NAME_SHOW$6}`;
+const SELECTOR_MENU = '.dropdown-menu';
+const SELECTOR_NAVBAR = '.navbar';
+const SELECTOR_NAVBAR_NAV = '.navbar-nav';
+const SELECTOR_VISIBLE_ITEMS = '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)';
+const PLACEMENT_TOP = isRTL() ? 'top-end' : 'top-start';
+const PLACEMENT_TOPEND = isRTL() ? 'top-start' : 'top-end';
+const PLACEMENT_BOTTOM = isRTL() ? 'bottom-end' : 'bottom-start';
+const PLACEMENT_BOTTOMEND = isRTL() ? 'bottom-start' : 'bottom-end';
+const PLACEMENT_RIGHT = isRTL() ? 'left-start' : 'right-start';
+const PLACEMENT_LEFT = isRTL() ? 'right-start' : 'left-start';
+const PLACEMENT_TOPCENTER = 'top';
+const PLACEMENT_BOTTOMCENTER = 'bottom';
+const Default$9 = {
+  autoClose: true,
+  boundary: 'clippingParents',
+  display: 'dynamic',
+  offset: [0, 2],
+  popperConfig: null,
+  reference: 'toggle'
+};
+const DefaultType$9 = {
+  autoClose: '(boolean|string)',
+  boundary: '(string|element)',
+  display: 'string',
+  offset: '(array|string|function)',
+  popperConfig: '(null|object|function)',
+  reference: '(string|element|object)'
+};
+
+/**
+ * Class definition
+ */
+
+class Dropdown extends BaseComponent {
+  constructor(element, config) {
+    super(element, config);
+    this._popper = null;
+    this._parent = this._element.parentNode; // dropdown wrapper
+    // TODO: v6 revert #37011 & change markup https://getbootstrap.com/docs/5.3/forms/input-group/
+    this._menu = SelectorEngine.next(this._element, SELECTOR_MENU)[0] || SelectorEngine.prev(this._element, SELECTOR_MENU)[0] || SelectorEngine.findOne(SELECTOR_MENU, this._parent);
+    this._inNavbar = this._detectNavbar();
+  }
+
+  // Getters
+  static get Default() {
+    return Default$9;
+  }
+  static get DefaultType() {
+    return DefaultType$9;
+  }
+  static get NAME() {
+    return NAME$a;
+  }
+
+  // Public
+  toggle() {
+    return this._isShown() ? this.hide() : this.show();
+  }
+  show() {
+    if (isDisabled(this._element) || this._isShown()) {
+      return;
+    }
+    const relatedTarget = {
+      relatedTarget: this._element
+    };
+    const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$5, relatedTarget);
+    if (showEvent.defaultPrevented) {
+      return;
+    }
+    this._createPopper();
+
+    // If this is a touch-enabled device we add extra
+    // empty mouseover listeners to the body's immediate children;
+    // only needed because of broken event delegation on iOS
+    // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html
+    if ('ontouchstart' in document.documentElement && !this._parent.closest(SELECTOR_NAVBAR_NAV)) {
+      for (const element of [].concat(...document.body.children)) {
+        EventHandler.on(element, 'mouseover', noop);
+      }
+    }
+    this._element.focus();
+    this._element.setAttribute('aria-expanded', true);
+    this._menu.classList.add(CLASS_NAME_SHOW$6);
+    this._element.classList.add(CLASS_NAME_SHOW$6);
+    EventHandler.trigger(this._element, EVENT_SHOWN$5, relatedTarget);
+  }
+  hide() {
+    if (isDisabled(this._element) || !this._isShown()) {
+      return;
+    }
+    const relatedTarget = {
+      relatedTarget: this._element
+    };
+    this._completeHide(relatedTarget);
+  }
+  dispose() {
+    if (this._popper) {
+      this._popper.destroy();
+    }
+    super.dispose();
+  }
+  update() {
+    this._inNavbar = this._detectNavbar();
+    if (this._popper) {
+      this._popper.update();
+    }
+  }
+
+  // Private
+  _completeHide(relatedTarget) {
+    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$5, relatedTarget);
+    if (hideEvent.defaultPrevented) {
+      return;
+    }
+
+    // If this is a touch-enabled device we remove the extra
+    // empty mouseover listeners we added for iOS support
+    if ('ontouchstart' in document.documentElement) {
+      for (const element of [].concat(...document.body.children)) {
+        EventHandler.off(element, 'mouseover', noop);
+      }
+    }
+    if (this._popper) {
+      this._popper.destroy();
+    }
+    this._menu.classList.remove(CLASS_NAME_SHOW$6);
+    this._element.classList.remove(CLASS_NAME_SHOW$6);
+    this._element.setAttribute('aria-expanded', 'false');
+    Manipulator.removeDataAttribute(this._menu, 'popper');
+    EventHandler.trigger(this._element, EVENT_HIDDEN$5, relatedTarget);
+  }
+  _getConfig(config) {
+    config = super._getConfig(config);
+    if (typeof config.reference === 'object' && !isElement(config.reference) && typeof config.reference.getBoundingClientRect !== 'function') {
+      // Popper virtual elements require a getBoundingClientRect method
+      throw new TypeError(`${NAME$a.toUpperCase()}: Option "reference" provided type "object" without a required "getBoundingClientRect" method.`);
+    }
+    return config;
+  }
+  _createPopper() {
+    if (typeof Popper === 'undefined') {
+      throw new TypeError('Bootstrap\'s dropdowns require Popper (https://popper.js.org)');
+    }
+    let referenceElement = this._element;
+    if (this._config.reference === 'parent') {
+      referenceElement = this._parent;
+    } else if (isElement(this._config.reference)) {
+      referenceElement = getElement(this._config.reference);
+    } else if (typeof this._config.reference === 'object') {
+      referenceElement = this._config.reference;
+    }
+    const popperConfig = this._getPopperConfig();
+    this._popper = Popper.createPopper(referenceElement, this._menu, popperConfig);
+  }
+  _isShown() {
+    return this._menu.classList.contains(CLASS_NAME_SHOW$6);
+  }
+  _getPlacement() {
+    const parentDropdown = this._parent;
+    if (parentDropdown.classList.contains(CLASS_NAME_DROPEND)) {
+      return PLACEMENT_RIGHT;
+    }
+    if (parentDropdown.classList.contains(CLASS_NAME_DROPSTART)) {
+      return PLACEMENT_LEFT;
+    }
+    if (parentDropdown.classList.contains(CLASS_NAME_DROPUP_CENTER)) {
+      return PLACEMENT_TOPCENTER;
+    }
+    if (parentDropdown.classList.contains(CLASS_NAME_DROPDOWN_CENTER)) {
+      return PLACEMENT_BOTTOMCENTER;
+    }
+
+    // We need to trim the value because custom properties can also include spaces
+    const isEnd = getComputedStyle(this._menu).getPropertyValue('--bs-position').trim() === 'end';
+    if (parentDropdown.classList.contains(CLASS_NAME_DROPUP)) {
+      return isEnd ? PLACEMENT_TOPEND : PLACEMENT_TOP;
+    }
+    return isEnd ? PLACEMENT_BOTTOMEND : PLACEMENT_BOTTOM;
+  }
+  _detectNavbar() {
+    return this._element.closest(SELECTOR_NAVBAR) !== null;
+  }
+  _getOffset() {
+    const {
+      offset
+    } = this._config;
+    if (typeof offset === 'string') {
+      return offset.split(',').map(value => Number.parseInt(value, 10));
+    }
+    if (typeof offset === 'function') {
+      return popperData => offset(popperData, this._element);
+    }
+    return offset;
+  }
+  _getPopperConfig() {
+    const defaultBsPopperConfig = {
+      placement: this._getPlacement(),
+      modifiers: [{
+        name: 'preventOverflow',
+        options: {
+          boundary: this._config.boundary
+        }
+      }, {
+        name: 'offset',
+        options: {
+          offset: this._getOffset()
+        }
+      }]
+    };
+
+    // Disable Popper if we have a static display or Dropdown is in Navbar
+    if (this._inNavbar || this._config.display === 'static') {
+      Manipulator.setDataAttribute(this._menu, 'popper', 'static'); // TODO: v6 remove
+      defaultBsPopperConfig.modifiers = [{
+        name: 'applyStyles',
+        enabled: false
+      }];
+    }
+    return {
+      ...defaultBsPopperConfig,
+      ...execute(this._config.popperConfig, [defaultBsPopperConfig])
+    };
+  }
+  _selectMenuItem({
+    key,
+    target
+  }) {
+    const items = SelectorEngine.find(SELECTOR_VISIBLE_ITEMS, this._menu).filter(element => isVisible(element));
+    if (!items.length) {
+      return;
+    }
+
+    // if target isn't included in items (e.g. when expanding the dropdown)
+    // allow cycling to get the last item in case key equals ARROW_UP_KEY
+    getNextActiveElement(items, target, key === ARROW_DOWN_KEY$1, !items.includes(target)).focus();
+  }
+
+  // Static
+  static jQueryInterface(config) {
+    return this.each(function () {
+      const data = Dropdown.getOrCreateInstance(this, config);
+      if (typeof config !== 'string') {
+        return;
+      }
+      if (typeof data[config] === 'undefined') {
+        throw new TypeError(`No method named "${config}"`);
+      }
+      data[config]();
+    });
+  }
+  static clearMenus(event) {
+    if (event.button === RIGHT_MOUSE_BUTTON || event.type === 'keyup' && event.key !== TAB_KEY$1) {
+      return;
+    }
+    const openToggles = SelectorEngine.find(SELECTOR_DATA_TOGGLE_SHOWN);
+    for (const toggle of openToggles) {
+      const context = Dropdown.getInstance(toggle);
+      if (!context || context._config.autoClose === false) {
+        continue;
+      }
+      const composedPath = event.composedPath();
+      const isMenuTarget = composedPath.includes(context._menu);
+      if (composedPath.includes(context._element) || context._config.autoClose === 'inside' && !isMenuTarget || context._config.autoClose === 'outside' && isMenuTarget) {
+        continue;
+      }
+
+      // Tab navigation through the dropdown menu or events from contained inputs shouldn't close the menu
+      if (context._menu.contains(event.target) && (event.type === 'keyup' && event.key === TAB_KEY$1 || /input|select|option|textarea|form/i.test(event.target.tagName))) {
+        continue;
+      }
+      const relatedTarget = {
+        relatedTarget: context._element
+      };
+      if (event.type === 'click') {
+        relatedTarget.clickEvent = event;
+      }
+      context._completeHide(relatedTarget);
+    }
+  }
+  static dataApiKeydownHandler(event) {
+    // If not an UP | DOWN | ESCAPE key => not a dropdown command
+    // If input/textarea && if key is other than ESCAPE => not a dropdown command
+
+    const isInput = /input|textarea/i.test(event.target.tagName);
+    const isEscapeEvent = event.key === ESCAPE_KEY$2;
+    const isUpOrDownEvent = [ARROW_UP_KEY$1, ARROW_DOWN_KEY$1].includes(event.key);
+    if (!isUpOrDownEvent && !isEscapeEvent) {
+      return;
+    }
+    if (isInput && !isEscapeEvent) {
+      return;
+    }
+    event.preventDefault();
+
+    // TODO: v6 revert #37011 & change markup https://getbootstrap.com/docs/5.3/forms/input-group/
+    const getToggleButton = this.matches(SELECTOR_DATA_TOGGLE$3) ? this : SelectorEngine.prev(this, SELECTOR_DATA_TOGGLE$3)[0] || SelectorEngine.next(this, SELECTOR_DATA_TOGGLE$3)[0] || SelectorEngine.findOne(SELECTOR_DATA_TOGGLE$3, event.delegateTarget.parentNode);
+    const instance = Dropdown.getOrCreateInstance(getToggleButton);
+    if (isUpOrDownEvent) {
+      event.stopPropagation();
+      instance.show();
+      instance._selectMenuItem(event);
+      return;
+    }
+    if (instance._isShown()) {
+      // else is escape and we check if it is shown
+      event.stopPropagation();
+      instance.hide();
+      getToggleButton.focus();
+    }
+  }
+}
+
+/**
+ * Data API implementation
+ */
+
+EventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE$3, Dropdown.dataApiKeydownHandler);
+EventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown.dataApiKeydownHandler);
+EventHandler.on(document, EVENT_CLICK_DATA_API$3, Dropdown.clearMenus);
+EventHandler.on(document, EVENT_KEYUP_DATA_API, Dropdown.clearMenus);
+EventHandler.on(document, EVENT_CLICK_DATA_API$3, SELECTOR_DATA_TOGGLE$3, function (event) {
+  event.preventDefault();
+  Dropdown.getOrCreateInstance(this).toggle();
+});
+
+/**
+ * jQuery
+ */
+
+defineJQueryPlugin(Dropdown);
+
+/**
+ * --------------------------------------------------------------------------
+ * Bootstrap util/backdrop.js
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
+ * --------------------------------------------------------------------------
+ */
+
+
+/**
+ * Constants
+ */
+
+const NAME$9 = 'backdrop';
+const CLASS_NAME_FADE$4 = 'fade';
+const CLASS_NAME_SHOW$5 = 'show';
+const EVENT_MOUSEDOWN = `mousedown.bs.${NAME$9}`;
+const Default$8 = {
+  className: 'modal-backdrop',
+  clickCallback: null,
+  isAnimated: false,
+  isVisible: true,
+  // if false, we use the backdrop helper without adding any element to the dom
+  rootElement: 'body' // give the choice to place backdrop under different elements
+};
+
+const DefaultType$8 = {
+  className: 'string',
+  clickCallback: '(function|null)',
+  isAnimated: 'boolean',
+  isVisible: 'boolean',
+  rootElement: '(element|string)'
+};
+
+/**
+ * Class definition
+ */
+
+class Backdrop extends Config {
+  constructor(config) {
+    super();
+    this._config = this._getConfig(config);
+    this._isAppended = false;
+    this._element = null;
+  }
+
+  // Getters
+  static get Default() {
+    return Default$8;
+  }
+  static get DefaultType() {
+    return DefaultType$8;
+  }
+  static get NAME() {
+    return NAME$9;
+  }
+
+  // Public
+  show(callback) {
+    if (!this._config.isVisible) {
+      execute(callback);
+      return;
+    }
+    this._append();
+    const element = this._getElement();
+    if (this._config.isAnimated) {
+      reflow(element);
+    }
+    element.classList.add(CLASS_NAME_SHOW$5);
+    this._emulateAnimation(() => {
+      execute(callback);
+    });
+  }
+  hide(callback) {
+    if (!this._config.isVisible) {
+      execute(callback);
+      return;
+    }
+    this._getElement().classList.remove(CLASS_NAME_SHOW$5);
+    this._emulateAnimation(() => {
+      this.dispose();
+      execute(callback);
+    });
+  }
+  dispose() {
+    if (!this._isAppended) {
+      return;
+    }
+    EventHandler.off(this._element, EVENT_MOUSEDOWN);
+    this._element.remove();
+    this._isAppended = false;
+  }
+
+  // Private
+  _getElement() {
+    if (!this._element) {
+      const backdrop = document.createElement('div');
+      backdrop.className = this._config.className;
+      if (this._config.isAnimated) {
+        backdrop.classList.add(CLASS_NAME_FADE$4);
+      }
+      this._element = backdrop;
+    }
+    return this._element;
+  }
+  _configAfterMerge(config) {
+    // use getElement() with the default "body" to get a fresh Element on each instantiation
+    config.rootElement = getElement(config.rootElement);
+    return config;
+  }
+  _append() {
+    if (this._isAppended) {
+      return;
+    }
+    const element = this._getElement();
+    this._config.rootElement.append(element);
+    EventHandler.on(element, EVENT_MOUSEDOWN, () => {
+      execute(this._config.clickCallback);
+    });
+    this._isAppended = true;
+  }
+  _emulateAnimation(callback) {
+    executeAfterTransition(callback, this._getElement(), this._config.isAnimated);
+  }
+}
+
+/**
+ * --------------------------------------------------------------------------
+ * Bootstrap util/focustrap.js
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
+ * --------------------------------------------------------------------------
+ */
+
+
+/**
+ * Constants
+ */
+
+const NAME$8 = 'focustrap';
+const DATA_KEY$5 = 'bs.focustrap';
+const EVENT_KEY$5 = `.${DATA_KEY$5}`;
+const EVENT_FOCUSIN$2 = `focusin${EVENT_KEY$5}`;
+const EVENT_KEYDOWN_TAB = `keydown.tab${EVENT_KEY$5}`;
+const TAB_KEY = 'Tab';
+const TAB_NAV_FORWARD = 'forward';
+const TAB_NAV_BACKWARD = 'backward';
+const Default$7 = {
+  autofocus: true,
+  trapElement: null // The element to trap focus inside of
+};
+
+const DefaultType$7 = {
+  autofocus: 'boolean',
+  trapElement: 'element'
+};
+
+/**
+ * Class definition
+ */
+
+class FocusTrap extends Config {
+  constructor(config) {
+    super();
+    this._config = this._getConfig(config);
+    this._isActive = false;
+    this._lastTabNavDirection = null;
+  }
+
+  // Getters
+  static get Default() {
+    return Default$7;
+  }
+  static get DefaultType() {
+    return DefaultType$7;
+  }
+  static get NAME() {
+    return NAME$8;
+  }
+
+  // Public
+  activate() {
+    if (this._isActive) {
+      return;
+    }
+    if (this._config.autofocus) {
+      this._config.trapElement.focus();
+    }
+    EventHandler.off(document, EVENT_KEY$5); // guard against infinite focus loop
+    EventHandler.on(document, EVENT_FOCUSIN$2, event => this._handleFocusin(event));
+    EventHandler.on(document, EVENT_KEYDOWN_TAB, event => this._handleKeydown(event));
+    this._isActive = true;
+  }
+  deactivate() {
+    if (!this._isActive) {
+      return;
+    }
+    this._isActive = false;
+    EventHandler.off(document, EVENT_KEY$5);
+  }
+
+  // Private
+  _handleFocusin(event) {
+    const {
+      trapElement
+    } = this._config;
+    if (event.target === document || event.target === trapElement || trapElement.contains(event.target)) {
+      return;
+    }
+    const elements = SelectorEngine.focusableChildren(trapElement);
+    if (elements.length === 0) {
+      trapElement.focus();
+    } else if (this._lastTabNavDirection === TAB_NAV_BACKWARD) {
+      elements[elements.length - 1].focus();
+    } else {
+      elements[0].focus();
+    }
+  }
+  _handleKeydown(event) {
+    if (event.key !== TAB_KEY) {
+      return;
+    }
+    this._lastTabNavDirection = event.shiftKey ? TAB_NAV_BACKWARD : TAB_NAV_FORWARD;
+  }
+}
+
+/**
+ * --------------------------------------------------------------------------
+ * Bootstrap util/scrollBar.js
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
+ * --------------------------------------------------------------------------
+ */
+
+
+/**
+ * Constants
+ */
+
+const SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top';
+const SELECTOR_STICKY_CONTENT = '.sticky-top';
+const PROPERTY_PADDING = 'padding-right';
+const PROPERTY_MARGIN = 'margin-right';
+
+/**
+ * Class definition
+ */
+
+class ScrollBarHelper {
+  constructor() {
+    this._element = document.body;
+  }
+
+  // Public
+  getWidth() {
+    // https://developer.mozilla.org/en-US/docs/Web/API/Window/innerWidth#usage_notes
+    const documentWidth = document.documentElement.clientWidth;
+    return Math.abs(window.innerWidth - documentWidth);
+  }
+  hide() {
+    const width = this.getWidth();
+    this._disableOverFlow();
+    // give padding to element to balance the hidden scrollbar width
+    this._setElementAttributes(this._element, PROPERTY_PADDING, calculatedValue => calculatedValue + width);
+    // trick: We adjust positive paddingRight and negative marginRight to sticky-top elements to keep showing fullwidth
+    this._setElementAttributes(SELECTOR_FIXED_CONTENT, PROPERTY_PADDING, calculatedValue => calculatedValue + width);
+    this._setElementAttributes(SELECTOR_STICKY_CONTENT, PROPERTY_MARGIN, calculatedValue => calculatedValue - width);
+  }
+  reset() {
+    this._resetElementAttributes(this._element, 'overflow');
+    this._resetElementAttributes(this._element, PROPERTY_PADDING);
+    this._resetElementAttributes(SELECTOR_FIXED_CONTENT, PROPERTY_PADDING);
+    this._resetElementAttributes(SELECTOR_STICKY_CONTENT, PROPERTY_MARGIN);
+  }
+  isOverflowing() {
+    return this.getWidth() > 0;
+  }
+
+  // Private
+  _disableOverFlow() {
+    this._saveInitialAttribute(this._element, 'overflow');
+    this._element.style.overflow = 'hidden';
+  }
+  _setElementAttributes(selector, styleProperty, callback) {
+    const scrollbarWidth = this.getWidth();
+    const manipulationCallBack = element => {
+      if (element !== this._element && window.innerWidth > element.clientWidth + scrollbarWidth) {
+        return;
+      }
+      this._saveInitialAttribute(element, styleProperty);
+      const calculatedValue = window.getComputedStyle(element).getPropertyValue(styleProperty);
+      element.style.setProperty(styleProperty, `${callback(Number.parseFloat(calculatedValue))}px`);
+    };
+    this._applyManipulationCallback(selector, manipulationCallBack);
+  }
+  _saveInitialAttribute(element, styleProperty) {
+    const actualValue = element.style.getPropertyValue(styleProperty);
+    if (actualValue) {
+      Manipulator.setDataAttribute(element, styleProperty, actualValue);
+    }
+  }
+  _resetElementAttributes(selector, styleProperty) {
+    const manipulationCallBack = element => {
+      const value = Manipulator.getDataAttribute(element, styleProperty);
+      // We only want to remove the property if the value is `null`; the value can also be zero
+      if (value === null) {
+        element.style.removeProperty(styleProperty);
+        return;
+      }
+      Manipulator.removeDataAttribute(element, styleProperty);
+      element.style.setProperty(styleProperty, value);
+    };
+    this._applyManipulationCallback(selector, manipulationCallBack);
+  }
+  _applyManipulationCallback(selector, callBack) {
+    if (isElement(selector)) {
+      callBack(selector);
+      return;
+    }
+    for (const sel of SelectorEngine.find(selector, this._element)) {
+      callBack(sel);
+    }
+  }
+}
+
+/**
+ * --------------------------------------------------------------------------
+ * Bootstrap modal.js
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
+ * --------------------------------------------------------------------------
+ */
+
+
+/**
+ * Constants
+ */
+
+const NAME$7 = 'modal';
+const DATA_KEY$4 = 'bs.modal';
+const EVENT_KEY$4 = `.${DATA_KEY$4}`;
+const DATA_API_KEY$2 = '.data-api';
+const ESCAPE_KEY$1 = 'Escape';
+const EVENT_HIDE$4 = `hide${EVENT_KEY$4}`;
+const EVENT_HIDE_PREVENTED$1 = `hidePrevented${EVENT_KEY$4}`;
+const EVENT_HIDDEN$4 = `hidden${EVENT_KEY$4}`;
+const EVENT_SHOW$4 = `show${EVENT_KEY$4}`;
+const EVENT_SHOWN$4 = `shown${EVENT_KEY$4}`;
+const EVENT_RESIZE$1 = `resize${EVENT_KEY$4}`;
+const EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY$4}`;
+const EVENT_MOUSEDOWN_DISMISS = `mousedown.dismiss${EVENT_KEY$4}`;
+const EVENT_KEYDOWN_DISMISS$1 = `keydown.dismiss${EVENT_KEY$4}`;
+const EVENT_CLICK_DATA_API$2 = `click${EVENT_KEY$4}${DATA_API_KEY$2}`;
+const CLASS_NAME_OPEN = 'modal-open';
+const CLASS_NAME_FADE$3 = 'fade';
+const CLASS_NAME_SHOW$4 = 'show';
+const CLASS_NAME_STATIC = 'modal-static';
+const OPEN_SELECTOR$1 = '.modal.show';
+const SELECTOR_DIALOG = '.modal-dialog';
+const SELECTOR_MODAL_BODY = '.modal-body';
+const SELECTOR_DATA_TOGGLE$2 = '[data-bs-toggle="modal"]';
+const Default$6 = {
+  backdrop: true,
+  focus: true,
+  keyboard: true
+};
+const DefaultType$6 = {
+  backdrop: '(boolean|string)',
+  focus: 'boolean',
+  keyboard: 'boolean'
+};
+
+/**
+ * Class definition
+ */
+
+class Modal extends BaseComponent {
+  constructor(element, config) {
+    super(element, config);
+    this._dialog = SelectorEngine.findOne(SELECTOR_DIALOG, this._element);
+    this._backdrop = this._initializeBackDrop();
+    this._focustrap = this._initializeFocusTrap();
+    this._isShown = false;
+    this._isTransitioning = false;
+    this._scrollBar = new ScrollBarHelper();
+    this._addEventListeners();
+  }
+
+  // Getters
+  static get Default() {
+    return Default$6;
+  }
+  static get DefaultType() {
+    return DefaultType$6;
+  }
+  static get NAME() {
+    return NAME$7;
+  }
+
+  // Public
+  toggle(relatedTarget) {
+    return this._isShown ? this.hide() : this.show(relatedTarget);
+  }
+  show(relatedTarget) {
+    if (this._isShown || this._isTransitioning) {
+      return;
+    }
+    const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$4, {
+      relatedTarget
+    });
+    if (showEvent.defaultPrevented) {
+      return;
+    }
+    this._isShown = true;
+    this._isTransitioning = true;
+    this._scrollBar.hide();
+    document.body.classList.add(CLASS_NAME_OPEN);
+    this._adjustDialog();
+    this._backdrop.show(() => this._showElement(relatedTarget));
+  }
+  hide() {
+    if (!this._isShown || this._isTransitioning) {
+      return;
+    }
+    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$4);
+    if (hideEvent.defaultPrevented) {
+      return;
+    }
+    this._isShown = false;
+    this._isTransitioning = true;
+    this._focustrap.deactivate();
+    this._element.classList.remove(CLASS_NAME_SHOW$4);
+    this._queueCallback(() => this._hideModal(), this._element, this._isAnimated());
+  }
+  dispose() {
+    EventHandler.off(window, EVENT_KEY$4);
+    EventHandler.off(this._dialog, EVENT_KEY$4);
+    this._backdrop.dispose();
+    this._focustrap.deactivate();
+    super.dispose();
+  }
+  handleUpdate() {
+    this._adjustDialog();
+  }
+
+  // Private
+  _initializeBackDrop() {
+    return new Backdrop({
+      isVisible: Boolean(this._config.backdrop),
+      // 'static' option will be translated to true, and booleans will keep their value,
+      isAnimated: this._isAnimated()
+    });
+  }
+  _initializeFocusTrap() {
+    return new FocusTrap({
+      trapElement: this._element
+    });
+  }
+  _showElement(relatedTarget) {
+    // try to append dynamic modal
+    if (!document.body.contains(this._element)) {
+      document.body.append(this._element);
+    }
+    this._element.style.display = 'block';
+    this._element.removeAttribute('aria-hidden');
+    this._element.setAttribute('aria-modal', true);
+    this._element.setAttribute('role', 'dialog');
+    this._element.scrollTop = 0;
+    const modalBody = SelectorEngine.findOne(SELECTOR_MODAL_BODY, this._dialog);
+    if (modalBody) {
+      modalBody.scrollTop = 0;
+    }
+    reflow(this._element);
+    this._element.classList.add(CLASS_NAME_SHOW$4);
+    const transitionComplete = () => {
+      if (this._config.focus) {
+        this._focustrap.activate();
+      }
+      this._isTransitioning = false;
+      EventHandler.trigger(this._element, EVENT_SHOWN$4, {
+        relatedTarget
+      });
+    };
+    this._queueCallback(transitionComplete, this._dialog, this._isAnimated());
+  }
+  _addEventListeners() {
+    EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS$1, event => {
+      if (event.key !== ESCAPE_KEY$1) {
+        return;
+      }
+      if (this._config.keyboard) {
+        this.hide();
+        return;
+      }
+      this._triggerBackdropTransition();
+    });
+    EventHandler.on(window, EVENT_RESIZE$1, () => {
+      if (this._isShown && !this._isTransitioning) {
+        this._adjustDialog();
+      }
+    });
+    EventHandler.on(this._element, EVENT_MOUSEDOWN_DISMISS, event => {
+      // a bad trick to segregate clicks that may start inside dialog but end outside, and avoid listen to scrollbar clicks
+      EventHandler.one(this._element, EVENT_CLICK_DISMISS, event2 => {
+        if (this._element !== event.target || this._element !== event2.target) {
+          return;
+        }
+        if (this._config.backdrop === 'static') {
+          this._triggerBackdropTransition();
+          return;
+        }
+        if (this._config.backdrop) {
+          this.hide();
+        }
+      });
+    });
+  }
+  _hideModal() {
+    this._element.style.display = 'none';
+    this._element.setAttribute('aria-hidden', true);
+    this._element.removeAttribute('aria-modal');
+    this._element.removeAttribute('role');
+    this._isTransitioning = false;
+    this._backdrop.hide(() => {
+      document.body.classList.remove(CLASS_NAME_OPEN);
+      this._resetAdjustments();
+      this._scrollBar.reset();
+      EventHandler.trigger(this._element, EVENT_HIDDEN$4);
+    });
+  }
+  _isAnimated() {
+    return this._element.classList.contains(CLASS_NAME_FADE$3);
+  }
+  _triggerBackdropTransition() {
+    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED$1);
+    if (hideEvent.defaultPrevented) {
+      return;
+    }
+    const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;
+    const initialOverflowY = this._element.style.overflowY;
+    // return if the following background transition hasn't yet completed
+    if (initialOverflowY === 'hidden' || this._element.classList.contains(CLASS_NAME_STATIC)) {
+      return;
+    }
+    if (!isModalOverflowing) {
+      this._element.style.overflowY = 'hidden';
+    }
+    this._element.classList.add(CLASS_NAME_STATIC);
+    this._queueCallback(() => {
+      this._element.classList.remove(CLASS_NAME_STATIC);
+      this._queueCallback(() => {
+        this._element.style.overflowY = initialOverflowY;
+      }, this._dialog);
+    }, this._dialog);
+    this._element.focus();
+  }
+
+  /**
+   * The following methods are used to handle overflowing modals
+   */
+
+  _adjustDialog() {
+    const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;
+    const scrollbarWidth = this._scrollBar.getWidth();
+    const isBodyOverflowing = scrollbarWidth > 0;
+    if (isBodyOverflowing && !isModalOverflowing) {
+      const property = isRTL() ? 'paddingLeft' : 'paddingRight';
+      this._element.style[property] = `${scrollbarWidth}px`;
+    }
+    if (!isBodyOverflowing && isModalOverflowing) {
+      const property = isRTL() ? 'paddingRight' : 'paddingLeft';
+      this._element.style[property] = `${scrollbarWidth}px`;
+    }
+  }
+  _resetAdjustments() {
+    this._element.style.paddingLeft = '';
+    this._element.style.paddingRight = '';
+  }
+
+  // Static
+  static jQueryInterface(config, relatedTarget) {
+    return this.each(function () {
+      const data = Modal.getOrCreateInstance(this, config);
+      if (typeof config !== 'string') {
+        return;
+      }
+      if (typeof data[config] === 'undefined') {
+        throw new TypeError(`No method named "${config}"`);
+      }
+      data[config](relatedTarget);
+    });
+  }
+}
+
+/**
+ * Data API implementation
+ */
+
+EventHandler.on(document, EVENT_CLICK_DATA_API$2, SELECTOR_DATA_TOGGLE$2, function (event) {
+  const target = SelectorEngine.getElementFromSelector(this);
+  if (['A', 'AREA'].includes(this.tagName)) {
+    event.preventDefault();
+  }
+  EventHandler.one(target, EVENT_SHOW$4, showEvent => {
+    if (showEvent.defaultPrevented) {
+      // only register focus restorer if modal will actually get shown
+      return;
+    }
+    EventHandler.one(target, EVENT_HIDDEN$4, () => {
+      if (isVisible(this)) {
+        this.focus();
+      }
+    });
+  });
+
+  // avoid conflict when clicking modal toggler while another one is open
+  const alreadyOpen = SelectorEngine.findOne(OPEN_SELECTOR$1);
+  if (alreadyOpen) {
+    Modal.getInstance(alreadyOpen).hide();
+  }
+  const data = Modal.getOrCreateInstance(target);
+  data.toggle(this);
+});
+enableDismissTrigger(Modal);
+
+/**
+ * jQuery
+ */
+
+defineJQueryPlugin(Modal);
+
+/**
+ * --------------------------------------------------------------------------
+ * Bootstrap offcanvas.js
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
+ * --------------------------------------------------------------------------
+ */
+
+
+/**
+ * Constants
+ */
+
+const NAME$6 = 'offcanvas';
+const DATA_KEY$3 = 'bs.offcanvas';
+const EVENT_KEY$3 = `.${DATA_KEY$3}`;
+const DATA_API_KEY$1 = '.data-api';
+const EVENT_LOAD_DATA_API$2 = `load${EVENT_KEY$3}${DATA_API_KEY$1}`;
+const ESCAPE_KEY = 'Escape';
+const CLASS_NAME_SHOW$3 = 'show';
+const CLASS_NAME_SHOWING$1 = 'showing';
+const CLASS_NAME_HIDING = 'hiding';
+const CLASS_NAME_BACKDROP = 'offcanvas-backdrop';
+const OPEN_SELECTOR = '.offcanvas.show';
+const EVENT_SHOW$3 = `show${EVENT_KEY$3}`;
+const EVENT_SHOWN$3 = `shown${EVENT_KEY$3}`;
+const EVENT_HIDE$3 = `hide${EVENT_KEY$3}`;
+const EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY$3}`;
+const EVENT_HIDDEN$3 = `hidden${EVENT_KEY$3}`;
+const EVENT_RESIZE = `resize${EVENT_KEY$3}`;
+const EVENT_CLICK_DATA_API$1 = `click${EVENT_KEY$3}${DATA_API_KEY$1}`;
+const EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY$3}`;
+const SELECTOR_DATA_TOGGLE$1 = '[data-bs-toggle="offcanvas"]';
+const Default$5 = {
+  backdrop: true,
+  keyboard: true,
+  scroll: false
+};
+const DefaultType$5 = {
+  backdrop: '(boolean|string)',
+  keyboard: 'boolean',
+  scroll: 'boolean'
+};
+
+/**
+ * Class definition
+ */
+
+class Offcanvas extends BaseComponent {
+  constructor(element, config) {
+    super(element, config);
+    this._isShown = false;
+    this._backdrop = this._initializeBackDrop();
+    this._focustrap = this._initializeFocusTrap();
+    this._addEventListeners();
+  }
+
+  // Getters
+  static get Default() {
+    return Default$5;
+  }
+  static get DefaultType() {
+    return DefaultType$5;
+  }
+  static get NAME() {
+    return NAME$6;
+  }
+
+  // Public
+  toggle(relatedTarget) {
+    return this._isShown ? this.hide() : this.show(relatedTarget);
+  }
+  show(relatedTarget) {
+    if (this._isShown) {
+      return;
+    }
+    const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$3, {
+      relatedTarget
+    });
+    if (showEvent.defaultPrevented) {
+      return;
+    }
+    this._isShown = true;
+    this._backdrop.show();
+    if (!this._config.scroll) {
+      new ScrollBarHelper().hide();
+    }
+    this._element.setAttribute('aria-modal', true);
+    this._element.setAttribute('role', 'dialog');
+    this._element.classList.add(CLASS_NAME_SHOWING$1);
+    const completeCallBack = () => {
+      if (!this._config.scroll || this._config.backdrop) {
+        this._focustrap.activate();
+      }
+      this._element.classList.add(CLASS_NAME_SHOW$3);
+      this._element.classList.remove(CLASS_NAME_SHOWING$1);
+      EventHandler.trigger(this._element, EVENT_SHOWN$3, {
+        relatedTarget
+      });
+    };
+    this._queueCallback(completeCallBack, this._element, true);
+  }
+  hide() {
+    if (!this._isShown) {
+      return;
+    }
+    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$3);
+    if (hideEvent.defaultPrevented) {
+      return;
+    }
+    this._focustrap.deactivate();
+    this._element.blur();
+    this._isShown = false;
+    this._element.classList.add(CLASS_NAME_HIDING);
+    this._backdrop.hide();
+    const completeCallback = () => {
+      this._element.classList.remove(CLASS_NAME_SHOW$3, CLASS_NAME_HIDING);
+      this._element.removeAttribute('aria-modal');
+      this._element.removeAttribute('role');
+      if (!this._config.scroll) {
+        new ScrollBarHelper().reset();
+      }
+      EventHandler.trigger(this._element, EVENT_HIDDEN$3);
+    };
+    this._queueCallback(completeCallback, this._element, true);
+  }
+  dispose() {
+    this._backdrop.dispose();
+    this._focustrap.deactivate();
+    super.dispose();
+  }
+
+  // Private
+  _initializeBackDrop() {
+    const clickCallback = () => {
+      if (this._config.backdrop === 'static') {
+        EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED);
+        return;
+      }
+      this.hide();
+    };
+
+    // 'static' option will be translated to true, and booleans will keep their value
+    const isVisible = Boolean(this._config.backdrop);
+    return new Backdrop({
+      className: CLASS_NAME_BACKDROP,
+      isVisible,
+      isAnimated: true,
+      rootElement: this._element.parentNode,
+      clickCallback: isVisible ? clickCallback : null
+    });
+  }
+  _initializeFocusTrap() {
+    return new FocusTrap({
+      trapElement: this._element
+    });
+  }
+  _addEventListeners() {
+    EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, event => {
+      if (event.key !== ESCAPE_KEY) {
+        return;
+      }
+      if (this._config.keyboard) {
+        this.hide();
+        return;
+      }
+      EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED);
+    });
+  }
+
+  // Static
+  static jQueryInterface(config) {
+    return this.each(function () {
+      const data = Offcanvas.getOrCreateInstance(this, config);
+      if (typeof config !== 'string') {
+        return;
+      }
+      if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {
+        throw new TypeError(`No method named "${config}"`);
+      }
+      data[config](this);
+    });
+  }
+}
+
+/**
+ * Data API implementation
+ */
+
+EventHandler.on(document, EVENT_CLICK_DATA_API$1, SELECTOR_DATA_TOGGLE$1, function (event) {
+  const target = SelectorEngine.getElementFromSelector(this);
+  if (['A', 'AREA'].includes(this.tagName)) {
+    event.preventDefault();
+  }
+  if (isDisabled(this)) {
+    return;
+  }
+  EventHandler.one(target, EVENT_HIDDEN$3, () => {
+    // focus on trigger when it is closed
+    if (isVisible(this)) {
+      this.focus();
+    }
+  });
+
+  // avoid conflict when clicking a toggler of an offcanvas, while another is open
+  const alreadyOpen = SelectorEngine.findOne(OPEN_SELECTOR);
+  if (alreadyOpen && alreadyOpen !== target) {
+    Offcanvas.getInstance(alreadyOpen).hide();
+  }
+  const data = Offcanvas.getOrCreateInstance(target);
+  data.toggle(this);
+});
+EventHandler.on(window, EVENT_LOAD_DATA_API$2, () => {
+  for (const selector of SelectorEngine.find(OPEN_SELECTOR)) {
+    Offcanvas.getOrCreateInstance(selector).show();
+  }
+});
+EventHandler.on(window, EVENT_RESIZE, () => {
+  for (const element of SelectorEngine.find('[aria-modal][class*=show][class*=offcanvas-]')) {
+    if (getComputedStyle(element).position !== 'fixed') {
+      Offcanvas.getOrCreateInstance(element).hide();
+    }
+  }
+});
+enableDismissTrigger(Offcanvas);
+
+/**
+ * jQuery
+ */
+
+defineJQueryPlugin(Offcanvas);
+
+/**
+ * --------------------------------------------------------------------------
+ * Bootstrap util/sanitizer.js
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
+ * --------------------------------------------------------------------------
+ */
+
+// js-docs-start allow-list
+const ARIA_ATTRIBUTE_PATTERN = /^aria-[\w-]*$/i;
+const DefaultAllowlist = {
+  // Global attributes allowed on any supplied element below.
+  '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],
+  a: ['target', 'href', 'title', 'rel'],
+  area: [],
+  b: [],
+  br: [],
+  col: [],
+  code: [],
+  div: [],
+  em: [],
+  hr: [],
+  h1: [],
+  h2: [],
+  h3: [],
+  h4: [],
+  h5: [],
+  h6: [],
+  i: [],
+  img: ['src', 'srcset', 'alt', 'title', 'width', 'height'],
+  li: [],
+  ol: [],
+  p: [],
+  pre: [],
+  s: [],
+  small: [],
+  span: [],
+  sub: [],
+  sup: [],
+  strong: [],
+  u: [],
+  ul: []
+};
+// js-docs-end allow-list
+
+const uriAttributes = new Set(['background', 'cite', 'href', 'itemtype', 'longdesc', 'poster', 'src', 'xlink:href']);
+
+/**
+ * A pattern that recognizes URLs that are safe wrt. XSS in URL navigation
+ * contexts.
+ *
+ * Shout-out to Angular https://github.com/angular/angular/blob/15.2.8/packages/core/src/sanitization/url_sanitizer.ts#L38
+ */
+// eslint-disable-next-line unicorn/better-regex
+const SAFE_URL_PATTERN = /^(?!javascript:)(?:[a-z0-9+.-]+:|[^&:/?#]*(?:[/?#]|$))/i;
+const allowedAttribute = (attribute, allowedAttributeList) => {
+  const attributeName = attribute.nodeName.toLowerCase();
+  if (allowedAttributeList.includes(attributeName)) {
+    if (uriAttributes.has(attributeName)) {
+      return Boolean(SAFE_URL_PATTERN.test(attribute.nodeValue));
+    }
+    return true;
+  }
+
+  // Check if a regular expression validates the attribute.
+  return allowedAttributeList.filter(attributeRegex => attributeRegex instanceof RegExp).some(regex => regex.test(attributeName));
+};
+function sanitizeHtml(unsafeHtml, allowList, sanitizeFunction) {
+  if (!unsafeHtml.length) {
+    return unsafeHtml;
+  }
+  if (sanitizeFunction && typeof sanitizeFunction === 'function') {
+    return sanitizeFunction(unsafeHtml);
+  }
+  const domParser = new window.DOMParser();
+  const createdDocument = domParser.parseFromString(unsafeHtml, 'text/html');
+  const elements = [].concat(...createdDocument.body.querySelectorAll('*'));
+  for (const element of elements) {
+    const elementName = element.nodeName.toLowerCase();
+    if (!Object.keys(allowList).includes(elementName)) {
+      element.remove();
+      continue;
+    }
+    const attributeList = [].concat(...element.attributes);
+    const allowedAttributes = [].concat(allowList['*'] || [], allowList[elementName] || []);
+    for (const attribute of attributeList) {
+      if (!allowedAttribute(attribute, allowedAttributes)) {
+        element.removeAttribute(attribute.nodeName);
+      }
+    }
+  }
+  return createdDocument.body.innerHTML;
+}
+
+/**
+ * --------------------------------------------------------------------------
+ * Bootstrap util/template-factory.js
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
+ * --------------------------------------------------------------------------
+ */
+
+
+/**
+ * Constants
+ */
+
+const NAME$5 = 'TemplateFactory';
+const Default$4 = {
+  allowList: DefaultAllowlist,
+  content: {},
+  // { selector : text ,  selector2 : text2 , }
+  extraClass: '',
+  html: false,
+  sanitize: true,
+  sanitizeFn: null,
+  template: '<div></div>'
+};
+const DefaultType$4 = {
+  allowList: 'object',
+  content: 'object',
+  extraClass: '(string|function)',
+  html: 'boolean',
+  sanitize: 'boolean',
+  sanitizeFn: '(null|function)',
+  template: 'string'
+};
+const DefaultContentType = {
+  entry: '(string|element|function|null)',
+  selector: '(string|element)'
+};
+
+/**
+ * Class definition
+ */
+
+class TemplateFactory extends Config {
+  constructor(config) {
+    super();
+    this._config = this._getConfig(config);
+  }
+
+  // Getters
+  static get Default() {
+    return Default$4;
+  }
+  static get DefaultType() {
+    return DefaultType$4;
+  }
+  static get NAME() {
+    return NAME$5;
+  }
+
+  // Public
+  getContent() {
+    return Object.values(this._config.content).map(config => this._resolvePossibleFunction(config)).filter(Boolean);
+  }
+  hasContent() {
+    return this.getContent().length > 0;
+  }
+  changeContent(content) {
+    this._checkContent(content);
+    this._config.content = {
+      ...this._config.content,
+      ...content
+    };
+    return this;
+  }
+  toHtml() {
+    const templateWrapper = document.createElement('div');
+    templateWrapper.innerHTML = this._maybeSanitize(this._config.template);
+    for (const [selector, text] of Object.entries(this._config.content)) {
+      this._setContent(templateWrapper, text, selector);
+    }
+    const template = templateWrapper.children[0];
+    const extraClass = this._resolvePossibleFunction(this._config.extraClass);
+    if (extraClass) {
+      template.classList.add(...extraClass.split(' '));
+    }
+    return template;
+  }
+
+  // Private
+  _typeCheckConfig(config) {
+    super._typeCheckConfig(config);
+    this._checkContent(config.content);
+  }
+  _checkContent(arg) {
+    for (const [selector, content] of Object.entries(arg)) {
+      super._typeCheckConfig({
+        selector,
+        entry: content
+      }, DefaultContentType);
+    }
+  }
+  _setContent(template, content, selector) {
+    const templateElement = SelectorEngine.findOne(selector, template);
+    if (!templateElement) {
+      return;
+    }
+    content = this._resolvePossibleFunction(content);
+    if (!content) {
+      templateElement.remove();
+      return;
+    }
+    if (isElement(content)) {
+      this._putElementInTemplate(getElement(content), templateElement);
+      return;
+    }
+    if (this._config.html) {
+      templateElement.innerHTML = this._maybeSanitize(content);
+      return;
+    }
+    templateElement.textContent = content;
+  }
+  _maybeSanitize(arg) {
+    return this._config.sanitize ? sanitizeHtml(arg, this._config.allowList, this._config.sanitizeFn) : arg;
+  }
+  _resolvePossibleFunction(arg) {
+    return execute(arg, [this]);
+  }
+  _putElementInTemplate(element, templateElement) {
+    if (this._config.html) {
+      templateElement.innerHTML = '';
+      templateElement.append(element);
+      return;
+    }
+    templateElement.textContent = element.textContent;
+  }
+}
+
+/**
+ * --------------------------------------------------------------------------
+ * Bootstrap tooltip.js
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
+ * --------------------------------------------------------------------------
+ */
+
+
+/**
+ * Constants
+ */
+
+const NAME$4 = 'tooltip';
+const DISALLOWED_ATTRIBUTES = new Set(['sanitize', 'allowList', 'sanitizeFn']);
+const CLASS_NAME_FADE$2 = 'fade';
+const CLASS_NAME_MODAL = 'modal';
+const CLASS_NAME_SHOW$2 = 'show';
+const SELECTOR_TOOLTIP_INNER = '.tooltip-inner';
+const SELECTOR_MODAL = `.${CLASS_NAME_MODAL}`;
+const EVENT_MODAL_HIDE = 'hide.bs.modal';
+const TRIGGER_HOVER = 'hover';
+const TRIGGER_FOCUS = 'focus';
+const TRIGGER_CLICK = 'click';
+const TRIGGER_MANUAL = 'manual';
+const EVENT_HIDE$2 = 'hide';
+const EVENT_HIDDEN$2 = 'hidden';
+const EVENT_SHOW$2 = 'show';
+const EVENT_SHOWN$2 = 'shown';
+const EVENT_INSERTED = 'inserted';
+const EVENT_CLICK$1 = 'click';
+const EVENT_FOCUSIN$1 = 'focusin';
+const EVENT_FOCUSOUT$1 = 'focusout';
+const EVENT_MOUSEENTER = 'mouseenter';
+const EVENT_MOUSELEAVE = 'mouseleave';
+const AttachmentMap = {
+  AUTO: 'auto',
+  TOP: 'top',
+  RIGHT: isRTL() ? 'left' : 'right',
+  BOTTOM: 'bottom',
+  LEFT: isRTL() ? 'right' : 'left'
+};
+const Default$3 = {
+  allowList: DefaultAllowlist,
+  animation: true,
+  boundary: 'clippingParents',
+  container: false,
+  customClass: '',
+  delay: 0,
+  fallbackPlacements: ['top', 'right', 'bottom', 'left'],
+  html: false,
+  offset: [0, 6],
+  placement: 'top',
+  popperConfig: null,
+  sanitize: true,
+  sanitizeFn: null,
+  selector: false,
+  template: '<div class="tooltip" role="tooltip">' + '<div class="tooltip-arrow"></div>' + '<div class="tooltip-inner"></div>' + '</div>',
+  title: '',
+  trigger: 'hover focus'
+};
+const DefaultType$3 = {
+  allowList: 'object',
+  animation: 'boolean',
+  boundary: '(string|element)',
+  container: '(string|element|boolean)',
+  customClass: '(string|function)',
+  delay: '(number|object)',
+  fallbackPlacements: 'array',
+  html: 'boolean',
+  offset: '(array|string|function)',
+  placement: '(string|function)',
+  popperConfig: '(null|object|function)',
+  sanitize: 'boolean',
+  sanitizeFn: '(null|function)',
+  selector: '(string|boolean)',
+  template: 'string',
+  title: '(string|element|function)',
+  trigger: 'string'
+};
+
+/**
+ * Class definition
+ */
+
+class Tooltip extends BaseComponent {
+  constructor(element, config) {
+    if (typeof Popper === 'undefined') {
+      throw new TypeError('Bootstrap\'s tooltips require Popper (https://popper.js.org)');
+    }
+    super(element, config);
+
+    // Private
+    this._isEnabled = true;
+    this._timeout = 0;
+    this._isHovered = null;
+    this._activeTrigger = {};
+    this._popper = null;
+    this._templateFactory = null;
+    this._newContent = null;
+
+    // Protected
+    this.tip = null;
+    this._setListeners();
+    if (!this._config.selector) {
+      this._fixTitle();
+    }
+  }
+
+  // Getters
+  static get Default() {
+    return Default$3;
+  }
+  static get DefaultType() {
+    return DefaultType$3;
+  }
+  static get NAME() {
+    return NAME$4;
+  }
+
+  // Public
+  enable() {
+    this._isEnabled = true;
+  }
+  disable() {
+    this._isEnabled = false;
+  }
+  toggleEnabled() {
+    this._isEnabled = !this._isEnabled;
+  }
+  toggle() {
+    if (!this._isEnabled) {
+      return;
+    }
+    this._activeTrigger.click = !this._activeTrigger.click;
+    if (this._isShown()) {
+      this._leave();
+      return;
+    }
+    this._enter();
+  }
+  dispose() {
+    clearTimeout(this._timeout);
+    EventHandler.off(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE, this._hideModalHandler);
+    if (this._element.getAttribute('data-bs-original-title')) {
+      this._element.setAttribute('title', this._element.getAttribute('data-bs-original-title'));
+    }
+    this._disposePopper();
+    super.dispose();
+  }
+  show() {
+    if (this._element.style.display === 'none') {
+      throw new Error('Please use show on visible elements');
+    }
+    if (!(this._isWithContent() && this._isEnabled)) {
+      return;
+    }
+    const showEvent = EventHandler.trigger(this._element, this.constructor.eventName(EVENT_SHOW$2));
+    const shadowRoot = findShadowRoot(this._element);
+    const isInTheDom = (shadowRoot || this._element.ownerDocument.documentElement).contains(this._element);
+    if (showEvent.defaultPrevented || !isInTheDom) {
+      return;
+    }
+
+    // TODO: v6 remove this or make it optional
+    this._disposePopper();
+    const tip = this._getTipElement();
+    this._element.setAttribute('aria-describedby', tip.getAttribute('id'));
+    const {
+      container
+    } = this._config;
+    if (!this._element.ownerDocument.documentElement.contains(this.tip)) {
+      container.append(tip);
+      EventHandler.trigger(this._element, this.constructor.eventName(EVENT_INSERTED));
+    }
+    this._popper = this._createPopper(tip);
+    tip.classList.add(CLASS_NAME_SHOW$2);
+
+    // If this is a touch-enabled device we add extra
+    // empty mouseover listeners to the body's immediate children;
+    // only needed because of broken event delegation on iOS
+    // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html
+    if ('ontouchstart' in document.documentElement) {
+      for (const element of [].concat(...document.body.children)) {
+        EventHandler.on(element, 'mouseover', noop);
+      }
+    }
+    const complete = () => {
+      EventHandler.trigger(this._element, this.constructor.eventName(EVENT_SHOWN$2));
+      if (this._isHovered === false) {
+        this._leave();
+      }
+      this._isHovered = false;
+    };
+    this._queueCallback(complete, this.tip, this._isAnimated());
+  }
+  hide() {
+    if (!this._isShown()) {
+      return;
+    }
+    const hideEvent = EventHandler.trigger(this._element, this.constructor.eventName(EVENT_HIDE$2));
+    if (hideEvent.defaultPrevented) {
+      return;
+    }
+    const tip = this._getTipElement();
+    tip.classList.remove(CLASS_NAME_SHOW$2);
+
+    // If this is a touch-enabled device we remove the extra
+    // empty mouseover listeners we added for iOS support
+    if ('ontouchstart' in document.documentElement) {
+      for (const element of [].concat(...document.body.children)) {
+        EventHandler.off(element, 'mouseover', noop);
+      }
+    }
+    this._activeTrigger[TRIGGER_CLICK] = false;
+    this._activeTrigger[TRIGGER_FOCUS] = false;
+    this._activeTrigger[TRIGGER_HOVER] = false;
+    this._isHovered = null; // it is a trick to support manual triggering
+
+    const complete = () => {
+      if (this._isWithActiveTrigger()) {
+        return;
+      }
+      if (!this._isHovered) {
+        this._disposePopper();
+      }
+      this._element.removeAttribute('aria-describedby');
+      EventHandler.trigger(this._element, this.constructor.eventName(EVENT_HIDDEN$2));
+    };
+    this._queueCallback(complete, this.tip, this._isAnimated());
+  }
+  update() {
+    if (this._popper) {
+      this._popper.update();
+    }
+  }
+
+  // Protected
+  _isWithContent() {
+    return Boolean(this._getTitle());
+  }
+  _getTipElement() {
+    if (!this.tip) {
+      this.tip = this._createTipElement(this._newContent || this._getContentForTemplate());
+    }
+    return this.tip;
+  }
+  _createTipElement(content) {
+    const tip = this._getTemplateFactory(content).toHtml();
+
+    // TODO: remove this check in v6
+    if (!tip) {
+      return null;
+    }
+    tip.classList.remove(CLASS_NAME_FADE$2, CLASS_NAME_SHOW$2);
+    // TODO: v6 the following can be achieved with CSS only
+    tip.classList.add(`bs-${this.constructor.NAME}-auto`);
+    const tipId = getUID(this.constructor.NAME).toString();
+    tip.setAttribute('id', tipId);
+    if (this._isAnimated()) {
+      tip.classList.add(CLASS_NAME_FADE$2);
+    }
+    return tip;
+  }
+  setContent(content) {
+    this._newContent = content;
+    if (this._isShown()) {
+      this._disposePopper();
+      this.show();
+    }
+  }
+  _getTemplateFactory(content) {
+    if (this._templateFactory) {
+      this._templateFactory.changeContent(content);
+    } else {
+      this._templateFactory = new TemplateFactory({
+        ...this._config,
+        // the `content` var has to be after `this._config`
+        // to override config.content in case of popover
+        content,
+        extraClass: this._resolvePossibleFunction(this._config.customClass)
+      });
+    }
+    return this._templateFactory;
+  }
+  _getContentForTemplate() {
+    return {
+      [SELECTOR_TOOLTIP_INNER]: this._getTitle()
+    };
+  }
+  _getTitle() {
+    return this._resolvePossibleFunction(this._config.title) || this._element.getAttribute('data-bs-original-title');
+  }
+
+  // Private
+  _initializeOnDelegatedTarget(event) {
+    return this.constructor.getOrCreateInstance(event.delegateTarget, this._getDelegateConfig());
+  }
+  _isAnimated() {
+    return this._config.animation || this.tip && this.tip.classList.contains(CLASS_NAME_FADE$2);
+  }
+  _isShown() {
+    return this.tip && this.tip.classList.contains(CLASS_NAME_SHOW$2);
+  }
+  _createPopper(tip) {
+    const placement = execute(this._config.placement, [this, tip, this._element]);
+    const attachment = AttachmentMap[placement.toUpperCase()];
+    return Popper.createPopper(this._element, tip, this._getPopperConfig(attachment));
+  }
+  _getOffset() {
+    const {
+      offset
+    } = this._config;
+    if (typeof offset === 'string') {
+      return offset.split(',').map(value => Number.parseInt(value, 10));
+    }
+    if (typeof offset === 'function') {
+      return popperData => offset(popperData, this._element);
+    }
+    return offset;
+  }
+  _resolvePossibleFunction(arg) {
+    return execute(arg, [this._element]);
+  }
+  _getPopperConfig(attachment) {
+    const defaultBsPopperConfig = {
+      placement: attachment,
+      modifiers: [{
+        name: 'flip',
+        options: {
+          fallbackPlacements: this._config.fallbackPlacements
+        }
+      }, {
+        name: 'offset',
+        options: {
+          offset: this._getOffset()
+        }
+      }, {
+        name: 'preventOverflow',
+        options: {
+          boundary: this._config.boundary
+        }
+      }, {
+        name: 'arrow',
+        options: {
+          element: `.${this.constructor.NAME}-arrow`
+        }
+      }, {
+        name: 'preSetPlacement',
+        enabled: true,
+        phase: 'beforeMain',
+        fn: data => {
+          // Pre-set Popper's placement attribute in order to read the arrow sizes properly.
+          // Otherwise, Popper mixes up the width and height dimensions since the initial arrow style is for top placement
+          this._getTipElement().setAttribute('data-popper-placement', data.state.placement);
+        }
+      }]
+    };
+    return {
+      ...defaultBsPopperConfig,
+      ...execute(this._config.popperConfig, [defaultBsPopperConfig])
+    };
+  }
+  _setListeners() {
+    const triggers = this._config.trigger.split(' ');
+    for (const trigger of triggers) {
+      if (trigger === 'click') {
+        EventHandler.on(this._element, this.constructor.eventName(EVENT_CLICK$1), this._config.selector, event => {
+          const context = this._initializeOnDelegatedTarget(event);
+          context.toggle();
+        });
+      } else if (trigger !== TRIGGER_MANUAL) {
+        const eventIn = trigger === TRIGGER_HOVER ? this.constructor.eventName(EVENT_MOUSEENTER) : this.constructor.eventName(EVENT_FOCUSIN$1);
+        const eventOut = trigger === TRIGGER_HOVER ? this.constructor.eventName(EVENT_MOUSELEAVE) : this.constructor.eventName(EVENT_FOCUSOUT$1);
+        EventHandler.on(this._element, eventIn, this._config.selector, event => {
+          const context = this._initializeOnDelegatedTarget(event);
+          context._activeTrigger[event.type === 'focusin' ? TRIGGER_FOCUS : TRIGGER_HOVER] = true;
+          context._enter();
+        });
+        EventHandler.on(this._element, eventOut, this._config.selector, event => {
+          const context = this._initializeOnDelegatedTarget(event);
+          context._activeTrigger[event.type === 'focusout' ? TRIGGER_FOCUS : TRIGGER_HOVER] = context._element.contains(event.relatedTarget);
+          context._leave();
+        });
+      }
+    }
+    this._hideModalHandler = () => {
+      if (this._element) {
+        this.hide();
+      }
+    };
+    EventHandler.on(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE, this._hideModalHandler);
+  }
+  _fixTitle() {
+    const title = this._element.getAttribute('title');
+    if (!title) {
+      return;
+    }
+    if (!this._element.getAttribute('aria-label') && !this._element.textContent.trim()) {
+      this._element.setAttribute('aria-label', title);
+    }
+    this._element.setAttribute('data-bs-original-title', title); // DO NOT USE IT. Is only for backwards compatibility
+    this._element.removeAttribute('title');
+  }
+  _enter() {
+    if (this._isShown() || this._isHovered) {
+      this._isHovered = true;
+      return;
+    }
+    this._isHovered = true;
+    this._setTimeout(() => {
+      if (this._isHovered) {
+        this.show();
+      }
+    }, this._config.delay.show);
+  }
+  _leave() {
+    if (this._isWithActiveTrigger()) {
+      return;
+    }
+    this._isHovered = false;
+    this._setTimeout(() => {
+      if (!this._isHovered) {
+        this.hide();
+      }
+    }, this._config.delay.hide);
+  }
+  _setTimeout(handler, timeout) {
+    clearTimeout(this._timeout);
+    this._timeout = setTimeout(handler, timeout);
+  }
+  _isWithActiveTrigger() {
+    return Object.values(this._activeTrigger).includes(true);
+  }
+  _getConfig(config) {
+    const dataAttributes = Manipulator.getDataAttributes(this._element);
+    for (const dataAttribute of Object.keys(dataAttributes)) {
+      if (DISALLOWED_ATTRIBUTES.has(dataAttribute)) {
+        delete dataAttributes[dataAttribute];
+      }
+    }
+    config = {
+      ...dataAttributes,
+      ...(typeof config === 'object' && config ? config : {})
+    };
+    config = this._mergeConfigObj(config);
+    config = this._configAfterMerge(config);
+    this._typeCheckConfig(config);
+    return config;
+  }
+  _configAfterMerge(config) {
+    config.container = config.container === false ? document.body : getElement(config.container);
+    if (typeof config.delay === 'number') {
+      config.delay = {
+        show: config.delay,
+        hide: config.delay
+      };
+    }
+    if (typeof config.title === 'number') {
+      config.title = config.title.toString();
+    }
+    if (typeof config.content === 'number') {
+      config.content = config.content.toString();
+    }
+    return config;
+  }
+  _getDelegateConfig() {
+    const config = {};
+    for (const [key, value] of Object.entries(this._config)) {
+      if (this.constructor.Default[key] !== value) {
+        config[key] = value;
+      }
+    }
+    config.selector = false;
+    config.trigger = 'manual';
+
+    // In the future can be replaced with:
+    // const keysWithDifferentValues = Object.entries(this._config).filter(entry => this.constructor.Default[entry[0]] !== this._config[entry[0]])
+    // `Object.fromEntries(keysWithDifferentValues)`
+    return config;
+  }
+  _disposePopper() {
+    if (this._popper) {
+      this._popper.destroy();
+      this._popper = null;
+    }
+    if (this.tip) {
+      this.tip.remove();
+      this.tip = null;
+    }
+  }
+
+  // Static
+  static jQueryInterface(config) {
+    return this.each(function () {
+      const data = Tooltip.getOrCreateInstance(this, config);
+      if (typeof config !== 'string') {
+        return;
+      }
+      if (typeof data[config] === 'undefined') {
+        throw new TypeError(`No method named "${config}"`);
+      }
+      data[config]();
+    });
+  }
+}
+
+/**
+ * jQuery
+ */
+
+defineJQueryPlugin(Tooltip);
+
+/**
+ * --------------------------------------------------------------------------
+ * Bootstrap popover.js
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
+ * --------------------------------------------------------------------------
+ */
+
+
+/**
+ * Constants
+ */
+
+const NAME$3 = 'popover';
+const SELECTOR_TITLE = '.popover-header';
+const SELECTOR_CONTENT = '.popover-body';
+const Default$2 = {
+  ...Tooltip.Default,
+  content: '',
+  offset: [0, 8],
+  placement: 'right',
+  template: '<div class="popover" role="tooltip">' + '<div class="popover-arrow"></div>' + '<h3 class="popover-header"></h3>' + '<div class="popover-body"></div>' + '</div>',
+  trigger: 'click'
+};
+const DefaultType$2 = {
+  ...Tooltip.DefaultType,
+  content: '(null|string|element|function)'
+};
+
+/**
+ * Class definition
+ */
+
+class Popover extends Tooltip {
+  // Getters
+  static get Default() {
+    return Default$2;
+  }
+  static get DefaultType() {
+    return DefaultType$2;
+  }
+  static get NAME() {
+    return NAME$3;
+  }
+
+  // Overrides
+  _isWithContent() {
+    return this._getTitle() || this._getContent();
+  }
+
+  // Private
+  _getContentForTemplate() {
+    return {
+      [SELECTOR_TITLE]: this._getTitle(),
+      [SELECTOR_CONTENT]: this._getContent()
+    };
+  }
+  _getContent() {
+    return this._resolvePossibleFunction(this._config.content);
+  }
+
+  // Static
+  static jQueryInterface(config) {
+    return this.each(function () {
+      const data = Popover.getOrCreateInstance(this, config);
+      if (typeof config !== 'string') {
+        return;
+      }
+      if (typeof data[config] === 'undefined') {
+        throw new TypeError(`No method named "${config}"`);
+      }
+      data[config]();
+    });
+  }
+}
+
+/**
+ * jQuery
+ */
+
+defineJQueryPlugin(Popover);
+
+/**
+ * --------------------------------------------------------------------------
+ * Bootstrap scrollspy.js
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
+ * --------------------------------------------------------------------------
+ */
+
+
+/**
+ * Constants
+ */
+
+const NAME$2 = 'scrollspy';
+const DATA_KEY$2 = 'bs.scrollspy';
+const EVENT_KEY$2 = `.${DATA_KEY$2}`;
+const DATA_API_KEY = '.data-api';
+const EVENT_ACTIVATE = `activate${EVENT_KEY$2}`;
+const EVENT_CLICK = `click${EVENT_KEY$2}`;
+const EVENT_LOAD_DATA_API$1 = `load${EVENT_KEY$2}${DATA_API_KEY}`;
+const CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item';
+const CLASS_NAME_ACTIVE$1 = 'active';
+const SELECTOR_DATA_SPY = '[data-bs-spy="scroll"]';
+const SELECTOR_TARGET_LINKS = '[href]';
+const SELECTOR_NAV_LIST_GROUP = '.nav, .list-group';
+const SELECTOR_NAV_LINKS = '.nav-link';
+const SELECTOR_NAV_ITEMS = '.nav-item';
+const SELECTOR_LIST_ITEMS = '.list-group-item';
+const SELECTOR_LINK_ITEMS = `${SELECTOR_NAV_LINKS}, ${SELECTOR_NAV_ITEMS} > ${SELECTOR_NAV_LINKS}, ${SELECTOR_LIST_ITEMS}`;
+const SELECTOR_DROPDOWN = '.dropdown';
+const SELECTOR_DROPDOWN_TOGGLE$1 = '.dropdown-toggle';
+const Default$1 = {
+  offset: null,
+  // TODO: v6 @deprecated, keep it for backwards compatibility reasons
+  rootMargin: '0px 0px -25%',
+  smoothScroll: false,
+  target: null,
+  threshold: [0.1, 0.5, 1]
+};
+const DefaultType$1 = {
+  offset: '(number|null)',
+  // TODO v6 @deprecated, keep it for backwards compatibility reasons
+  rootMargin: 'string',
+  smoothScroll: 'boolean',
+  target: 'element',
+  threshold: 'array'
+};
+
+/**
+ * Class definition
+ */
+
+class ScrollSpy extends BaseComponent {
+  constructor(element, config) {
+    super(element, config);
+
+    // this._element is the observablesContainer and config.target the menu links wrapper
+    this._targetLinks = new Map();
+    this._observableSections = new Map();
+    this._rootElement = getComputedStyle(this._element).overflowY === 'visible' ? null : this._element;
+    this._activeTarget = null;
+    this._observer = null;
+    this._previousScrollData = {
+      visibleEntryTop: 0,
+      parentScrollTop: 0
+    };
+    this.refresh(); // initialize
+  }
+
+  // Getters
+  static get Default() {
+    return Default$1;
+  }
+  static get DefaultType() {
+    return DefaultType$1;
+  }
+  static get NAME() {
+    return NAME$2;
+  }
+
+  // Public
+  refresh() {
+    this._initializeTargetsAndObservables();
+    this._maybeEnableSmoothScroll();
+    if (this._observer) {
+      this._observer.disconnect();
+    } else {
+      this._observer = this._getNewObserver();
+    }
+    for (const section of this._observableSections.values()) {
+      this._observer.observe(section);
+    }
+  }
+  dispose() {
+    this._observer.disconnect();
+    super.dispose();
+  }
+
+  // Private
+  _configAfterMerge(config) {
+    // TODO: on v6 target should be given explicitly & remove the {target: 'ss-target'} case
+    config.target = getElement(config.target) || document.body;
+
+    // TODO: v6 Only for backwards compatibility reasons. Use rootMargin only
+    config.rootMargin = config.offset ? `${config.offset}px 0px -30%` : config.rootMargin;
+    if (typeof config.threshold === 'string') {
+      config.threshold = config.threshold.split(',').map(value => Number.parseFloat(value));
+    }
+    return config;
+  }
+  _maybeEnableSmoothScroll() {
+    if (!this._config.smoothScroll) {
+      return;
+    }
+
+    // unregister any previous listeners
+    EventHandler.off(this._config.target, EVENT_CLICK);
+    EventHandler.on(this._config.target, EVENT_CLICK, SELECTOR_TARGET_LINKS, event => {
+      const observableSection = this._observableSections.get(event.target.hash);
+      if (observableSection) {
+        event.preventDefault();
+        const root = this._rootElement || window;
+        const height = observableSection.offsetTop - this._element.offsetTop;
+        if (root.scrollTo) {
+          root.scrollTo({
+            top: height,
+            behavior: 'smooth'
+          });
+          return;
+        }
+
+        // Chrome 60 doesn't support `scrollTo`
+        root.scrollTop = height;
+      }
+    });
+  }
+  _getNewObserver() {
+    const options = {
+      root: this._rootElement,
+      threshold: this._config.threshold,
+      rootMargin: this._config.rootMargin
+    };
+    return new IntersectionObserver(entries => this._observerCallback(entries), options);
+  }
+
+  // The logic of selection
+  _observerCallback(entries) {
+    const targetElement = entry => this._targetLinks.get(`#${entry.target.id}`);
+    const activate = entry => {
+      this._previousScrollData.visibleEntryTop = entry.target.offsetTop;
+      this._process(targetElement(entry));
+    };
+    const parentScrollTop = (this._rootElement || document.documentElement).scrollTop;
+    const userScrollsDown = parentScrollTop >= this._previousScrollData.parentScrollTop;
+    this._previousScrollData.parentScrollTop = parentScrollTop;
+    for (const entry of entries) {
+      if (!entry.isIntersecting) {
+        this._activeTarget = null;
+        this._clearActiveClass(targetElement(entry));
+        continue;
+      }
+      const entryIsLowerThanPrevious = entry.target.offsetTop >= this._previousScrollData.visibleEntryTop;
+      // if we are scrolling down, pick the bigger offsetTop
+      if (userScrollsDown && entryIsLowerThanPrevious) {
+        activate(entry);
+        // if parent isn't scrolled, let's keep the first visible item, breaking the iteration
+        if (!parentScrollTop) {
+          return;
+        }
+        continue;
+      }
+
+      // if we are scrolling up, pick the smallest offsetTop
+      if (!userScrollsDown && !entryIsLowerThanPrevious) {
+        activate(entry);
+      }
+    }
+  }
+  _initializeTargetsAndObservables() {
+    this._targetLinks = new Map();
+    this._observableSections = new Map();
+    const targetLinks = SelectorEngine.find(SELECTOR_TARGET_LINKS, this._config.target);
+    for (const anchor of targetLinks) {
+      // ensure that the anchor has an id and is not disabled
+      if (!anchor.hash || isDisabled(anchor)) {
+        continue;
+      }
+      const observableSection = SelectorEngine.findOne(decodeURI(anchor.hash), this._element);
+
+      // ensure that the observableSection exists & is visible
+      if (isVisible(observableSection)) {
+        this._targetLinks.set(decodeURI(anchor.hash), anchor);
+        this._observableSections.set(anchor.hash, observableSection);
+      }
+    }
+  }
+  _process(target) {
+    if (this._activeTarget === target) {
+      return;
+    }
+    this._clearActiveClass(this._config.target);
+    this._activeTarget = target;
+    target.classList.add(CLASS_NAME_ACTIVE$1);
+    this._activateParents(target);
+    EventHandler.trigger(this._element, EVENT_ACTIVATE, {
+      relatedTarget: target
+    });
+  }
+  _activateParents(target) {
+    // Activate dropdown parents
+    if (target.classList.contains(CLASS_NAME_DROPDOWN_ITEM)) {
+      SelectorEngine.findOne(SELECTOR_DROPDOWN_TOGGLE$1, target.closest(SELECTOR_DROPDOWN)).classList.add(CLASS_NAME_ACTIVE$1);
+      return;
+    }
+    for (const listGroup of SelectorEngine.parents(target, SELECTOR_NAV_LIST_GROUP)) {
+      // Set triggered links parents as active
+      // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor
+      for (const item of SelectorEngine.prev(listGroup, SELECTOR_LINK_ITEMS)) {
+        item.classList.add(CLASS_NAME_ACTIVE$1);
+      }
+    }
+  }
+  _clearActiveClass(parent) {
+    parent.classList.remove(CLASS_NAME_ACTIVE$1);
+    const activeNodes = SelectorEngine.find(`${SELECTOR_TARGET_LINKS}.${CLASS_NAME_ACTIVE$1}`, parent);
+    for (const node of activeNodes) {
+      node.classList.remove(CLASS_NAME_ACTIVE$1);
+    }
+  }
+
+  // Static
+  static jQueryInterface(config) {
+    return this.each(function () {
+      const data = ScrollSpy.getOrCreateInstance(this, config);
+      if (typeof config !== 'string') {
+        return;
+      }
+      if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {
+        throw new TypeError(`No method named "${config}"`);
+      }
+      data[config]();
+    });
+  }
+}
+
+/**
+ * Data API implementation
+ */
+
+EventHandler.on(window, EVENT_LOAD_DATA_API$1, () => {
+  for (const spy of SelectorEngine.find(SELECTOR_DATA_SPY)) {
+    ScrollSpy.getOrCreateInstance(spy);
+  }
+});
+
+/**
+ * jQuery
+ */
+
+defineJQueryPlugin(ScrollSpy);
+
+/**
+ * --------------------------------------------------------------------------
+ * Bootstrap tab.js
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
+ * --------------------------------------------------------------------------
+ */
+
+
+/**
+ * Constants
+ */
+
+const NAME$1 = 'tab';
+const DATA_KEY$1 = 'bs.tab';
+const EVENT_KEY$1 = `.${DATA_KEY$1}`;
+const EVENT_HIDE$1 = `hide${EVENT_KEY$1}`;
+const EVENT_HIDDEN$1 = `hidden${EVENT_KEY$1}`;
+const EVENT_SHOW$1 = `show${EVENT_KEY$1}`;
+const EVENT_SHOWN$1 = `shown${EVENT_KEY$1}`;
+const EVENT_CLICK_DATA_API = `click${EVENT_KEY$1}`;
+const EVENT_KEYDOWN = `keydown${EVENT_KEY$1}`;
+const EVENT_LOAD_DATA_API = `load${EVENT_KEY$1}`;
+const ARROW_LEFT_KEY = 'ArrowLeft';
+const ARROW_RIGHT_KEY = 'ArrowRight';
+const ARROW_UP_KEY = 'ArrowUp';
+const ARROW_DOWN_KEY = 'ArrowDown';
+const HOME_KEY = 'Home';
+const END_KEY = 'End';
+const CLASS_NAME_ACTIVE = 'active';
+const CLASS_NAME_FADE$1 = 'fade';
+const CLASS_NAME_SHOW$1 = 'show';
+const CLASS_DROPDOWN = 'dropdown';
+const SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle';
+const SELECTOR_DROPDOWN_MENU = '.dropdown-menu';
+const NOT_SELECTOR_DROPDOWN_TOGGLE = ':not(.dropdown-toggle)';
+const SELECTOR_TAB_PANEL = '.list-group, .nav, [role="tablist"]';
+const SELECTOR_OUTER = '.nav-item, .list-group-item';
+const SELECTOR_INNER = `.nav-link${NOT_SELECTOR_DROPDOWN_TOGGLE}, .list-group-item${NOT_SELECTOR_DROPDOWN_TOGGLE}, [role="tab"]${NOT_SELECTOR_DROPDOWN_TOGGLE}`;
+const SELECTOR_DATA_TOGGLE = '[data-bs-toggle="tab"], [data-bs-toggle="pill"], [data-bs-toggle="list"]'; // TODO: could only be `tab` in v6
+const SELECTOR_INNER_ELEM = `${SELECTOR_INNER}, ${SELECTOR_DATA_TOGGLE}`;
+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"]`;
+
+/**
+ * Class definition
+ */
+
+class Tab extends BaseComponent {
+  constructor(element) {
+    super(element);
+    this._parent = this._element.closest(SELECTOR_TAB_PANEL);
+    if (!this._parent) {
+      return;
+      // TODO: should throw exception in v6
+      // throw new TypeError(`${element.outerHTML} has not a valid parent ${SELECTOR_INNER_ELEM}`)
+    }
+
+    // Set up initial aria attributes
+    this._setInitialAttributes(this._parent, this._getChildren());
+    EventHandler.on(this._element, EVENT_KEYDOWN, event => this._keydown(event));
+  }
+
+  // Getters
+  static get NAME() {
+    return NAME$1;
+  }
+
+  // Public
+  show() {
+    // Shows this elem and deactivate the active sibling if exists
+    const innerElem = this._element;
+    if (this._elemIsActive(innerElem)) {
+      return;
+    }
+
+    // Search for active tab on same parent to deactivate it
+    const active = this._getActiveElem();
+    const hideEvent = active ? EventHandler.trigger(active, EVENT_HIDE$1, {
+      relatedTarget: innerElem
+    }) : null;
+    const showEvent = EventHandler.trigger(innerElem, EVENT_SHOW$1, {
+      relatedTarget: active
+    });
+    if (showEvent.defaultPrevented || hideEvent && hideEvent.defaultPrevented) {
+      return;
+    }
+    this._deactivate(active, innerElem);
+    this._activate(innerElem, active);
+  }
+
+  // Private
+  _activate(element, relatedElem) {
+    if (!element) {
+      return;
+    }
+    element.classList.add(CLASS_NAME_ACTIVE);
+    this._activate(SelectorEngine.getElementFromSelector(element)); // Search and activate/show the proper section
+
+    const complete = () => {
+      if (element.getAttribute('role') !== 'tab') {
+        element.classList.add(CLASS_NAME_SHOW$1);
+        return;
+      }
+      element.removeAttribute('tabindex');
+      element.setAttribute('aria-selected', true);
+      this._toggleDropDown(element, true);
+      EventHandler.trigger(element, EVENT_SHOWN$1, {
+        relatedTarget: relatedElem
+      });
+    };
+    this._queueCallback(complete, element, element.classList.contains(CLASS_NAME_FADE$1));
+  }
+  _deactivate(element, relatedElem) {
+    if (!element) {
+      return;
+    }
+    element.classList.remove(CLASS_NAME_ACTIVE);
+    element.blur();
+    this._deactivate(SelectorEngine.getElementFromSelector(element)); // Search and deactivate the shown section too
+
+    const complete = () => {
+      if (element.getAttribute('role') !== 'tab') {
+        element.classList.remove(CLASS_NAME_SHOW$1);
+        return;
+      }
+      element.setAttribute('aria-selected', false);
+      element.setAttribute('tabindex', '-1');
+      this._toggleDropDown(element, false);
+      EventHandler.trigger(element, EVENT_HIDDEN$1, {
+        relatedTarget: relatedElem
+      });
+    };
+    this._queueCallback(complete, element, element.classList.contains(CLASS_NAME_FADE$1));
+  }
+  _keydown(event) {
+    if (![ARROW_LEFT_KEY, ARROW_RIGHT_KEY, ARROW_UP_KEY, ARROW_DOWN_KEY, HOME_KEY, END_KEY].includes(event.key)) {
+      return;
+    }
+    event.stopPropagation(); // stopPropagation/preventDefault both added to support up/down keys without scrolling the page
+    event.preventDefault();
+    const children = this._getChildren().filter(element => !isDisabled(element));
+    let nextActiveElement;
+    if ([HOME_KEY, END_KEY].includes(event.key)) {
+      nextActiveElement = children[event.key === HOME_KEY ? 0 : children.length - 1];
+    } else {
+      const isNext = [ARROW_RIGHT_KEY, ARROW_DOWN_KEY].includes(event.key);
+      nextActiveElement = getNextActiveElement(children, event.target, isNext, true);
+    }
+    if (nextActiveElement) {
+      nextActiveElement.focus({
+        preventScroll: true
+      });
+      Tab.getOrCreateInstance(nextActiveElement).show();
+    }
+  }
+  _getChildren() {
+    // collection of inner elements
+    return SelectorEngine.find(SELECTOR_INNER_ELEM, this._parent);
+  }
+  _getActiveElem() {
+    return this._getChildren().find(child => this._elemIsActive(child)) || null;
+  }
+  _setInitialAttributes(parent, children) {
+    this._setAttributeIfNotExists(parent, 'role', 'tablist');
+    for (const child of children) {
+      this._setInitialAttributesOnChild(child);
+    }
+  }
+  _setInitialAttributesOnChild(child) {
+    child = this._getInnerElement(child);
+    const isActive = this._elemIsActive(child);
+    const outerElem = this._getOuterElement(child);
+    child.setAttribute('aria-selected', isActive);
+    if (outerElem !== child) {
+      this._setAttributeIfNotExists(outerElem, 'role', 'presentation');
+    }
+    if (!isActive) {
+      child.setAttribute('tabindex', '-1');
+    }
+    this._setAttributeIfNotExists(child, 'role', 'tab');
+
+    // set attributes to the related panel too
+    this._setInitialAttributesOnTargetPanel(child);
+  }
+  _setInitialAttributesOnTargetPanel(child) {
+    const target = SelectorEngine.getElementFromSelector(child);
+    if (!target) {
+      return;
+    }
+    this._setAttributeIfNotExists(target, 'role', 'tabpanel');
+    if (child.id) {
+      this._setAttributeIfNotExists(target, 'aria-labelledby', `${child.id}`);
+    }
+  }
+  _toggleDropDown(element, open) {
+    const outerElem = this._getOuterElement(element);
+    if (!outerElem.classList.contains(CLASS_DROPDOWN)) {
+      return;
+    }
+    const toggle = (selector, className) => {
+      const element = SelectorEngine.findOne(selector, outerElem);
+      if (element) {
+        element.classList.toggle(className, open);
+      }
+    };
+    toggle(SELECTOR_DROPDOWN_TOGGLE, CLASS_NAME_ACTIVE);
+    toggle(SELECTOR_DROPDOWN_MENU, CLASS_NAME_SHOW$1);
+    outerElem.setAttribute('aria-expanded', open);
+  }
+  _setAttributeIfNotExists(element, attribute, value) {
+    if (!element.hasAttribute(attribute)) {
+      element.setAttribute(attribute, value);
+    }
+  }
+  _elemIsActive(elem) {
+    return elem.classList.contains(CLASS_NAME_ACTIVE);
+  }
+
+  // Try to get the inner element (usually the .nav-link)
+  _getInnerElement(elem) {
+    return elem.matches(SELECTOR_INNER_ELEM) ? elem : SelectorEngine.findOne(SELECTOR_INNER_ELEM, elem);
+  }
+
+  // Try to get the outer element (usually the .nav-item)
+  _getOuterElement(elem) {
+    return elem.closest(SELECTOR_OUTER) || elem;
+  }
+
+  // Static
+  static jQueryInterface(config) {
+    return this.each(function () {
+      const data = Tab.getOrCreateInstance(this);
+      if (typeof config !== 'string') {
+        return;
+      }
+      if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {
+        throw new TypeError(`No method named "${config}"`);
+      }
+      data[config]();
+    });
+  }
+}
+
+/**
+ * Data API implementation
+ */
+
+EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {
+  if (['A', 'AREA'].includes(this.tagName)) {
+    event.preventDefault();
+  }
+  if (isDisabled(this)) {
+    return;
+  }
+  Tab.getOrCreateInstance(this).show();
+});
+
+/**
+ * Initialize on focus
+ */
+EventHandler.on(window, EVENT_LOAD_DATA_API, () => {
+  for (const element of SelectorEngine.find(SELECTOR_DATA_TOGGLE_ACTIVE)) {
+    Tab.getOrCreateInstance(element);
+  }
+});
+/**
+ * jQuery
+ */
+
+defineJQueryPlugin(Tab);
+
+/**
+ * --------------------------------------------------------------------------
+ * Bootstrap toast.js
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
+ * --------------------------------------------------------------------------
+ */
+
+
+/**
+ * Constants
+ */
+
+const NAME = 'toast';
+const DATA_KEY = 'bs.toast';
+const EVENT_KEY = `.${DATA_KEY}`;
+const EVENT_MOUSEOVER = `mouseover${EVENT_KEY}`;
+const EVENT_MOUSEOUT = `mouseout${EVENT_KEY}`;
+const EVENT_FOCUSIN = `focusin${EVENT_KEY}`;
+const EVENT_FOCUSOUT = `focusout${EVENT_KEY}`;
+const EVENT_HIDE = `hide${EVENT_KEY}`;
+const EVENT_HIDDEN = `hidden${EVENT_KEY}`;
+const EVENT_SHOW = `show${EVENT_KEY}`;
+const EVENT_SHOWN = `shown${EVENT_KEY}`;
+const CLASS_NAME_FADE = 'fade';
+const CLASS_NAME_HIDE = 'hide'; // @deprecated - kept here only for backwards compatibility
+const CLASS_NAME_SHOW = 'show';
+const CLASS_NAME_SHOWING = 'showing';
+const DefaultType = {
+  animation: 'boolean',
+  autohide: 'boolean',
+  delay: 'number'
+};
+const Default = {
+  animation: true,
+  autohide: true,
+  delay: 5000
+};
+
+/**
+ * Class definition
+ */
+
+class Toast extends BaseComponent {
+  constructor(element, config) {
+    super(element, config);
+    this._timeout = null;
+    this._hasMouseInteraction = false;
+    this._hasKeyboardInteraction = false;
+    this._setListeners();
+  }
+
+  // Getters
+  static get Default() {
+    return Default;
+  }
+  static get DefaultType() {
+    return DefaultType;
+  }
+  static get NAME() {
+    return NAME;
+  }
+
+  // Public
+  show() {
+    const showEvent = EventHandler.trigger(this._element, EVENT_SHOW);
+    if (showEvent.defaultPrevented) {
+      return;
+    }
+    this._clearTimeout();
+    if (this._config.animation) {
+      this._element.classList.add(CLASS_NAME_FADE);
+    }
+    const complete = () => {
+      this._element.classList.remove(CLASS_NAME_SHOWING);
+      EventHandler.trigger(this._element, EVENT_SHOWN);
+      this._maybeScheduleHide();
+    };
+    this._element.classList.remove(CLASS_NAME_HIDE); // @deprecated
+    reflow(this._element);
+    this._element.classList.add(CLASS_NAME_SHOW, CLASS_NAME_SHOWING);
+    this._queueCallback(complete, this._element, this._config.animation);
+  }
+  hide() {
+    if (!this.isShown()) {
+      return;
+    }
+    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE);
+    if (hideEvent.defaultPrevented) {
+      return;
+    }
+    const complete = () => {
+      this._element.classList.add(CLASS_NAME_HIDE); // @deprecated
+      this._element.classList.remove(CLASS_NAME_SHOWING, CLASS_NAME_SHOW);
+      EventHandler.trigger(this._element, EVENT_HIDDEN);
+    };
+    this._element.classList.add(CLASS_NAME_SHOWING);
+    this._queueCallback(complete, this._element, this._config.animation);
+  }
+  dispose() {
+    this._clearTimeout();
+    if (this.isShown()) {
+      this._element.classList.remove(CLASS_NAME_SHOW);
+    }
+    super.dispose();
+  }
+  isShown() {
+    return this._element.classList.contains(CLASS_NAME_SHOW);
+  }
+
+  // Private
+
+  _maybeScheduleHide() {
+    if (!this._config.autohide) {
+      return;
+    }
+    if (this._hasMouseInteraction || this._hasKeyboardInteraction) {
+      return;
+    }
+    this._timeout = setTimeout(() => {
+      this.hide();
+    }, this._config.delay);
+  }
+  _onInteraction(event, isInteracting) {
+    switch (event.type) {
+      case 'mouseover':
+      case 'mouseout':
+        {
+          this._hasMouseInteraction = isInteracting;
+          break;
+        }
+      case 'focusin':
+      case 'focusout':
+        {
+          this._hasKeyboardInteraction = isInteracting;
+          break;
+        }
+    }
+    if (isInteracting) {
+      this._clearTimeout();
+      return;
+    }
+    const nextElement = event.relatedTarget;
+    if (this._element === nextElement || this._element.contains(nextElement)) {
+      return;
+    }
+    this._maybeScheduleHide();
+  }
+  _setListeners() {
+    EventHandler.on(this._element, EVENT_MOUSEOVER, event => this._onInteraction(event, true));
+    EventHandler.on(this._element, EVENT_MOUSEOUT, event => this._onInteraction(event, false));
+    EventHandler.on(this._element, EVENT_FOCUSIN, event => this._onInteraction(event, true));
+    EventHandler.on(this._element, EVENT_FOCUSOUT, event => this._onInteraction(event, false));
+  }
+  _clearTimeout() {
+    clearTimeout(this._timeout);
+    this._timeout = null;
+  }
+
+  // Static
+  static jQueryInterface(config) {
+    return this.each(function () {
+      const data = Toast.getOrCreateInstance(this, config);
+      if (typeof config === 'string') {
+        if (typeof data[config] === 'undefined') {
+          throw new TypeError(`No method named "${config}"`);
+        }
+        data[config](this);
+      }
+    });
+  }
+}
+
+/**
+ * Data API implementation
+ */
+
+enableDismissTrigger(Toast);
+
+/**
+ * jQuery
+ */
+
+defineJQueryPlugin(Toast);
+
+export { Alert, Button, Carousel, Collapse, Dropdown, Modal, Offcanvas, Popover, ScrollSpy, Tab, Toast, Tooltip };
+//# sourceMappingURL=bootstrap.esm.js.map

Різницю між файлами не показано, бо вона завелика
+ 0 - 0
public/libs/bootstrap/dist/js/bootstrap.esm.js.map


Різницю між файлами не показано, бо вона завелика
+ 5 - 0
public/libs/bootstrap/dist/js/bootstrap.esm.min.js


Різницю між файлами не показано, бо вона завелика
+ 0 - 0
public/libs/bootstrap/dist/js/bootstrap.esm.min.js.map


+ 4494 - 0
public/libs/bootstrap/dist/js/bootstrap.js

@@ -0,0 +1,4494 @@
+/*!
+  * Bootstrap v5.3.1 (https://getbootstrap.com/)
+  * Copyright 2011-2023 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
+  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
+  */
+(function (global, factory) {
+  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('@popperjs/core')) :
+  typeof define === 'function' && define.amd ? define(['@popperjs/core'], factory) :
+  (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.bootstrap = factory(global.Popper));
+})(this, (function (Popper) { 'use strict';
+
+  function _interopNamespaceDefault(e) {
+    const n = Object.create(null, { [Symbol.toStringTag]: { value: 'Module' } });
+    if (e) {
+      for (const k in e) {
+        if (k !== 'default') {
+          const d = Object.getOwnPropertyDescriptor(e, k);
+          Object.defineProperty(n, k, d.get ? d : {
+            enumerable: true,
+            get: () => e[k]
+          });
+        }
+      }
+    }
+    n.default = e;
+    return Object.freeze(n);
+  }
+
+  const Popper__namespace = /*#__PURE__*/_interopNamespaceDefault(Popper);
+
+  /**
+   * --------------------------------------------------------------------------
+   * Bootstrap dom/data.js
+   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
+   * --------------------------------------------------------------------------
+   */
+
+  /**
+   * Constants
+   */
+
+  const elementMap = new Map();
+  const Data = {
+    set(element, key, instance) {
+      if (!elementMap.has(element)) {
+        elementMap.set(element, new Map());
+      }
+      const instanceMap = elementMap.get(element);
+
+      // make it clear we only want one instance per element
+      // can be removed later when multiple key/instances are fine to be used
+      if (!instanceMap.has(key) && instanceMap.size !== 0) {
+        // eslint-disable-next-line no-console
+        console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(instanceMap.keys())[0]}.`);
+        return;
+      }
+      instanceMap.set(key, instance);
+    },
+    get(element, key) {
+      if (elementMap.has(element)) {
+        return elementMap.get(element).get(key) || null;
+      }
+      return null;
+    },
+    remove(element, key) {
+      if (!elementMap.has(element)) {
+        return;
+      }
+      const instanceMap = elementMap.get(element);
+      instanceMap.delete(key);
+
+      // free up element references if there are no instances left for an element
+      if (instanceMap.size === 0) {
+        elementMap.delete(element);
+      }
+    }
+  };
+
+  /**
+   * --------------------------------------------------------------------------
+   * Bootstrap util/index.js
+   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
+   * --------------------------------------------------------------------------
+   */
+
+  const MAX_UID = 1000000;
+  const MILLISECONDS_MULTIPLIER = 1000;
+  const TRANSITION_END = 'transitionend';
+
+  /**
+   * Properly escape IDs selectors to handle weird IDs
+   * @param {string} selector
+   * @returns {string}
+   */
+  const parseSelector = selector => {
+    if (selector && window.CSS && window.CSS.escape) {
+      // document.querySelector needs escaping to handle IDs (html5+) containing for instance /
+      selector = selector.replace(/#([^\s"#']+)/g, (match, id) => `#${CSS.escape(id)}`);
+    }
+    return selector;
+  };
+
+  // Shout-out Angus Croll (https://goo.gl/pxwQGp)
+  const toType = object => {
+    if (object === null || object === undefined) {
+      return `${object}`;
+    }
+    return Object.prototype.toString.call(object).match(/\s([a-z]+)/i)[1].toLowerCase();
+  };
+
+  /**
+   * Public Util API
+   */
+
+  const getUID = prefix => {
+    do {
+      prefix += Math.floor(Math.random() * MAX_UID);
+    } while (document.getElementById(prefix));
+    return prefix;
+  };
+  const getTransitionDurationFromElement = element => {
+    if (!element) {
+      return 0;
+    }
+
+    // Get transition-duration of the element
+    let {
+      transitionDuration,
+      transitionDelay
+    } = window.getComputedStyle(element);
+    const floatTransitionDuration = Number.parseFloat(transitionDuration);
+    const floatTransitionDelay = Number.parseFloat(transitionDelay);
+
+    // Return 0 if element or transition duration is not found
+    if (!floatTransitionDuration && !floatTransitionDelay) {
+      return 0;
+    }
+
+    // If multiple durations are defined, take the first
+    transitionDuration = transitionDuration.split(',')[0];
+    transitionDelay = transitionDelay.split(',')[0];
+    return (Number.parseFloat(transitionDuration) + Number.parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER;
+  };
+  const triggerTransitionEnd = element => {
+    element.dispatchEvent(new Event(TRANSITION_END));
+  };
+  const isElement = object => {
+    if (!object || typeof object !== 'object') {
+      return false;
+    }
+    if (typeof object.jquery !== 'undefined') {
+      object = object[0];
+    }
+    return typeof object.nodeType !== 'undefined';
+  };
+  const getElement = object => {
+    // it's a jQuery object or a node element
+    if (isElement(object)) {
+      return object.jquery ? object[0] : object;
+    }
+    if (typeof object === 'string' && object.length > 0) {
+      return document.querySelector(parseSelector(object));
+    }
+    return null;
+  };
+  const isVisible = element => {
+    if (!isElement(element) || element.getClientRects().length === 0) {
+      return false;
+    }
+    const elementIsVisible = getComputedStyle(element).getPropertyValue('visibility') === 'visible';
+    // Handle `details` element as its content may falsie appear visible when it is closed
+    const closedDetails = element.closest('details:not([open])');
+    if (!closedDetails) {
+      return elementIsVisible;
+    }
+    if (closedDetails !== element) {
+      const summary = element.closest('summary');
+      if (summary && summary.parentNode !== closedDetails) {
+        return false;
+      }
+      if (summary === null) {
+        return false;
+      }
+    }
+    return elementIsVisible;
+  };
+  const isDisabled = element => {
+    if (!element || element.nodeType !== Node.ELEMENT_NODE) {
+      return true;
+    }
+    if (element.classList.contains('disabled')) {
+      return true;
+    }
+    if (typeof element.disabled !== 'undefined') {
+      return element.disabled;
+    }
+    return element.hasAttribute('disabled') && element.getAttribute('disabled') !== 'false';
+  };
+  const findShadowRoot = element => {
+    if (!document.documentElement.attachShadow) {
+      return null;
+    }
+
+    // Can find the shadow root otherwise it'll return the document
+    if (typeof element.getRootNode === 'function') {
+      const root = element.getRootNode();
+      return root instanceof ShadowRoot ? root : null;
+    }
+    if (element instanceof ShadowRoot) {
+      return element;
+    }
+
+    // when we don't find a shadow root
+    if (!element.parentNode) {
+      return null;
+    }
+    return findShadowRoot(element.parentNode);
+  };
+  const noop = () => {};
+
+  /**
+   * Trick to restart an element's animation
+   *
+   * @param {HTMLElement} element
+   * @return void
+   *
+   * @see https://www.charistheo.io/blog/2021/02/restart-a-css-animation-with-javascript/#restarting-a-css-animation
+   */
+  const reflow = element => {
+    element.offsetHeight; // eslint-disable-line no-unused-expressions
+  };
+
+  const getjQuery = () => {
+    if (window.jQuery && !document.body.hasAttribute('data-bs-no-jquery')) {
+      return window.jQuery;
+    }
+    return null;
+  };
+  const DOMContentLoadedCallbacks = [];
+  const onDOMContentLoaded = callback => {
+    if (document.readyState === 'loading') {
+      // add listener on the first call when the document is in loading state
+      if (!DOMContentLoadedCallbacks.length) {
+        document.addEventListener('DOMContentLoaded', () => {
+          for (const callback of DOMContentLoadedCallbacks) {
+            callback();
+          }
+        });
+      }
+      DOMContentLoadedCallbacks.push(callback);
+    } else {
+      callback();
+    }
+  };
+  const isRTL = () => document.documentElement.dir === 'rtl';
+  const defineJQueryPlugin = plugin => {
+    onDOMContentLoaded(() => {
+      const $ = getjQuery();
+      /* istanbul ignore if */
+      if ($) {
+        const name = plugin.NAME;
+        const JQUERY_NO_CONFLICT = $.fn[name];
+        $.fn[name] = plugin.jQueryInterface;
+        $.fn[name].Constructor = plugin;
+        $.fn[name].noConflict = () => {
+          $.fn[name] = JQUERY_NO_CONFLICT;
+          return plugin.jQueryInterface;
+        };
+      }
+    });
+  };
+  const execute = (possibleCallback, args = [], defaultValue = possibleCallback) => {
+    return typeof possibleCallback === 'function' ? possibleCallback(...args) : defaultValue;
+  };
+  const executeAfterTransition = (callback, transitionElement, waitForTransition = true) => {
+    if (!waitForTransition) {
+      execute(callback);
+      return;
+    }
+    const durationPadding = 5;
+    const emulatedDuration = getTransitionDurationFromElement(transitionElement) + durationPadding;
+    let called = false;
+    const handler = ({
+      target
+    }) => {
+      if (target !== transitionElement) {
+        return;
+      }
+      called = true;
+      transitionElement.removeEventListener(TRANSITION_END, handler);
+      execute(callback);
+    };
+    transitionElement.addEventListener(TRANSITION_END, handler);
+    setTimeout(() => {
+      if (!called) {
+        triggerTransitionEnd(transitionElement);
+      }
+    }, emulatedDuration);
+  };
+
+  /**
+   * Return the previous/next element of a list.
+   *
+   * @param {array} list    The list of elements
+   * @param activeElement   The active element
+   * @param shouldGetNext   Choose to get next or previous element
+   * @param isCycleAllowed
+   * @return {Element|elem} The proper element
+   */
+  const getNextActiveElement = (list, activeElement, shouldGetNext, isCycleAllowed) => {
+    const listLength = list.length;
+    let index = list.indexOf(activeElement);
+
+    // if the element does not exist in the list return an element
+    // depending on the direction and if cycle is allowed
+    if (index === -1) {
+      return !shouldGetNext && isCycleAllowed ? list[listLength - 1] : list[0];
+    }
+    index += shouldGetNext ? 1 : -1;
+    if (isCycleAllowed) {
+      index = (index + listLength) % listLength;
+    }
+    return list[Math.max(0, Math.min(index, listLength - 1))];
+  };
+
+  /**
+   * --------------------------------------------------------------------------
+   * Bootstrap dom/event-handler.js
+   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
+   * --------------------------------------------------------------------------
+   */
+
+
+  /**
+   * Constants
+   */
+
+  const namespaceRegex = /[^.]*(?=\..*)\.|.*/;
+  const stripNameRegex = /\..*/;
+  const stripUidRegex = /::\d+$/;
+  const eventRegistry = {}; // Events storage
+  let uidEvent = 1;
+  const customEvents = {
+    mouseenter: 'mouseover',
+    mouseleave: 'mouseout'
+  };
+  const nativeEvents = new Set(['click', 'dblclick', 'mouseup', 'mousedown', 'contextmenu', 'mousewheel', 'DOMMouseScroll', 'mouseover', 'mouseout', 'mousemove', 'selectstart', 'selectend', 'keydown', 'keypress', 'keyup', 'orientationchange', 'touchstart', 'touchmove', 'touchend', 'touchcancel', 'pointerdown', 'pointermove', 'pointerup', 'pointerleave', 'pointercancel', 'gesturestart', 'gesturechange', 'gestureend', 'focus', 'blur', 'change', 'reset', 'select', 'submit', 'focusin', 'focusout', 'load', 'unload', 'beforeunload', 'resize', 'move', 'DOMContentLoaded', 'readystatechange', 'error', 'abort', 'scroll']);
+
+  /**
+   * Private methods
+   */
+
+  function makeEventUid(element, uid) {
+    return uid && `${uid}::${uidEvent++}` || element.uidEvent || uidEvent++;
+  }
+  function getElementEvents(element) {
+    const uid = makeEventUid(element);
+    element.uidEvent = uid;
+    eventRegistry[uid] = eventRegistry[uid] || {};
+    return eventRegistry[uid];
+  }
+  function bootstrapHandler(element, fn) {
+    return function handler(event) {
+      hydrateObj(event, {
+        delegateTarget: element
+      });
+      if (handler.oneOff) {
+        EventHandler.off(element, event.type, fn);
+      }
+      return fn.apply(element, [event]);
+    };
+  }
+  function bootstrapDelegationHandler(element, selector, fn) {
+    return function handler(event) {
+      const domElements = element.querySelectorAll(selector);
+      for (let {
+        target
+      } = event; target && target !== this; target = target.parentNode) {
+        for (const domElement of domElements) {
+          if (domElement !== target) {
+            continue;
+          }
+          hydrateObj(event, {
+            delegateTarget: target
+          });
+          if (handler.oneOff) {
+            EventHandler.off(element, event.type, selector, fn);
+          }
+          return fn.apply(target, [event]);
+        }
+      }
+    };
+  }
+  function findHandler(events, callable, delegationSelector = null) {
+    return Object.values(events).find(event => event.callable === callable && event.delegationSelector === delegationSelector);
+  }
+  function normalizeParameters(originalTypeEvent, handler, delegationFunction) {
+    const isDelegated = typeof handler === 'string';
+    // TODO: tooltip passes `false` instead of selector, so we need to check
+    const callable = isDelegated ? delegationFunction : handler || delegationFunction;
+    let typeEvent = getTypeEvent(originalTypeEvent);
+    if (!nativeEvents.has(typeEvent)) {
+      typeEvent = originalTypeEvent;
+    }
+    return [isDelegated, callable, typeEvent];
+  }
+  function addHandler(element, originalTypeEvent, handler, delegationFunction, oneOff) {
+    if (typeof originalTypeEvent !== 'string' || !element) {
+      return;
+    }
+    let [isDelegated, callable, typeEvent] = normalizeParameters(originalTypeEvent, handler, delegationFunction);
+
+    // in case of mouseenter or mouseleave wrap the handler within a function that checks for its DOM position
+    // this prevents the handler from being dispatched the same way as mouseover or mouseout does
+    if (originalTypeEvent in customEvents) {
+      const wrapFunction = fn => {
+        return function (event) {
+          if (!event.relatedTarget || event.relatedTarget !== event.delegateTarget && !event.delegateTarget.contains(event.relatedTarget)) {
+            return fn.call(this, event);
+          }
+        };
+      };
+      callable = wrapFunction(callable);
+    }
+    const events = getElementEvents(element);
+    const handlers = events[typeEvent] || (events[typeEvent] = {});
+    const previousFunction = findHandler(handlers, callable, isDelegated ? handler : null);
+    if (previousFunction) {
+      previousFunction.oneOff = previousFunction.oneOff && oneOff;
+      return;
+    }
+    const uid = makeEventUid(callable, originalTypeEvent.replace(namespaceRegex, ''));
+    const fn = isDelegated ? bootstrapDelegationHandler(element, handler, callable) : bootstrapHandler(element, callable);
+    fn.delegationSelector = isDelegated ? handler : null;
+    fn.callable = callable;
+    fn.oneOff = oneOff;
+    fn.uidEvent = uid;
+    handlers[uid] = fn;
+    element.addEventListener(typeEvent, fn, isDelegated);
+  }
+  function removeHandler(element, events, typeEvent, handler, delegationSelector) {
+    const fn = findHandler(events[typeEvent], handler, delegationSelector);
+    if (!fn) {
+      return;
+    }
+    element.removeEventListener(typeEvent, fn, Boolean(delegationSelector));
+    delete events[typeEvent][fn.uidEvent];
+  }
+  function removeNamespacedHandlers(element, events, typeEvent, namespace) {
+    const storeElementEvent = events[typeEvent] || {};
+    for (const [handlerKey, event] of Object.entries(storeElementEvent)) {
+      if (handlerKey.includes(namespace)) {
+        removeHandler(element, events, typeEvent, event.callable, event.delegationSelector);
+      }
+    }
+  }
+  function getTypeEvent(event) {
+    // allow to get the native events from namespaced events ('click.bs.button' --> 'click')
+    event = event.replace(stripNameRegex, '');
+    return customEvents[event] || event;
+  }
+  const EventHandler = {
+    on(element, event, handler, delegationFunction) {
+      addHandler(element, event, handler, delegationFunction, false);
+    },
+    one(element, event, handler, delegationFunction) {
+      addHandler(element, event, handler, delegationFunction, true);
+    },
+    off(element, originalTypeEvent, handler, delegationFunction) {
+      if (typeof originalTypeEvent !== 'string' || !element) {
+        return;
+      }
+      const [isDelegated, callable, typeEvent] = normalizeParameters(originalTypeEvent, handler, delegationFunction);
+      const inNamespace = typeEvent !== originalTypeEvent;
+      const events = getElementEvents(element);
+      const storeElementEvent = events[typeEvent] || {};
+      const isNamespace = originalTypeEvent.startsWith('.');
+      if (typeof callable !== 'undefined') {
+        // Simplest case: handler is passed, remove that listener ONLY.
+        if (!Object.keys(storeElementEvent).length) {
+          return;
+        }
+        removeHandler(element, events, typeEvent, callable, isDelegated ? handler : null);
+        return;
+      }
+      if (isNamespace) {
+        for (const elementEvent of Object.keys(events)) {
+          removeNamespacedHandlers(element, events, elementEvent, originalTypeEvent.slice(1));
+        }
+      }
+      for (const [keyHandlers, event] of Object.entries(storeElementEvent)) {
+        const handlerKey = keyHandlers.replace(stripUidRegex, '');
+        if (!inNamespace || originalTypeEvent.includes(handlerKey)) {
+          removeHandler(element, events, typeEvent, event.callable, event.delegationSelector);
+        }
+      }
+    },
+    trigger(element, event, args) {
+      if (typeof event !== 'string' || !element) {
+        return null;
+      }
+      const $ = getjQuery();
+      const typeEvent = getTypeEvent(event);
+      const inNamespace = event !== typeEvent;
+      let jQueryEvent = null;
+      let bubbles = true;
+      let nativeDispatch = true;
+      let defaultPrevented = false;
+      if (inNamespace && $) {
+        jQueryEvent = $.Event(event, args);
+        $(element).trigger(jQueryEvent);
+        bubbles = !jQueryEvent.isPropagationStopped();
+        nativeDispatch = !jQueryEvent.isImmediatePropagationStopped();
+        defaultPrevented = jQueryEvent.isDefaultPrevented();
+      }
+      const evt = hydrateObj(new Event(event, {
+        bubbles,
+        cancelable: true
+      }), args);
+      if (defaultPrevented) {
+        evt.preventDefault();
+      }
+      if (nativeDispatch) {
+        element.dispatchEvent(evt);
+      }
+      if (evt.defaultPrevented && jQueryEvent) {
+        jQueryEvent.preventDefault();
+      }
+      return evt;
+    }
+  };
+  function hydrateObj(obj, meta = {}) {
+    for (const [key, value] of Object.entries(meta)) {
+      try {
+        obj[key] = value;
+      } catch (_unused) {
+        Object.defineProperty(obj, key, {
+          configurable: true,
+          get() {
+            return value;
+          }
+        });
+      }
+    }
+    return obj;
+  }
+
+  /**
+   * --------------------------------------------------------------------------
+   * Bootstrap dom/manipulator.js
+   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
+   * --------------------------------------------------------------------------
+   */
+
+  function normalizeData(value) {
+    if (value === 'true') {
+      return true;
+    }
+    if (value === 'false') {
+      return false;
+    }
+    if (value === Number(value).toString()) {
+      return Number(value);
+    }
+    if (value === '' || value === 'null') {
+      return null;
+    }
+    if (typeof value !== 'string') {
+      return value;
+    }
+    try {
+      return JSON.parse(decodeURIComponent(value));
+    } catch (_unused) {
+      return value;
+    }
+  }
+  function normalizeDataKey(key) {
+    return key.replace(/[A-Z]/g, chr => `-${chr.toLowerCase()}`);
+  }
+  const Manipulator = {
+    setDataAttribute(element, key, value) {
+      element.setAttribute(`data-bs-${normalizeDataKey(key)}`, value);
+    },
+    removeDataAttribute(element, key) {
+      element.removeAttribute(`data-bs-${normalizeDataKey(key)}`);
+    },
+    getDataAttributes(element) {
+      if (!element) {
+        return {};
+      }
+      const attributes = {};
+      const bsKeys = Object.keys(element.dataset).filter(key => key.startsWith('bs') && !key.startsWith('bsConfig'));
+      for (const key of bsKeys) {
+        let pureKey = key.replace(/^bs/, '');
+        pureKey = pureKey.charAt(0).toLowerCase() + pureKey.slice(1, pureKey.length);
+        attributes[pureKey] = normalizeData(element.dataset[key]);
+      }
+      return attributes;
+    },
+    getDataAttribute(element, key) {
+      return normalizeData(element.getAttribute(`data-bs-${normalizeDataKey(key)}`));
+    }
+  };
+
+  /**
+   * --------------------------------------------------------------------------
+   * Bootstrap util/config.js
+   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
+   * --------------------------------------------------------------------------
+   */
+
+
+  /**
+   * Class definition
+   */
+
+  class Config {
+    // Getters
+    static get Default() {
+      return {};
+    }
+    static get DefaultType() {
+      return {};
+    }
+    static get NAME() {
+      throw new Error('You have to implement the static method "NAME", for each component!');
+    }
+    _getConfig(config) {
+      config = this._mergeConfigObj(config);
+      config = this._configAfterMerge(config);
+      this._typeCheckConfig(config);
+      return config;
+    }
+    _configAfterMerge(config) {
+      return config;
+    }
+    _mergeConfigObj(config, element) {
+      const jsonConfig = isElement(element) ? Manipulator.getDataAttribute(element, 'config') : {}; // try to parse
+
+      return {
+        ...this.constructor.Default,
+        ...(typeof jsonConfig === 'object' ? jsonConfig : {}),
+        ...(isElement(element) ? Manipulator.getDataAttributes(element) : {}),
+        ...(typeof config === 'object' ? config : {})
+      };
+    }
+    _typeCheckConfig(config, configTypes = this.constructor.DefaultType) {
+      for (const [property, expectedTypes] of Object.entries(configTypes)) {
+        const value = config[property];
+        const valueType = isElement(value) ? 'element' : toType(value);
+        if (!new RegExp(expectedTypes).test(valueType)) {
+          throw new TypeError(`${this.constructor.NAME.toUpperCase()}: Option "${property}" provided type "${valueType}" but expected type "${expectedTypes}".`);
+        }
+      }
+    }
+  }
+
+  /**
+   * --------------------------------------------------------------------------
+   * Bootstrap base-component.js
+   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
+   * --------------------------------------------------------------------------
+   */
+
+
+  /**
+   * Constants
+   */
+
+  const VERSION = '5.3.1';
+
+  /**
+   * Class definition
+   */
+
+  class BaseComponent extends Config {
+    constructor(element, config) {
+      super();
+      element = getElement(element);
+      if (!element) {
+        return;
+      }
+      this._element = element;
+      this._config = this._getConfig(config);
+      Data.set(this._element, this.constructor.DATA_KEY, this);
+    }
+
+    // Public
+    dispose() {
+      Data.remove(this._element, this.constructor.DATA_KEY);
+      EventHandler.off(this._element, this.constructor.EVENT_KEY);
+      for (const propertyName of Object.getOwnPropertyNames(this)) {
+        this[propertyName] = null;
+      }
+    }
+    _queueCallback(callback, element, isAnimated = true) {
+      executeAfterTransition(callback, element, isAnimated);
+    }
+    _getConfig(config) {
+      config = this._mergeConfigObj(config, this._element);
+      config = this._configAfterMerge(config);
+      this._typeCheckConfig(config);
+      return config;
+    }
+
+    // Static
+    static getInstance(element) {
+      return Data.get(getElement(element), this.DATA_KEY);
+    }
+    static getOrCreateInstance(element, config = {}) {
+      return this.getInstance(element) || new this(element, typeof config === 'object' ? config : null);
+    }
+    static get VERSION() {
+      return VERSION;
+    }
+    static get DATA_KEY() {
+      return `bs.${this.NAME}`;
+    }
+    static get EVENT_KEY() {
+      return `.${this.DATA_KEY}`;
+    }
+    static eventName(name) {
+      return `${name}${this.EVENT_KEY}`;
+    }
+  }
+
+  /**
+   * --------------------------------------------------------------------------
+   * Bootstrap dom/selector-engine.js
+   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
+   * --------------------------------------------------------------------------
+   */
+
+  const getSelector = element => {
+    let selector = element.getAttribute('data-bs-target');
+    if (!selector || selector === '#') {
+      let hrefAttribute = element.getAttribute('href');
+
+      // The only valid content that could double as a selector are IDs or classes,
+      // so everything starting with `#` or `.`. If a "real" URL is used as the selector,
+      // `document.querySelector` will rightfully complain it is invalid.
+      // See https://github.com/twbs/bootstrap/issues/32273
+      if (!hrefAttribute || !hrefAttribute.includes('#') && !hrefAttribute.startsWith('.')) {
+        return null;
+      }
+
+      // Just in case some CMS puts out a full URL with the anchor appended
+      if (hrefAttribute.includes('#') && !hrefAttribute.startsWith('#')) {
+        hrefAttribute = `#${hrefAttribute.split('#')[1]}`;
+      }
+      selector = hrefAttribute && hrefAttribute !== '#' ? hrefAttribute.trim() : null;
+    }
+    return parseSelector(selector);
+  };
+  const SelectorEngine = {
+    find(selector, element = document.documentElement) {
+      return [].concat(...Element.prototype.querySelectorAll.call(element, selector));
+    },
+    findOne(selector, element = document.documentElement) {
+      return Element.prototype.querySelector.call(element, selector);
+    },
+    children(element, selector) {
+      return [].concat(...element.children).filter(child => child.matches(selector));
+    },
+    parents(element, selector) {
+      const parents = [];
+      let ancestor = element.parentNode.closest(selector);
+      while (ancestor) {
+        parents.push(ancestor);
+        ancestor = ancestor.parentNode.closest(selector);
+      }
+      return parents;
+    },
+    prev(element, selector) {
+      let previous = element.previousElementSibling;
+      while (previous) {
+        if (previous.matches(selector)) {
+          return [previous];
+        }
+        previous = previous.previousElementSibling;
+      }
+      return [];
+    },
+    // TODO: this is now unused; remove later along with prev()
+    next(element, selector) {
+      let next = element.nextElementSibling;
+      while (next) {
+        if (next.matches(selector)) {
+          return [next];
+        }
+        next = next.nextElementSibling;
+      }
+      return [];
+    },
+    focusableChildren(element) {
+      const focusables = ['a', 'button', 'input', 'textarea', 'select', 'details', '[tabindex]', '[contenteditable="true"]'].map(selector => `${selector}:not([tabindex^="-"])`).join(',');
+      return this.find(focusables, element).filter(el => !isDisabled(el) && isVisible(el));
+    },
+    getSelectorFromElement(element) {
+      const selector = getSelector(element);
+      if (selector) {
+        return SelectorEngine.findOne(selector) ? selector : null;
+      }
+      return null;
+    },
+    getElementFromSelector(element) {
+      const selector = getSelector(element);
+      return selector ? SelectorEngine.findOne(selector) : null;
+    },
+    getMultipleElementsFromSelector(element) {
+      const selector = getSelector(element);
+      return selector ? SelectorEngine.find(selector) : [];
+    }
+  };
+
+  /**
+   * --------------------------------------------------------------------------
+   * Bootstrap util/component-functions.js
+   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
+   * --------------------------------------------------------------------------
+   */
+
+  const enableDismissTrigger = (component, method = 'hide') => {
+    const clickEvent = `click.dismiss${component.EVENT_KEY}`;
+    const name = component.NAME;
+    EventHandler.on(document, clickEvent, `[data-bs-dismiss="${name}"]`, function (event) {
+      if (['A', 'AREA'].includes(this.tagName)) {
+        event.preventDefault();
+      }
+      if (isDisabled(this)) {
+        return;
+      }
+      const target = SelectorEngine.getElementFromSelector(this) || this.closest(`.${name}`);
+      const instance = component.getOrCreateInstance(target);
+
+      // Method argument is left, for Alert and only, as it doesn't implement the 'hide' method
+      instance[method]();
+    });
+  };
+
+  /**
+   * --------------------------------------------------------------------------
+   * Bootstrap alert.js
+   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
+   * --------------------------------------------------------------------------
+   */
+
+
+  /**
+   * Constants
+   */
+
+  const NAME$f = 'alert';
+  const DATA_KEY$a = 'bs.alert';
+  const EVENT_KEY$b = `.${DATA_KEY$a}`;
+  const EVENT_CLOSE = `close${EVENT_KEY$b}`;
+  const EVENT_CLOSED = `closed${EVENT_KEY$b}`;
+  const CLASS_NAME_FADE$5 = 'fade';
+  const CLASS_NAME_SHOW$8 = 'show';
+
+  /**
+   * Class definition
+   */
+
+  class Alert extends BaseComponent {
+    // Getters
+    static get NAME() {
+      return NAME$f;
+    }
+
+    // Public
+    close() {
+      const closeEvent = EventHandler.trigger(this._element, EVENT_CLOSE);
+      if (closeEvent.defaultPrevented) {
+        return;
+      }
+      this._element.classList.remove(CLASS_NAME_SHOW$8);
+      const isAnimated = this._element.classList.contains(CLASS_NAME_FADE$5);
+      this._queueCallback(() => this._destroyElement(), this._element, isAnimated);
+    }
+
+    // Private
+    _destroyElement() {
+      this._element.remove();
+      EventHandler.trigger(this._element, EVENT_CLOSED);
+      this.dispose();
+    }
+
+    // Static
+    static jQueryInterface(config) {
+      return this.each(function () {
+        const data = Alert.getOrCreateInstance(this);
+        if (typeof config !== 'string') {
+          return;
+        }
+        if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {
+          throw new TypeError(`No method named "${config}"`);
+        }
+        data[config](this);
+      });
+    }
+  }
+
+  /**
+   * Data API implementation
+   */
+
+  enableDismissTrigger(Alert, 'close');
+
+  /**
+   * jQuery
+   */
+
+  defineJQueryPlugin(Alert);
+
+  /**
+   * --------------------------------------------------------------------------
+   * Bootstrap button.js
+   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
+   * --------------------------------------------------------------------------
+   */
+
+
+  /**
+   * Constants
+   */
+
+  const NAME$e = 'button';
+  const DATA_KEY$9 = 'bs.button';
+  const EVENT_KEY$a = `.${DATA_KEY$9}`;
+  const DATA_API_KEY$6 = '.data-api';
+  const CLASS_NAME_ACTIVE$3 = 'active';
+  const SELECTOR_DATA_TOGGLE$5 = '[data-bs-toggle="button"]';
+  const EVENT_CLICK_DATA_API$6 = `click${EVENT_KEY$a}${DATA_API_KEY$6}`;
+
+  /**
+   * Class definition
+   */
+
+  class Button extends BaseComponent {
+    // Getters
+    static get NAME() {
+      return NAME$e;
+    }
+
+    // Public
+    toggle() {
+      // Toggle class and sync the `aria-pressed` attribute with the return value of the `.toggle()` method
+      this._element.setAttribute('aria-pressed', this._element.classList.toggle(CLASS_NAME_ACTIVE$3));
+    }
+
+    // Static
+    static jQueryInterface(config) {
+      return this.each(function () {
+        const data = Button.getOrCreateInstance(this);
+        if (config === 'toggle') {
+          data[config]();
+        }
+      });
+    }
+  }
+
+  /**
+   * Data API implementation
+   */
+
+  EventHandler.on(document, EVENT_CLICK_DATA_API$6, SELECTOR_DATA_TOGGLE$5, event => {
+    event.preventDefault();
+    const button = event.target.closest(SELECTOR_DATA_TOGGLE$5);
+    const data = Button.getOrCreateInstance(button);
+    data.toggle();
+  });
+
+  /**
+   * jQuery
+   */
+
+  defineJQueryPlugin(Button);
+
+  /**
+   * --------------------------------------------------------------------------
+   * Bootstrap util/swipe.js
+   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
+   * --------------------------------------------------------------------------
+   */
+
+
+  /**
+   * Constants
+   */
+
+  const NAME$d = 'swipe';
+  const EVENT_KEY$9 = '.bs.swipe';
+  const EVENT_TOUCHSTART = `touchstart${EVENT_KEY$9}`;
+  const EVENT_TOUCHMOVE = `touchmove${EVENT_KEY$9}`;
+  const EVENT_TOUCHEND = `touchend${EVENT_KEY$9}`;
+  const EVENT_POINTERDOWN = `pointerdown${EVENT_KEY$9}`;
+  const EVENT_POINTERUP = `pointerup${EVENT_KEY$9}`;
+  const POINTER_TYPE_TOUCH = 'touch';
+  const POINTER_TYPE_PEN = 'pen';
+  const CLASS_NAME_POINTER_EVENT = 'pointer-event';
+  const SWIPE_THRESHOLD = 40;
+  const Default$c = {
+    endCallback: null,
+    leftCallback: null,
+    rightCallback: null
+  };
+  const DefaultType$c = {
+    endCallback: '(function|null)',
+    leftCallback: '(function|null)',
+    rightCallback: '(function|null)'
+  };
+
+  /**
+   * Class definition
+   */
+
+  class Swipe extends Config {
+    constructor(element, config) {
+      super();
+      this._element = element;
+      if (!element || !Swipe.isSupported()) {
+        return;
+      }
+      this._config = this._getConfig(config);
+      this._deltaX = 0;
+      this._supportPointerEvents = Boolean(window.PointerEvent);
+      this._initEvents();
+    }
+
+    // Getters
+    static get Default() {
+      return Default$c;
+    }
+    static get DefaultType() {
+      return DefaultType$c;
+    }
+    static get NAME() {
+      return NAME$d;
+    }
+
+    // Public
+    dispose() {
+      EventHandler.off(this._element, EVENT_KEY$9);
+    }
+
+    // Private
+    _start(event) {
+      if (!this._supportPointerEvents) {
+        this._deltaX = event.touches[0].clientX;
+        return;
+      }
+      if (this._eventIsPointerPenTouch(event)) {
+        this._deltaX = event.clientX;
+      }
+    }
+    _end(event) {
+      if (this._eventIsPointerPenTouch(event)) {
+        this._deltaX = event.clientX - this._deltaX;
+      }
+      this._handleSwipe();
+      execute(this._config.endCallback);
+    }
+    _move(event) {
+      this._deltaX = event.touches && event.touches.length > 1 ? 0 : event.touches[0].clientX - this._deltaX;
+    }
+    _handleSwipe() {
+      const absDeltaX = Math.abs(this._deltaX);
+      if (absDeltaX <= SWIPE_THRESHOLD) {
+        return;
+      }
+      const direction = absDeltaX / this._deltaX;
+      this._deltaX = 0;
+      if (!direction) {
+        return;
+      }
+      execute(direction > 0 ? this._config.rightCallback : this._config.leftCallback);
+    }
+    _initEvents() {
+      if (this._supportPointerEvents) {
+        EventHandler.on(this._element, EVENT_POINTERDOWN, event => this._start(event));
+        EventHandler.on(this._element, EVENT_POINTERUP, event => this._end(event));
+        this._element.classList.add(CLASS_NAME_POINTER_EVENT);
+      } else {
+        EventHandler.on(this._element, EVENT_TOUCHSTART, event => this._start(event));
+        EventHandler.on(this._element, EVENT_TOUCHMOVE, event => this._move(event));
+        EventHandler.on(this._element, EVENT_TOUCHEND, event => this._end(event));
+      }
+    }
+    _eventIsPointerPenTouch(event) {
+      return this._supportPointerEvents && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH);
+    }
+
+    // Static
+    static isSupported() {
+      return 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0;
+    }
+  }
+
+  /**
+   * --------------------------------------------------------------------------
+   * Bootstrap carousel.js
+   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
+   * --------------------------------------------------------------------------
+   */
+
+
+  /**
+   * Constants
+   */
+
+  const NAME$c = 'carousel';
+  const DATA_KEY$8 = 'bs.carousel';
+  const EVENT_KEY$8 = `.${DATA_KEY$8}`;
+  const DATA_API_KEY$5 = '.data-api';
+  const ARROW_LEFT_KEY$1 = 'ArrowLeft';
+  const ARROW_RIGHT_KEY$1 = 'ArrowRight';
+  const TOUCHEVENT_COMPAT_WAIT = 500; // Time for mouse compat events to fire after touch
+
+  const ORDER_NEXT = 'next';
+  const ORDER_PREV = 'prev';
+  const DIRECTION_LEFT = 'left';
+  const DIRECTION_RIGHT = 'right';
+  const EVENT_SLIDE = `slide${EVENT_KEY$8}`;
+  const EVENT_SLID = `slid${EVENT_KEY$8}`;
+  const EVENT_KEYDOWN$1 = `keydown${EVENT_KEY$8}`;
+  const EVENT_MOUSEENTER$1 = `mouseenter${EVENT_KEY$8}`;
+  const EVENT_MOUSELEAVE$1 = `mouseleave${EVENT_KEY$8}`;
+  const EVENT_DRAG_START = `dragstart${EVENT_KEY$8}`;
+  const EVENT_LOAD_DATA_API$3 = `load${EVENT_KEY$8}${DATA_API_KEY$5}`;
+  const EVENT_CLICK_DATA_API$5 = `click${EVENT_KEY$8}${DATA_API_KEY$5}`;
+  const CLASS_NAME_CAROUSEL = 'carousel';
+  const CLASS_NAME_ACTIVE$2 = 'active';
+  const CLASS_NAME_SLIDE = 'slide';
+  const CLASS_NAME_END = 'carousel-item-end';
+  const CLASS_NAME_START = 'carousel-item-start';
+  const CLASS_NAME_NEXT = 'carousel-item-next';
+  const CLASS_NAME_PREV = 'carousel-item-prev';
+  const SELECTOR_ACTIVE = '.active';
+  const SELECTOR_ITEM = '.carousel-item';
+  const SELECTOR_ACTIVE_ITEM = SELECTOR_ACTIVE + SELECTOR_ITEM;
+  const SELECTOR_ITEM_IMG = '.carousel-item img';
+  const SELECTOR_INDICATORS = '.carousel-indicators';
+  const SELECTOR_DATA_SLIDE = '[data-bs-slide], [data-bs-slide-to]';
+  const SELECTOR_DATA_RIDE = '[data-bs-ride="carousel"]';
+  const KEY_TO_DIRECTION = {
+    [ARROW_LEFT_KEY$1]: DIRECTION_RIGHT,
+    [ARROW_RIGHT_KEY$1]: DIRECTION_LEFT
+  };
+  const Default$b = {
+    interval: 5000,
+    keyboard: true,
+    pause: 'hover',
+    ride: false,
+    touch: true,
+    wrap: true
+  };
+  const DefaultType$b = {
+    interval: '(number|boolean)',
+    // TODO:v6 remove boolean support
+    keyboard: 'boolean',
+    pause: '(string|boolean)',
+    ride: '(boolean|string)',
+    touch: 'boolean',
+    wrap: 'boolean'
+  };
+
+  /**
+   * Class definition
+   */
+
+  class Carousel extends BaseComponent {
+    constructor(element, config) {
+      super(element, config);
+      this._interval = null;
+      this._activeElement = null;
+      this._isSliding = false;
+      this.touchTimeout = null;
+      this._swipeHelper = null;
+      this._indicatorsElement = SelectorEngine.findOne(SELECTOR_INDICATORS, this._element);
+      this._addEventListeners();
+      if (this._config.ride === CLASS_NAME_CAROUSEL) {
+        this.cycle();
+      }
+    }
+
+    // Getters
+    static get Default() {
+      return Default$b;
+    }
+    static get DefaultType() {
+      return DefaultType$b;
+    }
+    static get NAME() {
+      return NAME$c;
+    }
+
+    // Public
+    next() {
+      this._slide(ORDER_NEXT);
+    }
+    nextWhenVisible() {
+      // FIXME TODO use `document.visibilityState`
+      // Don't call next when the page isn't visible
+      // or the carousel or its parent isn't visible
+      if (!document.hidden && isVisible(this._element)) {
+        this.next();
+      }
+    }
+    prev() {
+      this._slide(ORDER_PREV);
+    }
+    pause() {
+      if (this._isSliding) {
+        triggerTransitionEnd(this._element);
+      }
+      this._clearInterval();
+    }
+    cycle() {
+      this._clearInterval();
+      this._updateInterval();
+      this._interval = setInterval(() => this.nextWhenVisible(), this._config.interval);
+    }
+    _maybeEnableCycle() {
+      if (!this._config.ride) {
+        return;
+      }
+      if (this._isSliding) {
+        EventHandler.one(this._element, EVENT_SLID, () => this.cycle());
+        return;
+      }
+      this.cycle();
+    }
+    to(index) {
+      const items = this._getItems();
+      if (index > items.length - 1 || index < 0) {
+        return;
+      }
+      if (this._isSliding) {
+        EventHandler.one(this._element, EVENT_SLID, () => this.to(index));
+        return;
+      }
+      const activeIndex = this._getItemIndex(this._getActive());
+      if (activeIndex === index) {
+        return;
+      }
+      const order = index > activeIndex ? ORDER_NEXT : ORDER_PREV;
+      this._slide(order, items[index]);
+    }
+    dispose() {
+      if (this._swipeHelper) {
+        this._swipeHelper.dispose();
+      }
+      super.dispose();
+    }
+
+    // Private
+    _configAfterMerge(config) {
+      config.defaultInterval = config.interval;
+      return config;
+    }
+    _addEventListeners() {
+      if (this._config.keyboard) {
+        EventHandler.on(this._element, EVENT_KEYDOWN$1, event => this._keydown(event));
+      }
+      if (this._config.pause === 'hover') {
+        EventHandler.on(this._element, EVENT_MOUSEENTER$1, () => this.pause());
+        EventHandler.on(this._element, EVENT_MOUSELEAVE$1, () => this._maybeEnableCycle());
+      }
+      if (this._config.touch && Swipe.isSupported()) {
+        this._addTouchEventListeners();
+      }
+    }
+    _addTouchEventListeners() {
+      for (const img of SelectorEngine.find(SELECTOR_ITEM_IMG, this._element)) {
+        EventHandler.on(img, EVENT_DRAG_START, event => event.preventDefault());
+      }
+      const endCallBack = () => {
+        if (this._config.pause !== 'hover') {
+          return;
+        }
+
+        // If it's a touch-enabled device, mouseenter/leave are fired as
+        // part of the mouse compatibility events on first tap - the carousel
+        // would stop cycling until user tapped out of it;
+        // here, we listen for touchend, explicitly pause the carousel
+        // (as if it's the second time we tap on it, mouseenter compat event
+        // is NOT fired) and after a timeout (to allow for mouse compatibility
+        // events to fire) we explicitly restart cycling
+
+        this.pause();
+        if (this.touchTimeout) {
+          clearTimeout(this.touchTimeout);
+        }
+        this.touchTimeout = setTimeout(() => this._maybeEnableCycle(), TOUCHEVENT_COMPAT_WAIT + this._config.interval);
+      };
+      const swipeConfig = {
+        leftCallback: () => this._slide(this._directionToOrder(DIRECTION_LEFT)),
+        rightCallback: () => this._slide(this._directionToOrder(DIRECTION_RIGHT)),
+        endCallback: endCallBack
+      };
+      this._swipeHelper = new Swipe(this._element, swipeConfig);
+    }
+    _keydown(event) {
+      if (/input|textarea/i.test(event.target.tagName)) {
+        return;
+      }
+      const direction = KEY_TO_DIRECTION[event.key];
+      if (direction) {
+        event.preventDefault();
+        this._slide(this._directionToOrder(direction));
+      }
+    }
+    _getItemIndex(element) {
+      return this._getItems().indexOf(element);
+    }
+    _setActiveIndicatorElement(index) {
+      if (!this._indicatorsElement) {
+        return;
+      }
+      const activeIndicator = SelectorEngine.findOne(SELECTOR_ACTIVE, this._indicatorsElement);
+      activeIndicator.classList.remove(CLASS_NAME_ACTIVE$2);
+      activeIndicator.removeAttribute('aria-current');
+      const newActiveIndicator = SelectorEngine.findOne(`[data-bs-slide-to="${index}"]`, this._indicatorsElement);
+      if (newActiveIndicator) {
+        newActiveIndicator.classList.add(CLASS_NAME_ACTIVE$2);
+        newActiveIndicator.setAttribute('aria-current', 'true');
+      }
+    }
+    _updateInterval() {
+      const element = this._activeElement || this._getActive();
+      if (!element) {
+        return;
+      }
+      const elementInterval = Number.parseInt(element.getAttribute('data-bs-interval'), 10);
+      this._config.interval = elementInterval || this._config.defaultInterval;
+    }
+    _slide(order, element = null) {
+      if (this._isSliding) {
+        return;
+      }
+      const activeElement = this._getActive();
+      const isNext = order === ORDER_NEXT;
+      const nextElement = element || getNextActiveElement(this._getItems(), activeElement, isNext, this._config.wrap);
+      if (nextElement === activeElement) {
+        return;
+      }
+      const nextElementIndex = this._getItemIndex(nextElement);
+      const triggerEvent = eventName => {
+        return EventHandler.trigger(this._element, eventName, {
+          relatedTarget: nextElement,
+          direction: this._orderToDirection(order),
+          from: this._getItemIndex(activeElement),
+          to: nextElementIndex
+        });
+      };
+      const slideEvent = triggerEvent(EVENT_SLIDE);
+      if (slideEvent.defaultPrevented) {
+        return;
+      }
+      if (!activeElement || !nextElement) {
+        // Some weirdness is happening, so we bail
+        // TODO: change tests that use empty divs to avoid this check
+        return;
+      }
+      const isCycling = Boolean(this._interval);
+      this.pause();
+      this._isSliding = true;
+      this._setActiveIndicatorElement(nextElementIndex);
+      this._activeElement = nextElement;
+      const directionalClassName = isNext ? CLASS_NAME_START : CLASS_NAME_END;
+      const orderClassName = isNext ? CLASS_NAME_NEXT : CLASS_NAME_PREV;
+      nextElement.classList.add(orderClassName);
+      reflow(nextElement);
+      activeElement.classList.add(directionalClassName);
+      nextElement.classList.add(directionalClassName);
+      const completeCallBack = () => {
+        nextElement.classList.remove(directionalClassName, orderClassName);
+        nextElement.classList.add(CLASS_NAME_ACTIVE$2);
+        activeElement.classList.remove(CLASS_NAME_ACTIVE$2, orderClassName, directionalClassName);
+        this._isSliding = false;
+        triggerEvent(EVENT_SLID);
+      };
+      this._queueCallback(completeCallBack, activeElement, this._isAnimated());
+      if (isCycling) {
+        this.cycle();
+      }
+    }
+    _isAnimated() {
+      return this._element.classList.contains(CLASS_NAME_SLIDE);
+    }
+    _getActive() {
+      return SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);
+    }
+    _getItems() {
+      return SelectorEngine.find(SELECTOR_ITEM, this._element);
+    }
+    _clearInterval() {
+      if (this._interval) {
+        clearInterval(this._interval);
+        this._interval = null;
+      }
+    }
+    _directionToOrder(direction) {
+      if (isRTL()) {
+        return direction === DIRECTION_LEFT ? ORDER_PREV : ORDER_NEXT;
+      }
+      return direction === DIRECTION_LEFT ? ORDER_NEXT : ORDER_PREV;
+    }
+    _orderToDirection(order) {
+      if (isRTL()) {
+        return order === ORDER_PREV ? DIRECTION_LEFT : DIRECTION_RIGHT;
+      }
+      return order === ORDER_PREV ? DIRECTION_RIGHT : DIRECTION_LEFT;
+    }
+
+    // Static
+    static jQueryInterface(config) {
+      return this.each(function () {
+        const data = Carousel.getOrCreateInstance(this, config);
+        if (typeof config === 'number') {
+          data.to(config);
+          return;
+        }
+        if (typeof config === 'string') {
+          if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {
+            throw new TypeError(`No method named "${config}"`);
+          }
+          data[config]();
+        }
+      });
+    }
+  }
+
+  /**
+   * Data API implementation
+   */
+
+  EventHandler.on(document, EVENT_CLICK_DATA_API$5, SELECTOR_DATA_SLIDE, function (event) {
+    const target = SelectorEngine.getElementFromSelector(this);
+    if (!target || !target.classList.contains(CLASS_NAME_CAROUSEL)) {
+      return;
+    }
+    event.preventDefault();
+    const carousel = Carousel.getOrCreateInstance(target);
+    const slideIndex = this.getAttribute('data-bs-slide-to');
+    if (slideIndex) {
+      carousel.to(slideIndex);
+      carousel._maybeEnableCycle();
+      return;
+    }
+    if (Manipulator.getDataAttribute(this, 'slide') === 'next') {
+      carousel.next();
+      carousel._maybeEnableCycle();
+      return;
+    }
+    carousel.prev();
+    carousel._maybeEnableCycle();
+  });
+  EventHandler.on(window, EVENT_LOAD_DATA_API$3, () => {
+    const carousels = SelectorEngine.find(SELECTOR_DATA_RIDE);
+    for (const carousel of carousels) {
+      Carousel.getOrCreateInstance(carousel);
+    }
+  });
+
+  /**
+   * jQuery
+   */
+
+  defineJQueryPlugin(Carousel);
+
+  /**
+   * --------------------------------------------------------------------------
+   * Bootstrap collapse.js
+   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
+   * --------------------------------------------------------------------------
+   */
+
+
+  /**
+   * Constants
+   */
+
+  const NAME$b = 'collapse';
+  const DATA_KEY$7 = 'bs.collapse';
+  const EVENT_KEY$7 = `.${DATA_KEY$7}`;
+  const DATA_API_KEY$4 = '.data-api';
+  const EVENT_SHOW$6 = `show${EVENT_KEY$7}`;
+  const EVENT_SHOWN$6 = `shown${EVENT_KEY$7}`;
+  const EVENT_HIDE$6 = `hide${EVENT_KEY$7}`;
+  const EVENT_HIDDEN$6 = `hidden${EVENT_KEY$7}`;
+  const EVENT_CLICK_DATA_API$4 = `click${EVENT_KEY$7}${DATA_API_KEY$4}`;
+  const CLASS_NAME_SHOW$7 = 'show';
+  const CLASS_NAME_COLLAPSE = 'collapse';
+  const CLASS_NAME_COLLAPSING = 'collapsing';
+  const CLASS_NAME_COLLAPSED = 'collapsed';
+  const CLASS_NAME_DEEPER_CHILDREN = `:scope .${CLASS_NAME_COLLAPSE} .${CLASS_NAME_COLLAPSE}`;
+  const CLASS_NAME_HORIZONTAL = 'collapse-horizontal';
+  const WIDTH = 'width';
+  const HEIGHT = 'height';
+  const SELECTOR_ACTIVES = '.collapse.show, .collapse.collapsing';
+  const SELECTOR_DATA_TOGGLE$4 = '[data-bs-toggle="collapse"]';
+  const Default$a = {
+    parent: null,
+    toggle: true
+  };
+  const DefaultType$a = {
+    parent: '(null|element)',
+    toggle: 'boolean'
+  };
+
+  /**
+   * Class definition
+   */
+
+  class Collapse extends BaseComponent {
+    constructor(element, config) {
+      super(element, config);
+      this._isTransitioning = false;
+      this._triggerArray = [];
+      const toggleList = SelectorEngine.find(SELECTOR_DATA_TOGGLE$4);
+      for (const elem of toggleList) {
+        const selector = SelectorEngine.getSelectorFromElement(elem);
+        const filterElement = SelectorEngine.find(selector).filter(foundElement => foundElement === this._element);
+        if (selector !== null && filterElement.length) {
+          this._triggerArray.push(elem);
+        }
+      }
+      this._initializeChildren();
+      if (!this._config.parent) {
+        this._addAriaAndCollapsedClass(this._triggerArray, this._isShown());
+      }
+      if (this._config.toggle) {
+        this.toggle();
+      }
+    }
+
+    // Getters
+    static get Default() {
+      return Default$a;
+    }
+    static get DefaultType() {
+      return DefaultType$a;
+    }
+    static get NAME() {
+      return NAME$b;
+    }
+
+    // Public
+    toggle() {
+      if (this._isShown()) {
+        this.hide();
+      } else {
+        this.show();
+      }
+    }
+    show() {
+      if (this._isTransitioning || this._isShown()) {
+        return;
+      }
+      let activeChildren = [];
+
+      // find active children
+      if (this._config.parent) {
+        activeChildren = this._getFirstLevelChildren(SELECTOR_ACTIVES).filter(element => element !== this._element).map(element => Collapse.getOrCreateInstance(element, {
+          toggle: false
+        }));
+      }
+      if (activeChildren.length && activeChildren[0]._isTransitioning) {
+        return;
+      }
+      const startEvent = EventHandler.trigger(this._element, EVENT_SHOW$6);
+      if (startEvent.defaultPrevented) {
+        return;
+      }
+      for (const activeInstance of activeChildren) {
+        activeInstance.hide();
+      }
+      const dimension = this._getDimension();
+      this._element.classList.remove(CLASS_NAME_COLLAPSE);
+      this._element.classList.add(CLASS_NAME_COLLAPSING);
+      this._element.style[dimension] = 0;
+      this._addAriaAndCollapsedClass(this._triggerArray, true);
+      this._isTransitioning = true;
+      const complete = () => {
+        this._isTransitioning = false;
+        this._element.classList.remove(CLASS_NAME_COLLAPSING);
+        this._element.classList.add(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$7);
+        this._element.style[dimension] = '';
+        EventHandler.trigger(this._element, EVENT_SHOWN$6);
+      };
+      const capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1);
+      const scrollSize = `scroll${capitalizedDimension}`;
+      this._queueCallback(complete, this._element, true);
+      this._element.style[dimension] = `${this._element[scrollSize]}px`;
+    }
+    hide() {
+      if (this._isTransitioning || !this._isShown()) {
+        return;
+      }
+      const startEvent = EventHandler.trigger(this._element, EVENT_HIDE$6);
+      if (startEvent.defaultPrevented) {
+        return;
+      }
+      const dimension = this._getDimension();
+      this._element.style[dimension] = `${this._element.getBoundingClientRect()[dimension]}px`;
+      reflow(this._element);
+      this._element.classList.add(CLASS_NAME_COLLAPSING);
+      this._element.classList.remove(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$7);
+      for (const trigger of this._triggerArray) {
+        const element = SelectorEngine.getElementFromSelector(trigger);
+        if (element && !this._isShown(element)) {
+          this._addAriaAndCollapsedClass([trigger], false);
+        }
+      }
+      this._isTransitioning = true;
+      const complete = () => {
+        this._isTransitioning = false;
+        this._element.classList.remove(CLASS_NAME_COLLAPSING);
+        this._element.classList.add(CLASS_NAME_COLLAPSE);
+        EventHandler.trigger(this._element, EVENT_HIDDEN$6);
+      };
+      this._element.style[dimension] = '';
+      this._queueCallback(complete, this._element, true);
+    }
+    _isShown(element = this._element) {
+      return element.classList.contains(CLASS_NAME_SHOW$7);
+    }
+
+    // Private
+    _configAfterMerge(config) {
+      config.toggle = Boolean(config.toggle); // Coerce string values
+      config.parent = getElement(config.parent);
+      return config;
+    }
+    _getDimension() {
+      return this._element.classList.contains(CLASS_NAME_HORIZONTAL) ? WIDTH : HEIGHT;
+    }
+    _initializeChildren() {
+      if (!this._config.parent) {
+        return;
+      }
+      const children = this._getFirstLevelChildren(SELECTOR_DATA_TOGGLE$4);
+      for (const element of children) {
+        const selected = SelectorEngine.getElementFromSelector(element);
+        if (selected) {
+          this._addAriaAndCollapsedClass([element], this._isShown(selected));
+        }
+      }
+    }
+    _getFirstLevelChildren(selector) {
+      const children = SelectorEngine.find(CLASS_NAME_DEEPER_CHILDREN, this._config.parent);
+      // remove children if greater depth
+      return SelectorEngine.find(selector, this._config.parent).filter(element => !children.includes(element));
+    }
+    _addAriaAndCollapsedClass(triggerArray, isOpen) {
+      if (!triggerArray.length) {
+        return;
+      }
+      for (const element of triggerArray) {
+        element.classList.toggle(CLASS_NAME_COLLAPSED, !isOpen);
+        element.setAttribute('aria-expanded', isOpen);
+      }
+    }
+
+    // Static
+    static jQueryInterface(config) {
+      const _config = {};
+      if (typeof config === 'string' && /show|hide/.test(config)) {
+        _config.toggle = false;
+      }
+      return this.each(function () {
+        const data = Collapse.getOrCreateInstance(this, _config);
+        if (typeof config === 'string') {
+          if (typeof data[config] === 'undefined') {
+            throw new TypeError(`No method named "${config}"`);
+          }
+          data[config]();
+        }
+      });
+    }
+  }
+
+  /**
+   * Data API implementation
+   */
+
+  EventHandler.on(document, EVENT_CLICK_DATA_API$4, SELECTOR_DATA_TOGGLE$4, function (event) {
+    // preventDefault only for <a> elements (which change the URL) not inside the collapsible element
+    if (event.target.tagName === 'A' || event.delegateTarget && event.delegateTarget.tagName === 'A') {
+      event.preventDefault();
+    }
+    for (const element of SelectorEngine.getMultipleElementsFromSelector(this)) {
+      Collapse.getOrCreateInstance(element, {
+        toggle: false
+      }).toggle();
+    }
+  });
+
+  /**
+   * jQuery
+   */
+
+  defineJQueryPlugin(Collapse);
+
+  /**
+   * --------------------------------------------------------------------------
+   * Bootstrap dropdown.js
+   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
+   * --------------------------------------------------------------------------
+   */
+
+
+  /**
+   * Constants
+   */
+
+  const NAME$a = 'dropdown';
+  const DATA_KEY$6 = 'bs.dropdown';
+  const EVENT_KEY$6 = `.${DATA_KEY$6}`;
+  const DATA_API_KEY$3 = '.data-api';
+  const ESCAPE_KEY$2 = 'Escape';
+  const TAB_KEY$1 = 'Tab';
+  const ARROW_UP_KEY$1 = 'ArrowUp';
+  const ARROW_DOWN_KEY$1 = 'ArrowDown';
+  const RIGHT_MOUSE_BUTTON = 2; // MouseEvent.button value for the secondary button, usually the right button
+
+  const EVENT_HIDE$5 = `hide${EVENT_KEY$6}`;
+  const EVENT_HIDDEN$5 = `hidden${EVENT_KEY$6}`;
+  const EVENT_SHOW$5 = `show${EVENT_KEY$6}`;
+  const EVENT_SHOWN$5 = `shown${EVENT_KEY$6}`;
+  const EVENT_CLICK_DATA_API$3 = `click${EVENT_KEY$6}${DATA_API_KEY$3}`;
+  const EVENT_KEYDOWN_DATA_API = `keydown${EVENT_KEY$6}${DATA_API_KEY$3}`;
+  const EVENT_KEYUP_DATA_API = `keyup${EVENT_KEY$6}${DATA_API_KEY$3}`;
+  const CLASS_NAME_SHOW$6 = 'show';
+  const CLASS_NAME_DROPUP = 'dropup';
+  const CLASS_NAME_DROPEND = 'dropend';
+  const CLASS_NAME_DROPSTART = 'dropstart';
+  const CLASS_NAME_DROPUP_CENTER = 'dropup-center';
+  const CLASS_NAME_DROPDOWN_CENTER = 'dropdown-center';
+  const SELECTOR_DATA_TOGGLE$3 = '[data-bs-toggle="dropdown"]:not(.disabled):not(:disabled)';
+  const SELECTOR_DATA_TOGGLE_SHOWN = `${SELECTOR_DATA_TOGGLE$3}.${CLASS_NAME_SHOW$6}`;
+  const SELECTOR_MENU = '.dropdown-menu';
+  const SELECTOR_NAVBAR = '.navbar';
+  const SELECTOR_NAVBAR_NAV = '.navbar-nav';
+  const SELECTOR_VISIBLE_ITEMS = '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)';
+  const PLACEMENT_TOP = isRTL() ? 'top-end' : 'top-start';
+  const PLACEMENT_TOPEND = isRTL() ? 'top-start' : 'top-end';
+  const PLACEMENT_BOTTOM = isRTL() ? 'bottom-end' : 'bottom-start';
+  const PLACEMENT_BOTTOMEND = isRTL() ? 'bottom-start' : 'bottom-end';
+  const PLACEMENT_RIGHT = isRTL() ? 'left-start' : 'right-start';
+  const PLACEMENT_LEFT = isRTL() ? 'right-start' : 'left-start';
+  const PLACEMENT_TOPCENTER = 'top';
+  const PLACEMENT_BOTTOMCENTER = 'bottom';
+  const Default$9 = {
+    autoClose: true,
+    boundary: 'clippingParents',
+    display: 'dynamic',
+    offset: [0, 2],
+    popperConfig: null,
+    reference: 'toggle'
+  };
+  const DefaultType$9 = {
+    autoClose: '(boolean|string)',
+    boundary: '(string|element)',
+    display: 'string',
+    offset: '(array|string|function)',
+    popperConfig: '(null|object|function)',
+    reference: '(string|element|object)'
+  };
+
+  /**
+   * Class definition
+   */
+
+  class Dropdown extends BaseComponent {
+    constructor(element, config) {
+      super(element, config);
+      this._popper = null;
+      this._parent = this._element.parentNode; // dropdown wrapper
+      // TODO: v6 revert #37011 & change markup https://getbootstrap.com/docs/5.3/forms/input-group/
+      this._menu = SelectorEngine.next(this._element, SELECTOR_MENU)[0] || SelectorEngine.prev(this._element, SELECTOR_MENU)[0] || SelectorEngine.findOne(SELECTOR_MENU, this._parent);
+      this._inNavbar = this._detectNavbar();
+    }
+
+    // Getters
+    static get Default() {
+      return Default$9;
+    }
+    static get DefaultType() {
+      return DefaultType$9;
+    }
+    static get NAME() {
+      return NAME$a;
+    }
+
+    // Public
+    toggle() {
+      return this._isShown() ? this.hide() : this.show();
+    }
+    show() {
+      if (isDisabled(this._element) || this._isShown()) {
+        return;
+      }
+      const relatedTarget = {
+        relatedTarget: this._element
+      };
+      const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$5, relatedTarget);
+      if (showEvent.defaultPrevented) {
+        return;
+      }
+      this._createPopper();
+
+      // If this is a touch-enabled device we add extra
+      // empty mouseover listeners to the body's immediate children;
+      // only needed because of broken event delegation on iOS
+      // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html
+      if ('ontouchstart' in document.documentElement && !this._parent.closest(SELECTOR_NAVBAR_NAV)) {
+        for (const element of [].concat(...document.body.children)) {
+          EventHandler.on(element, 'mouseover', noop);
+        }
+      }
+      this._element.focus();
+      this._element.setAttribute('aria-expanded', true);
+      this._menu.classList.add(CLASS_NAME_SHOW$6);
+      this._element.classList.add(CLASS_NAME_SHOW$6);
+      EventHandler.trigger(this._element, EVENT_SHOWN$5, relatedTarget);
+    }
+    hide() {
+      if (isDisabled(this._element) || !this._isShown()) {
+        return;
+      }
+      const relatedTarget = {
+        relatedTarget: this._element
+      };
+      this._completeHide(relatedTarget);
+    }
+    dispose() {
+      if (this._popper) {
+        this._popper.destroy();
+      }
+      super.dispose();
+    }
+    update() {
+      this._inNavbar = this._detectNavbar();
+      if (this._popper) {
+        this._popper.update();
+      }
+    }
+
+    // Private
+    _completeHide(relatedTarget) {
+      const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$5, relatedTarget);
+      if (hideEvent.defaultPrevented) {
+        return;
+      }
+
+      // If this is a touch-enabled device we remove the extra
+      // empty mouseover listeners we added for iOS support
+      if ('ontouchstart' in document.documentElement) {
+        for (const element of [].concat(...document.body.children)) {
+          EventHandler.off(element, 'mouseover', noop);
+        }
+      }
+      if (this._popper) {
+        this._popper.destroy();
+      }
+      this._menu.classList.remove(CLASS_NAME_SHOW$6);
+      this._element.classList.remove(CLASS_NAME_SHOW$6);
+      this._element.setAttribute('aria-expanded', 'false');
+      Manipulator.removeDataAttribute(this._menu, 'popper');
+      EventHandler.trigger(this._element, EVENT_HIDDEN$5, relatedTarget);
+    }
+    _getConfig(config) {
+      config = super._getConfig(config);
+      if (typeof config.reference === 'object' && !isElement(config.reference) && typeof config.reference.getBoundingClientRect !== 'function') {
+        // Popper virtual elements require a getBoundingClientRect method
+        throw new TypeError(`${NAME$a.toUpperCase()}: Option "reference" provided type "object" without a required "getBoundingClientRect" method.`);
+      }
+      return config;
+    }
+    _createPopper() {
+      if (typeof Popper__namespace === 'undefined') {
+        throw new TypeError('Bootstrap\'s dropdowns require Popper (https://popper.js.org)');
+      }
+      let referenceElement = this._element;
+      if (this._config.reference === 'parent') {
+        referenceElement = this._parent;
+      } else if (isElement(this._config.reference)) {
+        referenceElement = getElement(this._config.reference);
+      } else if (typeof this._config.reference === 'object') {
+        referenceElement = this._config.reference;
+      }
+      const popperConfig = this._getPopperConfig();
+      this._popper = Popper__namespace.createPopper(referenceElement, this._menu, popperConfig);
+    }
+    _isShown() {
+      return this._menu.classList.contains(CLASS_NAME_SHOW$6);
+    }
+    _getPlacement() {
+      const parentDropdown = this._parent;
+      if (parentDropdown.classList.contains(CLASS_NAME_DROPEND)) {
+        return PLACEMENT_RIGHT;
+      }
+      if (parentDropdown.classList.contains(CLASS_NAME_DROPSTART)) {
+        return PLACEMENT_LEFT;
+      }
+      if (parentDropdown.classList.contains(CLASS_NAME_DROPUP_CENTER)) {
+        return PLACEMENT_TOPCENTER;
+      }
+      if (parentDropdown.classList.contains(CLASS_NAME_DROPDOWN_CENTER)) {
+        return PLACEMENT_BOTTOMCENTER;
+      }
+
+      // We need to trim the value because custom properties can also include spaces
+      const isEnd = getComputedStyle(this._menu).getPropertyValue('--bs-position').trim() === 'end';
+      if (parentDropdown.classList.contains(CLASS_NAME_DROPUP)) {
+        return isEnd ? PLACEMENT_TOPEND : PLACEMENT_TOP;
+      }
+      return isEnd ? PLACEMENT_BOTTOMEND : PLACEMENT_BOTTOM;
+    }
+    _detectNavbar() {
+      return this._element.closest(SELECTOR_NAVBAR) !== null;
+    }
+    _getOffset() {
+      const {
+        offset
+      } = this._config;
+      if (typeof offset === 'string') {
+        return offset.split(',').map(value => Number.parseInt(value, 10));
+      }
+      if (typeof offset === 'function') {
+        return popperData => offset(popperData, this._element);
+      }
+      return offset;
+    }
+    _getPopperConfig() {
+      const defaultBsPopperConfig = {
+        placement: this._getPlacement(),
+        modifiers: [{
+          name: 'preventOverflow',
+          options: {
+            boundary: this._config.boundary
+          }
+        }, {
+          name: 'offset',
+          options: {
+            offset: this._getOffset()
+          }
+        }]
+      };
+
+      // Disable Popper if we have a static display or Dropdown is in Navbar
+      if (this._inNavbar || this._config.display === 'static') {
+        Manipulator.setDataAttribute(this._menu, 'popper', 'static'); // TODO: v6 remove
+        defaultBsPopperConfig.modifiers = [{
+          name: 'applyStyles',
+          enabled: false
+        }];
+      }
+      return {
+        ...defaultBsPopperConfig,
+        ...execute(this._config.popperConfig, [defaultBsPopperConfig])
+      };
+    }
+    _selectMenuItem({
+      key,
+      target
+    }) {
+      const items = SelectorEngine.find(SELECTOR_VISIBLE_ITEMS, this._menu).filter(element => isVisible(element));
+      if (!items.length) {
+        return;
+      }
+
+      // if target isn't included in items (e.g. when expanding the dropdown)
+      // allow cycling to get the last item in case key equals ARROW_UP_KEY
+      getNextActiveElement(items, target, key === ARROW_DOWN_KEY$1, !items.includes(target)).focus();
+    }
+
+    // Static
+    static jQueryInterface(config) {
+      return this.each(function () {
+        const data = Dropdown.getOrCreateInstance(this, config);
+        if (typeof config !== 'string') {
+          return;
+        }
+        if (typeof data[config] === 'undefined') {
+          throw new TypeError(`No method named "${config}"`);
+        }
+        data[config]();
+      });
+    }
+    static clearMenus(event) {
+      if (event.button === RIGHT_MOUSE_BUTTON || event.type === 'keyup' && event.key !== TAB_KEY$1) {
+        return;
+      }
+      const openToggles = SelectorEngine.find(SELECTOR_DATA_TOGGLE_SHOWN);
+      for (const toggle of openToggles) {
+        const context = Dropdown.getInstance(toggle);
+        if (!context || context._config.autoClose === false) {
+          continue;
+        }
+        const composedPath = event.composedPath();
+        const isMenuTarget = composedPath.includes(context._menu);
+        if (composedPath.includes(context._element) || context._config.autoClose === 'inside' && !isMenuTarget || context._config.autoClose === 'outside' && isMenuTarget) {
+          continue;
+        }
+
+        // Tab navigation through the dropdown menu or events from contained inputs shouldn't close the menu
+        if (context._menu.contains(event.target) && (event.type === 'keyup' && event.key === TAB_KEY$1 || /input|select|option|textarea|form/i.test(event.target.tagName))) {
+          continue;
+        }
+        const relatedTarget = {
+          relatedTarget: context._element
+        };
+        if (event.type === 'click') {
+          relatedTarget.clickEvent = event;
+        }
+        context._completeHide(relatedTarget);
+      }
+    }
+    static dataApiKeydownHandler(event) {
+      // If not an UP | DOWN | ESCAPE key => not a dropdown command
+      // If input/textarea && if key is other than ESCAPE => not a dropdown command
+
+      const isInput = /input|textarea/i.test(event.target.tagName);
+      const isEscapeEvent = event.key === ESCAPE_KEY$2;
+      const isUpOrDownEvent = [ARROW_UP_KEY$1, ARROW_DOWN_KEY$1].includes(event.key);
+      if (!isUpOrDownEvent && !isEscapeEvent) {
+        return;
+      }
+      if (isInput && !isEscapeEvent) {
+        return;
+      }
+      event.preventDefault();
+
+      // TODO: v6 revert #37011 & change markup https://getbootstrap.com/docs/5.3/forms/input-group/
+      const getToggleButton = this.matches(SELECTOR_DATA_TOGGLE$3) ? this : SelectorEngine.prev(this, SELECTOR_DATA_TOGGLE$3)[0] || SelectorEngine.next(this, SELECTOR_DATA_TOGGLE$3)[0] || SelectorEngine.findOne(SELECTOR_DATA_TOGGLE$3, event.delegateTarget.parentNode);
+      const instance = Dropdown.getOrCreateInstance(getToggleButton);
+      if (isUpOrDownEvent) {
+        event.stopPropagation();
+        instance.show();
+        instance._selectMenuItem(event);
+        return;
+      }
+      if (instance._isShown()) {
+        // else is escape and we check if it is shown
+        event.stopPropagation();
+        instance.hide();
+        getToggleButton.focus();
+      }
+    }
+  }
+
+  /**
+   * Data API implementation
+   */
+
+  EventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE$3, Dropdown.dataApiKeydownHandler);
+  EventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown.dataApiKeydownHandler);
+  EventHandler.on(document, EVENT_CLICK_DATA_API$3, Dropdown.clearMenus);
+  EventHandler.on(document, EVENT_KEYUP_DATA_API, Dropdown.clearMenus);
+  EventHandler.on(document, EVENT_CLICK_DATA_API$3, SELECTOR_DATA_TOGGLE$3, function (event) {
+    event.preventDefault();
+    Dropdown.getOrCreateInstance(this).toggle();
+  });
+
+  /**
+   * jQuery
+   */
+
+  defineJQueryPlugin(Dropdown);
+
+  /**
+   * --------------------------------------------------------------------------
+   * Bootstrap util/backdrop.js
+   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
+   * --------------------------------------------------------------------------
+   */
+
+
+  /**
+   * Constants
+   */
+
+  const NAME$9 = 'backdrop';
+  const CLASS_NAME_FADE$4 = 'fade';
+  const CLASS_NAME_SHOW$5 = 'show';
+  const EVENT_MOUSEDOWN = `mousedown.bs.${NAME$9}`;
+  const Default$8 = {
+    className: 'modal-backdrop',
+    clickCallback: null,
+    isAnimated: false,
+    isVisible: true,
+    // if false, we use the backdrop helper without adding any element to the dom
+    rootElement: 'body' // give the choice to place backdrop under different elements
+  };
+
+  const DefaultType$8 = {
+    className: 'string',
+    clickCallback: '(function|null)',
+    isAnimated: 'boolean',
+    isVisible: 'boolean',
+    rootElement: '(element|string)'
+  };
+
+  /**
+   * Class definition
+   */
+
+  class Backdrop extends Config {
+    constructor(config) {
+      super();
+      this._config = this._getConfig(config);
+      this._isAppended = false;
+      this._element = null;
+    }
+
+    // Getters
+    static get Default() {
+      return Default$8;
+    }
+    static get DefaultType() {
+      return DefaultType$8;
+    }
+    static get NAME() {
+      return NAME$9;
+    }
+
+    // Public
+    show(callback) {
+      if (!this._config.isVisible) {
+        execute(callback);
+        return;
+      }
+      this._append();
+      const element = this._getElement();
+      if (this._config.isAnimated) {
+        reflow(element);
+      }
+      element.classList.add(CLASS_NAME_SHOW$5);
+      this._emulateAnimation(() => {
+        execute(callback);
+      });
+    }
+    hide(callback) {
+      if (!this._config.isVisible) {
+        execute(callback);
+        return;
+      }
+      this._getElement().classList.remove(CLASS_NAME_SHOW$5);
+      this._emulateAnimation(() => {
+        this.dispose();
+        execute(callback);
+      });
+    }
+    dispose() {
+      if (!this._isAppended) {
+        return;
+      }
+      EventHandler.off(this._element, EVENT_MOUSEDOWN);
+      this._element.remove();
+      this._isAppended = false;
+    }
+
+    // Private
+    _getElement() {
+      if (!this._element) {
+        const backdrop = document.createElement('div');
+        backdrop.className = this._config.className;
+        if (this._config.isAnimated) {
+          backdrop.classList.add(CLASS_NAME_FADE$4);
+        }
+        this._element = backdrop;
+      }
+      return this._element;
+    }
+    _configAfterMerge(config) {
+      // use getElement() with the default "body" to get a fresh Element on each instantiation
+      config.rootElement = getElement(config.rootElement);
+      return config;
+    }
+    _append() {
+      if (this._isAppended) {
+        return;
+      }
+      const element = this._getElement();
+      this._config.rootElement.append(element);
+      EventHandler.on(element, EVENT_MOUSEDOWN, () => {
+        execute(this._config.clickCallback);
+      });
+      this._isAppended = true;
+    }
+    _emulateAnimation(callback) {
+      executeAfterTransition(callback, this._getElement(), this._config.isAnimated);
+    }
+  }
+
+  /**
+   * --------------------------------------------------------------------------
+   * Bootstrap util/focustrap.js
+   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
+   * --------------------------------------------------------------------------
+   */
+
+
+  /**
+   * Constants
+   */
+
+  const NAME$8 = 'focustrap';
+  const DATA_KEY$5 = 'bs.focustrap';
+  const EVENT_KEY$5 = `.${DATA_KEY$5}`;
+  const EVENT_FOCUSIN$2 = `focusin${EVENT_KEY$5}`;
+  const EVENT_KEYDOWN_TAB = `keydown.tab${EVENT_KEY$5}`;
+  const TAB_KEY = 'Tab';
+  const TAB_NAV_FORWARD = 'forward';
+  const TAB_NAV_BACKWARD = 'backward';
+  const Default$7 = {
+    autofocus: true,
+    trapElement: null // The element to trap focus inside of
+  };
+
+  const DefaultType$7 = {
+    autofocus: 'boolean',
+    trapElement: 'element'
+  };
+
+  /**
+   * Class definition
+   */
+
+  class FocusTrap extends Config {
+    constructor(config) {
+      super();
+      this._config = this._getConfig(config);
+      this._isActive = false;
+      this._lastTabNavDirection = null;
+    }
+
+    // Getters
+    static get Default() {
+      return Default$7;
+    }
+    static get DefaultType() {
+      return DefaultType$7;
+    }
+    static get NAME() {
+      return NAME$8;
+    }
+
+    // Public
+    activate() {
+      if (this._isActive) {
+        return;
+      }
+      if (this._config.autofocus) {
+        this._config.trapElement.focus();
+      }
+      EventHandler.off(document, EVENT_KEY$5); // guard against infinite focus loop
+      EventHandler.on(document, EVENT_FOCUSIN$2, event => this._handleFocusin(event));
+      EventHandler.on(document, EVENT_KEYDOWN_TAB, event => this._handleKeydown(event));
+      this._isActive = true;
+    }
+    deactivate() {
+      if (!this._isActive) {
+        return;
+      }
+      this._isActive = false;
+      EventHandler.off(document, EVENT_KEY$5);
+    }
+
+    // Private
+    _handleFocusin(event) {
+      const {
+        trapElement
+      } = this._config;
+      if (event.target === document || event.target === trapElement || trapElement.contains(event.target)) {
+        return;
+      }
+      const elements = SelectorEngine.focusableChildren(trapElement);
+      if (elements.length === 0) {
+        trapElement.focus();
+      } else if (this._lastTabNavDirection === TAB_NAV_BACKWARD) {
+        elements[elements.length - 1].focus();
+      } else {
+        elements[0].focus();
+      }
+    }
+    _handleKeydown(event) {
+      if (event.key !== TAB_KEY) {
+        return;
+      }
+      this._lastTabNavDirection = event.shiftKey ? TAB_NAV_BACKWARD : TAB_NAV_FORWARD;
+    }
+  }
+
+  /**
+   * --------------------------------------------------------------------------
+   * Bootstrap util/scrollBar.js
+   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
+   * --------------------------------------------------------------------------
+   */
+
+
+  /**
+   * Constants
+   */
+
+  const SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top';
+  const SELECTOR_STICKY_CONTENT = '.sticky-top';
+  const PROPERTY_PADDING = 'padding-right';
+  const PROPERTY_MARGIN = 'margin-right';
+
+  /**
+   * Class definition
+   */
+
+  class ScrollBarHelper {
+    constructor() {
+      this._element = document.body;
+    }
+
+    // Public
+    getWidth() {
+      // https://developer.mozilla.org/en-US/docs/Web/API/Window/innerWidth#usage_notes
+      const documentWidth = document.documentElement.clientWidth;
+      return Math.abs(window.innerWidth - documentWidth);
+    }
+    hide() {
+      const width = this.getWidth();
+      this._disableOverFlow();
+      // give padding to element to balance the hidden scrollbar width
+      this._setElementAttributes(this._element, PROPERTY_PADDING, calculatedValue => calculatedValue + width);
+      // trick: We adjust positive paddingRight and negative marginRight to sticky-top elements to keep showing fullwidth
+      this._setElementAttributes(SELECTOR_FIXED_CONTENT, PROPERTY_PADDING, calculatedValue => calculatedValue + width);
+      this._setElementAttributes(SELECTOR_STICKY_CONTENT, PROPERTY_MARGIN, calculatedValue => calculatedValue - width);
+    }
+    reset() {
+      this._resetElementAttributes(this._element, 'overflow');
+      this._resetElementAttributes(this._element, PROPERTY_PADDING);
+      this._resetElementAttributes(SELECTOR_FIXED_CONTENT, PROPERTY_PADDING);
+      this._resetElementAttributes(SELECTOR_STICKY_CONTENT, PROPERTY_MARGIN);
+    }
+    isOverflowing() {
+      return this.getWidth() > 0;
+    }
+
+    // Private
+    _disableOverFlow() {
+      this._saveInitialAttribute(this._element, 'overflow');
+      this._element.style.overflow = 'hidden';
+    }
+    _setElementAttributes(selector, styleProperty, callback) {
+      const scrollbarWidth = this.getWidth();
+      const manipulationCallBack = element => {
+        if (element !== this._element && window.innerWidth > element.clientWidth + scrollbarWidth) {
+          return;
+        }
+        this._saveInitialAttribute(element, styleProperty);
+        const calculatedValue = window.getComputedStyle(element).getPropertyValue(styleProperty);
+        element.style.setProperty(styleProperty, `${callback(Number.parseFloat(calculatedValue))}px`);
+      };
+      this._applyManipulationCallback(selector, manipulationCallBack);
+    }
+    _saveInitialAttribute(element, styleProperty) {
+      const actualValue = element.style.getPropertyValue(styleProperty);
+      if (actualValue) {
+        Manipulator.setDataAttribute(element, styleProperty, actualValue);
+      }
+    }
+    _resetElementAttributes(selector, styleProperty) {
+      const manipulationCallBack = element => {
+        const value = Manipulator.getDataAttribute(element, styleProperty);
+        // We only want to remove the property if the value is `null`; the value can also be zero
+        if (value === null) {
+          element.style.removeProperty(styleProperty);
+          return;
+        }
+        Manipulator.removeDataAttribute(element, styleProperty);
+        element.style.setProperty(styleProperty, value);
+      };
+      this._applyManipulationCallback(selector, manipulationCallBack);
+    }
+    _applyManipulationCallback(selector, callBack) {
+      if (isElement(selector)) {
+        callBack(selector);
+        return;
+      }
+      for (const sel of SelectorEngine.find(selector, this._element)) {
+        callBack(sel);
+      }
+    }
+  }
+
+  /**
+   * --------------------------------------------------------------------------
+   * Bootstrap modal.js
+   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
+   * --------------------------------------------------------------------------
+   */
+
+
+  /**
+   * Constants
+   */
+
+  const NAME$7 = 'modal';
+  const DATA_KEY$4 = 'bs.modal';
+  const EVENT_KEY$4 = `.${DATA_KEY$4}`;
+  const DATA_API_KEY$2 = '.data-api';
+  const ESCAPE_KEY$1 = 'Escape';
+  const EVENT_HIDE$4 = `hide${EVENT_KEY$4}`;
+  const EVENT_HIDE_PREVENTED$1 = `hidePrevented${EVENT_KEY$4}`;
+  const EVENT_HIDDEN$4 = `hidden${EVENT_KEY$4}`;
+  const EVENT_SHOW$4 = `show${EVENT_KEY$4}`;
+  const EVENT_SHOWN$4 = `shown${EVENT_KEY$4}`;
+  const EVENT_RESIZE$1 = `resize${EVENT_KEY$4}`;
+  const EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY$4}`;
+  const EVENT_MOUSEDOWN_DISMISS = `mousedown.dismiss${EVENT_KEY$4}`;
+  const EVENT_KEYDOWN_DISMISS$1 = `keydown.dismiss${EVENT_KEY$4}`;
+  const EVENT_CLICK_DATA_API$2 = `click${EVENT_KEY$4}${DATA_API_KEY$2}`;
+  const CLASS_NAME_OPEN = 'modal-open';
+  const CLASS_NAME_FADE$3 = 'fade';
+  const CLASS_NAME_SHOW$4 = 'show';
+  const CLASS_NAME_STATIC = 'modal-static';
+  const OPEN_SELECTOR$1 = '.modal.show';
+  const SELECTOR_DIALOG = '.modal-dialog';
+  const SELECTOR_MODAL_BODY = '.modal-body';
+  const SELECTOR_DATA_TOGGLE$2 = '[data-bs-toggle="modal"]';
+  const Default$6 = {
+    backdrop: true,
+    focus: true,
+    keyboard: true
+  };
+  const DefaultType$6 = {
+    backdrop: '(boolean|string)',
+    focus: 'boolean',
+    keyboard: 'boolean'
+  };
+
+  /**
+   * Class definition
+   */
+
+  class Modal extends BaseComponent {
+    constructor(element, config) {
+      super(element, config);
+      this._dialog = SelectorEngine.findOne(SELECTOR_DIALOG, this._element);
+      this._backdrop = this._initializeBackDrop();
+      this._focustrap = this._initializeFocusTrap();
+      this._isShown = false;
+      this._isTransitioning = false;
+      this._scrollBar = new ScrollBarHelper();
+      this._addEventListeners();
+    }
+
+    // Getters
+    static get Default() {
+      return Default$6;
+    }
+    static get DefaultType() {
+      return DefaultType$6;
+    }
+    static get NAME() {
+      return NAME$7;
+    }
+
+    // Public
+    toggle(relatedTarget) {
+      return this._isShown ? this.hide() : this.show(relatedTarget);
+    }
+    show(relatedTarget) {
+      if (this._isShown || this._isTransitioning) {
+        return;
+      }
+      const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$4, {
+        relatedTarget
+      });
+      if (showEvent.defaultPrevented) {
+        return;
+      }
+      this._isShown = true;
+      this._isTransitioning = true;
+      this._scrollBar.hide();
+      document.body.classList.add(CLASS_NAME_OPEN);
+      this._adjustDialog();
+      this._backdrop.show(() => this._showElement(relatedTarget));
+    }
+    hide() {
+      if (!this._isShown || this._isTransitioning) {
+        return;
+      }
+      const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$4);
+      if (hideEvent.defaultPrevented) {
+        return;
+      }
+      this._isShown = false;
+      this._isTransitioning = true;
+      this._focustrap.deactivate();
+      this._element.classList.remove(CLASS_NAME_SHOW$4);
+      this._queueCallback(() => this._hideModal(), this._element, this._isAnimated());
+    }
+    dispose() {
+      EventHandler.off(window, EVENT_KEY$4);
+      EventHandler.off(this._dialog, EVENT_KEY$4);
+      this._backdrop.dispose();
+      this._focustrap.deactivate();
+      super.dispose();
+    }
+    handleUpdate() {
+      this._adjustDialog();
+    }
+
+    // Private
+    _initializeBackDrop() {
+      return new Backdrop({
+        isVisible: Boolean(this._config.backdrop),
+        // 'static' option will be translated to true, and booleans will keep their value,
+        isAnimated: this._isAnimated()
+      });
+    }
+    _initializeFocusTrap() {
+      return new FocusTrap({
+        trapElement: this._element
+      });
+    }
+    _showElement(relatedTarget) {
+      // try to append dynamic modal
+      if (!document.body.contains(this._element)) {
+        document.body.append(this._element);
+      }
+      this._element.style.display = 'block';
+      this._element.removeAttribute('aria-hidden');
+      this._element.setAttribute('aria-modal', true);
+      this._element.setAttribute('role', 'dialog');
+      this._element.scrollTop = 0;
+      const modalBody = SelectorEngine.findOne(SELECTOR_MODAL_BODY, this._dialog);
+      if (modalBody) {
+        modalBody.scrollTop = 0;
+      }
+      reflow(this._element);
+      this._element.classList.add(CLASS_NAME_SHOW$4);
+      const transitionComplete = () => {
+        if (this._config.focus) {
+          this._focustrap.activate();
+        }
+        this._isTransitioning = false;
+        EventHandler.trigger(this._element, EVENT_SHOWN$4, {
+          relatedTarget
+        });
+      };
+      this._queueCallback(transitionComplete, this._dialog, this._isAnimated());
+    }
+    _addEventListeners() {
+      EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS$1, event => {
+        if (event.key !== ESCAPE_KEY$1) {
+          return;
+        }
+        if (this._config.keyboard) {
+          this.hide();
+          return;
+        }
+        this._triggerBackdropTransition();
+      });
+      EventHandler.on(window, EVENT_RESIZE$1, () => {
+        if (this._isShown && !this._isTransitioning) {
+          this._adjustDialog();
+        }
+      });
+      EventHandler.on(this._element, EVENT_MOUSEDOWN_DISMISS, event => {
+        // a bad trick to segregate clicks that may start inside dialog but end outside, and avoid listen to scrollbar clicks
+        EventHandler.one(this._element, EVENT_CLICK_DISMISS, event2 => {
+          if (this._element !== event.target || this._element !== event2.target) {
+            return;
+          }
+          if (this._config.backdrop === 'static') {
+            this._triggerBackdropTransition();
+            return;
+          }
+          if (this._config.backdrop) {
+            this.hide();
+          }
+        });
+      });
+    }
+    _hideModal() {
+      this._element.style.display = 'none';
+      this._element.setAttribute('aria-hidden', true);
+      this._element.removeAttribute('aria-modal');
+      this._element.removeAttribute('role');
+      this._isTransitioning = false;
+      this._backdrop.hide(() => {
+        document.body.classList.remove(CLASS_NAME_OPEN);
+        this._resetAdjustments();
+        this._scrollBar.reset();
+        EventHandler.trigger(this._element, EVENT_HIDDEN$4);
+      });
+    }
+    _isAnimated() {
+      return this._element.classList.contains(CLASS_NAME_FADE$3);
+    }
+    _triggerBackdropTransition() {
+      const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED$1);
+      if (hideEvent.defaultPrevented) {
+        return;
+      }
+      const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;
+      const initialOverflowY = this._element.style.overflowY;
+      // return if the following background transition hasn't yet completed
+      if (initialOverflowY === 'hidden' || this._element.classList.contains(CLASS_NAME_STATIC)) {
+        return;
+      }
+      if (!isModalOverflowing) {
+        this._element.style.overflowY = 'hidden';
+      }
+      this._element.classList.add(CLASS_NAME_STATIC);
+      this._queueCallback(() => {
+        this._element.classList.remove(CLASS_NAME_STATIC);
+        this._queueCallback(() => {
+          this._element.style.overflowY = initialOverflowY;
+        }, this._dialog);
+      }, this._dialog);
+      this._element.focus();
+    }
+
+    /**
+     * The following methods are used to handle overflowing modals
+     */
+
+    _adjustDialog() {
+      const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;
+      const scrollbarWidth = this._scrollBar.getWidth();
+      const isBodyOverflowing = scrollbarWidth > 0;
+      if (isBodyOverflowing && !isModalOverflowing) {
+        const property = isRTL() ? 'paddingLeft' : 'paddingRight';
+        this._element.style[property] = `${scrollbarWidth}px`;
+      }
+      if (!isBodyOverflowing && isModalOverflowing) {
+        const property = isRTL() ? 'paddingRight' : 'paddingLeft';
+        this._element.style[property] = `${scrollbarWidth}px`;
+      }
+    }
+    _resetAdjustments() {
+      this._element.style.paddingLeft = '';
+      this._element.style.paddingRight = '';
+    }
+
+    // Static
+    static jQueryInterface(config, relatedTarget) {
+      return this.each(function () {
+        const data = Modal.getOrCreateInstance(this, config);
+        if (typeof config !== 'string') {
+          return;
+        }
+        if (typeof data[config] === 'undefined') {
+          throw new TypeError(`No method named "${config}"`);
+        }
+        data[config](relatedTarget);
+      });
+    }
+  }
+
+  /**
+   * Data API implementation
+   */
+
+  EventHandler.on(document, EVENT_CLICK_DATA_API$2, SELECTOR_DATA_TOGGLE$2, function (event) {
+    const target = SelectorEngine.getElementFromSelector(this);
+    if (['A', 'AREA'].includes(this.tagName)) {
+      event.preventDefault();
+    }
+    EventHandler.one(target, EVENT_SHOW$4, showEvent => {
+      if (showEvent.defaultPrevented) {
+        // only register focus restorer if modal will actually get shown
+        return;
+      }
+      EventHandler.one(target, EVENT_HIDDEN$4, () => {
+        if (isVisible(this)) {
+          this.focus();
+        }
+      });
+    });
+
+    // avoid conflict when clicking modal toggler while another one is open
+    const alreadyOpen = SelectorEngine.findOne(OPEN_SELECTOR$1);
+    if (alreadyOpen) {
+      Modal.getInstance(alreadyOpen).hide();
+    }
+    const data = Modal.getOrCreateInstance(target);
+    data.toggle(this);
+  });
+  enableDismissTrigger(Modal);
+
+  /**
+   * jQuery
+   */
+
+  defineJQueryPlugin(Modal);
+
+  /**
+   * --------------------------------------------------------------------------
+   * Bootstrap offcanvas.js
+   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
+   * --------------------------------------------------------------------------
+   */
+
+
+  /**
+   * Constants
+   */
+
+  const NAME$6 = 'offcanvas';
+  const DATA_KEY$3 = 'bs.offcanvas';
+  const EVENT_KEY$3 = `.${DATA_KEY$3}`;
+  const DATA_API_KEY$1 = '.data-api';
+  const EVENT_LOAD_DATA_API$2 = `load${EVENT_KEY$3}${DATA_API_KEY$1}`;
+  const ESCAPE_KEY = 'Escape';
+  const CLASS_NAME_SHOW$3 = 'show';
+  const CLASS_NAME_SHOWING$1 = 'showing';
+  const CLASS_NAME_HIDING = 'hiding';
+  const CLASS_NAME_BACKDROP = 'offcanvas-backdrop';
+  const OPEN_SELECTOR = '.offcanvas.show';
+  const EVENT_SHOW$3 = `show${EVENT_KEY$3}`;
+  const EVENT_SHOWN$3 = `shown${EVENT_KEY$3}`;
+  const EVENT_HIDE$3 = `hide${EVENT_KEY$3}`;
+  const EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY$3}`;
+  const EVENT_HIDDEN$3 = `hidden${EVENT_KEY$3}`;
+  const EVENT_RESIZE = `resize${EVENT_KEY$3}`;
+  const EVENT_CLICK_DATA_API$1 = `click${EVENT_KEY$3}${DATA_API_KEY$1}`;
+  const EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY$3}`;
+  const SELECTOR_DATA_TOGGLE$1 = '[data-bs-toggle="offcanvas"]';
+  const Default$5 = {
+    backdrop: true,
+    keyboard: true,
+    scroll: false
+  };
+  const DefaultType$5 = {
+    backdrop: '(boolean|string)',
+    keyboard: 'boolean',
+    scroll: 'boolean'
+  };
+
+  /**
+   * Class definition
+   */
+
+  class Offcanvas extends BaseComponent {
+    constructor(element, config) {
+      super(element, config);
+      this._isShown = false;
+      this._backdrop = this._initializeBackDrop();
+      this._focustrap = this._initializeFocusTrap();
+      this._addEventListeners();
+    }
+
+    // Getters
+    static get Default() {
+      return Default$5;
+    }
+    static get DefaultType() {
+      return DefaultType$5;
+    }
+    static get NAME() {
+      return NAME$6;
+    }
+
+    // Public
+    toggle(relatedTarget) {
+      return this._isShown ? this.hide() : this.show(relatedTarget);
+    }
+    show(relatedTarget) {
+      if (this._isShown) {
+        return;
+      }
+      const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$3, {
+        relatedTarget
+      });
+      if (showEvent.defaultPrevented) {
+        return;
+      }
+      this._isShown = true;
+      this._backdrop.show();
+      if (!this._config.scroll) {
+        new ScrollBarHelper().hide();
+      }
+      this._element.setAttribute('aria-modal', true);
+      this._element.setAttribute('role', 'dialog');
+      this._element.classList.add(CLASS_NAME_SHOWING$1);
+      const completeCallBack = () => {
+        if (!this._config.scroll || this._config.backdrop) {
+          this._focustrap.activate();
+        }
+        this._element.classList.add(CLASS_NAME_SHOW$3);
+        this._element.classList.remove(CLASS_NAME_SHOWING$1);
+        EventHandler.trigger(this._element, EVENT_SHOWN$3, {
+          relatedTarget
+        });
+      };
+      this._queueCallback(completeCallBack, this._element, true);
+    }
+    hide() {
+      if (!this._isShown) {
+        return;
+      }
+      const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$3);
+      if (hideEvent.defaultPrevented) {
+        return;
+      }
+      this._focustrap.deactivate();
+      this._element.blur();
+      this._isShown = false;
+      this._element.classList.add(CLASS_NAME_HIDING);
+      this._backdrop.hide();
+      const completeCallback = () => {
+        this._element.classList.remove(CLASS_NAME_SHOW$3, CLASS_NAME_HIDING);
+        this._element.removeAttribute('aria-modal');
+        this._element.removeAttribute('role');
+        if (!this._config.scroll) {
+          new ScrollBarHelper().reset();
+        }
+        EventHandler.trigger(this._element, EVENT_HIDDEN$3);
+      };
+      this._queueCallback(completeCallback, this._element, true);
+    }
+    dispose() {
+      this._backdrop.dispose();
+      this._focustrap.deactivate();
+      super.dispose();
+    }
+
+    // Private
+    _initializeBackDrop() {
+      const clickCallback = () => {
+        if (this._config.backdrop === 'static') {
+          EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED);
+          return;
+        }
+        this.hide();
+      };
+
+      // 'static' option will be translated to true, and booleans will keep their value
+      const isVisible = Boolean(this._config.backdrop);
+      return new Backdrop({
+        className: CLASS_NAME_BACKDROP,
+        isVisible,
+        isAnimated: true,
+        rootElement: this._element.parentNode,
+        clickCallback: isVisible ? clickCallback : null
+      });
+    }
+    _initializeFocusTrap() {
+      return new FocusTrap({
+        trapElement: this._element
+      });
+    }
+    _addEventListeners() {
+      EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, event => {
+        if (event.key !== ESCAPE_KEY) {
+          return;
+        }
+        if (this._config.keyboard) {
+          this.hide();
+          return;
+        }
+        EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED);
+      });
+    }
+
+    // Static
+    static jQueryInterface(config) {
+      return this.each(function () {
+        const data = Offcanvas.getOrCreateInstance(this, config);
+        if (typeof config !== 'string') {
+          return;
+        }
+        if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {
+          throw new TypeError(`No method named "${config}"`);
+        }
+        data[config](this);
+      });
+    }
+  }
+
+  /**
+   * Data API implementation
+   */
+
+  EventHandler.on(document, EVENT_CLICK_DATA_API$1, SELECTOR_DATA_TOGGLE$1, function (event) {
+    const target = SelectorEngine.getElementFromSelector(this);
+    if (['A', 'AREA'].includes(this.tagName)) {
+      event.preventDefault();
+    }
+    if (isDisabled(this)) {
+      return;
+    }
+    EventHandler.one(target, EVENT_HIDDEN$3, () => {
+      // focus on trigger when it is closed
+      if (isVisible(this)) {
+        this.focus();
+      }
+    });
+
+    // avoid conflict when clicking a toggler of an offcanvas, while another is open
+    const alreadyOpen = SelectorEngine.findOne(OPEN_SELECTOR);
+    if (alreadyOpen && alreadyOpen !== target) {
+      Offcanvas.getInstance(alreadyOpen).hide();
+    }
+    const data = Offcanvas.getOrCreateInstance(target);
+    data.toggle(this);
+  });
+  EventHandler.on(window, EVENT_LOAD_DATA_API$2, () => {
+    for (const selector of SelectorEngine.find(OPEN_SELECTOR)) {
+      Offcanvas.getOrCreateInstance(selector).show();
+    }
+  });
+  EventHandler.on(window, EVENT_RESIZE, () => {
+    for (const element of SelectorEngine.find('[aria-modal][class*=show][class*=offcanvas-]')) {
+      if (getComputedStyle(element).position !== 'fixed') {
+        Offcanvas.getOrCreateInstance(element).hide();
+      }
+    }
+  });
+  enableDismissTrigger(Offcanvas);
+
+  /**
+   * jQuery
+   */
+
+  defineJQueryPlugin(Offcanvas);
+
+  /**
+   * --------------------------------------------------------------------------
+   * Bootstrap util/sanitizer.js
+   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
+   * --------------------------------------------------------------------------
+   */
+
+  // js-docs-start allow-list
+  const ARIA_ATTRIBUTE_PATTERN = /^aria-[\w-]*$/i;
+  const DefaultAllowlist = {
+    // Global attributes allowed on any supplied element below.
+    '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],
+    a: ['target', 'href', 'title', 'rel'],
+    area: [],
+    b: [],
+    br: [],
+    col: [],
+    code: [],
+    div: [],
+    em: [],
+    hr: [],
+    h1: [],
+    h2: [],
+    h3: [],
+    h4: [],
+    h5: [],
+    h6: [],
+    i: [],
+    img: ['src', 'srcset', 'alt', 'title', 'width', 'height'],
+    li: [],
+    ol: [],
+    p: [],
+    pre: [],
+    s: [],
+    small: [],
+    span: [],
+    sub: [],
+    sup: [],
+    strong: [],
+    u: [],
+    ul: []
+  };
+  // js-docs-end allow-list
+
+  const uriAttributes = new Set(['background', 'cite', 'href', 'itemtype', 'longdesc', 'poster', 'src', 'xlink:href']);
+
+  /**
+   * A pattern that recognizes URLs that are safe wrt. XSS in URL navigation
+   * contexts.
+   *
+   * Shout-out to Angular https://github.com/angular/angular/blob/15.2.8/packages/core/src/sanitization/url_sanitizer.ts#L38
+   */
+  // eslint-disable-next-line unicorn/better-regex
+  const SAFE_URL_PATTERN = /^(?!javascript:)(?:[a-z0-9+.-]+:|[^&:/?#]*(?:[/?#]|$))/i;
+  const allowedAttribute = (attribute, allowedAttributeList) => {
+    const attributeName = attribute.nodeName.toLowerCase();
+    if (allowedAttributeList.includes(attributeName)) {
+      if (uriAttributes.has(attributeName)) {
+        return Boolean(SAFE_URL_PATTERN.test(attribute.nodeValue));
+      }
+      return true;
+    }
+
+    // Check if a regular expression validates the attribute.
+    return allowedAttributeList.filter(attributeRegex => attributeRegex instanceof RegExp).some(regex => regex.test(attributeName));
+  };
+  function sanitizeHtml(unsafeHtml, allowList, sanitizeFunction) {
+    if (!unsafeHtml.length) {
+      return unsafeHtml;
+    }
+    if (sanitizeFunction && typeof sanitizeFunction === 'function') {
+      return sanitizeFunction(unsafeHtml);
+    }
+    const domParser = new window.DOMParser();
+    const createdDocument = domParser.parseFromString(unsafeHtml, 'text/html');
+    const elements = [].concat(...createdDocument.body.querySelectorAll('*'));
+    for (const element of elements) {
+      const elementName = element.nodeName.toLowerCase();
+      if (!Object.keys(allowList).includes(elementName)) {
+        element.remove();
+        continue;
+      }
+      const attributeList = [].concat(...element.attributes);
+      const allowedAttributes = [].concat(allowList['*'] || [], allowList[elementName] || []);
+      for (const attribute of attributeList) {
+        if (!allowedAttribute(attribute, allowedAttributes)) {
+          element.removeAttribute(attribute.nodeName);
+        }
+      }
+    }
+    return createdDocument.body.innerHTML;
+  }
+
+  /**
+   * --------------------------------------------------------------------------
+   * Bootstrap util/template-factory.js
+   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
+   * --------------------------------------------------------------------------
+   */
+
+
+  /**
+   * Constants
+   */
+
+  const NAME$5 = 'TemplateFactory';
+  const Default$4 = {
+    allowList: DefaultAllowlist,
+    content: {},
+    // { selector : text ,  selector2 : text2 , }
+    extraClass: '',
+    html: false,
+    sanitize: true,
+    sanitizeFn: null,
+    template: '<div></div>'
+  };
+  const DefaultType$4 = {
+    allowList: 'object',
+    content: 'object',
+    extraClass: '(string|function)',
+    html: 'boolean',
+    sanitize: 'boolean',
+    sanitizeFn: '(null|function)',
+    template: 'string'
+  };
+  const DefaultContentType = {
+    entry: '(string|element|function|null)',
+    selector: '(string|element)'
+  };
+
+  /**
+   * Class definition
+   */
+
+  class TemplateFactory extends Config {
+    constructor(config) {
+      super();
+      this._config = this._getConfig(config);
+    }
+
+    // Getters
+    static get Default() {
+      return Default$4;
+    }
+    static get DefaultType() {
+      return DefaultType$4;
+    }
+    static get NAME() {
+      return NAME$5;
+    }
+
+    // Public
+    getContent() {
+      return Object.values(this._config.content).map(config => this._resolvePossibleFunction(config)).filter(Boolean);
+    }
+    hasContent() {
+      return this.getContent().length > 0;
+    }
+    changeContent(content) {
+      this._checkContent(content);
+      this._config.content = {
+        ...this._config.content,
+        ...content
+      };
+      return this;
+    }
+    toHtml() {
+      const templateWrapper = document.createElement('div');
+      templateWrapper.innerHTML = this._maybeSanitize(this._config.template);
+      for (const [selector, text] of Object.entries(this._config.content)) {
+        this._setContent(templateWrapper, text, selector);
+      }
+      const template = templateWrapper.children[0];
+      const extraClass = this._resolvePossibleFunction(this._config.extraClass);
+      if (extraClass) {
+        template.classList.add(...extraClass.split(' '));
+      }
+      return template;
+    }
+
+    // Private
+    _typeCheckConfig(config) {
+      super._typeCheckConfig(config);
+      this._checkContent(config.content);
+    }
+    _checkContent(arg) {
+      for (const [selector, content] of Object.entries(arg)) {
+        super._typeCheckConfig({
+          selector,
+          entry: content
+        }, DefaultContentType);
+      }
+    }
+    _setContent(template, content, selector) {
+      const templateElement = SelectorEngine.findOne(selector, template);
+      if (!templateElement) {
+        return;
+      }
+      content = this._resolvePossibleFunction(content);
+      if (!content) {
+        templateElement.remove();
+        return;
+      }
+      if (isElement(content)) {
+        this._putElementInTemplate(getElement(content), templateElement);
+        return;
+      }
+      if (this._config.html) {
+        templateElement.innerHTML = this._maybeSanitize(content);
+        return;
+      }
+      templateElement.textContent = content;
+    }
+    _maybeSanitize(arg) {
+      return this._config.sanitize ? sanitizeHtml(arg, this._config.allowList, this._config.sanitizeFn) : arg;
+    }
+    _resolvePossibleFunction(arg) {
+      return execute(arg, [this]);
+    }
+    _putElementInTemplate(element, templateElement) {
+      if (this._config.html) {
+        templateElement.innerHTML = '';
+        templateElement.append(element);
+        return;
+      }
+      templateElement.textContent = element.textContent;
+    }
+  }
+
+  /**
+   * --------------------------------------------------------------------------
+   * Bootstrap tooltip.js
+   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
+   * --------------------------------------------------------------------------
+   */
+
+
+  /**
+   * Constants
+   */
+
+  const NAME$4 = 'tooltip';
+  const DISALLOWED_ATTRIBUTES = new Set(['sanitize', 'allowList', 'sanitizeFn']);
+  const CLASS_NAME_FADE$2 = 'fade';
+  const CLASS_NAME_MODAL = 'modal';
+  const CLASS_NAME_SHOW$2 = 'show';
+  const SELECTOR_TOOLTIP_INNER = '.tooltip-inner';
+  const SELECTOR_MODAL = `.${CLASS_NAME_MODAL}`;
+  const EVENT_MODAL_HIDE = 'hide.bs.modal';
+  const TRIGGER_HOVER = 'hover';
+  const TRIGGER_FOCUS = 'focus';
+  const TRIGGER_CLICK = 'click';
+  const TRIGGER_MANUAL = 'manual';
+  const EVENT_HIDE$2 = 'hide';
+  const EVENT_HIDDEN$2 = 'hidden';
+  const EVENT_SHOW$2 = 'show';
+  const EVENT_SHOWN$2 = 'shown';
+  const EVENT_INSERTED = 'inserted';
+  const EVENT_CLICK$1 = 'click';
+  const EVENT_FOCUSIN$1 = 'focusin';
+  const EVENT_FOCUSOUT$1 = 'focusout';
+  const EVENT_MOUSEENTER = 'mouseenter';
+  const EVENT_MOUSELEAVE = 'mouseleave';
+  const AttachmentMap = {
+    AUTO: 'auto',
+    TOP: 'top',
+    RIGHT: isRTL() ? 'left' : 'right',
+    BOTTOM: 'bottom',
+    LEFT: isRTL() ? 'right' : 'left'
+  };
+  const Default$3 = {
+    allowList: DefaultAllowlist,
+    animation: true,
+    boundary: 'clippingParents',
+    container: false,
+    customClass: '',
+    delay: 0,
+    fallbackPlacements: ['top', 'right', 'bottom', 'left'],
+    html: false,
+    offset: [0, 6],
+    placement: 'top',
+    popperConfig: null,
+    sanitize: true,
+    sanitizeFn: null,
+    selector: false,
+    template: '<div class="tooltip" role="tooltip">' + '<div class="tooltip-arrow"></div>' + '<div class="tooltip-inner"></div>' + '</div>',
+    title: '',
+    trigger: 'hover focus'
+  };
+  const DefaultType$3 = {
+    allowList: 'object',
+    animation: 'boolean',
+    boundary: '(string|element)',
+    container: '(string|element|boolean)',
+    customClass: '(string|function)',
+    delay: '(number|object)',
+    fallbackPlacements: 'array',
+    html: 'boolean',
+    offset: '(array|string|function)',
+    placement: '(string|function)',
+    popperConfig: '(null|object|function)',
+    sanitize: 'boolean',
+    sanitizeFn: '(null|function)',
+    selector: '(string|boolean)',
+    template: 'string',
+    title: '(string|element|function)',
+    trigger: 'string'
+  };
+
+  /**
+   * Class definition
+   */
+
+  class Tooltip extends BaseComponent {
+    constructor(element, config) {
+      if (typeof Popper__namespace === 'undefined') {
+        throw new TypeError('Bootstrap\'s tooltips require Popper (https://popper.js.org)');
+      }
+      super(element, config);
+
+      // Private
+      this._isEnabled = true;
+      this._timeout = 0;
+      this._isHovered = null;
+      this._activeTrigger = {};
+      this._popper = null;
+      this._templateFactory = null;
+      this._newContent = null;
+
+      // Protected
+      this.tip = null;
+      this._setListeners();
+      if (!this._config.selector) {
+        this._fixTitle();
+      }
+    }
+
+    // Getters
+    static get Default() {
+      return Default$3;
+    }
+    static get DefaultType() {
+      return DefaultType$3;
+    }
+    static get NAME() {
+      return NAME$4;
+    }
+
+    // Public
+    enable() {
+      this._isEnabled = true;
+    }
+    disable() {
+      this._isEnabled = false;
+    }
+    toggleEnabled() {
+      this._isEnabled = !this._isEnabled;
+    }
+    toggle() {
+      if (!this._isEnabled) {
+        return;
+      }
+      this._activeTrigger.click = !this._activeTrigger.click;
+      if (this._isShown()) {
+        this._leave();
+        return;
+      }
+      this._enter();
+    }
+    dispose() {
+      clearTimeout(this._timeout);
+      EventHandler.off(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE, this._hideModalHandler);
+      if (this._element.getAttribute('data-bs-original-title')) {
+        this._element.setAttribute('title', this._element.getAttribute('data-bs-original-title'));
+      }
+      this._disposePopper();
+      super.dispose();
+    }
+    show() {
+      if (this._element.style.display === 'none') {
+        throw new Error('Please use show on visible elements');
+      }
+      if (!(this._isWithContent() && this._isEnabled)) {
+        return;
+      }
+      const showEvent = EventHandler.trigger(this._element, this.constructor.eventName(EVENT_SHOW$2));
+      const shadowRoot = findShadowRoot(this._element);
+      const isInTheDom = (shadowRoot || this._element.ownerDocument.documentElement).contains(this._element);
+      if (showEvent.defaultPrevented || !isInTheDom) {
+        return;
+      }
+
+      // TODO: v6 remove this or make it optional
+      this._disposePopper();
+      const tip = this._getTipElement();
+      this._element.setAttribute('aria-describedby', tip.getAttribute('id'));
+      const {
+        container
+      } = this._config;
+      if (!this._element.ownerDocument.documentElement.contains(this.tip)) {
+        container.append(tip);
+        EventHandler.trigger(this._element, this.constructor.eventName(EVENT_INSERTED));
+      }
+      this._popper = this._createPopper(tip);
+      tip.classList.add(CLASS_NAME_SHOW$2);
+
+      // If this is a touch-enabled device we add extra
+      // empty mouseover listeners to the body's immediate children;
+      // only needed because of broken event delegation on iOS
+      // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html
+      if ('ontouchstart' in document.documentElement) {
+        for (const element of [].concat(...document.body.children)) {
+          EventHandler.on(element, 'mouseover', noop);
+        }
+      }
+      const complete = () => {
+        EventHandler.trigger(this._element, this.constructor.eventName(EVENT_SHOWN$2));
+        if (this._isHovered === false) {
+          this._leave();
+        }
+        this._isHovered = false;
+      };
+      this._queueCallback(complete, this.tip, this._isAnimated());
+    }
+    hide() {
+      if (!this._isShown()) {
+        return;
+      }
+      const hideEvent = EventHandler.trigger(this._element, this.constructor.eventName(EVENT_HIDE$2));
+      if (hideEvent.defaultPrevented) {
+        return;
+      }
+      const tip = this._getTipElement();
+      tip.classList.remove(CLASS_NAME_SHOW$2);
+
+      // If this is a touch-enabled device we remove the extra
+      // empty mouseover listeners we added for iOS support
+      if ('ontouchstart' in document.documentElement) {
+        for (const element of [].concat(...document.body.children)) {
+          EventHandler.off(element, 'mouseover', noop);
+        }
+      }
+      this._activeTrigger[TRIGGER_CLICK] = false;
+      this._activeTrigger[TRIGGER_FOCUS] = false;
+      this._activeTrigger[TRIGGER_HOVER] = false;
+      this._isHovered = null; // it is a trick to support manual triggering
+
+      const complete = () => {
+        if (this._isWithActiveTrigger()) {
+          return;
+        }
+        if (!this._isHovered) {
+          this._disposePopper();
+        }
+        this._element.removeAttribute('aria-describedby');
+        EventHandler.trigger(this._element, this.constructor.eventName(EVENT_HIDDEN$2));
+      };
+      this._queueCallback(complete, this.tip, this._isAnimated());
+    }
+    update() {
+      if (this._popper) {
+        this._popper.update();
+      }
+    }
+
+    // Protected
+    _isWithContent() {
+      return Boolean(this._getTitle());
+    }
+    _getTipElement() {
+      if (!this.tip) {
+        this.tip = this._createTipElement(this._newContent || this._getContentForTemplate());
+      }
+      return this.tip;
+    }
+    _createTipElement(content) {
+      const tip = this._getTemplateFactory(content).toHtml();
+
+      // TODO: remove this check in v6
+      if (!tip) {
+        return null;
+      }
+      tip.classList.remove(CLASS_NAME_FADE$2, CLASS_NAME_SHOW$2);
+      // TODO: v6 the following can be achieved with CSS only
+      tip.classList.add(`bs-${this.constructor.NAME}-auto`);
+      const tipId = getUID(this.constructor.NAME).toString();
+      tip.setAttribute('id', tipId);
+      if (this._isAnimated()) {
+        tip.classList.add(CLASS_NAME_FADE$2);
+      }
+      return tip;
+    }
+    setContent(content) {
+      this._newContent = content;
+      if (this._isShown()) {
+        this._disposePopper();
+        this.show();
+      }
+    }
+    _getTemplateFactory(content) {
+      if (this._templateFactory) {
+        this._templateFactory.changeContent(content);
+      } else {
+        this._templateFactory = new TemplateFactory({
+          ...this._config,
+          // the `content` var has to be after `this._config`
+          // to override config.content in case of popover
+          content,
+          extraClass: this._resolvePossibleFunction(this._config.customClass)
+        });
+      }
+      return this._templateFactory;
+    }
+    _getContentForTemplate() {
+      return {
+        [SELECTOR_TOOLTIP_INNER]: this._getTitle()
+      };
+    }
+    _getTitle() {
+      return this._resolvePossibleFunction(this._config.title) || this._element.getAttribute('data-bs-original-title');
+    }
+
+    // Private
+    _initializeOnDelegatedTarget(event) {
+      return this.constructor.getOrCreateInstance(event.delegateTarget, this._getDelegateConfig());
+    }
+    _isAnimated() {
+      return this._config.animation || this.tip && this.tip.classList.contains(CLASS_NAME_FADE$2);
+    }
+    _isShown() {
+      return this.tip && this.tip.classList.contains(CLASS_NAME_SHOW$2);
+    }
+    _createPopper(tip) {
+      const placement = execute(this._config.placement, [this, tip, this._element]);
+      const attachment = AttachmentMap[placement.toUpperCase()];
+      return Popper__namespace.createPopper(this._element, tip, this._getPopperConfig(attachment));
+    }
+    _getOffset() {
+      const {
+        offset
+      } = this._config;
+      if (typeof offset === 'string') {
+        return offset.split(',').map(value => Number.parseInt(value, 10));
+      }
+      if (typeof offset === 'function') {
+        return popperData => offset(popperData, this._element);
+      }
+      return offset;
+    }
+    _resolvePossibleFunction(arg) {
+      return execute(arg, [this._element]);
+    }
+    _getPopperConfig(attachment) {
+      const defaultBsPopperConfig = {
+        placement: attachment,
+        modifiers: [{
+          name: 'flip',
+          options: {
+            fallbackPlacements: this._config.fallbackPlacements
+          }
+        }, {
+          name: 'offset',
+          options: {
+            offset: this._getOffset()
+          }
+        }, {
+          name: 'preventOverflow',
+          options: {
+            boundary: this._config.boundary
+          }
+        }, {
+          name: 'arrow',
+          options: {
+            element: `.${this.constructor.NAME}-arrow`
+          }
+        }, {
+          name: 'preSetPlacement',
+          enabled: true,
+          phase: 'beforeMain',
+          fn: data => {
+            // Pre-set Popper's placement attribute in order to read the arrow sizes properly.
+            // Otherwise, Popper mixes up the width and height dimensions since the initial arrow style is for top placement
+            this._getTipElement().setAttribute('data-popper-placement', data.state.placement);
+          }
+        }]
+      };
+      return {
+        ...defaultBsPopperConfig,
+        ...execute(this._config.popperConfig, [defaultBsPopperConfig])
+      };
+    }
+    _setListeners() {
+      const triggers = this._config.trigger.split(' ');
+      for (const trigger of triggers) {
+        if (trigger === 'click') {
+          EventHandler.on(this._element, this.constructor.eventName(EVENT_CLICK$1), this._config.selector, event => {
+            const context = this._initializeOnDelegatedTarget(event);
+            context.toggle();
+          });
+        } else if (trigger !== TRIGGER_MANUAL) {
+          const eventIn = trigger === TRIGGER_HOVER ? this.constructor.eventName(EVENT_MOUSEENTER) : this.constructor.eventName(EVENT_FOCUSIN$1);
+          const eventOut = trigger === TRIGGER_HOVER ? this.constructor.eventName(EVENT_MOUSELEAVE) : this.constructor.eventName(EVENT_FOCUSOUT$1);
+          EventHandler.on(this._element, eventIn, this._config.selector, event => {
+            const context = this._initializeOnDelegatedTarget(event);
+            context._activeTrigger[event.type === 'focusin' ? TRIGGER_FOCUS : TRIGGER_HOVER] = true;
+            context._enter();
+          });
+          EventHandler.on(this._element, eventOut, this._config.selector, event => {
+            const context = this._initializeOnDelegatedTarget(event);
+            context._activeTrigger[event.type === 'focusout' ? TRIGGER_FOCUS : TRIGGER_HOVER] = context._element.contains(event.relatedTarget);
+            context._leave();
+          });
+        }
+      }
+      this._hideModalHandler = () => {
+        if (this._element) {
+          this.hide();
+        }
+      };
+      EventHandler.on(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE, this._hideModalHandler);
+    }
+    _fixTitle() {
+      const title = this._element.getAttribute('title');
+      if (!title) {
+        return;
+      }
+      if (!this._element.getAttribute('aria-label') && !this._element.textContent.trim()) {
+        this._element.setAttribute('aria-label', title);
+      }
+      this._element.setAttribute('data-bs-original-title', title); // DO NOT USE IT. Is only for backwards compatibility
+      this._element.removeAttribute('title');
+    }
+    _enter() {
+      if (this._isShown() || this._isHovered) {
+        this._isHovered = true;
+        return;
+      }
+      this._isHovered = true;
+      this._setTimeout(() => {
+        if (this._isHovered) {
+          this.show();
+        }
+      }, this._config.delay.show);
+    }
+    _leave() {
+      if (this._isWithActiveTrigger()) {
+        return;
+      }
+      this._isHovered = false;
+      this._setTimeout(() => {
+        if (!this._isHovered) {
+          this.hide();
+        }
+      }, this._config.delay.hide);
+    }
+    _setTimeout(handler, timeout) {
+      clearTimeout(this._timeout);
+      this._timeout = setTimeout(handler, timeout);
+    }
+    _isWithActiveTrigger() {
+      return Object.values(this._activeTrigger).includes(true);
+    }
+    _getConfig(config) {
+      const dataAttributes = Manipulator.getDataAttributes(this._element);
+      for (const dataAttribute of Object.keys(dataAttributes)) {
+        if (DISALLOWED_ATTRIBUTES.has(dataAttribute)) {
+          delete dataAttributes[dataAttribute];
+        }
+      }
+      config = {
+        ...dataAttributes,
+        ...(typeof config === 'object' && config ? config : {})
+      };
+      config = this._mergeConfigObj(config);
+      config = this._configAfterMerge(config);
+      this._typeCheckConfig(config);
+      return config;
+    }
+    _configAfterMerge(config) {
+      config.container = config.container === false ? document.body : getElement(config.container);
+      if (typeof config.delay === 'number') {
+        config.delay = {
+          show: config.delay,
+          hide: config.delay
+        };
+      }
+      if (typeof config.title === 'number') {
+        config.title = config.title.toString();
+      }
+      if (typeof config.content === 'number') {
+        config.content = config.content.toString();
+      }
+      return config;
+    }
+    _getDelegateConfig() {
+      const config = {};
+      for (const [key, value] of Object.entries(this._config)) {
+        if (this.constructor.Default[key] !== value) {
+          config[key] = value;
+        }
+      }
+      config.selector = false;
+      config.trigger = 'manual';
+
+      // In the future can be replaced with:
+      // const keysWithDifferentValues = Object.entries(this._config).filter(entry => this.constructor.Default[entry[0]] !== this._config[entry[0]])
+      // `Object.fromEntries(keysWithDifferentValues)`
+      return config;
+    }
+    _disposePopper() {
+      if (this._popper) {
+        this._popper.destroy();
+        this._popper = null;
+      }
+      if (this.tip) {
+        this.tip.remove();
+        this.tip = null;
+      }
+    }
+
+    // Static
+    static jQueryInterface(config) {
+      return this.each(function () {
+        const data = Tooltip.getOrCreateInstance(this, config);
+        if (typeof config !== 'string') {
+          return;
+        }
+        if (typeof data[config] === 'undefined') {
+          throw new TypeError(`No method named "${config}"`);
+        }
+        data[config]();
+      });
+    }
+  }
+
+  /**
+   * jQuery
+   */
+
+  defineJQueryPlugin(Tooltip);
+
+  /**
+   * --------------------------------------------------------------------------
+   * Bootstrap popover.js
+   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
+   * --------------------------------------------------------------------------
+   */
+
+
+  /**
+   * Constants
+   */
+
+  const NAME$3 = 'popover';
+  const SELECTOR_TITLE = '.popover-header';
+  const SELECTOR_CONTENT = '.popover-body';
+  const Default$2 = {
+    ...Tooltip.Default,
+    content: '',
+    offset: [0, 8],
+    placement: 'right',
+    template: '<div class="popover" role="tooltip">' + '<div class="popover-arrow"></div>' + '<h3 class="popover-header"></h3>' + '<div class="popover-body"></div>' + '</div>',
+    trigger: 'click'
+  };
+  const DefaultType$2 = {
+    ...Tooltip.DefaultType,
+    content: '(null|string|element|function)'
+  };
+
+  /**
+   * Class definition
+   */
+
+  class Popover extends Tooltip {
+    // Getters
+    static get Default() {
+      return Default$2;
+    }
+    static get DefaultType() {
+      return DefaultType$2;
+    }
+    static get NAME() {
+      return NAME$3;
+    }
+
+    // Overrides
+    _isWithContent() {
+      return this._getTitle() || this._getContent();
+    }
+
+    // Private
+    _getContentForTemplate() {
+      return {
+        [SELECTOR_TITLE]: this._getTitle(),
+        [SELECTOR_CONTENT]: this._getContent()
+      };
+    }
+    _getContent() {
+      return this._resolvePossibleFunction(this._config.content);
+    }
+
+    // Static
+    static jQueryInterface(config) {
+      return this.each(function () {
+        const data = Popover.getOrCreateInstance(this, config);
+        if (typeof config !== 'string') {
+          return;
+        }
+        if (typeof data[config] === 'undefined') {
+          throw new TypeError(`No method named "${config}"`);
+        }
+        data[config]();
+      });
+    }
+  }
+
+  /**
+   * jQuery
+   */
+
+  defineJQueryPlugin(Popover);
+
+  /**
+   * --------------------------------------------------------------------------
+   * Bootstrap scrollspy.js
+   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
+   * --------------------------------------------------------------------------
+   */
+
+
+  /**
+   * Constants
+   */
+
+  const NAME$2 = 'scrollspy';
+  const DATA_KEY$2 = 'bs.scrollspy';
+  const EVENT_KEY$2 = `.${DATA_KEY$2}`;
+  const DATA_API_KEY = '.data-api';
+  const EVENT_ACTIVATE = `activate${EVENT_KEY$2}`;
+  const EVENT_CLICK = `click${EVENT_KEY$2}`;
+  const EVENT_LOAD_DATA_API$1 = `load${EVENT_KEY$2}${DATA_API_KEY}`;
+  const CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item';
+  const CLASS_NAME_ACTIVE$1 = 'active';
+  const SELECTOR_DATA_SPY = '[data-bs-spy="scroll"]';
+  const SELECTOR_TARGET_LINKS = '[href]';
+  const SELECTOR_NAV_LIST_GROUP = '.nav, .list-group';
+  const SELECTOR_NAV_LINKS = '.nav-link';
+  const SELECTOR_NAV_ITEMS = '.nav-item';
+  const SELECTOR_LIST_ITEMS = '.list-group-item';
+  const SELECTOR_LINK_ITEMS = `${SELECTOR_NAV_LINKS}, ${SELECTOR_NAV_ITEMS} > ${SELECTOR_NAV_LINKS}, ${SELECTOR_LIST_ITEMS}`;
+  const SELECTOR_DROPDOWN = '.dropdown';
+  const SELECTOR_DROPDOWN_TOGGLE$1 = '.dropdown-toggle';
+  const Default$1 = {
+    offset: null,
+    // TODO: v6 @deprecated, keep it for backwards compatibility reasons
+    rootMargin: '0px 0px -25%',
+    smoothScroll: false,
+    target: null,
+    threshold: [0.1, 0.5, 1]
+  };
+  const DefaultType$1 = {
+    offset: '(number|null)',
+    // TODO v6 @deprecated, keep it for backwards compatibility reasons
+    rootMargin: 'string',
+    smoothScroll: 'boolean',
+    target: 'element',
+    threshold: 'array'
+  };
+
+  /**
+   * Class definition
+   */
+
+  class ScrollSpy extends BaseComponent {
+    constructor(element, config) {
+      super(element, config);
+
+      // this._element is the observablesContainer and config.target the menu links wrapper
+      this._targetLinks = new Map();
+      this._observableSections = new Map();
+      this._rootElement = getComputedStyle(this._element).overflowY === 'visible' ? null : this._element;
+      this._activeTarget = null;
+      this._observer = null;
+      this._previousScrollData = {
+        visibleEntryTop: 0,
+        parentScrollTop: 0
+      };
+      this.refresh(); // initialize
+    }
+
+    // Getters
+    static get Default() {
+      return Default$1;
+    }
+    static get DefaultType() {
+      return DefaultType$1;
+    }
+    static get NAME() {
+      return NAME$2;
+    }
+
+    // Public
+    refresh() {
+      this._initializeTargetsAndObservables();
+      this._maybeEnableSmoothScroll();
+      if (this._observer) {
+        this._observer.disconnect();
+      } else {
+        this._observer = this._getNewObserver();
+      }
+      for (const section of this._observableSections.values()) {
+        this._observer.observe(section);
+      }
+    }
+    dispose() {
+      this._observer.disconnect();
+      super.dispose();
+    }
+
+    // Private
+    _configAfterMerge(config) {
+      // TODO: on v6 target should be given explicitly & remove the {target: 'ss-target'} case
+      config.target = getElement(config.target) || document.body;
+
+      // TODO: v6 Only for backwards compatibility reasons. Use rootMargin only
+      config.rootMargin = config.offset ? `${config.offset}px 0px -30%` : config.rootMargin;
+      if (typeof config.threshold === 'string') {
+        config.threshold = config.threshold.split(',').map(value => Number.parseFloat(value));
+      }
+      return config;
+    }
+    _maybeEnableSmoothScroll() {
+      if (!this._config.smoothScroll) {
+        return;
+      }
+
+      // unregister any previous listeners
+      EventHandler.off(this._config.target, EVENT_CLICK);
+      EventHandler.on(this._config.target, EVENT_CLICK, SELECTOR_TARGET_LINKS, event => {
+        const observableSection = this._observableSections.get(event.target.hash);
+        if (observableSection) {
+          event.preventDefault();
+          const root = this._rootElement || window;
+          const height = observableSection.offsetTop - this._element.offsetTop;
+          if (root.scrollTo) {
+            root.scrollTo({
+              top: height,
+              behavior: 'smooth'
+            });
+            return;
+          }
+
+          // Chrome 60 doesn't support `scrollTo`
+          root.scrollTop = height;
+        }
+      });
+    }
+    _getNewObserver() {
+      const options = {
+        root: this._rootElement,
+        threshold: this._config.threshold,
+        rootMargin: this._config.rootMargin
+      };
+      return new IntersectionObserver(entries => this._observerCallback(entries), options);
+    }
+
+    // The logic of selection
+    _observerCallback(entries) {
+      const targetElement = entry => this._targetLinks.get(`#${entry.target.id}`);
+      const activate = entry => {
+        this._previousScrollData.visibleEntryTop = entry.target.offsetTop;
+        this._process(targetElement(entry));
+      };
+      const parentScrollTop = (this._rootElement || document.documentElement).scrollTop;
+      const userScrollsDown = parentScrollTop >= this._previousScrollData.parentScrollTop;
+      this._previousScrollData.parentScrollTop = parentScrollTop;
+      for (const entry of entries) {
+        if (!entry.isIntersecting) {
+          this._activeTarget = null;
+          this._clearActiveClass(targetElement(entry));
+          continue;
+        }
+        const entryIsLowerThanPrevious = entry.target.offsetTop >= this._previousScrollData.visibleEntryTop;
+        // if we are scrolling down, pick the bigger offsetTop
+        if (userScrollsDown && entryIsLowerThanPrevious) {
+          activate(entry);
+          // if parent isn't scrolled, let's keep the first visible item, breaking the iteration
+          if (!parentScrollTop) {
+            return;
+          }
+          continue;
+        }
+
+        // if we are scrolling up, pick the smallest offsetTop
+        if (!userScrollsDown && !entryIsLowerThanPrevious) {
+          activate(entry);
+        }
+      }
+    }
+    _initializeTargetsAndObservables() {
+      this._targetLinks = new Map();
+      this._observableSections = new Map();
+      const targetLinks = SelectorEngine.find(SELECTOR_TARGET_LINKS, this._config.target);
+      for (const anchor of targetLinks) {
+        // ensure that the anchor has an id and is not disabled
+        if (!anchor.hash || isDisabled(anchor)) {
+          continue;
+        }
+        const observableSection = SelectorEngine.findOne(decodeURI(anchor.hash), this._element);
+
+        // ensure that the observableSection exists & is visible
+        if (isVisible(observableSection)) {
+          this._targetLinks.set(decodeURI(anchor.hash), anchor);
+          this._observableSections.set(anchor.hash, observableSection);
+        }
+      }
+    }
+    _process(target) {
+      if (this._activeTarget === target) {
+        return;
+      }
+      this._clearActiveClass(this._config.target);
+      this._activeTarget = target;
+      target.classList.add(CLASS_NAME_ACTIVE$1);
+      this._activateParents(target);
+      EventHandler.trigger(this._element, EVENT_ACTIVATE, {
+        relatedTarget: target
+      });
+    }
+    _activateParents(target) {
+      // Activate dropdown parents
+      if (target.classList.contains(CLASS_NAME_DROPDOWN_ITEM)) {
+        SelectorEngine.findOne(SELECTOR_DROPDOWN_TOGGLE$1, target.closest(SELECTOR_DROPDOWN)).classList.add(CLASS_NAME_ACTIVE$1);
+        return;
+      }
+      for (const listGroup of SelectorEngine.parents(target, SELECTOR_NAV_LIST_GROUP)) {
+        // Set triggered links parents as active
+        // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor
+        for (const item of SelectorEngine.prev(listGroup, SELECTOR_LINK_ITEMS)) {
+          item.classList.add(CLASS_NAME_ACTIVE$1);
+        }
+      }
+    }
+    _clearActiveClass(parent) {
+      parent.classList.remove(CLASS_NAME_ACTIVE$1);
+      const activeNodes = SelectorEngine.find(`${SELECTOR_TARGET_LINKS}.${CLASS_NAME_ACTIVE$1}`, parent);
+      for (const node of activeNodes) {
+        node.classList.remove(CLASS_NAME_ACTIVE$1);
+      }
+    }
+
+    // Static
+    static jQueryInterface(config) {
+      return this.each(function () {
+        const data = ScrollSpy.getOrCreateInstance(this, config);
+        if (typeof config !== 'string') {
+          return;
+        }
+        if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {
+          throw new TypeError(`No method named "${config}"`);
+        }
+        data[config]();
+      });
+    }
+  }
+
+  /**
+   * Data API implementation
+   */
+
+  EventHandler.on(window, EVENT_LOAD_DATA_API$1, () => {
+    for (const spy of SelectorEngine.find(SELECTOR_DATA_SPY)) {
+      ScrollSpy.getOrCreateInstance(spy);
+    }
+  });
+
+  /**
+   * jQuery
+   */
+
+  defineJQueryPlugin(ScrollSpy);
+
+  /**
+   * --------------------------------------------------------------------------
+   * Bootstrap tab.js
+   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
+   * --------------------------------------------------------------------------
+   */
+
+
+  /**
+   * Constants
+   */
+
+  const NAME$1 = 'tab';
+  const DATA_KEY$1 = 'bs.tab';
+  const EVENT_KEY$1 = `.${DATA_KEY$1}`;
+  const EVENT_HIDE$1 = `hide${EVENT_KEY$1}`;
+  const EVENT_HIDDEN$1 = `hidden${EVENT_KEY$1}`;
+  const EVENT_SHOW$1 = `show${EVENT_KEY$1}`;
+  const EVENT_SHOWN$1 = `shown${EVENT_KEY$1}`;
+  const EVENT_CLICK_DATA_API = `click${EVENT_KEY$1}`;
+  const EVENT_KEYDOWN = `keydown${EVENT_KEY$1}`;
+  const EVENT_LOAD_DATA_API = `load${EVENT_KEY$1}`;
+  const ARROW_LEFT_KEY = 'ArrowLeft';
+  const ARROW_RIGHT_KEY = 'ArrowRight';
+  const ARROW_UP_KEY = 'ArrowUp';
+  const ARROW_DOWN_KEY = 'ArrowDown';
+  const HOME_KEY = 'Home';
+  const END_KEY = 'End';
+  const CLASS_NAME_ACTIVE = 'active';
+  const CLASS_NAME_FADE$1 = 'fade';
+  const CLASS_NAME_SHOW$1 = 'show';
+  const CLASS_DROPDOWN = 'dropdown';
+  const SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle';
+  const SELECTOR_DROPDOWN_MENU = '.dropdown-menu';
+  const NOT_SELECTOR_DROPDOWN_TOGGLE = ':not(.dropdown-toggle)';
+  const SELECTOR_TAB_PANEL = '.list-group, .nav, [role="tablist"]';
+  const SELECTOR_OUTER = '.nav-item, .list-group-item';
+  const SELECTOR_INNER = `.nav-link${NOT_SELECTOR_DROPDOWN_TOGGLE}, .list-group-item${NOT_SELECTOR_DROPDOWN_TOGGLE}, [role="tab"]${NOT_SELECTOR_DROPDOWN_TOGGLE}`;
+  const SELECTOR_DATA_TOGGLE = '[data-bs-toggle="tab"], [data-bs-toggle="pill"], [data-bs-toggle="list"]'; // TODO: could only be `tab` in v6
+  const SELECTOR_INNER_ELEM = `${SELECTOR_INNER}, ${SELECTOR_DATA_TOGGLE}`;
+  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"]`;
+
+  /**
+   * Class definition
+   */
+
+  class Tab extends BaseComponent {
+    constructor(element) {
+      super(element);
+      this._parent = this._element.closest(SELECTOR_TAB_PANEL);
+      if (!this._parent) {
+        return;
+        // TODO: should throw exception in v6
+        // throw new TypeError(`${element.outerHTML} has not a valid parent ${SELECTOR_INNER_ELEM}`)
+      }
+
+      // Set up initial aria attributes
+      this._setInitialAttributes(this._parent, this._getChildren());
+      EventHandler.on(this._element, EVENT_KEYDOWN, event => this._keydown(event));
+    }
+
+    // Getters
+    static get NAME() {
+      return NAME$1;
+    }
+
+    // Public
+    show() {
+      // Shows this elem and deactivate the active sibling if exists
+      const innerElem = this._element;
+      if (this._elemIsActive(innerElem)) {
+        return;
+      }
+
+      // Search for active tab on same parent to deactivate it
+      const active = this._getActiveElem();
+      const hideEvent = active ? EventHandler.trigger(active, EVENT_HIDE$1, {
+        relatedTarget: innerElem
+      }) : null;
+      const showEvent = EventHandler.trigger(innerElem, EVENT_SHOW$1, {
+        relatedTarget: active
+      });
+      if (showEvent.defaultPrevented || hideEvent && hideEvent.defaultPrevented) {
+        return;
+      }
+      this._deactivate(active, innerElem);
+      this._activate(innerElem, active);
+    }
+
+    // Private
+    _activate(element, relatedElem) {
+      if (!element) {
+        return;
+      }
+      element.classList.add(CLASS_NAME_ACTIVE);
+      this._activate(SelectorEngine.getElementFromSelector(element)); // Search and activate/show the proper section
+
+      const complete = () => {
+        if (element.getAttribute('role') !== 'tab') {
+          element.classList.add(CLASS_NAME_SHOW$1);
+          return;
+        }
+        element.removeAttribute('tabindex');
+        element.setAttribute('aria-selected', true);
+        this._toggleDropDown(element, true);
+        EventHandler.trigger(element, EVENT_SHOWN$1, {
+          relatedTarget: relatedElem
+        });
+      };
+      this._queueCallback(complete, element, element.classList.contains(CLASS_NAME_FADE$1));
+    }
+    _deactivate(element, relatedElem) {
+      if (!element) {
+        return;
+      }
+      element.classList.remove(CLASS_NAME_ACTIVE);
+      element.blur();
+      this._deactivate(SelectorEngine.getElementFromSelector(element)); // Search and deactivate the shown section too
+
+      const complete = () => {
+        if (element.getAttribute('role') !== 'tab') {
+          element.classList.remove(CLASS_NAME_SHOW$1);
+          return;
+        }
+        element.setAttribute('aria-selected', false);
+        element.setAttribute('tabindex', '-1');
+        this._toggleDropDown(element, false);
+        EventHandler.trigger(element, EVENT_HIDDEN$1, {
+          relatedTarget: relatedElem
+        });
+      };
+      this._queueCallback(complete, element, element.classList.contains(CLASS_NAME_FADE$1));
+    }
+    _keydown(event) {
+      if (![ARROW_LEFT_KEY, ARROW_RIGHT_KEY, ARROW_UP_KEY, ARROW_DOWN_KEY, HOME_KEY, END_KEY].includes(event.key)) {
+        return;
+      }
+      event.stopPropagation(); // stopPropagation/preventDefault both added to support up/down keys without scrolling the page
+      event.preventDefault();
+      const children = this._getChildren().filter(element => !isDisabled(element));
+      let nextActiveElement;
+      if ([HOME_KEY, END_KEY].includes(event.key)) {
+        nextActiveElement = children[event.key === HOME_KEY ? 0 : children.length - 1];
+      } else {
+        const isNext = [ARROW_RIGHT_KEY, ARROW_DOWN_KEY].includes(event.key);
+        nextActiveElement = getNextActiveElement(children, event.target, isNext, true);
+      }
+      if (nextActiveElement) {
+        nextActiveElement.focus({
+          preventScroll: true
+        });
+        Tab.getOrCreateInstance(nextActiveElement).show();
+      }
+    }
+    _getChildren() {
+      // collection of inner elements
+      return SelectorEngine.find(SELECTOR_INNER_ELEM, this._parent);
+    }
+    _getActiveElem() {
+      return this._getChildren().find(child => this._elemIsActive(child)) || null;
+    }
+    _setInitialAttributes(parent, children) {
+      this._setAttributeIfNotExists(parent, 'role', 'tablist');
+      for (const child of children) {
+        this._setInitialAttributesOnChild(child);
+      }
+    }
+    _setInitialAttributesOnChild(child) {
+      child = this._getInnerElement(child);
+      const isActive = this._elemIsActive(child);
+      const outerElem = this._getOuterElement(child);
+      child.setAttribute('aria-selected', isActive);
+      if (outerElem !== child) {
+        this._setAttributeIfNotExists(outerElem, 'role', 'presentation');
+      }
+      if (!isActive) {
+        child.setAttribute('tabindex', '-1');
+      }
+      this._setAttributeIfNotExists(child, 'role', 'tab');
+
+      // set attributes to the related panel too
+      this._setInitialAttributesOnTargetPanel(child);
+    }
+    _setInitialAttributesOnTargetPanel(child) {
+      const target = SelectorEngine.getElementFromSelector(child);
+      if (!target) {
+        return;
+      }
+      this._setAttributeIfNotExists(target, 'role', 'tabpanel');
+      if (child.id) {
+        this._setAttributeIfNotExists(target, 'aria-labelledby', `${child.id}`);
+      }
+    }
+    _toggleDropDown(element, open) {
+      const outerElem = this._getOuterElement(element);
+      if (!outerElem.classList.contains(CLASS_DROPDOWN)) {
+        return;
+      }
+      const toggle = (selector, className) => {
+        const element = SelectorEngine.findOne(selector, outerElem);
+        if (element) {
+          element.classList.toggle(className, open);
+        }
+      };
+      toggle(SELECTOR_DROPDOWN_TOGGLE, CLASS_NAME_ACTIVE);
+      toggle(SELECTOR_DROPDOWN_MENU, CLASS_NAME_SHOW$1);
+      outerElem.setAttribute('aria-expanded', open);
+    }
+    _setAttributeIfNotExists(element, attribute, value) {
+      if (!element.hasAttribute(attribute)) {
+        element.setAttribute(attribute, value);
+      }
+    }
+    _elemIsActive(elem) {
+      return elem.classList.contains(CLASS_NAME_ACTIVE);
+    }
+
+    // Try to get the inner element (usually the .nav-link)
+    _getInnerElement(elem) {
+      return elem.matches(SELECTOR_INNER_ELEM) ? elem : SelectorEngine.findOne(SELECTOR_INNER_ELEM, elem);
+    }
+
+    // Try to get the outer element (usually the .nav-item)
+    _getOuterElement(elem) {
+      return elem.closest(SELECTOR_OUTER) || elem;
+    }
+
+    // Static
+    static jQueryInterface(config) {
+      return this.each(function () {
+        const data = Tab.getOrCreateInstance(this);
+        if (typeof config !== 'string') {
+          return;
+        }
+        if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {
+          throw new TypeError(`No method named "${config}"`);
+        }
+        data[config]();
+      });
+    }
+  }
+
+  /**
+   * Data API implementation
+   */
+
+  EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {
+    if (['A', 'AREA'].includes(this.tagName)) {
+      event.preventDefault();
+    }
+    if (isDisabled(this)) {
+      return;
+    }
+    Tab.getOrCreateInstance(this).show();
+  });
+
+  /**
+   * Initialize on focus
+   */
+  EventHandler.on(window, EVENT_LOAD_DATA_API, () => {
+    for (const element of SelectorEngine.find(SELECTOR_DATA_TOGGLE_ACTIVE)) {
+      Tab.getOrCreateInstance(element);
+    }
+  });
+  /**
+   * jQuery
+   */
+
+  defineJQueryPlugin(Tab);
+
+  /**
+   * --------------------------------------------------------------------------
+   * Bootstrap toast.js
+   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
+   * --------------------------------------------------------------------------
+   */
+
+
+  /**
+   * Constants
+   */
+
+  const NAME = 'toast';
+  const DATA_KEY = 'bs.toast';
+  const EVENT_KEY = `.${DATA_KEY}`;
+  const EVENT_MOUSEOVER = `mouseover${EVENT_KEY}`;
+  const EVENT_MOUSEOUT = `mouseout${EVENT_KEY}`;
+  const EVENT_FOCUSIN = `focusin${EVENT_KEY}`;
+  const EVENT_FOCUSOUT = `focusout${EVENT_KEY}`;
+  const EVENT_HIDE = `hide${EVENT_KEY}`;
+  const EVENT_HIDDEN = `hidden${EVENT_KEY}`;
+  const EVENT_SHOW = `show${EVENT_KEY}`;
+  const EVENT_SHOWN = `shown${EVENT_KEY}`;
+  const CLASS_NAME_FADE = 'fade';
+  const CLASS_NAME_HIDE = 'hide'; // @deprecated - kept here only for backwards compatibility
+  const CLASS_NAME_SHOW = 'show';
+  const CLASS_NAME_SHOWING = 'showing';
+  const DefaultType = {
+    animation: 'boolean',
+    autohide: 'boolean',
+    delay: 'number'
+  };
+  const Default = {
+    animation: true,
+    autohide: true,
+    delay: 5000
+  };
+
+  /**
+   * Class definition
+   */
+
+  class Toast extends BaseComponent {
+    constructor(element, config) {
+      super(element, config);
+      this._timeout = null;
+      this._hasMouseInteraction = false;
+      this._hasKeyboardInteraction = false;
+      this._setListeners();
+    }
+
+    // Getters
+    static get Default() {
+      return Default;
+    }
+    static get DefaultType() {
+      return DefaultType;
+    }
+    static get NAME() {
+      return NAME;
+    }
+
+    // Public
+    show() {
+      const showEvent = EventHandler.trigger(this._element, EVENT_SHOW);
+      if (showEvent.defaultPrevented) {
+        return;
+      }
+      this._clearTimeout();
+      if (this._config.animation) {
+        this._element.classList.add(CLASS_NAME_FADE);
+      }
+      const complete = () => {
+        this._element.classList.remove(CLASS_NAME_SHOWING);
+        EventHandler.trigger(this._element, EVENT_SHOWN);
+        this._maybeScheduleHide();
+      };
+      this._element.classList.remove(CLASS_NAME_HIDE); // @deprecated
+      reflow(this._element);
+      this._element.classList.add(CLASS_NAME_SHOW, CLASS_NAME_SHOWING);
+      this._queueCallback(complete, this._element, this._config.animation);
+    }
+    hide() {
+      if (!this.isShown()) {
+        return;
+      }
+      const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE);
+      if (hideEvent.defaultPrevented) {
+        return;
+      }
+      const complete = () => {
+        this._element.classList.add(CLASS_NAME_HIDE); // @deprecated
+        this._element.classList.remove(CLASS_NAME_SHOWING, CLASS_NAME_SHOW);
+        EventHandler.trigger(this._element, EVENT_HIDDEN);
+      };
+      this._element.classList.add(CLASS_NAME_SHOWING);
+      this._queueCallback(complete, this._element, this._config.animation);
+    }
+    dispose() {
+      this._clearTimeout();
+      if (this.isShown()) {
+        this._element.classList.remove(CLASS_NAME_SHOW);
+      }
+      super.dispose();
+    }
+    isShown() {
+      return this._element.classList.contains(CLASS_NAME_SHOW);
+    }
+
+    // Private
+
+    _maybeScheduleHide() {
+      if (!this._config.autohide) {
+        return;
+      }
+      if (this._hasMouseInteraction || this._hasKeyboardInteraction) {
+        return;
+      }
+      this._timeout = setTimeout(() => {
+        this.hide();
+      }, this._config.delay);
+    }
+    _onInteraction(event, isInteracting) {
+      switch (event.type) {
+        case 'mouseover':
+        case 'mouseout':
+          {
+            this._hasMouseInteraction = isInteracting;
+            break;
+          }
+        case 'focusin':
+        case 'focusout':
+          {
+            this._hasKeyboardInteraction = isInteracting;
+            break;
+          }
+      }
+      if (isInteracting) {
+        this._clearTimeout();
+        return;
+      }
+      const nextElement = event.relatedTarget;
+      if (this._element === nextElement || this._element.contains(nextElement)) {
+        return;
+      }
+      this._maybeScheduleHide();
+    }
+    _setListeners() {
+      EventHandler.on(this._element, EVENT_MOUSEOVER, event => this._onInteraction(event, true));
+      EventHandler.on(this._element, EVENT_MOUSEOUT, event => this._onInteraction(event, false));
+      EventHandler.on(this._element, EVENT_FOCUSIN, event => this._onInteraction(event, true));
+      EventHandler.on(this._element, EVENT_FOCUSOUT, event => this._onInteraction(event, false));
+    }
+    _clearTimeout() {
+      clearTimeout(this._timeout);
+      this._timeout = null;
+    }
+
+    // Static
+    static jQueryInterface(config) {
+      return this.each(function () {
+        const data = Toast.getOrCreateInstance(this, config);
+        if (typeof config === 'string') {
+          if (typeof data[config] === 'undefined') {
+            throw new TypeError(`No method named "${config}"`);
+          }
+          data[config](this);
+        }
+      });
+    }
+  }
+
+  /**
+   * Data API implementation
+   */
+
+  enableDismissTrigger(Toast);
+
+  /**
+   * jQuery
+   */
+
+  defineJQueryPlugin(Toast);
+
+  /**
+   * --------------------------------------------------------------------------
+   * Bootstrap index.umd.js
+   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
+   * --------------------------------------------------------------------------
+   */
+
+  const index_umd = {
+    Alert,
+    Button,
+    Carousel,
+    Collapse,
+    Dropdown,
+    Modal,
+    Offcanvas,
+    Popover,
+    ScrollSpy,
+    Tab,
+    Toast,
+    Tooltip
+  };
+
+  return index_umd;
+
+}));
+//# sourceMappingURL=bootstrap.js.map

Різницю між файлами не показано, бо вона завелика
+ 0 - 0
public/libs/bootstrap/dist/js/bootstrap.js.map


Різницю між файлами не показано, бо вона завелика
+ 5 - 0
public/libs/bootstrap/dist/js/bootstrap.min.js


Різницю між файлами не показано, бо вона завелика
+ 0 - 0
public/libs/bootstrap/dist/js/bootstrap.min.js.map


+ 66 - 0
public/libs/countup.js/dist/countUp.d.ts

@@ -0,0 +1,66 @@
+export interface CountUpOptions {
+    startVal?: number;
+    decimalPlaces?: number;
+    duration?: number;
+    useGrouping?: boolean;
+    useIndianSeparators?: boolean;
+    useEasing?: boolean;
+    smartEasingThreshold?: number;
+    smartEasingAmount?: number;
+    separator?: string;
+    decimal?: string;
+    easingFn?: (t: number, b: number, c: number, d: number) => number;
+    formattingFn?: (n: number) => string;
+    prefix?: string;
+    suffix?: string;
+    numerals?: string[];
+    enableScrollSpy?: boolean;
+    scrollSpyDelay?: number;
+    scrollSpyOnce?: boolean;
+    onCompleteCallback?: () => any;
+    plugin?: CountUpPlugin;
+}
+export declare interface CountUpPlugin {
+    render(elem: HTMLElement, formatted: string): void;
+}
+export declare class CountUp {
+    private endVal;
+    options?: CountUpOptions;
+    version: string;
+    private defaults;
+    private rAF;
+    private startTime;
+    private remaining;
+    private finalEndVal;
+    private useEasing;
+    private countDown;
+    el: HTMLElement | HTMLInputElement;
+    formattingFn: (num: number) => string;
+    easingFn?: (t: number, b: number, c: number, d: number) => number;
+    error: string;
+    startVal: number;
+    duration: number;
+    paused: boolean;
+    frameVal: number;
+    once: boolean;
+    constructor(target: string | HTMLElement | HTMLInputElement, endVal: number, options?: CountUpOptions);
+    handleScroll(self: CountUp): void;
+    /**
+     * Smart easing works by breaking the animation into 2 parts, the second part being the
+     * smartEasingAmount and first part being the total amount minus the smartEasingAmount. It works
+     * by disabling easing for the first part and enabling it on the second part. It is used if
+     * useEasing is true and the total animation amount exceeds the smartEasingThreshold.
+     */
+    private determineDirectionAndSmartEasing;
+    start(callback?: (args?: any) => any): void;
+    pauseResume(): void;
+    reset(): void;
+    update(newEndVal: string | number): void;
+    count: (timestamp: number) => void;
+    printValue(val: number): void;
+    ensureNumber(n: any): boolean;
+    validateValue(value: string | number): number;
+    private resetDuration;
+    formatNumber: (num: number) => string;
+    easeOutExpo: (t: number, b: number, c: number, d: number) => number;
+}

+ 300 - 0
public/libs/countup.js/dist/countUp.js

@@ -0,0 +1,300 @@
+var __assign = (this && this.__assign) || function () {
+    __assign = Object.assign || function(t) {
+        for (var s, i = 1, n = arguments.length; i < n; i++) {
+            s = arguments[i];
+            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
+                t[p] = s[p];
+        }
+        return t;
+    };
+    return __assign.apply(this, arguments);
+};
+// playground: stackblitz.com/edit/countup-typescript
+var CountUp = /** @class */ (function () {
+    function CountUp(target, endVal, options) {
+        var _this = this;
+        this.endVal = endVal;
+        this.options = options;
+        this.version = '2.6.2';
+        this.defaults = {
+            startVal: 0,
+            decimalPlaces: 0,
+            duration: 2,
+            useEasing: true,
+            useGrouping: true,
+            useIndianSeparators: false,
+            smartEasingThreshold: 999,
+            smartEasingAmount: 333,
+            separator: ',',
+            decimal: '.',
+            prefix: '',
+            suffix: '',
+            enableScrollSpy: false,
+            scrollSpyDelay: 200,
+            scrollSpyOnce: false,
+        };
+        this.finalEndVal = null; // for smart easing
+        this.useEasing = true;
+        this.countDown = false;
+        this.error = '';
+        this.startVal = 0;
+        this.paused = true;
+        this.once = false;
+        this.count = function (timestamp) {
+            if (!_this.startTime) {
+                _this.startTime = timestamp;
+            }
+            var progress = timestamp - _this.startTime;
+            _this.remaining = _this.duration - progress;
+            // to ease or not to ease
+            if (_this.useEasing) {
+                if (_this.countDown) {
+                    _this.frameVal = _this.startVal - _this.easingFn(progress, 0, _this.startVal - _this.endVal, _this.duration);
+                }
+                else {
+                    _this.frameVal = _this.easingFn(progress, _this.startVal, _this.endVal - _this.startVal, _this.duration);
+                }
+            }
+            else {
+                _this.frameVal = _this.startVal + (_this.endVal - _this.startVal) * (progress / _this.duration);
+            }
+            // don't go past endVal since progress can exceed duration in the last frame
+            var wentPast = _this.countDown ? _this.frameVal < _this.endVal : _this.frameVal > _this.endVal;
+            _this.frameVal = wentPast ? _this.endVal : _this.frameVal;
+            // decimal
+            _this.frameVal = Number(_this.frameVal.toFixed(_this.options.decimalPlaces));
+            // format and print value
+            _this.printValue(_this.frameVal);
+            // whether to continue
+            if (progress < _this.duration) {
+                _this.rAF = requestAnimationFrame(_this.count);
+            }
+            else if (_this.finalEndVal !== null) {
+                // smart easing
+                _this.update(_this.finalEndVal);
+            }
+            else {
+                if (_this.options.onCompleteCallback) {
+                    _this.options.onCompleteCallback();
+                }
+            }
+        };
+        // default format and easing functions
+        this.formatNumber = function (num) {
+            var neg = (num < 0) ? '-' : '';
+            var result, x1, x2, x3;
+            result = Math.abs(num).toFixed(_this.options.decimalPlaces);
+            result += '';
+            var x = result.split('.');
+            x1 = x[0];
+            x2 = x.length > 1 ? _this.options.decimal + x[1] : '';
+            if (_this.options.useGrouping) {
+                x3 = '';
+                var factor = 3, j = 0;
+                for (var i = 0, len = x1.length; i < len; ++i) {
+                    if (_this.options.useIndianSeparators && i === 4) {
+                        factor = 2;
+                        j = 1;
+                    }
+                    if (i !== 0 && (j % factor) === 0) {
+                        x3 = _this.options.separator + x3;
+                    }
+                    j++;
+                    x3 = x1[len - i - 1] + x3;
+                }
+                x1 = x3;
+            }
+            // optional numeral substitution
+            if (_this.options.numerals && _this.options.numerals.length) {
+                x1 = x1.replace(/[0-9]/g, function (w) { return _this.options.numerals[+w]; });
+                x2 = x2.replace(/[0-9]/g, function (w) { return _this.options.numerals[+w]; });
+            }
+            return neg + _this.options.prefix + x1 + x2 + _this.options.suffix;
+        };
+        // t: current time, b: beginning value, c: change in value, d: duration
+        this.easeOutExpo = function (t, b, c, d) {
+            return c * (-Math.pow(2, -10 * t / d) + 1) * 1024 / 1023 + b;
+        };
+        this.options = __assign(__assign({}, this.defaults), options);
+        this.formattingFn = (this.options.formattingFn) ?
+            this.options.formattingFn : this.formatNumber;
+        this.easingFn = (this.options.easingFn) ?
+            this.options.easingFn : this.easeOutExpo;
+        this.startVal = this.validateValue(this.options.startVal);
+        this.frameVal = this.startVal;
+        this.endVal = this.validateValue(endVal);
+        this.options.decimalPlaces = Math.max(0 || this.options.decimalPlaces);
+        this.resetDuration();
+        this.options.separator = String(this.options.separator);
+        this.useEasing = this.options.useEasing;
+        if (this.options.separator === '') {
+            this.options.useGrouping = false;
+        }
+        this.el = (typeof target === 'string') ? document.getElementById(target) : target;
+        if (this.el) {
+            this.printValue(this.startVal);
+        }
+        else {
+            this.error = '[CountUp] target is null or undefined';
+        }
+        // scroll spy
+        if (typeof window !== 'undefined' && this.options.enableScrollSpy) {
+            if (!this.error) {
+                // set up global array of onscroll functions to handle multiple instances
+                window['onScrollFns'] = window['onScrollFns'] || [];
+                window['onScrollFns'].push(function () { return _this.handleScroll(_this); });
+                window.onscroll = function () {
+                    window['onScrollFns'].forEach(function (fn) { return fn(); });
+                };
+                this.handleScroll(this);
+            }
+            else {
+                console.error(this.error, target);
+            }
+        }
+    }
+    CountUp.prototype.handleScroll = function (self) {
+        if (!self || !window || self.once)
+            return;
+        var bottomOfScroll = window.innerHeight + window.scrollY;
+        var rect = self.el.getBoundingClientRect();
+        var topOfEl = rect.top + window.pageYOffset;
+        var bottomOfEl = rect.top + rect.height + window.pageYOffset;
+        if (bottomOfEl < bottomOfScroll && bottomOfEl > window.scrollY && self.paused) {
+            // in view
+            self.paused = false;
+            setTimeout(function () { return self.start(); }, self.options.scrollSpyDelay);
+            if (self.options.scrollSpyOnce)
+                self.once = true;
+        }
+        else if ((window.scrollY > bottomOfEl || topOfEl > bottomOfScroll) &&
+            !self.paused) {
+            // out of view
+            self.reset();
+        }
+    };
+    /**
+     * Smart easing works by breaking the animation into 2 parts, the second part being the
+     * smartEasingAmount and first part being the total amount minus the smartEasingAmount. It works
+     * by disabling easing for the first part and enabling it on the second part. It is used if
+     * useEasing is true and the total animation amount exceeds the smartEasingThreshold.
+     */
+    CountUp.prototype.determineDirectionAndSmartEasing = function () {
+        var end = (this.finalEndVal) ? this.finalEndVal : this.endVal;
+        this.countDown = (this.startVal > end);
+        var animateAmount = end - this.startVal;
+        if (Math.abs(animateAmount) > this.options.smartEasingThreshold && this.options.useEasing) {
+            this.finalEndVal = end;
+            var up = (this.countDown) ? 1 : -1;
+            this.endVal = end + (up * this.options.smartEasingAmount);
+            this.duration = this.duration / 2;
+        }
+        else {
+            this.endVal = end;
+            this.finalEndVal = null;
+        }
+        if (this.finalEndVal !== null) {
+            // setting finalEndVal indicates smart easing
+            this.useEasing = false;
+        }
+        else {
+            this.useEasing = this.options.useEasing;
+        }
+    };
+    // start animation
+    CountUp.prototype.start = function (callback) {
+        if (this.error) {
+            return;
+        }
+        if (callback) {
+            this.options.onCompleteCallback = callback;
+        }
+        if (this.duration > 0) {
+            this.determineDirectionAndSmartEasing();
+            this.paused = false;
+            this.rAF = requestAnimationFrame(this.count);
+        }
+        else {
+            this.printValue(this.endVal);
+        }
+    };
+    // pause/resume animation
+    CountUp.prototype.pauseResume = function () {
+        if (!this.paused) {
+            cancelAnimationFrame(this.rAF);
+        }
+        else {
+            this.startTime = null;
+            this.duration = this.remaining;
+            this.startVal = this.frameVal;
+            this.determineDirectionAndSmartEasing();
+            this.rAF = requestAnimationFrame(this.count);
+        }
+        this.paused = !this.paused;
+    };
+    // reset to startVal so animation can be run again
+    CountUp.prototype.reset = function () {
+        cancelAnimationFrame(this.rAF);
+        this.paused = true;
+        this.resetDuration();
+        this.startVal = this.validateValue(this.options.startVal);
+        this.frameVal = this.startVal;
+        this.printValue(this.startVal);
+    };
+    // pass a new endVal and start animation
+    CountUp.prototype.update = function (newEndVal) {
+        cancelAnimationFrame(this.rAF);
+        this.startTime = null;
+        this.endVal = this.validateValue(newEndVal);
+        if (this.endVal === this.frameVal) {
+            return;
+        }
+        this.startVal = this.frameVal;
+        if (this.finalEndVal == null) {
+            this.resetDuration();
+        }
+        this.finalEndVal = null;
+        this.determineDirectionAndSmartEasing();
+        this.rAF = requestAnimationFrame(this.count);
+    };
+    CountUp.prototype.printValue = function (val) {
+        var _a;
+        if (!this.el)
+            return;
+        var result = this.formattingFn(val);
+        if ((_a = this.options.plugin) === null || _a === void 0 ? void 0 : _a.render) {
+            this.options.plugin.render(this.el, result);
+            return;
+        }
+        if (this.el.tagName === 'INPUT') {
+            var input = this.el;
+            input.value = result;
+        }
+        else if (this.el.tagName === 'text' || this.el.tagName === 'tspan') {
+            this.el.textContent = result;
+        }
+        else {
+            this.el.innerHTML = result;
+        }
+    };
+    CountUp.prototype.ensureNumber = function (n) {
+        return (typeof n === 'number' && !isNaN(n));
+    };
+    CountUp.prototype.validateValue = function (value) {
+        var newValue = Number(value);
+        if (!this.ensureNumber(newValue)) {
+            this.error = "[CountUp] invalid start or end value: ".concat(value);
+            return null;
+        }
+        else {
+            return newValue;
+        }
+    };
+    CountUp.prototype.resetDuration = function () {
+        this.startTime = null;
+        this.duration = Number(this.options.duration) * 1000;
+        this.remaining = this.duration;
+    };
+    return CountUp;
+}());
+export { CountUp };

Різницю між файлами не показано, бо вона завелика
+ 0 - 0
public/libs/countup.js/dist/countUp.min.js


Різницю між файлами не показано, бо вона завелика
+ 0 - 0
public/libs/countup.js/dist/countUp.umd.js


+ 26 - 0
public/libs/countup.js/dist/requestAnimationFrame.polyfill.js

@@ -0,0 +1,26 @@
+// make sure requestAnimationFrame and cancelAnimationFrame are defined
+// polyfill for browsers without native support
+// by Opera engineer Erik Möller
+(function () {
+  var lastTime = 0;
+  var vendors = ['webkit', 'moz', 'ms', 'o'];
+  for (var x = 0; x < vendors.length && !window.requestAnimationFrame; ++x) {
+    window.requestAnimationFrame = window[vendors[x] + 'RequestAnimationFrame'];
+    window.cancelAnimationFrame = window[vendors[x] + 'CancelAnimationFrame'] ||
+      window[vendors[x] + 'CancelRequestAnimationFrame'];
+  }
+  if (!window.requestAnimationFrame) {
+    window.requestAnimationFrame = function (callback) {
+      var currTime = new Date().getTime();
+      var timeToCall = Math.max(0, 16 - (currTime - lastTime));
+      var id = window.setTimeout(function () { return callback(currTime + timeToCall); }, timeToCall);
+      lastTime = currTime + timeToCall;
+      return id;
+    };
+  }
+  if (!window.cancelAnimationFrame) {
+    window.cancelAnimationFrame = function (id) {
+      clearTimeout(id);
+    };
+  }
+})();

+ 1 - 0
public/libs/dropzone/dist/basic.css

@@ -0,0 +1 @@
+.dropzone,.dropzone *{box-sizing:border-box}.dropzone{position:relative}.dropzone .dz-preview{position:relative;display:inline-block;width:120px;margin:.5em}.dropzone .dz-preview .dz-progress{display:block;height:15px;border:1px solid #aaa}.dropzone .dz-preview .dz-progress .dz-upload{display:block;height:100%;width:0;background:green}.dropzone .dz-preview .dz-error-message{color:red;display:none}.dropzone .dz-preview.dz-error .dz-error-message,.dropzone .dz-preview.dz-error .dz-error-mark{display:block}.dropzone .dz-preview.dz-success .dz-success-mark{display:block}.dropzone .dz-preview .dz-error-mark,.dropzone .dz-preview .dz-success-mark{position:absolute;display:none;left:30px;top:30px;width:54px;height:58px;left:50%;margin-left:-27px}/*# sourceMappingURL=basic.css.map */

+ 1 - 0
public/libs/dropzone/dist/basic.css.map

@@ -0,0 +1 @@
+{"version":3,"sourceRoot":"","sources":["../src/basic.scss"],"names":[],"mappings":"AAEA,sBACE,sBAEF,UAEE,kBAEA,sBACE,kBACA,qBACA,YACA,YAEA,mCACE,cACA,YACA,sBACA,8CACE,cACA,YACA,QACA,iBAIJ,wCACE,UACA,aAGA,+FACE,cAIF,kDACE,cAIJ,4EACE,kBACA,aACA,UACA,SACA,WACA,YACA,SACA","file":"basic.css"}

Різницю між файлами не показано, бо вона завелика
+ 0 - 0
public/libs/dropzone/dist/dropzone-min.js


Різницю між файлами не показано, бо вона завелика
+ 0 - 0
public/libs/dropzone/dist/dropzone-min.js.map


Різницю між файлами не показано, бо вона завелика
+ 0 - 0
public/libs/dropzone/dist/dropzone.css


+ 1 - 0
public/libs/dropzone/dist/dropzone.css.map

@@ -0,0 +1 @@
+{"version":3,"sourceRoot":"","sources":["../src/dropzone.scss"],"names":[],"mappings":"AAGA,2BACE,GACE,UACA,2BAGF,QACE,UACA,0BAGF,KACE,UACA,6BAKJ,oBACE,GACE,UACA,2BAEF,IACE,UACA,2BAMJ,iBACE,sBACA,yBACA,wBAKF,sBACE,sBAEF,UAmBE,iBACA,gCACA,kBACA,kBAhBA,uBACE,eAEA,yBACE,eAGA,wEACE,eAWJ,iCACE,aAIJ,wBACE,mBACA,oCACE,WAGJ,sBACE,kBACA,aAEA,iCACE,gBACA,cACA,YACA,UACA,aACA,eACA,gBAMJ,sBACE,kBACA,qBAEA,mBAEA,YACA,iBAEA,4BAEE,aACA,wCACE,UAMF,gDACE,cArEgB,KAsEhB,gBACA,kDAGF,kDACE,UAIJ,uCACE,gBACA,mDACE,8BAIJ,iCACE,eACA,kBACA,cACA,eACA,YACA,uCACE,0BAIJ,wCACE,UAEF,kCAGE,WAEA,kBACA,MACA,OAEA,UAEA,eACA,eACA,eACA,gBACA,kBACA,qBAIA,iBAEA,2CACE,kBACA,eAGF,+CAEE,mBAGE,0DACE,sCACA,sCAGJ,2DAIE,gBACA,uBAJA,gEACE,6BASJ,oGACE,sCACA,eACA,kBASF,0CACE,4BACA,iBAIN,gCACE,cAvKkB,KAwKlB,gBACA,MA3KS,MA4KT,OA5KS,MA6KT,kBACA,cACA,WAEA,oCACE,cAMF,kDACE,6DAIF,8CACE,UACA,sDASJ,4EAKE,oBAEA,UACA,YAEA,kBACA,cACA,QACA,SACA,kBACA,iBAEA,WApBiB,eAqBjB,kBAEA,oFACE,cACA,MAnBY,KAoBZ,OArBa,KAsBb,KA5BY,KAiChB,iDACE,UACA,0BAEF,+CACE,UACA,+BAIA,uDACE,iCAGJ,mCAIE,UACA,aAEA,oBACA,kBACA,YACA,QACA,iBACA,SACA,UAEA,gCACA,WA9DiB,eAgEjB,mBAEA,gBAEA,8CACE,WAtEY,KAwEZ,cACA,kBACA,YACA,QACA,mCAEA,mBAMF,iDACE,cAEF,uDACE,UACA,oBAIJ,wCAIE,oBACA,aACA,kBACA,cACA,aACA,UACA,4BACA,kBACA,eACA,UACA,WACA,MAdQ,MAeR,WAdQ,QAeR,iBACA,WAGA,8CACE,WACA,kBACA,SACA,UACA,QACA,SACA,kCACA,mCACA","file":"dropzone.css"}

Різницю між файлами не показано, бо вона завелика
+ 129 - 0
public/libs/dropzone/dist/dropzone.js


Різницю між файлами не показано, бо вона завелика
+ 0 - 0
public/libs/dropzone/dist/dropzone.js.map


Різницю між файлами не показано, бо вона завелика
+ 74 - 0
public/libs/dropzone/dist/dropzone.mjs


Різницю між файлами не показано, бо вона завелика
+ 0 - 0
public/libs/dropzone/dist/dropzone.mjs.map


+ 21 - 0
public/libs/fslightbox/LICENSE

@@ -0,0 +1,21 @@
+## The MIT License (MIT) ##
+
+Copyright (c) Piotr Zdziarski
+
+Permission 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:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE 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.

+ 68 - 0
public/libs/fslightbox/README.md

@@ -0,0 +1,68 @@
+# Vanilla JavaScript Fullscreen Lightbox Basic
+
+## Description
+A vanilla JavaScript plug-in without production dependencies for displaying images, videos, or, through custom sources, anything you want in a clean overlying box.
+The project's website: https://fslightbox.com.
+
+## Installation
+### Through an archive downloaded from the website.
+Just before the end of the &lt;body&gt; tag:
+```html
+<script src="fslightbox.js"></script>
+```
+### Or, through a package manager.
+```
+npm install fslightbox
+```
+And import it in your project's JavaScript file, for example through the Node.js "require" function:
+```
+require("fslightbox")
+```
+
+## Basic usage
+```html
+<a data-fslightbox="gallery" href="https://i.imgur.com/fsyrScY.jpg">
+	Open the first slide (an image)
+</a>
+<a 
+	data-fslightbox="gallery"
+	href="https://www.youtube.com/watch?v=xshEZzpS4CQ"
+>
+	Open the second slide (a YouTube video)
+</a>
+<a
+	data-fslightbox="gallery"
+	href="https://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4"
+>
+	Open the third slide (an HTML video)
+</a>
+<a data-fslightbox="gallery" href="#vimeo">
+	Open the fourth slide (a Vimeo video—a custom source)
+</a>
+<iframe
+	id="vimeo"
+	src="https://player.vimeo.com/video/22439234"
+	width="1920px"
+	height="1080px"
+	frameBorder="0"
+	allow="autoplay; fullscreen"
+	allowFullScreen
+></iframe>
+```
+
+## Documentation
+Available at: https://fslightbox.com/javascript/documentation.
+
+## Demo
+Available at: https://fslightbox.com/javascript.
+
+## Browser Compatibility
+
+| Browser | Works? |
+| --- | --- |
+| Chrome | Yes |
+| Firefox | Yes |
+| Opera | Yes |
+| Safari | Yes |
+| Edge | Yes |
+| IE 11 | Yes |

Різницю між файлами не показано, бо вона завелика
+ 0 - 0
public/libs/fslightbox/index.js


+ 38 - 0
public/libs/fslightbox/package.json

@@ -0,0 +1,38 @@
+{
+  "name": "fslightbox",
+  "version": "3.4.1",
+  "description": "An easy to use vanilla JavaScript plug-in without production dependencies for displaying images, videos, or, through custom sources, anything you want in a clean overlying box.",
+  "author": "Bantha Apps Piotr Zdziarski",
+  "license": "MIT",
+  "homepage": "https://fslightbox.com",
+  "bugs": {
+    "url": "https://github.com/banthagroup/fslightbox/issues"
+  },
+  "main": "index.js",
+  "keywords": [
+    "fslightbox",
+    "vanilla javascript fslightbox",
+    "vanilla js fslightbox",
+    "vanilla javascript lightbox",
+    "vanilla js lightbox",
+    "lightbox"
+  ],
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/banthagroup/fslightbox"
+  },
+  "scripts": {
+    "w": "webpack-dev-server --host 0.0.0.0",
+    "p": "webpack --config webpack.prod.config.js && cp index.js fslightbox.js"
+  },
+  "devDependencies": {
+    "@babel/core": "^7.4.4",
+    "@babel/preset-env": "^7.4.4",
+    "@babel/register": "^7.4.4",
+    "babel-loader": "^8.0.5",
+    "html-webpack-plugin": "^3.2.0",
+    "webpack": "^4.30.0",
+    "webpack-cli": "^3.3.1",
+    "webpack-dev-server": "^3.3.1"
+  }
+}

+ 2318 - 0
public/libs/jsvectormap/dist/js/jsvectormap.js

@@ -0,0 +1,2318 @@
+(function (global, factory) {
+  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
+  typeof define === 'function' && define.amd ? define(factory) :
+  (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.jsVectorMap = factory());
+})(this, (function () { 'use strict';
+
+  function _inheritsLoose(subClass, superClass) {
+    subClass.prototype = Object.create(superClass.prototype);
+    subClass.prototype.constructor = subClass;
+    _setPrototypeOf(subClass, superClass);
+  }
+  function _setPrototypeOf(o, p) {
+    _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) {
+      o.__proto__ = p;
+      return o;
+    };
+    return _setPrototypeOf(o, p);
+  }
+  function _assertThisInitialized(self) {
+    if (self === void 0) {
+      throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
+    }
+    return self;
+  }
+  function _readOnlyError(name) {
+    throw new TypeError("\"" + name + "\" is read-only");
+  }
+  function _unsupportedIterableToArray(o, minLen) {
+    if (!o) return;
+    if (typeof o === "string") return _arrayLikeToArray(o, minLen);
+    var n = Object.prototype.toString.call(o).slice(8, -1);
+    if (n === "Object" && o.constructor) n = o.constructor.name;
+    if (n === "Map" || n === "Set") return Array.from(o);
+    if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);
+  }
+  function _arrayLikeToArray(arr, len) {
+    if (len == null || len > arr.length) len = arr.length;
+    for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];
+    return arr2;
+  }
+  function _createForOfIteratorHelperLoose(o, allowArrayLike) {
+    var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"];
+    if (it) return (it = it.call(o)).next.bind(it);
+    if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") {
+      if (it) o = it;
+      var i = 0;
+      return function () {
+        if (i >= o.length) return {
+          done: true
+        };
+        return {
+          done: false,
+          value: o[i++]
+        };
+      };
+    }
+    throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
+  }
+
+  // Matches polyfill
+  // https://developer.mozilla.org/en-US/docs/Web/API/Element/matches
+  if (!Element.prototype.matches) {
+    Element.prototype.matches = Element.prototype.matchesSelector || Element.prototype.mozMatchesSelector || Element.prototype.msMatchesSelector || Element.prototype.oMatchesSelector || Element.prototype.webkitMatchesSelector || function (s) {
+      var matches = (this.document || this.ownerDocument).querySelectorAll(s);
+      var i = matches.length;
+      while ((_readOnlyError("i")) >= 0 && matches.item(i) !== this) {}
+      return i > -1;
+    };
+  }
+
+  // Object.assign polyfill
+  // https://gist.github.com/spiralx/68cf40d7010d829340cb
+  if (!Object.assign) {
+    Object.defineProperty(Object, 'assign', {
+      enumerable: false,
+      configurable: true,
+      writable: true,
+      value: function value(target) {
+
+        if (target === undefined || target === null) {
+          throw new TypeError('Cannot convert first argument to object');
+        }
+        var to = Object(target);
+        for (var i = 1; i < arguments.length; i++) {
+          var nextSource = arguments[i];
+          if (nextSource === undefined || nextSource === null) {
+            continue;
+          }
+          nextSource = Object(nextSource);
+          var keysArray = Object.keys(Object(nextSource));
+          for (var nextIndex = 0, len = keysArray.length; nextIndex < len; nextIndex++) {
+            var nextKey = keysArray[nextIndex];
+            var desc = Object.getOwnPropertyDescriptor(nextSource, nextKey);
+            if (desc !== undefined && desc.enumerable) {
+              to[nextKey] = nextSource[nextKey];
+            }
+          }
+        }
+        return to;
+      }
+    });
+  }
+
+  /**
+   * By https://github.com/TehShrike/deepmerge
+   */
+
+  var isMergeableObject = function isMergeableObject(value) {
+    return isNonNullObject(value) && !isSpecial(value);
+  };
+  function isNonNullObject(value) {
+    return !!value && typeof value === 'object';
+  }
+  function isSpecial(value) {
+    var stringValue = Object.prototype.toString.call(value);
+    return stringValue === '[object RegExp]' || stringValue === '[object Date]' || isNode(value) || isReactElement(value);
+  }
+
+  // see https://github.com/facebook/react/blob/b5ac963fb791d1298e7f396236383bc955f916c1/src/isomorphic/classic/element/ReactElement.js#L21-L25
+  var canUseSymbol = typeof Symbol === 'function' && Symbol.for;
+  var REACT_ELEMENT_TYPE = canUseSymbol ? Symbol.for('react.element') : 0xeac7;
+  function isReactElement(value) {
+    return value.$$typeof === REACT_ELEMENT_TYPE;
+  }
+  function isNode(value) {
+    return value instanceof Node;
+  }
+  function emptyTarget(val) {
+    return Array.isArray(val) ? [] : {};
+  }
+  function cloneUnlessOtherwiseSpecified(value, options) {
+    return options.clone !== false && options.isMergeableObject(value) ? deepmerge(emptyTarget(value), value, options) : value;
+  }
+  function defaultArrayMerge(target, source, options) {
+    return target.concat(source).map(function (element) {
+      return cloneUnlessOtherwiseSpecified(element, options);
+    });
+  }
+  function getMergeFunction(key, options) {
+    if (!options.customMerge) {
+      return deepmerge;
+    }
+    var customMerge = options.customMerge(key);
+    return typeof customMerge === 'function' ? customMerge : deepmerge;
+  }
+  function getEnumerableOwnPropertySymbols(target) {
+    return Object.getOwnPropertySymbols ? Object.getOwnPropertySymbols(target).filter(function (symbol) {
+      return target.propertyIsEnumerable(symbol);
+    }) : [];
+  }
+  function getKeys(target) {
+    return Object.keys(target).concat(getEnumerableOwnPropertySymbols(target));
+  }
+  function propertyIsOnObject(object, property) {
+    try {
+      return property in object;
+    } catch (_) {
+      return false;
+    }
+  }
+
+  // Protects from prototype poisoning and unexpected merging up the prototype chain.
+  function propertyIsUnsafe(target, key) {
+    return propertyIsOnObject(target, key) // Properties are safe to merge if they don't exist in the target yet,
+    && !(Object.hasOwnProperty.call(target, key) // unsafe if they exist up the prototype chain,
+    && Object.propertyIsEnumerable.call(target, key)); // and also unsafe if they're nonenumerable.
+  }
+
+  function mergeObject(target, source, options) {
+    var destination = {};
+    if (options.isMergeableObject(target)) {
+      getKeys(target).forEach(function (key) {
+        destination[key] = cloneUnlessOtherwiseSpecified(target[key], options);
+      });
+    }
+    getKeys(source).forEach(function (key) {
+      if (propertyIsUnsafe(target, key)) {
+        return;
+      }
+      if (propertyIsOnObject(target, key) && options.isMergeableObject(source[key])) {
+        destination[key] = getMergeFunction(key, options)(target[key], source[key], options);
+      } else {
+        destination[key] = cloneUnlessOtherwiseSpecified(source[key], options);
+      }
+    });
+    return destination;
+  }
+  var deepmerge = function deepmerge(target, source, options) {
+    options = options || {};
+    options.arrayMerge = options.arrayMerge || defaultArrayMerge;
+    options.isMergeableObject = options.isMergeableObject || isMergeableObject;
+    // cloneUnlessOtherwiseSpecified is added to `options` so that custom arrayMerge()
+    // implementations can use it. The caller may not replace it.
+    options.cloneUnlessOtherwiseSpecified = cloneUnlessOtherwiseSpecified;
+    var sourceIsArray = Array.isArray(source);
+    var targetIsArray = Array.isArray(target);
+    var sourceAndTargetTypesMatch = sourceIsArray === targetIsArray;
+    if (!sourceAndTargetTypesMatch) {
+      return cloneUnlessOtherwiseSpecified(source, options);
+    } else if (sourceIsArray) {
+      return options.arrayMerge(target, source, options);
+    } else {
+      return mergeObject(target, source, options);
+    }
+  };
+
+  /**
+   * --------------------------------------------------------------------------
+   * Public Util Api
+   * --------------------------------------------------------------------------
+   */
+  var getElement = function getElement(selector) {
+    if (typeof selector === 'object' && typeof selector.nodeType !== 'undefined') {
+      return selector;
+    }
+    if (typeof selector === 'string') {
+      return document.querySelector(selector);
+    }
+    return null;
+  };
+  var createElement = function createElement(type, classes, content, html) {
+    if (html === void 0) {
+      html = false;
+    }
+    var el = document.createElement(type);
+    if (content) {
+      el[!html ? 'textContent' : 'innerHTML'] = content;
+    }
+    if (classes) {
+      el.className = classes;
+    }
+    return el;
+  };
+  var findElement = function findElement(parentElement, selector) {
+    return Element.prototype.querySelector.call(parentElement, selector);
+  };
+  var removeElement = function removeElement(target) {
+    target.parentNode.removeChild(target);
+  };
+  var isImageUrl = function isImageUrl(url) {
+    return /\.(jpg|gif|png)$/.test(url);
+  };
+  var hyphenate = function hyphenate(string) {
+    return string.replace(/[\w]([A-Z])/g, function (m) {
+      return m[0] + "-" + m[1];
+    }).toLowerCase();
+  };
+  var merge = function merge(target, source, deep) {
+    if (deep === void 0) {
+      deep = false;
+    }
+    if (deep) {
+      return deepmerge(target, source);
+    }
+    return Object.assign(target, source);
+  };
+  var getLineUid = function getLineUid(from, to) {
+    return from.toLowerCase() + ":to:" + to.toLowerCase();
+  };
+  var inherit = function inherit(target, source) {
+    Object.assign(target.prototype, source);
+  };
+
+  var eventRegistry = {};
+  var eventUid = 1;
+
+  /**
+   * ------------------------------------------------------------------------
+   * Event Handler
+   * ------------------------------------------------------------------------
+   */
+  var EventHandler = {
+    on: function on(element, event, handler, options) {
+      if (options === void 0) {
+        options = {};
+      }
+      var uid = "jvm:" + event + "::" + eventUid++;
+      eventRegistry[uid] = {
+        selector: element,
+        handler: handler
+      };
+      handler._uid = uid;
+      element.addEventListener(event, handler, options);
+    },
+    delegate: function delegate(element, event, selector, handler) {
+      event = event.split(' ');
+      event.forEach(function (eventName) {
+        EventHandler.on(element, eventName, function (e) {
+          var target = e.target;
+          if (target.matches(selector)) {
+            handler.call(target, e);
+          }
+        });
+      });
+    },
+    off: function off(element, event, handler) {
+      var eventType = event.split(':')[1];
+      element.removeEventListener(eventType, handler);
+      delete eventRegistry[handler._uid];
+    },
+    flush: function flush() {
+      Object.keys(eventRegistry).forEach(function (event) {
+        EventHandler.off(eventRegistry[event].selector, event, eventRegistry[event].handler);
+      });
+    },
+    getEventRegistry: function getEventRegistry() {
+      return eventRegistry;
+    }
+  };
+
+  function setupContainerEvents() {
+    var _this = this;
+    var map = this;
+    var mouseDown = false;
+    var oldPageX;
+    var oldPageY;
+    if (this.params.draggable) {
+      EventHandler.on(this.container, 'mousemove', function (e) {
+        if (!mouseDown) {
+          return false;
+        }
+        map.transX -= (oldPageX - e.pageX) / map.scale;
+        map.transY -= (oldPageY - e.pageY) / map.scale;
+        map._applyTransform();
+        oldPageX = e.pageX;
+        oldPageY = e.pageY;
+      });
+      EventHandler.on(this.container, 'mousedown', function (e) {
+        mouseDown = true;
+        oldPageX = e.pageX;
+        oldPageY = e.pageY;
+        return false;
+      });
+      EventHandler.on(document.body, 'mouseup', function () {
+        mouseDown = false;
+      });
+    }
+    if (this.params.zoomOnScroll) {
+      EventHandler.on(this.container, 'wheel', function (event) {
+        var deltaY = ((event.deltaY || -event.wheelDelta || event.detail) >> 10 || 1) * 75;
+        var rect = _this.container.getBoundingClientRect();
+        var offsetX = event.pageX - rect.left - window.pageXOffset;
+        var offsetY = event.pageY - rect.top - window.pageYOffset;
+        var zoomStep = Math.pow(1 + map.params.zoomOnScrollSpeed / 1000, -1.5 * deltaY);
+        if (map.tooltip) {
+          map._tooltip.hide();
+        }
+        map._setScale(map.scale * zoomStep, offsetX, offsetY);
+        event.preventDefault();
+      });
+    }
+  }
+
+  var Events = {
+    onLoaded: 'map:loaded',
+    onViewportChange: 'viewport:changed',
+    onRegionClick: 'region:clicked',
+    onMarkerClick: 'marker:clicked',
+    onRegionSelected: 'region:selected',
+    onMarkerSelected: 'marker:selected',
+    onRegionTooltipShow: 'region.tooltip:show',
+    onMarkerTooltipShow: 'marker.tooltip:show',
+    onDestroyed: 'map:destroyed'
+  };
+
+  var parseEvent = function parseEvent(map, selector, isTooltip) {
+    var element = getElement(selector);
+    var type = element.getAttribute('class').indexOf('jvm-region') === -1 ? 'marker' : 'region';
+    var isRegion = type === 'region';
+    var code = isRegion ? element.getAttribute('data-code') : element.getAttribute('data-index');
+    var event = isRegion ? Events.onRegionSelected : Events.onMarkerSelected;
+
+    // Init tooltip event
+    if (isTooltip) {
+      event = isRegion ? Events.onRegionTooltipShow : Events.onMarkerTooltipShow;
+    }
+    return {
+      type: type,
+      code: code,
+      event: event,
+      element: isRegion ? map.regions[code].element : map._markers[code].element,
+      tooltipText: isRegion ? map._mapData.paths[code].name || '' : map._markers[code].config.name || ''
+    };
+  };
+  function setupElementEvents() {
+    var map = this;
+    var container = this.container;
+    var pageX, pageY, mouseMoved;
+    EventHandler.on(container, 'mousemove', function (event) {
+      if (Math.abs(pageX - event.pageX) + Math.abs(pageY - event.pageY) > 2) {
+        mouseMoved = true;
+      }
+    });
+
+    // When the mouse is pressed
+    EventHandler.delegate(container, 'mousedown', '.jvm-element', function (event) {
+      pageX = event.pageX;
+      pageY = event.pageY;
+      mouseMoved = false;
+    });
+
+    // When the mouse is over the region/marker | When the mouse is out the region/marker
+    EventHandler.delegate(container, 'mouseover mouseout', '.jvm-element', function (event) {
+      var data = parseEvent(map, this, true);
+      var showTooltip = map.params.showTooltip;
+      if (event.type === 'mouseover') {
+        data.element.hover(true);
+        if (showTooltip) {
+          map._tooltip.text(data.tooltipText);
+          map._tooltip.show();
+          map._emit(data.event, [event, map._tooltip, data.code]);
+        }
+      } else {
+        data.element.hover(false);
+        if (showTooltip) {
+          map._tooltip.hide();
+        }
+      }
+    });
+
+    // When the click is released
+    EventHandler.delegate(container, 'mouseup', '.jvm-element', function (event) {
+      var data = parseEvent(map, this);
+      if (mouseMoved) {
+        return;
+      }
+      if (data.type === 'region' && map.params.regionsSelectable || data.type === 'marker' && map.params.markersSelectable) {
+        var element = data.element;
+
+        // We're checking if regions/markers|SelectableOne option is presented
+        if (map.params[data.type + "sSelectableOne"]) {
+          map._clearSelected(data.type + "s");
+        }
+        if (data.element.isSelected) {
+          element.select(false);
+        } else {
+          element.select(true);
+        }
+        map._emit(data.event, [data.code, element.isSelected, map._getSelected(data.type + "s")]);
+      }
+    });
+
+    // When region/marker is clicked
+    EventHandler.delegate(container, 'click', '.jvm-element', function (event) {
+      var _parseEvent = parseEvent(map, this),
+        type = _parseEvent.type,
+        code = _parseEvent.code;
+      map._emit(type === 'region' ? Events.onRegionClick : Events.onMarkerClick, [event, code]);
+    });
+  }
+
+  function setupZoomButtons() {
+    var _this = this;
+    var zoomin = createElement('div', 'jvm-zoom-btn jvm-zoomin', '&#43;', true);
+    var zoomout = createElement('div', 'jvm-zoom-btn jvm-zoomout', '&#x2212', true);
+    this.container.appendChild(zoomin);
+    this.container.appendChild(zoomout);
+    var handler = function handler(zoomin) {
+      if (zoomin === void 0) {
+        zoomin = true;
+      }
+      return function () {
+        return _this._setScale(zoomin ? _this.scale * _this.params.zoomStep : _this.scale / _this.params.zoomStep, _this._width / 2, _this._height / 2, false, _this.params.zoomAnimate);
+      };
+    };
+    EventHandler.on(zoomin, 'click', handler());
+    EventHandler.on(zoomout, 'click', handler(false));
+  }
+
+  function setupContainerTouchEvents() {
+    var map = this,
+      touchStartScale,
+      touchStartDistance,
+      touchX,
+      touchY,
+      centerTouchX,
+      centerTouchY,
+      lastTouchesLength;
+    var handleTouchEvent = function handleTouchEvent(e) {
+      var touches = e.touches;
+      var offset, scale, transXOld, transYOld;
+      if (e.type == 'touchstart') {
+        lastTouchesLength = 0;
+      }
+      if (touches.length == 1) {
+        if (lastTouchesLength == 1) {
+          transXOld = map.transX;
+          transYOld = map.transY;
+          map.transX -= (touchX - touches[0].pageX) / map.scale;
+          map.transY -= (touchY - touches[0].pageY) / map.scale;
+          map._tooltip.hide();
+          map._applyTransform();
+          if (transXOld != map.transX || transYOld != map.transY) {
+            e.preventDefault();
+          }
+        }
+        touchX = touches[0].pageX;
+        touchY = touches[0].pageY;
+      } else if (touches.length == 2) {
+        if (lastTouchesLength == 2) {
+          scale = Math.sqrt(Math.pow(touches[0].pageX - touches[1].pageX, 2) + Math.pow(touches[0].pageY - touches[1].pageY, 2)) / touchStartDistance;
+          map._setScale(touchStartScale * scale, centerTouchX, centerTouchY);
+          map._tooltip.hide();
+          e.preventDefault();
+        } else {
+          var rect = map.container.getBoundingClientRect();
+          offset = {
+            top: rect.top + window.scrollY,
+            left: rect.left + window.scrollX
+          };
+          if (touches[0].pageX > touches[1].pageX) {
+            centerTouchX = touches[1].pageX + (touches[0].pageX - touches[1].pageX) / 2;
+          } else {
+            centerTouchX = touches[0].pageX + (touches[1].pageX - touches[0].pageX) / 2;
+          }
+          if (touches[0].pageY > touches[1].pageY) {
+            centerTouchY = touches[1].pageY + (touches[0].pageY - touches[1].pageY) / 2;
+          } else {
+            centerTouchY = touches[0].pageY + (touches[1].pageY - touches[0].pageY) / 2;
+          }
+          centerTouchX -= offset.left;
+          centerTouchY -= offset.top;
+          touchStartScale = map.scale;
+          touchStartDistance = Math.sqrt(Math.pow(touches[0].pageX - touches[1].pageX, 2) + Math.pow(touches[0].pageY - touches[1].pageY, 2));
+        }
+      }
+      lastTouchesLength = touches.length;
+    };
+    EventHandler.on(map.container, 'touchstart', handleTouchEvent);
+    EventHandler.on(map.container, 'touchmove', handleTouchEvent);
+  }
+
+  /**
+   * ------------------------------------------------------------------------
+   * Class Definition
+   * ------------------------------------------------------------------------
+   */
+  var BaseComponent = /*#__PURE__*/function () {
+    function BaseComponent() {}
+    var _proto = BaseComponent.prototype;
+    _proto.dispose = function dispose() {
+      if (this._tooltip) {
+        removeElement(this._tooltip);
+      } else {
+        // @todo: move shape in base component in v2
+        this.shape.remove();
+      }
+      for (var _iterator = _createForOfIteratorHelperLoose(Object.getOwnPropertyNames(this)), _step; !(_step = _iterator()).done;) {
+        var propertyName = _step.value;
+        this[propertyName] = null;
+      }
+    };
+    return BaseComponent;
+  }();
+
+  /**
+   * ------------------------------------------------------------------------
+   * Interactable
+   * ------------------------------------------------------------------------
+   */
+  var Interactable = {
+    getLabelText: function getLabelText(key, label) {
+      if (!label) {
+        return;
+      }
+      if (typeof label.render === 'function') {
+        var params = [];
+
+        // Pass additional paramater (Marker config object) in case it's a Marker.
+        if (this.config && this.config.marker) {
+          params.push(this.config.marker);
+        }
+
+        // Becuase we need to add the key always at the end
+        params.push(key);
+        return label.render.apply(this, params);
+      }
+      return key;
+    },
+    getLabelOffsets: function getLabelOffsets(key, label) {
+      if (typeof label.offsets === 'function') {
+        return label.offsets(key);
+      }
+
+      // If offsets are an array of offsets e.g offsets: [ [0, 25], [10, 15] ]
+      if (Array.isArray(label.offsets)) {
+        return label.offsets[key];
+      }
+      return [0, 0];
+    },
+    setStyle: function setStyle(property, value) {
+      this.shape.setStyle(property, value);
+    },
+    remove: function remove() {
+      this.shape.remove();
+      if (this.label) this.label.remove();
+    },
+    hover: function hover(state) {
+      this._setStatus('isHovered', state);
+    },
+    select: function select(state) {
+      this._setStatus('isSelected', state);
+    },
+    // Private
+    _setStatus: function _setStatus(property, state) {
+      this.shape[property] = state;
+      this.shape.updateStyle();
+      this[property] = state;
+      if (this.label) {
+        this.label[property] = state;
+        this.label.updateStyle();
+      }
+    }
+  };
+
+  /**
+   * ------------------------------------------------------------------------
+   * Class Definition
+   * ------------------------------------------------------------------------
+   */
+  var Region = /*#__PURE__*/function (_BaseComponent) {
+    _inheritsLoose(Region, _BaseComponent);
+    function Region(_ref) {
+      var _this;
+      var map = _ref.map,
+        code = _ref.code,
+        path = _ref.path,
+        style = _ref.style,
+        label = _ref.label,
+        labelStyle = _ref.labelStyle,
+        labelsGroup = _ref.labelsGroup;
+      _this = _BaseComponent.call(this) || this;
+      _this._map = map;
+      _this.shape = _this._createRegion(path, code, style);
+      var text = _this.getLabelText(code, label);
+
+      // If label is passed and render function returns something 
+      if (label && text) {
+        var bbox = _this.shape.getBBox();
+        var offsets = _this.getLabelOffsets(code, label);
+        _this.labelX = bbox.x + bbox.width / 2 + offsets[0];
+        _this.labelY = bbox.y + bbox.height / 2 + offsets[1];
+        _this.label = _this._map.canvas.createText({
+          text: text,
+          textAnchor: 'middle',
+          alignmentBaseline: 'central',
+          dataCode: code,
+          x: _this.labelX,
+          y: _this.labelY
+        }, labelStyle, labelsGroup);
+        _this.label.addClass('jvm-region jvm-element');
+      }
+      return _this;
+    }
+    var _proto = Region.prototype;
+    _proto._createRegion = function _createRegion(path, code, style) {
+      path = this._map.canvas.createPath({
+        d: path,
+        dataCode: code
+      }, style);
+      path.addClass('jvm-region jvm-element');
+      return path;
+    };
+    _proto.updateLabelPosition = function updateLabelPosition() {
+      if (this.label) {
+        this.label.set({
+          x: this.labelX * this._map.scale + this._map.transX * this._map.scale,
+          y: this.labelY * this._map.scale + this._map.transY * this._map.scale
+        });
+      }
+    };
+    return Region;
+  }(BaseComponent);
+  inherit(Region, Interactable);
+
+  function createRegions() {
+    this._regionLabelsGroup = this._regionLabelsGroup || this.canvas.createGroup('jvm-regions-labels-group');
+    for (var code in this._mapData.paths) {
+      var region = new Region({
+        map: this,
+        code: code,
+        path: this._mapData.paths[code].path,
+        style: merge({}, this.params.regionStyle),
+        labelStyle: this.params.regionLabelStyle,
+        labelsGroup: this._regionLabelsGroup,
+        label: this.params.labels && this.params.labels.regions
+      });
+      this.regions[code] = {
+        config: this._mapData.paths[code],
+        element: region
+      };
+    }
+  }
+
+  /**
+   * ------------------------------------------------------------------------
+   * Class Definition
+   * ------------------------------------------------------------------------
+   */
+  var Line = /*#__PURE__*/function (_BaseComponent) {
+    _inheritsLoose(Line, _BaseComponent);
+    function Line(_ref) {
+      var _this;
+      var index = _ref.index,
+        map = _ref.map,
+        style = _ref.style,
+        x1 = _ref.x1,
+        y1 = _ref.y1,
+        x2 = _ref.x2,
+        y2 = _ref.y2,
+        group = _ref.group,
+        config = _ref.config;
+      _this = _BaseComponent.call(this) || this;
+      _this.config = config;
+      _this.shape = map.canvas.createLine({
+        x1: x1,
+        y1: y1,
+        x2: x2,
+        y2: y2,
+        dataIndex: index
+      }, style, group);
+      _this.shape.addClass('jvm-line');
+      return _this;
+    }
+    var _proto = Line.prototype;
+    _proto.setStyle = function setStyle(property, value) {
+      this.shape.setStyle(property, value);
+    };
+    return Line;
+  }(BaseComponent);
+
+  function createLines(lines, markers, isRecentlyCreated) {
+    if (isRecentlyCreated === void 0) {
+      isRecentlyCreated = false;
+    }
+    var point1 = false,
+      point2 = false;
+
+    // Create group for holding lines
+    // we're checking if `linesGroup` exists or not becuase we may add lines
+    // after the map has loaded so we will append the futured lines to this group as well.
+    this.linesGroup = this.linesGroup || this.canvas.createGroup('jvm-lines-group');
+    for (var index in lines) {
+      var config = lines[index];
+      for (var mindex in markers) {
+        var markerConfig = isRecentlyCreated ? markers[mindex].config : markers[mindex];
+        if (markerConfig.name === config.from) {
+          point1 = this.getMarkerPosition(markerConfig);
+        }
+        if (markerConfig.name === config.to) {
+          point2 = this.getMarkerPosition(markerConfig);
+        }
+      }
+      if (point1 !== false && point2 !== false) {
+        // Register lines with unique keys
+        this._lines[getLineUid(config.from, config.to)] = new Line({
+          index: index,
+          map: this,
+          // Merge the default `lineStyle` object with the custom `line` config style
+          style: merge({
+            initial: this.params.lineStyle
+          }, {
+            initial: config.style || {}
+          }, true),
+          x1: point1.x,
+          y1: point1.y,
+          x2: point2.x,
+          y2: point2.y,
+          group: this.linesGroup,
+          config: config
+        });
+      }
+    }
+  }
+
+  /**
+   * ------------------------------------------------------------------------
+   * Class Definition
+   * ------------------------------------------------------------------------
+   */
+  var Marker = /*#__PURE__*/function (_BaseComponent) {
+    _inheritsLoose(Marker, _BaseComponent);
+    function Marker(_ref) {
+      var _this;
+      var index = _ref.index,
+        style = _ref.style,
+        label = _ref.label,
+        cx = _ref.cx,
+        cy = _ref.cy,
+        map = _ref.map,
+        group = _ref.group;
+      _this = _BaseComponent.call(this) || this;
+
+      // Private
+      _this._map = map;
+      _this._isImage = !!style.initial.image;
+
+      // Protected
+      _this.config = arguments[0];
+      _this.shape = map.canvas[_this._isImage ? 'createImage' : 'createCircle']({
+        dataIndex: index,
+        cx: cx,
+        cy: cy
+      }, style, group);
+      _this.shape.addClass('jvm-marker jvm-element');
+      if (_this._isImage) {
+        _this.updateLabelPosition();
+      }
+      if (label) {
+        _this._createLabel(_this.config);
+      }
+      return _this;
+    }
+    var _proto = Marker.prototype;
+    _proto.updateLabelPosition = function updateLabelPosition() {
+      if (this.label) {
+        this.label.set({
+          x: this._labelX * this._map.scale + this._offsets[0] + this._map.transX * this._map.scale + 5 + (this._isImage ? (this.shape.width || 0) / 2 : this.shape.node.r.baseVal.value),
+          y: this._labelY * this._map.scale + this._map.transY * this._map.scale + this._offsets[1]
+        });
+      }
+    };
+    _proto._createLabel = function _createLabel(_ref2) {
+      var index = _ref2.index,
+        map = _ref2.map,
+        label = _ref2.label,
+        labelsGroup = _ref2.labelsGroup,
+        cx = _ref2.cx,
+        cy = _ref2.cy,
+        marker = _ref2.marker,
+        isRecentlyCreated = _ref2.isRecentlyCreated;
+      var labelText = this.getLabelText(index, label);
+      this._labelX = cx / map.scale - map.transX;
+      this._labelY = cy / map.scale - map.transY;
+      this._offsets = isRecentlyCreated && marker.offsets ? marker.offsets : this.getLabelOffsets(index, label);
+      this.label = map.canvas.createText({
+        text: labelText,
+        dataIndex: index,
+        x: this._labelX,
+        y: this._labelY,
+        dy: '0.6ex'
+      }, map.params.markerLabelStyle, labelsGroup);
+      this.label.addClass('jvm-marker jvm-element');
+      if (isRecentlyCreated) {
+        this.updateLabelPosition();
+      }
+    };
+    return Marker;
+  }(BaseComponent);
+  inherit(Marker, Interactable);
+
+  function createMarkers(markers, isRecentlyCreated) {
+    var _this = this;
+    if (markers === void 0) {
+      markers = {};
+    }
+    if (isRecentlyCreated === void 0) {
+      isRecentlyCreated = false;
+    }
+    // Create groups for holding markers and markers labels
+    // We're checking if `markersGroup` exists or not becuase we may add markers after the map has loaded
+    // So we will append the futured markers to this group as well.
+    this._markersGroup = this._markersGroup || this.canvas.createGroup('jvm-markers-group');
+    this._markerLabelsGroup = this._markerLabelsGroup || this.canvas.createGroup('jvm-markers-labels-group');
+    var _loop = function _loop() {
+      var config = markers[index];
+      var point = _this.getMarkerPosition(config);
+      var uid = config.coords.join(':');
+      if (!point) {
+        return "continue";
+      }
+
+      // We're checking if recently created marker does already exist
+      // If it does we don't need to create it again, so we'll continue
+      // Becuase we may have more than one marker submitted via `addMarkers` method.
+      if (isRecentlyCreated) {
+        if (Object.keys(_this._markers).filter(function (i) {
+          return _this._markers[i]._uid === uid;
+        }).length) {
+          return "continue";
+        }
+        index = Object.keys(_this._markers).length;
+      }
+      var marker = new Marker({
+        index: index,
+        map: _this,
+        // Merge the `markerStyle` object with the marker config `style` if presented.
+        style: merge(_this.params.markerStyle, {
+          initial: config.style || {}
+        }, true),
+        label: _this.params.labels && _this.params.labels.markers,
+        labelsGroup: _this._markerLabelsGroup,
+        cx: point.x,
+        cy: point.y,
+        group: _this._markersGroup,
+        marker: config,
+        isRecentlyCreated: isRecentlyCreated
+      });
+
+      // Check for marker duplication
+      // this is useful when for example: a user clicks a button for creating marker two times
+      // so it will remove the old one and the new one will take its place.
+      if (_this._markers[index]) {
+        _this.removeMarkers([index]);
+      }
+      _this._markers[index] = {
+        _uid: uid,
+        config: config,
+        element: marker
+      };
+    };
+    for (var index in markers) {
+      var _ret = _loop();
+      if (_ret === "continue") continue;
+    }
+  }
+
+  /**
+   * ------------------------------------------------------------------------
+   * Class Definition
+   * ------------------------------------------------------------------------
+   */
+  var Legend = /*#__PURE__*/function () {
+    function Legend(options) {
+      if (options === void 0) {
+        options = {};
+      }
+      this._options = options;
+      this._map = this._options.map;
+      this._series = this._options.series;
+      this._body = createElement('div', 'jvm-legend');
+      if (this._options.cssClass) {
+        this._body.setAttribute('class', this._options.cssClass);
+      }
+      if (options.vertical) {
+        this._map.legendVertical.appendChild(this._body);
+      } else {
+        this._map.legendHorizontal.appendChild(this._body);
+      }
+      this.render();
+    }
+    var _proto = Legend.prototype;
+    _proto.render = function render() {
+      var ticks = this._series.scale.getTicks();
+      var inner = createElement('div', 'jvm-legend-inner');
+      this._body.innderHTML = '';
+      if (this._options.title) {
+        var legendTitle = createElement('div', 'jvm-legend-title', this._options.title);
+        this._body.appendChild(legendTitle);
+      }
+      this._body.appendChild(inner);
+      for (var i = 0; i < ticks.length; i++) {
+        var tick = createElement('div', 'jvm-legend-tick');
+        var sample = createElement('div', 'jvm-legend-tick-sample');
+        switch (this._series.config.attribute) {
+          case 'fill':
+            if (isImageUrl(ticks[i].value)) {
+              sample.style.background = "url(" + ticks[i].value + ")";
+            } else {
+              sample.style.background = ticks[i].value;
+            }
+            break;
+          case 'stroke':
+            sample.style.background = ticks[i].value;
+            break;
+          case 'image':
+            sample.style.background = "url(" + (typeof ticks[i].value === 'object' ? ticks[i].value.url : ticks[i].value) + ") no-repeat center center";
+            sample.style.backgroundSize = 'cover';
+            break;
+        }
+        tick.appendChild(sample);
+        var label = ticks[i].label;
+        if (this._options.labelRender) {
+          label = this._options.labelRender(label);
+        }
+        var tickText = createElement('div', 'jvm-legend-tick-text', label);
+        tick.appendChild(tickText);
+        inner.appendChild(tick);
+      }
+    };
+    return Legend;
+  }();
+
+  /**
+   * ------------------------------------------------------------------------
+   * Class Definition
+   * ------------------------------------------------------------------------
+   */
+  var OrdinalScale = /*#__PURE__*/function () {
+    function OrdinalScale(scale) {
+      this._scale = scale;
+    }
+    var _proto = OrdinalScale.prototype;
+    _proto.getValue = function getValue(value) {
+      return this._scale[value];
+    };
+    _proto.getTicks = function getTicks() {
+      var ticks = [];
+      for (var key in this._scale) {
+        ticks.push({
+          label: key,
+          value: this._scale[key]
+        });
+      }
+      return ticks;
+    };
+    return OrdinalScale;
+  }();
+
+  /**
+   * ------------------------------------------------------------------------
+   * Class Definition
+   * ------------------------------------------------------------------------
+   */
+  var Series = /*#__PURE__*/function () {
+    function Series(config, elements, map) {
+      if (config === void 0) {
+        config = {};
+      }
+      // Private
+      this._map = map;
+      this._elements = elements; // Could be markers or regions
+      this._values = config.values || {};
+
+      // Protected
+      this.config = config;
+      this.config.attribute = config.attribute || 'fill';
+
+      // Set initial attributes
+      if (config.attributes) {
+        this.setAttributes(config.attributes);
+      }
+      if (typeof config.scale === 'object') {
+        this.scale = new OrdinalScale(config.scale);
+      }
+      if (this.config.legend) {
+        this.legend = new Legend(merge({
+          map: this._map,
+          series: this
+        }, this.config.legend));
+      }
+      this.setValues(this._values);
+    }
+    var _proto = Series.prototype;
+    _proto.setValues = function setValues(values) {
+      var attrs = {};
+      for (var key in values) {
+        if (values[key]) {
+          attrs[key] = this.scale.getValue(values[key]);
+        }
+      }
+      this.setAttributes(attrs);
+    };
+    _proto.setAttributes = function setAttributes(attrs) {
+      for (var code in attrs) {
+        if (this._elements[code]) {
+          this._elements[code].element.setStyle(this.config.attribute, attrs[code]);
+        }
+      }
+    };
+    _proto.clear = function clear() {
+      var key,
+        attrs = {};
+      for (key in this._values) {
+        if (this._elements[key]) {
+          attrs[key] = this._elements[key].element.shape.style.initial[this.config.attribute];
+        }
+      }
+      this.setAttributes(attrs);
+      this._values = {};
+    };
+    return Series;
+  }();
+
+  function createSeries() {
+    this.series = {
+      markers: [],
+      regions: []
+    };
+    for (var key in this.params.series) {
+      for (var i = 0; i < this.params.series[key].length; i++) {
+        this.series[key][i] = new Series(this.params.series[key][i], key === 'markers' ? this._markers : this.regions, this);
+      }
+    }
+  }
+
+  function applyTransform() {
+    var maxTransX, maxTransY, minTransX, minTransY;
+    if (this._defaultWidth * this.scale <= this._width) {
+      maxTransX = (this._width - this._defaultWidth * this.scale) / (2 * this.scale);
+      minTransX = (this._width - this._defaultWidth * this.scale) / (2 * this.scale);
+    } else {
+      maxTransX = 0;
+      minTransX = (this._width - this._defaultWidth * this.scale) / this.scale;
+    }
+    if (this._defaultHeight * this.scale <= this._height) {
+      maxTransY = (this._height - this._defaultHeight * this.scale) / (2 * this.scale);
+      minTransY = (this._height - this._defaultHeight * this.scale) / (2 * this.scale);
+    } else {
+      maxTransY = 0;
+      minTransY = (this._height - this._defaultHeight * this.scale) / this.scale;
+    }
+    if (this.transY > maxTransY) {
+      this.transY = maxTransY;
+    } else if (this.transY < minTransY) {
+      this.transY = minTransY;
+    }
+    if (this.transX > maxTransX) {
+      this.transX = maxTransX;
+    } else if (this.transX < minTransX) {
+      this.transX = minTransX;
+    }
+    this.canvas.applyTransformParams(this.scale, this.transX, this.transY);
+    if (this._markers) {
+      this._repositionMarkers();
+    }
+    if (this._lines) {
+      this._repositionLines();
+    }
+    this._repositionLabels();
+  }
+
+  function resize() {
+    var curBaseScale = this._baseScale;
+    if (this._width / this._height > this._defaultWidth / this._defaultHeight) {
+      this._baseScale = this._height / this._defaultHeight;
+      this._baseTransX = Math.abs(this._width - this._defaultWidth * this._baseScale) / (2 * this._baseScale);
+    } else {
+      this._baseScale = this._width / this._defaultWidth;
+      this._baseTransY = Math.abs(this._height - this._defaultHeight * this._baseScale) / (2 * this._baseScale);
+    }
+    this.scale *= this._baseScale / curBaseScale;
+    this.transX *= this._baseScale / curBaseScale;
+    this.transY *= this._baseScale / curBaseScale;
+  }
+
+  function setScale(scale, anchorX, anchorY, isCentered, animate) {
+    var _this = this;
+    var zoomStep,
+      interval,
+      i = 0,
+      count = Math.abs(Math.round((scale - this.scale) * 60 / Math.max(scale, this.scale))),
+      scaleStart,
+      scaleDiff,
+      transXStart,
+      transXDiff,
+      transYStart,
+      transYDiff,
+      transX,
+      transY;
+    if (scale > this.params.zoomMax * this._baseScale) {
+      scale = this.params.zoomMax * this._baseScale;
+    } else if (scale < this.params.zoomMin * this._baseScale) {
+      scale = this.params.zoomMin * this._baseScale;
+    }
+    if (typeof anchorX != 'undefined' && typeof anchorY != 'undefined') {
+      zoomStep = scale / this.scale;
+      if (isCentered) {
+        transX = anchorX + this._defaultWidth * (this._width / (this._defaultWidth * scale)) / 2;
+        transY = anchorY + this._defaultHeight * (this._height / (this._defaultHeight * scale)) / 2;
+      } else {
+        transX = this.transX - (zoomStep - 1) / scale * anchorX;
+        transY = this.transY - (zoomStep - 1) / scale * anchorY;
+      }
+    }
+    if (animate && count > 0) {
+      scaleStart = this.scale;
+      scaleDiff = (scale - scaleStart) / count;
+      transXStart = this.transX * this.scale;
+      transYStart = this.transY * this.scale;
+      transXDiff = (transX * scale - transXStart) / count;
+      transYDiff = (transY * scale - transYStart) / count;
+      interval = setInterval(function () {
+        i += 1;
+        _this.scale = scaleStart + scaleDiff * i;
+        _this.transX = (transXStart + transXDiff * i) / _this.scale;
+        _this.transY = (transYStart + transYDiff * i) / _this.scale;
+        _this._applyTransform();
+        if (i == count) {
+          clearInterval(interval);
+          _this._emit(Events.onViewportChange, [_this.scale, _this.transX, _this.transY]);
+        }
+      }, 10);
+    } else {
+      this.transX = transX;
+      this.transY = transY;
+      this.scale = scale;
+      this._applyTransform();
+      this._emit(Events.onViewportChange, [this.scale, this.transX, this.transY]);
+    }
+  }
+
+  function setFocus(config) {
+    var _this = this;
+    if (config === void 0) {
+      config = {};
+    }
+    var bbox,
+      codes = [];
+    if (config.region) {
+      codes.push(config.region);
+    } else if (config.regions) {
+      codes = config.regions;
+    }
+    if (codes.length) {
+      codes.forEach(function (code) {
+        if (_this.regions[code]) {
+          var itemBbox = _this.regions[code].element.shape.getBBox();
+          if (itemBbox) {
+            // Handle the first loop
+            if (typeof bbox == 'undefined') {
+              bbox = itemBbox;
+            } else {
+              // get the old bbox properties plus the current
+              // this kinda incrementing the old values and the new values
+              bbox = {
+                x: Math.min(bbox.x, itemBbox.x),
+                y: Math.min(bbox.y, itemBbox.y),
+                width: Math.max(bbox.x + bbox.width, itemBbox.x + itemBbox.width) - Math.min(bbox.x, itemBbox.x),
+                height: Math.max(bbox.y + bbox.height, itemBbox.y + itemBbox.height) - Math.min(bbox.y, itemBbox.y)
+              };
+            }
+          }
+        }
+      });
+      return this._setScale(Math.min(this._width / bbox.width, this._height / bbox.height), -(bbox.x + bbox.width / 2), -(bbox.y + bbox.height / 2), true, config.animate);
+    } else if (config.coords) {
+      var point = this.coordsToPoint(config.coords[0], config.coords[1]);
+      var x = this.transX - point.x / this.scale;
+      var y = this.transY - point.y / this.scale;
+      return this._setScale(config.scale * this._baseScale, x, y, true, config.animate);
+    }
+  }
+
+  function updateSize() {
+    this._width = this.container.offsetWidth;
+    this._height = this.container.offsetHeight;
+    this._resize();
+    this.canvas.setSize(this._width, this._height);
+    this._applyTransform();
+  }
+
+  /**
+   * ------------------------------------------------------------------------
+   * Object
+   * ------------------------------------------------------------------------
+   */
+  var Proj = {
+    /* sgn(n){
+      if (n > 0) {
+        return 1;
+      } else if (n < 0) {
+        return -1;
+      } else {
+        return n;
+      }
+    }, */
+    mill: function mill(lat, lng, c) {
+      return {
+        x: this.radius * (lng - c) * this.radDeg,
+        y: -this.radius * Math.log(Math.tan((45 + 0.4 * lat) * this.radDeg)) / 0.8
+      };
+    },
+    /* mill_inv(x, y, c) {
+      return {
+        lat: (2.5 * Math.atan(Math.exp(0.8 * y / this.radius)) - 5 * Math.PI / 8) * this.degRad,
+        lng: (c * this.radDeg + x / this.radius) * this.degRad
+      };
+    }, */
+    merc: function merc(lat, lng, c) {
+      return {
+        x: this.radius * (lng - c) * this.radDeg,
+        y: -this.radius * Math.log(Math.tan(Math.PI / 4 + lat * Math.PI / 360))
+      };
+    },
+    /* merc_inv(x, y, c) {
+      return {
+        lat: (2 * Math.atan(Math.exp(y / this.radius)) - Math.PI / 2) * this.degRad,
+        lng: (c * this.radDeg + x / this.radius) * this.degRad
+      };
+    }, */
+    aea: function aea(lat, lng, c) {
+      var fi0 = 0,
+        lambda0 = c * this.radDeg,
+        fi1 = 29.5 * this.radDeg,
+        fi2 = 45.5 * this.radDeg,
+        fi = lat * this.radDeg,
+        lambda = lng * this.radDeg,
+        n = (Math.sin(fi1) + Math.sin(fi2)) / 2,
+        C = Math.cos(fi1) * Math.cos(fi1) + 2 * n * Math.sin(fi1),
+        theta = n * (lambda - lambda0),
+        ro = Math.sqrt(C - 2 * n * Math.sin(fi)) / n,
+        ro0 = Math.sqrt(C - 2 * n * Math.sin(fi0)) / n;
+      return {
+        x: ro * Math.sin(theta) * this.radius,
+        y: -(ro0 - ro * Math.cos(theta)) * this.radius
+      };
+    },
+    /* aea_inv(xCoord, yCoord, c) {
+      var x = xCoord / this.radius,
+          y = yCoord / this.radius,
+          fi0 = 0,
+          lambda0 = c * this.radDeg,
+          fi1 = 29.5 * this.radDeg,
+          fi2 = 45.5 * this.radDeg,
+          n = (Math.sin(fi1)+Math.sin(fi2)) / 2,
+          C = Math.cos(fi1)*Math.cos(fi1)+2*n*Math.sin(fi1),
+          ro0 = Math.sqrt(C-2*n*Math.sin(fi0))/n,
+          ro = Math.sqrt(x*x+(ro0-y)*(ro0-y)),
+          theta = Math.atan( x / (ro0 - y) );
+        return {
+        lat: (Math.asin((C - ro * ro * n * n) / (2 * n))) * this.degRad,
+        lng: (lambda0 + theta / n) * this.degRad
+      };
+    }, */
+    lcc: function lcc(lat, lng, c) {
+      var fi0 = 0,
+        lambda0 = c * this.radDeg,
+        lambda = lng * this.radDeg,
+        fi1 = 33 * this.radDeg,
+        fi2 = 45 * this.radDeg,
+        fi = lat * this.radDeg,
+        n = Math.log(Math.cos(fi1) * (1 / Math.cos(fi2))) / Math.log(Math.tan(Math.PI / 4 + fi2 / 2) * (1 / Math.tan(Math.PI / 4 + fi1 / 2))),
+        F = Math.cos(fi1) * Math.pow(Math.tan(Math.PI / 4 + fi1 / 2), n) / n,
+        ro = F * Math.pow(1 / Math.tan(Math.PI / 4 + fi / 2), n),
+        ro0 = F * Math.pow(1 / Math.tan(Math.PI / 4 + fi0 / 2), n);
+      return {
+        x: ro * Math.sin(n * (lambda - lambda0)) * this.radius,
+        y: -(ro0 - ro * Math.cos(n * (lambda - lambda0))) * this.radius
+      };
+    }
+    /* lcc_inv(xCoord, yCoord, c) {
+      var x = xCoord / this.radius,
+          y = yCoord / this.radius,
+          fi0 = 0,
+          lambda0 = c * this.radDeg,
+          fi1 = 33 * this.radDeg,
+          fi2 = 45 * this.radDeg,
+          n = Math.log( Math.cos(fi1) * (1 / Math.cos(fi2)) ) / Math.log( Math.tan( Math.PI / 4 + fi2 / 2) * (1 / Math.tan( Math.PI / 4 + fi1 / 2) ) ),
+          F = ( Math.cos(fi1) * Math.pow( Math.tan( Math.PI / 4 + fi1 / 2 ), n ) ) / n,
+          ro0 = F * Math.pow( 1 / Math.tan( Math.PI / 4 + fi0 / 2 ), n ),
+          ro = this.sgn(n) * Math.sqrt(x*x+(ro0-y)*(ro0-y)),
+          theta = Math.atan( x / (ro0 - y) );
+        return {
+        lat: (2 * Math.atan(Math.pow(F/ro, 1/n)) - Math.PI / 2) * this.degRad,
+        lng: (lambda0 + theta / n) * this.degRad
+      };
+    } */
+  };
+  Proj.degRad = 180 / Math.PI;
+  Proj.radDeg = Math.PI / 180;
+  Proj.radius = 6381372;
+
+  function coordsToPoint(lat, lng) {
+    var projection = Map.maps[this.params.map].projection;
+    var _Proj$projection$type = Proj[projection.type](lat, lng, projection.centralMeridian),
+      x = _Proj$projection$type.x,
+      y = _Proj$projection$type.y;
+    var inset = this.getInsetForPoint(x, y);
+    if (!inset) {
+      return false;
+    }
+    var bbox = inset.bbox;
+    x = (x - bbox[0].x) / (bbox[1].x - bbox[0].x) * inset.width * this.scale;
+    y = (y - bbox[0].y) / (bbox[1].y - bbox[0].y) * inset.height * this.scale;
+    return {
+      x: x + this.transX * this.scale + inset.left * this.scale,
+      y: y + this.transY * this.scale + inset.top * this.scale
+    };
+  }
+
+  function getInsetForPoint(x, y) {
+    var insets = Map.maps[this.params.map].insets;
+    for (var index = 0; index < insets.length; index++) {
+      var _insets$index$bbox = insets[index].bbox,
+        start = _insets$index$bbox[0],
+        end = _insets$index$bbox[1];
+      if (x > start.x && x < end.x && y > start.y && y < end.y) {
+        return insets[index];
+      }
+    }
+  }
+
+  function getMarkerPosition(_ref) {
+    var coords = _ref.coords;
+    if (Map.maps[this.params.map].projection) {
+      return this.coordsToPoint.apply(this, coords);
+    }
+    return {
+      x: coords[0] * this.scale + this.transX * this.scale,
+      y: coords[1] * this.scale + this.transY * this.scale
+    };
+  }
+
+  function repositionLines() {
+    var point1 = false,
+      point2 = false;
+    for (var index in this._lines) {
+      for (var mindex in this._markers) {
+        var marker = this._markers[mindex];
+        if (marker.config.name === this._lines[index].config.from) {
+          point1 = this.getMarkerPosition(marker.config);
+        }
+        if (marker.config.name === this._lines[index].config.to) {
+          point2 = this.getMarkerPosition(marker.config);
+        }
+      }
+      if (point1 !== false && point2 !== false) {
+        this._lines[index].setStyle({
+          x1: point1.x,
+          y1: point1.y,
+          x2: point2.x,
+          y2: point2.y
+        });
+      }
+    }
+  }
+
+  function repositionMarkers() {
+    for (var index in this._markers) {
+      var point = this.getMarkerPosition(this._markers[index].config);
+      if (point !== false) {
+        this._markers[index].element.setStyle({
+          cx: point.x,
+          cy: point.y
+        });
+      }
+    }
+  }
+
+  function repositionLabels() {
+    var labels = this.params.labels;
+    if (!labels) {
+      return;
+    }
+
+    // Regions labels
+    if (labels.regions) {
+      for (var key in this.regions) {
+        this.regions[key].element.updateLabelPosition();
+      }
+    }
+
+    // Markers labels
+    if (labels.markers) {
+      for (var _key in this._markers) {
+        this._markers[_key].element.updateLabelPosition();
+      }
+    }
+  }
+
+  var core = {
+    _setupContainerEvents: setupContainerEvents,
+    _setupElementEvents: setupElementEvents,
+    _setupZoomButtons: setupZoomButtons,
+    _setupContainerTouchEvents: setupContainerTouchEvents,
+    _createRegions: createRegions,
+    _createLines: createLines,
+    _createMarkers: createMarkers,
+    _createSeries: createSeries,
+    _applyTransform: applyTransform,
+    _resize: resize,
+    _setScale: setScale,
+    setFocus: setFocus,
+    updateSize: updateSize,
+    coordsToPoint: coordsToPoint,
+    getInsetForPoint: getInsetForPoint,
+    getMarkerPosition: getMarkerPosition,
+    _repositionLines: repositionLines,
+    _repositionMarkers: repositionMarkers,
+    _repositionLabels: repositionLabels
+  };
+
+  var Defaults = {
+    map: 'world',
+    backgroundColor: 'transparent',
+    draggable: true,
+    zoomButtons: true,
+    zoomOnScroll: true,
+    zoomOnScrollSpeed: 3,
+    zoomMax: 12,
+    zoomMin: 1,
+    zoomAnimate: true,
+    showTooltip: true,
+    zoomStep: 1.5,
+    bindTouchEvents: true,
+    // Line options
+    lineStyle: {
+      stroke: '#808080',
+      strokeWidth: 1,
+      strokeLinecap: 'round'
+    },
+    // Marker options
+    markersSelectable: false,
+    markersSelectableOne: false,
+    markerStyle: {
+      initial: {
+        r: 7,
+        fill: '#374151',
+        fillOpacity: 1,
+        stroke: '#FFF',
+        strokeWidth: 5,
+        strokeOpacity: .5
+      },
+      hover: {
+        fill: '#3cc0ff',
+        cursor: 'pointer'
+      },
+      selected: {
+        fill: 'blue'
+      },
+      selectedHover: {}
+    },
+    markerLabelStyle: {
+      initial: {
+        fontFamily: 'Verdana',
+        fontSize: 12,
+        fontWeight: 500,
+        cursor: 'default',
+        fill: '#374151'
+      },
+      hover: {
+        cursor: 'pointer'
+      },
+      selected: {},
+      selectedHover: {}
+    },
+    // Region options
+    regionsSelectable: false,
+    regionsSelectableOne: false,
+    regionStyle: {
+      initial: {
+        fill: '#dee2e8',
+        fillOpacity: 1,
+        stroke: 'none',
+        strokeWidth: 0
+      },
+      hover: {
+        fillOpacity: .7,
+        cursor: 'pointer'
+      },
+      selected: {
+        fill: '#9ca3af'
+      },
+      selectedHover: {}
+    },
+    regionLabelStyle: {
+      initial: {
+        fontFamily: 'Verdana',
+        fontSize: '12',
+        fontWeight: 'bold',
+        cursor: 'default',
+        fill: '#35373e'
+      },
+      hover: {
+        cursor: 'pointer'
+      }
+    }
+  };
+
+  /**
+   * ------------------------------------------------------------------------
+   * Class Definition
+   * ------------------------------------------------------------------------
+   */
+  var SVGElement = /*#__PURE__*/function () {
+    function SVGElement(name, config) {
+      this.node = this._createElement(name);
+      if (config) {
+        this.set(config);
+      }
+    }
+
+    // Create new SVG element `svg`, `g`, `path`, `line`, `circle`, `image`, etc.
+    // https://developer.mozilla.org/en-US/docs/Web/API/Document/createElementNS#important_namespace_uris
+    var _proto = SVGElement.prototype;
+    _proto._createElement = function _createElement(tagName) {
+      return document.createElementNS('http://www.w3.org/2000/svg', tagName);
+    };
+    _proto.addClass = function addClass(className) {
+      this.node.setAttribute('class', className);
+    };
+    _proto.getBBox = function getBBox() {
+      return this.node.getBBox();
+    }
+
+    // Apply attributes on the current node element
+    ;
+    _proto.set = function set(property, value) {
+      if (typeof property === 'object') {
+        for (var attr in property) {
+          this.applyAttr(attr, property[attr]);
+        }
+      } else {
+        this.applyAttr(property, value);
+      }
+    };
+    _proto.get = function get(property) {
+      return this.style.initial[property];
+    };
+    _proto.applyAttr = function applyAttr(property, value) {
+      this.node.setAttribute(hyphenate(property), value);
+    };
+    _proto.remove = function remove() {
+      removeElement(this.node);
+    };
+    return SVGElement;
+  }();
+
+  /**
+   * ------------------------------------------------------------------------
+   * Class Definition
+   * ------------------------------------------------------------------------
+   */
+  var SVGShapeElement = /*#__PURE__*/function (_SVGElement) {
+    _inheritsLoose(SVGShapeElement, _SVGElement);
+    function SVGShapeElement(name, config, style) {
+      var _this;
+      if (style === void 0) {
+        style = {};
+      }
+      _this = _SVGElement.call(this, name, config) || this;
+      _this.isHovered = false;
+      _this.isSelected = false;
+      _this.style = style;
+      _this.style.current = {};
+      _this.updateStyle();
+      return _this;
+    }
+    var _proto = SVGShapeElement.prototype;
+    _proto.setStyle = function setStyle(property, value) {
+      if (typeof property === 'object') {
+        merge(this.style.current, property);
+      } else {
+        var _merge;
+        merge(this.style.current, (_merge = {}, _merge[property] = value, _merge));
+      }
+      this.updateStyle();
+    };
+    _proto.updateStyle = function updateStyle() {
+      var attrs = {};
+      merge(attrs, this.style.initial);
+      merge(attrs, this.style.current);
+      if (this.isHovered) {
+        merge(attrs, this.style.hover);
+      }
+      if (this.isSelected) {
+        merge(attrs, this.style.selected);
+        if (this.isHovered) {
+          merge(attrs, this.style.selectedHover);
+        }
+      }
+      this.set(attrs);
+    };
+    return SVGShapeElement;
+  }(SVGElement);
+
+  /**
+   * ------------------------------------------------------------------------
+   * Class Definition
+   * ------------------------------------------------------------------------
+   */
+  var SVGTextElement = /*#__PURE__*/function (_SVGShapeElement) {
+    _inheritsLoose(SVGTextElement, _SVGShapeElement);
+    function SVGTextElement(config, style) {
+      return _SVGShapeElement.call(this, 'text', config, style) || this;
+    }
+    var _proto = SVGTextElement.prototype;
+    _proto.applyAttr = function applyAttr(attr, value) {
+      attr === 'text' ? this.node.textContent = value : _SVGShapeElement.prototype.applyAttr.call(this, attr, value);
+    };
+    return SVGTextElement;
+  }(SVGShapeElement);
+
+  /**
+   * ------------------------------------------------------------------------
+   * Class Definition
+   * ------------------------------------------------------------------------
+   */
+  var SVGImageElement = /*#__PURE__*/function (_SVGShapeElement) {
+    _inheritsLoose(SVGImageElement, _SVGShapeElement);
+    function SVGImageElement(config, style) {
+      return _SVGShapeElement.call(this, 'image', config, style) || this;
+    }
+    var _proto = SVGImageElement.prototype;
+    _proto.applyAttr = function applyAttr(attr, value) {
+      var imageUrl;
+      if (attr === 'image') {
+        // This get executed when we have url in series.markers[0].scale.someScale.url
+        if (typeof value === 'object') {
+          imageUrl = value.url;
+          this.offset = value.offset || [0, 0];
+        } else {
+          imageUrl = value;
+          this.offset = [0, 0];
+        }
+        this.node.setAttributeNS('http://www.w3.org/1999/xlink', 'href', imageUrl);
+
+        // Set width and height then call this `applyAttr` again
+        this.width = 23;
+        this.height = 23;
+        this.applyAttr('width', this.width);
+        this.applyAttr('height', this.height);
+        this.applyAttr('x', this.cx - this.width / 2 + this.offset[0]);
+        this.applyAttr('y', this.cy - this.height / 2 + this.offset[1]);
+      } else if (attr == 'cx') {
+        this.cx = value;
+        if (this.width) {
+          this.applyAttr('x', value - this.width / 2 + this.offset[0]);
+        }
+      } else if (attr == 'cy') {
+        this.cy = value;
+        if (this.height) {
+          this.applyAttr('y', value - this.height / 2 + this.offset[1]);
+        }
+      } else {
+        // This time Call SVGElement
+        _SVGShapeElement.prototype.applyAttr.apply(this, arguments);
+      }
+    };
+    return SVGImageElement;
+  }(SVGShapeElement);
+
+  /**
+   * ------------------------------------------------------------------------
+   * Class Definition
+   * ------------------------------------------------------------------------
+   */
+  var SVGCanvasElement = /*#__PURE__*/function (_SVGElement) {
+    _inheritsLoose(SVGCanvasElement, _SVGElement);
+    function SVGCanvasElement(container) {
+      var _this;
+      _this = _SVGElement.call(this, 'svg') || this; // Create svg element for holding the whole map
+
+      _this._container = container;
+
+      // Create the defs element
+      _this._defsElement = new SVGElement('defs');
+
+      // Create group element which will hold the paths (regions)
+      _this._rootElement = new SVGElement('g', {
+        id: 'jvm-regions-group'
+      });
+
+      // Append the defs element to the this.node (SVG tag)
+      _this.node.appendChild(_this._defsElement.node);
+
+      // Append the group to this.node (SVG tag)
+      _this.node.appendChild(_this._rootElement.node);
+
+      // Append this.node (SVG tag) to the container
+      _this._container.appendChild(_this.node);
+      return _this;
+    }
+    var _proto = SVGCanvasElement.prototype;
+    _proto.setSize = function setSize(width, height) {
+      this.node.setAttribute('width', width);
+      this.node.setAttribute('height', height);
+    };
+    _proto.applyTransformParams = function applyTransformParams(scale, transX, transY) {
+      this._rootElement.node.setAttribute('transform', "scale(" + scale + ") translate(" + transX + ", " + transY + ")");
+    }
+
+    // Create `path` element
+    ;
+    _proto.createPath = function createPath(config, style) {
+      var path = new SVGShapeElement('path', config, style);
+      path.node.setAttribute('fill-rule', 'evenodd');
+      return this._add(path);
+    }
+
+    // Create `circle` element
+    ;
+    _proto.createCircle = function createCircle(config, style, group) {
+      var circle = new SVGShapeElement('circle', config, style);
+      return this._add(circle, group);
+    }
+
+    // Create `line` element
+    ;
+    _proto.createLine = function createLine(config, style, group) {
+      var line = new SVGShapeElement('line', config, style);
+      return this._add(line, group);
+    }
+
+    // Create `text` element
+    ;
+    _proto.createText = function createText(config, style, group) {
+      var text = new SVGTextElement(config, style);
+      return this._add(text, group);
+    }
+
+    // Create `image` element
+    ;
+    _proto.createImage = function createImage(config, style, group) {
+      var image = new SVGImageElement(config, style);
+      return this._add(image, group);
+    }
+
+    // Create `g` element
+    ;
+    _proto.createGroup = function createGroup(id) {
+      var group = new SVGElement('g');
+      this.node.appendChild(group.node);
+      if (id) {
+        group.node.id = id;
+      }
+      group.canvas = this;
+      return group;
+    }
+
+    // Add some element to a spcific group or the root element if the group isn't given
+    ;
+    _proto._add = function _add(element, group) {
+      group = group || this._rootElement;
+      group.node.appendChild(element.node);
+      return element;
+    };
+    return SVGCanvasElement;
+  }(SVGElement);
+
+  /**
+   * ------------------------------------------------------------------------
+   * Class Definition
+   * ------------------------------------------------------------------------
+   */
+  var Tooltip = /*#__PURE__*/function (_BaseComponent) {
+    _inheritsLoose(Tooltip, _BaseComponent);
+    function Tooltip(map) {
+      var _this;
+      _this = _BaseComponent.call(this) || this;
+      var tooltip = createElement('div', 'jvm-tooltip');
+      _this._map = map;
+      _this._tooltip = document.body.appendChild(tooltip);
+      _this._bindEventListeners();
+      return _assertThisInitialized(_this) || _assertThisInitialized(_this);
+    }
+    var _proto = Tooltip.prototype;
+    _proto._bindEventListeners = function _bindEventListeners() {
+      var _this2 = this;
+      EventHandler.on(this._map.container, 'mousemove', function (event) {
+        if (!_this2._tooltip.classList.contains('active')) {
+          return;
+        }
+        var container = findElement(_this2._map.container, '#jvm-regions-group').getBoundingClientRect();
+        var space = 5; // Space between the cursor and tooltip element
+
+        // Tooltip
+        var _this2$_tooltip$getBo = _this2._tooltip.getBoundingClientRect(),
+          height = _this2$_tooltip$getBo.height,
+          width = _this2$_tooltip$getBo.width;
+        var topIsPassed = event.clientY <= container.top + height + space;
+        var top = event.pageY - height - space;
+        var left = event.pageX - width - space;
+
+        // Ensure the tooltip will never cross outside the canvas area(map)
+        if (topIsPassed) {
+          // Top:
+          top += height + space;
+
+          // The cursor is a bit larger from left side
+          left -= space * 2;
+        }
+        if (event.clientX < container.left + width + space) {
+          // Left:
+          left = event.pageX + space + 2;
+          if (topIsPassed) {
+            left += space * 2;
+          }
+        }
+        _this2.css({
+          top: top + "px",
+          left: left + "px"
+        });
+      });
+    };
+    _proto.getElement = function getElement() {
+      return this._tooltip;
+    };
+    _proto.show = function show() {
+      this._tooltip.classList.add('active');
+    };
+    _proto.hide = function hide() {
+      this._tooltip.classList.remove('active');
+    };
+    _proto.text = function text(string, html) {
+      if (html === void 0) {
+        html = false;
+      }
+      var property = html ? 'innerHTML' : 'textContent';
+      if (!string) {
+        return this._tooltip[property];
+      }
+      this._tooltip[property] = string;
+    };
+    _proto.css = function css(_css) {
+      for (var style in _css) {
+        this._tooltip.style[style] = _css[style];
+      }
+      return this;
+    };
+    return Tooltip;
+  }(BaseComponent);
+
+  var DataVisualization = /*#__PURE__*/function () {
+    function DataVisualization(_ref, map) {
+      var scale = _ref.scale,
+        values = _ref.values;
+      this._scale = scale;
+      this._values = values;
+      this._fromColor = this.hexToRgb(scale[0]);
+      this._toColor = this.hexToRgb(scale[1]);
+      this._map = map;
+      this.setMinMaxValues(values);
+      this.visualize();
+    }
+    var _proto = DataVisualization.prototype;
+    _proto.setMinMaxValues = function setMinMaxValues(values) {
+      this.min = Number.MAX_VALUE;
+      this.max = 0;
+      for (var value in values) {
+        value = parseFloat(values[value]);
+        if (value > this.max) {
+          this.max = value;
+        }
+        if (value < this.min) {
+          this.min = value;
+        }
+      }
+    };
+    _proto.visualize = function visualize() {
+      var attrs = {},
+        value;
+      for (var regionCode in this._values) {
+        value = parseFloat(this._values[regionCode]);
+        if (!isNaN(value)) {
+          attrs[regionCode] = this.getValue(value);
+        }
+      }
+      this.setAttributes(attrs);
+    };
+    _proto.setAttributes = function setAttributes(attrs) {
+      for (var code in attrs) {
+        if (this._map.regions[code]) {
+          this._map.regions[code].element.setStyle('fill', attrs[code]);
+        }
+      }
+    };
+    _proto.getValue = function getValue(value) {
+      var hex,
+        color = '#';
+      for (var i = 0; i < 3; i++) {
+        hex = Math.round(this._fromColor[i] + (this._toColor[i] - this._fromColor[i]) * ((value - this.min) / (this.max - this.min))).toString(16);
+        color += (hex.length === 1 ? '0' : '') + hex;
+      }
+      return color;
+    };
+    _proto.hexToRgb = function hexToRgb(h) {
+      var r = 0,
+        g = 0,
+        b = 0;
+      if (h.length == 4) {
+        r = '0x' + h[1] + h[1];
+        g = '0x' + h[2] + h[2];
+        b = '0x' + h[3] + h[3];
+      } else if (h.length == 7) {
+        r = '0x' + h[1] + h[2];
+        g = '0x' + h[3] + h[4];
+        b = '0x' + h[5] + h[6];
+      }
+      return [parseInt(r), parseInt(g), parseInt(b)];
+    };
+    return DataVisualization;
+  }();
+
+  /**
+   * ------------------------------------------------------------------------
+   * Class Definition
+   * ------------------------------------------------------------------------
+   */
+  var Map = /*#__PURE__*/function () {
+    function Map(options) {
+      var _this = this;
+      if (options === void 0) {
+        options = {};
+      }
+      // Merge the given options with the default options
+      this.params = merge(Map.defaults, options, true);
+
+      // Throw an error if the given map name doesn't match
+      // the map that was set in map file
+      if (!Map.maps[this.params.map]) {
+        throw new Error("Attempt to use map which was not loaded: " + options.map);
+      }
+      this.regions = {};
+      this.scale = 1;
+      this.transX = 0;
+      this.transY = 0;
+      this._mapData = Map.maps[this.params.map];
+      this._markers = {};
+      this._lines = {};
+      this._defaultWidth = this._mapData.width;
+      this._defaultHeight = this._mapData.height;
+      this._height = 0;
+      this._width = 0;
+      this._baseScale = 1;
+      this._baseTransX = 0;
+      this._baseTransY = 0;
+
+      // `document` is already ready, just initialise now
+      if (document.readyState !== 'loading') {
+        this._init();
+      } else {
+        // Wait until `document` is ready
+        window.addEventListener('DOMContentLoaded', function () {
+          return _this._init();
+        });
+      }
+    }
+    var _proto = Map.prototype;
+    _proto._init = function _init() {
+      var options = this.params;
+      this.container = getElement(options.selector);
+      this.container.classList.add('jvm-container');
+
+      // The map canvas element
+      this.canvas = new SVGCanvasElement(this.container);
+
+      // Set the map's background color
+      this.setBackgroundColor(options.backgroundColor);
+
+      // Create regions
+      this._createRegions();
+
+      // Update size
+      this.updateSize();
+
+      // Create lines
+      this._createLines(options.lines || {}, options.markers || {});
+
+      // Create markers
+      this._createMarkers(options.markers);
+
+      // Position labels
+      this._repositionLabels();
+
+      // Setup the container events
+      this._setupContainerEvents();
+
+      // Setup regions/markers events
+      this._setupElementEvents();
+
+      // Create zoom buttons if `zoomButtons` is presented
+      if (options.zoomButtons) {
+        this._setupZoomButtons();
+      }
+
+      // Create toolip
+      if (options.showTooltip) {
+        this._tooltip = new Tooltip(this);
+      }
+
+      // Set selected regions if any
+      if (options.selectedRegions) {
+        this._setSelected('regions', options.selectedRegions);
+      }
+
+      // Set selected regions if any
+      if (options.selectedMarkers) {
+        this._setSelected('_markers', options.selectedMarkers);
+      }
+
+      // Set focus on a spcific region
+      if (options.focusOn) {
+        this.setFocus(options.focusOn);
+      }
+
+      // Data visualization
+      if (options.visualizeData) {
+        this.dataVisualization = new DataVisualization(options.visualizeData, this);
+      }
+
+      // Bind touch events if true
+      if (options.bindTouchEvents) {
+        if ('ontouchstart' in window || window.DocumentTouch && document instanceof DocumentTouch) {
+          this._setupContainerTouchEvents();
+        }
+      }
+
+      // Create series if any
+      if (options.series) {
+        this.container.appendChild(this.legendHorizontal = createElement('div', 'jvm-series-container jvm-series-h'));
+        this.container.appendChild(this.legendVertical = createElement('div', 'jvm-series-container jvm-series-v'));
+        this._createSeries();
+      }
+
+      // Fire loaded event
+      this._emit(Events.onLoaded, [this]);
+    }
+
+    // Public
+    ;
+    _proto.setBackgroundColor = function setBackgroundColor(color) {
+      this.container.style.backgroundColor = color;
+    }
+
+    // Region methods
+    ;
+    _proto.getSelectedRegions = function getSelectedRegions() {
+      return this._getSelected('regions');
+    };
+    _proto.clearSelectedRegions = function clearSelectedRegions() {
+      this._clearSelected('regions');
+    }
+
+    // Markers methods
+    ;
+    _proto.getSelectedMarkers = function getSelectedMarkers() {
+      return this._getSelected('_markers');
+    };
+    _proto.clearSelectedMarkers = function clearSelectedMarkers() {
+      this._clearSelected('_markers');
+    };
+    _proto.addMarkers = function addMarkers(config) {
+      if (Array.isArray(config)) {
+        return this._createMarkers(config, true);
+      }
+      this._createMarkers([config], true);
+    };
+    _proto.removeMarkers = function removeMarkers(markers) {
+      var _this2 = this;
+      if (!markers) {
+        markers = Object.keys(this._markers);
+      }
+      markers.forEach(function (index) {
+        // Remove the element from the DOM
+        _this2._markers[index].element.remove();
+        // Remove the element from markers object
+        delete _this2._markers[index];
+      });
+    };
+    _proto.addLine = function addLine(from, to, style) {
+      if (style === void 0) {
+        style = {};
+      }
+      console.warn('`addLine` method is deprecated, please use `addLines` instead.');
+      this._createLines([{
+        from: from,
+        to: to,
+        style: style
+      }], this._markers, true);
+    };
+    _proto.addLines = function addLines(config) {
+      var uids = this._getLinesAsUids();
+      if (!Array.isArray(config)) {
+        config = [config];
+      }
+      this._createLines(config.filter(function (line) {
+        return !(uids.indexOf(getLineUid(line.from, line.to)) > -1);
+      }), this._markers, true);
+    };
+    _proto.removeLines = function removeLines(lines) {
+      var _this3 = this;
+      if (Array.isArray(lines)) {
+        lines = lines.map(function (line) {
+          return getLineUid(line.from, line.to);
+        });
+      } else {
+        lines = this._getLinesAsUids();
+      }
+      lines.forEach(function (uid) {
+        _this3._lines[uid].dispose();
+        delete _this3._lines[uid];
+      });
+    };
+    _proto.removeLine = function removeLine(from, to) {
+      console.warn('`removeLine` method is deprecated, please use `removeLines` instead.');
+      var uid = getLineUid(from, to);
+      if (this._lines.hasOwnProperty(uid)) {
+        this._lines[uid].element.remove();
+        delete this._lines[uid];
+      }
+    }
+
+    // Reset map
+    ;
+    _proto.reset = function reset() {
+      for (var key in this.series) {
+        for (var i = 0; i < this.series[key].length; i++) {
+          this.series[key][i].clear();
+        }
+      }
+      if (this.legendHorizontal) {
+        removeElement(this.legendHorizontal);
+        this.legendHorizontal = null;
+      }
+      if (this.legendVertical) {
+        removeElement(this.legendVertical);
+        this.legendVertical = null;
+      }
+      this.scale = this._baseScale;
+      this.transX = this._baseTransX;
+      this.transY = this._baseTransY;
+      this._applyTransform();
+      this.clearSelectedMarkers();
+      this.clearSelectedRegions();
+      this.removeMarkers();
+    }
+
+    // Destroy the map
+    ;
+    _proto.destroy = function destroy(destroyInstance) {
+      var _this4 = this;
+      if (destroyInstance === void 0) {
+        destroyInstance = true;
+      }
+      // Remove event registry
+      EventHandler.flush();
+
+      // Remove tooltip from DOM and memory
+      this._tooltip.dispose();
+
+      // Fire destroyed event
+      this._emit(Events.onDestroyed);
+
+      // Remove references
+      if (destroyInstance) {
+        Object.keys(this).forEach(function (key) {
+          try {
+            delete _this4[key];
+          } catch (e) {}
+        });
+      }
+    };
+    _proto.extend = function extend(name, callback) {
+      if (typeof this[name] === 'function') {
+        throw new Error("The method [" + name + "] does already exist, please use another name.");
+      }
+      Map.prototype[name] = callback;
+    }
+
+    // Private
+    ;
+    _proto._emit = function _emit(eventName, args) {
+      for (var event in Events) {
+        if (Events[event] === eventName && typeof this.params[event] === 'function') {
+          this.params[event].apply(this, args);
+        }
+      }
+    }
+
+    // Get selected markers/regions
+    ;
+    _proto._getSelected = function _getSelected(type) {
+      var selected = [];
+      for (var key in this[type]) {
+        if (this[type][key].element.isSelected) {
+          selected.push(key);
+        }
+      }
+      return selected;
+    };
+    _proto._setSelected = function _setSelected(type, keys) {
+      var _this5 = this;
+      keys.forEach(function (key) {
+        if (_this5[type][key]) {
+          _this5[type][key].element.select(true);
+        }
+      });
+    };
+    _proto._clearSelected = function _clearSelected(type) {
+      var _this6 = this;
+      this._getSelected(type).forEach(function (key) {
+        _this6[type][key].element.select(false);
+      });
+    };
+    _proto._getLinesAsUids = function _getLinesAsUids() {
+      return Object.keys(this._lines);
+    };
+    return Map;
+  }();
+  Map.maps = {};
+  Map.defaults = Defaults;
+  Object.assign(Map.prototype, core);
+
+  /**
+   * jsVectorMap
+   * Copyrights (c) Mustafa Omar https://github.com/themustafaomar
+   * Released under the MIT License.
+   */
+
+  /**
+   * ------------------------------------------------------------------------
+   * Class Definition
+   * ------------------------------------------------------------------------
+   */
+  var jsVectorMap = /*#__PURE__*/function () {
+    function jsVectorMap(options) {
+      if (options === void 0) {
+        options = {};
+      }
+      if (!options.selector) {
+        throw new Error('Selector is not given.');
+      }
+      return new Map(options);
+    }
+
+    // Public
+    jsVectorMap.addMap = function addMap(name, map) {
+      Map.maps[name] = map;
+    };
+    return jsVectorMap;
+  }();
+  var index = window.jsVectorMap = jsVectorMap;
+
+  return index;
+
+}));

Різницю між файлами не показано, бо вона завелика
+ 0 - 0
public/libs/jsvectormap/dist/js/jsvectormap.min.js


Різницю між файлами не показано, бо вона завелика
+ 0 - 0
public/libs/jsvectormap/dist/maps/world-merc.js


Різницю між файлами не показано, бо вона завелика
+ 0 - 0
public/libs/jsvectormap/dist/maps/world.js


Різницю між файлами не показано, бо вона завелика
+ 11 - 0
public/libs/litepicker/dist/bundle.js


Різницю між файлами не показано, бо вона завелика
+ 11 - 0
public/libs/litepicker/dist/css/litepicker.css


+ 12 - 0
public/libs/litepicker/dist/css/plugins/keyboardnav.js.css

@@ -0,0 +1,12 @@
+/*!
+ * 
+ * ../css/plugins/keyboardnav.js.css
+ * Litepicker v2.0.12 (https://github.com/wakirin/Litepicker)
+ * Package: litepicker (https://www.npmjs.com/package/litepicker)
+ * License: MIT (https://github.com/wakirin/Litepicker/blob/master/LICENCE.md)
+ * Copyright 2019-2021 Rinat G.
+ *     
+ * Hash: fc3887e0bb19d54c36db
+ * 
+ */
+

+ 133 - 0
public/libs/litepicker/dist/css/plugins/mobilefriendly.js.css

@@ -0,0 +1,133 @@
+/*!
+ * 
+ * ../css/plugins/mobilefriendly.js.css
+ * Litepicker v2.0.12 (https://github.com/wakirin/Litepicker)
+ * Package: litepicker (https://www.npmjs.com/package/litepicker)
+ * License: MIT (https://github.com/wakirin/Litepicker/blob/master/LICENCE.md)
+ * Copyright 2019-2021 Rinat G.
+ *     
+ * Hash: fc3887e0bb19d54c36db
+ * 
+ */
+:root {
+  --litepicker-mobilefriendly-backdrop-color-bg: #000;
+}
+
+.litepicker-backdrop {
+  display: none;
+  background-color: var(--litepicker-mobilefriendly-backdrop-color-bg);
+  opacity: 0.3;
+  position: fixed;
+  top: 0;
+  right: 0;
+  bottom: 0;
+  left: 0;
+}
+
+.litepicker-open {
+  overflow: hidden;
+}
+
+.litepicker.mobilefriendly[data-plugins*="mobilefriendly"] {
+  -webkit-transform: translate(-50%, -50%);
+          transform: translate(-50%, -50%);
+  font-size: 1.1rem;
+  --litepicker-container-months-box-shadow-color: #616161;
+}
+.litepicker.mobilefriendly-portrait {
+  --litepicker-day-width: 13.5vw;
+  --litepicker-month-width: calc(var(--litepicker-day-width) * 7);
+}
+.litepicker.mobilefriendly-landscape {
+  --litepicker-day-width: 5.5vw;
+  --litepicker-month-width: calc(var(--litepicker-day-width) * 7);
+}
+
+.litepicker[data-plugins*="mobilefriendly"] .container__months {
+  overflow: hidden;
+}
+
+.litepicker.mobilefriendly[data-plugins*="mobilefriendly"] .container__months .month-item-header {
+  height: var(--litepicker-day-width);
+}
+
+.litepicker.mobilefriendly[data-plugins*="mobilefriendly"] .container__days > div {
+  height: var(--litepicker-day-width);
+  display: -webkit-box;
+  display: -ms-flexbox;
+  display: flex;
+  -webkit-box-align: center;
+      -ms-flex-align: center;
+          align-items: center;
+  -webkit-box-pack: center;
+      -ms-flex-pack: center;
+          justify-content: center;
+}
+
+
+.litepicker[data-plugins*="mobilefriendly"] .container__months .month-item {
+  -webkit-transform-origin: center;
+          transform-origin: center;
+}
+
+.litepicker[data-plugins*="mobilefriendly"] .container__months .month-item.touch-target-next {
+  -webkit-animation-name: lp-bounce-target-next;
+          animation-name: lp-bounce-target-next;
+  -webkit-animation-duration: .5s;
+          animation-duration: .5s;
+  -webkit-animation-timing-function: ease;
+          animation-timing-function: ease;
+}
+
+.litepicker[data-plugins*="mobilefriendly"] .container__months .month-item.touch-target-prev {
+  -webkit-animation-name: lp-bounce-target-prev;
+          animation-name: lp-bounce-target-prev;
+  -webkit-animation-duration: .5s;
+          animation-duration: .5s;
+  -webkit-animation-timing-function: ease;
+          animation-timing-function: ease;
+}
+
+@-webkit-keyframes lp-bounce-target-next {
+  from {
+    -webkit-transform: translateX(100px) scale(0.5);
+            transform: translateX(100px) scale(0.5);
+  }
+  to {
+    -webkit-transform: translateX(0px) scale(1);
+            transform: translateX(0px) scale(1);
+  }
+}
+
+@keyframes lp-bounce-target-next {
+  from {
+    -webkit-transform: translateX(100px) scale(0.5);
+            transform: translateX(100px) scale(0.5);
+  }
+  to {
+    -webkit-transform: translateX(0px) scale(1);
+            transform: translateX(0px) scale(1);
+  }
+}
+
+@-webkit-keyframes lp-bounce-target-prev {
+  from {
+    -webkit-transform: translateX(-100px) scale(0.5);
+            transform: translateX(-100px) scale(0.5);
+  }
+  to {
+    -webkit-transform: translateX(0px) scale(1);
+            transform: translateX(0px) scale(1);
+  }
+}
+
+@keyframes lp-bounce-target-prev {
+  from {
+    -webkit-transform: translateX(-100px) scale(0.5);
+            transform: translateX(-100px) scale(0.5);
+  }
+  to {
+    -webkit-transform: translateX(0px) scale(1);
+            transform: translateX(0px) scale(1);
+  }
+}

+ 54 - 0
public/libs/litepicker/dist/css/plugins/multiselect.js.css

@@ -0,0 +1,54 @@
+/*!
+ * 
+ * ../css/plugins/multiselect.js.css
+ * Litepicker v2.0.12 (https://github.com/wakirin/Litepicker)
+ * Package: litepicker (https://www.npmjs.com/package/litepicker)
+ * License: MIT (https://github.com/wakirin/Litepicker/blob/master/LICENCE.md)
+ * Copyright 2019-2021 Rinat G.
+ *     
+ * Hash: fc3887e0bb19d54c36db
+ * 
+ */
+:root {
+  --litepicker-multiselect-is-selected-color-bg: #2196f3;
+  --litepicker-multiselect-is-selected-color: #fff;
+  --litepicker-multiselect-hover-color-bg: #2196f3;
+  --litepicker-multiselect-hover-color: #fff;
+}
+
+.litepicker[data-plugins*="multiselect"] .container__days .day-item {
+  position: relative;
+  z-index: 1;
+}
+
+.litepicker[data-plugins*="multiselect"] .container__days .day-item:not(.is-locked):after {
+  content: '';
+  position: absolute;
+  width: 27px;
+  height: 27px;
+  top: 50%;
+  left: 50%;
+  z-index: -1;
+  border-radius: 50%;
+  -webkit-transform: translate(-50%, -50%);
+          transform: translate(-50%, -50%);
+}
+
+.litepicker[data-plugins*="multiselect"] .container__days .day-item:not(.is-locked):hover {
+  -webkit-box-shadow: none;
+          box-shadow: none;
+  color: var(--litepicker-day-color);
+  font-weight: bold;
+}
+
+
+.litepicker[data-plugins*="multiselect"] .container__days .day-item.is-selected,
+.litepicker[data-plugins*="multiselect"] .container__days .day-item.is-selected:hover {
+  color: var(--litepicker-multiselect-is-selected-color);
+}
+
+.litepicker[data-plugins*="multiselect"] .container__days .day-item.is-selected:after {
+  color: var(--litepicker-multiselect-is-selected-color);
+  background-color: var(--litepicker-multiselect-is-selected-color-bg);
+}
+

+ 81 - 0
public/libs/litepicker/dist/css/plugins/ranges.js.css

@@ -0,0 +1,81 @@
+/*!
+ * 
+ * ../css/plugins/ranges.js.css
+ * Litepicker v2.0.12 (https://github.com/wakirin/Litepicker)
+ * Package: litepicker (https://www.npmjs.com/package/litepicker)
+ * License: MIT (https://github.com/wakirin/Litepicker/blob/master/LICENCE.md)
+ * Copyright 2019-2021 Rinat G.
+ *     
+ * Hash: fc3887e0bb19d54c36db
+ * 
+ */
+.litepicker[data-plugins*="ranges"] > .container__main > .container__predefined-ranges {
+  display: -webkit-box;
+  display: -ms-flexbox;
+  display: flex;
+  -webkit-box-orient: vertical;
+  -webkit-box-direction: normal;
+      -ms-flex-direction: column;
+          flex-direction: column;
+  -webkit-box-align: start;
+      -ms-flex-align: start;
+          align-items: flex-start;
+  background: var(--litepicker-container-months-color-bg);
+  -webkit-box-shadow: -2px 0px 5px var(--litepicker-footer-box-shadow-color);
+          box-shadow: -2px 0px 5px var(--litepicker-footer-box-shadow-color);
+  border-radius: 3px;
+}
+.litepicker[data-plugins*="ranges"][data-ranges-position="left"] > .container__main {
+  /* */
+}
+.litepicker[data-plugins*="ranges"][data-ranges-position="right"] > .container__main{
+  -webkit-box-orient: horizontal;
+  -webkit-box-direction: reverse;
+      -ms-flex-direction: row-reverse;
+          flex-direction: row-reverse;
+}
+.litepicker[data-plugins*="ranges"][data-ranges-position="right"] > .container__main > .container__predefined-ranges {
+  -webkit-box-shadow: 2px 0px 2px var(--litepicker-footer-box-shadow-color);
+          box-shadow: 2px 0px 2px var(--litepicker-footer-box-shadow-color);
+}
+.litepicker[data-plugins*="ranges"][data-ranges-position="top"] > .container__main {
+  -webkit-box-orient: vertical;
+  -webkit-box-direction: normal;
+      -ms-flex-direction: column;
+          flex-direction: column;
+}
+.litepicker[data-plugins*="ranges"][data-ranges-position="top"] > .container__main > .container__predefined-ranges {
+  -webkit-box-orient: horizontal;
+  -webkit-box-direction: normal;
+      -ms-flex-direction: row;
+          flex-direction: row;
+  -webkit-box-shadow: 2px 0px 2px var(--litepicker-footer-box-shadow-color);
+          box-shadow: 2px 0px 2px var(--litepicker-footer-box-shadow-color);
+}
+.litepicker[data-plugins*="ranges"][data-ranges-position="bottom"] > .container__main {
+  -webkit-box-orient: vertical;
+  -webkit-box-direction: reverse;
+      -ms-flex-direction: column-reverse;
+          flex-direction: column-reverse;
+}
+.litepicker[data-plugins*="ranges"][data-ranges-position="bottom"] > .container__main > .container__predefined-ranges {
+  -webkit-box-orient: horizontal;
+  -webkit-box-direction: normal;
+      -ms-flex-direction: row;
+          flex-direction: row;
+  -webkit-box-shadow: 2px 0px 2px var(--litepicker-footer-box-shadow-color);
+          box-shadow: 2px 0px 2px var(--litepicker-footer-box-shadow-color);
+}
+.litepicker[data-plugins*="ranges"] > .container__main > .container__predefined-ranges button {
+  padding: 5px;
+  margin: 2px 0;
+}
+.litepicker[data-plugins*="ranges"][data-ranges-position="left"] > .container__main > .container__predefined-ranges button,
+.litepicker[data-plugins*="ranges"][data-ranges-position="right"] > .container__main > .container__predefined-ranges button{
+  width: 100%;
+  text-align: left;
+}
+.litepicker[data-plugins*="ranges"] > .container__main > .container__predefined-ranges button:hover {
+  cursor: default;
+  opacity: .6;
+}

Різницю між файлами не показано, бо вона завелика
+ 11 - 0
public/libs/litepicker/dist/js/main.js


Різницю між файлами не показано, бо вона завелика
+ 11 - 0
public/libs/litepicker/dist/litepicker.amd.js


Різницю між файлами не показано, бо вона завелика
+ 11 - 0
public/libs/litepicker/dist/litepicker.commonjs2.js


Різницю між файлами не показано, бо вона завелика
+ 11 - 0
public/libs/litepicker/dist/litepicker.js


Різницю між файлами не показано, бо вона завелика
+ 11 - 0
public/libs/litepicker/dist/litepicker.umd.js


Різницю між файлами не показано, бо вона завелика
+ 11 - 0
public/libs/litepicker/dist/nocss/litepicker.amd.js


Різницю між файлами не показано, бо вона завелика
+ 11 - 0
public/libs/litepicker/dist/nocss/litepicker.commonjs2.js


Різницю між файлами не показано, бо вона завелика
+ 11 - 0
public/libs/litepicker/dist/nocss/litepicker.js


Різницю між файлами не показано, бо вона завелика
+ 11 - 0
public/libs/litepicker/dist/nocss/litepicker.umd.js


Різницю між файлами не показано, бо вона завелика
+ 10 - 0
public/libs/litepicker/dist/nocss/plugins/keyboardnav.js


Різницю між файлами не показано, бо вона завелика
+ 10 - 0
public/libs/litepicker/dist/nocss/plugins/mobilefriendly.js


Різницю між файлами не показано, бо вона завелика
+ 10 - 0
public/libs/litepicker/dist/nocss/plugins/multiselect.js


Різницю між файлами не показано, бо вона завелика
+ 10 - 0
public/libs/litepicker/dist/nocss/plugins/ranges.js


Різницю між файлами не показано, бо вона завелика
+ 10 - 0
public/libs/litepicker/dist/plugins/keyboardnav.js


Деякі файли не було показано, через те що забагато файлів було змінено