Browse Source

Add files via upload

lllllllillllllillll 1 year ago
parent
commit
e86a631f0c
92 changed files with 42238 additions and 0 deletions
  1. 180 0
      app.js
  2. 978 0
      components/appCard.js
  3. 1067 0
      components/dashCard.js
  4. 18 0
      components/siteCard.js
  5. 22 0
      controllers/account.js
  6. 151 0
      controllers/app_actions.js
  7. 129 0
      controllers/apps.js
  8. 22 0
      controllers/dashboard.js
  9. 60 0
      controllers/login.js
  10. 6 0
      controllers/logout.js
  11. 85 0
      controllers/register.js
  12. 21 0
      controllers/settings.js
  13. 197 0
      controllers/site_actions.js
  14. 54 0
      controllers/users.js
  15. 63 0
      database/UserModel.js
  16. 23 0
      package.json
  17. 8 0
      public/css/demo.min.css
  18. 120 0
      public/css/meters.css
  19. 28661 0
      public/css/tabler.min.css
  20. 35 0
      public/js/demo-theme.js
  21. 132 0
      public/js/demo.js
  22. 8 0
      public/js/demo.min.js
  23. 128 0
      public/js/main.js
  24. 8 0
      public/js/tabler.min.js
  25. 1 0
      public/libs/apexcharts/dist/apexcharts.amd.js
  26. 5 0
      public/libs/apexcharts/dist/apexcharts.common.js
  27. 581 0
      public/libs/apexcharts/dist/apexcharts.css
  28. 5 0
      public/libs/apexcharts/dist/apexcharts.esm.js
  29. 5 0
      public/libs/apexcharts/dist/apexcharts.min.js
  30. 63 0
      public/libs/apexcharts/dist/locales/ar.json
  31. 55 0
      public/libs/apexcharts/dist/locales/ca.json
  32. 55 0
      public/libs/apexcharts/dist/locales/cs.json
  33. 55 0
      public/libs/apexcharts/dist/locales/de.json
  34. 55 0
      public/libs/apexcharts/dist/locales/el.json
  35. 55 0
      public/libs/apexcharts/dist/locales/en.json
  36. 55 0
      public/libs/apexcharts/dist/locales/es.json
  37. 63 0
      public/libs/apexcharts/dist/locales/et.json
  38. 55 0
      public/libs/apexcharts/dist/locales/fa.json
  39. 55 0
      public/libs/apexcharts/dist/locales/fi.json
  40. 55 0
      public/libs/apexcharts/dist/locales/fr.json
  41. 55 0
      public/libs/apexcharts/dist/locales/he.json
  42. 55 0
      public/libs/apexcharts/dist/locales/hi.json
  43. 55 0
      public/libs/apexcharts/dist/locales/hr.json
  44. 64 0
      public/libs/apexcharts/dist/locales/hu.json
  45. 55 0
      public/libs/apexcharts/dist/locales/hy.json
  46. 47 0
      public/libs/apexcharts/dist/locales/id.json
  47. 55 0
      public/libs/apexcharts/dist/locales/it.json
  48. 55 0
      public/libs/apexcharts/dist/locales/ja.json
  49. 55 0
      public/libs/apexcharts/dist/locales/ka.json
  50. 55 0
      public/libs/apexcharts/dist/locales/ko.json
  51. 55 0
      public/libs/apexcharts/dist/locales/lt.json
  52. 64 0
      public/libs/apexcharts/dist/locales/lv.json
  53. 55 0
      public/libs/apexcharts/dist/locales/nb.json
  54. 55 0
      public/libs/apexcharts/dist/locales/nl.json
  55. 55 0
      public/libs/apexcharts/dist/locales/pl.json
  56. 55 0
      public/libs/apexcharts/dist/locales/pt-br.json
  57. 55 0
      public/libs/apexcharts/dist/locales/pt.json
  58. 55 0
      public/libs/apexcharts/dist/locales/rs.json
  59. 55 0
      public/libs/apexcharts/dist/locales/ru.json
  60. 55 0
      public/libs/apexcharts/dist/locales/se.json
  61. 55 0
      public/libs/apexcharts/dist/locales/sk.json
  62. 55 0
      public/libs/apexcharts/dist/locales/sl.json
  63. 55 0
      public/libs/apexcharts/dist/locales/sq.json
  64. 55 0
      public/libs/apexcharts/dist/locales/th.json
  65. 55 0
      public/libs/apexcharts/dist/locales/tr.json
  66. 55 0
      public/libs/apexcharts/dist/locales/ua.json
  67. 55 0
      public/libs/apexcharts/dist/locales/zh-cn.json
  68. 55 0
      public/libs/apexcharts/dist/locales/zh-tw.json
  69. BIN
      public/static/avatars/burns.jpg
  70. BIN
      public/static/avatars/frank.jpg
  71. BIN
      public/static/avatars/moe.jpg
  72. BIN
      public/static/avatars/poochie.jpg
  73. BIN
      public/static/avatars/rus.jpg
  74. BIN
      public/static/avatars/skinner.jpg
  75. 3 0
      public/static/logo-small-white.svg
  76. 0 0
      public/static/logo-small.svg
  77. 2 0
      public/static/logo-white.svg
  78. 0 0
      public/static/logo.svg
  79. 47 0
      routes/index.js
  80. 69 0
      setup.sh
  81. 5869 0
      templates.json
  82. 145 0
      views/pages/account.ejs
  83. 93 0
      views/pages/apps.ejs
  84. 278 0
      views/pages/dashboard.ejs
  85. 81 0
      views/pages/login.ejs
  86. 182 0
      views/pages/register.ejs
  87. 145 0
      views/pages/settings.ejs
  88. 81 0
      views/pages/users.ejs
  89. 34 0
      views/partials/footer.ejs
  90. 253 0
      views/partials/navbar.ejs
  91. 0 0
      views/partials/site_list.ejs
  92. 12 0
      views/partials/users_list.ejs

+ 180 - 0
app.js

@@ -0,0 +1,180 @@
+const express = require("express");
+const session = require("express-session");
+const redis = require('connect-redis');
+const { currentLoad, mem, networkStats, fsSize, dockerContainerStats } = require('systeminformation');
+const app = express();
+const routes = require("./routes");
+const PORT = 8000;
+var Docker = require('dockerode');
+var docker = new Docker({ socketPath: '/var/run/docker.sock' });
+const { dashCard } = require('./components/dashCard');
+
+let DockerContainers, sent_list, clicked, open_ports, ServerMetrics, card_list, external_port, internal_port;
+
+const redisClient = require('redis').createClient({
+    legacyMode:true
+});
+redisClient.connect().catch(console.log);
+const RedisStore = redis(session);
+
+const sessionMiddleware = session({
+    store:new RedisStore({client:redisClient}),
+    secret: "keyboard cat", 
+    resave: false, 
+    saveUninitialized: false, 
+    cookie:{
+        secure:false, // Only set to true if you are using HTTPS.
+        httpOnly:false, // Only set to true if you are using HTTPS.
+        maxAge:3600000 * 8// Session max age in milliseconds. 3600000 = 1 hour.
+    } 
+})
+
+app.set('view engine', 'ejs');
+app.use([
+    express.static("public"),
+    express.json(),
+    express.urlencoded({ extended: true }),
+    sessionMiddleware,
+    routes
+]);
+
+const server = app.listen(PORT, async () => {
+    console.log(`App listening on port ${PORT}`);   
+});
+
+const io = require('socket.io')(server);
+io.engine.use(sessionMiddleware);
+
+io.on('connection', (socket) => {
+
+    const user_session = socket.request.session;
+
+    // display client connection info
+    console.log(`${user_session.user} connected from ${socket.handshake.headers.host} ${socket.handshake.address} \n Active Sessions: ${io.engine.clientsCount}`);
+
+    // send list of running docker containers if sent_list contains data
+    if (sent_list != null) { socket.emit('cards', sent_list); }
+
+    // check if an install is in progress
+    if((app.locals.install != '') && (app.locals.install != null)){
+        socket.emit('install', app.locals.install);
+    }    
+
+    // send server metrics to client
+    async function Metrics() {
+        Promise.all([currentLoad(), mem(), networkStats(), fsSize()]).then(([cpuUsage, ramUsage, netUsage, diskUsage]) => {
+            let cpu = Math.round(cpuUsage.currentLoad);
+            let ram = Math.round(((ramUsage.active / ramUsage.total) * 100));
+            let tx = netUsage[0].tx_bytes;
+            let rx = netUsage[0].rx_bytes;
+            let disk = diskUsage[0].use;
+            socket.emit('metrics', { cpu, ram, tx, rx, disk });
+        });
+    }
+
+    async function ContainersList() {
+        card_list = '';
+        open_ports = '';
+        external_port;
+        internal_port;
+
+        docker.listContainers({ all: true }, async function (err, data) {
+            for (const container of data) {
+                
+                let imageVersion = container.Image.split('/');
+                let dockerService = imageVersion[imageVersion.length - 1].split(":")[0];
+
+                
+                let containerId = docker.getContainer(container.Id);
+                let containerInfo = await containerId.inspect();
+
+                // console.log(containerInfo.Name.split('/')[1]);
+                // console.log(container.Image);
+                // console.log(containerInfo.HostConfig.RestartPolicy.Name);
+
+                
+                for (const [key, value] of Object.entries(containerInfo.HostConfig.PortBindings)) {
+                    console.log(`${value[0].HostPort}:${key}`);
+                    external_port = value[0].HostPort;
+                    internal_port = key;
+                }
+                
+                // console.log('Volumes:');
+                // for (const [key, value] of Object.entries(containerInfo.Mounts)) {
+                //     console.log(`${value.Source}: ${value.Destination}: ${value.RW}`);
+                // }
+
+
+                // console.log('Environment Variables:');
+                // for (const [key, value] of Object.entries(containerInfo.Config.Env)) {
+                //     console.log(`${key}: ${value}`);
+                // }
+
+                // console.log('Labels:');
+                // for (const [key, value] of Object.entries(containerInfo.Config.Labels)) {
+                //     console.log(`${key}: ${value}`);
+                // }
+
+                // dockerContainerStats(container.Id).then((data) => {
+                //     console.log(`${container.Names[0].slice(1)} // CPU: ${Math.round(data[0].cpuPercent)} // RAM: ${Math.round(data[0].memPercent)}`);
+                // });
+                
+                let dockerCard = dashCard(container.Names[0].slice(1), dockerService, container.Id, container.State, container.Image, external_port, internal_port);
+                // open_ports += `-L ${external_port}:localhost:${external_port} `
+                card_list += dockerCard;
+            }
+
+            // emit card list is it's different from what was sent last time, then clear install local
+            if (sent_list !== card_list) {
+                sent_list = card_list;
+                app.locals.install = '';
+                socket.emit('cards', card_list);
+                console.log('Cards updated');
+            }
+        });
+    }
+
+    console.log('Starting Metrics');
+    ServerMetrics = setInterval(Metrics, 1000);
+
+    console.log('Starting Containers List');
+    DockerContainers = setInterval(ContainersList, 1000);
+
+
+    socket.on('clicked', (data) => {
+        // Prevent multiple clicks
+        if (clicked == true) { return; } clicked = true;
+
+        console.log(`${socket.request.session.user} wants to: ${data.action} ${data.container}`);
+    
+        if (socket.request.session.role == 'admin') {
+            var containerName = docker.getContainer(data.container);
+
+            if ((data.action == 'start') && (data.state == 'stopped')) {
+                containerName.start();
+            } else if ((data.action == 'start') && (data.state == 'paused')) {
+                containerName.unpause();
+            } else if ((data.action == 'stop') && (data.state != 'stopped')) {
+                containerName.stop();
+            } else if ((data.action == 'pause') && (data.state == 'running')) {
+                containerName.pause();
+            } else if ((data.action == 'pause') && (data.state == 'paused')) {
+                containerName.unpause();
+            } else if (data.action == 'restart') {
+                containerName.restart();
+            }
+        } else {
+            console.log('User is not an admin');
+        }
+        clicked = false;
+    });
+    
+
+    socket.on('disconnect', () => {
+            console.log('Stopping Metrics');
+            clearInterval(ServerMetrics);
+            console.log('Stopping Containers List');
+            clearInterval(DockerContainers);
+    }); 
+
+});

+ 978 - 0
components/appCard.js

@@ -0,0 +1,978 @@
+function appCard(data) {
+
+  // make data.title lowercase
+  let app_name = data.name || data.title.toLowerCase();
+  let shortened_name = "";
+  let shortened_desc = data.description.slice(0, 60) + "...";
+  let modal = app_name.replaceAll(" ", "-");
+  let form_id = app_name.replaceAll("-", "_");
+  let note = data.note ? data.note.replaceAll(". ", ".\n") : "no notes available";
+  let description = data.description.replaceAll(". ", ".\n") || "no description available";
+  let command = data.command ? data.command : "";
+  let command_check = command ? "checked" : "";
+
+
+  // if data.network is set to host, bridge, or docker set the radio button to checked
+  let net_host, net_bridge, net_docker = '';
+  let net_name = 'AppBridge';
+  
+  if (data.network == 'host') {
+    net_host = 'checked';
+  } else if (data.network) {
+    net_bridge = 'checked';
+    net_name = data.network;
+  } else {
+    net_docker = 'checked';
+  }
+
+
+  if (data.title.length > 28) {
+    shortened_name = (data.title).slice(0, 25) + "...";
+  }
+  else {
+    shortened_name = data.title;
+  }
+
+  
+  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 '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
+    }
+  }
+
+  // set data.catagories to 'other' if data.catagories is empty or undefined
+  if (data.categories == null || data.categories == undefined || data.categories == '') {
+    data.categories = ['Other'];
+  }
+
+  let categories = '';
+
+  for (let i = 0; i < data.categories.length; i++) {
+    categories += CatagoryColor(data.categories[i]);
+  }
+
+  if (data.restart_policy == null) {
+    data.restart_policy = 'unless-stopped';
+  }
+
+  let ports_data = [], volumes_data = [], env_data = [], label_data = [];
+
+  for (let i = 0; i < 12; i++) {
+    
+    // Get port details
+    try {
+      let ports = data.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 = data.volumes[i];
+      let volume_check = volumes ? "checked" : "";
+      let volume_bind = volumes.bind.split(":")[0] ? volumes.bind.split(":")[0] : "";
+      let volume_container = volumes.container.split(":")[0] ? volumes.container.split(":")[0] : "";
+      let volume_readwrite = volumes.container.endsWith(":ro") ? "ro" : "rw";
+
+      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 = data.env[i];
+      let env_check = env ? "checked" : "";
+      let env_default = env.default ? env.default : "";
+      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 = data.labels[i];
+      let label_check = label ? "checked" : "";
+      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: ""
+      });
+    }
+
+  }
+
+
+
+  return `
+  <div class="col-md-6 col-lg-3">
+    <div class="card">
+      <div class="card-body p-4 text-center">
+        <span class="avatar avatar-xlplus mb-3 rounded"><img src='${data.logo}' width="144px" height="144px" loading="lazy"></img></span>
+        <h3 class="m-0 mb-1"><a href="#">${shortened_name}</a></h3>
+        <div class="text-secondary">${shortened_desc}</div>
+        <div class="mt-3">
+          ${categories}
+        </div>
+      </div>
+      <div class="d-flex">
+        <a href="#" class="card-btn" data-bs-toggle="modal" data-bs-target="#${modal}-info"><!-- Download SVG icon from http://tabler-icons.io/i/mail -->
+          <svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-article" 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="M3 4m0 2a2 2 0 0 1 2 -2h14a2 2 0 0 1 2 2v12a2 2 0 0 1 -2 2h-14a2 2 0 0 1 -2 -2z"></path> <path d="M7 8h10"></path> <path d="M7 12h10"></path> <path d="M7 16h10"></path></svg>
+            Learn More
+        </a>
+        <a href="#" class="card-btn" data-bs-toggle="modal" data-bs-target="#${modal}-install"><!-- Download SVG icon from http://tabler-icons.io/i/phone -->
+        <svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-arrow-bar-to-down" 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="M4 20l16 0"></path> <path d="M12 14l0 -10"></path> <path d="M12 14l4 -4"></path> <path d="M12 14l-4 -4"></path></svg>
+          Install
+        </a>
+      </div>
+    </div>
+  </div>
+
+  <div class="modal modal-blur fade" id="${modal}-info" tabindex="-1" role="dialog" aria-hidden="true">
+    <div class="modal-dialog modal-sm modal-dialog-centered" role="document">
+      <div class="modal-content">
+        <div class="modal-body">
+          <div class="modal-title">${data.title}</div>
+          <div>${description}</div>
+        </div>
+        <div class="modal-footer">
+          <button type="button" class="btn btn-link link-secondary me-auto" data-bs-dismiss="modal">Cancel</button>
+          <button type="button" class="btn btn-primary" data-bs-dismiss="modal">Okay</button>
+        </div>
+      </div>
+    </div>
+  </div>
+
+  <div class="modal modal-blur fade" id="${modal}-install" tabindex="-1" role="dialog" aria-hidden="true">
+                <div class="modal-dialog modal-dialog-centered modal-dialog-scrollable" role="document">
+                  <div class="modal-content">
+                    <div class="modal-header">
+                      <h5 class="modal-title">Install ${data.title}</h5>
+                      <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
+                    </div>
+            
+                    
+                    <div class="modal-body">
+                      
+                    <pre class="text-secondary">${note}</pre>
+                    
+                      <form action="/install" name="${form_id}_install" id="${form_id}_install" method="POST">
+                      
+                      <div class="row mb-3 align-items-end">
+                        
+                        <div class="col-lg-6">
+                          <label class="form-label">Container Name: </label>
+                          <input type="text" class="form-control" name="service_name" value="${app_name}" hidden/>
+                          <input type="text" class="form-control" name="name" value="${app_name}"/>
+                        </div>
+                        <div class="col-lg-3">
+                          <label class="form-label">Image: </label>
+                          <input type="text" class="form-control" name="image" value="${data.image}"/>
+                        </div>
+                        <div class="col-lg-3">
+                          <label class="form-label">Restart Policy: </label>
+                          <select class="form-select" name="restart_policy">
+                            <option value="${data.restart_policy}" selected hidden>${data.restart_policy}</option>
+                            <option value="unless-stopped">unless-stopped</option>
+                            <option value="on-failure">on-failure</option>
+                            <option value="never">never</option>
+                            <option value="always">always</option>
+                          </select>
+                        </div>
+                      </div>
+            
+                      <label class="form-label">Network Mode</label>
+                        <div class="form-selectgroup-boxes row mb-3">
+                          <div class="col">
+                            <label class="form-selectgroup-item">
+                              <input type="radio" name="net_mode" value="host" class="form-selectgroup-input" ${net_host}>
+                              <span class="form-selectgroup-label d-flex align-items-center p-3">
+                                <span class="me-3">
+                                  <span class="form-selectgroup-check"></span>
+                                </span>
+                                <span class="form-selectgroup-label-content">
+                                  <span class="form-selectgroup-title strong mb-1">Host Network</span>
+                                  <span class="d-block text-secondary">Same as host. No isolation. ex.127.0.0.1</span>
+                                </span>
+                              </span>
+                            </label>
+                          </div>
+                          <div class="col">
+                            <label class="form-selectgroup-item">
+                              <input type="radio" name="net_mode" value="${net_name}" class="form-selectgroup-input" ${net_bridge}>
+                              <span class="form-selectgroup-label d-flex align-items-center p-3">
+                                <span class="me-3">
+                                  <span class="form-selectgroup-check"></span>
+                                </span>
+                                <span class="form-selectgroup-label-content">
+                                  <span class="form-selectgroup-title strong mb-1">Bridge Network</span>
+                                  <span class="d-block text-secondary">Containers can communicate using names.</span>
+                                </span>
+                              </span>
+                            </label>
+                          </div>
+                          <div class="col">
+                          <label class="form-selectgroup-item">
+                            <input type="radio" name="net_mode" value="docker" class="form-selectgroup-input" ${net_docker}>
+                            <span class="form-selectgroup-label d-flex align-items-center p-3">
+                              <span class="me-3">
+                                <span class="form-selectgroup-check"></span>
+                              </span>
+                              <span class="form-selectgroup-label-content">
+                                <span class="form-selectgroup-title strong mb-1">Docker Network</span>
+                                <span class="d-block text-secondary">Isolated on the docker network. ex.172.0.34.2</span>
+                              </span>
+                            </span>
+                          </label>
+                        </div>
+                      </div>
+
+
+
+
+            
+                      <div class="accordion" id="${modal}-accordion">
+                        <div class="accordion-item">
+                          <h2 class="accordion-header" id="heading-1">
+                            <button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#collapse-1" aria-expanded="false">
+                              Ports
+                            </button>
+                          </h2>
+                          <div id="collapse-1" class="accordion-collapse collapse" data-bs-parent="#${modal}-accordion">
+                            <div class="accordion-body pt-0">
+            
+
+                              <div class="row mb-1 align-items-end">
+                                <div class="col-auto">
+                                  <input class="form-check-input" name="port_0_check" type="checkbox" ${ports_data[0].check}>
+                                </div>
+                                <div class="col">
+                                  <label class="form-label">External Port</label>
+                                  <input type="text" class="form-control" name="port_0_external" value="${ports_data[0].external}"/>
+                                </div>
+                                <div class="col">
+                                  <label class="form-label">Internal Port</label>
+                                  <input type="text" class="form-control" name="port_0_internal" value="${ports_data[0].internal}"/>
+                                </div>
+                                <div class="col-lg-2">
+                                  <label class="form-label">Protocol</label>
+                                  <select class="form-select" name="port_0_protocol">
+                                    <option value="${ports_data[0].protocol}" selected hidden>${ports_data[0].protocol}</option>
+                                    <option value="tcp">tcp</option>
+                                    <option value="udp">udp</option>
+                                  </select>
+                                </div>
+                              </div>
+            
+                              <div class="row mb-1 align-items-end">
+                                <div class="col-auto">
+                                  <input class="form-check-input" name="port_1_check" type="checkbox" ${ports_data[1].check}>
+                                </div>
+                                <div class="col">
+                                  <input type="text" class="form-control" name="port_1_external" value="${ports_data[1].external}"/>
+                                </div>
+                                <div class="col">
+                                  <input type="text" class="form-control" name="port_1_internal" value="${ports_data[1].internal}"/>
+                                </div>
+                                <div class="col-lg-2">
+                                  <select class="form-select" name="port_1_protocol">
+                                    <option value="${ports_data[1].protocol}" selected hidden>${ports_data[1].protocol}</option>
+                                    <option value="tcp">tcp</option>
+                                    <option value="udp">udp</option>
+                                  </select>
+                                </div>
+                              </div>
+            
+                              <div class="row mb-1 align-items-end">
+                                <div class="col-auto">
+                                  <input class="form-check-input" name="port_2_check" type="checkbox" ${ports_data[2].check}>
+                                </div>
+                                <div class="col">
+                                  <input type="text" class="form-control" name="port_2_external" value="${ports_data[2].external}"/>
+                                </div>
+                                <div class="col">
+                                  <input type="text" class="form-control" name="port_2_internal" value="${ports_data[2].internal}"/>
+                                </div>
+                                <div class="col-lg-2">
+                                  <select class="form-select" name="port_2_protocol">
+                                    <option value="${ports_data[2].protocol}" selected hidden>${ports_data[2].protocol}</option>
+                                    <option value="tcp">tcp</option>
+                                    <option value="udp">udp</option>
+                                  </select>
+                                </div>
+                              </div>
+            
+                              <div class="row mb-1 align-items-end">
+                                <div class="col-auto">
+                                  <input class="form-check-input" name="port_3_check" type="checkbox" ${ports_data[3].check}>
+                                </div>
+                                <div class="col">
+                                  <input type="text" class="form-control" name="port_3_external" value="${ports_data[3].external}"/>
+                                </div>
+                                <div class="col">
+                                  <input type="text" class="form-control" name="port_3_internal" value="${ports_data[3].internal}"/>
+                                </div>
+                                <div class="col-lg-2">
+                                  <select class="form-select" name="port_3_protocol">
+                                    <option value="${ports_data[3].protocol}" selected hidden>${ports_data[3].protocol}</option>
+                                    <option value="tcp">tcp</option>
+                                    <option value="udp">udp</option>
+                                  </select>
+                                </div>
+                              </div>
+            
+                              <div class="row mb-1 align-items-end">
+                                <div class="col-auto">
+                                  <input class="form-check-input" name="port_4_check" type="checkbox" ${ports_data[4].check}>
+                                </div>
+                                <div class="col">
+                                  <input type="text" class="form-control" name="port_4_external" value="${ports_data[4].external}"/>
+                                </div>
+                                <div class="col">
+                                  <input type="text" class="form-control" name="port_4_internal" value="${ports_data[4].internal}"/>
+                                </div>
+                                <div class="col-lg-2">
+                                  <select class="form-select" name="port_4_protocol">
+                                    <option value="${ports_data[4].protocol}" selected hidden>${ports_data[4].protocol}</option>
+                                    <option value="tcp">tcp</option>
+                                    <option value="udp">udp</option>
+                                  </select>
+                                </div>
+                              </div>
+            
+                              <div class="row mb-1 align-items-end">
+                                <div class="col-auto">
+                                  <input class="form-check-input" name="port_5_check" type="checkbox" ${ports_data[5].check}>
+                                </div>
+                                <div class="col">
+                                  <input type="text" class="form-control" name="port_5_external" value="${ports_data[5].external}"/>
+                                </div>
+                                <div class="col">
+                                  <input type="text" class="form-control" name="port_5_internal" value="${ports_data[5].internal}"/>
+                                </div>
+                                <div class="col-lg-2">
+                                  <select class="form-select" name="port_5_protocol">
+                                    <option value="${ports_data[5].protocol}" selected hidden>${ports_data[5].protocol}</option>
+                                    <option value="tcp">tcp</option>
+                                    <option value="udp">udp</option>
+                                  </select>
+                                </div>
+                              </div>
+            
+            
+                            </div>
+                          </div>
+                        </div>
+                        <div class="accordion-item">
+                          <h2 class="accordion-header" id="heading-2">
+                            <button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#collapse-2" aria-expanded="false">
+                              Volumes
+                            </button>
+                          </h2>
+                          <div id="collapse-2" class="accordion-collapse collapse" data-bs-parent="#${modal}-accordion">
+                            <div class="accordion-body pt-0">
+            
+            
+                            <div class="row mb-1 align-items-end">
+                            <div class="col-auto">
+                              <input class="form-check-input" name="volume_0_check" type="checkbox" ${volumes_data[0].check}>
+                            </div>
+                            <div class="col">
+                              <input type="text" class="form-control" name="volume_0_bind" value="${volumes_data[0].bind}"/>
+                            </div>
+                            <div class="col">
+                              <input type="text" class="form-control" name="volume_0_container" value="${volumes_data[0].container}"/>
+                            </div>
+                            <div class="col-lg-2">
+                              <select class="form-select" name="volume_0_readwrite">
+                                <option value="${volumes_data[0].readwrite}" selected hidden>${volumes_data[0].readwrite}</option>
+                                <option value="rw">rw</option>
+                                <option value="ro">ro</option>
+                              </select>
+                            </div>
+                          </div>
+            
+                          <div class="row mb-1 align-items-end">
+                            <div class="col-auto">
+                              <input class="form-check-input" name="volume_1_check" type="checkbox" ${volumes_data[1].check}>
+                            </div>
+                            <div class="col">
+                              <input type="text" class="form-control" name="volume_1_bind" value="${volumes_data[1].bind}"/>
+                            </div>
+                            <div class="col">
+                              <input type="text" class="form-control" name="volume_1_container" value="${volumes_data[1].container}"/>
+                            </div>
+                            <div class="col-lg-2">
+                              <select class="form-select" name="volume_1_readwrite">
+                                <option value="${volumes_data[1].readwrite}" selected hidden>${volumes_data[1].readwrite}</option>
+                                <option value="rw">rw</option>
+                                <option value="ro">ro</option>
+                              </select>
+                            </div>
+                          </div>
+            
+                          <div class="row mb-1 align-items-end">
+                            <div class="col-auto">
+                              <input class="form-check-input" name="volume_2_check" type="checkbox" ${volumes_data[2].check}>
+                            </div>
+                            <div class="col">
+                              <input type="text" class="form-control" name="volume_2_bind" value="${volumes_data[2].bind}"/>
+                            </div>
+                            <div class="col">
+                              <input type="text" class="form-control" name="volume_2_container" value="${volumes_data[2].container}"/>
+                            </div>
+                            <div class="col-lg-2">
+                              <select class="form-select" name="volume_2_readwrite">
+                                <option value="${volumes_data[2].readwrite}" selected hidden>${volumes_data[2].readwrite}</option>
+                                <option value="rw">rw</option>
+                                <option value="ro">ro</option>
+                              </select>
+                            </div>
+                          </div>
+            
+                          <div class="row mb-1 align-items-end">
+                            <div class="col-auto">
+                              <input class="form-check-input" name="volume_3_check" type="checkbox" ${volumes_data[3].check}>
+                            </div>
+                            <div class="col">
+                              <input type="text" class="form-control" name="volume_3_bind" value="${volumes_data[3].bind}"/>
+                            </div>
+                            <div class="col">
+                              <input type="text" class="form-control" name="volume_3_container" value="${volumes_data[3].container}"/>
+                            </div>
+                            <div class="col-lg-2">
+                              <select class="form-select" name="volume_3_readwrite">
+                                <option value="${volumes_data[3].readwrite}" selected hidden>${volumes_data[3].readwrite}</option>
+                                <option value="rw">rw</option>
+                                <option value="ro">ro</option>
+                              </select>
+                            </div>
+                          </div>
+            
+                          <div class="row mb-1 align-items-end">
+                            <div class="col-auto">
+                              <input class="form-check-input" name="volume_4_check" type="checkbox" ${volumes_data[4].check}>
+                            </div>
+                            <div class="col">
+                              <input type="text" class="form-control" name="volume_4_bind" value="${volumes_data[4].bind}"/>
+                            </div>
+                            <div class="col">
+                              <input type="text" class="form-control" name="volume_4_container" value="${volumes_data[4].container}"/>
+                            </div>
+                            <div class="col-lg-2">
+                              <select class="form-select" name="volume_4_readwrite">
+                                <option value="${volumes_data[4].readwrite}" selected hidden>${volumes_data[4].readwrite}</option>
+                                <option value="rw">rw</option>
+                                <option value="ro">ro</option>
+                              </select>
+                            </div>
+                          </div>
+            
+                          <div class="row mb-1 align-items-end">
+                          <div class="col-auto">
+                            <input class="form-check-input" name="volume_5_check" type="checkbox" ${volumes_data[5].check}>
+                          </div>
+                          <div class="col">
+                            <input type="text" class="form-control" name="volume_5_bind" value="${volumes_data[5].bind}"/>
+                          </div>
+                          <div class="col">
+                            <input type="text" class="form-control" name="volume_5_container" value="${volumes_data[5].container}"/>
+                          </div>
+                          <div class="col-lg-2">
+                            <select class="form-select" name="volume_5_readwrite">
+                              <option value="${volumes_data[5].readwrite}" selected hidden>${volumes_data[5].readwrite}</option>
+                              <option value="rw">rw</option>
+                              <option value="ro">ro</option>
+                            </select>
+                          </div>
+                        </div>
+            
+            
+                            </div>
+                          </div>
+                        </div>
+                        <div class="accordion-item">
+                          <h2 class="accordion-header" id="heading-3">
+                            <button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#collapse-3" aria-expanded="false">
+                              Environment Variables
+                            </button>
+                          </h2>
+                          <div id="collapse-3" class="accordion-collapse collapse" data-bs-parent="#${modal}-accordion">
+                            <div class="accordion-body pt-0">
+            
+            
+                              <div class="row mb-1 align-items-end">
+                                <div class="col-auto">
+                                  <input class="form-check-input" type="checkbox" name="env_0_check" ${env_data[0].check}>
+                                </div>
+                                <div class="col">
+                                  <label class="form-label">Variable</label>
+                                  <input type="text" class="form-control" name="env_0_name" value="${env_data[0].name}"/>
+                                </div>
+                                <div class="col">
+                                  <label class="form-label">Value</label>
+                                  <input type="text" class="form-control" name="env_0_default" value="${env_data[0].default}"/>
+                                </div>
+                              </div>
+            
+                              <div class="row mb-1 align-items-end">
+                                <div class="col-auto">
+                                  <input class="form-check-input" type="checkbox" name="env_1_check" ${env_data[1].check}>
+                                </div>
+                                <div class="col">
+                                  <input type="text" class="form-control" name="env_1_name" value="${env_data[1].name}"/>
+                                </div>
+                                <div class="col">
+                                  <input type="text" class="form-control" name="env_1_default" value="${env_data[1].default}"/>
+                                </div>
+                              </div>
+            
+                              <div class="row mb-1 align-items-end">
+                                <div class="col-auto">
+                                  <input class="form-check-input" type="checkbox" name="env_2_check" ${env_data[2].check}>
+                                </div>
+                                <div class="col">
+                                  <input type="text" class="form-control" name="env_2_name" value="${env_data[2].name}"/>
+                                </div>
+                                <div class="col">
+                                  <input type="text" class="form-control" name="env_2_default" value="${env_data[2].default}"/>
+                                </div>
+                              </div>
+            
+                              <div class="row mb-1 align-items-end">
+                                <div class="col-auto">
+                                  <input class="form-check-input" type="checkbox" name="env_3_check" ${env_data[3].check}>
+                                </div>
+                                <div class="col">
+                                  <input type="text" class="form-control" name="env_3_name" value="${env_data[3].name}"/>
+                                </div>
+                                <div class="col">
+                                  <input type="text" class="form-control" name="env_3_default" value="${env_data[3].default}"/>
+                                </div>
+                              </div>
+            
+                              <div class="row mb-1 align-items-end">
+                                <div class="col-auto">
+                                  <input class="form-check-input" type="checkbox" name="env_4_check" ${env_data[4].check}>
+                                </div>
+                                <div class="col">
+                                  <input type="text" class="form-control" name="env_4_name" value="${env_data[4].name}"/>
+                                </div>
+                                <div class="col">
+                                  <input type="text" class="form-control" name="env_4_default" value="${env_data[4].default}"/>
+                                </div>
+                              </div>
+            
+                              <div class="row mb-1 align-items-end">
+                                <div class="col-auto">
+                                  <input class="form-check-input" type="checkbox" name="env_5_check" ${env_data[5].check}>
+                                </div>
+                                <div class="col">
+                                  <input type="text" class="form-control" name="env_5_name" value="${env_data[5].name}"/>
+                                </div>
+                                <div class="col">
+                                  <input type="text" class="form-control" name="env_5_default" value="${env_data[5].default}"/>
+                                </div>
+                              </div>
+            
+                              <div class="row mb-1 align-items-end">
+                                <div class="col-auto">
+                                  <input class="form-check-input" type="checkbox" name="env_6_check" ${env_data[6].check}>
+                                </div>
+                                <div class="col">
+                                  <input type="text" class="form-control" name="env_6_name" value="${env_data[6].name}"/>
+                                </div>
+                                <div class="col">
+                                  <input type="text" class="form-control" name="env_6_default" value="${env_data[6].default}"/>
+                                </div>
+                              </div>
+            
+            
+                              <div class="row mb-1 align-items-end">
+                                <div class="col-auto">
+                                  <input class="form-check-input" type="checkbox" name="env_7_check" ${env_data[7].check}>
+                                </div>
+                                <div class="col">
+                                  <input type="text" class="form-control" name="env_7_name" value="${env_data[7].name}"/>
+                                </div>
+                                <div class="col">
+                                  <input type="text" class="form-control" name="env_7_default" value="${env_data[7].default}"/>
+                                </div>
+                              </div>
+            
+            
+                              <div class="row mb-1 align-items-end">
+                                <div class="col-auto">
+                                  <input class="form-check-input" type="checkbox" name="env_8_check" ${env_data[8].check}>
+                                </div>
+                                <div class="col">
+                                  <input type="text" class="form-control" name="env_8_name" value="${env_data[8].name}"/>
+                                </div>
+                                <div class="col">
+                                  <input type="text" class="form-control" name="env_8_default" value="${env_data[8].default}"/>
+                                </div>
+                              </div>
+            
+            
+                              <div class="row mb-1 align-items-end">
+                                <div class="col-auto">
+                                  <input class="form-check-input" type="checkbox" name="env_9_check" ${env_data[9].check}>
+                                </div>
+                                <div class="col">
+                                  <input type="text" class="form-control" name="env_9_name" value="${env_data[9].name}"/>
+                                </div>
+                                <div class="col">
+                                  <input type="text" class="form-control" name="env_9_default" value="${env_data[9].default}"/>
+                                </div>
+                              </div>
+            
+            
+                              <div class="row mb-1 align-items-end">
+                                <div class="col-auto">
+                                  <input class="form-check-input" type="checkbox" name="env_10_check" ${env_data[10].check}>
+                                </div>
+                                <div class="col">
+                                  <input type="text" class="form-control" name="env_10_name" value="${env_data[10].name}"/>
+                                </div>
+                                <div class="col">
+                                  <input type="text" class="form-control" name="env_10_default" value="${env_data[10].default}"/>
+                                </div>
+                              </div>
+            
+            
+                              <div class="row mb-1 align-items-end">
+                                <div class="col-auto">
+                                  <input class="form-check-input" type="checkbox" name="env_11_check" ${env_data[11].check}>
+                                </div>
+                                <div class="col">
+                                  <input type="text" class="form-control" name="env_11_name" value="${env_data[11].name}"/>
+                                </div>
+                                <div class="col">
+                                  <input type="text" class="form-control" name="env_11_default" value="${env_data[11].default}"/>
+                                </div>
+                              </div>
+            
+            
+            
+            
+                            </div>
+                          </div>
+                        </div>
+                        <div class="accordion-item">
+                          <h2 class="accordion-header" id="heading-4">
+                            <button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#collapse-4" aria-expanded="false">
+                              Labels
+                            </button>
+                          </h2>
+                          <div id="collapse-4" class="accordion-collapse collapse" data-bs-parent="#${modal}-accordion">
+                            <div class="accordion-body pt-0">
+            
+            
+                            <div class="row mb-1 align-items-end">
+                              <div class="col-auto">
+                                <input class="form-check-input" type="checkbox" name="label_0_check" ${label_data[0].check}>
+                              </div>
+                              <div class="col">
+                                <label class="form-label">Variable</label>
+                                <input type="text" class="form-control" name="label_0_name" value="${label_data[0].name}"/>
+                              </div>
+                              <div class="col">
+                                <label class="form-label">Value</label>
+                                <input type="text" class="form-control" name="label_0_value" value="${label_data[0].value}"/>
+                              </div>
+                            </div>
+            
+                            <div class="row mb-1 align-items-end">
+                              <div class="col-auto">
+                                <input class="form-check-input" type="checkbox" name="label_1_check" ${label_data[1].check}>
+                              </div>
+                              <div class="col">
+                                <input type="text" class="form-control" name="label_1_name" value="${label_data[1].name}"/>
+                              </div>
+                              <div class="col">
+                                <input type="text" class="form-control" name="label_1_value" value="${label_data[1].value}"/>
+                              </div>
+                            </div>
+            
+                              
+                            <div class="row mb-1 align-items-end">
+                              <div class="col-auto">
+                                <input class="form-check-input" type="checkbox" name="label_2_check" ${label_data[2].check}>
+                              </div>
+                              <div class="col">
+                                <input type="text" class="form-control" name="label_2_name" value="${label_data[2].name}"/>
+                              </div>
+                              <div class="col">
+                                <input type="text" class="form-control" name="label_2_value" value="${label_data[2].value}"/>
+                              </div>
+                            </div>
+            
+                            <div class="row mb-1 align-items-end">
+                              <div class="col-auto">
+                                <input class="form-check-input" type="checkbox" name="label_3_check" ${label_data[3].check}>
+                              </div>
+                              <div class="col">
+                                <input type="text" class="form-control" name="label_3_name" value="${label_data[3].name}"/>
+                              </div>
+                              <div class="col">
+                                <input type="text" class="form-control" name="label_3_value" value="${label_data[3].value}"/>
+                              </div>
+                            </div>
+            
+                            <div class="row mb-1 align-items-end">
+                              <div class="col-auto">
+                                <input class="form-check-input" type="checkbox" name="label_4_check" ${label_data[4].check}>
+                              </div>
+                              <div class="col">
+                                <input type="text" class="form-control" name="label_4_name" value="${label_data[4].name}"/>
+                              </div>
+                              <div class="col">
+                                <input type="text" class="form-control" name="label_4_value" value="${label_data[4].value}"/>
+                              </div>
+                            </div>
+
+                            <div class="row mb-1 align-items-end">
+                              <div class="col-auto">
+                                <input class="form-check-input" type="checkbox" name="label_5_check" ${label_data[5].check}>
+                              </div>
+                              <div class="col">
+                                <input type="text" class="form-control" name="label_5_name" value="${label_data[5].name}"/>
+                              </div>
+                              <div class="col">
+                                <input type="text" class="form-control" name="label_5_value" value="${label_data[5].value}"/>
+                              </div>
+                            </div>
+
+                            <div class="row mb-1 align-items-end">
+                              <div class="col-auto">
+                                <input class="form-check-input" type="checkbox" name="label_6_check" ${label_data[6].check}>
+                              </div>
+                              <div class="col">
+                                <input type="text" class="form-control" name="label_6_name" value="${label_data[6].name}"/>
+                              </div>
+                              <div class="col">
+                                <input type="text" class="form-control" name="label_6_value" value="${label_data[6].value}"/>
+                              </div>
+                            </div>
+
+                            <div class="row mb-1 align-items-end">
+                              <div class="col-auto">
+                                <input class="form-check-input" type="checkbox" name="label_7_check" ${label_data[7].check}>
+                              </div>
+                              <div class="col">
+                                <input type="text" class="form-control" name="label_7_name" value="${label_data[7].name}"/>
+                              </div>
+                              <div class="col">
+                                <input type="text" class="form-control" name="label_7_value" value="${label_data[7].value}"/>
+                              </div>
+                            </div>
+
+                            <div class="row mb-1 align-items-end">
+                              <div class="col-auto">
+                                <input class="form-check-input" type="checkbox" name="label_8_check" ${label_data[8].check}>
+                              </div>
+                              <div class="col">
+                                <input type="text" class="form-control" name="label_8_name" value="${label_data[8].name}"/>
+                              </div>
+                              <div class="col">
+                                <input type="text" class="form-control" name="label_8_value" value="${label_data[8].value}"/>
+                              </div>
+                            </div>
+
+                            <div class="row mb-1 align-items-end">
+                              <div class="col-auto">
+                                <input class="form-check-input" type="checkbox" name="label_9_check" ${label_data[9].check}>
+                              </div>
+                              <div class="col">
+                                <input type="text" class="form-control" name="label_9_name" value="${label_data[9].name}"/>
+                              </div>
+                              <div class="col">
+                                <input type="text" class="form-control" name="label_9_value" value="${label_data[9].value}"/>
+                              </div>
+                            </div>
+
+                            <div class="row mb-1 align-items-end">
+                              <div class="col-auto">
+                                <input class="form-check-input" type="checkbox" name="label_10_check" ${label_data[10].check}>
+                              </div>
+                              <div class="col">
+                                <input type="text" class="form-control" name="label_10_name" value="${label_data[10].name}"/>
+                              </div>
+                              <div class="col">
+                                <input type="text" class="form-control" name="label_10_value" value="${label_data[10].value}"/>
+                              </div>
+                            </div>
+
+                            <div class="row mb-1 align-items-end">
+                              <div class="col-auto">
+                                <input class="form-check-input" type="checkbox" name="label_11_check" ${label_data[11].check}>
+                              </div>
+                              <div class="col">
+                                <input type="text" class="form-control" name="label_11_name" value="${label_data[11].name}"/>
+                              </div>
+                              <div class="col">
+                                <input type="text" class="form-control" name="label_11_value" value="${label_data[11].value}"/>
+                              </div>
+                            </div>
+            
+            
+                            </div>
+                          </div>
+                        </div>
+
+
+                        <div class="accordion-item">
+                          <h2 class="accordion-header" id="heading-5">
+                            <button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#collapse-5" aria-expanded="false">
+                              Extras
+                            </button>
+                          </h2>
+                          <div id="collapse-5" class="accordion-collapse collapse" data-bs-parent="#${modal}-accordion">
+                            <div class="accordion-body pt-0">
+            
+
+                              <div class="row mb-1 align-items-end">
+                                <div class="col-auto">
+                                  <input class="form-check-input" name="command_check" type="checkbox" ${command_check}>
+                                </div>
+                                <div class="col">
+                                  <label class="form-label">Command</label>
+                                  <input type="text" class="form-control" name="command" value="${command}"/>
+                                </div>
+                              </div>
+
+                              <div class="row mb-1 align-items-end">
+                                <div class="col-auto">
+                                  <input class="form-check-input" name="hwa_check" type="checkbox">
+                                </div>
+                                <div class="col">
+                                  <label class="form-label">Nvidia Hardware Acceleration</label>
+                                  <input type="text" class="form-control" name="command" value="Nvidia"/>
+                                </div>
+                              </div>
+            
+                            </div>
+                          </div>
+                        </div>
+
+
+
+
+
+
+
+
+                        
+                      </div>
+            
+            
+                      
+                      </form>
+                    </div>
+                    <div class="modal-footer">
+                      <button type="button" class="btn me-auto" data-bs-dismiss="modal">Close</button>
+                      <input type="submit" form="${form_id}_install" class="btn btn-success" value="Install"/>
+                    </div>
+                  </div>
+                </div>
+              </div>`;
+
+
+}
+
+module.exports = { appCard };

+ 1067 - 0
components/dashCard.js

@@ -0,0 +1,1067 @@
+function dashCard(name, service, id, state, image, external_port, internal_port) {
+  
+  //disable controls for a docker container depending on its name
+  let enabled = "";
+  if (name.startsWith('dweeb')) {
+    enabled = 'disabled=""';
+  }
+
+  if ( external_port == undefined ) { external_port = 0; }
+  if ( internal_port == undefined ) { internal_port = 0; }
+
+
+  let shortened_name = name;
+  if (name.length > 13) {
+    shortened_name = name.slice(0, 10) + '...';
+  }
+
+  let state_indicator = 'green';
+  if (state == 'exited') {
+    state = 'stopped';
+    state_indicator = 'red';
+  } else if (state == 'paused') {
+    state_indicator = 'orange';
+  }
+
+
+  let app_name = name
+  let modal = app_name.replaceAll(" ", "-");
+  let form_id = app_name.replaceAll("-", "_");
+
+  let restart_policy = 'unless-stopped';
+  
+
+  let ports_data = [];
+  for (let i = 0; i < 12; i++) {
+
+    let port_check = "checked";
+    let external = i;
+    let internal = i;
+    let protocol = "tcp";
+
+    ports_data.push({
+      check: port_check,
+      external: external,
+      internal: internal,
+      protocol: protocol
+    });
+  }
+
+
+  let volumes_data = [];
+  for (let i = 0; i < 12; i++) {
+
+    let vol_check = "checked";
+    let bind = i;
+    let container = i;
+    let readwrite = "rw";
+
+    volumes_data.push({
+      check: vol_check,
+      bind: bind,
+      container: container,
+      readwrite: readwrite
+    });
+  }
+
+
+  let env_data = [];
+  for (let i = 0; i < 12; i++) {
+
+    let env_check = "checked";
+    let env_name = i;
+    let env_default = i;
+
+    env_data.push({
+      env_check: env_check,
+      env_name: env_name,
+      env_default: env_default
+    });
+  }
+
+
+  let label_data = [];
+  for (let i = 0; i < 12; i++) {
+
+    let label_check = "checked";
+    let label_name = i;
+    let label_default = i;
+    
+    label_data.push({
+      label_check: label_check,
+      label_name: label_name,
+      label_default: label_default
+    });
+  }
+
+
+  return `
+    <div class="col-sm-6 col-lg-3 deleteme">
+      <div class="card">
+        <div class="card-body">
+          <div class="card-stamp card-stamp-sm">
+            <img heigh="300px" width="300px" src="https://raw.githubusercontent.com/walkxcode/dashboard-icons/main/png/${service}.png"></img>
+          </div>
+          
+          <div class="d-flex align-items-center">
+            <div class="subheader text-yellow">${external_port}:${internal_port}</div>
+            <div class="ms-auto lh-1">
+              <div class="card-actions btn-actions">
+                
+                <div class="card-actions btn-actions">
+                  <button onclick="buttonAction(this)" name="${name}" value="start" id="${state}" class="btn-action" title="Start" ${enabled}><!-- player-play -->
+                    <svg xmlns="http://www.w3.org/2000/svg" class="icon-tabler icon-tabler-player-play" width="24" height="24" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"></path><path d="M7 4v16l13 -8z"></path></svg>
+                  </button>
+                  <button onclick="buttonAction(this)" name="${name}" value="stop" id="${state}" class="btn-action" title="Stop" ${enabled}><!-- player-stop -->
+                    <svg xmlns="http://www.w3.org/2000/svg" class="icon-tabler icon-tabler-player-stop" width="24" height="24" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"></path><path d="M5 5m0 2a2 2 0 0 1 2 -2h10a2 2 0 0 1 2 2v10a2 2 0 0 1 -2 2h-10a2 2 0 0 1 -2 -2z"></path></svg>
+                  </button>
+                  <button onclick="buttonAction(this)" name="${name}" value="pause" id="${state}" class="btn-action" title="Pause" ${enabled}><!-- player-pause -->
+                    <svg xmlns="http://www.w3.org/2000/svg" class="icon-tabler icon-tabler-player-pause" width="24" height="24" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"></path><path d="M6 5m0 1a1 1 0 0 1 1 -1h2a1 1 0 0 1 1 1v12a1 1 0 0 1 -1 1h-2a1 1 0 0 1 -1 -1z"></path><path d="M14 5m0 1a1 1 0 0 1 1 -1h2a1 1 0 0 1 1 1v12a1 1 0 0 1 -1 1h-2a1 1 0 0 1 -1 -1z"></path></svg>
+                  </button>
+                  <button onclick="buttonAction(this)" name="${name}" value="restart" id="${state}" class="btn-action" title="Restart" ${enabled}><!-- reload -->
+                    <svg xmlns="http://www.w3.org/2000/svg" class="icon-tabler icon-tabler-reload" width="24" height="24" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"></path><path d="M19.933 13.041a8 8 0 1 1 -9.925 -8.788c3.899 -1 7.935 1.007 9.425 4.747"></path><path d="M20 4v5h-5"></path></svg>                          
+                  </button>
+                  <div class="dropdown">
+                    <a href="#" class="btn-action dropdown-toggle" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false"><!-- Download SVG icon from http://tabler-icons.io/i/dots-vertical -->
+                      <svg xmlns="http://www.w3.org/2000/svg" class="" width="24" height="24" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"></path><circle cx="12" cy="12" r="1"></circle><circle cx="12" cy="19" r="1"></circle><circle cx="12" cy="5" r="1"></circle></svg>
+                    </a>
+                    <div class="dropdown-menu dropdown-menu-end">
+                      <a class="dropdown-item" data-bs-toggle="modal" data-bs-target="#${name}_modal-details" href="#">Details</a>
+                      <a class="dropdown-item" href="#">Logs</a>
+                      <a class="dropdown-item" href="#">Edit</a>
+                      <a class="dropdown-item text-danger" data-bs-toggle="modal" data-bs-target="#${name}_modal-danger" href="#">Remove</a>
+                    </div>
+                  </div>
+                </div>
+
+              </div>
+            </div>
+          </div>
+          <div class="d-flex align-items-baseline">
+            <div class="h1 me-2" title="${name}">
+              <a href="http://localhost:${external_port}" target="_blank">
+                ${shortened_name}
+              </a>
+            </div>
+            <div class="ms-auto">
+              <span class="text-${state_indicator} 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} <!-- Download SVG icon from http://tabler-icons.io/i/minus -->
+              </span>
+            </div>
+          </div>
+          <div id="cardChart" class="chart-sm"></div>
+        </div>
+      </div>
+    </div>
+    
+    <div class="modal modal-blur fade deleteme" id="${name}_modal-danger" tabindex="-1" style="display: none;" aria-hidden="true">
+                <div class="modal-dialog modal-sm modal-dialog-centered" role="document">
+                  <div class="modal-content">
+                    <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
+                    <div class="modal-status bg-danger"></div>
+                    <div class="modal-body text-center py-3">
+                      <!-- Download SVG icon from http://tabler-icons.io/i/alert-triangle -->
+                      <svg xmlns="http://www.w3.org/2000/svg" class="icon mb-2 text-danger icon-lg" 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 9v2m0 4v.01"></path><path d="M5 19h14a2 2 0 0 0 1.84 -2.75l-7.1 -12.25a2 2 0 0 0 -3.5 0l-7.1 12.25a2 2 0 0 0 1.75 2.75"></path></svg>
+                      <h3>Remove ${name}?</h3>
+                      <form action="/uninstall" id="uninstall" method="POST">
+                      <input type="text" class="form-control" name="service_name" value="${app_name}" hidden/>
+                      <div class="mb-3"> </div>
+                      
+                      <div class="mb-2">
+                        <div class="divide-y">
+                          <div class="row">
+                            <div class="col-9">
+                              <label class="row text-start">
+                                <span class="col">Remove Volumes</span>
+                              </label>
+                            </div>
+                            <div class="col-3">
+                              <label class="form-check form-check-single form-switch text-end">
+                                <input class="form-check-input" type="checkbox" checked="" name="remove_volumes">
+                              </label>
+                            </div>
+                          </div>
+                          <div class="row">
+                            <div class="col-9">
+                              <label class="row text-start">
+                                <span class="col">Remove Image</span>
+                              </label>
+                            </div>
+                            <div class="col-3">
+                              <label class="form-check form-check-single form-switch text-end">
+                                <input class="form-check-input" type="checkbox" checked="" name="remove_image">
+                              </label>
+                            </div>
+                          </div>
+                          <div class="row">
+                            <div class="col-9">
+                              <label class="row text-start">
+                                <span class="col">Remove Backups</span>
+                              </label>
+                            </div>
+                            <div class="col-3">
+                              <label class="form-check form-check-single form-switch text-end">
+                                <input class="form-check-input" type="checkbox" checked="" name="remove_backups">
+                              </label>
+                            </div>
+                          </div>
+                        </div>
+                      </div>
+                      
+                      <div class="mt-1"> </div>
+                      <div class="text-muted">Enter "Yes" below to remove the container.</div>
+                      <input type="text" class="form-control mb-2" name="confirm">
+
+                      </form>
+
+                    </div>
+                    <div class="modal-footer">
+                      <div class="w-100">
+                        <div class="row">
+                          <div class="col">
+                            <a href="#" class="btn w-100" data-bs-dismiss="modal">
+                              Cancel
+                            </a>
+                          </div>
+                          <div class="col">
+                            <input type="submit" form="uninstall" class="btn btn-danger w-100" value="Uninstall"/>
+                          </div>
+                        </div>
+                      </div>
+                    </div>
+                  </div>
+                </div>
+              </div>
+    
+    
+    <div class="modal modal-blur fade" id="${name}_modal-details" tabindex="-1" role="dialog" aria-hidden="true">
+                <div class="modal-dialog modal-dialog-centered modal-dialog-scrollable" role="document">
+                  <div class="modal-content">
+                    <div class="modal-header">
+                      <h5 class="modal-title">Install ${name}</h5>
+                      <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
+                    </div>
+            
+                    
+                    <div class="modal-body">
+                      
+                    <pre class="text-secondary">note</pre>
+                    
+                      <form action="" id="details_modal" method="POST">
+                      
+                      <div class="row mb-3 align-items-end">
+                        
+                        <div class="col-lg-6">
+                          <label class="form-label">Container Name: </label>
+                          <input type="text" class="form-control" name="service_name" value="${app_name}" hidden/>
+                          <input type="text" class="form-control" name="name" value="${app_name}"/>
+                        </div>
+                        <div class="col-lg-3">
+                          <label class="form-label">Image: </label>
+                          <input type="text" class="form-control" name="image" value="${image}"/>
+                        </div>
+                        <div class="col-lg-3">
+                          <label class="form-label">Restart Policy: </label>
+                          <select class="form-select" name="restart_policy" value="${restart_policy}">
+                            <option value="1">unless-stopped</option>
+                            <option value="2">on-failure</option>
+                            <option value="3">never</option>
+                            <option value="4">always</option>
+                          </select>
+                        </div>
+                      </div>
+            
+                      <label class="form-label">Network Mode</label>
+                        <div class="form-selectgroup-boxes row mb-3">
+                          <div class="col">
+                            <label class="form-selectgroup-item">
+                              <input type="radio" name="report-type" value="1" class="form-selectgroup-input">
+                              <span class="form-selectgroup-label d-flex align-items-center p-3">
+                                <span class="me-3">
+                                  <span class="form-selectgroup-check"></span>
+                                </span>
+                                <span class="form-selectgroup-label-content">
+                                  <span class="form-selectgroup-title strong mb-1">Host Network</span>
+                                  <span class="d-block text-secondary">Same as host. No isolation. ex.127.0.0.1</span>
+                                </span>
+                              </span>
+                            </label>
+                          </div>
+                          <div class="col">
+                            <label class="form-selectgroup-item">
+                              <input type="radio" name="report-type" class="form-selectgroup-input">
+                              <span class="form-selectgroup-label d-flex align-items-center p-3">
+                                <span class="me-3">
+                                  <span class="form-selectgroup-check"></span>
+                                </span>
+                                <span class="form-selectgroup-label-content">
+                                  <span class="form-selectgroup-title strong mb-1">Bridge Network</span>
+                                  <span class="d-block text-secondary">Containers can communicate using names.</span>
+                                </span>
+                              </span>
+                            </label>
+                          </div>
+                          <div class="col">
+                          <label class="form-selectgroup-item">
+                            <input type="radio" name="report-type" class="form-selectgroup-input">
+                            <span class="form-selectgroup-label d-flex align-items-center p-3">
+                              <span class="me-3">
+                                <span class="form-selectgroup-check"></span>
+                              </span>
+                              <span class="form-selectgroup-label-content">
+                                <span class="form-selectgroup-title strong mb-1">Docker Network</span>
+                                <span class="d-block text-secondary">Isolated on the docker network. ex.172.0.34.2</span>
+                              </span>
+                            </span>
+                          </label>
+                        </div>
+                      </div>
+
+
+
+
+            
+                      <div class="accordion" id="${modal}-accordion">
+                        <div class="accordion-item">
+                          <h2 class="accordion-header" id="heading-1">
+                            <button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#collapse-1" aria-expanded="false">
+                              Ports
+                            </button>
+                          </h2>
+                          <div id="collapse-1" class="accordion-collapse collapse" data-bs-parent="#${modal}-accordion">
+                            <div class="accordion-body pt-0">
+            
+
+                              <div class="row mb-1 align-items-end">
+                                <div class="col-auto">
+                                  <input class="form-check-input" name="port_0_check" type="checkbox" ${ports_data[0].check}>
+                                </div>
+                                <div class="col">
+                                  <label class="form-label">External Port</label>
+                                  <input type="text" class="form-control" name="port_0_external" value="${ports_data[0].external}"/>
+                                </div>
+                                <div class="col">
+                                  <label class="form-label">Internal Port</label>
+                                  <input type="text" class="form-control" name="port_0_internal" value="${ports_data[0].internal}"/>
+                                </div>
+                                <div class="col-lg-2">
+                                  <label class="form-label">Protocol</label>
+                                  <select class="form-select" name="port_0_protocol">
+                                    <option value="${ports_data[0].protocol}" selected hidden>${ports_data[0].protocol}</option>
+                                    <option value="tcp">tcp</option>
+                                    <option value="udp">udp</option>
+                                  </select>
+                                </div>
+                              </div>
+            
+                              <div class="row mb-1 align-items-end">
+                                <div class="col-auto">
+                                  <input class="form-check-input" name="port_1_check" type="checkbox" ${ports_data[1].check}>
+                                </div>
+                                <div class="col">
+                                  <input type="text" class="form-control" name="port_1_external" value="${ports_data[1].external}"/>
+                                </div>
+                                <div class="col">
+                                  <input type="text" class="form-control" name="port_1_internal" value="${ports_data[1].internal}"/>
+                                </div>
+                                <div class="col-lg-2">
+                                  <select class="form-select" name="port_1_protocol">
+                                    <option value="${ports_data[1].protocol}" selected hidden>${ports_data[1].protocol}</option>
+                                    <option value="tcp">tcp</option>
+                                    <option value="udp">udp</option>
+                                  </select>
+                                </div>
+                              </div>
+            
+                              <div class="row mb-1 align-items-end">
+                                <div class="col-auto">
+                                  <input class="form-check-input" name="port_2_check" type="checkbox" ${ports_data[2].check}>
+                                </div>
+                                <div class="col">
+                                  <input type="text" class="form-control" name="port_2_external" value="${ports_data[2].external}"/>
+                                </div>
+                                <div class="col">
+                                  <input type="text" class="form-control" name="port_2_internal" value="${ports_data[2].internal}"/>
+                                </div>
+                                <div class="col-lg-2">
+                                  <select class="form-select" name="port_2_protocol">
+                                    <option value="${ports_data[2].protocol}" selected hidden>${ports_data[2].protocol}</option>
+                                    <option value="tcp">tcp</option>
+                                    <option value="udp">udp</option>
+                                  </select>
+                                </div>
+                              </div>
+            
+                              <div class="row mb-1 align-items-end">
+                                <div class="col-auto">
+                                  <input class="form-check-input" name="port_3_check" type="checkbox" ${ports_data[3].check}>
+                                </div>
+                                <div class="col">
+                                  <input type="text" class="form-control" name="port_3_external" value="${ports_data[3].external}"/>
+                                </div>
+                                <div class="col">
+                                  <input type="text" class="form-control" name="port_3_internal" value="${ports_data[3].internal}"/>
+                                </div>
+                                <div class="col-lg-2">
+                                  <select class="form-select" name="port_3_protocol">
+                                    <option value="${ports_data[3].protocol}" selected hidden>${ports_data[3].protocol}</option>
+                                    <option value="tcp">tcp</option>
+                                    <option value="udp">udp</option>
+                                  </select>
+                                </div>
+                              </div>
+            
+                              <div class="row mb-1 align-items-end">
+                                <div class="col-auto">
+                                  <input class="form-check-input" name="port_4_check" type="checkbox" ${ports_data[4].check}>
+                                </div>
+                                <div class="col">
+                                  <input type="text" class="form-control" name="port_4_external" value="${ports_data[4].external}"/>
+                                </div>
+                                <div class="col">
+                                  <input type="text" class="form-control" name="port_4_internal" value="${ports_data[4].internal}"/>
+                                </div>
+                                <div class="col-lg-2">
+                                  <select class="form-select" name="port_4_protocol">
+                                    <option value="${ports_data[4].protocol}" selected hidden>${ports_data[4].protocol}</option>
+                                    <option value="tcp">tcp</option>
+                                    <option value="udp">udp</option>
+                                  </select>
+                                </div>
+                              </div>
+            
+                              <div class="row mb-1 align-items-end">
+                                <div class="col-auto">
+                                  <input class="form-check-input" name="port_5_check" type="checkbox" ${ports_data[5].check}>
+                                </div>
+                                <div class="col">
+                                  <input type="text" class="form-control" name="port_5_external" value="${ports_data[5].external}"/>
+                                </div>
+                                <div class="col">
+                                  <input type="text" class="form-control" name="port_5_internal" value="${ports_data[5].internal}"/>
+                                </div>
+                                <div class="col-lg-2">
+                                  <select class="form-select" name="port_5_protocol">
+                                    <option value="${ports_data[5].protocol}" selected hidden>${ports_data[5].protocol}</option>
+                                    <option value="tcp">tcp</option>
+                                    <option value="udp">udp</option>
+                                  </select>
+                                </div>
+                              </div>
+            
+            
+                            </div>
+                          </div>
+                        </div>
+                        <div class="accordion-item">
+                          <h2 class="accordion-header" id="heading-2">
+                            <button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#collapse-2" aria-expanded="false">
+                              Volumes
+                            </button>
+                          </h2>
+                          <div id="collapse-2" class="accordion-collapse collapse" data-bs-parent="#${modal}-accordion">
+                            <div class="accordion-body pt-0">
+            
+            
+                            <div class="row mb-1 align-items-end">
+                            <div class="col-auto">
+                              <input class="form-check-input" name="volume_0_check" type="checkbox" ${volumes_data[0].check}>
+                            </div>
+                            <div class="col">
+                              <input type="text" class="form-control" name="volume_0_bind" value="${volumes_data[0].bind}"/>
+                            </div>
+                            <div class="col">
+                              <input type="text" class="form-control" name="volume_0_container" value="${volumes_data[0].container}"/>
+                            </div>
+                            <div class="col-lg-2">
+                              <select class="form-select" name="volume_0_readwrite">
+                                <option value="${volumes_data[0].readwrite}" selected hidden>${volumes_data[0].readwrite}</option>
+                                <option value="rw">rw</option>
+                                <option value="ro">ro</option>
+                              </select>
+                            </div>
+                          </div>
+            
+                          <div class="row mb-1 align-items-end">
+                            <div class="col-auto">
+                              <input class="form-check-input" name="volume_1_check" type="checkbox" ${volumes_data[1].check}>
+                            </div>
+                            <div class="col">
+                              <input type="text" class="form-control" name="volume_1_bind" value="${volumes_data[1].bind}"/>
+                            </div>
+                            <div class="col">
+                              <input type="text" class="form-control" name="volume_1_container" value="${volumes_data[1].container}"/>
+                            </div>
+                            <div class="col-lg-2">
+                              <select class="form-select" name="volume_1_readwrite">
+                                <option value="${volumes_data[1].readwrite}" selected hidden>${volumes_data[1].readwrite}</option>
+                                <option value="rw">rw</option>
+                                <option value="ro">ro</option>
+                              </select>
+                            </div>
+                          </div>
+            
+                          <div class="row mb-1 align-items-end">
+                            <div class="col-auto">
+                              <input class="form-check-input" name="volume_2_check" type="checkbox" ${volumes_data[2].check}>
+                            </div>
+                            <div class="col">
+                              <input type="text" class="form-control" name="volume_2_bind" value="${volumes_data[2].bind}"/>
+                            </div>
+                            <div class="col">
+                              <input type="text" class="form-control" name="volume_2_container" value="${volumes_data[2].container}"/>
+                            </div>
+                            <div class="col-lg-2">
+                              <select class="form-select" name="volume_2_readwrite">
+                                <option value="${volumes_data[2].readwrite}" selected hidden>${volumes_data[2].readwrite}</option>
+                                <option value="rw">rw</option>
+                                <option value="ro">ro</option>
+                              </select>
+                            </div>
+                          </div>
+            
+                          <div class="row mb-1 align-items-end">
+                            <div class="col-auto">
+                              <input class="form-check-input" name="volume_3_check" type="checkbox" ${volumes_data[3].check}>
+                            </div>
+                            <div class="col">
+                              <input type="text" class="form-control" name="volume_3_bind" value="${volumes_data[3].bind}"/>
+                            </div>
+                            <div class="col">
+                              <input type="text" class="form-control" name="volume_3_container" value="${volumes_data[3].container}"/>
+                            </div>
+                            <div class="col-lg-2">
+                              <select class="form-select" name="volume_3_readwrite">
+                                <option value="${volumes_data[3].readwrite}" selected hidden>${volumes_data[3].readwrite}</option>
+                                <option value="rw">rw</option>
+                                <option value="ro">ro</option>
+                              </select>
+                            </div>
+                          </div>
+            
+                          <div class="row mb-1 align-items-end">
+                            <div class="col-auto">
+                              <input class="form-check-input" name="volume_4_check" type="checkbox" ${volumes_data[4].check}>
+                            </div>
+                            <div class="col">
+                              <input type="text" class="form-control" name="volume_4_bind" value="${volumes_data[4].bind}"/>
+                            </div>
+                            <div class="col">
+                              <input type="text" class="form-control" name="volume_4_container" value="${volumes_data[4].container}"/>
+                            </div>
+                            <div class="col-lg-2">
+                              <select class="form-select" name="volume_4_readwrite">
+                                <option value="${volumes_data[4].readwrite}" selected hidden>${volumes_data[4].readwrite}</option>
+                                <option value="rw">rw</option>
+                                <option value="ro">ro</option>
+                              </select>
+                            </div>
+                          </div>
+            
+                          <div class="row mb-1 align-items-end">
+                          <div class="col-auto">
+                            <input class="form-check-input" name="volume_5_check" type="checkbox" ${volumes_data[5].check}>
+                          </div>
+                          <div class="col">
+                            <input type="text" class="form-control" name="volume_5_bind" value="${volumes_data[5].bind}"/>
+                          </div>
+                          <div class="col">
+                            <input type="text" class="form-control" name="volume_5_container" value="${volumes_data[5].container}"/>
+                          </div>
+                          <div class="col-lg-2">
+                            <select class="form-select" name="volume_5_readwrite">
+                              <option value="${volumes_data[5].readwrite}" selected hidden>${volumes_data[5].readwrite}</option>
+                              <option value="rw">rw</option>
+                              <option value="ro">ro</option>
+                            </select>
+                          </div>
+                        </div>
+            
+            
+                            </div>
+                          </div>
+                        </div>
+                        <div class="accordion-item">
+                          <h2 class="accordion-header" id="heading-3">
+                            <button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#collapse-3" aria-expanded="false">
+                              Environment Variables
+                            </button>
+                          </h2>
+                          <div id="collapse-3" class="accordion-collapse collapse" data-bs-parent="#${modal}-accordion">
+                            <div class="accordion-body pt-0">
+            
+            
+                              <div class="row mb-1 align-items-end">
+                                <div class="col-auto">
+                                  <input class="form-check-input" type="checkbox" name="env_0_check" ${env_data[0].check}>
+                                </div>
+                                <div class="col">
+                                  <label class="form-label">Variable</label>
+                                  <input type="text" class="form-control" name="env_0_name" value="${env_data[0].name}"/>
+                                </div>
+                                <div class="col">
+                                  <label class="form-label">Value</label>
+                                  <input type="text" class="form-control" name="env_0_default" value="${env_data[0].default}"/>
+                                </div>
+                              </div>
+            
+                              <div class="row mb-1 align-items-end">
+                                <div class="col-auto">
+                                  <input class="form-check-input" type="checkbox" name="env_1_check" ${env_data[1].check}>
+                                </div>
+                                <div class="col">
+                                  <input type="text" class="form-control" name="env_1_name" value="${env_data[1].name}"/>
+                                </div>
+                                <div class="col">
+                                  <input type="text" class="form-control" name="env_1_default" value="${env_data[1].default}"/>
+                                </div>
+                              </div>
+            
+                              <div class="row mb-1 align-items-end">
+                                <div class="col-auto">
+                                  <input class="form-check-input" type="checkbox" name="env_2_check" ${env_data[2].check}>
+                                </div>
+                                <div class="col">
+                                  <input type="text" class="form-control" name="env_2_name" value="${env_data[2].name}"/>
+                                </div>
+                                <div class="col">
+                                  <input type="text" class="form-control" name="env_2_default" value="${env_data[2].default}"/>
+                                </div>
+                              </div>
+            
+                              <div class="row mb-1 align-items-end">
+                                <div class="col-auto">
+                                  <input class="form-check-input" type="checkbox" name="env_3_check" ${env_data[3].check}>
+                                </div>
+                                <div class="col">
+                                  <input type="text" class="form-control" name="env_3_name" value="${env_data[3].name}"/>
+                                </div>
+                                <div class="col">
+                                  <input type="text" class="form-control" name="env_3_default" value="${env_data[3].default}"/>
+                                </div>
+                              </div>
+            
+                              <div class="row mb-1 align-items-end">
+                                <div class="col-auto">
+                                  <input class="form-check-input" type="checkbox" name="env_4_check" ${env_data[4].check}>
+                                </div>
+                                <div class="col">
+                                  <input type="text" class="form-control" name="env_4_name" value="${env_data[4].name}"/>
+                                </div>
+                                <div class="col">
+                                  <input type="text" class="form-control" name="env_4_default" value="${env_data[4].default}"/>
+                                </div>
+                              </div>
+            
+                              <div class="row mb-1 align-items-end">
+                                <div class="col-auto">
+                                  <input class="form-check-input" type="checkbox" name="env_5_check" ${env_data[5].check}>
+                                </div>
+                                <div class="col">
+                                  <input type="text" class="form-control" name="env_5_name" value="${env_data[5].name}"/>
+                                </div>
+                                <div class="col">
+                                  <input type="text" class="form-control" name="env_5_default" value="${env_data[5].default}"/>
+                                </div>
+                              </div>
+            
+                              <div class="row mb-1 align-items-end">
+                                <div class="col-auto">
+                                  <input class="form-check-input" type="checkbox" name="env_6_check" ${env_data[6].check}>
+                                </div>
+                                <div class="col">
+                                  <input type="text" class="form-control" name="env_6_name" value="${env_data[6].name}"/>
+                                </div>
+                                <div class="col">
+                                  <input type="text" class="form-control" name="env_6_default" value="${env_data[6].default}"/>
+                                </div>
+                              </div>
+            
+            
+                              <div class="row mb-1 align-items-end">
+                                <div class="col-auto">
+                                  <input class="form-check-input" type="checkbox" name="env_7_check" ${env_data[7].check}>
+                                </div>
+                                <div class="col">
+                                  <input type="text" class="form-control" name="env_7_name" value="${env_data[7].name}"/>
+                                </div>
+                                <div class="col">
+                                  <input type="text" class="form-control" name="env_7_default" value="${env_data[7].default}"/>
+                                </div>
+                              </div>
+            
+            
+                              <div class="row mb-1 align-items-end">
+                                <div class="col-auto">
+                                  <input class="form-check-input" type="checkbox" name="env_8_check" ${env_data[8].check}>
+                                </div>
+                                <div class="col">
+                                  <input type="text" class="form-control" name="env_8_name" value="${env_data[8].name}"/>
+                                </div>
+                                <div class="col">
+                                  <input type="text" class="form-control" name="env_8_default" value="${env_data[8].default}"/>
+                                </div>
+                              </div>
+            
+            
+                              <div class="row mb-1 align-items-end">
+                                <div class="col-auto">
+                                  <input class="form-check-input" type="checkbox" name="env_9_check" ${env_data[9].check}>
+                                </div>
+                                <div class="col">
+                                  <input type="text" class="form-control" name="env_9_name" value="${env_data[9].name}"/>
+                                </div>
+                                <div class="col">
+                                  <input type="text" class="form-control" name="env_9_default" value="${env_data[9].default}"/>
+                                </div>
+                              </div>
+            
+            
+                              <div class="row mb-1 align-items-end">
+                                <div class="col-auto">
+                                  <input class="form-check-input" type="checkbox" name="env_10_check" ${env_data[10].check}>
+                                </div>
+                                <div class="col">
+                                  <input type="text" class="form-control" name="env_10_name" value="${env_data[10].name}"/>
+                                </div>
+                                <div class="col">
+                                  <input type="text" class="form-control" name="env_10_default" value="${env_data[10].default}"/>
+                                </div>
+                              </div>
+            
+            
+                              <div class="row mb-1 align-items-end">
+                                <div class="col-auto">
+                                  <input class="form-check-input" type="checkbox" name="env_11_check" ${env_data[11].check}>
+                                </div>
+                                <div class="col">
+                                  <input type="text" class="form-control" name="env_11_name" value="${env_data[11].name}"/>
+                                </div>
+                                <div class="col">
+                                  <input type="text" class="form-control" name="env_11_default" value="${env_data[11].default}"/>
+                                </div>
+                              </div>
+            
+            
+            
+            
+                            </div>
+                          </div>
+                        </div>
+                        <div class="accordion-item">
+                          <h2 class="accordion-header" id="heading-4">
+                            <button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#collapse-4" aria-expanded="false">
+                              Labels
+                            </button>
+                          </h2>
+                          <div id="collapse-4" class="accordion-collapse collapse" data-bs-parent="#${modal}-accordion">
+                            <div class="accordion-body pt-0">
+            
+            
+                            <div class="row mb-1 align-items-end">
+                              <div class="col-auto">
+                                <input class="form-check-input" type="checkbox" name="label_0_check" ${label_data[0].check}>
+                              </div>
+                              <div class="col">
+                                <label class="form-label">Variable</label>
+                                <input type="text" class="form-control" name="label_0_name" value="${label_data[0].name}"/>
+                              </div>
+                              <div class="col">
+                                <label class="form-label">Value</label>
+                                <input type="text" class="form-control" name="label_0_value" value="${label_data[0].value}"/>
+                              </div>
+                            </div>
+            
+                            <div class="row mb-1 align-items-end">
+                              <div class="col-auto">
+                                <input class="form-check-input" type="checkbox" name="label_1_check" ${label_data[1].check}>
+                              </div>
+                              <div class="col">
+                                <input type="text" class="form-control" name="label_1_name" value="${label_data[1].name}"/>
+                              </div>
+                              <div class="col">
+                                <input type="text" class="form-control" name="label_1_value" value="${label_data[1].value}"/>
+                              </div>
+                            </div>
+            
+                              
+                            <div class="row mb-1 align-items-end">
+                              <div class="col-auto">
+                                <input class="form-check-input" type="checkbox" name="label_2_check" ${label_data[2].check}>
+                              </div>
+                              <div class="col">
+                                <input type="text" class="form-control" name="label_2_name" value="${label_data[2].name}"/>
+                              </div>
+                              <div class="col">
+                                <input type="text" class="form-control" name="label_2_value" value="${label_data[2].value}"/>
+                              </div>
+                            </div>
+            
+                            <div class="row mb-1 align-items-end">
+                              <div class="col-auto">
+                                <input class="form-check-input" type="checkbox" name="label_3_check" ${label_data[3].check}>
+                              </div>
+                              <div class="col">
+                                <input type="text" class="form-control" name="label_3_name" value="${label_data[3].name}"/>
+                              </div>
+                              <div class="col">
+                                <input type="text" class="form-control" name="label_3_value" value="${label_data[3].value}"/>
+                              </div>
+                            </div>
+            
+                            <div class="row mb-1 align-items-end">
+                              <div class="col-auto">
+                                <input class="form-check-input" type="checkbox" name="label_4_check" ${label_data[4].check}>
+                              </div>
+                              <div class="col">
+                                <input type="text" class="form-control" name="label_4_name" value="${label_data[4].name}"/>
+                              </div>
+                              <div class="col">
+                                <input type="text" class="form-control" name="label_4_value" value="${label_data[4].value}"/>
+                              </div>
+                            </div>
+
+                            <div class="row mb-1 align-items-end">
+                              <div class="col-auto">
+                                <input class="form-check-input" type="checkbox" name="label_5_check" ${label_data[5].check}>
+                              </div>
+                              <div class="col">
+                                <input type="text" class="form-control" name="label_5_name" value="${label_data[5].name}"/>
+                              </div>
+                              <div class="col">
+                                <input type="text" class="form-control" name="label_5_value" value="${label_data[5].value}"/>
+                              </div>
+                            </div>
+
+                            <div class="row mb-1 align-items-end">
+                              <div class="col-auto">
+                                <input class="form-check-input" type="checkbox" name="label_6_check" ${label_data[6].check}>
+                              </div>
+                              <div class="col">
+                                <input type="text" class="form-control" name="label_6_name" value="${label_data[6].name}"/>
+                              </div>
+                              <div class="col">
+                                <input type="text" class="form-control" name="label_6_value" value="${label_data[6].value}"/>
+                              </div>
+                            </div>
+
+                            <div class="row mb-1 align-items-end">
+                              <div class="col-auto">
+                                <input class="form-check-input" type="checkbox" name="label_7_check" ${label_data[7].check}>
+                              </div>
+                              <div class="col">
+                                <input type="text" class="form-control" name="label_7_name" value="${label_data[7].name}"/>
+                              </div>
+                              <div class="col">
+                                <input type="text" class="form-control" name="label_7_value" value="${label_data[7].value}"/>
+                              </div>
+                            </div>
+
+                            <div class="row mb-1 align-items-end">
+                              <div class="col-auto">
+                                <input class="form-check-input" type="checkbox" name="label_8_check" ${label_data[8].check}>
+                              </div>
+                              <div class="col">
+                                <input type="text" class="form-control" name="label_8_name" value="${label_data[8].name}"/>
+                              </div>
+                              <div class="col">
+                                <input type="text" class="form-control" name="label_8_value" value="${label_data[8].value}"/>
+                              </div>
+                            </div>
+
+                            <div class="row mb-1 align-items-end">
+                              <div class="col-auto">
+                                <input class="form-check-input" type="checkbox" name="label_9_check" ${label_data[9].check}>
+                              </div>
+                              <div class="col">
+                                <input type="text" class="form-control" name="label_9_name" value="${label_data[9].name}"/>
+                              </div>
+                              <div class="col">
+                                <input type="text" class="form-control" name="label_9_value" value="${label_data[9].value}"/>
+                              </div>
+                            </div>
+
+                            <div class="row mb-1 align-items-end">
+                              <div class="col-auto">
+                                <input class="form-check-input" type="checkbox" name="label_10_check" ${label_data[10].check}>
+                              </div>
+                              <div class="col">
+                                <input type="text" class="form-control" name="label_10_name" value="${label_data[10].name}"/>
+                              </div>
+                              <div class="col">
+                                <input type="text" class="form-control" name="label_10_value" value="${label_data[10].value}"/>
+                              </div>
+                            </div>
+
+                            <div class="row mb-1 align-items-end">
+                              <div class="col-auto">
+                                <input class="form-check-input" type="checkbox" name="label_11_check" ${label_data[11].check}>
+                              </div>
+                              <div class="col">
+                                <input type="text" class="form-control" name="label_11_name" value="${label_data[11].name}"/>
+                              </div>
+                              <div class="col">
+                                <input type="text" class="form-control" name="label_11_value" value="${label_data[11].value}"/>
+                              </div>
+                            </div>
+            
+            
+                            </div>
+                          </div>
+                        </div>
+
+
+                        <div class="accordion-item">
+                          <h2 class="accordion-header" id="heading-5">
+                            <button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#collapse-5" aria-expanded="false">
+                              Extras
+                            </button>
+                          </h2>
+                          <div id="collapse-5" class="accordion-collapse collapse" data-bs-parent="#${modal}-accordion">
+                            <div class="accordion-body pt-0">
+            
+
+                              <div class="row mb-1 align-items-end">
+                                <div class="col-auto">
+                                  <input class="form-check-input" name="port_0_check" type="checkbox" ${ports_data[0].check}>
+                                </div>
+                                <div class="col">
+                                  <label class="form-label">External Port</label>
+                                  <input type="text" class="form-control" name="port_0_external" value="${ports_data[0].external}"/>
+                                </div>
+                                <div class="col">
+                                  <label class="form-label">Internal Port</label>
+                                  <input type="text" class="form-control" name="port_0_internal" value="${ports_data[0].internal}"/>
+                                </div>
+                                <div class="col-lg-2">
+                                  <label class="form-label">Protocol</label>
+                                  <select class="form-select" name="port_0_protocol">
+                                    <option value="${ports_data[0].protocol}" selected hidden>${ports_data[0].protocol}</option>
+                                    <option value="tcp">tcp</option>
+                                    <option value="udp">udp</option>
+                                  </select>
+                                </div>
+                              </div>
+            
+                              <div class="row mb-1 align-items-end">
+                                <div class="col-auto">
+                                  <input class="form-check-input" name="port_1_check" type="checkbox" ${ports_data[1].check}>
+                                </div>
+                                <div class="col">
+                                  <input type="text" class="form-control" name="port_1_external" value="${ports_data[1].external}"/>
+                                </div>
+                                <div class="col">
+                                  <input type="text" class="form-control" name="port_1_internal" value="${ports_data[1].internal}"/>
+                                </div>
+                                <div class="col-lg-2">
+                                  <select class="form-select" name="port_1_protocol">
+                                    <option value="${ports_data[1].protocol}" selected hidden>${ports_data[1].protocol}</option>
+                                    <option value="tcp">tcp</option>
+                                    <option value="udp">udp</option>
+                                  </select>
+                                </div>
+                              </div>
+            
+                              <div class="row mb-1 align-items-end">
+                                <div class="col-auto">
+                                  <input class="form-check-input" name="port_2_check" type="checkbox" ${ports_data[2].check}>
+                                </div>
+                                <div class="col">
+                                  <input type="text" class="form-control" name="port_2_external" value="${ports_data[2].external}"/>
+                                </div>
+                                <div class="col">
+                                  <input type="text" class="form-control" name="port_2_internal" value="${ports_data[2].internal}"/>
+                                </div>
+                                <div class="col-lg-2">
+                                  <select class="form-select" name="port_2_protocol">
+                                    <option value="${ports_data[2].protocol}" selected hidden>${ports_data[2].protocol}</option>
+                                    <option value="tcp">tcp</option>
+                                    <option value="udp">udp</option>
+                                  </select>
+                                </div>
+                              </div>
+            
+                              <div class="row mb-1 align-items-end">
+                                <div class="col-auto">
+                                  <input class="form-check-input" name="port_3_check" type="checkbox" ${ports_data[3].check}>
+                                </div>
+                                <div class="col">
+                                  <input type="text" class="form-control" name="port_3_external" value="${ports_data[3].external}"/>
+                                </div>
+                                <div class="col">
+                                  <input type="text" class="form-control" name="port_3_internal" value="${ports_data[3].internal}"/>
+                                </div>
+                                <div class="col-lg-2">
+                                  <select class="form-select" name="port_3_protocol">
+                                    <option value="${ports_data[3].protocol}" selected hidden>${ports_data[3].protocol}</option>
+                                    <option value="tcp">tcp</option>
+                                    <option value="udp">udp</option>
+                                  </select>
+                                </div>
+                              </div>
+            
+                              <div class="row mb-1 align-items-end">
+                                <div class="col-auto">
+                                  <input class="form-check-input" name="port_4_check" type="checkbox" ${ports_data[4].check}>
+                                </div>
+                                <div class="col">
+                                  <input type="text" class="form-control" name="port_4_external" value="${ports_data[4].external}"/>
+                                </div>
+                                <div class="col">
+                                  <input type="text" class="form-control" name="port_4_internal" value="${ports_data[4].internal}"/>
+                                </div>
+                                <div class="col-lg-2">
+                                  <select class="form-select" name="port_4_protocol">
+                                    <option value="${ports_data[4].protocol}" selected hidden>${ports_data[4].protocol}</option>
+                                    <option value="tcp">tcp</option>
+                                    <option value="udp">udp</option>
+                                  </select>
+                                </div>
+                              </div>
+            
+                              <div class="row mb-1 align-items-end">
+                                <div class="col-auto">
+                                  <input class="form-check-input" name="" type="checkbox" >
+                                </div>
+                                <div class="col">
+                                  <label class="form-label">External Port</label>
+                                  <input type="text" class="form-control" name="" value=""/>
+                                </div>
+                                <div class="col">
+                                  <label class="form-label">Internal Port</label>
+                                  <input type="text" class="form-control" name="" value=""/>
+                                </div>
+                                <div class="col-lg-2">
+                                  <label class="form-label">Protocol</label>
+                                  <select class="form-select" name="">
+                                    <option value="" selected hidden></option>
+                                    <option value="tcp">tcp</option>
+                                    <option value="udp">udp</option>
+                                  </select>
+                                </div>
+                              </div>
+            
+            
+                            </div>
+                          </div>
+                        </div>
+
+
+
+                      </div>
+            
+            
+                      
+                      </form>
+                    </div>
+                    <div class="modal-footer">
+                      <button type="button" class="btn me-auto" data-bs-dismiss="modal">Close</button>
+                      <input type="submit" form="${form_id}_install" class="btn btn-success" value="Install"/>
+                    </div>
+                  </div>
+                </div>
+              </div>`;
+}
+
+module.exports = { dashCard };

+ 18 - 0
components/siteCard.js

@@ -0,0 +1,18 @@
+function siteCard(type, domain, host, port, id) {
+  
+  let site = `<tr>`
+  site += `<td><input class="form-check-input m-0 align-middle" name="select${id}" value="${domain}" type="checkbox" aria-label="Select invoice"></td>`
+  site += `<td><span class="text-muted">${id}</span></td>`
+  site += `<td><a href="https://${domain}" class="text-reset" tabindex="-1" target="_blank">${domain}</a></td>`
+  site += `<td>${type}</td>`
+  site += `<td>${host}</td>`
+  site += `<td>${port}</td>`
+  site += `<td><span class="badge bg-success me-1"></span> Enabled</td>`
+  site += `<td><span class="badge bg-success me-1"></span> Enabled</td>`
+  site += `<td class="text-end"><a class="btn" href="#"> Edit </a></td>`
+  site += `</tr>`
+
+  return site;
+}
+
+module.exports = { siteCard };

+ 22 - 0
controllers/account.js

@@ -0,0 +1,22 @@
+const User = require('../database/UserModel');
+
+exports.Account = async function(req, res) {
+    if (req.session.user) {
+        // Get the user.
+        let user = await User.findOne({ where: { UUID: req.session.UUID }});
+        // Render the home page
+        res.render("pages/account", {
+            first_name: user.first_name,
+            last_name: user.last_name,
+            name: user.first_name + ' ' + user.last_name,
+            id: user.id,
+            email: user.email,
+            role: user.role,
+            avatar: user.avatar,
+            isLoggedIn: true
+        });
+    } else {
+        // Redirect to the login page
+        res.redirect("/login");
+    }
+}

+ 151 - 0
controllers/app_actions.js

@@ -0,0 +1,151 @@
+const { writeFileSync, mkdirSync, appendFileSync } = require("fs");
+const { exec } = require("child_process");
+const { dashCard } = require('../components/dashCard');
+
+
+
+exports.Install = async function (req, res) {
+    
+    if (req.session.role == "admin") {
+
+        console.log(req.body);
+        
+        let { service_name, name, image, command_check, command, net_mode, restart_policy } = req.body;
+
+        let { port_0_check, port_1_check, port_2_check, port_3_check, port_4_check, port_5_check } = req.body;
+        let { volume_0_check, volume_1_check, volume_2_check, volume_3_check, volume_4_check, volume_5_check } = req.body;
+        let { env_0_check, env_1_check, env_2_check, env_3_check, env_4_check, env_5_check, env_6_check, env_7_check, env_8_check, env_9_check, env_10_check, env_11_check } = req.body;
+        let { label_0_check, label_1_check, label_2_check, label_3_check, label_4_check, label_5_check, label_6_check, label_7_check, label_8_check, label_9_check, label_10_check, label_11_check } = req.body;
+
+
+        let installCard = dashCard(req.body.name, req.body.service_name, '', 'installing', req.body.image, 0, 0);
+        req.app.locals.install = installCard;
+
+        let compose_file = `version: '3'`;
+        compose_file += `\nservices:`
+        compose_file += `\n  ${service_name}:`
+        compose_file += `\n    container_name: ${name}`;
+        compose_file += `\n    image: ${image}`;
+
+        // Command
+        if (command_check == 'on') {
+            compose_file += `\n    command: ${command}`
+        }
+
+        // Network mode
+        if (net_mode == 'host') {
+            compose_file += `\n    network_mode: 'host'`
+        }
+        else if (net_mode != 'host' && net_mode != 'docker') {
+            compose_file += `\n    network_mode: '${net_mode}'`
+        }
+        
+        // Restart policy
+        if (restart_policy != '') {
+            compose_file += `\n    restart: ${restart_policy}`
+        }
+
+        // Ports
+        if ((port_0_check == 'on' || port_1_check == 'on' || port_2_check == 'on' || port_3_check == 'on' || port_4_check == 'on' || port_5_check == 'on') && (net_mode != 'host')) {
+            compose_file += `\n    ports:`
+
+                for (let i = 0; i < 6; i++) {
+                    if (req.body[`port_${i}_check`] == 'on') {
+                        compose_file += `\n      - ${req.body[`port_${i}_external`]}:${req.body[`port_${i}_internal`]}/${req.body[`port_${i}_protocol`]}`
+                    }
+                }
+        }
+
+        // Volumes
+        if (volume_0_check == 'on' || volume_1_check == 'on' || volume_2_check == 'on' || volume_3_check == 'on' || volume_4_check == 'on' || volume_5_check == 'on') {
+            compose_file += `\n    volumes:`
+
+            for (let i = 0; i < 6; i++) {
+                if (req.body[`volume_${i}_check`] == 'on') {
+                    compose_file += `\n      - ${req.body[`volume_${i}_bind`]}:${req.body[`volume_${i}_container`]}:${req.body[`volume_${i}_readwrite`]}`
+                }
+            }
+        }
+
+        // Environment variables
+        if (env_0_check == 'on' || env_1_check == 'on' || env_2_check == 'on' || env_3_check == 'on' || env_4_check == 'on' || env_5_check == 'on' || env_6_check == 'on' || env_7_check == 'on' || env_8_check == 'on' || env_9_check == 'on' || env_10_check == 'on' || env_11_check == 'on') {
+            compose_file += `\n    environment:`
+        }
+        for (let i = 0; i < 12; i++) {
+            if (req.body[`env_${i}_check`] == 'on') {
+                compose_file += `\n      - ${req.body[`env_${i}_name`]}=${req.body[`env_${i}_default`]}`
+
+            }
+        }
+
+        // Add labels
+        if (label_0_check == 'on' || label_1_check == 'on' || label_2_check == 'on' || label_3_check == 'on' || label_4_check == 'on' || label_5_check == 'on' || label_6_check == 'on' || label_7_check == 'on' || label_8_check == 'on' || label_9_check == 'on' || label_10_check == 'on' || label_11_check == 'on') {
+            compose_file += `\n    labels:`
+        }   
+        for (let i = 0; i < 12; i++) {
+            if (req.body[`label_${i}_check`] == 'on') {
+                compose_file += `\n      - ${req.body[`label_${i}_name`]}=${req.body[`label_${i}_value`]}`
+            }
+        }
+
+
+        // Add hardware acceleration to the docker-compose file if one of the environment variables has the label DRINODE
+        if (env_0_check == 'on' || env_1_check == 'on' || env_2_check == 'on' || env_3_check == 'on' || env_4_check == 'on' || env_5_check == 'on' || env_6_check == 'on' || env_7_check == 'on' || env_8_check == 'on' || env_9_check == 'on' || env_10_check == 'on' || env_11_check == 'on') {
+            for (let i = 0; i < 12; i++) {
+                if (req.body[`env_${i}_check`] == 'on') {
+                    if (req.body[`env_${i}_name`] == 'DRINODE') {
+                        compose_file += `\n    deploy:`
+                        compose_file += `\n      resources:`
+                        compose_file += `\n        reservations:`
+                        compose_file += `\n          devices:`
+                        compose_file += `\n          - driver: nvidia`
+                        compose_file += `\n            count: 1`
+                        compose_file += `\n            capabilities: [gpu]`
+                    }
+                }
+            }
+        }
+
+        try {   
+            mkdirSync(`./appdata/${name}`, { recursive: true });
+            writeFileSync(`./appdata/${name}/docker-compose.yml`, compose_file, function (err) { console.log(err) });
+
+            exec(`docker compose -f ./appdata/${name}/docker-compose.yml up -d`, (error, stdout, stderr) => {
+                if (error) { console.error(`error: ${error.message}`); return; }
+                if (stderr) { console.error(`stderr: ${stderr}`); return; }
+                console.log(`stdout:\n${stdout}`);
+            });
+        } catch { console.log('error creating directory or compose file') }
+
+
+        // Redirect to the home page
+        res.redirect("/");
+    } else {
+        // Redirect to the login page
+        res.redirect("/login");
+    }
+}
+
+
+
+exports.Uninstall = async function (req, res) {
+    
+    if (req.session.role == "admin") {
+
+
+        if (req.body.confirm == 'Yes') {
+            exec(`docker compose -f ./appdata/${req.body.service_name}/docker-compose.yml down`, (error, stdout, stderr) => {
+                if (error) { console.error(`error: ${error.message}`); return; }
+                if (stderr) { console.error(`stderr: ${stderr}`); return; }
+                console.log(`stdout:\n${stdout}`);
+            });
+        }
+
+
+        // Redirect to the home page
+        res.redirect("/");
+    } else {
+        // Redirect to the login page
+        res.redirect("/login");
+    }
+}

+ 129 - 0
controllers/apps.js

@@ -0,0 +1,129 @@
+const User = require('../database/UserModel');
+const { appCard } = require('../components/appCard')
+const templates_json = require('../templates.json');
+let templates = templates_json.templates;
+
+// sort templates alphabetically
+templates = templates.sort((a, b) => {
+    if (a.name < b.name) {
+      return -1;
+    }
+  });
+  
+
+exports.Apps = async function(req, res) {
+    if (req.session.role == "admin") {
+
+        // Get the user.
+        let user = await User.findOne({ where: { UUID: req.session.UUID }});
+
+        let page = Number(req.query.page) || 1;
+        let list_start = (page - 1) * 28;
+        let list_end = (page * 28);
+        let last_page = Math.ceil(templates.length / 28);
+
+        // generate values for prev and next buttons so that i can go back and forth between pages
+        let prev = '/apps?page=' + (page - 1);
+        let next = '/apps?page=' + (page + 1);
+        if (page == 1) {
+            prev = '/apps?page=' + (page);
+        }
+        if (page == last_page) {
+            next = '/apps?page=' + (page);
+        }
+
+        let apps_list = '';
+        for (let i = list_start; i < list_end && i < templates.length; i++) {
+            let app_card = appCard(templates[i]);
+            apps_list += app_card;
+        }
+        
+        // Render the home page
+        res.render("pages/apps", {
+            name: user.first_name + ' ' + user.last_name,
+            role: user.role,
+            avatar: user.avatar,
+            isLoggedIn: true,
+            list_start: list_start + 1,
+            list_end: list_end,
+            app_count: templates.length,
+            prev: prev,
+            next: next,
+            apps_list: apps_list
+        });
+    } else {
+        // Redirect to the login page
+        res.redirect("/login");
+    }
+}
+
+
+
+exports.processApps = async function(req, res) {
+    if (req.session.role == "admin") {
+
+        // Get the user.
+        let user = await User.findOne({ where: { UUID: req.session.UUID }});
+
+        let page = Number(req.query.page) || 1;
+        let list_start = (page - 1) * 28;
+        let list_end = (page * 28);
+        let last_page = Math.ceil(templates.length / 28);
+
+        // generate values for prev and next buttons so that i can go back and forth between pages
+        let prev = '/apps?page=' + (page - 1);
+        let next = '/apps?page=' + (page + 1);
+        if (page == 1) {
+            prev = '/apps?page=' + (page);
+        }
+        if (page == last_page) {
+            next = '/apps?page=' + (page);
+        }
+
+        let apps_list = '';
+        let search_results = [];
+
+        let search = req.body.search;
+
+        // split value of search into an array of words
+        search = search.split(' ');
+
+        try {console.log(search[0]);} catch (error) {}
+        try {console.log(search[1]);} catch (error) {}
+        try {console.log(search[2]);} catch (error) {}
+
+        function searchTemplates(word) {
+
+            for (let i = 0; i < templates.length; i++) {
+                if ((templates[i].description.includes(word)) || (templates[i].name.includes(word)) || (templates[i].title.includes(word))) {
+                    search_results.push(templates[i]);
+                }
+            }
+            // console.log(search_results);
+        }
+        
+        searchTemplates(search);
+
+        for (let i = 0; i < search_results.length; i++) {
+            let app_card = appCard(search_results[i]);
+            apps_list += app_card;
+        }
+        
+        // Render the home page
+        res.render("pages/apps", {
+            name: user.first_name + ' ' + user.last_name,
+            role: user.role,
+            avatar: user.avatar,
+            isLoggedIn: true,
+            list_start: list_start + 1,
+            list_end: list_end,
+            app_count: templates.length,
+            prev: prev,
+            next: next,
+            apps_list: apps_list
+        });
+    } else {
+        // Redirect to the login page
+        res.redirect("/login");
+    }
+}

+ 22 - 0
controllers/dashboard.js

@@ -0,0 +1,22 @@
+const User = require('../database/UserModel');
+
+
+exports.Dashboard = async function (req, res) {
+
+    if (req.session.role == "admin") {
+
+        // get user data with matching UUID from sqlite database
+        let user = await User.findOne({ where: { UUID: req.session.UUID } });
+
+        // Render the home page
+        res.render("pages/dashboard", {
+            name: user.first_name + ' ' + user.last_name,
+            role: user.role,
+            avatar: user.avatar,
+            isLoggedIn: true
+        });
+    } else {
+        // Redirect to the login page
+        res.redirect("/login");
+    }
+}

+ 60 - 0
controllers/login.js

@@ -0,0 +1,60 @@
+const User = require('../database/UserModel');
+const bcrypt = require('bcrypt');
+
+
+exports.Login = function(req,res){
+
+     // check whether we have a session
+     if(req.session.user){
+        // Redirect to log out.
+        res.redirect("/logout");
+    }else{
+        // Render the login page.
+        res.render("pages/login",{
+            "error":"",
+            "isLoggedIn": false
+        });
+    }
+}
+
+exports.processLogin = async function(req,res){
+    // get the data.
+    let email = req.body.email;
+    let password = req.body.password;
+    // check if we have data.
+    if(email && password){
+        // check if the user exists.
+        let existingUser = await User.findOne({ where: {email:email}});
+        if(existingUser){
+            // compare the password.
+            let match = await bcrypt.compare(password,existingUser.password);
+            if(match){
+                // set the session.
+                req.session.user = existingUser.username;
+                req.session.UUID = existingUser.UUID;
+                req.session.role = existingUser.role;
+
+                // Redirect to the home page.
+                res.redirect("/");
+            }else{
+                // return an error.
+                res.render("pages/login",{
+                    "error":"Invalid password",
+                    isLoggedIn: false
+                });
+            }
+        }else{
+            // return an error.
+            res.render("pages/login",{
+                "error":"User with that email does not exist.",
+                isLoggedIn:false
+            });
+        }
+    }else{
+        res.status(400);
+        res.render("pages/login",{
+            "error":"Please fill in all the fields.",
+            isLoggedIn:false
+        });
+    }
+}

+ 6 - 0
controllers/logout.js

@@ -0,0 +1,6 @@
+exports.Logout = function(req,res){
+    // clear the session.
+    req.session.destroy();
+    // Redirect to the login page.
+    res.redirect("/login");    
+}

+ 85 - 0
controllers/register.js

@@ -0,0 +1,85 @@
+const User = require('../database/UserModel');
+const bcrypt = require('bcrypt');
+
+
+exports.Register = function(req,res){
+    // Check whether we have a session
+    if(req.session.user){
+        // Redirect to log out.
+        res.redirect("/logout");
+    } else {
+        // Render the signup page.
+        res.render("pages/register",{
+            "error":"",
+            isLoggedIn:false
+        });
+    }
+}
+
+exports.processRegister = async function(req,res){
+
+    // Get the data.
+    let { first_name, last_name, username, email, password, avatar, tos } = req.body;
+    let role = "user";
+
+    // Check the data.
+    if(first_name && last_name && email && password && username && tos){
+
+        // Check if there is an existing user with that username.
+        let existingUser = await User.findOne({ where: {username:username}});
+
+        let adminUser = await User.findOne({ where: {role:"admin"}});
+
+        if(!existingUser){
+            // hash the password.
+            let hashedPassword = bcrypt.hashSync(password,10);
+
+            if(!adminUser){
+                console.log('Creating admin User');
+                role = "admin";
+            }
+
+            try {
+                const user = await User.create({ 
+                    first_name: first_name,
+                    last_name: last_name,
+                    username: username,
+                    email: email,
+                    password: hashedPassword,
+                    role: role,
+                    group: 'all',
+                    avatar: `<img src="./static/avatars/${avatar}">`
+                 });
+
+                console.log(`Created: ${user.first_name}`);
+
+                // set the session.
+                req.session.user = user.username;
+                req.session.UUID = user.UUID;
+                req.session.role = user.role;
+                // Redirect to the home page.
+                res.redirect("/");
+            }
+            catch (err) {
+                // return an error.
+                res.render("pages/register",{
+                    "error":"Something went wrong when creating account.",
+                    isLoggedIn:false
+                });
+            }
+
+        }else{
+            // return an error.
+            res.render("pages/register",{
+                "error":"User with that username already exists.",
+                isLoggedIn:false
+            });
+        }
+    }else{
+        // Redirect to the signup page.
+        res.render("pages/register",{
+            "error":"Please fill in all the fields and accept TOS.",
+            isLoggedIn:false
+        });
+    }
+}

+ 21 - 0
controllers/settings.js

@@ -0,0 +1,21 @@
+const User = require('../database/UserModel.js');
+
+exports.Settings = async function(req, res) {
+    if (req.session.role == "admin") {
+        // Get the user.
+        let user = await User.findOne({ where: { UUID: req.session.UUID }});
+
+        
+
+        // Render the home page
+        res.render("pages/settings", {
+            name: user.first_name + ' ' + user.last_name,
+            role: user.role,
+            avatar: user.avatar,
+            isLoggedIn: true
+        });
+    } else {
+        // Redirect to the login page
+        res.redirect("/login");
+    }
+}

+ 197 - 0
controllers/site_actions.js

@@ -0,0 +1,197 @@
+const { readFileSync, writeFileSync, appendFileSync, readdirSync } = require('fs');
+const { execSync } = require("child_process");
+const { siteCard } = require('../components/siteCard');
+
+
+exports.AddSite = async function (req, res) {
+
+    let { domain, type, host, port } = req.body;
+
+    if ((req.session.role == "admin") && ( domain && type && host && port)) {
+
+
+        let { domain, type, host, port } = req.body;
+
+        // build caddyfile
+        let caddyfile = `${domain} {`
+        caddyfile += `\n\t${type} ${host}:${port}`
+        caddyfile += `\n\theader {`
+        caddyfile += `\n\t\tStrict-Transport-Security "max-age=31536000; includeSubDomains; preload"`
+        caddyfile += `\n\t}`
+        caddyfile += `\n}`
+
+        // save caddyfile
+        writeFileSync(`/home/docker/caddy/sites/${domain}.Caddyfile`, caddyfile, function (err) { console.log(err) });
+        
+
+        // format caddyfile
+        execSync(`docker exec caddy caddy fmt --overwrite /etc/caddy/sites/${domain}.Caddyfile`, (err, stdout, stderr) => {
+            if (err) { console.error(`error: ${err.message}`); return; }
+            if (stderr) { console.error(`stderr: ${stderr}`); return; }
+            if (stdout) { console.log(`stdout:\n${stdout}`); return; }
+            console.log(`Formatted ${domain}.Caddyfile`)
+        });
+        
+
+        let site = siteCard(type, domain, host, port, 0);
+
+        // reload caddy config to enable new site
+        execSync(`docker exec caddy caddy reload --config /etc/caddy/Caddyfile`, (err, stdout, stderr) => {
+            if (err) { console.error(`error: ${err.message}`); return; }
+            if (stderr) { console.error(`stderr: ${stderr}`); return; }
+            if (stdout) { console.log(`stdout:\n${stdout}`); return; }
+            console.log(`reloaded caddy config`)
+        });
+
+        // append the site to site_list.ejs
+        appendFileSync('./views/partials/site_list.ejs', site, function (err) { console.log(err) });
+
+        res.redirect("/");
+    } else {
+        // Redirect
+        console.log('not admin or missing info')
+        res.redirect("/");
+    }
+}
+
+
+exports.RemoveSite = async function (req, res) {
+
+    if (req.session.role == "admin") {
+
+
+        for (const [key, value] of Object.entries(req.body)) {
+            console.log(`${key}: ${value}`);
+            execSync(`rm /home/docker/caddy/sites/${value}.Caddyfile`, (err, stdout, stderr) => {
+                if (err) { console.error(`error: ${err.message}`); return; }
+                if (stderr) { console.error(`stderr: ${stderr}`); return; }
+                console.log(`removed ${value}.Caddyfile`);
+            });
+        }
+
+        
+        // reload caddy config to disable sites
+        try {
+            execSync(`docker exec caddy caddy reload --config /etc/caddy/Caddyfile`, (err, stdout, stderr) => {
+            if (err) { console.error(`error: ${err.message}`); return; }
+            if (stderr) { console.error(`stderr: ${stderr}`); return; }
+            console.log(`reloaded caddy config`)
+        }); } catch (error) { console.log("No sites to reload") }
+
+        
+        console.log('Removed Site(s)')
+
+        res.redirect("/refreshsites");
+    } else {
+        res.redirect("/");
+    }
+    
+}
+
+
+exports.RefreshSites = async function (req, res) {
+
+    let domain, type, host, port;
+    let id = 1;
+
+    if (req.session.role == "admin") {
+
+
+        // Clear site_list.ejs
+        writeFileSync('./views/partials/site_list.ejs', '', function (err) {
+            if (err) {
+                console.log(err);
+            } else {
+                console.log('site_list.ejs has been cleared');
+            }
+        });
+        
+
+        // check if /home/docker/caddy/sites/ contains any .json files, then delete them
+        try {
+            let files = readdirSync('/home/docker/caddy/sites/');
+            files.forEach(file => {
+                if (file.includes(".json")) {
+                    execSync(`rm /home/docker/caddy/sites/${file}`, (err, stdout, stderr) => {
+                        if (err) { console.error(`error: ${err.message}`); return; }
+                        if (stderr) { console.error(`stderr: ${stderr}`); return; }
+                        console.log(`removed ${file}`);
+                    });
+                }
+            });
+        } catch (error) { console.log("No .json files to delete") }
+   
+        // get list of Caddyfiles
+        let sites = readdirSync('/home/docker/caddy/sites/');
+
+        sites.forEach(site_name => {
+
+            // convert the caddyfile of each site to json
+            execSync(`docker exec caddy caddy adapt --config /etc/caddy/sites/${site_name} --pretty >> /home/docker/caddy/sites/${site_name}.json`, (err, stdout, stderr) => {
+                if (err) { console.error(`error: ${err.message}`); return; }
+                if (stderr) { console.error(`stderr: ${stderr}`); return; }
+                console.log(`stdout:\n${stdout}`);
+            });
+            
+            // read the json file
+            let site_file = readFileSync(`/home/docker/caddy/sites/${site_name}.json`, 'utf8');
+
+            // fix whitespace and parse the json file
+            site_file = site_file.replace(/        /g, "  ");
+            site_file = JSON.parse(site_file);
+
+            // get the domain, type, host, and port from the json file
+            try { domain = site_file.apps.http.servers.srv0.routes[0].match[0].host[0] } catch (error) { console.log("No Domain") }
+            try { type = site_file.apps.http.servers.srv0.routes[0].handle[0].routes[0].handle[1].handler } catch (error) { console.log("No Type") }
+            try { host = site_file.apps.http.servers.srv0.routes[0].handle[0].routes[0].handle[1].upstreams[0].dial.split(":")[0] } catch (error) { console.log("Not Localhost") }
+            try { port = site_file.apps.http.servers.srv0.routes[0].handle[0].routes[0].handle[1].upstreams[0].dial.split(":")[1] } catch (error) { console.log("No Port") }
+
+            // build the site card
+            let site = siteCard(type, domain, host, port, id);
+
+            // append the site card to site_list.ejs
+            appendFileSync('./views/partials/site_list.ejs', site, function (err) { console.log(err) });
+            
+            id++;
+
+        });
+        
+        res.redirect("/");
+    } else {
+        // Redirect to the login page
+        res.redirect("/");
+    }
+}
+
+
+
+exports.DisableSite = async function (req, res) {
+
+    if (req.session.role == "admin") {
+
+        
+        console.log(req.body)
+        console.log('Disable Site')
+
+        res.redirect("/");
+    } else {
+        // Redirect to the login page
+        res.redirect("/login");
+    }
+}
+
+
+exports.EnableSite = async function (req, res) {
+
+    if (req.session.role == "admin") {
+
+        
+        console.log(req.body)
+        console.log('Enable Site')
+
+        res.redirect("/");
+    } else {
+        // Redirect to the login page
+        res.redirect("/login");
+    }
+}

+ 54 - 0
controllers/users.js

@@ -0,0 +1,54 @@
+const User = require('../database/UserModel');
+
+exports.Users = async function(req, res) {
+    if (req.session.role == "admin") {
+
+        // Get the user.
+        let user = await User.findOne({ where: { UUID: req.session.UUID }});
+        let user_list = `
+        <tr>
+            <th><input class="form-check-input" type="checkbox"></th>
+            <th>ID</th>
+            <th>Avatar</th>
+            <th>Name</th>
+            <th>Username</th>
+            <th>Email</th>
+            <th>UUID</th>
+            <th>Role</th>
+            <th>Status</th>
+            <th>Actions</th>
+        </tr>`
+
+        let users = await User.findAll();
+        users.forEach((account) => {
+            full_name = account.first_name + ' ' + account.last_name;
+            user_info = `
+            <tr>
+                <td><input class="form-check-input" type="checkbox"></td>
+                <td>${user.id}</td>
+                <td><span class="avatar me-2">${account.avatar}</span></td>
+                <td>${full_name}</td>
+                <td>${account.username}</td>
+                <td>${account.email}</td>
+                <td>${account.UUID}</td>
+                <td>${account.role}</td>
+                <td><span class="badge badge-outline text-green">Active</span></td>
+                <td><a href="#" class="btn">Edit</a></td>
+            </tr>`
+
+            user_list += user_info;
+        });
+
+        // Render the home page
+        res.render("pages/users", {
+            name: user.first_name + ' ' + user.last_name,
+            role: user.role,
+            avatar: user.avatar,
+            isLoggedIn: true,
+            user_list: user_list
+        });
+    } else {
+        // Redirect to the login page
+        res.redirect("/login");
+    }
+}

+ 63 - 0
database/UserModel.js

@@ -0,0 +1,63 @@
+const { Sequelize, DataTypes } = require('sequelize');
+
+const sequelize = new Sequelize({
+  dialect: 'sqlite',
+  storage: 'database/db.sqlite',
+  logging: false
+});
+
+
+const User = sequelize.define('User', {
+  // Model attributes are defined here
+  id: {
+    type: DataTypes.INTEGER,
+    autoIncrement: true,
+    primaryKey: true
+  },
+  first_name: {
+    type: DataTypes.STRING,
+    allowNull: false
+  },
+  last_name: {
+    type: DataTypes.STRING
+    // allowNull defaults to true
+  },
+  username: {
+    type: DataTypes.STRING
+    // allowNull defaults to true
+  },
+  email: {
+    type: DataTypes.STRING
+    // allowNull defaults to true
+  },
+  password: {
+    type: DataTypes.STRING,
+    // allowNull: false
+  },
+  role: {
+    type: DataTypes.STRING
+    // allowNull defaults to true
+  },
+  group: {
+    type: DataTypes.STRING
+    // allowNull defaults to true
+  },
+  avatar: {
+    type: DataTypes.STRING
+    // allowNull defaults to true
+  },
+  UUID: {
+    type: DataTypes.UUID,
+    defaultValue: DataTypes.UUIDV4
+  }
+});
+
+async function syncModel() {
+  await sequelize.sync();
+  console.log('User model synced');
+}
+
+syncModel();
+
+
+module.exports = User;

+ 23 - 0
package.json

@@ -0,0 +1,23 @@
+{
+  "name": "dweeb-ui",
+  "version": "1.0.0",
+  "main": "app.js",
+  "keywords": [],
+  "author": "",
+  "license": "ISC",
+  "dependencies": {
+    "bcrypt": "^5.1.0",
+    "child_process": "^1.0.2",
+    "connect-redis": "^6.1.3",
+    "dockerode": "^3.3.5",
+    "ejs": "^3.1.9",
+    "express": "^4.18.2",
+    "express-session": "^1.17.3",
+    "redis": "^4.6.5",
+    "sequelize": "^6.32.1",
+    "socket.io": "^4.6.1",
+    "sqlite3": "^5.1.6",
+    "systeminformation": "^5.17.12"
+  },
+  "description": ""
+}

File diff suppressed because it is too large
+ 8 - 0
public/css/demo.min.css


+ 120 - 0
public/css/meters.css

@@ -0,0 +1,120 @@
+
+
+.meter {
+    box-sizing: content-box;
+    height: 15px; /* Can be anything */
+    margin-left: auto;
+    margin-right: auto;
+    position: relative;
+    background: #a7a7a752;
+    border-radius: 25px;
+    padding: 3px;
+    box-shadow: inset 0 -1px 1px rgba(255, 255, 255, 0.3);
+  }
+
+  .meter > span {
+    display: block;
+    height: 100%;
+    border-top-right-radius: 20px;
+    border-bottom-right-radius: 20px;
+    border-top-left-radius: 20px;
+    border-bottom-left-radius: 20px;
+    background-color: rgb(43, 194, 83);
+    background-image: linear-gradient(
+      center bottom,
+      rgb(43, 194, 83) 37%,
+      rgb(84, 240, 84) 69%
+    );
+    box-shadow: inset 0 2px 9px rgba(255, 255, 255, 0.3),
+      inset 0 -2px 6px rgba(0, 0, 0, 0.4);
+    position: relative;
+    overflow: hidden;
+  }
+
+  .meter > span:after,
+  .animate > span > span {
+    content: "";
+    position: absolute;
+    top: 0;
+    left: 0;
+    bottom: 0;
+    right: 0;
+    background-image: linear-gradient(
+      -45deg,
+      rgba(255, 255, 255, 0.2) 25%,
+      transparent 25%,
+      transparent 50%,
+      rgba(255, 255, 255, 0.2) 50%,
+      rgba(255, 255, 255, 0.2) 75%,
+      transparent 75%,
+      transparent
+    );
+    z-index: 1;
+    background-size: 50px 50px;
+    animation: move 2s linear infinite;
+    border-top-right-radius: 8px;
+    border-bottom-right-radius: 8px;
+    border-top-left-radius: 20px;
+    border-bottom-left-radius: 20px;
+    overflow: hidden;
+  }
+  
+  .animate > span:after {
+    display: none;
+  }
+  
+  @keyframes move {
+    0% {
+      background-position: 0 0;
+    }
+    100% {
+      background-position: 50px 50px;
+    }
+  }
+  
+  .orange > span {
+    background-image: linear-gradient(#f1a165, #f36d0a);
+  }
+  
+  .red > span {
+    background-image: linear-gradient(#f0a3a3, #f42323);
+  }
+
+  .blue > span {
+    background-image: linear-gradient(#2478f5, #22017e);
+  }
+  
+  .nostripes > span > span,
+  .nostripes > span::after {
+    background-image: 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;
+    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);
+
+}

+ 28661 - 0
public/css/tabler.min.css

@@ -0,0 +1,28661 @@
+/*!
+* Tabler v1.0.0-beta19 (https://tabler.io)
+* @version 1.0.0-beta19
+* @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";
+
+:root,
+[data-bs-theme=light] {
+  --tblr-blue: #206bc4;
+  --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: #206bc4;
+  --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: #206bc4;
+  --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: #206bc4;
+  --tblr-primary-rgb: 32, 107, 196;
+  --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: 32, 107, 196;
+  --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: 32, 107, 196;
+  --tblr-primary-text-emphasis: #0d2b4e;
+  --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: #d2e1f3;
+  --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: #a6c4e7;
+  --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-link-color: #206bc4;
+  --tblr-link-color-rgb: 32, 107, 196;
+  --tblr-link-decoration: none;
+  --tblr-link-hover-color: #1a569d;
+  --tblr-link-hover-color-rgb: 26, 86, 157;
+  --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: 0 0.5rem 1rem rgba(0, 0, 0, 0.15);
+  --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(32, 107, 196, 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] {
+  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: #79a6dc;
+  --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: #061527;
+  --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: #134076;
+  --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-link-color: #79a6dc;
+  --tblr-link-hover-color: #94b8e3;
+  --tblr-link-color-rgb: 121, 166, 220;
+  --tblr-link-hover-color-rgb: 148, 184, 227;
+  --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
+}
+
+*,
+::after,
+::before {
+  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: transparent
+}
+
+.hr,
+hr {
+  margin: 2rem 0;
+  color: inherit;
+  border: 0;
+  border-top: var(--tblr-border-width) solid;
+  opacity: .16
+}
+
+.h1,
+.h2,
+.h3,
+.h4,
+.h5,
+.h6,
+h1,
+h2,
+h3,
+h4,
+h5,
+h6 {
+  margin-top: 0;
+  margin-bottom: var(--tblr-spacer);
+  font-weight: var(--tblr-font-weight-bold);
+  line-height: 1.2;
+  color: var(--tblr-heading-color, inherit)
+}
+
+.h1,
+h1 {
+  font-size: 1.5rem
+}
+
+.h2,
+h2 {
+  font-size: 1.25rem
+}
+
+.h3,
+h3 {
+  font-size: 1rem
+}
+
+.h4,
+h4 {
+  font-size: .875rem
+}
+
+.h5,
+h5 {
+  font-size: .75rem
+}
+
+.h6,
+h6 {
+  font-size: .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
+}
+
+dl,
+ol,
+ul {
+  margin-top: 0;
+  margin-bottom: 1rem
+}
+
+ol ol,
+ol ul,
+ul ol,
+ul ul {
+  margin-bottom: 0
+}
+
+dt {
+  font-weight: 600
+}
+
+dd {
+  margin-bottom: .5rem;
+  margin-left: 0
+}
+
+blockquote {
+  margin: 0 0 1rem
+}
+
+b,
+strong {
+  font-weight: bolder
+}
+
+.small,
+small {
+  font-size: 85.714285%
+}
+
+.mark,
+mark {
+  padding: .1875em;
+  background-color: var(--tblr-highlight-bg)
+}
+
+sub,
+sup {
+  position: relative;
+  font-size: .75em;
+  line-height: 0;
+  vertical-align: baseline
+}
+
+sub {
+  bottom: -.25em
+}
+
+sup {
+  top: -.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
+}
+
+code,
+kbd,
+pre,
+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: .25rem .5rem;
+  font-size: var(--tblr-font-size-h5);
+  color: var(--tblr-muted-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: .75rem;
+  padding-bottom: .75rem;
+  color: var(--tblr-secondary-color);
+  text-align: left
+}
+
+th {
+  text-align: inherit;
+  text-align: -webkit-match-parent
+}
+
+tbody,
+td,
+tfoot,
+th,
+thead,
+tr {
+  border-color: inherit;
+  border-style: solid;
+  border-width: 0
+}
+
+label {
+  display: inline-block
+}
+
+button {
+  border-radius: 0
+}
+
+button:focus:not(:focus-visible) {
+  outline: 0
+}
+
+button,
+input,
+optgroup,
+select,
+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
+}
+
+[type=button],
+[type=reset],
+[type=submit],
+button {
+  -webkit-appearance: button
+}
+
+[type=button]:not(:disabled),
+[type=reset]:not(:disabled),
+[type=submit]:not(:disabled),
+button: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: .5rem;
+  font-size: 1.5rem;
+  line-height: inherit
+}
+
+legend+* {
+  clear: left
+}
+
+::-webkit-datetime-edit-day-field,
+::-webkit-datetime-edit-fields-wrapper,
+::-webkit-datetime-edit-hour-field,
+::-webkit-datetime-edit-minute,
+::-webkit-datetime-edit-month-field,
+::-webkit-datetime-edit-text,
+::-webkit-datetime-edit-year-field {
+  padding: 0
+}
+
+::-webkit-inner-spin-button {
+  height: auto
+}
+
+[type=search] {
+  outline-offset: -2px;
+  -webkit-appearance: textfield
+}
+
+::-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: .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: .5rem
+}
+
+.initialism {
+  font-size: 85.714285%;
+  text-transform: uppercase
+}
+
+.blockquote {
+  margin-bottom: 1rem;
+  font-size: .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: .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: .5rem;
+  line-height: 1
+}
+
+.figure-caption {
+  font-size: 85.714285%;
+  color: var(--tblr-secondary-color)
+}
+
+.container,
+.container-fluid,
+.container-lg,
+.container-md,
+.container-sm,
+.container-xl,
+.container-xxl {
+  --tblr-gutter-x: calc(var(--tblr-page-padding) * 2);
+  --tblr-gutter-y: 0;
+  width: 100%;
+  padding-right: calc(var(--tblr-gutter-x) * .5);
+  padding-left: calc(var(--tblr-gutter-x) * .5);
+  margin-right: auto;
+  margin-left: auto
+}
+
+@media (min-width:576px) {
+
+  .container,
+  .container-sm {
+    max-width: 540px
+  }
+}
+
+@media (min-width:768px) {
+
+  .container,
+  .container-md,
+  .container-sm {
+    max-width: 720px
+  }
+}
+
+@media (min-width:992px) {
+
+  .container,
+  .container-lg,
+  .container-md,
+  .container-sm {
+    max-width: 960px
+  }
+}
+
+@media (min-width:1200px) {
+
+  .container,
+  .container-lg,
+  .container-md,
+  .container-sm,
+  .container-xl {
+    max-width: 1140px
+  }
+}
+
+@media (min-width:1400px) {
+
+  .container,
+  .container-lg,
+  .container-md,
+  .container-sm,
+  .container-xl,
+  .container-xxl {
+    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(-.5 * var(--tblr-gutter-x));
+  margin-left: calc(-.5 * var(--tblr-gutter-x))
+}
+
+.row>* {
+  flex-shrink: 0;
+  width: 100%;
+  max-width: 100%;
+  padding-right: calc(var(--tblr-gutter-x) * .5);
+  padding-left: calc(var(--tblr-gutter-x) * .5);
+  margin-top: calc(var(--tblr-gutter-y) * .7);
+}
+
+.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
+  }
+}
+
+.markdown>table,
+.table {
+  --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;
+  color: var(--tblr-table-color);
+  vertical-align: top;
+  border-color: var(--tblr-table-border-color)
+}
+
+.markdown>table>:not(caption)>*>*,
+.table>:not(caption)>*>* {
+  padding: .75rem .75rem;
+  background-color: var(--tblr-table-bg);
+  border-bottom-width: var(--tblr-border-width);
+  box-shadow: inset 0 0 0 9999px var(--tblr-table-accent-bg)
+}
+
+.markdown>table>tbody,
+.table>tbody {
+  vertical-align: inherit
+}
+
+.markdown>table>thead,
+.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: .25rem .25rem
+}
+
+.markdown>table>:not(caption)>*,
+.table-bordered>:not(caption)>* {
+  border-width: var(--tblr-border-width) 0
+}
+
+.markdown>table>:not(caption)>*>*,
+.table-bordered>: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-accent-bg: var(--tblr-table-striped-bg);
+  color: var(--tblr-table-striped-color)
+}
+
+.table-striped-columns>:not(caption)>tr>:nth-child(even) {
+  --tblr-table-accent-bg: var(--tblr-table-striped-bg);
+  color: var(--tblr-table-striped-color)
+}
+
+.table-active {
+  --tblr-table-accent-bg: var(--tblr-table-active-bg);
+  color: var(--tblr-table-active-color)
+}
+
+.table-hover>tbody>tr:hover>* {
+  --tblr-table-accent-bg: var(--tblr-table-hover-bg);
+  color: var(--tblr-table-hover-color)
+}
+
+.table-primary {
+  --tblr-table-color: #182433;
+  --tblr-table-bg: #d2e1f3;
+  --tblr-table-border-color: #bfcee0;
+  --tblr-table-striped-bg: #c9d8e9;
+  --tblr-table-striped-color: #182433;
+  --tblr-table-active-bg: #bfcee0;
+  --tblr-table-active-color: #fcfdfe;
+  --tblr-table-hover-bg: #c4d3e5;
+  --tblr-table-hover-color: #182433;
+  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: .5rem;
+  font-size: .875rem;
+  font-weight: var(--tblr-font-weight-medium)
+}
+
+.col-form-label {
+  padding-top: calc(.4375rem + var(--tblr-border-width));
+  padding-bottom: calc(.4375rem + 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(.5rem + var(--tblr-border-width));
+  padding-bottom: calc(.5rem + var(--tblr-border-width));
+  font-size: 1.25rem
+}
+
+.col-form-label-sm {
+  padding-top: calc(.125rem + var(--tblr-border-width));
+  padding-bottom: calc(.125rem + var(--tblr-border-width));
+  font-size: .75rem
+}
+
+.form-text {
+  margin-top: .25rem;
+  font-size: 85.714285%;
+  color: var(--tblr-secondary-color)
+}
+
+.form-control {
+  display: block;
+  width: 100%;
+  padding: .4375rem .75rem;
+  font-family: var(--tblr-font-sans-serif);
+  font-size: .875rem;
+  font-weight: 400;
+  line-height: 1.4285714286;
+  color: inherit;
+  background-color: var(--tblr-bg-forms);
+  background-clip: padding-box;
+  border: var(--tblr-border-width) solid var(--tblr-border-color);
+  -webkit-appearance: none;
+  -moz-appearance: none;
+  appearance: none;
+  border-radius: var(--tblr-border-radius);
+  box-shadow: 0 0 transparent;
+  transition: border-color .15s ease-in-out, box-shadow .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: inherit;
+  background-color: var(--tblr-bg-forms);
+  border-color: #90b5e2;
+  outline: 0;
+  box-shadow: 0 0 transparent, 0 0 0 .25rem rgba(32, 107, 196, .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: .4375rem .75rem;
+  margin: -.4375rem -.75rem;
+  -webkit-margin-end: .75rem;
+  margin-inline-end: .75rem;
+  color: inherit;
+  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 .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out;
+  transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out
+}
+
+.form-control::file-selector-button {
+  padding: .4375rem .75rem;
+  margin: -.4375rem -.75rem;
+  -webkit-margin-end: .75rem;
+  margin-inline-end: .75rem;
+  color: inherit;
+  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 .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .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: .4375rem 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-lg,
+.form-control-plaintext.form-control-sm {
+  padding-right: 0;
+  padding-left: 0
+}
+
+.form-control-sm {
+  min-height: calc(1.4285714286em + .25rem + calc(var(--tblr-border-width) * 2));
+  padding: .125rem .25rem;
+  font-size: .75rem;
+  border-radius: var(--tblr-border-radius-sm)
+}
+
+.form-control-sm::-webkit-file-upload-button {
+  padding: .125rem .25rem;
+  margin: -.125rem -.25rem;
+  -webkit-margin-end: .25rem;
+  margin-inline-end: .25rem
+}
+
+.form-control-sm::file-selector-button {
+  padding: .125rem .25rem;
+  margin: -.125rem -.25rem;
+  -webkit-margin-end: .25rem;
+  margin-inline-end: .25rem
+}
+
+.form-control-lg {
+  min-height: calc(1.4285714286em + 1rem + calc(var(--tblr-border-width) * 2));
+  padding: .5rem .75rem;
+  font-size: 1.25rem;
+  border-radius: var(--tblr-border-radius-lg)
+}
+
+.form-control-lg::-webkit-file-upload-button {
+  padding: .5rem .75rem;
+  margin: -.5rem -.75rem;
+  -webkit-margin-end: .75rem;
+  margin-inline-end: .75rem
+}
+
+.form-control-lg::file-selector-button {
+  padding: .5rem .75rem;
+  margin: -.5rem -.75rem;
+  -webkit-margin-end: .75rem;
+  margin-inline-end: .75rem
+}
+
+textarea.form-control {
+  min-height: calc(1.4285714286em + .875rem + calc(var(--tblr-border-width) * 2))
+}
+
+textarea.form-control-sm {
+  min-height: calc(1.4285714286em + .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 + .875rem + calc(var(--tblr-border-width) * 2));
+  padding: .4375rem
+}
+
+.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 + .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: .4375rem 2.25rem .4375rem .75rem;
+  font-family: var(--tblr-font-sans-serif);
+  font-size: .875rem;
+  font-weight: 400;
+  line-height: 1.4285714286;
+  color: inherit;
+  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 .75rem center;
+  background-size: 16px 12px;
+  border: var(--tblr-border-width) solid var(--tblr-border-color);
+  border-radius: var(--tblr-border-radius);
+  box-shadow: 0 0 transparent;
+  transition: border-color .15s ease-in-out, box-shadow .15s ease-in-out;
+  -webkit-appearance: none;
+  -moz-appearance: none;
+  appearance: none
+}
+
+@media (prefers-reduced-motion:reduce) {
+  .form-select {
+    transition: none
+  }
+}
+
+.form-select:focus {
+  border-color: #90b5e2;
+  outline: 0;
+  box-shadow: 0 0 transparent, 0 0 0 .25rem rgba(32, 107, 196, .25)
+}
+
+.form-select[multiple],
+.form-select[size]:not([size="1"]) {
+  padding-right: .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 inherit
+}
+
+.form-select-sm {
+  padding-top: .125rem;
+  padding-bottom: .125rem;
+  padding-left: .25rem;
+  font-size: .75rem;
+  border-radius: var(--tblr-border-radius-sm)
+}
+
+.form-select-lg {
+  padding-top: .5rem;
+  padding-bottom: .5rem;
+  padding-left: .75rem;
+  font-size: 1.25rem;
+  border-radius: var(--tblr-border-radius-lg)
+}
+
+[data-bs-theme=dark] .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: 1.5rem;
+  margin-bottom: .5rem
+}
+
+.form-check .form-check-input {
+  float: left;
+  margin-left: -1.5rem
+}
+
+.form-check-reverse {
+  padding-right: 1.5rem;
+  padding-left: 0;
+  text-align: right
+}
+
+.form-check-reverse .form-check-input {
+  float: right;
+  margin-right: -1.5rem;
+  margin-left: 0
+}
+
+.form-check-input {
+  --tblr-form-check-bg: var(--tblr-bg-forms);
+  width: 1rem;
+  height: 1rem;
+  margin-top: .2142857143rem;
+  vertical-align: top;
+  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-appearance: none;
+  -moz-appearance: none;
+  appearance: none;
+  -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: #90b5e2;
+  outline: 0;
+  box-shadow: 0 0 0 .25rem rgba(32, 107, 196, .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: .5
+}
+
+.form-check-input:disabled~.form-check-label,
+.form-check-input[disabled]~.form-check-label {
+  cursor: default;
+  opacity: .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 .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='%2390b5e2'/%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: .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;
+  background-color: transparent;
+  -webkit-appearance: none;
+  -moz-appearance: none;
+  appearance: none
+}
+
+.form-range:focus {
+  outline: 0
+}
+
+.form-range:focus::-webkit-slider-thumb {
+  box-shadow: 0 0 0 1px #f6f8fb, 0 0 0 .25rem rgba(32, 107, 196, .25)
+}
+
+.form-range:focus::-moz-range-thumb {
+  box-shadow: 0 0 0 1px #f6f8fb, 0 0 0 .25rem rgba(32, 107, 196, .25)
+}
+
+.form-range::-moz-focus-outer {
+  border: 0
+}
+
+.form-range::-webkit-slider-thumb {
+  width: 1rem;
+  height: 1rem;
+  margin-top: -.375rem;
+  background-color: var(--tblr-primary);
+  border: 2px var(--tblr-border-style) #fff;
+  border-radius: 1rem;
+  box-shadow: 0 .1rem .25rem rgba(0, 0, 0, .1);
+  -webkit-transition: background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out;
+  transition: background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out;
+  -webkit-appearance: none;
+  appearance: none
+}
+
+@media (prefers-reduced-motion:reduce) {
+  .form-range::-webkit-slider-thumb {
+    -webkit-transition: none;
+    transition: none
+  }
+}
+
+.form-range::-webkit-slider-thumb:active {
+  background-color: #bcd3ed
+}
+
+.form-range::-webkit-slider-runnable-track {
+  width: 100%;
+  height: .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;
+  background-color: var(--tblr-primary);
+  border: 2px var(--tblr-border-style) #fff;
+  border-radius: 1rem;
+  box-shadow: 0 .1rem .25rem rgba(0, 0, 0, .1);
+  -moz-transition: background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out;
+  transition: background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out;
+  -moz-appearance: none;
+  appearance: none
+}
+
+@media (prefers-reduced-motion:reduce) {
+  .form-range::-moz-range-thumb {
+    -moz-transition: none;
+    transition: none
+  }
+}
+
+.form-range::-moz-range-thumb:active {
+  background-color: #bcd3ed
+}
+
+.form-range::-moz-range-track {
+  width: 100%;
+  height: .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));
+  line-height: 1.25
+}
+
+.form-floating>label {
+  position: absolute;
+  top: 0;
+  left: 0;
+  z-index: 2;
+  height: 100%;
+  padding: 1rem .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 .1s ease-in-out, transform .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 .75rem
+}
+
+.form-floating>.form-control-plaintext::-webkit-input-placeholder,
+.form-floating>.form-control::-webkit-input-placeholder {
+  color: transparent
+}
+
+.form-floating>.form-control-plaintext:-ms-input-placeholder,
+.form-floating>.form-control:-ms-input-placeholder {
+  color: transparent
+}
+
+.form-floating>.form-control-plaintext::-ms-input-placeholder,
+.form-floating>.form-control::-ms-input-placeholder {
+  color: transparent
+}
+
+.form-floating>.form-control-plaintext::placeholder,
+.form-floating>.form-control::placeholder {
+  color: transparent
+}
+
+.form-floating>.form-control-plaintext:not(:-ms-input-placeholder),
+.form-floating>.form-control:not(:-ms-input-placeholder) {
+  padding-top: 1.625rem;
+  padding-bottom: .625rem
+}
+
+.form-floating>.form-control-plaintext:focus,
+.form-floating>.form-control-plaintext:not(:placeholder-shown),
+.form-floating>.form-control:focus,
+.form-floating>.form-control:not(:placeholder-shown) {
+  padding-top: 1.625rem;
+  padding-bottom: .625rem
+}
+
+.form-floating>.form-control-plaintext:-webkit-autofill,
+.form-floating>.form-control:-webkit-autofill {
+  padding-top: 1.625rem;
+  padding-bottom: .625rem
+}
+
+.form-floating>.form-select {
+  padding-top: 1.625rem;
+  padding-bottom: .625rem
+}
+
+.form-floating>.form-control:not(:-ms-input-placeholder)~label {
+  color: rgba(var(--tblr-body-color-rgb), .65);
+  transform: scale(.85) translateY(-.5rem) translateX(.15rem)
+}
+
+.form-floating>.form-control-plaintext~label,
+.form-floating>.form-control:focus~label,
+.form-floating>.form-control:not(:placeholder-shown)~label,
+.form-floating>.form-select~label {
+  color: rgba(var(--tblr-body-color-rgb), .65);
+  transform: scale(.85) translateY(-.5rem) translateX(.15rem)
+}
+
+.form-floating>.form-control:not(:-ms-input-placeholder)~label::after {
+  position: absolute;
+  inset: 1rem .375rem;
+  z-index: -1;
+  height: 1.5em;
+  content: "";
+  background-color: var(--tblr-bg-forms);
+  border-radius: var(--tblr-border-radius)
+}
+
+.form-floating>.form-control-plaintext~label::after,
+.form-floating>.form-control:focus~label::after,
+.form-floating>.form-control:not(:placeholder-shown)~label::after,
+.form-floating>.form-select~label::after {
+  position: absolute;
+  inset: 1rem .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), .65);
+  transform: scale(.85) translateY(-.5rem) translateX(.15rem)
+}
+
+.form-floating>.form-control-plaintext~label {
+  border-width: var(--tblr-border-width) 0
+}
+
+.form-floating>:disabled~label {
+  color: #667382
+}
+
+.form-floating>: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-floating,
+.input-group>.form-select {
+  position: relative;
+  flex: 1 1 auto;
+  width: 1%;
+  min-width: 0
+}
+
+.input-group>.form-control:focus,
+.input-group>.form-floating:focus-within,
+.input-group>.form-select:focus {
+  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: .4375rem .75rem;
+  font-size: .875rem;
+  font-weight: 400;
+  line-height: 1.4285714286;
+  color: var(--tblr-muted);
+  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>.btn,
+.input-group-lg>.form-control,
+.input-group-lg>.form-select,
+.input-group-lg>.input-group-text {
+  padding: .5rem .75rem;
+  font-size: 1.25rem;
+  border-radius: var(--tblr-border-radius-lg)
+}
+
+.input-group-sm>.btn,
+.input-group-sm>.form-control,
+.input-group-sm>.form-select,
+.input-group-sm>.input-group-text {
+  padding: .125rem .25rem;
+  font-size: .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)>.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,
+.input-group:not(.has-validation)>:not(:last-child):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating) {
+  border-top-right-radius: 0;
+  border-bottom-right-radius: 0
+}
+
+.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,
+.input-group.has-validation>:nth-last-child(n+3):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating) {
+  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: .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: .1rem;
+  font-size: .765625rem;
+  color: #fff;
+  background-color: var(--tblr-success);
+  border-radius: var(--tblr-border-radius)
+}
+
+.is-valid~.valid-feedback,
+.is-valid~.valid-tooltip,
+.was-validated :valid~.valid-feedback,
+.was-validated :valid~.valid-tooltip {
+  display: block
+}
+
+.form-control.is-valid,
+.was-validated .form-control:valid {
+  border-color: var(--tblr-form-valid-border-color);
+  padding-right: calc(1.4285714286em + .875rem);
+  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(.3571428572em + .21875rem) center;
+  background-size: calc(.7142857143em + .4375rem) calc(.7142857143em + .4375rem)
+}
+
+.form-control.is-valid:focus,
+.was-validated .form-control:valid:focus {
+  border-color: var(--tblr-form-valid-border-color);
+  box-shadow: 0 0 0 .25rem rgba(var(--tblr-success-rgb), .25)
+}
+
+.was-validated textarea.form-control:valid,
+textarea.form-control.is-valid {
+  padding-right: calc(1.4285714286em + .875rem);
+  background-position: top calc(.3571428572em + .21875rem) right calc(.3571428572em + .21875rem)
+}
+
+.form-select.is-valid,
+.was-validated .form-select:valid {
+  border-color: var(--tblr-form-valid-border-color)
+}
+
+.form-select.is-valid:not([multiple]):not([size]),
+.form-select.is-valid:not([multiple])[size="1"],
+.was-validated .form-select:valid:not([multiple]):not([size]),
+.was-validated .form-select: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 .75rem center, center right 2.25rem;
+  background-size: 16px 12px, calc(.7142857143em + .4375rem) calc(.7142857143em + .4375rem)
+}
+
+.form-select.is-valid:focus,
+.was-validated .form-select:valid:focus {
+  border-color: var(--tblr-form-valid-border-color);
+  box-shadow: 0 0 0 .25rem rgba(var(--tblr-success-rgb), .25)
+}
+
+.form-control-color.is-valid,
+.was-validated .form-control-color:valid {
+  width: calc(3rem + calc(1.4285714286em + .875rem))
+}
+
+.form-check-input.is-valid,
+.was-validated .form-check-input:valid {
+  border-color: var(--tblr-form-valid-border-color)
+}
+
+.form-check-input.is-valid:checked,
+.was-validated .form-check-input:valid:checked {
+  background-color: var(--tblr-form-valid-color)
+}
+
+.form-check-input.is-valid:focus,
+.was-validated .form-check-input:valid:focus {
+  box-shadow: 0 0 0 .25rem rgba(var(--tblr-success-rgb), .25)
+}
+
+.form-check-input.is-valid~.form-check-label,
+.was-validated .form-check-input:valid~.form-check-label {
+  color: var(--tblr-form-valid-color)
+}
+
+.form-check-inline .form-check-input~.valid-feedback {
+  margin-left: .5em
+}
+
+.input-group>.form-control:not(:focus).is-valid,
+.input-group>.form-floating:not(:focus-within).is-valid,
+.input-group>.form-select:not(:focus).is-valid,
+.was-validated .input-group>.form-control:not(:focus):valid,
+.was-validated .input-group>.form-floating:not(:focus-within):valid,
+.was-validated .input-group>.form-select:not(:focus):valid {
+  z-index: 3
+}
+
+.invalid-feedback {
+  display: none;
+  width: 100%;
+  margin-top: .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: .1rem;
+  font-size: .765625rem;
+  color: #fff;
+  background-color: var(--tblr-danger);
+  border-radius: var(--tblr-border-radius)
+}
+
+.is-invalid~.invalid-feedback,
+.is-invalid~.invalid-tooltip,
+.was-validated :invalid~.invalid-feedback,
+.was-validated :invalid~.invalid-tooltip {
+  display: block
+}
+
+.form-control.is-invalid,
+.was-validated .form-control:invalid {
+  border-color: var(--tblr-form-invalid-border-color);
+  padding-right: calc(1.4285714286em + .875rem);
+  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(.3571428572em + .21875rem) center;
+  background-size: calc(.7142857143em + .4375rem) calc(.7142857143em + .4375rem)
+}
+
+.form-control.is-invalid:focus,
+.was-validated .form-control:invalid:focus {
+  border-color: var(--tblr-form-invalid-border-color);
+  box-shadow: 0 0 0 .25rem rgba(var(--tblr-danger-rgb), .25)
+}
+
+.was-validated textarea.form-control:invalid,
+textarea.form-control.is-invalid {
+  padding-right: calc(1.4285714286em + .875rem);
+  background-position: top calc(.3571428572em + .21875rem) right calc(.3571428572em + .21875rem)
+}
+
+.form-select.is-invalid,
+.was-validated .form-select:invalid {
+  border-color: var(--tblr-form-invalid-border-color)
+}
+
+.form-select.is-invalid:not([multiple]):not([size]),
+.form-select.is-invalid:not([multiple])[size="1"],
+.was-validated .form-select:invalid:not([multiple]):not([size]),
+.was-validated .form-select: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 .75rem center, center right 2.25rem;
+  background-size: 16px 12px, calc(.7142857143em + .4375rem) calc(.7142857143em + .4375rem)
+}
+
+.form-select.is-invalid:focus,
+.was-validated .form-select:invalid:focus {
+  border-color: var(--tblr-form-invalid-border-color);
+  box-shadow: 0 0 0 .25rem rgba(var(--tblr-danger-rgb), .25)
+}
+
+.form-control-color.is-invalid,
+.was-validated .form-control-color:invalid {
+  width: calc(3rem + calc(1.4285714286em + .875rem))
+}
+
+.form-check-input.is-invalid,
+.was-validated .form-check-input:invalid {
+  border-color: var(--tblr-form-invalid-border-color)
+}
+
+.form-check-input.is-invalid:checked,
+.was-validated .form-check-input:invalid:checked {
+  background-color: var(--tblr-form-invalid-color)
+}
+
+.form-check-input.is-invalid:focus,
+.was-validated .form-check-input:invalid:focus {
+  box-shadow: 0 0 0 .25rem rgba(var(--tblr-danger-rgb), .25)
+}
+
+.form-check-input.is-invalid~.form-check-label,
+.was-validated .form-check-input:invalid~.form-check-label {
+  color: var(--tblr-form-invalid-color)
+}
+
+.form-check-inline .form-check-input~.invalid-feedback {
+  margin-left: .5em
+}
+
+.input-group>.form-control:not(:focus).is-invalid,
+.input-group>.form-floating:not(:focus-within).is-invalid,
+.input-group>.form-select:not(:focus).is-invalid,
+.was-validated .input-group>.form-control:not(:focus):invalid,
+.was-validated .input-group>.form-floating:not(:focus-within):invalid,
+.was-validated .input-group>.form-select:not(:focus):invalid {
+  z-index: 4
+}
+
+.btn {
+  --tblr-btn-padding-x: 1rem;
+  --tblr-btn-padding-y: 0.4375rem;
+  --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: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075);
+  --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 .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .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,
+.btn.active,
+.btn.show,
+.btn:first-child:active,
+:not(.btn-check)+.btn:active {
+  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,
+.btn.active:focus-visible,
+.btn.show:focus-visible,
+.btn:first-child:active:focus-visible,
+:not(.btn-check)+.btn:active: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: 65, 129, 205;
+  text-decoration: none
+}
+
+.btn-link:focus-visible,
+.btn-link:hover {
+  text-decoration: underline
+}
+
+.btn-link:focus-visible {
+  color: var(--tblr-btn-color)
+}
+
+.btn-link:hover {
+  color: var(--tblr-btn-hover-color)
+}
+
+.btn-group-lg>.btn,
+.btn-lg {
+  --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-group-sm>.btn,
+.btn-sm {
+  --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 .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 .35s ease
+}
+
+@media (prefers-reduced-motion:reduce) {
+  .collapsing {
+    transition: none
+  }
+}
+
+.collapsing.collapse-horizontal {
+  width: 0;
+  height: auto;
+  transition: width .35s ease
+}
+
+@media (prefers-reduced-motion:reduce) {
+  .collapsing.collapse-horizontal {
+    transition: none
+  }
+}
+
+.dropdown,
+.dropdown-center,
+.dropend,
+.dropstart,
+.dropup,
+.dropup-center {
+  position: relative
+}
+
+.dropdown-toggle {
+  white-space: nowrap
+}
+
+.dropdown-toggle:after {
+  content: "";
+  display: inline-block;
+  vertical-align: .306em;
+  width: .36em;
+  height: .36em;
+  border-bottom: 1px var(--tblr-border-style);
+  border-left: 1px var(--tblr-border-style);
+  margin-right: .1em;
+  margin-left: .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-shadow-dropdown);
+  --tblr-dropdown-link-color: inherit;
+  --tblr-dropdown-link-hover-color: inherit;
+  --tblr-dropdown-link-hover-bg: rgba(var(--tblr-muted-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: .306em;
+  width: .36em;
+  height: .36em;
+  border-bottom: 1px var(--tblr-border-style);
+  border-left: 1px var(--tblr-border-style);
+  margin-right: .1em;
+  margin-left: .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: .306em;
+  width: .36em;
+  height: .36em;
+  border-bottom: 1px var(--tblr-border-style);
+  border-left: 1px var(--tblr-border-style);
+  margin-right: .1em;
+  margin-left: .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: .306em;
+  width: .36em;
+  height: .36em;
+  border-bottom: 1px var(--tblr-border-style);
+  border-left: 1px var(--tblr-border-style);
+  margin-right: .1em;
+  margin-left: .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:focus,
+.dropdown-item:hover {
+  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: .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-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-vertical>.btn,
+.btn-group>.btn {
+  position: relative;
+  flex: 1 1 auto
+}
+
+.btn-group-vertical>.btn-check:checked+.btn,
+.btn-group-vertical>.btn-check:focus+.btn,
+.btn-group-vertical>.btn.active,
+.btn-group-vertical>.btn:active,
+.btn-group-vertical>.btn:focus,
+.btn-group-vertical>.btn:hover,
+.btn-group>.btn-check:checked+.btn,
+.btn-group>.btn-check:focus+.btn,
+.btn-group>.btn.active,
+.btn-group>.btn:active,
+.btn-group>.btn:focus,
+.btn-group>.btn:hover {
+  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>.btn-group:not(:first-child),
+.btn-group>:not(.btn-check:first-child)+.btn {
+  margin-left: calc(var(--tblr-border-width) * -1)
+}
+
+.btn-group>.btn-group:not(:last-child)>.btn,
+.btn-group>.btn.dropdown-toggle-split:first-child,
+.btn-group>.btn:not(:last-child):not(.dropdown-toggle) {
+  border-top-right-radius: 0;
+  border-bottom-right-radius: 0
+}
+
+.btn-group>.btn-group:not(:first-child)>.btn,
+.btn-group>.btn:nth-child(n+3),
+.btn-group>:not(.btn-check)+.btn {
+  border-top-left-radius: 0;
+  border-bottom-left-radius: 0
+}
+
+.dropdown-toggle-split {
+  padding-right: .75rem;
+  padding-left: .75rem
+}
+
+.dropdown-toggle-split::after,
+.dropend .dropdown-toggle-split::after,
+.dropup .dropdown-toggle-split::after {
+  margin-left: 0
+}
+
+.dropstart .dropdown-toggle-split::before {
+  margin-right: 0
+}
+
+.btn-group-sm>.btn+.dropdown-toggle-split,
+.btn-sm+.dropdown-toggle-split {
+  padding-right: .1875rem;
+  padding-left: .1875rem
+}
+
+.btn-group-lg>.btn+.dropdown-toggle-split,
+.btn-lg+.dropdown-toggle-split {
+  padding-right: .5625rem;
+  padding-left: .5625rem
+}
+
+.btn-group.show .dropdown-toggle {
+  box-shadow: inset 0 3px 5px rgba(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-group:not(:first-child),
+.btn-group-vertical>.btn:not(:first-child) {
+  margin-top: calc(var(--tblr-border-width) * -1)
+}
+
+.btn-group-vertical>.btn-group:not(:last-child)>.btn,
+.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle) {
+  border-bottom-right-radius: 0;
+  border-bottom-left-radius: 0
+}
+
+.btn-group-vertical>.btn-group:not(:first-child)>.btn,
+.btn-group-vertical>.btn~.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-color: var(--tblr-muted);
+  --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: 0 0;
+  border: 0;
+  transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out
+}
+
+@media (prefers-reduced-motion:reduce) {
+  .nav-link {
+    transition: none
+  }
+}
+
+.nav-link:focus,
+.nav-link:hover {
+  color: var(--tblr-nav-link-hover-color);
+  text-decoration: none
+}
+
+.nav-link:focus-visible {
+  outline: 0;
+  box-shadow: 0 0 0 .25rem rgba(32, 107, 196, .25)
+}
+
+.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:focus,
+.nav-tabs .nav-link:hover {
+  isolation: isolate;
+  border-color: var(--tblr-nav-tabs-link-hover-border-color)
+}
+
+.nav-tabs .nav-link.disabled,
+.nav-tabs .nav-link:disabled {
+  color: var(--tblr-nav-link-disabled-color);
+  background-color: transparent;
+  border-color: transparent
+}
+
+.nav-tabs .nav-item.show .nav-link,
+.nav-tabs .nav-link.active {
+  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:disabled {
+  color: var(--tblr-nav-link-disabled-color);
+  background-color: transparent;
+  border-color: transparent
+}
+
+.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:focus,
+.nav-underline .nav-link:hover {
+  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-item,
+.nav-fill>.nav-link {
+  flex: 1 1 auto;
+  text-align: center
+}
+
+.nav-justified .nav-item,
+.nav-justified>.nav-link {
+  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-lg,
+.navbar>.container-md,
+.navbar>.container-sm,
+.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:focus,
+.navbar-brand:hover {
+  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-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: .5rem;
+  padding-bottom: .5rem;
+  color: var(--tblr-navbar-color)
+}
+
+.navbar-text a,
+.navbar-text a:focus,
+.navbar-text a:hover {
+  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 {
+  --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 {
+  --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: 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-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: 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;
+  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(-.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(-.5 * var(--tblr-card-cap-padding-x));
+  margin-bottom: calc(-1 * var(--tblr-card-cap-padding-y));
+  margin-left: calc(-.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(-.5 * var(--tblr-card-cap-padding-x));
+  margin-left: calc(-.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-bottom,
+.card-img-top {
+  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-header,
+  .card-group>.card:not(:last-child) .card-img-top {
+    border-top-right-radius: 0
+  }
+
+  .card-group>.card:not(:last-child) .card-footer,
+  .card-group>.card:not(:last-child) .card-img-bottom {
+    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-header,
+  .card-group>.card:not(:first-child) .card-img-top {
+    border-top-left-radius: 0
+  }
+
+  .card-group>.card:not(:first-child) .card-footer,
+  .card-group>.card:not(:first-child) .card-img-bottom {
+    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='%230d2b4e'%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(32, 107, 196, 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: .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='%2379a6dc'%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='%2379a6dc'%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-divider-color: var(--tblr-muted);
+  --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, "/")
+}
+
+.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-muted);
+  --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(32, 107, 196, 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 .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .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)
+}
+
+.active>.page-link,
+.page-link.active {
+  z-index: 3;
+  color: var(--tblr-pagination-active-color);
+  background-color: var(--tblr-pagination-active-bg);
+  border-color: var(--tblr-pagination-active-border-color)
+}
+
+.disabled>.page-link,
+.page-link.disabled {
+  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: #ffffff;
+  --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: 1rem;
+  --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: 1.25rem 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: .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, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .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.5rem;
+  --tblr-list-group-item-padding-y: 1rem;
+  --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-muted-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:focus,
+.list-group-item-action:hover {
+  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: #000000;
+  --tblr-btn-close-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23000000'%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.3;
+  --tblr-btn-close-hover-opacity: 0.75;
+  --tblr-btn-close-focus-shadow: 0 0 0 0.25rem rgba(32, 107, 196, 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: .75rem;
+  height: .75rem;
+  padding: .25em .25em;
+  color: var(--tblr-btn-close-color);
+  background: transparent var(--tblr-btn-close-bg) center/.75rem 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 {
+  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-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-muted);
+  --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(-.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: 930px;
+  --tblr-modal-padding: 1.5rem;
+  --tblr-modal-margin: 0.5rem;
+  --tblr-modal-bg: var(--tblr-bg-surface);
+  --tblr-modal-border-color: rgba(100, 100, 100, 0.671);
+  --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 .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) * .5) calc(var(--tblr-modal-header-padding-x) * .5);
+  margin: calc(-.5 * var(--tblr-modal-header-padding-y)) calc(-.5 * var(--tblr-modal-header-padding-x)) calc(-.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) * .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) * .5)
+}
+
+@media (min-width:576px) {
+  .modal {
+    --tblr-modal-margin: 1.75rem;
+    --tblr-modal-box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15)
+  }
+
+  .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-footer,
+.modal-fullscreen .modal-header {
+  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-footer,
+  .modal-fullscreen-sm-down .modal-header {
+    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-footer,
+  .modal-fullscreen-md-down .modal-header {
+    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-footer,
+  .modal-fullscreen-lg-down .modal-header {
+    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-footer,
+  .modal-fullscreen-xl-down .modal-header {
+    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-footer,
+  .modal-fullscreen-xxl-down .modal-header {
+    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-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-auto[data-popper-placement^=top] .tooltip-arrow,
+.bs-tooltip-top .tooltip-arrow {
+  bottom: calc(-1 * var(--tblr-tooltip-arrow-height))
+}
+
+.bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow::before,
+.bs-tooltip-top .tooltip-arrow::before {
+  top: -1px;
+  border-width: var(--tblr-tooltip-arrow-height) calc(var(--tblr-tooltip-arrow-width) * .5) 0;
+  border-top-color: var(--tblr-tooltip-bg)
+}
+
+.bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow,
+.bs-tooltip-end .tooltip-arrow {
+  left: calc(-1 * var(--tblr-tooltip-arrow-height));
+  width: var(--tblr-tooltip-arrow-height);
+  height: var(--tblr-tooltip-arrow-width)
+}
+
+.bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow::before,
+.bs-tooltip-end .tooltip-arrow::before {
+  right: -1px;
+  border-width: calc(var(--tblr-tooltip-arrow-width) * .5) var(--tblr-tooltip-arrow-height) calc(var(--tblr-tooltip-arrow-width) * .5) 0;
+  border-right-color: var(--tblr-tooltip-bg)
+}
+
+.bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow,
+.bs-tooltip-bottom .tooltip-arrow {
+  top: calc(-1 * var(--tblr-tooltip-arrow-height))
+}
+
+.bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow::before,
+.bs-tooltip-bottom .tooltip-arrow::before {
+  bottom: -1px;
+  border-width: 0 calc(var(--tblr-tooltip-arrow-width) * .5) var(--tblr-tooltip-arrow-height);
+  border-bottom-color: var(--tblr-tooltip-bg)
+}
+
+.bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow,
+.bs-tooltip-start .tooltip-arrow {
+  right: calc(-1 * var(--tblr-tooltip-arrow-height));
+  width: var(--tblr-tooltip-arrow-height);
+  height: var(--tblr-tooltip-arrow-width)
+}
+
+.bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow::before,
+.bs-tooltip-start .tooltip-arrow::before {
+  left: -1px;
+  border-width: calc(var(--tblr-tooltip-arrow-width) * .5) 0 calc(var(--tblr-tooltip-arrow-width) * .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: 0 0.5rem 1rem rgba(0, 0, 0, 0.15);
+  --tblr-popover-header-padding-x: 1rem;
+  --tblr-popover-header-padding-y: 0.5rem;
+  --tblr-popover-header-font-size: 0.875rem;
+  --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::after,
+.popover .popover-arrow::before {
+  position: absolute;
+  display: block;
+  content: "";
+  border-color: transparent;
+  border-style: solid;
+  border-width: 0
+}
+
+.bs-popover-auto[data-popper-placement^=top]>.popover-arrow,
+.bs-popover-top>.popover-arrow {
+  bottom: calc(-1 * (var(--tblr-popover-arrow-height)) - var(--tblr-popover-border-width))
+}
+
+.bs-popover-auto[data-popper-placement^=top]>.popover-arrow::after,
+.bs-popover-auto[data-popper-placement^=top]>.popover-arrow::before,
+.bs-popover-top>.popover-arrow::after,
+.bs-popover-top>.popover-arrow::before {
+  border-width: var(--tblr-popover-arrow-height) calc(var(--tblr-popover-arrow-width) * .5) 0
+}
+
+.bs-popover-auto[data-popper-placement^=top]>.popover-arrow::before,
+.bs-popover-top>.popover-arrow::before {
+  bottom: 0;
+  border-top-color: var(--tblr-popover-arrow-border)
+}
+
+.bs-popover-auto[data-popper-placement^=top]>.popover-arrow::after,
+.bs-popover-top>.popover-arrow::after {
+  bottom: var(--tblr-popover-border-width);
+  border-top-color: var(--tblr-popover-bg)
+}
+
+.bs-popover-auto[data-popper-placement^=right]>.popover-arrow,
+.bs-popover-end>.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-auto[data-popper-placement^=right]>.popover-arrow::after,
+.bs-popover-auto[data-popper-placement^=right]>.popover-arrow::before,
+.bs-popover-end>.popover-arrow::after,
+.bs-popover-end>.popover-arrow::before {
+  border-width: calc(var(--tblr-popover-arrow-width) * .5) var(--tblr-popover-arrow-height) calc(var(--tblr-popover-arrow-width) * .5) 0
+}
+
+.bs-popover-auto[data-popper-placement^=right]>.popover-arrow::before,
+.bs-popover-end>.popover-arrow::before {
+  left: 0;
+  border-right-color: var(--tblr-popover-arrow-border)
+}
+
+.bs-popover-auto[data-popper-placement^=right]>.popover-arrow::after,
+.bs-popover-end>.popover-arrow::after {
+  left: var(--tblr-popover-border-width);
+  border-right-color: var(--tblr-popover-bg)
+}
+
+.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow,
+.bs-popover-bottom>.popover-arrow {
+  top: calc(-1 * (var(--tblr-popover-arrow-height)) - var(--tblr-popover-border-width))
+}
+
+.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow::after,
+.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow::before,
+.bs-popover-bottom>.popover-arrow::after,
+.bs-popover-bottom>.popover-arrow::before {
+  border-width: 0 calc(var(--tblr-popover-arrow-width) * .5) var(--tblr-popover-arrow-height)
+}
+
+.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow::before,
+.bs-popover-bottom>.popover-arrow::before {
+  top: 0;
+  border-bottom-color: var(--tblr-popover-arrow-border)
+}
+
+.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow::after,
+.bs-popover-bottom>.popover-arrow::after {
+  top: var(--tblr-popover-border-width);
+  border-bottom-color: var(--tblr-popover-bg)
+}
+
+.bs-popover-auto[data-popper-placement^=bottom] .popover-header::before,
+.bs-popover-bottom .popover-header::before {
+  position: absolute;
+  top: 0;
+  left: 50%;
+  display: block;
+  width: var(--tblr-popover-arrow-width);
+  margin-left: calc(-.5 * var(--tblr-popover-arrow-width));
+  content: "";
+  border-bottom: var(--tblr-popover-border-width) solid var(--tblr-popover-header-bg)
+}
+
+.bs-popover-auto[data-popper-placement^=left]>.popover-arrow,
+.bs-popover-start>.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-auto[data-popper-placement^=left]>.popover-arrow::after,
+.bs-popover-auto[data-popper-placement^=left]>.popover-arrow::before,
+.bs-popover-start>.popover-arrow::after,
+.bs-popover-start>.popover-arrow::before {
+  border-width: calc(var(--tblr-popover-arrow-width) * .5) 0 calc(var(--tblr-popover-arrow-width) * .5) var(--tblr-popover-arrow-height)
+}
+
+.bs-popover-auto[data-popper-placement^=left]>.popover-arrow::before,
+.bs-popover-start>.popover-arrow::before {
+  right: 0;
+  border-left-color: var(--tblr-popover-arrow-border)
+}
+
+.bs-popover-auto[data-popper-placement^=left]>.popover-arrow::after,
+.bs-popover-start>.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-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 .6s ease-in-out
+}
+
+@media (prefers-reduced-motion:reduce) {
+  .carousel-item {
+    transition: none
+  }
+}
+
+.carousel-item-next,
+.carousel-item-prev,
+.carousel-item.active {
+  display: block
+}
+
+.active.carousel-item-end,
+.carousel-item-next:not(.carousel-item-start) {
+  transform: translateX(100%)
+}
+
+.active.carousel-item-start,
+.carousel-item-prev:not(.carousel-item-end) {
+  transform: translateX(-100%)
+}
+
+.carousel-fade .carousel-item {
+  opacity: 0;
+  transition-property: opacity;
+  transform: none
+}
+
+.carousel-fade .carousel-item-next.carousel-item-start,
+.carousel-fade .carousel-item-prev.carousel-item-end,
+.carousel-fade .carousel-item.active {
+  z-index: 1;
+  opacity: 1
+}
+
+.carousel-fade .active.carousel-item-end,
+.carousel-fade .active.carousel-item-start {
+  z-index: 0;
+  opacity: 0;
+  transition: opacity 0s .6s
+}
+
+@media (prefers-reduced-motion:reduce) {
+
+  .carousel-fade .active.carousel-item-end,
+  .carousel-fade .active.carousel-item-start {
+    transition: none
+  }
+}
+
+.carousel-control-next,
+.carousel-control-prev {
+  position: absolute;
+  top: 0;
+  bottom: 0;
+  z-index: 1;
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  width: 15%;
+  padding: 0;
+  color: #fff;
+  text-align: center;
+  background: 0 0;
+  border: 0;
+  opacity: .5;
+  transition: opacity .15s ease
+}
+
+@media (prefers-reduced-motion:reduce) {
+
+  .carousel-control-next,
+  .carousel-control-prev {
+    transition: none
+  }
+}
+
+.carousel-control-next:focus,
+.carousel-control-next:hover,
+.carousel-control-prev:focus,
+.carousel-control-prev:hover {
+  color: #fff;
+  text-decoration: none;
+  outline: 0;
+  opacity: .9
+}
+
+.carousel-control-prev {
+  left: 0
+}
+
+.carousel-control-next {
+  right: 0
+}
+
+.carousel-control-next-icon,
+.carousel-control-prev-icon {
+  display: inline-block;
+  width: 1.5rem;
+  height: 1.5rem;
+  background-repeat: no-repeat;
+  background-position: 50%;
+  background-size: 100% 100%
+}
+
+.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: #fff;
+  background-clip: padding-box;
+  border: 0;
+  border-top: 10px solid transparent;
+  border-bottom: 10px solid transparent;
+  opacity: .5;
+  transition: opacity .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: #fff;
+  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: #000
+}
+
+.carousel-dark .carousel-caption {
+  color: #000
+}
+
+[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: #000
+}
+
+[data-bs-theme=dark] .carousel .carousel-caption,
+[data-bs-theme=dark].carousel .carousel-caption {
+  color: #000
+}
+
+.spinner-border,
+.spinner-grow {
+  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-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-lg,
+.offcanvas-md,
+.offcanvas-sm,
+.offcanvas-xl,
+.offcanvas-xxl {
+  --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.show:not(.hiding),
+  .offcanvas-sm.showing {
+    transform: none
+  }
+
+  .offcanvas-sm.hiding,
+  .offcanvas-sm.show,
+  .offcanvas-sm.showing {
+    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.show:not(.hiding),
+  .offcanvas-md.showing {
+    transform: none
+  }
+
+  .offcanvas-md.hiding,
+  .offcanvas-md.show,
+  .offcanvas-md.showing {
+    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.show:not(.hiding),
+  .offcanvas-lg.showing {
+    transform: none
+  }
+
+  .offcanvas-lg.hiding,
+  .offcanvas-lg.show,
+  .offcanvas-lg.showing {
+    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.show:not(.hiding),
+  .offcanvas-xl.showing {
+    transform: none
+  }
+
+  .offcanvas-xl.hiding,
+  .offcanvas-xl.show,
+  .offcanvas-xl.showing {
+    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.show:not(.hiding),
+  .offcanvas-xxl.showing {
+    transform: none
+  }
+
+  .offcanvas-xxl.hiding,
+  .offcanvas-xxl.show,
+  .offcanvas-xxl.showing {
+    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.show:not(.hiding),
+.offcanvas.showing {
+  transform: none
+}
+
+.offcanvas.hiding,
+.offcanvas.show,
+.offcanvas.showing {
+  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: .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) * .5) calc(var(--tblr-offcanvas-padding-x) * .5);
+  margin-top: calc(-.5 * var(--tblr-offcanvas-padding-y));
+  margin-right: calc(-.5 * var(--tblr-offcanvas-padding-x));
+  margin-bottom: calc(-.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: .2
+}
+
+.placeholder.btn::before {
+  display: inline-block;
+  content: ""
+}
+
+.placeholder-xs {
+  min-height: .6em
+}
+
+.placeholder-sm {
+  min-height: .8em
+}
+
+.placeholder-lg {
+  min-height: 1.2em
+}
+
+.placeholder-glow .placeholder {
+  animation: placeholder-glow 2s ease-in-out infinite
+}
+
+@keyframes placeholder-glow {
+  50% {
+    opacity: .1
+  }
+}
+
+.placeholder-wave {
+  -webkit-mask-image: linear-gradient(130deg, #000 55%, rgba(0, 0, 0, .9) 75%, #000 95%);
+  mask-image: linear-gradient(130deg, #000 55%, rgba(0, 0, 0, .9) 75%, #000 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(32, 107, 196, var(--tblr-bg-opacity, 1)) !important
+}
+
+.text-bg-secondary {
+  color: #fcfdfe !important;
+  background-color: RGBA(102, 115, 130, var(--tblr-bg-opacity, 1)) !important
+}
+
+.text-bg-success {
+  color: #fcfdfe !important;
+  background-color: RGBA(47, 179, 68, var(--tblr-bg-opacity, 1)) !important
+}
+
+.text-bg-info {
+  color: #fcfdfe !important;
+  background-color: RGBA(66, 153, 225, var(--tblr-bg-opacity, 1)) !important
+}
+
+.text-bg-warning {
+  color: #fcfdfe !important;
+  background-color: RGBA(247, 103, 7, var(--tblr-bg-opacity, 1)) !important
+}
+
+.text-bg-danger {
+  color: #fcfdfe !important;
+  background-color: RGBA(214, 57, 57, var(--tblr-bg-opacity, 1)) !important
+}
+
+.text-bg-light {
+  color: #182433 !important;
+  background-color: RGBA(252, 253, 254, var(--tblr-bg-opacity, 1)) !important
+}
+
+.text-bg-dark {
+  color: #fcfdfe !important;
+  background-color: RGBA(24, 36, 51, var(--tblr-bg-opacity, 1)) !important
+}
+
+.text-bg-muted {
+  color: #fcfdfe !important;
+  background-color: RGBA(102, 115, 130, var(--tblr-bg-opacity, 1)) !important
+}
+
+.text-bg-blue {
+  color: #fcfdfe !important;
+  background-color: RGBA(32, 107, 196, var(--tblr-bg-opacity, 1)) !important
+}
+
+.text-bg-azure {
+  color: #fcfdfe !important;
+  background-color: RGBA(66, 153, 225, var(--tblr-bg-opacity, 1)) !important
+}
+
+.text-bg-indigo {
+  color: #fcfdfe !important;
+  background-color: RGBA(66, 99, 235, var(--tblr-bg-opacity, 1)) !important
+}
+
+.text-bg-purple {
+  color: #fcfdfe !important;
+  background-color: RGBA(174, 62, 201, var(--tblr-bg-opacity, 1)) !important
+}
+
+.text-bg-pink {
+  color: #fcfdfe !important;
+  background-color: RGBA(214, 51, 108, var(--tblr-bg-opacity, 1)) !important
+}
+
+.text-bg-red {
+  color: #fcfdfe !important;
+  background-color: RGBA(214, 57, 57, var(--tblr-bg-opacity, 1)) !important
+}
+
+.text-bg-orange {
+  color: #fcfdfe !important;
+  background-color: RGBA(247, 103, 7, var(--tblr-bg-opacity, 1)) !important
+}
+
+.text-bg-yellow {
+  color: #fcfdfe !important;
+  background-color: RGBA(245, 159, 0, var(--tblr-bg-opacity, 1)) !important
+}
+
+.text-bg-lime {
+  color: #fcfdfe !important;
+  background-color: RGBA(116, 184, 22, var(--tblr-bg-opacity, 1)) !important
+}
+
+.text-bg-green {
+  color: #fcfdfe !important;
+  background-color: RGBA(47, 179, 68, var(--tblr-bg-opacity, 1)) !important
+}
+
+.text-bg-teal {
+  color: #fcfdfe !important;
+  background-color: RGBA(12, 166, 120, var(--tblr-bg-opacity, 1)) !important
+}
+
+.text-bg-cyan {
+  color: #fcfdfe !important;
+  background-color: RGBA(23, 162, 184, var(--tblr-bg-opacity, 1)) !important
+}
+
+.text-bg-facebook {
+  color: #fcfdfe !important;
+  background-color: RGBA(24, 119, 242, var(--tblr-bg-opacity, 1)) !important
+}
+
+.text-bg-twitter {
+  color: #fcfdfe !important;
+  background-color: RGBA(29, 161, 242, var(--tblr-bg-opacity, 1)) !important
+}
+
+.text-bg-linkedin {
+  color: #fcfdfe !important;
+  background-color: RGBA(10, 102, 194, var(--tblr-bg-opacity, 1)) !important
+}
+
+.text-bg-google {
+  color: #fcfdfe !important;
+  background-color: RGBA(220, 78, 65, var(--tblr-bg-opacity, 1)) !important
+}
+
+.text-bg-youtube {
+  color: #fcfdfe !important;
+  background-color: RGBA(255, 0, 0, var(--tblr-bg-opacity, 1)) !important
+}
+
+.text-bg-vimeo {
+  color: #fcfdfe !important;
+  background-color: RGBA(26, 183, 234, var(--tblr-bg-opacity, 1)) !important
+}
+
+.text-bg-dribbble {
+  color: #fcfdfe !important;
+  background-color: RGBA(234, 76, 137, var(--tblr-bg-opacity, 1)) !important
+}
+
+.text-bg-github {
+  color: #fcfdfe !important;
+  background-color: RGBA(24, 23, 23, var(--tblr-bg-opacity, 1)) !important
+}
+
+.text-bg-instagram {
+  color: #fcfdfe !important;
+  background-color: RGBA(228, 64, 95, var(--tblr-bg-opacity, 1)) !important
+}
+
+.text-bg-pinterest {
+  color: #fcfdfe !important;
+  background-color: RGBA(189, 8, 28, var(--tblr-bg-opacity, 1)) !important
+}
+
+.text-bg-vk {
+  color: #fcfdfe !important;
+  background-color: RGBA(99, 131, 168, var(--tblr-bg-opacity, 1)) !important
+}
+
+.text-bg-rss {
+  color: #fcfdfe !important;
+  background-color: RGBA(255, 165, 0, var(--tblr-bg-opacity, 1)) !important
+}
+
+.text-bg-flickr {
+  color: #fcfdfe !important;
+  background-color: RGBA(0, 99, 220, var(--tblr-bg-opacity, 1)) !important
+}
+
+.text-bg-bitbucket {
+  color: #fcfdfe !important;
+  background-color: RGBA(0, 82, 204, var(--tblr-bg-opacity, 1)) !important
+}
+
+.text-bg-tabler {
+  color: #fcfdfe !important;
+  background-color: RGBA(32, 107, 196, var(--tblr-bg-opacity, 1)) !important
+}
+
+.link-primary {
+  color: RGBA(var(--tblr-primary-rgb, var(--tblr-link-opacity, 1)));
+  -webkit-text-decoration-color: RGBA(var(--tblr-primary-rgb), var(--tblr-link-underline-opacity, 1));
+  text-decoration-color: RGBA(var(--tblr-primary-rgb), var(--tblr-link-underline-opacity, 1))
+}
+
+.link-primary:focus,
+.link-primary:hover {
+  color: RGBA(26, 86, 157, var(--tblr-link-opacity, 1));
+  -webkit-text-decoration-color: RGBA(26, 86, 157, var(--tblr-link-underline-opacity, 1));
+  text-decoration-color: RGBA(26, 86, 157, var(--tblr-link-underline-opacity, 1))
+}
+
+.link-secondary {
+  color: RGBA(var(--tblr-secondary-rgb, var(--tblr-link-opacity, 1)));
+  -webkit-text-decoration-color: RGBA(var(--tblr-secondary-rgb), var(--tblr-link-underline-opacity, 1));
+  text-decoration-color: RGBA(var(--tblr-secondary-rgb), var(--tblr-link-underline-opacity, 1))
+}
+
+.link-secondary:focus,
+.link-secondary:hover {
+  color: RGBA(82, 92, 104, var(--tblr-link-opacity, 1));
+  -webkit-text-decoration-color: RGBA(82, 92, 104, var(--tblr-link-underline-opacity, 1));
+  text-decoration-color: RGBA(82, 92, 104, var(--tblr-link-underline-opacity, 1))
+}
+
+.link-success {
+  color: RGBA(var(--tblr-success-rgb, var(--tblr-link-opacity, 1)));
+  -webkit-text-decoration-color: RGBA(var(--tblr-success-rgb), var(--tblr-link-underline-opacity, 1));
+  text-decoration-color: RGBA(var(--tblr-success-rgb), var(--tblr-link-underline-opacity, 1))
+}
+
+.link-success:focus,
+.link-success:hover {
+  color: RGBA(38, 143, 54, var(--tblr-link-opacity, 1));
+  -webkit-text-decoration-color: RGBA(38, 143, 54, var(--tblr-link-underline-opacity, 1));
+  text-decoration-color: RGBA(38, 143, 54, var(--tblr-link-underline-opacity, 1))
+}
+
+.link-info {
+  color: RGBA(var(--tblr-info-rgb, var(--tblr-link-opacity, 1)));
+  -webkit-text-decoration-color: RGBA(var(--tblr-info-rgb), var(--tblr-link-underline-opacity, 1));
+  text-decoration-color: RGBA(var(--tblr-info-rgb), var(--tblr-link-underline-opacity, 1))
+}
+
+.link-info:focus,
+.link-info:hover {
+  color: RGBA(53, 122, 180, var(--tblr-link-opacity, 1));
+  -webkit-text-decoration-color: RGBA(53, 122, 180, var(--tblr-link-underline-opacity, 1));
+  text-decoration-color: RGBA(53, 122, 180, var(--tblr-link-underline-opacity, 1))
+}
+
+.link-warning {
+  color: RGBA(var(--tblr-warning-rgb, var(--tblr-link-opacity, 1)));
+  -webkit-text-decoration-color: RGBA(var(--tblr-warning-rgb), var(--tblr-link-underline-opacity, 1));
+  text-decoration-color: RGBA(var(--tblr-warning-rgb), var(--tblr-link-underline-opacity, 1))
+}
+
+.link-warning:focus,
+.link-warning:hover {
+  color: RGBA(198, 82, 6, var(--tblr-link-opacity, 1));
+  -webkit-text-decoration-color: RGBA(198, 82, 6, var(--tblr-link-underline-opacity, 1));
+  text-decoration-color: RGBA(198, 82, 6, var(--tblr-link-underline-opacity, 1))
+}
+
+.link-danger {
+  color: RGBA(var(--tblr-danger-rgb, var(--tblr-link-opacity, 1)));
+  -webkit-text-decoration-color: RGBA(var(--tblr-danger-rgb), var(--tblr-link-underline-opacity, 1));
+  text-decoration-color: RGBA(var(--tblr-danger-rgb), var(--tblr-link-underline-opacity, 1))
+}
+
+.link-danger:focus,
+.link-danger:hover {
+  color: RGBA(171, 46, 46, var(--tblr-link-opacity, 1));
+  -webkit-text-decoration-color: RGBA(171, 46, 46, var(--tblr-link-underline-opacity, 1));
+  text-decoration-color: RGBA(171, 46, 46, var(--tblr-link-underline-opacity, 1))
+}
+
+.link-light {
+  color: RGBA(var(--tblr-light-rgb, var(--tblr-link-opacity, 1)));
+  -webkit-text-decoration-color: RGBA(var(--tblr-light-rgb), var(--tblr-link-underline-opacity, 1));
+  text-decoration-color: RGBA(var(--tblr-light-rgb), var(--tblr-link-underline-opacity, 1))
+}
+
+.link-light:focus,
+.link-light:hover {
+  color: RGBA(253, 253, 254, var(--tblr-link-opacity, 1));
+  -webkit-text-decoration-color: RGBA(253, 253, 254, var(--tblr-link-underline-opacity, 1));
+  text-decoration-color: RGBA(253, 253, 254, var(--tblr-link-underline-opacity, 1))
+}
+
+.link-dark {
+  color: RGBA(var(--tblr-dark-rgb, var(--tblr-link-opacity, 1)));
+  -webkit-text-decoration-color: RGBA(var(--tblr-dark-rgb), var(--tblr-link-underline-opacity, 1));
+  text-decoration-color: RGBA(var(--tblr-dark-rgb), var(--tblr-link-underline-opacity, 1))
+}
+
+.link-dark:focus,
+.link-dark:hover {
+  color: RGBA(19, 29, 41, var(--tblr-link-opacity, 1));
+  -webkit-text-decoration-color: RGBA(19, 29, 41, var(--tblr-link-underline-opacity, 1));
+  text-decoration-color: RGBA(19, 29, 41, var(--tblr-link-underline-opacity, 1))
+}
+
+.link-muted {
+  color: RGBA(var(--tblr-muted-rgb, var(--tblr-link-opacity, 1)));
+  -webkit-text-decoration-color: RGBA(var(--tblr-muted-rgb), var(--tblr-link-underline-opacity, 1));
+  text-decoration-color: RGBA(var(--tblr-muted-rgb), var(--tblr-link-underline-opacity, 1))
+}
+
+.link-muted:focus,
+.link-muted:hover {
+  color: RGBA(82, 92, 104, var(--tblr-link-opacity, 1));
+  -webkit-text-decoration-color: RGBA(82, 92, 104, var(--tblr-link-underline-opacity, 1));
+  text-decoration-color: RGBA(82, 92, 104, var(--tblr-link-underline-opacity, 1))
+}
+
+.link-blue {
+  color: RGBA(var(--tblr-blue-rgb, var(--tblr-link-opacity, 1)));
+  -webkit-text-decoration-color: RGBA(var(--tblr-blue-rgb), var(--tblr-link-underline-opacity, 1));
+  text-decoration-color: RGBA(var(--tblr-blue-rgb), var(--tblr-link-underline-opacity, 1))
+}
+
+.link-blue:focus,
+.link-blue:hover {
+  color: RGBA(26, 86, 157, var(--tblr-link-opacity, 1));
+  -webkit-text-decoration-color: RGBA(26, 86, 157, var(--tblr-link-underline-opacity, 1));
+  text-decoration-color: RGBA(26, 86, 157, var(--tblr-link-underline-opacity, 1))
+}
+
+.link-azure {
+  color: RGBA(var(--tblr-azure-rgb, var(--tblr-link-opacity, 1)));
+  -webkit-text-decoration-color: RGBA(var(--tblr-azure-rgb), var(--tblr-link-underline-opacity, 1));
+  text-decoration-color: RGBA(var(--tblr-azure-rgb), var(--tblr-link-underline-opacity, 1))
+}
+
+.link-azure:focus,
+.link-azure:hover {
+  color: RGBA(53, 122, 180, var(--tblr-link-opacity, 1));
+  -webkit-text-decoration-color: RGBA(53, 122, 180, var(--tblr-link-underline-opacity, 1));
+  text-decoration-color: RGBA(53, 122, 180, var(--tblr-link-underline-opacity, 1))
+}
+
+.link-indigo {
+  color: RGBA(var(--tblr-indigo-rgb, var(--tblr-link-opacity, 1)));
+  -webkit-text-decoration-color: RGBA(var(--tblr-indigo-rgb), var(--tblr-link-underline-opacity, 1));
+  text-decoration-color: RGBA(var(--tblr-indigo-rgb), var(--tblr-link-underline-opacity, 1))
+}
+
+.link-indigo:focus,
+.link-indigo:hover {
+  color: RGBA(53, 79, 188, var(--tblr-link-opacity, 1));
+  -webkit-text-decoration-color: RGBA(53, 79, 188, var(--tblr-link-underline-opacity, 1));
+  text-decoration-color: RGBA(53, 79, 188, var(--tblr-link-underline-opacity, 1))
+}
+
+.link-purple {
+  color: RGBA(var(--tblr-purple-rgb, var(--tblr-link-opacity, 1)));
+  -webkit-text-decoration-color: RGBA(var(--tblr-purple-rgb), var(--tblr-link-underline-opacity, 1));
+  text-decoration-color: RGBA(var(--tblr-purple-rgb), var(--tblr-link-underline-opacity, 1))
+}
+
+.link-purple:focus,
+.link-purple:hover {
+  color: RGBA(139, 50, 161, var(--tblr-link-opacity, 1));
+  -webkit-text-decoration-color: RGBA(139, 50, 161, var(--tblr-link-underline-opacity, 1));
+  text-decoration-color: RGBA(139, 50, 161, var(--tblr-link-underline-opacity, 1))
+}
+
+.link-pink {
+  color: RGBA(var(--tblr-pink-rgb, var(--tblr-link-opacity, 1)));
+  -webkit-text-decoration-color: RGBA(var(--tblr-pink-rgb), var(--tblr-link-underline-opacity, 1));
+  text-decoration-color: RGBA(var(--tblr-pink-rgb), var(--tblr-link-underline-opacity, 1))
+}
+
+.link-pink:focus,
+.link-pink:hover {
+  color: RGBA(171, 41, 86, var(--tblr-link-opacity, 1));
+  -webkit-text-decoration-color: RGBA(171, 41, 86, var(--tblr-link-underline-opacity, 1));
+  text-decoration-color: RGBA(171, 41, 86, var(--tblr-link-underline-opacity, 1))
+}
+
+.link-red {
+  color: RGBA(var(--tblr-red-rgb, var(--tblr-link-opacity, 1)));
+  -webkit-text-decoration-color: RGBA(var(--tblr-red-rgb), var(--tblr-link-underline-opacity, 1));
+  text-decoration-color: RGBA(var(--tblr-red-rgb), var(--tblr-link-underline-opacity, 1))
+}
+
+.link-red:focus,
+.link-red:hover {
+  color: RGBA(171, 46, 46, var(--tblr-link-opacity, 1));
+  -webkit-text-decoration-color: RGBA(171, 46, 46, var(--tblr-link-underline-opacity, 1));
+  text-decoration-color: RGBA(171, 46, 46, var(--tblr-link-underline-opacity, 1))
+}
+
+.link-orange {
+  color: RGBA(var(--tblr-orange-rgb, var(--tblr-link-opacity, 1)));
+  -webkit-text-decoration-color: RGBA(var(--tblr-orange-rgb), var(--tblr-link-underline-opacity, 1));
+  text-decoration-color: RGBA(var(--tblr-orange-rgb), var(--tblr-link-underline-opacity, 1))
+}
+
+.link-orange:focus,
+.link-orange:hover {
+  color: RGBA(198, 82, 6, var(--tblr-link-opacity, 1));
+  -webkit-text-decoration-color: RGBA(198, 82, 6, var(--tblr-link-underline-opacity, 1));
+  text-decoration-color: RGBA(198, 82, 6, var(--tblr-link-underline-opacity, 1))
+}
+
+.link-yellow {
+  color: RGBA(var(--tblr-yellow-rgb, var(--tblr-link-opacity, 1)));
+  -webkit-text-decoration-color: RGBA(var(--tblr-yellow-rgb), var(--tblr-link-underline-opacity, 1));
+  text-decoration-color: RGBA(var(--tblr-yellow-rgb), var(--tblr-link-underline-opacity, 1))
+}
+
+.link-yellow:focus,
+.link-yellow:hover {
+  color: RGBA(196, 127, 0, var(--tblr-link-opacity, 1));
+  -webkit-text-decoration-color: RGBA(196, 127, 0, var(--tblr-link-underline-opacity, 1));
+  text-decoration-color: RGBA(196, 127, 0, var(--tblr-link-underline-opacity, 1))
+}
+
+.link-lime {
+  color: RGBA(var(--tblr-lime-rgb, var(--tblr-link-opacity, 1)));
+  -webkit-text-decoration-color: RGBA(var(--tblr-lime-rgb), var(--tblr-link-underline-opacity, 1));
+  text-decoration-color: RGBA(var(--tblr-lime-rgb), var(--tblr-link-underline-opacity, 1))
+}
+
+.link-lime:focus,
+.link-lime:hover {
+  color: RGBA(93, 147, 18, var(--tblr-link-opacity, 1));
+  -webkit-text-decoration-color: RGBA(93, 147, 18, var(--tblr-link-underline-opacity, 1));
+  text-decoration-color: RGBA(93, 147, 18, var(--tblr-link-underline-opacity, 1))
+}
+
+.link-green {
+  color: RGBA(var(--tblr-green-rgb, var(--tblr-link-opacity, 1)));
+  -webkit-text-decoration-color: RGBA(var(--tblr-green-rgb), var(--tblr-link-underline-opacity, 1));
+  text-decoration-color: RGBA(var(--tblr-green-rgb), var(--tblr-link-underline-opacity, 1))
+}
+
+.link-green:focus,
+.link-green:hover {
+  color: RGBA(38, 143, 54, var(--tblr-link-opacity, 1));
+  -webkit-text-decoration-color: RGBA(38, 143, 54, var(--tblr-link-underline-opacity, 1));
+  text-decoration-color: RGBA(38, 143, 54, var(--tblr-link-underline-opacity, 1))
+}
+
+.link-teal {
+  color: RGBA(var(--tblr-teal-rgb, var(--tblr-link-opacity, 1)));
+  -webkit-text-decoration-color: RGBA(var(--tblr-teal-rgb), var(--tblr-link-underline-opacity, 1));
+  text-decoration-color: RGBA(var(--tblr-teal-rgb), var(--tblr-link-underline-opacity, 1))
+}
+
+.link-teal:focus,
+.link-teal:hover {
+  color: RGBA(10, 133, 96, var(--tblr-link-opacity, 1));
+  -webkit-text-decoration-color: RGBA(10, 133, 96, var(--tblr-link-underline-opacity, 1));
+  text-decoration-color: RGBA(10, 133, 96, var(--tblr-link-underline-opacity, 1))
+}
+
+.link-cyan {
+  color: RGBA(var(--tblr-cyan-rgb, var(--tblr-link-opacity, 1)));
+  -webkit-text-decoration-color: RGBA(var(--tblr-cyan-rgb), var(--tblr-link-underline-opacity, 1));
+  text-decoration-color: RGBA(var(--tblr-cyan-rgb), var(--tblr-link-underline-opacity, 1))
+}
+
+.link-cyan:focus,
+.link-cyan:hover {
+  color: RGBA(18, 130, 147, var(--tblr-link-opacity, 1));
+  -webkit-text-decoration-color: RGBA(18, 130, 147, var(--tblr-link-underline-opacity, 1));
+  text-decoration-color: RGBA(18, 130, 147, var(--tblr-link-underline-opacity, 1))
+}
+
+.link-facebook {
+  color: RGBA(var(--tblr-facebook-rgb, var(--tblr-link-opacity, 1)));
+  -webkit-text-decoration-color: RGBA(var(--tblr-facebook-rgb), var(--tblr-link-underline-opacity, 1));
+  text-decoration-color: RGBA(var(--tblr-facebook-rgb), var(--tblr-link-underline-opacity, 1))
+}
+
+.link-facebook:focus,
+.link-facebook:hover {
+  color: RGBA(19, 95, 194, var(--tblr-link-opacity, 1));
+  -webkit-text-decoration-color: RGBA(19, 95, 194, var(--tblr-link-underline-opacity, 1));
+  text-decoration-color: RGBA(19, 95, 194, var(--tblr-link-underline-opacity, 1))
+}
+
+.link-twitter {
+  color: RGBA(var(--tblr-twitter-rgb, var(--tblr-link-opacity, 1)));
+  -webkit-text-decoration-color: RGBA(var(--tblr-twitter-rgb), var(--tblr-link-underline-opacity, 1));
+  text-decoration-color: RGBA(var(--tblr-twitter-rgb), var(--tblr-link-underline-opacity, 1))
+}
+
+.link-twitter:focus,
+.link-twitter:hover {
+  color: RGBA(23, 129, 194, var(--tblr-link-opacity, 1));
+  -webkit-text-decoration-color: RGBA(23, 129, 194, var(--tblr-link-underline-opacity, 1));
+  text-decoration-color: RGBA(23, 129, 194, var(--tblr-link-underline-opacity, 1))
+}
+
+.link-linkedin {
+  color: RGBA(var(--tblr-linkedin-rgb, var(--tblr-link-opacity, 1)));
+  -webkit-text-decoration-color: RGBA(var(--tblr-linkedin-rgb), var(--tblr-link-underline-opacity, 1));
+  text-decoration-color: RGBA(var(--tblr-linkedin-rgb), var(--tblr-link-underline-opacity, 1))
+}
+
+.link-linkedin:focus,
+.link-linkedin:hover {
+  color: RGBA(8, 82, 155, var(--tblr-link-opacity, 1));
+  -webkit-text-decoration-color: RGBA(8, 82, 155, var(--tblr-link-underline-opacity, 1));
+  text-decoration-color: RGBA(8, 82, 155, var(--tblr-link-underline-opacity, 1))
+}
+
+.link-google {
+  color: RGBA(var(--tblr-google-rgb, var(--tblr-link-opacity, 1)));
+  -webkit-text-decoration-color: RGBA(var(--tblr-google-rgb), var(--tblr-link-underline-opacity, 1));
+  text-decoration-color: RGBA(var(--tblr-google-rgb), var(--tblr-link-underline-opacity, 1))
+}
+
+.link-google:focus,
+.link-google:hover {
+  color: RGBA(176, 62, 52, var(--tblr-link-opacity, 1));
+  -webkit-text-decoration-color: RGBA(176, 62, 52, var(--tblr-link-underline-opacity, 1));
+  text-decoration-color: RGBA(176, 62, 52, var(--tblr-link-underline-opacity, 1))
+}
+
+.link-youtube {
+  color: RGBA(var(--tblr-youtube-rgb, var(--tblr-link-opacity, 1)));
+  -webkit-text-decoration-color: RGBA(var(--tblr-youtube-rgb), var(--tblr-link-underline-opacity, 1));
+  text-decoration-color: RGBA(var(--tblr-youtube-rgb), var(--tblr-link-underline-opacity, 1))
+}
+
+.link-youtube:focus,
+.link-youtube:hover {
+  color: RGBA(204, 0, 0, var(--tblr-link-opacity, 1));
+  -webkit-text-decoration-color: RGBA(204, 0, 0, var(--tblr-link-underline-opacity, 1));
+  text-decoration-color: RGBA(204, 0, 0, var(--tblr-link-underline-opacity, 1))
+}
+
+.link-vimeo {
+  color: RGBA(var(--tblr-vimeo-rgb, var(--tblr-link-opacity, 1)));
+  -webkit-text-decoration-color: RGBA(var(--tblr-vimeo-rgb), var(--tblr-link-underline-opacity, 1));
+  text-decoration-color: RGBA(var(--tblr-vimeo-rgb), var(--tblr-link-underline-opacity, 1))
+}
+
+.link-vimeo:focus,
+.link-vimeo:hover {
+  color: RGBA(21, 146, 187, var(--tblr-link-opacity, 1));
+  -webkit-text-decoration-color: RGBA(21, 146, 187, var(--tblr-link-underline-opacity, 1));
+  text-decoration-color: RGBA(21, 146, 187, var(--tblr-link-underline-opacity, 1))
+}
+
+.link-dribbble {
+  color: RGBA(var(--tblr-dribbble-rgb, var(--tblr-link-opacity, 1)));
+  -webkit-text-decoration-color: RGBA(var(--tblr-dribbble-rgb), var(--tblr-link-underline-opacity, 1));
+  text-decoration-color: RGBA(var(--tblr-dribbble-rgb), var(--tblr-link-underline-opacity, 1))
+}
+
+.link-dribbble:focus,
+.link-dribbble:hover {
+  color: RGBA(187, 61, 110, var(--tblr-link-opacity, 1));
+  -webkit-text-decoration-color: RGBA(187, 61, 110, var(--tblr-link-underline-opacity, 1));
+  text-decoration-color: RGBA(187, 61, 110, var(--tblr-link-underline-opacity, 1))
+}
+
+.link-github {
+  color: RGBA(var(--tblr-github-rgb, var(--tblr-link-opacity, 1)));
+  -webkit-text-decoration-color: RGBA(var(--tblr-github-rgb), var(--tblr-link-underline-opacity, 1));
+  text-decoration-color: RGBA(var(--tblr-github-rgb), var(--tblr-link-underline-opacity, 1))
+}
+
+.link-github:focus,
+.link-github:hover {
+  color: RGBA(19, 18, 18, var(--tblr-link-opacity, 1));
+  -webkit-text-decoration-color: RGBA(19, 18, 18, var(--tblr-link-underline-opacity, 1));
+  text-decoration-color: RGBA(19, 18, 18, var(--tblr-link-underline-opacity, 1))
+}
+
+.link-instagram {
+  color: RGBA(var(--tblr-instagram-rgb, var(--tblr-link-opacity, 1)));
+  -webkit-text-decoration-color: RGBA(var(--tblr-instagram-rgb), var(--tblr-link-underline-opacity, 1));
+  text-decoration-color: RGBA(var(--tblr-instagram-rgb), var(--tblr-link-underline-opacity, 1))
+}
+
+.link-instagram:focus,
+.link-instagram:hover {
+  color: RGBA(182, 51, 76, var(--tblr-link-opacity, 1));
+  -webkit-text-decoration-color: RGBA(182, 51, 76, var(--tblr-link-underline-opacity, 1));
+  text-decoration-color: RGBA(182, 51, 76, var(--tblr-link-underline-opacity, 1))
+}
+
+.link-pinterest {
+  color: RGBA(var(--tblr-pinterest-rgb, var(--tblr-link-opacity, 1)));
+  -webkit-text-decoration-color: RGBA(var(--tblr-pinterest-rgb), var(--tblr-link-underline-opacity, 1));
+  text-decoration-color: RGBA(var(--tblr-pinterest-rgb), var(--tblr-link-underline-opacity, 1))
+}
+
+.link-pinterest:focus,
+.link-pinterest:hover {
+  color: RGBA(151, 6, 22, var(--tblr-link-opacity, 1));
+  -webkit-text-decoration-color: RGBA(151, 6, 22, var(--tblr-link-underline-opacity, 1));
+  text-decoration-color: RGBA(151, 6, 22, var(--tblr-link-underline-opacity, 1))
+}
+
+.link-vk {
+  color: RGBA(var(--tblr-vk-rgb, var(--tblr-link-opacity, 1)));
+  -webkit-text-decoration-color: RGBA(var(--tblr-vk-rgb), var(--tblr-link-underline-opacity, 1));
+  text-decoration-color: RGBA(var(--tblr-vk-rgb), var(--tblr-link-underline-opacity, 1))
+}
+
+.link-vk:focus,
+.link-vk:hover {
+  color: RGBA(79, 105, 134, var(--tblr-link-opacity, 1));
+  -webkit-text-decoration-color: RGBA(79, 105, 134, var(--tblr-link-underline-opacity, 1));
+  text-decoration-color: RGBA(79, 105, 134, var(--tblr-link-underline-opacity, 1))
+}
+
+.link-rss {
+  color: RGBA(var(--tblr-rss-rgb, var(--tblr-link-opacity, 1)));
+  -webkit-text-decoration-color: RGBA(var(--tblr-rss-rgb), var(--tblr-link-underline-opacity, 1));
+  text-decoration-color: RGBA(var(--tblr-rss-rgb), var(--tblr-link-underline-opacity, 1))
+}
+
+.link-rss:focus,
+.link-rss:hover {
+  color: RGBA(204, 132, 0, var(--tblr-link-opacity, 1));
+  -webkit-text-decoration-color: RGBA(204, 132, 0, var(--tblr-link-underline-opacity, 1));
+  text-decoration-color: RGBA(204, 132, 0, var(--tblr-link-underline-opacity, 1))
+}
+
+.link-flickr {
+  color: RGBA(var(--tblr-flickr-rgb, var(--tblr-link-opacity, 1)));
+  -webkit-text-decoration-color: RGBA(var(--tblr-flickr-rgb), var(--tblr-link-underline-opacity, 1));
+  text-decoration-color: RGBA(var(--tblr-flickr-rgb), var(--tblr-link-underline-opacity, 1))
+}
+
+.link-flickr:focus,
+.link-flickr:hover {
+  color: RGBA(0, 79, 176, var(--tblr-link-opacity, 1));
+  -webkit-text-decoration-color: RGBA(0, 79, 176, var(--tblr-link-underline-opacity, 1));
+  text-decoration-color: RGBA(0, 79, 176, var(--tblr-link-underline-opacity, 1))
+}
+
+.link-bitbucket {
+  color: RGBA(var(--tblr-bitbucket-rgb, var(--tblr-link-opacity, 1)));
+  -webkit-text-decoration-color: RGBA(var(--tblr-bitbucket-rgb), var(--tblr-link-underline-opacity, 1));
+  text-decoration-color: RGBA(var(--tblr-bitbucket-rgb), var(--tblr-link-underline-opacity, 1))
+}
+
+.link-bitbucket:focus,
+.link-bitbucket:hover {
+  color: RGBA(0, 66, 163, var(--tblr-link-opacity, 1));
+  -webkit-text-decoration-color: RGBA(0, 66, 163, var(--tblr-link-underline-opacity, 1));
+  text-decoration-color: RGBA(0, 66, 163, var(--tblr-link-underline-opacity, 1))
+}
+
+.link-tabler {
+  color: RGBA(var(--tblr-tabler-rgb, var(--tblr-link-opacity, 1)));
+  -webkit-text-decoration-color: RGBA(var(--tblr-tabler-rgb), var(--tblr-link-underline-opacity, 1));
+  text-decoration-color: RGBA(var(--tblr-tabler-rgb), var(--tblr-link-underline-opacity, 1))
+}
+
+.link-tabler:focus,
+.link-tabler:hover {
+  color: RGBA(26, 86, 157, var(--tblr-link-opacity, 1));
+  -webkit-text-decoration-color: RGBA(26, 86, 157, var(--tblr-link-underline-opacity, 1));
+  text-decoration-color: RGBA(26, 86, 157, var(--tblr-link-underline-opacity, 1))
+}
+
+.link-body-emphasis {
+  color: RGBA(var(--tblr-emphasis-color-rgb), var(--tblr-link-opacity, 1));
+  -webkit-text-decoration-color: RGBA(var(--tblr-emphasis-color-rgb), var(--tblr-link-underline-opacity, 1));
+  text-decoration-color: RGBA(var(--tblr-emphasis-color-rgb), var(--tblr-link-underline-opacity, 1))
+}
+
+.link-body-emphasis:focus,
+.link-body-emphasis:hover {
+  color: RGBA(var(--tblr-emphasis-color-rgb), var(--tblr-link-opacity, .75));
+  -webkit-text-decoration-color: RGBA(var(--tblr-emphasis-color-rgb), var(--tblr-link-underline-opacity, .75));
+  text-decoration-color: RGBA(var(--tblr-emphasis-color-rgb), var(--tblr-link-underline-opacity, .75))
+}
+
+.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: .375rem;
+  align-items: center;
+  -webkit-text-decoration-color: rgba(var(--tblr-link-color-rgb), var(--tblr-link-opacity, .5));
+  text-decoration-color: rgba(var(--tblr-link-color-rgb), var(--tblr-link-opacity, .5));
+  text-underline-offset: .25em;
+  -webkit-backface-visibility: hidden;
+  backface-visibility: hidden
+}
+
+.icon-link>.bi {
+  flex-shrink: 0;
+  width: 1em;
+  height: 1em;
+  fill: currentcolor;
+  transition: .2s ease-in-out transform
+}
+
+@media (prefers-reduced-motion:reduce) {
+  .icon-link>.bi {
+    transition: none
+  }
+}
+
+.icon-link-hover:focus-visible>.bi,
+.icon-link-hover:hover>.bi {
+  transform: var(--tblr-icon-link-transform, translate3d(.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-focusable:not(:focus):not(:focus-within):not(caption),
+.visually-hidden: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: 1px;
+  min-height: 1em;
+  background-color: currentcolor;
+  opacity: .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: .25 !important
+}
+
+.opacity-50 {
+  opacity: .5 !important
+}
+
+.opacity-75 {
+  opacity: .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: 0 .5rem 1rem rgba(0, 0, 0, .15) !important
+}
+
+.shadow-sm {
+  box-shadow: 0 .125rem .25rem rgba(0, 0, 0, .075) !important
+}
+
+.shadow-lg {
+  box-shadow: 0 1rem 3rem rgba(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, .14) !important
+}
+
+.border-wide {
+  border: 2px var(--tblr-border-style) rgba(4, 32, 69, .14) !important
+}
+
+.border-0 {
+  border: 0 !important
+}
+
+.border-top {
+  border-top: var(--tblr-border-width) var(--tblr-border-style) rgba(4, 32, 69, .14) !important
+}
+
+.border-top-wide {
+  border-top: 2px var(--tblr-border-style) rgba(4, 32, 69, .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, .14) !important
+}
+
+.border-end-wide {
+  border-right: 2px var(--tblr-border-style) rgba(4, 32, 69, .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, .14) !important
+}
+
+.border-bottom-wide {
+  border-bottom: 2px var(--tblr-border-style) rgba(4, 32, 69, .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, .14) !important
+}
+
+.border-start-wide {
+  border-left: 2px var(--tblr-border-style) rgba(4, 32, 69, .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: .25rem !important
+}
+
+.w-2 {
+  width: .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: .25rem !important
+}
+
+.h-2 {
+  height: .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: .25rem !important
+}
+
+.m-2 {
+  margin: .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: .25rem !important;
+  margin-left: .25rem !important
+}
+
+.mx-2 {
+  margin-right: .5rem !important;
+  margin-left: .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: .25rem !important;
+  margin-bottom: .25rem !important
+}
+
+.my-2 {
+  margin-top: .5rem !important;
+  margin-bottom: .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: .25rem !important
+}
+
+.mt-2 {
+  margin-top: .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: .25rem !important
+}
+
+.me-2 {
+  margin-right: .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: .25rem !important
+}
+
+.mb-2 {
+  margin-bottom: .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: .25rem !important
+}
+
+.ms-2 {
+  margin-left: .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: .25rem !important
+}
+
+.p-2 {
+  padding: .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: .25rem !important;
+  padding-left: .25rem !important
+}
+
+.px-2 {
+  padding-right: .5rem !important;
+  padding-left: .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: .25rem !important;
+  padding-bottom: .25rem !important
+}
+
+.py-2 {
+  padding-top: .5rem !important;
+  padding-bottom: .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: .25rem !important
+}
+
+.pt-2 {
+  padding-top: .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: .25rem !important
+}
+
+.pe-2 {
+  padding-right: .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: .25rem !important
+}
+
+.pb-2 {
+  padding-bottom: .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: .25rem !important
+}
+
+.ps-2 {
+  padding-left: .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: .25rem !important
+}
+
+.gap-2 {
+  gap: .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: .25rem !important
+}
+
+.row-gap-2 {
+  row-gap: .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: .25rem !important;
+  column-gap: .25rem !important
+}
+
+.column-gap-2 {
+  -moz-column-gap: .5rem !important;
+  column-gap: .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: .875rem !important
+}
+
+.fs-5 {
+  font-size: .75rem !important
+}
+
+.fs-6 {
+  font-size: .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
+}
+
+.text-break {
+  word-wrap: break-word !important;
+  word-break: break-word !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, .5) !important
+}
+
+.text-white-50 {
+  --tblr-text-opacity: 1;
+  color: rgba(255, 255, 255, .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: .125em !important
+}
+
+.link-offset-1-hover:hover {
+  text-underline-offset: .125em !important
+}
+
+.link-offset-2 {
+  text-underline-offset: .25em !important
+}
+
+.link-offset-2-hover:hover {
+  text-underline-offset: .25em !important
+}
+
+.link-offset-3 {
+  text-underline-offset: .375em !important
+}
+
+.link-offset-3-hover:hover {
+  text-underline-offset: .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: -.05em !important
+}
+
+.tracking-normal {
+  letter-spacing: 0 !important
+}
+
+.tracking-wide {
+  letter-spacing: .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, .14) !important;
+  border-right: var(--tblr-border-width) var(--tblr-border-style) rgba(4, 32, 69, .14) !important
+}
+
+.border-x-wide {
+  border-left: 2px var(--tblr-border-style) rgba(4, 32, 69, .14) !important;
+  border-right: 2px var(--tblr-border-style) rgba(4, 32, 69, .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, .14) !important;
+  border-bottom: var(--tblr-border-width) var(--tblr-border-style) rgba(4, 32, 69, .14) !important
+}
+
+.border-y-wide {
+  border-top: 2px var(--tblr-border-style) rgba(4, 32, 69, .14) !important;
+  border-bottom: 2px var(--tblr-border-style) rgba(4, 32, 69, .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: .25rem !important
+  }
+
+  .m-sm-2 {
+    margin: .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: .25rem !important;
+    margin-left: .25rem !important
+  }
+
+  .mx-sm-2 {
+    margin-right: .5rem !important;
+    margin-left: .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: .25rem !important;
+    margin-bottom: .25rem !important
+  }
+
+  .my-sm-2 {
+    margin-top: .5rem !important;
+    margin-bottom: .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: .25rem !important
+  }
+
+  .mt-sm-2 {
+    margin-top: .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: .25rem !important
+  }
+
+  .me-sm-2 {
+    margin-right: .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: .25rem !important
+  }
+
+  .mb-sm-2 {
+    margin-bottom: .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: .25rem !important
+  }
+
+  .ms-sm-2 {
+    margin-left: .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: .25rem !important
+  }
+
+  .p-sm-2 {
+    padding: .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: .25rem !important;
+    padding-left: .25rem !important
+  }
+
+  .px-sm-2 {
+    padding-right: .5rem !important;
+    padding-left: .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: .25rem !important;
+    padding-bottom: .25rem !important
+  }
+
+  .py-sm-2 {
+    padding-top: .5rem !important;
+    padding-bottom: .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: .25rem !important
+  }
+
+  .pt-sm-2 {
+    padding-top: .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: .25rem !important
+  }
+
+  .pe-sm-2 {
+    padding-right: .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: .25rem !important
+  }
+
+  .pb-sm-2 {
+    padding-bottom: .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: .25rem !important
+  }
+
+  .ps-sm-2 {
+    padding-left: .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: .25rem !important
+  }
+
+  .gap-sm-2 {
+    gap: .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: .25rem !important
+  }
+
+  .row-gap-sm-2 {
+    row-gap: .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: .25rem !important;
+    column-gap: .25rem !important
+  }
+
+  .column-gap-sm-2 {
+    -moz-column-gap: .5rem !important;
+    column-gap: .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: .25rem !important
+  }
+
+  .m-md-2 {
+    margin: .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: .25rem !important;
+    margin-left: .25rem !important
+  }
+
+  .mx-md-2 {
+    margin-right: .5rem !important;
+    margin-left: .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: .25rem !important;
+    margin-bottom: .25rem !important
+  }
+
+  .my-md-2 {
+    margin-top: .5rem !important;
+    margin-bottom: .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: .25rem !important
+  }
+
+  .mt-md-2 {
+    margin-top: .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: .25rem !important
+  }
+
+  .me-md-2 {
+    margin-right: .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: .25rem !important
+  }
+
+  .mb-md-2 {
+    margin-bottom: .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: .25rem !important
+  }
+
+  .ms-md-2 {
+    margin-left: .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: .25rem !important
+  }
+
+  .p-md-2 {
+    padding: .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: .25rem !important;
+    padding-left: .25rem !important
+  }
+
+  .px-md-2 {
+    padding-right: .5rem !important;
+    padding-left: .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: .25rem !important;
+    padding-bottom: .25rem !important
+  }
+
+  .py-md-2 {
+    padding-top: .5rem !important;
+    padding-bottom: .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: .25rem !important
+  }
+
+  .pt-md-2 {
+    padding-top: .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: .25rem !important
+  }
+
+  .pe-md-2 {
+    padding-right: .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: .25rem !important
+  }
+
+  .pb-md-2 {
+    padding-bottom: .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: .25rem !important
+  }
+
+  .ps-md-2 {
+    padding-left: .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: .25rem !important
+  }
+
+  .gap-md-2 {
+    gap: .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: .25rem !important
+  }
+
+  .row-gap-md-2 {
+    row-gap: .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: .25rem !important;
+    column-gap: .25rem !important
+  }
+
+  .column-gap-md-2 {
+    -moz-column-gap: .5rem !important;
+    column-gap: .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: .25rem !important
+  }
+
+  .m-lg-2 {
+    margin: .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: .25rem !important;
+    margin-left: .25rem !important
+  }
+
+  .mx-lg-2 {
+    margin-right: .5rem !important;
+    margin-left: .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: .25rem !important;
+    margin-bottom: .25rem !important
+  }
+
+  .my-lg-2 {
+    margin-top: .5rem !important;
+    margin-bottom: .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: .25rem !important
+  }
+
+  .mt-lg-2 {
+    margin-top: .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: .25rem !important
+  }
+
+  .me-lg-2 {
+    margin-right: .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: .25rem !important
+  }
+
+  .mb-lg-2 {
+    margin-bottom: .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: .25rem !important
+  }
+
+  .ms-lg-2 {
+    margin-left: .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: .25rem !important
+  }
+
+  .p-lg-2 {
+    padding: .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: .25rem !important;
+    padding-left: .25rem !important
+  }
+
+  .px-lg-2 {
+    padding-right: .5rem !important;
+    padding-left: .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: .25rem !important;
+    padding-bottom: .25rem !important
+  }
+
+  .py-lg-2 {
+    padding-top: .5rem !important;
+    padding-bottom: .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: .25rem !important
+  }
+
+  .pt-lg-2 {
+    padding-top: .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: .25rem !important
+  }
+
+  .pe-lg-2 {
+    padding-right: .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: .25rem !important
+  }
+
+  .pb-lg-2 {
+    padding-bottom: .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: .25rem !important
+  }
+
+  .ps-lg-2 {
+    padding-left: .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: .25rem !important
+  }
+
+  .gap-lg-2 {
+    gap: .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: .25rem !important
+  }
+
+  .row-gap-lg-2 {
+    row-gap: .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: .25rem !important;
+    column-gap: .25rem !important
+  }
+
+  .column-gap-lg-2 {
+    -moz-column-gap: .5rem !important;
+    column-gap: .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: .25rem !important
+  }
+
+  .m-xl-2 {
+    margin: .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: .25rem !important;
+    margin-left: .25rem !important
+  }
+
+  .mx-xl-2 {
+    margin-right: .5rem !important;
+    margin-left: .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: .25rem !important;
+    margin-bottom: .25rem !important
+  }
+
+  .my-xl-2 {
+    margin-top: .5rem !important;
+    margin-bottom: .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: .25rem !important
+  }
+
+  .mt-xl-2 {
+    margin-top: .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: .25rem !important
+  }
+
+  .me-xl-2 {
+    margin-right: .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: .25rem !important
+  }
+
+  .mb-xl-2 {
+    margin-bottom: .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: .25rem !important
+  }
+
+  .ms-xl-2 {
+    margin-left: .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: .25rem !important
+  }
+
+  .p-xl-2 {
+    padding: .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: .25rem !important;
+    padding-left: .25rem !important
+  }
+
+  .px-xl-2 {
+    padding-right: .5rem !important;
+    padding-left: .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: .25rem !important;
+    padding-bottom: .25rem !important
+  }
+
+  .py-xl-2 {
+    padding-top: .5rem !important;
+    padding-bottom: .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: .25rem !important
+  }
+
+  .pt-xl-2 {
+    padding-top: .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: .25rem !important
+  }
+
+  .pe-xl-2 {
+    padding-right: .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: .25rem !important
+  }
+
+  .pb-xl-2 {
+    padding-bottom: .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: .25rem !important
+  }
+
+  .ps-xl-2 {
+    padding-left: .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: .25rem !important
+  }
+
+  .gap-xl-2 {
+    gap: .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: .25rem !important
+  }
+
+  .row-gap-xl-2 {
+    row-gap: .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: .25rem !important;
+    column-gap: .25rem !important
+  }
+
+  .column-gap-xl-2 {
+    -moz-column-gap: .5rem !important;
+    column-gap: .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: .25rem !important
+  }
+
+  .m-xxl-2 {
+    margin: .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: .25rem !important;
+    margin-left: .25rem !important
+  }
+
+  .mx-xxl-2 {
+    margin-right: .5rem !important;
+    margin-left: .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: .25rem !important;
+    margin-bottom: .25rem !important
+  }
+
+  .my-xxl-2 {
+    margin-top: .5rem !important;
+    margin-bottom: .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: .25rem !important
+  }
+
+  .mt-xxl-2 {
+    margin-top: .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: .25rem !important
+  }
+
+  .me-xxl-2 {
+    margin-right: .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: .25rem !important
+  }
+
+  .mb-xxl-2 {
+    margin-bottom: .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: .25rem !important
+  }
+
+  .ms-xxl-2 {
+    margin-left: .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: .25rem !important
+  }
+
+  .p-xxl-2 {
+    padding: .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: .25rem !important;
+    padding-left: .25rem !important
+  }
+
+  .px-xxl-2 {
+    padding-right: .5rem !important;
+    padding-left: .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: .25rem !important;
+    padding-bottom: .25rem !important
+  }
+
+  .py-xxl-2 {
+    padding-top: .5rem !important;
+    padding-bottom: .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: .25rem !important
+  }
+
+  .pt-xxl-2 {
+    padding-top: .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: .25rem !important
+  }
+
+  .pe-xxl-2 {
+    padding-right: .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: .25rem !important
+  }
+
+  .pb-xxl-2 {
+    padding-bottom: .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: .25rem !important
+  }
+
+  .ps-xxl-2 {
+    padding-left: .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: .25rem !important
+  }
+
+  .gap-xxl-2 {
+    gap: .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: .25rem !important
+  }
+
+  .row-gap-xxl-2 {
+    row-gap: .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: .25rem !important;
+    column-gap: .25rem !important
+  }
+
+  .column-gap-xxl-2 {
+    -moz-column-gap: .5rem !important;
+    column-gap: .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
+  }
+}
+
+:host,
+:root {
+  font-size: 16px;
+  height: 100%;
+  --tblr-primary: #206bc4;
+  --tblr-primary-rgb: 32, 107, 196;
+  --tblr-primary-fg: var(--tblr-light);
+  --tblr-primary-darken: #1d60b0;
+  --tblr-primary-lt: #e9f0f9;
+  --tblr-primary-lt-rgb: 233, 240, 249;
+  --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: #206bc4;
+  --tblr-blue-rgb: 32, 107, 196;
+  --tblr-blue-fg: var(--tblr-light);
+  --tblr-blue-darken: #1d60b0;
+  --tblr-blue-lt: #e9f0f9;
+  --tblr-blue-lt-rgb: 233, 240, 249;
+  --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: #206bc4;
+  --tblr-tabler-rgb: 32, 107, 196;
+  --tblr-tabler-fg: var(--tblr-light);
+  --tblr-tabler-darken: #1d60b0;
+  --tblr-tabler-lt: #e9f0f9;
+  --tblr-tabler-lt-rgb: 233, 240, 249;
+  --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-shadow: rgba(var(--tblr-body-color-rgb), 0.04) 0 2px 4px 0;
+  --tblr-shadow-transparent: 0 0 0 0 transparent;
+  --tblr-shadow-button: 0 1px 0 rgba(var(--tblr-body-color-rgb), 0.04);
+  --tblr-shadow-button-inset: inset 0 -1px 0 rgba(var(--tblr-body-color-rgb), 0.2);
+  --tblr-shadow-card: 0 0 4px rgba(var(--tblr-body-color-rgb), 0.04);
+  --tblr-shadow-card-hover: rgba(var(--tblr-body-color-rgb), 0.16) 0 2px 16px 0;
+  --tblr-shadow-dropdown: 0px 16px 24px 2px rgba(0, 0, 0, 0.07), 0px 6px 30px 5px rgba(0, 0, 0, 0.06), 0px 8px 10px -5px rgba(0, 0, 0, 0.1)
+}
+
+@media (max-width:991.98px) {
+
+  :host,
+  :root {
+    --tblr-page-padding: var(--tblr-spacer-2)
+  }
+}
+
+@keyframes pulse {
+  from {
+    opacity: 1;
+    transform: scale3d(.8, .8, .8)
+  }
+
+  50% {
+    transform: scale3d(1, 1, 1);
+    opacity: 1
+  }
+
+  to {
+    opacity: 1;
+    transform: scale3d(.8, .8, .8)
+  }
+}
+
+@keyframes tada {
+  0% {
+    transform: scale3d(1, 1, 1)
+  }
+
+  10%,
+  5% {
+    transform: scale3d(.9, .9, .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(0)
+  }
+
+  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: 0 0
+  }
+}
+
+* {
+  scrollbar-color: rgba(var(--tblr-scrollbar-color, var(--tblr-body-color-rgb)), .16) transparent
+}
+
+::-webkit-scrollbar {
+  width: 1rem;
+  height: 1rem;
+  -webkit-transition: background .3s;
+  transition: background .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)), .16)
+}
+
+::-webkit-scrollbar-track {
+  background: 0 0
+}
+
+:hover::-webkit-scrollbar-thumb {
+  box-shadow: inset 0 0 0 1rem rgba(var(--tblr-scrollbar-color, var(--tblr-body-color-rgb)), .32)
+}
+
+::-webkit-scrollbar-corner {
+  background: 0 0
+}
+
+.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, .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 {
+  --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: .375rem;
+  right: .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: .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: 0 0;
+    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: -.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: .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: 0 0;
+    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: -.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: .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: 0 0;
+    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: -.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: .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: 0 0;
+    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: -.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: .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: 0 0;
+    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: -.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: .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: 0 0;
+  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: -.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 {
+  display: inline-flex;
+  align-items: center;
+  font-weight: var(--tblr-font-weight-bold);
+  margin: 0;
+  line-height: 1;
+  gap: .5rem
+}
+
+.navbar-brand-image {
+  height: 2rem;
+  width: auto
+}
+
+.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 .2s .2s, bottom .2s .2s, transform .2s, opacity 0s .2s;
+  position: relative
+}
+
+@media (prefers-reduced-motion:reduce) {
+  .navbar-toggler-icon {
+    transition: none
+  }
+}
+
+.navbar-toggler-icon:after,
+.navbar-toggler-icon:before {
+  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:after,
+  .navbar-toggler-icon:before {
+    transition: none
+  }
+}
+
+.navbar-toggler-icon:before {
+  top: -.45em
+}
+
+.navbar-toggler-icon:after {
+  bottom: -.45em
+}
+
+.navbar-toggler[aria-expanded=true] .navbar-toggler-icon {
+  transform: rotate(45deg);
+  transition: top .3s, bottom .3s, transform .3s .3s, opacity 0s .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 {
+  --tblr-navbar-border-color: transparent !important;
+  background: 0 0 !important
+}
+
+.navbar-nav {
+  align-items: stretch
+}
+
+.navbar-nav .nav-item {
+  display: flex;
+  flex-direction: column;
+  justify-content: center
+}
+
+.navbar-side {
+  margin: 0;
+  display: flex;
+  flex-direction: row;
+  align-items: center;
+  justify-content: space-around
+}
+
+@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 .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: .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: .5rem;
+    padding-bottom: .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: .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: 0 0;
+    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 .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: .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: .5rem;
+    padding-bottom: .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: .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: 0 0;
+    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 .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: .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: .5rem;
+    padding-bottom: .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: .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: 0 0;
+    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 .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: .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: .5rem;
+    padding-bottom: .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: .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: 0 0;
+    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 .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: .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: .5rem;
+    padding-bottom: .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: .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: 0 0;
+    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 .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: .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: .5rem;
+  padding-bottom: .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: .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: 0 0;
+  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, .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: .625rem;
+  font-weight: var(--tblr-font-weight-bold);
+  text-transform: uppercase;
+  letter-spacing: .04em;
+  line-height: 1rem;
+  color: var(--tblr-muted)
+}
+
+.page-title {
+  margin: 0;
+  font-size: 1.25rem;
+  line-height: 1.75rem;
+  font-weight: var(--tblr-font-weight-bold);
+  color: inherit;
+  display: flex;
+  align-items: center
+}
+
+.page-title svg {
+  width: 1.5rem;
+  height: 1.5rem;
+  margin-right: .25rem
+}
+
+.page-title-lg {
+  font-size: 1.5rem;
+  line-height: 2rem
+}
+
+.page-subtitle {
+  margin-top: .25rem;
+  color: var(--tblr-muted)
+}
+
+.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: .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: #fff;
+  padding: 2rem 0;
+  color: var(--tblr-muted);
+  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] {
+  --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: #307fdd;
+  --tblr-link-hover-color: #206bc4;
+  --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: #192b42;
+  --tblr-primary-lt-rgb: 25, 43, 66;
+  --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: #192b42;
+  --tblr-blue-lt-rgb: 25, 43, 66;
+  --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: #192b42;
+  --tblr-tabler-lt-rgb: 25, 43, 66
+}
+
+[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: 0;
+  box-shadow: none
+}
+
+.accordion-button:after {
+  opacity: .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-muted);
+  background: #fff;
+  border: var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent);
+  border-left: .25rem var(--tblr-border-style) var(--tblr-alert-color);
+  box-shadow: rgba(24, 36, 51, .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 {
+  color: inherit
+}
+
+.alert-important .alert-link:hover {
+  color: inherit
+}
+
+.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: -.125rem 1rem -.125rem 0
+}
+
+.alert-title {
+  font-size: .875rem;
+  line-height: 1.25rem;
+  font-weight: var(--tblr-font-weight-bold);
+  margin-bottom: .25rem;
+  color: var(--tblr-alert-color)
+}
+
+.avatar {
+  --tblr-avatar-size: 2.5rem;
+  --tblr-avatar-bg: var(--tblr-bg-surface-secondary);
+  --tblr-avatar-shadow: inset var(--tblr-border-color-translucent) 0 0 0 1px;
+  position: relative;
+  width: var(--tblr-avatar-size);
+  height: var(--tblr-avatar-size);
+  font-size: calc(var(--tblr-avatar-size)/ 2.8571428572);
+  font-weight: var(--tblr-font-weight-medium);
+  display: inline-flex;
+  align-items: center;
+  justify-content: center;
+  color: var(--tblr-muted);
+  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-shadow)
+}
+
+.avatar svg {
+  width: calc(var(--tblr-avatar-size)/ 1.6666666667);
+  height: calc(var(--tblr-avatar-size)/ 1.6666666667)
+}
+
+.avatar .badge {
+  position: absolute;
+  right: 0;
+  bottom: 0;
+  border-radius: 100rem;
+  box-shadow: 0 0 0 2px var(--tblr-bg-surface)
+}
+
+a.avatar {
+  cursor: pointer
+}
+
+.avatar-rounded {
+  border-radius: 100rem
+}
+
+.avatar-xs {
+  --tblr-avatar-size: 1.5rem
+}
+
+.avatar-xs .badge:empty {
+  width: .375rem;
+  height: .375rem
+}
+
+.avatar-sm {
+  --tblr-avatar-size: 2rem
+}
+
+.avatar-sm .badge:empty {
+  width: .5rem;
+  height: .5rem
+}
+
+.avatar-md {
+  --tblr-avatar-size: 4rem
+}
+
+.avatar-md .badge:empty {
+  width: 1rem;
+  height: 1rem
+}
+
+.avatar-lg {
+  --tblr-avatar-size: 5.5rem
+}
+
+.avatar-lg .badge:empty {
+  width: 1.375rem;
+  height: 1.375rem
+}
+
+.avatar-xl {
+  --tblr-avatar-size: 7rem
+}
+
+.avatar-xlplus {
+  --tblr-avatar-size: 9rem
+}
+
+.avatar-xl .badge:empty {
+  width: 1.75rem;
+  height: 1.75rem
+}
+
+.avatar-2xl {
+  --tblr-avatar-size: 11rem
+}
+
+.avatar-2xl .badge:empty {
+  width: 2.75rem;
+  height: 2.75rem
+}
+
+.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(-.5 * var(--tblr-avatar-size)) !important;
+  box-shadow: var(--tblr-avatar-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 .3s, background-color .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: .625rem;
+  line-height: 1;
+  margin-top: .25rem
+}
+
+.avatar-cover {
+  margin-top: calc(-.5 * var(--tblr-avatar-size));
+  box-shadow: 0 0 0 .25rem var(--tblr-card-bg, var(--tblr-body-bg))
+}
+
+.badge {
+  justify-content: center;
+  align-items: center;
+  background: #929dab;
+  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: .04em;
+  vertical-align: bottom
+}
+
+a.badge {
+  color: var(--tblr-bg-surface)
+}
+
+.badge:empty {
+  display: inline-block;
+  width: .5rem;
+  height: .5rem;
+  min-width: 0;
+  min-height: auto;
+  padding: 0;
+  border-radius: 100rem;
+  vertical-align: baseline
+}
+
+.badge .avatar {
+  box-sizing: content-box;
+  width: 1.25rem;
+  height: 1.25rem;
+  margin: 0 .5rem 0 -.5rem
+}
+
+.badge .icon {
+  width: 1em;
+  height: 1em;
+  font-size: 1rem;
+  stroke-width: 2
+}
+
+.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: 0 0
+}
+
+.breadcrumb a {
+  color: var(--tblr-breadcrumb-link-color)
+}
+
+.breadcrumb a:hover {
+  text-decoration: underline
+}
+
+.breadcrumb-muted {
+  --tblr-breadcrumb-link-color: var(--tblr-muted)
+}
+
+.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-bg: var(--tblr-bg-surface);
+  --tblr-btn-hover-bg: var(--tblr-bg-surface);
+  --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-shadow-button);
+  --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: #206bc4;
+  background-color: transparent;
+  border-color: transparent;
+  box-shadow: none
+}
+
+.btn-link .icon {
+  color: inherit
+}
+
+.btn-link:hover {
+  color: #1a569d;
+  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-shadow-button), var(--tblr-shadow-button-inset)
+}
+
+.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-shadow-button), var(--tblr-shadow-button-inset)
+}
+
+.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-shadow-button), var(--tblr-shadow-button-inset)
+}
+
+.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-shadow-button), var(--tblr-shadow-button-inset)
+}
+
+.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-shadow-button), var(--tblr-shadow-button-inset)
+}
+
+.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-shadow-button), var(--tblr-shadow-button-inset)
+}
+
+.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-shadow-button), var(--tblr-shadow-button-inset)
+}
+
+.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-shadow-button), var(--tblr-shadow-button-inset)
+}
+
+.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-shadow-button), var(--tblr-shadow-button-inset)
+}
+
+.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-shadow-button), var(--tblr-shadow-button-inset)
+}
+
+.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-shadow-button), var(--tblr-shadow-button-inset)
+}
+
+.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-shadow-button), var(--tblr-shadow-button-inset)
+}
+
+.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-shadow-button), var(--tblr-shadow-button-inset)
+}
+
+.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-shadow-button), var(--tblr-shadow-button-inset)
+}
+
+.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-shadow-button), var(--tblr-shadow-button-inset)
+}
+
+.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-shadow-button), var(--tblr-shadow-button-inset)
+}
+
+.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-shadow-button), var(--tblr-shadow-button-inset)
+}
+
+.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-shadow-button), var(--tblr-shadow-button-inset)
+}
+
+.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-shadow-button), var(--tblr-shadow-button-inset)
+}
+
+.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-shadow-button), var(--tblr-shadow-button-inset)
+}
+
+.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-shadow-button), var(--tblr-shadow-button-inset)
+}
+
+.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-shadow-button), var(--tblr-shadow-button-inset)
+}
+
+.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-shadow-button), var(--tblr-shadow-button-inset)
+}
+
+.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-shadow-button), var(--tblr-shadow-button-inset)
+}
+
+.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-shadow-button), var(--tblr-shadow-button-inset)
+}
+
+.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-shadow-button), var(--tblr-shadow-button-inset)
+}
+
+.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-shadow-button), var(--tblr-shadow-button-inset)
+}
+
+.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-shadow-button), var(--tblr-shadow-button-inset)
+}
+
+.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-shadow-button), var(--tblr-shadow-button-inset)
+}
+
+.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-shadow-button), var(--tblr-shadow-button-inset)
+}
+
+.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-shadow-button), var(--tblr-shadow-button-inset)
+}
+
+.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-shadow-button), var(--tblr-shadow-button-inset)
+}
+
+.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-shadow-button), var(--tblr-shadow-button-inset)
+}
+
+.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-shadow-button), var(--tblr-shadow-button-inset)
+}
+
+.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-shadow-button), var(--tblr-shadow-button-inset)
+}
+
+.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-shadow-button), var(--tblr-shadow-button-inset)
+}
+
+.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-group-sm>.btn,
+.btn-sm {
+  --tblr-btn-line-height: 1.5;
+  --tblr-btn-icon-size: .75rem
+}
+
+.btn-group-lg>.btn,
+.btn-lg {
+  --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: .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 .75s linear infinite
+}
+
+.btn-action {
+  padding: 0;
+  border: 0;
+  color: var(--tblr-muted);
+  display: inline-flex;
+  width: 2rem;
+  height: 2rem;
+  align-items: center;
+  justify-content: center;
+  border-radius: var(--tblr-border-radius);
+  background: 0 0
+}
+
+.btn-action:after {
+  content: none
+}
+
+.btn-action:focus {
+  outline: 0;
+  box-shadow: none
+}
+
+.btn-action.show,
+.btn-action:hover {
+  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-vertical>.btn-check:checked+.btn,
+.btn-group-vertical>.btn.active,
+.btn-group-vertical>.btn:active,
+.btn-group>.btn-check:checked+.btn,
+.btn-group>.btn.active,
+.btn-group>.btn:active {
+  z-index: 5
+}
+
+.btn-group-vertical>.btn-check:focus+.btn,
+.btn-group-vertical>.btn:focus,
+.btn-group-vertical>.btn:hover,
+.btn-group>.btn-check:focus+.btn,
+.btn-group>.btn:focus,
+.btn-group>.btn:hover {
+  z-index: 1
+}
+
+.calendar {
+  display: block;
+  font-size: .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: .5rem 0
+}
+
+.calendar-header {
+  color: var(--tblr-muted)
+}
+
+.calendar-date {
+  flex: 0 0 14.2857142857%;
+  max-width: 14.2857142857%;
+  padding: .2rem;
+  text-align: center;
+  border: 0
+}
+
+.calendar-date.next-month,
+.calendar-date.prev-month {
+  opacity: .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 .3s, border .3s, box-shadow .32s, color .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), .1);
+  transform: translateY(-50%)
+}
+
+.calendar-range.range-end .date-item,
+.calendar-range.range-start .date-item {
+  color: #fff;
+  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: .5rem;
+  height: .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), .04) 0 2px 4px 0;
+  margin: 0 3px;
+  opacity: .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, .9), rgba(24, 36, 51, 0))
+}
+
+.card {
+  transition: transform .3s ease-out, opacity .3s ease-out, box-shadow .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), .16) 0 2px 16px 0
+}
+
+.card .card {
+  box-shadow: none
+}
+
+.card-borderless,
+.card-borderless .card-footer,
+.card-borderless .card-header {
+  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-right-radius: 4px;
+  opacity: .2;
+  overflow: hidden;
+  pointer-events: none
+}
+
+.card-stamp-lg {
+  --tblr-stamp-size: 13rem
+}
+
+.card-stamp-sm {
+  --tblr-stamp-size: 8rem
+}
+
+
+.card-stamp-icon {
+  background: var(--tblr-muted);
+  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) * -.25);
+  right: calc(var(--tblr-stamp-size) * -.25);
+  font-size: calc(var(--tblr-stamp-size) * .75);
+  transform: rotate(10deg)
+}
+
+.card-stamp-icon .icon {
+  stroke-width: 2;
+  width: calc(var(--tblr-stamp-size) * .75);
+  height: calc(var(--tblr-stamp-size) * .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, .6) 100%)
+}
+
+.card-inactive {
+  pointer-events: none;
+  box-shadow: none
+}
+
+.card-inactive .card-body {
+  opacity: .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: 1rem 1.5rem;
+  text-align: center;
+  transition: background .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), .04)
+}
+
+.card-btn+.card-btn {
+  border-left: var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color)
+}
+
+.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: 1rem 1.5rem;
+  background: #666 no-repeat center/cover
+}
+
+.card-cover:before {
+  position: absolute;
+  top: 0;
+  right: 0;
+  bottom: 0;
+  left: 0;
+  content: "";
+  background: rgba(24, 36, 51, .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: -.5rem -.5rem -.5rem auto;
+  padding-left: .5rem
+}
+
+.card-actions a {
+  text-decoration: none
+}
+
+.card-header {
+  color: inherit;
+  display: flex;
+  align-items: center;
+  background: 0 0
+}
+
+.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) * .5) calc(var(--tblr-card-cap-padding-x) * .5) 0
+}
+
+.card-header-pills {
+  flex: 1;
+  margin-top: -.5rem;
+  margin-bottom: -.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, .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: 0 0;
+  border-color: transparent;
+  padding-top: 0
+}
+
+.card-footer-borderless {
+  border-top: none
+}
+
+.card-progress {
+  height: .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-muted)
+}
+
+.card-title {
+  display: block;
+  margin: 0 0 1rem;
+  font-size: 1rem;
+  font-weight: var(--tblr-font-weight-medium);
+  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-muted);
+  font-weight: 400
+}
+
+.card-header .card-subtitle {
+  margin: 0
+}
+
+.card-title .card-subtitle {
+  margin: 0 0 0 .25rem;
+  font-size: .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-options {
+  top: 1.5rem;
+  right: .75rem;
+  display: flex;
+  margin-left: auto
+}
+
+.card-options-link {
+  display: inline-block;
+  min-width: 1rem;
+  margin-left: .25rem;
+  color: var(--tblr-muted)
+}
+
+.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 {
+  margin-bottom: 0 !important
+}
+
+.card-table tr td:first-child,
+.card-table tr th:first-child {
+  padding-left: 1.5rem;
+  border-left: 0
+}
+
+.card-table tr td:last-child,
+.card-table tr th:last-child {
+  padding-right: 1.5rem;
+  border-right: 0
+}
+
+.card-table tbody tr:first-child,
+.card-table tfoot tr:first-child,
+.card-table thead tr:first-child {
+  border-top: 0
+}
+
+.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,
+.card-table thead tr:first-child td,
+.card-table thead 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 {
+  padding: 0
+}
+
+.card-code .highlight {
+  margin: 0;
+  border: 0
+}
+
+.card-code pre {
+  margin: 0 !important;
+  border: 0 !important
+}
+
+.card-chart {
+  position: relative;
+  z-index: 1;
+  height: 3.5rem
+}
+
+.card-avatar {
+  margin-left: auto;
+  margin-right: auto;
+  box-shadow: 0 0 0 .25rem var(--tblr-card-bg, var(--tblr-bg-surface));
+  margin-top: calc(-1 * var(--tblr-avatar-size) * .5)
+}
+
+.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.5rem;
+  padding-left: 1.5rem;
+  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 {
+  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
+}
+
+.btn-close {
+  cursor: pointer
+}
+
+.btn-close:focus {
+  outline: 0
+}
+
+.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: .5rem;
+  color: var(--tblr-muted);
+  opacity: .7;
+  text-align: center
+}
+
+.dropdown-item-indicator {
+  margin-right: .5rem;
+  margin-left: -.25rem;
+  height: 1.25rem;
+  display: inline-flex;
+  line-height: 1;
+  vertical-align: bottom;
+  align-items: center
+}
+
+.dropdown-header {
+  font-size: .625rem;
+  font-weight: var(--tblr-font-weight-bold);
+  text-transform: uppercase;
+  letter-spacing: .04em;
+  line-height: 1rem;
+  color: var(--tblr-muted);
+  padding-bottom: .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 .25rem
+}
+
+.dropdown-menu-arrow:before {
+  content: "";
+  position: absolute;
+  top: -.25rem;
+  left: .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(0, 9px, 9px, 0)
+}
+
+.dropdown-menu-arrow.dropdown-menu-end:before {
+  right: .75rem;
+  left: auto
+}
+
+.dropend>.dropdown-menu {
+  margin-top: calc(-.25rem - 1px);
+  margin-left: -.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: .625rem;
+  font-weight: var(--tblr-font-weight-bold);
+  text-transform: uppercase;
+  letter-spacing: .04em;
+  line-height: 1rem;
+  color: var(--tblr-muted);
+  margin-bottom: .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-muted)
+}
+
+.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-muted)
+}
+
+.empty-title {
+  font-size: 1.25rem;
+  line-height: 1.75rem;
+  font-weight: var(--tblr-font-weight-bold)
+}
+
+.empty-subtitle,
+.empty-title {
+  margin: 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) * .5);
+  padding-left: calc(var(--tblr-gutter-x) * .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) * .5);
+  padding-left: calc(var(--tblr-gutter-x) * .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) * .5);
+  padding-left: calc(var(--tblr-gutter-x) * .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: -.375rem;
+  margin-left: -.375rem
+}
+
+.row-sm>.col,
+.row-sm>[class*=col-] {
+  padding-right: .375rem;
+  padding-left: .375rem
+}
+
+.row-sm .card {
+  margin-bottom: .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: .25rem
+}
+
+.space-x-1 {
+  display: flex;
+  gap: .25rem
+}
+
+.space-y-2 {
+  display: flex;
+  flex-direction: column;
+  gap: .5rem
+}
+
+.space-x-2 {
+  display: flex;
+  gap: .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: .25rem !important
+}
+
+.divide-y-1>:not(template):not(:last-child) {
+  padding-bottom: .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: .25rem !important
+}
+
+.divide-x-1>:not(template):not(:last-child) {
+  padding-right: .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: .5rem !important
+}
+
+.divide-y-2>:not(template):not(:last-child) {
+  padding-bottom: .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: .5rem !important
+}
+
+.divide-x-2>:not(template):not(:last-child) {
+  padding-right: .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: -.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 .15s ease 0s;
+  animation: pulse 2s ease infinite;
+  animation-fill-mode: both
+}
+
+.icon-tada {
+  transition: all .15s ease 0s;
+  animation: tada 3s ease infinite;
+  animation-fill-mode: both
+}
+
+.icon-rotate {
+  transition: all .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
+}
+
+.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: .25rem;
+  color: #d63939
+}
+
+.form-label-description {
+  float: right;
+  font-weight: var(--tblr-font-weight-normal);
+  color: var(--tblr-muted)
+}
+
+.form-hint {
+  display: block;
+  color: var(--tblr-muted)
+}
+
+.form-hint:last-child {
+  margin-bottom: 0
+}
+
+.form-hint+.form-control {
+  margin-top: .25rem
+}
+
+.form-label+.form-hint {
+  margin-top: -.25rem
+}
+
+.form-control+.form-hint,
+.form-select+.form-hint,
+.input-group+.form-hint {
+  margin-top: .5rem
+}
+
+.form-select:-moz-focusring {
+  color: var(--tblr-body-color)
+}
+
+.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-muted);
+  -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, .1);
+  color: #fff;
+  border-color: transparent
+}
+
+.form-control-dark:focus {
+  background-color: rgba(0, 0, 0, .1);
+  box-shadow: none;
+  border-color: rgba(255, 255, 255, .24)
+}
+
+.form-control-dark::-webkit-input-placeholder {
+  color: rgba(255, 255, 255, .6)
+}
+
+.form-control-dark:-ms-input-placeholder {
+  color: rgba(255, 255, 255, .6)
+}
+
+.form-control-dark::-ms-input-placeholder {
+  color: rgba(255, 255, 255, .6)
+}
+
+.form-control-dark::placeholder {
+  color: rgba(255, 255, 255, .6)
+}
+
+.form-control-rounded {
+  border-radius: 10rem
+}
+
+.form-control-flush {
+  padding: 0;
+  background: 0 0 !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 {
+  display: inline-flex;
+  font-weight: var(--tblr-font-weight-bold);
+  align-items: center;
+  justify-content: center;
+  width: 1.125rem;
+  height: 1.125rem;
+  font-size: .75rem;
+  color: var(--tblr-muted);
+  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 .3s, color .3s
+}
+
+@media (prefers-reduced-motion:reduce) {
+  .form-help {
+    transition: none
+  }
+}
+
+.form-help:hover,
+.form-help[aria-describedby] {
+  color: #fff;
+  background: var(--tblr-primary)
+}
+
+.input-group-link {
+  font-size: .75rem
+}
+
+.input-group-flat:focus-within {
+  box-shadow: 0 0 0 .25rem rgba(32, 107, 196, .25);
+  border-radius: var(--tblr-border-radius)
+}
+
+.input-group-flat:focus-within .form-control,
+.input-group-flat:focus-within .input-group-text {
+  border-color: #90b5e2 !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 .15s ease-in-out, box-shadow .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
+}
+
+.form-file-button {
+  margin-left: 0;
+  border-left: 0
+}
+
+.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
+}
+
+.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: #fff;
+  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, .05)
+}
+
+.form-colorinput-color:before {
+  position: absolute;
+  top: 0;
+  left: 0;
+  width: 100%;
+  height: 100%;
+  content: "";
+  background: no-repeat center center/1rem;
+  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 .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 .25rem rgba(32, 107, 196, .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")
+}
+
+.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 .25rem rgba(32, 107, 196, .25)
+}
+
+.form-imagecheck-input:checked~.form-imagecheck-figure {
+  border-color: var(--tblr-primary)
+}
+
+.form-imagecheck-figure:before {
+  position: absolute;
+  top: .25rem;
+  left: .25rem;
+  z-index: 1;
+  display: block;
+  width: 1rem;
+  height: 1rem;
+  color: #fff;
+  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 .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: 1rem;
+  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: .64;
+  transition: opacity .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-input:checked~.form-imagecheck-figure .form-imagecheck-image,
+.form-imagecheck-input:focus~.form-imagecheck-figure .form-imagecheck-image,
+.form-imagecheck:hover .form-imagecheck-image {
+  opacity: 1
+}
+
+.form-imagecheck-caption {
+  padding: .25rem;
+  font-size: .765625rem;
+  color: var(--tblr-muted);
+  text-align: center;
+  transition: color .3s
+}
+
+@media (prefers-reduced-motion:reduce) {
+  .form-imagecheck-caption {
+    transition: none
+  }
+}
+
+.form-imagecheck-input:checked~.form-imagecheck-figure .form-imagecheck-caption,
+.form-imagecheck-input:focus~.form-imagecheck-figure .form-imagecheck-caption,
+.form-imagecheck:hover .form-imagecheck-caption {
+  color: var(--tblr-body-color)
+}
+
+.form-selectgroup {
+  display: inline-flex;
+  margin: 0 -.5rem -.5rem 0;
+  flex-wrap: wrap
+}
+
+.form-selectgroup .form-selectgroup-item {
+  margin: 0 .5rem .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 + .875rem + calc(var(--tblr-border-width) * 2));
+  margin: 0;
+  padding: .4375rem .75rem;
+  font-size: .875rem;
+  line-height: 1.4285714286;
+  color: var(--tblr-muted);
+  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;
+  transition: border-color .3s, background .3s, color .3s
+}
+
+@media (prefers-reduced-motion:reduce) {
+  .form-selectgroup-label {
+    transition: none
+  }
+}
+
+.form-selectgroup-label .icon:only-child {
+  margin: 0 -.25rem
+}
+
+.form-selectgroup-label:hover {
+  color: var(--tblr-body-color)
+}
+
+.form-selectgroup-check {
+  display: inline-block;
+  width: 1rem;
+  height: 1rem;
+  border: var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent);
+  vertical-align: middle
+}
+
+.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: 1rem;
+  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: .4375rem;
+  right: .4375rem
+}
+
+.form-selectgroup-input:checked+.form-selectgroup-label {
+  z-index: 1;
+  color: var(--tblr-primary);
+  background: rgba(var(--tblr-primary-rgb), .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 .25rem rgba(32, 107, 196, .25)
+}
+
+.form-selectgroup-boxes .form-selectgroup-label {
+  text-align: left;
+  padding: 1.5rem 1rem;
+  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
+}
+
+.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
+}
+
+.form-control-color::-webkit-color-swatch {
+  border: none
+}
+
+[type=search]::-webkit-search-cancel-button {
+  -webkit-appearance: none
+}
+
+.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 {
+  -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-muted)
+}
+
+.form-check .form-check-label-off {
+  color: var(--tblr-muted)
+}
+
+.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: 1rem;
+  margin-top: .125rem
+}
+
+.form-switch .form-check-input {
+  transition: background-color .3s, background-position .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: .25rem;
+  color: #d63939
+}
+
+.form-check-description {
+  display: block;
+  color: var(--tblr-muted);
+  font-size: .75rem;
+  margin-top: .25rem
+}
+
+.form-check-single {
+  margin: 0
+}
+
+.form-check-single .form-check-input {
+  margin: 0
+}
+
+.form-switch .form-check-input {
+  height: 1.125rem;
+  margin-top: .0625rem
+}
+
+.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: .125rem
+}
+
+.form-check-input:checked {
+  border: none
+}
+
+.form-control.is-invalid-lite,
+.form-control.is-valid-lite,
+.form-select.is-invalid-lite,
+.form-select.is-valid-lite {
+  border-color: var(--tblr-border-color) !important
+}
+
+.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)
+}
+
+.list-group {
+  margin-left: 0;
+  margin-right: 0
+}
+
+.list-group-header {
+  background: var(--tblr-bg-surface-tertiary);
+  padding: .5rem 1.5rem;
+  font-size: .75rem;
+  font-weight: var(--tblr-font-weight-medium);
+  line-height: 1;
+  text-transform: uppercase;
+  color: var(--tblr-muted);
+  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-muted-rgb), .04);
+  border-left-color: #206bc4;
+  border-left-width: 2px
+}
+
+.list-group-item:active,
+.list-group-item:focus,
+.list-group-item:hover {
+  background-color: rgba(var(--tblr-muted-rgb), .04)
+}
+
+.list-group-item.disabled,
+.list-group-item:disabled {
+  color: #929dab;
+  background-color: rgba(var(--tblr-muted-rgb), .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 .3s
+}
+
+@media (prefers-reduced-motion:reduce) {
+  .list-group-hoverable .list-group-item-actions {
+    transition: none
+  }
+}
+
+.list-group-hoverable .list-group-item-actions.show,
+.list-group-hoverable .list-group-item:hover .list-group-item-actions {
+  opacity: 1
+}
+
+.list-group-transparent {
+  --tblr-list-group-border-radius: 0;
+  margin: 0 -1.5rem
+}
+
+.list-group-transparent .list-group-item {
+  background: 0 0;
+  border: 0
+}
+
+.list-group-transparent .list-group-item .icon {
+  color: var(--tblr-muted)
+}
+
+.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)
+}
+
+.list-inline-item:not(:last-child) {
+  margin-right: auto;
+  -webkit-margin-end: .5rem;
+  margin-inline-end: .5rem
+}
+
+.list-inline-dots .list-inline-item+.list-inline-item:before {
+  content: " · ";
+  -webkit-margin-end: .5rem;
+  margin-inline-end: .5rem
+}
+
+.loader {
+  position: relative;
+  display: block;
+  width: 2.5rem;
+  height: 2.5rem;
+  color: #206bc4;
+  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 .6s linear;
+  animation-iteration-count: infinite
+}
+
+.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: .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)), .16) transparent
+}
+
+.modal-body::-webkit-scrollbar {
+  width: 1rem;
+  height: 1rem;
+  -webkit-transition: background .3s;
+  transition: background .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)), .16)
+}
+
+.modal-body::-webkit-scrollbar-track {
+  background: 0 0
+}
+
+.modal-body:hover::-webkit-scrollbar-thumb {
+  box-shadow: inset 0 0 0 1rem rgba(var(--tblr-scrollbar-color, var(--tblr-body-color-rgb)), .32)
+}
+
+.modal-body::-webkit-scrollbar-corner {
+  background: 0 0
+}
+
+.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-muted);
+  border-radius: var(--tblr-border-radius-lg) var(--tblr-border-radius-lg) 0 0
+}
+
+.modal-header {
+  align-items: center;
+  min-height: 3.5rem;
+  background: 0 0;
+  padding: 0 3.5rem 0 1.5rem
+}
+
+.modal-title {
+  font-size: 1rem;
+  font-weight: var(--tblr-font-weight-bold);
+  line-height: 1.4285714286
+}
+
+.modal-footer {
+  padding-top: .75rem;
+  padding-bottom: .75rem
+}
+
+.modal-blur {
+  -webkit-backdrop-filter: blur(4px);
+  backdrop-filter: blur(4px)
+}
+
+.modal-full-width {
+  max-width: none;
+  margin: 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: .5rem
+}
+
+.nav-vertical .nav-item.show .nav-link,
+.nav-vertical .nav-link.active {
+  font-weight: var(--tblr-font-weight-bold)
+}
+
+.nav-vertical.nav-pills {
+  margin: 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-muted)
+}
+
+.nav-bordered .nav-item.show .nav-link,
+.nav-bordered .nav-link.active {
+  color: var(--tblr-primary);
+  border-color: var(--tblr-primary)
+}
+
+.nav-link {
+  display: flex;
+  transition: color .3s;
+  align-items: center
+}
+
+@media (prefers-reduced-motion:reduce) {
+  .nav-link {
+    transition: none
+  }
+}
+
+.nav-link-toggle {
+  margin-left: auto;
+  padding: 0 .25rem;
+  transition: transform .3s
+}
+
+@media (prefers-reduced-motion:reduce) {
+  .nav-link-toggle {
+    transition: none
+  }
+}
+
+.nav-link-toggle:after {
+  content: "";
+  display: inline-block;
+  vertical-align: .306em;
+  width: .36em;
+  height: .36em;
+  border-bottom: 1px var(--tblr-border-style);
+  border-left: 1px var(--tblr-border-style);
+  margin-right: .1em;
+  margin-left: .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: .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: .75rem
+}
+
+.stars .star:not(:first-child) {
+  margin-left: .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: 0 0
+}
+
+.page-item.page-next,
+.page-item.page-prev {
+  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-muted);
+  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: #206bc4
+}
+
+.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 {
+  position: relative;
+  width: 100%;
+  line-height: .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: .25rem
+}
+
+.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(.65, .815, .735, .395) infinite
+}
+
+.progress-separated .progress-bar {
+  box-shadow: 0 0 0 2px var(--tblr-card-bg, var(--tblr-bg-surface))
+}
+
+.progressbg {
+  position: relative;
+  padding: .25rem .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: 0 0;
+  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: .75rem;
+  right: calc(-1 * var(--tblr-ribbon-margin));
+  z-index: 1;
+  padding: .25rem .75rem;
+  font-size: .625rem;
+  font-weight: var(--tblr-font-weight-bold);
+  line-height: 1;
+  color: #fff;
+  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) * .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), .1) !important
+}
+
+.ribbon.bg-azure {
+  border-color: var(--tblr-azure)
+}
+
+.ribbon.bg-azure-lt {
+  border-color: rgba(var(--tblr-azure-rgb), .1) !important
+}
+
+.ribbon.bg-indigo {
+  border-color: var(--tblr-indigo)
+}
+
+.ribbon.bg-indigo-lt {
+  border-color: rgba(var(--tblr-indigo-rgb), .1) !important
+}
+
+.ribbon.bg-purple {
+  border-color: var(--tblr-purple)
+}
+
+.ribbon.bg-purple-lt {
+  border-color: rgba(var(--tblr-purple-rgb), .1) !important
+}
+
+.ribbon.bg-pink {
+  border-color: var(--tblr-pink)
+}
+
+.ribbon.bg-pink-lt {
+  border-color: rgba(var(--tblr-pink-rgb), .1) !important
+}
+
+.ribbon.bg-red {
+  border-color: var(--tblr-red)
+}
+
+.ribbon.bg-red-lt {
+  border-color: rgba(var(--tblr-red-rgb), .1) !important
+}
+
+.ribbon.bg-orange {
+  border-color: var(--tblr-orange)
+}
+
+.ribbon.bg-orange-lt {
+  border-color: rgba(var(--tblr-orange-rgb), .1) !important
+}
+
+.ribbon.bg-yellow {
+  border-color: var(--tblr-yellow)
+}
+
+.ribbon.bg-yellow-lt {
+  border-color: rgba(var(--tblr-yellow-rgb), .1) !important
+}
+
+.ribbon.bg-lime {
+  border-color: var(--tblr-lime)
+}
+
+.ribbon.bg-lime-lt {
+  border-color: rgba(var(--tblr-lime-rgb), .1) !important
+}
+
+.ribbon.bg-green {
+  border-color: var(--tblr-green)
+}
+
+.ribbon.bg-green-lt {
+  border-color: rgba(var(--tblr-green-rgb), .1) !important
+}
+
+.ribbon.bg-teal {
+  border-color: var(--tblr-teal)
+}
+
+.ribbon.bg-teal-lt {
+  border-color: rgba(var(--tblr-teal-rgb), .1) !important
+}
+
+.ribbon.bg-cyan {
+  border-color: var(--tblr-cyan)
+}
+
+.ribbon.bg-cyan-lt {
+  border-color: rgba(var(--tblr-cyan-rgb), .1) !important
+}
+
+.ribbon .icon {
+  width: 1.25rem;
+  height: 1.25rem;
+  font-size: 1.25rem
+}
+
+.ribbon-top {
+  top: calc(-1 * var(--tblr-ribbon-margin));
+  right: .75rem;
+  width: 2rem;
+  padding: .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: .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: .75rem
+}
+
+.ribbon-bookmark {
+  padding-left: .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: .5rem
+}
+
+.ribbon-bookmark.ribbon-left {
+  padding-right: .5rem
+}
+
+.ribbon-bookmark.ribbon-left:after {
+  right: auto;
+  left: 100%;
+  border-right-color: transparent;
+  border-right-width: .5rem;
+  border-left-width: 0
+}
+
+.ribbon-bookmark.ribbon-top {
+  padding-right: 0;
+  padding-bottom: .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: .5rem
+}
+
+.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>.h2,
+.markdown>.h3,
+.markdown>.h4,
+.markdown>.h5,
+.markdown>.h6,
+.markdown>h1,
+.markdown>h2,
+.markdown>h3,
+.markdown>h4,
+.markdown>h5,
+.markdown>h6 {
+  font-weight: var(--tblr-font-weight-bold)
+}
+
+.markdown>blockquote {
+  font-size: 1rem;
+  margin: 1.5rem 0;
+  padding: .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) * .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) * .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: .25rem .75rem;
+  gap: .5rem;
+  color: var(--tblr-status-color);
+  background: rgba(var(--tblr-status-color-rgb), .1);
+  font-size: .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: 0 0 !important;
+  color: var(--tblr-body-color) !important
+}
+
+.status-primary {
+  --tblr-status-color: #206bc4;
+  --tblr-status-color-rgb: 32, 107, 196
+}
+
+.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: #206bc4;
+  --tblr-status-color-rgb: 32, 107, 196
+}
+
+.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: #206bc4;
+  --tblr-status-color-rgb: 32, 107, 196
+}
+
+.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: .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: .1
+}
+
+.status-indicator-circle:nth-child(3) {
+  z-index: 1;
+  opacity: .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: 0 0;
+  width: 1.25rem;
+  height: 1.25rem;
+  vertical-align: bottom;
+  position: relative;
+  cursor: pointer
+}
+
+.switch-icon.disabled {
+  pointer-events: none;
+  opacity: .4
+}
+
+.switch-icon:focus {
+  outline: 0
+}
+
+.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 .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 .5s, transform 0s .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 .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 .2s, transform .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(0)
+}
+
+.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(0)
+}
+
+.switch-icon-slide-down,
+.switch-icon-slide-left,
+.switch-icon-slide-right,
+.switch-icon-slide-up {
+  overflow: hidden
+}
+
+.switch-icon-slide-down .switch-icon-a,
+.switch-icon-slide-down .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-up .switch-icon-a,
+.switch-icon-slide-up .switch-icon-b {
+  transition: opacity .3s, transform .3s
+}
+
+@media (prefers-reduced-motion:reduce) {
+
+  .switch-icon-slide-down .switch-icon-a,
+  .switch-icon-slide-down .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-up .switch-icon-a,
+  .switch-icon-slide-up .switch-icon-b {
+    transition: none
+  }
+}
+
+.switch-icon-slide-down .switch-icon-a,
+.switch-icon-slide-left .switch-icon-a,
+.switch-icon-slide-right .switch-icon-a,
+.switch-icon-slide-up .switch-icon-a {
+  transform: translateY(0)
+}
+
+.switch-icon-slide-down .switch-icon-b,
+.switch-icon-slide-left .switch-icon-b,
+.switch-icon-slide-right .switch-icon-b,
+.switch-icon-slide-up .switch-icon-b {
+  transform: translateY(100%)
+}
+
+.switch-icon-slide-down.active .switch-icon-a,
+.switch-icon-slide-left.active .switch-icon-a,
+.switch-icon-slide-right.active .switch-icon-a,
+.switch-icon-slide-up.active .switch-icon-a {
+  transform: translateY(-100%)
+}
+
+.switch-icon-slide-down.active .switch-icon-b,
+.switch-icon-slide-left.active .switch-icon-b,
+.switch-icon-slide-right.active .switch-icon-b,
+.switch-icon-slide-up.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)
+}
+
+.markdown>table thead th,
+.table thead th {
+  color: var(--tblr-muted);
+  background: var(--tblr-bg-surface-tertiary);
+  font-size: .625rem;
+  font-weight: var(--tblr-font-weight-bold);
+  text-transform: uppercase;
+  letter-spacing: .04em;
+  line-height: 1rem;
+  color: var(--tblr-muted);
+  padding-top: .5rem;
+  padding-bottom: .5rem;
+  white-space: nowrap
+}
+
+@media print {
+
+  .markdown>table thead th,
+  .table thead th {
+    background: 0 0
+  }
+}
+
+.table-responsive .markdown>table,
+.table-responsive .table {
+  margin-bottom: 0
+}
+
+.table-responsive+.card-footer {
+  border-top: 0
+}
+
+.table-transparent thead th {
+  background: 0 0
+}
+
+.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: .75rem .75rem !important;
+  border: none;
+  color: var(--tblr-body-color) !important
+}
+
+.table-mobile td[data-label]:before {
+  font-size: .625rem;
+  font-weight: var(--tblr-font-weight-bold);
+  text-transform: uppercase;
+  letter-spacing: .04em;
+  line-height: 1rem;
+  color: var(--tblr-muted);
+  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: .75rem .75rem !important;
+    border: none;
+    color: var(--tblr-body-color) !important
+  }
+
+  .table-mobile-sm td[data-label]:before {
+    font-size: .625rem;
+    font-weight: var(--tblr-font-weight-bold);
+    text-transform: uppercase;
+    letter-spacing: .04em;
+    line-height: 1rem;
+    color: var(--tblr-muted);
+    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: .75rem .75rem !important;
+    border: none;
+    color: var(--tblr-body-color) !important
+  }
+
+  .table-mobile-md td[data-label]:before {
+    font-size: .625rem;
+    font-weight: var(--tblr-font-weight-bold);
+    text-transform: uppercase;
+    letter-spacing: .04em;
+    line-height: 1rem;
+    color: var(--tblr-muted);
+    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: .75rem .75rem !important;
+    border: none;
+    color: var(--tblr-body-color) !important
+  }
+
+  .table-mobile-lg td[data-label]:before {
+    font-size: .625rem;
+    font-weight: var(--tblr-font-weight-bold);
+    text-transform: uppercase;
+    letter-spacing: .04em;
+    line-height: 1rem;
+    color: var(--tblr-muted);
+    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: .75rem .75rem !important;
+    border: none;
+    color: var(--tblr-body-color) !important
+  }
+
+  .table-mobile-xl td[data-label]:before {
+    font-size: .625rem;
+    font-weight: var(--tblr-font-weight-bold);
+    text-transform: uppercase;
+    letter-spacing: .04em;
+    line-height: 1rem;
+    color: var(--tblr-muted);
+    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: .75rem .75rem !important;
+    border: none;
+    color: var(--tblr-body-color) !important
+  }
+
+  .table-mobile-xxl td[data-label]:before {
+    font-size: .625rem;
+    font-weight: var(--tblr-font-weight-bold);
+    text-transform: uppercase;
+    letter-spacing: .04em;
+    line-height: 1rem;
+    color: var(--tblr-muted);
+    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 {
+  font: inherit;
+  color: inherit;
+  text-transform: inherit;
+  letter-spacing: inherit;
+  border: 0;
+  background: inherit;
+  display: block;
+  width: 100%;
+  text-align: inherit;
+  transition: color .3s;
+  margin: -.5rem -.75rem;
+  padding: .5rem .75rem
+}
+
+@media (prefers-reduced-motion:reduce) {
+  .table-sort {
+    transition: none
+  }
+}
+
+.table-sort.asc,
+.table-sort.desc,
+.table-sort:hover {
+  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: .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: 0 0
+}
+
+.toast {
+  background: #fff;
+  border: var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent);
+  box-shadow: rgba(24, 36, 51, .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: 0
+}
+
+.toast-primary {
+  --tblr-toast-color: #206bc4
+}
+
+.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: #206bc4
+}
+
+.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: #206bc4
+}
+
+.toolbar {
+  display: flex;
+  flex-wrap: nowrap;
+  flex-shrink: 0;
+  margin: 0 -.5rem
+}
+
+.toolbar>* {
+  margin: 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: .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-muted);
+  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
+}
+
+.hr-text {
+  display: flex;
+  align-items: center;
+  margin: 2rem 0;
+  font-size: .625rem;
+  font-weight: var(--tblr-font-weight-bold);
+  text-transform: uppercase;
+  letter-spacing: .04em;
+  line-height: 1rem;
+  color: var(--tblr-muted);
+  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: .5rem
+}
+
+.hr-text:after {
+  content: "";
+  margin-left: .5rem
+}
+
+.hr-text>:first-child {
+  padding-right: .5rem;
+  padding-left: 0;
+  color: var(--tblr-muted)
+}
+
+.hr-text.hr-text-left:before {
+  content: none
+}
+
+.hr-text.hr-text-left>:first-child {
+  padding-right: .5rem;
+  padding-left: .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: .5rem
+}
+
+.card>.hr-text {
+  margin: 0
+}
+
+.hr-text-spaceless {
+  margin: -.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,
+b,
+strong {
+  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: "— "
+}
+
+ol,
+ul {
+  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: 0 0
+}
+
+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
+}
+
+::-moz-selection {
+  background-color: rgba(var(--tblr-primary-rgb), .16)
+}
+
+::selection {
+  background-color: rgba(var(--tblr-primary-rgb), .16)
+}
+
+[class*=" link-"].disabled,
+[class^=link-].disabled {
+  color: var(--tblr-disabled-color);
+  pointer-events: none
+}
+
+.subheader {
+  font-size: .625rem;
+  font-weight: var(--tblr-font-weight-bold);
+  text-transform: uppercase;
+  letter-spacing: .04em;
+  line-height: 1rem;
+  color: var(--tblr-muted)
+}
+
+.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 {
+  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: .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, .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
+}
+
+.bg-white-overlay {
+  color: #fff;
+  background-color: rgba(252, 253, 254, .24)
+}
+
+.bg-dark-overlay {
+  color: #fff;
+  background-color: rgba(24, 36, 51, .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: #206bc4 !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: #206bc4 !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: red !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: orange !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: #206bc4 !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: #fff !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 {
+  overflow-x: hidden;
+  overflow-y: auto;
+  -webkit-overflow-scrolling: touch
+}
+
+.scrollable.hover {
+  overflow-y: hidden
+}
+
+.scrollable.hover>* {
+  margin-top: -1px
+}
+
+.scrollable.hover:active,
+.scrollable.hover:focus,
+.scrollable.hover:hover {
+  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: .25rem !important
+}
+
+.h-1 {
+  height: .25rem !important
+}
+
+.w-2 {
+  width: .5rem !important
+}
+
+.h-2 {
+  height: .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: .05 !important
+}
+
+.opacity-10 {
+  opacity: .1 !important
+}
+
+.opacity-15 {
+  opacity: .15 !important
+}
+
+.opacity-20 {
+  opacity: .2 !important
+}
+
+.opacity-25 {
+  opacity: .25 !important
+}
+
+.opacity-30 {
+  opacity: .3 !important
+}
+
+.opacity-35 {
+  opacity: .35 !important
+}
+
+.opacity-40 {
+  opacity: .4 !important
+}
+
+.opacity-45 {
+  opacity: .45 !important
+}
+
+.opacity-50 {
+  opacity: .5 !important
+}
+
+.opacity-55 {
+  opacity: .55 !important
+}
+
+.opacity-60 {
+  opacity: .6 !important
+}
+
+.opacity-65 {
+  opacity: .65 !important
+}
+
+.opacity-70 {
+  opacity: .7 !important
+}
+
+.opacity-75 {
+  opacity: .75 !important
+}
+
+.opacity-80 {
+  opacity: .8 !important
+}
+
+.opacity-85 {
+  opacity: .85 !important
+}
+
+.opacity-90 {
+  opacity: .9 !important
+}
+
+.opacity-95 {
+  opacity: .95 !important
+}
+
+.opacity-100 {
+  opacity: 1 !important
+}
+
+.hover-shadow-sm:hover {
+  box-shadow: 0 .125rem .25rem rgba(0, 0, 0, .075) !important
+}
+
+.hover-shadow:hover {
+  box-shadow: 0 .5rem 1rem rgba(0, 0, 0, .15) !important
+}
+
+.hover-shadow-lg:hover {
+  box-shadow: 0 1rem 3rem rgba(0, 0, 0, .175) !important
+}
+
+.hover-shadow-none:hover {
+  box-shadow: none !important
+}
+
+.antialiased {
+  -webkit-font-smoothing: antialiased;
+  -moz-osx-font-smoothing: grayscale
+}
+
+.subpixel-antialiased {
+  -webkit-font-smoothing: auto;
+  -moz-osx-font-smoothing: auto
+}

+ 35 - 0
public/js/demo-theme.js

@@ -0,0 +1,35 @@
+/*!
+* Tabler v1.0.0-beta19 (https://tabler.io)
+* @version 1.0.0-beta19
+* @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 (factory) {
+	typeof define === 'function' && define.amd ? define(factory) :
+	factory();
+})((function () { 'use strict';
+
+	var themeStorageKey = "tablerTheme";
+	var defaultTheme = "light";
+	var selectedTheme;
+	var params = new Proxy(new URLSearchParams(window.location.search), {
+	  get: function get(searchParams, prop) {
+	    return searchParams.get(prop);
+	  }
+	});
+	if (!!params.theme) {
+	  localStorage.setItem(themeStorageKey, params.theme);
+	  selectedTheme = params.theme;
+	} else {
+	  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");
+	}
+
+}));

+ 132 - 0
public/js/demo.js

@@ -0,0 +1,132 @@
+/*!
+* Tabler v1.0.0-beta19 (https://tabler.io)
+* @version 1.0.0-beta19
+* @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 (factory) {
+  typeof define === 'function' && define.amd ? define(factory) :
+  factory();
+})((function () { 'use strict';
+
+  function _iterableToArrayLimit(arr, i) {
+    var _i = null == arr ? null : "undefined" != typeof Symbol && arr[Symbol.iterator] || arr["@@iterator"];
+    if (null != _i) {
+      var _s,
+        _e,
+        _x,
+        _r,
+        _arr = [],
+        _n = !0,
+        _d = !1;
+      try {
+        if (_x = (_i = _i.call(arr)).next, 0 === i) {
+          if (Object(_i) !== _i) return;
+          _n = !1;
+        } else for (; !(_n = (_s = _x.call(_i)).done) && (_arr.push(_s.value), _arr.length !== i); _n = !0);
+      } catch (err) {
+        _d = !0, _e = err;
+      } finally {
+        try {
+          if (!_n && null != _i.return && (_r = _i.return(), Object(_r) !== _r)) return;
+        } finally {
+          if (_d) throw _e;
+        }
+      }
+      return _arr;
+    }
+  }
+  function _slicedToArray(arr, i) {
+    return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest();
+  }
+  function _arrayWithHoles(arr) {
+    if (Array.isArray(arr)) return arr;
+  }
+  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 _nonIterableRest() {
+    throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
+  }
+
+  var items = {
+    "menu-position": {
+      localStorage: "tablerMenuPosition",
+      default: "top"
+    },
+    "menu-behavior": {
+      localStorage: "tablerMenuBehavior",
+      default: "sticky"
+    },
+    "container-layout": {
+      localStorage: "tablerContainerLayout",
+      default: "boxed"
+    }
+  };
+  var config = {};
+  for (var _i = 0, _Object$entries = Object.entries(items); _i < _Object$entries.length; _i++) {
+    var _Object$entries$_i = _slicedToArray(_Object$entries[_i], 2),
+      key = _Object$entries$_i[0],
+      params = _Object$entries$_i[1];
+    var lsParams = localStorage.getItem(params.localStorage);
+    config[key] = lsParams ? lsParams : params.default;
+  }
+  var parseUrl = function parseUrl() {
+    var search = window.location.search.substring(1);
+    var params = search.split("&");
+    for (var i = 0; i < params.length; i++) {
+      var arr = params[i].split("=");
+      var _key = arr[0];
+      var value = arr[1];
+      if (!!items[_key]) {
+        localStorage.setItem(items[_key].localStorage, value);
+        config[_key] = value;
+      }
+    }
+  };
+  var toggleFormControls = function toggleFormControls(form) {
+    for (var _i2 = 0, _Object$entries2 = Object.entries(items); _i2 < _Object$entries2.length; _i2++) {
+      var _Object$entries2$_i = _slicedToArray(_Object$entries2[_i2], 2),
+        _key2 = _Object$entries2$_i[0];
+        _Object$entries2$_i[1];
+      var elem = form.querySelector("[name=\"settings-".concat(_key2, "\"][value=\"").concat(config[_key2], "\"]"));
+      if (elem) {
+        elem.checked = true;
+      }
+    }
+  };
+  var submitForm = function submitForm(form) {
+    for (var _i3 = 0, _Object$entries3 = Object.entries(items); _i3 < _Object$entries3.length; _i3++) {
+      var _Object$entries3$_i = _slicedToArray(_Object$entries3[_i3], 2),
+        _key3 = _Object$entries3$_i[0],
+        _params2 = _Object$entries3$_i[1];
+      var value = form.querySelector("[name=\"settings-".concat(_key3, "\"]:checked")).value;
+      localStorage.setItem(_params2.localStorage, value);
+      config[_key3] = value;
+    }
+    window.dispatchEvent(new Event("resize"));
+    new bootstrap.Offcanvas(form).hide();
+  };
+  parseUrl();
+  var form = document.querySelector("#offcanvasSettings");
+  if (form) {
+    form.addEventListener("submit", function (e) {
+      e.preventDefault();
+      submitForm(form);
+    });
+    toggleFormControls(form);
+  }
+
+}));

File diff suppressed because it is too large
+ 8 - 0
public/js/demo.min.js


+ 128 - 0
public/js/main.js

@@ -0,0 +1,128 @@
+// SOCKET IO
+const socket = io({
+  auth: {
+    token: "abc"
+  }
+});
+
+// ON CONNECT EVENT
+socket.on('connect', () => {
+    console.log('Connected');
+});
+
+// SELECT METRICS ELEMENTS
+const cpuText = document.getElementById('cpu-text');
+const cpuBar = document.getElementById('cpu-bar');
+const ramText = document.getElementById('ram-text');
+const ramBar = document.getElementById('ram-bar');
+const netText = document.getElementById('net-text');
+const netBar = document.getElementById('net-bar');
+const diskText = document.getElementById('disk-text');
+const diskBar = document.getElementById('disk-bar');
+
+const dockerCards = document.getElementById('cards');
+
+//Update usage bars
+socket.on('metrics', ({ cpu, ram, tx, rx, disk}) => {
+    cpuText.innerHTML = `<span>CPU ${cpu} %</span>`;
+    cpuBar.innerHTML = `<span style="width: ${cpu}%"><span></span></span>`;
+    ramText.innerHTML = `<span>RAM ${ram} %</span>`;
+    ramBar.innerHTML = `<span style="width: ${ram}%"><span></span></span>`;
+    diskText.innerHTML = `<span>DISK ${disk} %</span>`;
+    diskBar.innerHTML = `<span style="width: ${disk}%"><span></span></span>`;
+});
+
+function drawCharts() {
+  var elements = document.querySelectorAll("#cardChart");
+
+  Array.from(elements).forEach(function(element) {
+    if (window.ApexCharts) {
+      new ApexCharts(element, {
+        chart: {
+          type: "line",
+          fontFamily: 'inherit',
+          height: 40.0,
+          sparkline: {
+            enabled: true
+          },
+          animations: {
+            enabled: false
+          }
+        },
+        fill: {
+          opacity: 1
+        },
+        stroke: {
+          width: [2, 1],
+          dashArray: [0, 3],
+          lineCap: "round",
+          curve: "smooth"
+        },
+        series: [{
+          name: "CPU",
+          data: [37, 35, 44, 28, 36, 24, 65, 31, 37, 39, 62, 51, 35, 41, 35, 27, 93, 53, 61, 27, 54, 43, 4, 46, 39, 62, 51, 35, 41, 67]
+        }, {
+          name: "RAM",
+          data: [93, 54, 51, 24, 35, 35, 31, 67, 19, 43, 28, 36, 62, 61, 27, 39, 35, 41, 27, 35, 51, 46, 62, 37, 44, 53, 41, 65, 39, 37]
+        }],
+        tooltip: {
+          theme: 'dark'
+        },
+        grid: {
+          strokeDashArray: 4
+        },
+        xaxis: {
+          labels: {
+            padding: 0
+          },
+          tooltip: {
+            enabled: false
+          },
+          type: 'datetime'
+        },
+        yaxis: {
+          labels: {
+            padding: 4
+          }
+        },
+        labels: [
+          '2020-06-20', '2020-06-21', '2020-06-22', '2020-06-23', '2020-06-24', '2020-06-25', '2020-06-26', '2020-06-27', '2020-06-28', '2020-06-29', '2020-06-30', '2020-07-01', '2020-07-02', '2020-07-03', '2020-07-04', '2020-07-05', '2020-07-06', '2020-07-07', '2020-07-08', '2020-07-09', '2020-07-10', '2020-07-11', '2020-07-12', '2020-07-13', '2020-07-14', '2020-07-15', '2020-07-16', '2020-07-17', '2020-07-18', '2020-07-19'
+        ],
+        colors: [tabler.getColor("primary"), tabler.getColor("gray-600")],
+        legend: {
+          show: false
+        }
+      }).render();
+    }
+  });
+}
+
+function buttonAction(button) {
+
+// if the button name is 'CaddyProxyManager' and the value is 'install' grab the div with the id of 'sites' and remove d-none class. also add the d-none class to the div with the id of 'CaddyInstallCard'
+  if (button.name == 'CaddyProxyManager' && button.value == 'install') {
+    document.getElementById('sites').classList.remove('d-none');
+    document.getElementById('CaddyInstallCard').classList.add('d-none');
+  }
+
+  socket.emit('clicked', {container: button.name, state: button.id, action: button.value});
+}
+
+socket.on('cards', (data) => {
+
+  console.log('cards deleted');
+  let deleteMeElements = document.querySelectorAll('.deleteme');
+  deleteMeElements.forEach((element) => {
+    element.parentNode.removeChild(element);
+  });
+ 
+  dockerCards.insertAdjacentHTML("afterend", data);
+  drawCharts();
+});
+
+
+socket.on('install', (data) => {
+  
+  console.log('added install card');
+  dockerCards.insertAdjacentHTML("afterend", data);
+});

File diff suppressed because it is too large
+ 8 - 0
public/js/tabler.min.js


File diff suppressed because it is too large
+ 1 - 0
public/libs/apexcharts/dist/apexcharts.amd.js


File diff suppressed because it is too large
+ 5 - 0
public/libs/apexcharts/dist/apexcharts.common.js


+ 581 - 0
public/libs/apexcharts/dist/apexcharts.css

@@ -0,0 +1,581 @@
+@keyframes opaque {
+  0% {
+      opacity: 0
+  }
+
+  to {
+      opacity: 1
+  }
+}
+
+@keyframes resizeanim {
+  0%,to {
+      opacity: 0
+  }
+}
+
+.apexcharts-canvas {
+  position: relative;
+  user-select: none
+}
+
+.apexcharts-canvas ::-webkit-scrollbar {
+  -webkit-appearance: none;
+  width: 6px
+}
+
+.apexcharts-canvas ::-webkit-scrollbar-thumb {
+  border-radius: 4px;
+  background-color: rgba(0,0,0,.5);
+  box-shadow: 0 0 1px rgba(255,255,255,.5);
+  -webkit-box-shadow: 0 0 1px rgba(255,255,255,.5)
+}
+
+.apexcharts-inner {
+  position: relative
+}
+
+.apexcharts-text tspan {
+  font-family: inherit
+}
+
+.legend-mouseover-inactive {
+  transition: .15s ease all;
+  opacity: .2
+}
+
+.apexcharts-legend-text {
+  padding-left: 15px;
+  margin-left: -15px;
+}
+
+.apexcharts-series-collapsed {
+  opacity: 0
+}
+
+.apexcharts-tooltip {
+  border-radius: 5px;
+  box-shadow: 2px 2px 6px -4px #999;
+  cursor: default;
+  font-size: 14px;
+  left: 62px;
+  opacity: 0;
+  pointer-events: none;
+  position: absolute;
+  top: 20px;
+  display: flex;
+  flex-direction: column;
+  overflow: hidden;
+  white-space: nowrap;
+  z-index: 12;
+  transition: .15s ease all
+}
+
+.apexcharts-tooltip.apexcharts-active {
+  opacity: 1;
+  transition: .15s ease all
+}
+
+.apexcharts-tooltip.apexcharts-theme-light {
+  border: 1px solid #e3e3e3;
+  background: rgba(255,255,255,.96)
+}
+
+.apexcharts-tooltip.apexcharts-theme-dark {
+  color: #fff;
+  background: rgba(30,30,30,.8)
+}
+
+.apexcharts-tooltip * {
+  font-family: inherit
+}
+
+.apexcharts-tooltip-title {
+  padding: 6px;
+  font-size: 15px;
+  margin-bottom: 4px
+}
+
+.apexcharts-tooltip.apexcharts-theme-light .apexcharts-tooltip-title {
+  background: #eceff1;
+  border-bottom: 1px solid #ddd
+}
+
+.apexcharts-tooltip.apexcharts-theme-dark .apexcharts-tooltip-title {
+  background: rgba(0,0,0,.7);
+  border-bottom: 1px solid #333
+}
+
+.apexcharts-tooltip-text-goals-value,.apexcharts-tooltip-text-y-value,.apexcharts-tooltip-text-z-value {
+  display: inline-block;
+  margin-left: 5px;
+  font-weight: 600
+}
+
+.apexcharts-tooltip-text-goals-label:empty,.apexcharts-tooltip-text-goals-value:empty,.apexcharts-tooltip-text-y-label:empty,.apexcharts-tooltip-text-y-value:empty,.apexcharts-tooltip-text-z-value:empty,.apexcharts-tooltip-title:empty {
+  display: none
+}
+
+.apexcharts-tooltip-text-goals-label,.apexcharts-tooltip-text-goals-value {
+  padding: 6px 0 5px
+}
+
+.apexcharts-tooltip-goals-group,.apexcharts-tooltip-text-goals-label,.apexcharts-tooltip-text-goals-value {
+  display: flex
+}
+
+.apexcharts-tooltip-text-goals-label:not(:empty),.apexcharts-tooltip-text-goals-value:not(:empty) {
+  margin-top: -6px
+}
+
+.apexcharts-tooltip-marker {
+  width: 12px;
+  height: 12px;
+  position: relative;
+  top: 0;
+  margin-right: 10px;
+  border-radius: 50%
+}
+
+.apexcharts-tooltip-series-group {
+  padding: 0 10px;
+  display: none;
+  text-align: left;
+  justify-content: left;
+  align-items: center
+}
+
+.apexcharts-tooltip-series-group.apexcharts-active .apexcharts-tooltip-marker {
+  opacity: 1
+}
+
+.apexcharts-tooltip-series-group.apexcharts-active,.apexcharts-tooltip-series-group:last-child {
+  padding-bottom: 4px
+}
+
+.apexcharts-tooltip-series-group-hidden {
+  opacity: 0;
+  height: 0;
+  line-height: 0;
+  padding: 0!important
+}
+
+.apexcharts-tooltip-y-group {
+  padding: 6px 0 5px
+}
+
+.apexcharts-custom-tooltip,.apexcharts-tooltip-box {
+  padding: 4px 8px
+}
+
+.apexcharts-tooltip-boxPlot {
+  display: flex;
+  flex-direction: column-reverse
+}
+
+.apexcharts-tooltip-box>div {
+  margin: 4px 0
+}
+
+.apexcharts-tooltip-box span.value {
+  font-weight: 700
+}
+
+.apexcharts-tooltip-rangebar {
+  padding: 5px 8px
+}
+
+.apexcharts-tooltip-rangebar .category {
+  font-weight: 600;
+  color: #777
+}
+
+.apexcharts-tooltip-rangebar .series-name {
+  font-weight: 700;
+  display: block;
+  margin-bottom: 5px
+}
+
+.apexcharts-xaxistooltip,.apexcharts-yaxistooltip {
+  opacity: 0;
+  pointer-events: none;
+  color: #373d3f;
+  font-size: 13px;
+  text-align: center;
+  border-radius: 2px;
+  position: absolute;
+  z-index: 10;
+  background: #eceff1;
+  border: 1px solid #90a4ae
+}
+
+.apexcharts-xaxistooltip {
+  padding: 9px 10px;
+  transition: .15s ease all
+}
+
+.apexcharts-xaxistooltip.apexcharts-theme-dark {
+  background: rgba(0,0,0,.7);
+  border: 1px solid rgba(0,0,0,.5);
+  color: #fff
+}
+
+.apexcharts-xaxistooltip:after,.apexcharts-xaxistooltip:before {
+  left: 50%;
+  border: solid transparent;
+  content: " ";
+  height: 0;
+  width: 0;
+  position: absolute;
+  pointer-events: none
+}
+
+.apexcharts-xaxistooltip:after {
+  border-color: transparent;
+  border-width: 6px;
+  margin-left: -6px
+}
+
+.apexcharts-xaxistooltip:before {
+  border-color: transparent;
+  border-width: 7px;
+  margin-left: -7px
+}
+
+.apexcharts-xaxistooltip-bottom:after,.apexcharts-xaxistooltip-bottom:before {
+  bottom: 100%
+}
+
+.apexcharts-xaxistooltip-top:after,.apexcharts-xaxistooltip-top:before {
+  top: 100%
+}
+
+.apexcharts-xaxistooltip-bottom:after {
+  border-bottom-color: #eceff1
+}
+
+.apexcharts-xaxistooltip-bottom:before {
+  border-bottom-color: #90a4ae
+}
+
+.apexcharts-xaxistooltip-bottom.apexcharts-theme-dark:after,.apexcharts-xaxistooltip-bottom.apexcharts-theme-dark:before {
+  border-bottom-color: rgba(0,0,0,.5)
+}
+
+.apexcharts-xaxistooltip-top:after {
+  border-top-color: #eceff1
+}
+
+.apexcharts-xaxistooltip-top:before {
+  border-top-color: #90a4ae
+}
+
+.apexcharts-xaxistooltip-top.apexcharts-theme-dark:after,.apexcharts-xaxistooltip-top.apexcharts-theme-dark:before {
+  border-top-color: rgba(0,0,0,.5)
+}
+
+.apexcharts-xaxistooltip.apexcharts-active {
+  opacity: 1;
+  transition: .15s ease all
+}
+
+.apexcharts-yaxistooltip {
+  padding: 4px 10px
+}
+
+.apexcharts-yaxistooltip.apexcharts-theme-dark {
+  background: rgba(0,0,0,.7);
+  border: 1px solid rgba(0,0,0,.5);
+  color: #fff
+}
+
+.apexcharts-yaxistooltip:after,.apexcharts-yaxistooltip:before {
+  top: 50%;
+  border: solid transparent;
+  content: " ";
+  height: 0;
+  width: 0;
+  position: absolute;
+  pointer-events: none
+}
+
+.apexcharts-yaxistooltip:after {
+  border-color: transparent;
+  border-width: 6px;
+  margin-top: -6px
+}
+
+.apexcharts-yaxistooltip:before {
+  border-color: transparent;
+  border-width: 7px;
+  margin-top: -7px
+}
+
+.apexcharts-yaxistooltip-left:after,.apexcharts-yaxistooltip-left:before {
+  left: 100%
+}
+
+.apexcharts-yaxistooltip-right:after,.apexcharts-yaxistooltip-right:before {
+  right: 100%
+}
+
+.apexcharts-yaxistooltip-left:after {
+  border-left-color: #eceff1
+}
+
+.apexcharts-yaxistooltip-left:before {
+  border-left-color: #90a4ae
+}
+
+.apexcharts-yaxistooltip-left.apexcharts-theme-dark:after,.apexcharts-yaxistooltip-left.apexcharts-theme-dark:before {
+  border-left-color: rgba(0,0,0,.5)
+}
+
+.apexcharts-yaxistooltip-right:after {
+  border-right-color: #eceff1
+}
+
+.apexcharts-yaxistooltip-right:before {
+  border-right-color: #90a4ae
+}
+
+.apexcharts-yaxistooltip-right.apexcharts-theme-dark:after,.apexcharts-yaxistooltip-right.apexcharts-theme-dark:before {
+  border-right-color: rgba(0,0,0,.5)
+}
+
+.apexcharts-yaxistooltip.apexcharts-active {
+  opacity: 1
+}
+
+.apexcharts-yaxistooltip-hidden {
+  display: none
+}
+
+.apexcharts-xcrosshairs,.apexcharts-ycrosshairs {
+  pointer-events: none;
+  opacity: 0;
+  transition: .15s ease all
+}
+
+.apexcharts-xcrosshairs.apexcharts-active,.apexcharts-ycrosshairs.apexcharts-active {
+  opacity: 1;
+  transition: .15s ease all
+}
+
+.apexcharts-ycrosshairs-hidden {
+  opacity: 0
+}
+
+.apexcharts-selection-rect {
+  cursor: move
+}
+
+.svg_select_boundingRect,.svg_select_points_rot {
+  pointer-events: none;
+  opacity: 0;
+  visibility: hidden
+}
+
+.apexcharts-selection-rect+g .svg_select_boundingRect,.apexcharts-selection-rect+g .svg_select_points_rot {
+  opacity: 0;
+  visibility: hidden
+}
+
+.apexcharts-selection-rect+g .svg_select_points_l,.apexcharts-selection-rect+g .svg_select_points_r {
+  cursor: ew-resize;
+  opacity: 1;
+  visibility: visible
+}
+
+.svg_select_points {
+  fill: #efefef;
+  stroke: #333;
+  rx: 2
+}
+
+.apexcharts-svg.apexcharts-zoomable.hovering-zoom {
+  cursor: crosshair
+}
+
+.apexcharts-svg.apexcharts-zoomable.hovering-pan {
+  cursor: move
+}
+
+.apexcharts-menu-icon,.apexcharts-pan-icon,.apexcharts-reset-icon,.apexcharts-selection-icon,.apexcharts-toolbar-custom-icon,.apexcharts-zoom-icon,.apexcharts-zoomin-icon,.apexcharts-zoomout-icon {
+  cursor: pointer;
+  width: 20px;
+  height: 20px;
+  line-height: 24px;
+  color: #6e8192;
+  text-align: center
+}
+
+.apexcharts-menu-icon svg,.apexcharts-reset-icon svg,.apexcharts-zoom-icon svg,.apexcharts-zoomin-icon svg,.apexcharts-zoomout-icon svg {
+  fill: #6e8192
+}
+
+.apexcharts-selection-icon svg {
+  fill: #444;
+  transform: scale(.76)
+}
+
+.apexcharts-theme-dark .apexcharts-menu-icon svg,.apexcharts-theme-dark .apexcharts-pan-icon svg,.apexcharts-theme-dark .apexcharts-reset-icon svg,.apexcharts-theme-dark .apexcharts-selection-icon svg,.apexcharts-theme-dark .apexcharts-toolbar-custom-icon svg,.apexcharts-theme-dark .apexcharts-zoom-icon svg,.apexcharts-theme-dark .apexcharts-zoomin-icon svg,.apexcharts-theme-dark .apexcharts-zoomout-icon svg {
+  fill: #f3f4f5
+}
+
+.apexcharts-canvas .apexcharts-reset-zoom-icon.apexcharts-selected svg,.apexcharts-canvas .apexcharts-selection-icon.apexcharts-selected svg,.apexcharts-canvas .apexcharts-zoom-icon.apexcharts-selected svg {
+  fill: #008ffb
+}
+
+.apexcharts-theme-light .apexcharts-menu-icon:hover svg,.apexcharts-theme-light .apexcharts-reset-icon:hover svg,.apexcharts-theme-light .apexcharts-selection-icon:not(.apexcharts-selected):hover svg,.apexcharts-theme-light .apexcharts-zoom-icon:not(.apexcharts-selected):hover svg,.apexcharts-theme-light .apexcharts-zoomin-icon:hover svg,.apexcharts-theme-light .apexcharts-zoomout-icon:hover svg {
+  fill: #333
+}
+
+.apexcharts-menu-icon,.apexcharts-selection-icon {
+  position: relative
+}
+
+.apexcharts-reset-icon {
+  margin-left: 5px
+}
+
+.apexcharts-menu-icon,.apexcharts-reset-icon,.apexcharts-zoom-icon {
+  transform: scale(.85)
+}
+
+.apexcharts-zoomin-icon,.apexcharts-zoomout-icon {
+  transform: scale(.7)
+}
+
+.apexcharts-zoomout-icon {
+  margin-right: 3px
+}
+
+.apexcharts-pan-icon {
+  transform: scale(.62);
+  position: relative;
+  left: 1px;
+  top: 0
+}
+
+.apexcharts-pan-icon svg {
+  fill: #fff;
+  stroke: #6e8192;
+  stroke-width: 2
+}
+
+.apexcharts-pan-icon.apexcharts-selected svg {
+  stroke: #008ffb
+}
+
+.apexcharts-pan-icon:not(.apexcharts-selected):hover svg {
+  stroke: #333
+}
+
+.apexcharts-toolbar {
+  position: absolute;
+  z-index: 11;
+  max-width: 176px;
+  text-align: right;
+  border-radius: 3px;
+  padding: 0 6px 2px;
+  display: flex;
+  justify-content: space-between;
+  align-items: center
+}
+
+.apexcharts-menu {
+  background: #fff;
+  position: absolute;
+  top: 100%;
+  border: 1px solid #ddd;
+  border-radius: 3px;
+  padding: 3px;
+  right: 10px;
+  opacity: 0;
+  min-width: 110px;
+  transition: .15s ease all;
+  pointer-events: none
+}
+
+.apexcharts-menu.apexcharts-menu-open {
+  opacity: 1;
+  pointer-events: all;
+  transition: .15s ease all
+}
+
+.apexcharts-menu-item {
+  padding: 6px 7px;
+  font-size: 12px;
+  cursor: pointer
+}
+
+.apexcharts-theme-light .apexcharts-menu-item:hover {
+  background: #eee
+}
+
+.apexcharts-theme-dark .apexcharts-menu {
+  background: rgba(0,0,0,.7);
+  color: #fff
+}
+
+@media screen and (min-width:768px) {
+  .apexcharts-canvas:hover .apexcharts-toolbar {
+      opacity: 1
+  }
+}
+
+.apexcharts-canvas .apexcharts-element-hidden,.apexcharts-datalabel.apexcharts-element-hidden,.apexcharts-hide .apexcharts-series-points {
+  opacity: 0
+}
+
+.apexcharts-datalabel,.apexcharts-datalabel-label,.apexcharts-datalabel-value,.apexcharts-datalabels,.apexcharts-pie-label {
+  cursor: default;
+  pointer-events: none
+}
+
+.apexcharts-pie-label-delay {
+  opacity: 0;
+  animation-name: opaque;
+  animation-duration: .3s;
+  animation-fill-mode: forwards;
+  animation-timing-function: ease
+}
+
+.apexcharts-annotation-rect,.apexcharts-area-series .apexcharts-area,.apexcharts-area-series .apexcharts-series-markers .apexcharts-marker.no-pointer-events,.apexcharts-gridline,.apexcharts-line,.apexcharts-line-series .apexcharts-series-markers .apexcharts-marker.no-pointer-events,.apexcharts-point-annotation-label,.apexcharts-radar-series path,.apexcharts-radar-series polygon,.apexcharts-toolbar svg,.apexcharts-tooltip .apexcharts-marker,.apexcharts-xaxis-annotation-label,.apexcharts-yaxis-annotation-label,.apexcharts-zoom-rect {
+  pointer-events: none
+}
+
+.apexcharts-marker {
+  transition: .15s ease all
+}
+
+.resize-triggers {
+  animation: 1ms resizeanim;
+  visibility: hidden;
+  opacity: 0;
+  height: 100%;
+  width: 100%;
+  overflow: hidden
+}
+
+.contract-trigger:before,.resize-triggers,.resize-triggers>div {
+  content: " ";
+  display: block;
+  position: absolute;
+  top: 0;
+  left: 0
+}
+
+.resize-triggers>div {
+  height: 100%;
+  width: 100%;
+  background: #eee;
+  overflow: auto
+}
+
+.contract-trigger:before {
+  overflow: hidden;
+  width: 200%;
+  height: 200%
+}

File diff suppressed because it is too large
+ 5 - 0
public/libs/apexcharts/dist/apexcharts.esm.js


File diff suppressed because it is too large
+ 5 - 0
public/libs/apexcharts/dist/apexcharts.min.js


+ 63 - 0
public/libs/apexcharts/dist/locales/ar.json

@@ -0,0 +1,63 @@
+{
+"name": "ar",
+"options": {
+"months": [
+"يناير",
+"فبراير",
+"مارس",
+"أبريل",
+"مايو",
+"يونيو",
+"يوليو",
+"أغسطس",
+"سبتمبر",
+"أكتوبر",
+"نوفمبر",
+"ديسمبر"
+],
+"shortMonths": [
+"يناير",
+"فبراير",
+"مارس",
+"أبريل",
+"مايو",
+"يونيو",
+"يوليو",
+"أغسطس",
+"سبتمبر",
+"أكتوبر",
+"نوفمبر",
+"ديسمبر"
+],
+"days": [
+"الأحد",
+"الإثنين",
+"الثلاثاء",
+"الأربعاء",
+"الخميس",
+"الجمعة",
+"السبت"
+],
+"shortDays": [
+"أحد",
+"إثنين",
+"ثلاثاء",
+"أربعاء",
+"خميس",
+"جمعة",
+"سبت"
+],
+"toolbar": {
+"exportToSVG": "تحميل بصيغة SVG",
+"exportToPNG": "تحميل بصيغة PNG",
+"exportToCSV": "تحميل بصيغة CSV",
+"menu": "القائمة",
+"selection": "تحديد",
+"selectionZoom": "تكبير التحديد",
+"zoomIn": "تكبير",
+"zoomOut": "تصغير",
+"pan": "تحريك",
+"reset": "إعادة التعيين"
+}
+}
+}

+ 55 - 0
public/libs/apexcharts/dist/locales/ca.json

@@ -0,0 +1,55 @@
+{
+  "name": "ca",
+  "options": {
+    "months": [
+      "Gener",
+      "Febrer",
+      "Març",
+      "Abril",
+      "Maig",
+      "Juny",
+      "Juliol",
+      "Agost",
+      "Setembre",
+      "Octubre",
+      "Novembre",
+      "Desembre"
+    ],
+    "shortMonths": [
+      "Gen.",
+      "Febr.",
+      "Març",
+      "Abr.",
+      "Maig",
+      "Juny",
+      "Jul.",
+      "Ag.",
+      "Set.",
+      "Oct.",
+      "Nov.",
+      "Des."
+    ],
+    "days": [
+      "Diumenge",
+      "Dilluns",
+      "Dimarts",
+      "Dimecres",
+      "Dijous",
+      "Divendres",
+      "Dissabte"
+    ],
+    "shortDays": ["Dg", "Dl", "Dt", "Dc", "Dj", "Dv", "Ds"],
+    "toolbar": {
+      "exportToSVG": "Descarregar SVG",
+      "exportToPNG": "Descarregar PNG",
+      "exportToCSV": "Descarregar CSV",
+      "menu": "Menú",
+      "selection": "Seleccionar",
+      "selectionZoom": "Seleccionar Zoom",
+      "zoomIn": "Augmentar",
+      "zoomOut": "Disminuir",
+      "pan": "Navegació",
+      "reset": "Reiniciar Zoom"
+    }
+  }
+}

+ 55 - 0
public/libs/apexcharts/dist/locales/cs.json

@@ -0,0 +1,55 @@
+{
+  "name": "cs",
+  "options": {
+    "months": [
+      "Leden",
+      "Únor",
+      "Březen",
+      "Duben",
+      "Květen",
+      "Červen",
+      "Červenec",
+      "Srpen",
+      "Září",
+      "Říjen",
+      "Listopad",
+      "Prosinec"
+    ],
+    "shortMonths": [
+      "Led",
+      "Úno",
+      "Bře",
+      "Dub",
+      "Kvě",
+      "Čvn",
+      "Čvc",
+      "Srp",
+      "Zář",
+      "Říj",
+      "Lis",
+      "Pro"
+    ],
+    "days": [
+      "Neděle",
+      "Pondělí",
+      "Úterý",
+      "Středa",
+      "Čtvrtek",
+      "Pátek",
+      "Sobota"
+    ],
+    "shortDays": ["Ne", "Po", "Út", "St", "Čt", "Pá", "So"],
+    "toolbar": {
+      "exportToSVG": "Stáhnout SVG",
+      "exportToPNG": "Stáhnout PNG",
+      "exportToCSV": "Stáhnout CSV",
+      "menu": "Menu",
+      "selection": "Vybrat",
+      "selectionZoom": "Zoom: Vybrat",
+      "zoomIn": "Zoom: Přiblížit",
+      "zoomOut": "Zoom: Oddálit",
+      "pan": "Přesouvat",
+      "reset": "Resetovat"
+    }
+  }
+}

+ 55 - 0
public/libs/apexcharts/dist/locales/de.json

@@ -0,0 +1,55 @@
+{
+  "name": "de",
+  "options": {
+    "months": [
+      "Januar",
+      "Februar",
+      "März",
+      "April",
+      "Mai",
+      "Juni",
+      "Juli",
+      "August",
+      "September",
+      "Oktober",
+      "November",
+      "Dezember"
+    ],
+    "shortMonths": [
+      "Jan",
+      "Feb",
+      "Mär",
+      "Apr",
+      "Mai",
+      "Jun",
+      "Jul",
+      "Aug",
+      "Sep",
+      "Okt",
+      "Nov",
+      "Dez"
+    ],
+    "days": [
+      "Sonntag",
+      "Montag",
+      "Dienstag",
+      "Mittwoch",
+      "Donnerstag",
+      "Freitag",
+      "Samstag"
+    ],
+    "shortDays": ["So", "Mo", "Di", "Mi", "Do", "Fr", "Sa"],
+    "toolbar": {
+      "exportToSVG": "SVG speichern",
+      "exportToPNG": "PNG speichern",
+      "exportToCSV": "CSV speichern",
+      "menu": "Menü",
+      "selection": "Auswahl",
+      "selectionZoom": "Auswahl vergrößern",
+      "zoomIn": "Vergrößern",
+      "zoomOut": "Verkleinern",
+      "pan": "Verschieben",
+      "reset": "Zoom zurücksetzen"
+    }
+  }
+}

+ 55 - 0
public/libs/apexcharts/dist/locales/el.json

@@ -0,0 +1,55 @@
+{
+  "name": "el",
+  "options": {
+    "months": [
+      "Ιανουάριος",
+      "Φεβρουάριος",
+      "Μάρτιος",
+      "Απρίλιος",
+      "Μάιος",
+      "Ιούνιος",
+      "Ιούλιος",
+      "Αύγουστος",
+      "Σεπτέμβριος",
+      "Οκτώβριος",
+      "Νοέμβριος",
+      "Δεκέμβριος"
+    ],
+    "shortMonths": [
+      "Ιαν",
+      "Φευ",
+      "Μαρ",
+      "Απρ",
+      "Μάι",
+      "Ιουν",
+      "Ιουλ",
+      "Αυγ",
+      "Σεπ",
+      "Οκτ",
+      "Νοε",
+      "Δεκ"
+    ],
+    "days": [
+      "Κυριακή",
+      "Δευτέρα",
+      "Τρίτη",
+      "Τετάρτη",
+      "Πέμπτη",
+      "Παρασκευή",
+      "Σάββατο"
+    ],
+    "shortDays": ["Κυρ", "Δευ", "Τρι", "Τετ", "Πεμ", "Παρ", "Σαβ"],
+    "toolbar": {
+      "exportToSVG": "Λήψη SVG",
+      "exportToPNG": "Λήψη PNG",
+      "exportToCSV": "Λήψη CSV",
+      "menu": "Menu",
+      "selection": "Επιλογή",
+      "selectionZoom": "Μεγένθυση βάση επιλογής",
+      "zoomIn": "Μεγένθυνση",
+      "zoomOut": "Σμίκρυνση",
+      "pan": "Μετατόπιση",
+      "reset": "Επαναφορά μεγένθυνσης"
+    }
+  }
+}

+ 55 - 0
public/libs/apexcharts/dist/locales/en.json

@@ -0,0 +1,55 @@
+{
+  "name": "en",
+  "options": {
+    "months": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "shortMonths": [
+      "Jan",
+      "Feb",
+      "Mar",
+      "Apr",
+      "May",
+      "Jun",
+      "Jul",
+      "Aug",
+      "Sep",
+      "Oct",
+      "Nov",
+      "Dec"
+    ],
+    "days": [
+      "Sunday",
+      "Monday",
+      "Tuesday",
+      "Wednesday",
+      "Thursday",
+      "Friday",
+      "Saturday"
+    ],
+    "shortDays": ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"],
+    "toolbar": {
+      "exportToSVG": "Download SVG",
+      "exportToPNG": "Download PNG",
+      "exportToCSV": "Download CSV",
+      "menu": "Menu",
+      "selection": "Selection",
+      "selectionZoom": "Selection Zoom",
+      "zoomIn": "Zoom In",
+      "zoomOut": "Zoom Out",
+      "pan": "Panning",
+      "reset": "Reset Zoom"
+    }
+  }
+}

+ 55 - 0
public/libs/apexcharts/dist/locales/es.json

@@ -0,0 +1,55 @@
+{
+  "name": "es",
+  "options": {
+    "months": [
+      "Enero",
+      "Febrero",
+      "Marzo",
+      "Abril",
+      "Mayo",
+      "Junio",
+      "Julio",
+      "Agosto",
+      "Septiembre",
+      "Octubre",
+      "Noviembre",
+      "Diciembre"
+    ],
+    "shortMonths": [
+      "Ene",
+      "Feb",
+      "Mar",
+      "Abr",
+      "May",
+      "Jun",
+      "Jul",
+      "Ago",
+      "Sep",
+      "Oct",
+      "Nov",
+      "Dic"
+    ],
+    "days": [
+      "Domingo",
+      "Lunes",
+      "Martes",
+      "Miércoles",
+      "Jueves",
+      "Viernes",
+      "Sábado"
+    ],
+    "shortDays": ["Dom", "Lun", "Mar", "Mie", "Jue", "Vie", "Sab"],
+    "toolbar": {
+      "exportToSVG": "Descargar SVG",
+      "exportToPNG": "Descargar PNG",
+      "exportToCSV": "Descargar CSV",
+      "menu": "Menu",
+      "selection": "Seleccionar",
+      "selectionZoom": "Seleccionar Zoom",
+      "zoomIn": "Aumentar",
+      "zoomOut": "Disminuir",
+      "pan": "Navegación",
+      "reset": "Reiniciar Zoom"
+    }
+  }
+}

+ 63 - 0
public/libs/apexcharts/dist/locales/et.json

@@ -0,0 +1,63 @@
+{
+  "name": "et",
+  "options": {
+    "months": [
+      "jaanuar",
+      "veebruar",
+      "märts",
+      "aprill",
+      "mai",
+      "juuni",
+      "juuli",
+      "august",
+      "september",
+      "oktoober",
+      "november",
+      "detsember"
+    ],
+    "shortMonths": [
+      "jaan",
+      "veebr",
+      "märts",
+      "apr",
+      "mai",
+      "juuni",
+      "juuli",
+      "aug",
+      "sept",
+      "okt",
+      "nov",
+      "dets"
+    ],
+    "days": [
+      "pühapäev",
+      "esmaspäev",
+      "teisipäev",
+      "kolmapäev",
+      "neljapäev",
+      "reede",
+      "laupäev"
+    ],
+    "shortDays": [
+      "P",
+      "E",
+      "T",
+      "K",
+      "N",
+      "R",
+      "L"
+    ],
+    "toolbar": {
+      "exportToSVG": "Lae alla SVG",
+      "exportToPNG": "Lae alla PNG",
+      "exportToCSV": "Lae alla CSV",
+      "menu": "Menüü",
+      "selection": "Valik",
+      "selectionZoom": "Valiku suum",
+      "zoomIn": "Suurenda",
+      "zoomOut": "Vähenda",
+      "pan": "Panoraamimine",
+      "reset": "Lähtesta suum"
+    }
+  }
+}

+ 55 - 0
public/libs/apexcharts/dist/locales/fa.json

@@ -0,0 +1,55 @@
+{
+  "name": "fa",
+  "options": {
+    "months": [
+      "فروردین",
+      "اردیبهشت",
+      "خرداد",
+      "تیر",
+      "مرداد",
+      "شهریور",
+      "مهر",
+      "آبان",
+      "آذر",
+      "دی",
+      "بهمن",
+      "اسفند"
+    ],
+    "shortMonths": [
+      "فرو",
+      "ارد",
+      "خرد",
+      "تیر",
+      "مرد",
+      "شهر",
+      "مهر",
+      "آبا",
+      "آذر",
+      "دی",
+      "بهمـ",
+      "اسفـ"
+    ],
+    "days": [
+      "یکشنبه",
+      "دوشنبه",
+      "سه شنبه",
+      "چهارشنبه",
+      "پنجشنبه",
+      "جمعه",
+      "شنبه"
+    ],
+    "shortDays": ["ی", "د", "س", "چ", "پ", "ج", "ش"],
+    "toolbar": {
+      "exportToSVG": "دانلود SVG",
+      "exportToPNG": "دانلود PNG",
+      "exportToCSV": "دانلود CSV",
+      "menu": "منو",
+      "selection": "انتخاب",
+      "selectionZoom": "بزرگنمایی انتخابی",
+      "zoomIn": "بزرگنمایی",
+      "zoomOut": "کوچکنمایی",
+      "pan": "پیمایش",
+      "reset": "بازنشانی بزرگنمایی"
+    }
+  }
+}

+ 55 - 0
public/libs/apexcharts/dist/locales/fi.json

@@ -0,0 +1,55 @@
+{
+  "name": "fi",
+  "options": {
+    "months": [
+      "Tammikuu",
+      "Helmikuu",
+      "Maaliskuu",
+      "Huhtikuu",
+      "Toukokuu",
+      "Kesäkuu",
+      "Heinäkuu",
+      "Elokuu",
+      "Syyskuu",
+      "Lokakuu",
+      "Marraskuu",
+      "Joulukuu"
+    ],
+    "shortMonths": [
+      "Tammi",
+      "Helmi",
+      "Maalis",
+      "Huhti",
+      "Touko",
+      "Kesä",
+      "Heinä",
+      "Elo",
+      "Syys",
+      "Loka",
+      "Marras",
+      "Joulu"
+    ],
+    "days": [
+      "Sunnuntai",
+      "Maanantai",
+      "Tiistai",
+      "Keskiviikko",
+      "Torstai",
+      "Perjantai",
+      "Lauantai"
+    ],
+    "shortDays": ["Su", "Ma", "Ti", "Ke", "To", "Pe", "La"],
+    "toolbar": {
+      "exportToSVG": "Lataa SVG",
+      "exportToPNG": "Lataa PNG",
+      "exportToCSV": "Lataa CSV",
+      "menu": "Valikko",
+      "selection": "Valinta",
+      "selectionZoom": "Valinnan zoomaus",
+      "zoomIn": "Lähennä",
+      "zoomOut": "Loitonna",
+      "pan": "Panoroi",
+      "reset": "Nollaa zoomaus"
+    }
+  }
+}

+ 55 - 0
public/libs/apexcharts/dist/locales/fr.json

@@ -0,0 +1,55 @@
+{
+  "name": "fr",
+  "options": {
+    "months": [
+      "janvier",
+      "février",
+      "mars",
+      "avril",
+      "mai",
+      "juin",
+      "juillet",
+      "août",
+      "septembre",
+      "octobre",
+      "novembre",
+      "décembre"
+    ],
+    "shortMonths": [
+      "janv.",
+      "févr.",
+      "mars",
+      "avr.",
+      "mai",
+      "juin",
+      "juill.",
+      "août",
+      "sept.",
+      "oct.",
+      "nov.",
+      "déc."
+    ],
+    "days": [
+      "dimanche",
+      "lundi",
+      "mardi",
+      "mercredi",
+      "jeudi",
+      "vendredi",
+      "samedi"
+    ],
+    "shortDays": ["dim.", "lun.", "mar.", "mer.", "jeu.", "ven.", "sam."],
+    "toolbar": {
+      "exportToSVG": "Télécharger au format SVG",
+      "exportToPNG": "Télécharger au format PNG",
+      "exportToCSV": "Télécharger au format CSV",
+      "menu": "Menu",
+      "selection": "Sélection",
+      "selectionZoom": "Sélection et zoom",
+      "zoomIn": "Zoomer",
+      "zoomOut": "Dézoomer",
+      "pan": "Navigation",
+      "reset": "Réinitialiser le zoom"
+    }
+  }
+}

+ 55 - 0
public/libs/apexcharts/dist/locales/he.json

@@ -0,0 +1,55 @@
+{
+  "name": "he",
+  "options": {
+    "months": [
+      "ינואר",
+      "פברואר",
+      "מרץ",
+      "אפריל",
+      "מאי",
+      "יוני",
+      "יולי",
+      "אוגוסט",
+      "ספטמבר",
+      "אוקטובר",
+      "נובמבר",
+      "דצמבר"
+    ],
+    "shortMonths": [
+      "ינו׳",
+      "פבר׳",
+      "מרץ",
+      "אפר׳",
+      "מאי",
+      "יוני",
+      "יולי",
+      "אוג׳",
+      "ספט׳",
+      "אוק׳",
+      "נוב׳",
+      "דצמ׳"
+    ],
+    "days": [
+      "ראשון",
+      "שני",
+      "שלישי",
+      "רביעי",
+      "חמישי",
+      "שישי",
+      "שבת"
+    ],
+    "shortDays": ["א׳", "ב׳", "ג׳", "ד׳", "ה׳", "ו׳", "ש׳"],
+    "toolbar": {
+      "exportToSVG": "הורד SVG",
+      "exportToPNG": "הורד PNG",
+      "exportToCSV": "הורד CSV",
+      "menu": "תפריט",
+      "selection": "בחירה",
+      "selectionZoom": "זום בחירה",
+      "zoomIn": "הגדלה",
+      "zoomOut": "הקטנה",
+      "pan": "הזזה",
+      "reset": "איפוס תצוגה"
+    }
+  }
+}

+ 55 - 0
public/libs/apexcharts/dist/locales/hi.json

@@ -0,0 +1,55 @@
+{
+  "name": "hi",
+  "options": {
+    "months": [
+      "जनवरी",
+      "फ़रवरी",
+      "मार्च",
+      "अप्रैल",
+      "मई",
+      "जून",
+      "जुलाई",
+      "अगस्त",
+      "सितंबर",
+      "अक्टूबर",
+      "नवंबर",
+      "दिसंबर"
+    ],
+    "shortMonths": [
+      "जनवरी",
+      "फ़रवरी",
+      "मार्च",
+      "अप्रैल",
+      "मई",
+      "जून",
+      "जुलाई",
+      "अगस्त",
+      "सितंबर",
+      "अक्टूबर",
+      "नवंबर",
+      "दिसंबर"
+    ],
+    "days": [
+      "रविवार",
+      "सोमवार",
+      "मंगलवार",
+      "बुधवार",
+      "गुरुवार",
+      "शुक्रवार",
+      "शनिवार"
+    ],
+    "shortDays": ["रवि", "सोम", "मंगल", "बुध", "गुरु", "शुक्र", "शनि"],
+    "toolbar": {
+      "exportToSVG": "निर्यात SVG",
+      "exportToPNG": "निर्यात PNG",
+      "exportToCSV": "निर्यात CSV",
+      "menu": "सूची",
+      "selection": "चयन",
+      "selectionZoom": "ज़ूम करना",
+      "zoomIn": "ज़ूम इन",
+      "zoomOut": "ज़ूम आउट",
+      "pan": "पैनिंग",
+      "reset": "फिर से कायम करना"
+    }
+  }
+}

+ 55 - 0
public/libs/apexcharts/dist/locales/hr.json

@@ -0,0 +1,55 @@
+{
+  "name": "hr",
+  "options": {
+    "months": [
+      "Siječanj",
+      "Veljača",
+      "Ožujak",
+      "Travanj",
+      "Svibanj",
+      "Lipanj",
+      "Srpanj",
+      "Kolovoz",
+      "Rujan",
+      "Listopad",
+      "Studeni",
+      "Prosinac"
+    ],
+    "shortMonths": [
+      "Sij",
+      "Velj",
+      "Ožu",
+      "Tra",
+      "Svi",
+      "Lip",
+      "Srp",
+      "Kol",
+      "Ruj",
+      "Lis",
+      "Stu",
+      "Pro"
+    ],
+    "days": [
+      "Nedjelja",
+      "Ponedjeljak",
+      "Utorak",
+      "Srijeda",
+      "Četvrtak",
+      "Petak",
+      "Subota"
+    ],
+    "shortDays": ["Ned", "Pon", "Uto", "Sri", "Čet", "Pet", "Sub"],
+    "toolbar": {
+      "exportToSVG": "Preuzmi SVG",
+      "exportToPNG": "Preuzmi PNG",
+      "exportToCSV": "Preuzmi CSV",
+      "menu": "Izbornik",
+      "selection": "Odabir",
+      "selectionZoom": "Odabirno povećanje",
+      "zoomIn": "Uvećajte prikaz",
+      "zoomOut": "Umanjite prikaz",
+      "pan": "Pomicanje",
+      "reset": "Povratak na zadani prikaz"
+    }
+  }
+}

+ 64 - 0
public/libs/apexcharts/dist/locales/hu.json

@@ -0,0 +1,64 @@
+{
+  "name": "hu",
+  "options": {
+    "months": [
+      "január",
+      "február",
+      "március",
+      "április",
+      "május",
+      "június",
+      "július",
+      "augusztus",
+      "szeptember",
+      "október",
+      "november",
+      "december"
+    ],
+    "shortMonths": [
+      "jan",
+      "feb",
+      "mar",
+      "ápr",
+      "máj",
+      "jún",
+      "júl",
+      "aug",
+      "szept",
+      "okt",
+      "nov",
+      "dec"
+    ],
+    "days": [
+      "hétfő",
+      "kedd",
+      "szerda",
+      "csütörtök",
+      "péntek",
+      "szombat",
+      "vasárnap"
+    ],
+    "shortDays": [
+      "H",
+      "K",
+      "Sze",
+      "Cs",
+      "P",
+      "Szo",
+      "V"
+    ],
+    "toolbar": {
+      "exportToSVG": "Exportálás SVG-be",
+      "exportToPNG": "Exportálás PNG-be",
+      "exportToCSV": "Exportálás CSV-be",
+      "menu": "Fő ajánlat",
+      "download": "SVG letöltése",
+      "selection": "Kiválasztás",
+      "selectionZoom": "Nagyító kiválasztása",
+      "zoomIn": "Nagyítás",
+      "zoomOut": "Kicsinyítés",
+      "pan": "Képcsúsztatás",
+      "reset": "Nagyító visszaállítása"
+    }
+  }
+}

+ 55 - 0
public/libs/apexcharts/dist/locales/hy.json

@@ -0,0 +1,55 @@
+{
+  "name": "hy",
+  "options": {
+    "months": [
+      "Հունվար",
+      "Փետրվար",
+      "Մարտ",
+      "Ապրիլ",
+      "Մայիս",
+      "Հունիս",
+      "Հուլիս",
+      "Օգոստոս",
+      "Սեպտեմբեր",
+      "Հոկտեմբեր",
+      "Նոյեմբեր",
+      "Դեկտեմբեր"
+    ],
+    "shortMonths": [
+      "Հնվ",
+      "Փտվ",
+      "Մրտ",
+      "Ապր",
+      "Մյս",
+      "Հնս",
+      "Հլիս",
+      "Օգս",
+      "Սեպ",
+      "Հոկ",
+      "Նոյ",
+      "Դեկ"
+    ],
+    "days": [
+      "Կիրակի",
+      "Երկուշաբթի",
+      "Երեքշաբթի",
+      "Չորեքշաբթի",
+      "Հինգշաբթի",
+      "Ուրբաթ",
+      "Շաբաթ"
+    ],
+    "shortDays": ["Կիր", "Երկ", "Երք", "Չրք", "Հնգ", "Ուրբ", "Շբթ"],
+    "toolbar": {
+      "exportToSVG": "Բեռնել SVG",
+      "exportToPNG": "Բեռնել PNG",
+      "exportToCSV": "Բեռնել CSV",
+      "menu": "Մենյու",
+      "selection": "Ընտրված",
+      "selectionZoom": "Ընտրված հատվածի խոշորացում",
+      "zoomIn": "Խոշորացնել",
+      "zoomOut": "Մանրացնել",
+      "pan": "Տեղափոխում",
+      "reset": "Բերել սկզբնական վիճակի"
+    }
+  }
+}

+ 47 - 0
public/libs/apexcharts/dist/locales/id.json

@@ -0,0 +1,47 @@
+{
+  "name": "id",
+  "options": {
+    "months": [
+      "Januari",
+      "Februari",
+      "Maret",
+      "April",
+      "Mei",
+      "Juni",
+      "Juli",
+      "Agustus",
+      "September",
+      "Oktober",
+      "November",
+      "Desember"
+    ],
+    "shortMonths": [
+      "Jan",
+      "Feb",
+      "Mar",
+      "Apr",
+      "Mei",
+      "Jun",
+      "Jul",
+      "Agu",
+      "Sep",
+      "Okt",
+      "Nov",
+      "Des"
+    ],
+    "days": ["Minggu", "Senin", "Selasa", "Rabu", "kamis", "Jumat", "Sabtu"],
+    "shortDays": ["Min", "Sen", "Sel", "Rab", "Kam", "Jum", "Sab"],
+    "toolbar": {
+      "exportToSVG": "Unduh SVG",
+      "exportToPNG": "Unduh PNG",
+      "exportToCSV": "Unduh CSV",
+      "menu": "Menu",
+      "selection": "Pilihan",
+      "selectionZoom": "Perbesar Pilihan",
+      "zoomIn": "Perbesar",
+      "zoomOut": "Perkecil",
+      "pan": "Geser",
+      "reset": "Atur Ulang Zoom"
+    }
+  }
+}

+ 55 - 0
public/libs/apexcharts/dist/locales/it.json

@@ -0,0 +1,55 @@
+{
+  "name": "it",
+  "options": {
+    "months": [
+      "Gennaio",
+      "Febbraio",
+      "Marzo",
+      "Aprile",
+      "Maggio",
+      "Giugno",
+      "Luglio",
+      "Agosto",
+      "Settembre",
+      "Ottobre",
+      "Novembre",
+      "Dicembre"
+    ],
+    "shortMonths": [
+      "Gen",
+      "Feb",
+      "Mar",
+      "Apr",
+      "Mag",
+      "Giu",
+      "Lug",
+      "Ago",
+      "Set",
+      "Ott",
+      "Nov",
+      "Dic"
+    ],
+    "days": [
+      "Domenica",
+      "Lunedì",
+      "Martedì",
+      "Mercoledì",
+      "Giovedì",
+      "Venerdì",
+      "Sabato"
+    ],
+    "shortDays": ["Dom", "Lun", "Mar", "Mer", "Gio", "Ven", "Sab"],
+    "toolbar": {
+      "exportToSVG": "Scarica SVG",
+      "exportToPNG": "Scarica PNG",
+      "exportToCSV": "Scarica CSV",
+      "menu": "Menu",
+      "selection": "Selezione",
+      "selectionZoom": "Seleziona Zoom",
+      "zoomIn": "Zoom In",
+      "zoomOut": "Zoom Out",
+      "pan": "Sposta",
+      "reset": "Reimposta Zoom"
+    }
+  }
+}

+ 55 - 0
public/libs/apexcharts/dist/locales/ja.json

@@ -0,0 +1,55 @@
+{
+  "name": "ja",
+  "options": {
+    "months": [
+      "1月",
+      "2月",
+      "3月",
+      "4月",
+      "5月",
+      "6月",
+      "7月",
+      "8月",
+      "9月",
+      "10月",
+      "11月",
+      "12月"
+    ],
+    "shortMonths": [
+      "1月",
+      "2月",
+      "3月",
+      "4月",
+      "5月",
+      "6月",
+      "7月",
+      "8月",
+      "9月",
+      "10月",
+      "11月",
+      "12月"
+    ],
+    "days": [
+      "日曜日",
+      "月曜日",
+      "火曜日",
+      "水曜日",
+      "木曜日",
+      "金曜日",
+      "土曜日"
+    ],
+    "shortDays": ["日", "月", "火", "水", "木", "金", "土"],
+    "toolbar": {
+      "exportToSVG": "SVGダウンロード",
+      "exportToPNG": "PNGダウンロード",
+      "exportToCSV": "CSVダウンロード",
+      "menu": "メニュー",
+      "selection": "選択",
+      "selectionZoom": "選択ズーム",
+      "zoomIn": "拡大",
+      "zoomOut": "縮小",
+      "pan": "パン",
+      "reset": "ズームリセット"
+    }
+  }
+}

+ 55 - 0
public/libs/apexcharts/dist/locales/ka.json

@@ -0,0 +1,55 @@
+{
+  "name": "ka",
+  "options": {
+    "months": [
+      "იანვარი",
+      "თებერვალი",
+      "მარტი",
+      "აპრილი",
+      "მაისი",
+      "ივნისი",
+      "ივლისი",
+      "აგვისტო",
+      "სექტემბერი",
+      "ოქტომბერი",
+      "ნოემბერი",
+      "დეკემბერი"
+    ],
+    "shortMonths": [
+      "იან",
+      "თებ",
+      "მარ",
+      "აპრ",
+      "მაი",
+      "ივნ",
+      "ივლ",
+      "აგვ",
+      "სექ",
+      "ოქტ",
+      "ნოე",
+      "დეკ"
+    ],
+    "days": [
+      "კვირა",
+      "ორშაბათი",
+      "სამშაბათი",
+      "ოთხშაბათი",
+      "ხუთშაბათი",
+      "პარასკევი",
+      "შაბათი"
+    ],
+    "shortDays": ["კვი", "ორშ", "სამ", "ოთხ", "ხუთ", "პარ", "შაბ"],
+    "toolbar": {
+      "exportToSVG": "გადმოქაჩე SVG",
+      "exportToPNG": "გადმოქაჩე PNG",
+      "exportToCSV": "გადმოქაჩე CSV",
+      "menu": "მენიუ",
+      "selection": "არჩევა",
+      "selectionZoom": "არჩეულის გადიდება",
+      "zoomIn": "გადიდება",
+      "zoomOut": "დაპატარაება",
+      "pan": "გადაჩოჩება",
+      "reset": "გადიდების გაუქმება"
+    }
+  }
+}

+ 55 - 0
public/libs/apexcharts/dist/locales/ko.json

@@ -0,0 +1,55 @@
+{
+  "name": "ko",
+  "options": {
+    "months": [
+      "1월",
+      "2월",
+      "3월",
+      "4월",
+      "5월",
+      "6월",
+      "7월",
+      "8월",
+      "9월",
+      "10월",
+      "11월",
+      "12월"
+    ],
+    "shortMonths": [
+      "1월",
+      "2월",
+      "3월",
+      "4월",
+      "5월",
+      "6월",
+      "7월",
+      "8월",
+      "9월",
+      "10월",
+      "11월",
+      "12월"
+    ],
+    "days": [
+      "일요일",
+      "월요일",
+      "화요일",
+      "수요일",
+      "목요일",
+      "금요일",
+      "토요일"
+    ],
+    "shortDays": ["일", "월", "화", "수", "목", "금", "토"],
+    "toolbar": {
+      "exportToSVG": "SVG 다운로드",
+      "exportToPNG": "PNG 다운로드",
+      "exportToCSV": "CSV 다운로드",
+      "menu": "메뉴",
+      "selection": "선택",
+      "selectionZoom": "선택영역 확대",
+      "zoomIn": "확대",
+      "zoomOut": "축소",
+      "pan": "패닝",
+      "reset": "원래대로"
+    }
+  }
+}

+ 55 - 0
public/libs/apexcharts/dist/locales/lt.json

@@ -0,0 +1,55 @@
+{
+  "name": "lt",
+  "options": {
+    "months": [
+      "Sausis",
+      "Vasaris",
+      "Kovas",
+      "Balandis",
+      "Gegužė",
+      "Birželis",
+      "Liepa",
+      "Rugpjūtis",
+      "Rugsėjis",
+      "Spalis",
+      "Lapkritis",
+      "Gruodis"
+    ],
+    "shortMonths": [
+      "Sau",
+      "Vas",
+      "Kov",
+      "Bal",
+      "Geg",
+      "Bir",
+      "Lie",
+      "Rgp",
+      "Rgs",
+      "Spl",
+      "Lap",
+      "Grd"
+    ],
+    "days": [
+      "Sekmadienis",
+      "Pirmadienis",
+      "Antradienis",
+      "Trečiadienis",
+      "Ketvirtadienis",
+      "Penktadienis",
+      "Šeštadienis"
+    ],
+    "shortDays": ["Sk", "Per", "An", "Tr", "Kt", "Pn", "Št"],
+    "toolbar": {
+      "exportToSVG": "Atsisiųsti SVG",
+      "exportToPNG": "Atsisiųsti PNG",
+      "exportToCSV": "Atsisiųsti CSV",
+      "menu": "Menu",
+      "selection": "Pasirinkimas",
+      "selectionZoom": "Zoom: Pasirinkimas",
+      "zoomIn": "Zoom: Priartinti",
+      "zoomOut": "Zoom: Atitolinti",
+      "pan": "Perkėlimas",
+      "reset": "Atstatyti"
+    }
+  }
+}

+ 64 - 0
public/libs/apexcharts/dist/locales/lv.json

@@ -0,0 +1,64 @@
+{
+  "name": "lv",
+  "options": {
+    "months": [
+      "janvāris",
+      "februāris",
+      "marts",
+      "aprīlis",
+      "maijs",
+      "jūnijs",
+      "jūlijs",
+      "augusts",
+      "septembris",
+      "oktobris",
+      "novembris",
+      "decembris"
+    ],
+    "shortMonths": [
+      "janv",
+      "febr",
+      "marts",
+      "apr",
+      "maijs",
+      "jūn",
+      "jūl",
+      "aug",
+      "sept",
+      "okt",
+      "nov",
+      "dec"
+    ],
+    "days": [
+      "svētdiena",
+      "pirmdiena",
+      "otrdiena",
+      "trešdiena",
+      "ceturtdiena",
+      "piektdiena",
+      "sestdiena"
+    ],
+    "shortDays": [
+      "Sv",
+      "P",
+      "O",
+      "T",
+      "C",
+      "P",
+      "S"
+    ],
+    "toolbar": {
+      "exportToSVG": "Lejuplādēt SVG",
+      "exportToPNG": "Lejuplādēt PNG",
+      "exportToCSV": "Lejuplādēt CSV",
+      "menu": "Izvēlne",
+      "selection": "Atlase",
+      "selectionZoom": "Pietuvināt atlasi",
+      "zoomIn": "Pietuvināt",
+      "zoomOut": "Attālināt",
+      "pan": "Pārvietoties diagrammā",
+      "reset": "Atiestatīt pietuvinājumu"
+    }
+  }
+}
+

+ 55 - 0
public/libs/apexcharts/dist/locales/nb.json

@@ -0,0 +1,55 @@
+{
+  "name": "nb",
+  "options": {
+    "months": [
+      "Januar",
+      "Februar",
+      "Mars",
+      "April",
+      "Mai",
+      "Juni",
+      "Juli",
+      "August",
+      "September",
+      "Oktober",
+      "November",
+      "Desember"
+    ],
+    "shortMonths": [
+      "Jan",
+      "Feb",
+      "Mar",
+      "Apr",
+      "Mai",
+      "Jun",
+      "Jul",
+      "Aug",
+      "Sep",
+      "Okt",
+      "Nov",
+      "Des"
+    ],
+    "days": [
+      "Søndag",
+      "Mandag",
+      "Tirsdag",
+      "Onsdag",
+      "Torsdag",
+      "Fredag",
+      "Lørdag"
+    ],
+    "shortDays": ["Sø", "Ma", "Ti", "On", "To", "Fr", "Lø"],
+    "toolbar": {
+      "exportToSVG": "Last ned SVG",
+      "exportToPNG": "Last ned PNG",
+      "exportToCSV": "Last ned CSV",
+      "menu": "Menu",
+      "selection": "Velg",
+      "selectionZoom": "Zoom: Velg",
+      "zoomIn": "Zoome inn",
+      "zoomOut": "Zoome ut",
+      "pan": "Skyving",
+      "reset": "Start på nytt"
+    }
+  }
+}

+ 55 - 0
public/libs/apexcharts/dist/locales/nl.json

@@ -0,0 +1,55 @@
+{
+  "name": "nl",
+  "options": {
+    "months": [
+      "Januari",
+      "Februari",
+      "Maart",
+      "April",
+      "Mei",
+      "Juni",
+      "Juli",
+      "Augustus",
+      "September",
+      "Oktober",
+      "November",
+      "December"
+    ],
+    "shortMonths": [
+      "Jan",
+      "Feb",
+      "Mrt",
+      "Apr",
+      "Mei",
+      "Jun",
+      "Jul",
+      "Aug",
+      "Sep",
+      "Okt",
+      "Nov",
+      "Dec"
+    ],
+    "days": [
+      "Zondag",
+      "Maandag",
+      "Dinsdag",
+      "Woensdag",
+      "Donderdag",
+      "Vrijdag",
+      "Zaterdag"
+    ],
+    "shortDays": ["Zo", "Ma", "Di", "Wo", "Do", "Vr", "Za"],
+    "toolbar": {
+      "exportToSVG": "Download SVG",
+      "exportToPNG": "Download PNG",
+      "exportToCSV": "Download CSV",
+      "menu": "Menu",
+      "selection": "Selectie",
+      "selectionZoom": "Zoom selectie",
+      "zoomIn": "Zoom in",
+      "zoomOut": "Zoom out",
+      "pan": "Verplaatsen",
+      "reset": "Standaardwaarden"
+    }
+  }
+}

+ 55 - 0
public/libs/apexcharts/dist/locales/pl.json

@@ -0,0 +1,55 @@
+{
+  "name": "pl",
+  "options": {
+    "months": [
+      "Styczeń",
+      "Luty",
+      "Marzec",
+      "Kwiecień",
+      "Maj",
+      "Czerwiec",
+      "Lipiec",
+      "Sierpień",
+      "Wrzesień",
+      "Październik",
+      "Listopad",
+      "Grudzień"
+    ],
+    "shortMonths": [
+      "Sty",
+      "Lut",
+      "Mar",
+      "Kwi",
+      "Maj",
+      "Cze",
+      "Lip",
+      "Sie",
+      "Wrz",
+      "Paź",
+      "Lis",
+      "Gru"
+    ],
+    "days": [
+      "Niedziela",
+      "Poniedziałek",
+      "Wtorek",
+      "Środa",
+      "Czwartek",
+      "Piątek",
+      "Sobota"
+    ],
+    "shortDays": ["Nd", "Pn", "Wt", "Śr", "Cz", "Pt", "Sb"],
+    "toolbar": {
+      "exportToSVG": "Pobierz SVG",
+      "exportToPNG": "Pobierz PNG",
+      "exportToCSV": "Pobierz CSV",
+      "menu": "Menu",
+      "selection": "Wybieranie",
+      "selectionZoom": "Zoom: Wybieranie",
+      "zoomIn": "Zoom: Przybliż",
+      "zoomOut": "Zoom: Oddal",
+      "pan": "Przesuwanie",
+      "reset": "Resetuj"
+    }
+  }
+}

+ 55 - 0
public/libs/apexcharts/dist/locales/pt-br.json

@@ -0,0 +1,55 @@
+{
+  "name": "pt-br",
+  "options": {
+    "months": [
+      "Janeiro",
+      "Fevereiro",
+      "Março",
+      "Abril",
+      "Maio",
+      "Junho",
+      "Julho",
+      "Agosto",
+      "Setembro",
+      "Outubro",
+      "Novembro",
+      "Dezembro"
+    ],
+    "shortMonths": [
+      "Jan",
+      "Fev",
+      "Mar",
+      "Abr",
+      "Mai",
+      "Jun",
+      "Jul",
+      "Ago",
+      "Set",
+      "Out",
+      "Nov",
+      "Dez"
+    ],
+    "days": [
+      "Domingo",
+      "Segunda",
+      "Terça",
+      "Quarta",
+      "Quinta",
+      "Sexta",
+      "Sábado"
+    ],
+    "shortDays": ["Dom", "Seg", "Ter", "Qua", "Qui", "Sex", "Sab"],
+    "toolbar": {
+      "exportToSVG": "Baixar SVG",
+      "exportToPNG": "Baixar PNG",
+      "exportToCSV": "Baixar CSV",
+      "menu": "Menu",
+      "selection": "Selecionar",
+      "selectionZoom": "Selecionar Zoom",
+      "zoomIn": "Aumentar",
+      "zoomOut": "Diminuir",
+      "pan": "Navegação",
+      "reset": "Reiniciar Zoom"
+    }
+  }
+}

+ 55 - 0
public/libs/apexcharts/dist/locales/pt.json

@@ -0,0 +1,55 @@
+{
+  "name": "pt",
+  "options": {
+    "months": [
+      "Janeiro",
+      "Fevereiro",
+      "Março",
+      "Abril",
+      "Maio",
+      "Junho",
+      "Julho",
+      "Agosto",
+      "Setembro",
+      "Outubro",
+      "Novembro",
+      "Dezembro"
+    ],
+    "shortMonths": [
+      "Jan",
+      "Fev",
+      "Mar",
+      "Abr",
+      "Mai",
+      "Jun",
+      "Jul",
+      "Ag",
+      "Set",
+      "Out",
+      "Nov",
+      "Dez"
+    ],
+    "days": [
+      "Domingo",
+      "Segunda-feira",
+      "Terça-feira",
+      "Quarta-feira",
+      "Quinta-feira",
+      "Sexta-feira",
+      "Sábado"
+    ],
+    "shortDays": ["Do", "Se", "Te", "Qa", "Qi", "Sx", "Sa"],
+    "toolbar": {
+      "exportToSVG": "Baixar SVG",
+      "exportToPNG": "Baixar PNG",
+      "exportToCSV": "Baixar CSV",
+      "menu": "Menu",
+      "selection": "Selecionar",
+      "selectionZoom": "Zoom: Selecionar",
+      "zoomIn": "Zoom: Aumentar",
+      "zoomOut": "Zoom: Diminuir",
+      "pan": "Deslocamento",
+      "reset": "Redefinir"
+    }
+  }
+}

+ 55 - 0
public/libs/apexcharts/dist/locales/rs.json

@@ -0,0 +1,55 @@
+{
+  "name": "rs",
+  "options": {
+    "months": [
+      "Januar",
+      "Februar",
+      "Mart",
+      "April",
+      "Maj",
+      "Jun",
+      "Jul",
+      "Avgust",
+      "Septembar",
+      "Oktobar",
+      "Novembar",
+      "Decembar"
+    ],
+    "shortMonths": [
+      "Jan",
+      "Feb",
+      "Mar",
+      "Apr",
+      "Maj",
+      "Jun",
+      "Jul",
+      "Avg",
+      "Sep",
+      "Okt",
+      "Nov",
+      "Dec"
+    ],
+    "days": [
+      "Nedelja",
+      "Ponedeljak",
+      "Utorak",
+      "Sreda",
+      "Četvrtak",
+      "Petak",
+      "Subota"
+    ],
+    "shortDays": ["Ned", "Pon", "Uto", "Sre", "Čet", "Pet", "Sub"],
+    "toolbar": {
+      "exportToSVG": "Preuzmi SVG",
+      "exportToPNG": "Preuzmi PNG",
+      "exportToCSV": "Preuzmi CSV",
+      "menu": "Meni",
+      "selection": "Odabir",
+      "selectionZoom": "Odabirno povećanje",
+      "zoomIn": "Uvećajte prikaz",
+      "zoomOut": "Umanjite prikaz",
+      "pan": "Pomeranje",
+      "reset": "Resetuj prikaz"
+    }
+  }
+}

+ 55 - 0
public/libs/apexcharts/dist/locales/ru.json

@@ -0,0 +1,55 @@
+{
+  "name": "ru",
+  "options": {
+    "months": [
+      "Январь",
+      "Февраль",
+      "Март",
+      "Апрель",
+      "Май",
+      "Июнь",
+      "Июль",
+      "Август",
+      "Сентябрь",
+      "Октябрь",
+      "Ноябрь",
+      "Декабрь"
+    ],
+    "shortMonths": [
+      "Янв",
+      "Фев",
+      "Мар",
+      "Апр",
+      "Май",
+      "Июн",
+      "Июл",
+      "Авг",
+      "Сен",
+      "Окт",
+      "Ноя",
+      "Дек"
+    ],
+    "days": [
+      "Воскресенье",
+      "Понедельник",
+      "Вторник",
+      "Среда",
+      "Четверг",
+      "Пятница",
+      "Суббота"
+    ],
+    "shortDays": ["Вс", "Пн", "Вт", "Ср", "Чт", "Пт", "Сб"],
+    "toolbar": {
+      "exportToSVG": "Сохранить SVG",
+      "exportToPNG": "Сохранить PNG",
+      "exportToCSV": "Сохранить CSV",
+      "menu": "Меню",
+      "selection": "Выбор",
+      "selectionZoom": "Выбор с увеличением",
+      "zoomIn": "Увеличить",
+      "zoomOut": "Уменьшить",
+      "pan": "Перемещение",
+      "reset": "Сбросить увеличение"
+    }
+  }
+}

+ 55 - 0
public/libs/apexcharts/dist/locales/se.json

@@ -0,0 +1,55 @@
+{
+  "name": "se",
+  "options": {
+    "months": [
+      "Januari",
+      "Februari",
+      "Mars",
+      "April",
+      "Maj",
+      "Juni",
+      "Juli",
+      "Augusti",
+      "September",
+      "Oktober",
+      "November",
+      "December"
+    ],
+    "shortMonths": [
+      "Jan",
+      "Feb",
+      "Mar",
+      "Apr",
+      "Maj",
+      "Juni",
+      "Juli",
+      "Aug",
+      "Sep",
+      "Okt",
+      "Nov",
+      "Dec"
+    ],
+    "days": [
+      "Söndag",
+      "Måndag",
+      "Tisdag",
+      "Onsdag",
+      "Torsdag",
+      "Fredag",
+      "Lördag"
+    ],
+    "shortDays": ["Sön", "Mån", "Tis", "Ons", "Tor", "Fre", "Lör"],
+    "toolbar": {
+      "exportToSVG": "Ladda SVG",
+      "exportToPNG": "Ladda PNG",
+      "exportToCSV": "Ladda CSV",
+      "menu": "Meny",
+      "selection": "Selektion",
+      "selectionZoom": "Val av zoom",
+      "zoomIn": "Zooma in",
+      "zoomOut": "Zooma ut",
+      "pan": "Panorering",
+      "reset": "Återställ zoomning"
+    }
+  }
+}

+ 55 - 0
public/libs/apexcharts/dist/locales/sk.json

@@ -0,0 +1,55 @@
+{
+  "name": "sk",
+  "options": {
+    "months": [
+      "Január",
+      "Február",
+      "Marec",
+      "Apríl",
+      "Máj",
+      "Jún",
+      "Júl",
+      "August",
+      "September",
+      "Október",
+      "November",
+      "December"
+    ],
+    "shortMonths": [
+      "Jan",
+      "Feb",
+      "Mar",
+      "Apr",
+      "Máj",
+      "Jún",
+      "Júl",
+      "Aug",
+      "Sep",
+      "Okt",
+      "Nov",
+      "Dec"
+    ],
+    "days": [
+      "Nedeľa",
+      "Pondelok",
+      "Utorok",
+      "Streda",
+      "Štvrtok",
+      "Piatok",
+      "Sobota"
+    ],
+    "shortDays": ["Ne", "Po", "Ut", "St", "Št", "Pi", "So"],
+    "toolbar": {
+      "exportToSVG": "Stiahnuť SVG",
+      "exportToPNG": "Stiahnuť PNG",
+      "exportToCSV": "Stiahnuť CSV",
+      "menu": "Menu",
+      "selection": "Vyberanie",
+      "selectionZoom": "Zoom: Vyberanie",
+      "zoomIn": "Zoom: Priblížiť",
+      "zoomOut": "Zoom: Vzdialiť",
+      "pan": "Presúvanie",
+      "reset": "Resetovať"
+    }
+  }
+}

+ 55 - 0
public/libs/apexcharts/dist/locales/sl.json

@@ -0,0 +1,55 @@
+{
+  "name": "sl",
+  "options": {
+    "months": [
+      "Januar",
+      "Februar",
+      "Marec",
+      "April",
+      "Maj",
+      "Junij",
+      "Julij",
+      "Avgust",
+      "Septemer",
+      "Oktober",
+      "November",
+      "December"
+    ],
+    "shortMonths": [
+      "Jan",
+      "Feb",
+      "Mar",
+      "Apr",
+      "Maj",
+      "Jun",
+      "Jul",
+      "Avg",
+      "Sep",
+      "Okt",
+      "Nov",
+      "Dec"
+    ],
+    "days": [
+      "Nedelja",
+      "Ponedeljek",
+      "Torek",
+      "Sreda",
+      "Četrtek",
+      "Petek",
+      "Sobota"
+    ],
+    "shortDays": ["Ne", "Po", "To", "Sr", "Če", "Pe", "So"],
+    "toolbar": {
+      "exportToSVG": "Prenesi SVG",
+      "exportToPNG": "Prenesi PNG",
+      "exportToCSV": "Prenesi CSV",
+      "menu": "Menu",
+      "selection": "Izbiranje",
+      "selectionZoom": "Zoom: Izbira",
+      "zoomIn": "Zoom: Približaj",
+      "zoomOut": "Zoom: Oddalji",
+      "pan": "Pomikanje",
+      "reset": "Resetiraj"
+    }
+  }
+}

+ 55 - 0
public/libs/apexcharts/dist/locales/sq.json

@@ -0,0 +1,55 @@
+{
+  "name": "sq",
+  "options": {
+    "months": [
+      "Janar",
+      "Shkurt",
+      "Mars",
+      "Prill",
+      "Maj",
+      "Qershor",
+      "Korrik",
+      "Gusht",
+      "Shtator",
+      "Tetor",
+      "Nëntor",
+      "Dhjetor"
+    ],
+    "shortMonths": [
+      "Jan",
+      "Shk",
+      "Mar",
+      "Pr",
+      "Maj",
+      "Qer",
+      "Korr",
+      "Gush",
+      "Sht",
+      "Tet",
+      "Nën",
+      "Dhj"
+    ],
+    "days": [
+      "e Dielë",
+      "e Hënë",
+      "e Martë",
+      "e Mërkurë",
+      "e Enjte",
+      "e Premte",
+      "e Shtunë"
+    ],
+    "shortDays": ["Die", "Hën", "Mar", "Mër", "Enj", "Pre", "Sht"],
+    "toolbar": {
+      "exportToSVG": "Shkarko SVG",
+      "exportToPNG": "Shkarko PNG",
+      "exportToCSV": "Shkarko CSV",
+      "menu": "Menu",
+      "selection": "Seleksiono",
+      "selectionZoom": "Seleksiono Zmadhim",
+      "zoomIn": "Zmadho",
+      "zoomOut": "Zvogëlo",
+      "pan": "Spostoje",
+      "reset": "Rikthe dimensionin"
+    }
+  }
+}

+ 55 - 0
public/libs/apexcharts/dist/locales/th.json

@@ -0,0 +1,55 @@
+{
+  "name": "th",
+  "options": {
+    "months": [
+      "มกราคม",
+      "กุมภาพันธ์",
+      "มีนาคม",
+      "เมษายน",
+      "พฤษภาคม",
+      "มิถุนายน",
+      "กรกฎาคม",
+      "สิงหาคม",
+      "กันยายน",
+      "ตุลาคม",
+      "พฤศจิกายน",
+      "ธันวาคม"
+    ],
+    "shortMonths": [
+      "ม.ค.",
+      "ก.พ.",
+      "มี.ค.",
+      "เม.ย.",
+      "พ.ค.",
+      "มิ.ย.",
+      "ก.ค.",
+      "ส.ค.",
+      "ก.ย.",
+      "ต.ค.",
+      "พ.ย.",
+      "ธ.ค."
+    ],
+    "days": [
+      "อาทิตย์",
+      "จันทร์",
+      "อังคาร",
+      "พุธ",
+      "พฤหัสบดี",
+      "ศุกร์",
+      "เสาร์"
+    ],
+    "shortDays": ["อา", "จ", "อ", "พ", "พฤ", "ศ", "ส"],
+    "toolbar": {
+      "exportToSVG": "ดาวน์โหลด SVG",
+      "exportToPNG": "ดาวน์โหลด PNG",
+      "exportToCSV": "ดาวน์โหลด CSV",
+      "menu": "เมนู",
+      "selection": "เลือก",
+      "selectionZoom": "เลือกจุดที่จะซูม",
+      "zoomIn": "ซูมเข้า",
+      "zoomOut": "ซูมออก",
+      "pan": "ปรากฎว่า",
+      "reset": "รีเซ็ตการซูม"
+    }
+  }
+}

+ 55 - 0
public/libs/apexcharts/dist/locales/tr.json

@@ -0,0 +1,55 @@
+{
+  "name": "tr",
+  "options": {
+    "months": [
+      "Ocak",
+      "Şubat",
+      "Mart",
+      "Nisan",
+      "Mayıs",
+      "Haziran",
+      "Temmuz",
+      "Ağustos",
+      "Eylül",
+      "Ekim",
+      "Kasım",
+      "Aralık"
+    ],
+    "shortMonths": [
+      "Oca",
+      "Şub",
+      "Mar",
+      "Nis",
+      "May",
+      "Haz",
+      "Tem",
+      "Ağu",
+      "Eyl",
+      "Eki",
+      "Kas",
+      "Ara"
+    ],
+    "days": [
+      "Pazar",
+      "Pazartesi",
+      "Salı",
+      "Çarşamba",
+      "Perşembe",
+      "Cuma",
+      "Cumartesi"
+    ],
+    "shortDays": ["Paz", "Pzt", "Sal", "Çar", "Per", "Cum", "Cmt"],
+    "toolbar": {
+      "exportToSVG": "SVG İndir",
+      "exportToPNG": "PNG İndir",
+      "exportToCSV": "CSV İndir",
+      "menu": "Menü",
+      "selection": "Seçim",
+      "selectionZoom": "Seçim Yakınlaştır",
+      "zoomIn": "Yakınlaştır",
+      "zoomOut": "Uzaklaştır",
+      "pan": "Kaydır",
+      "reset": "Yakınlaştırmayı Sıfırla"
+    }
+  }
+}

+ 55 - 0
public/libs/apexcharts/dist/locales/ua.json

@@ -0,0 +1,55 @@
+{
+  "name": "ua",
+  "options": {
+    "months": [
+      "Січень",
+      "Лютий",
+      "Березень",
+      "Квітень",
+      "Травень",
+      "Червень",
+      "Липень",
+      "Серпень",
+      "Вересень",
+      "Жовтень",
+      "Листопад",
+      "Грудень"
+    ],
+    "shortMonths": [
+      "Січ",
+      "Лют",
+      "Бер",
+      "Кві",
+      "Тра",
+      "Чер",
+      "Лип",
+      "Сер",
+      "Вер",
+      "Жов",
+      "Лис",
+      "Гру"
+    ],
+    "days": [
+      "Неділя",
+      "Понеділок",
+      "Вівторок",
+      "Середа",
+      "Четвер",
+      "П'ятниця",
+      "Субота"
+    ],
+    "shortDays": ["Нд", "Пн", "Вт", "Ср", "Чт", "Пт", "Сб"],
+    "toolbar": {
+      "exportToSVG": "Зберегти SVG",
+      "exportToPNG": "Зберегти PNG",
+      "exportToCSV": "Зберегти CSV",
+      "menu": "Меню",
+      "selection": "Вибір",
+      "selectionZoom": "Вибір із збільшенням",
+      "zoomIn": "Збільшити",
+      "zoomOut": "Зменшити",
+      "pan": "Переміщення",
+      "reset": "Скинути збільшення"
+    }
+  }
+}

+ 55 - 0
public/libs/apexcharts/dist/locales/zh-cn.json

@@ -0,0 +1,55 @@
+{
+  "name": "zh-cn",
+  "options": {
+    "months": [
+      "一月",
+      "二月",
+      "三月",
+      "四月",
+      "五月",
+      "六月",
+      "七月",
+      "八月",
+      "九月",
+      "十月",
+      "十一月",
+      "十二月"
+    ],
+    "shortMonths": [
+      "一月",
+      "二月",
+      "三月",
+      "四月",
+      "五月",
+      "六月",
+      "七月",
+      "八月",
+      "九月",
+      "十月",
+      "十一月",
+      "十二月"
+    ],
+    "days": [
+      "星期天",
+      "星期一",
+      "星期二",
+      "星期三",
+      "星期四",
+      "星期五",
+      "星期六"
+    ],
+    "shortDays": ["周日", "周一", "周二", "周三", "周四", "周五", "周六"],
+    "toolbar": {
+      "exportToSVG": "下载 SVG",
+      "exportToPNG": "下载 PNG",
+      "exportToCSV": "下载 CSV",
+      "menu": "菜单",
+      "selection": "选择",
+      "selectionZoom": "选择缩放",
+      "zoomIn": "放大",
+      "zoomOut": "缩小",
+      "pan": "平移",
+      "reset": "重置缩放"
+    }
+  }
+}

+ 55 - 0
public/libs/apexcharts/dist/locales/zh-tw.json

@@ -0,0 +1,55 @@
+{
+  "name": "zh-tw",
+  "options": {
+    "months": [
+      "一月",
+      "二月",
+      "三月",
+      "四月",
+      "五月",
+      "六月",
+      "七月",
+      "八月",
+      "九月",
+      "十月",
+      "十一月",
+      "十二月"
+    ],
+    "shortMonths": [
+      "一月",
+      "二月",
+      "三月",
+      "四月",
+      "五月",
+      "六月",
+      "七月",
+      "八月",
+      "九月",
+      "十月",
+      "十一月",
+      "十二月"
+    ],
+    "days": [
+      "星期日",
+      "星期一",
+      "星期二",
+      "星期三",
+      "星期四",
+      "星期五",
+      "星期六"
+    ],
+    "shortDays": ["週日", "週一", "週二", "週三", "週四", "週五", "週六"],
+    "toolbar": {
+      "exportToSVG": "下載 SVG",
+      "exportToPNG": "下載 PNG",
+      "exportToCSV": "下載 CSV",
+      "menu": "菜單",
+      "selection": "選擇",
+      "selectionZoom": "選擇縮放",
+      "zoomIn": "放大",
+      "zoomOut": "縮小",
+      "pan": "平移",
+      "reset": "重置縮放"
+    }
+  }
+}

BIN
public/static/avatars/burns.jpg


BIN
public/static/avatars/frank.jpg


BIN
public/static/avatars/moe.jpg


BIN
public/static/avatars/poochie.jpg


BIN
public/static/avatars/rus.jpg


BIN
public/static/avatars/skinner.jpg


+ 3 - 0
public/static/logo-small-white.svg

@@ -0,0 +1,3 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 68 68">
+  <path d="M64.6 16.2C63 9.9 58.1 5 51.8 3.4 40 1.5 28 1.5 16.2 3.4 9.9 5 5 9.9 3.4 16.2 1.5 28 1.5 40 3.4 51.8 5 58.1 9.9 63 16.2 64.6c11.8 1.9 23.8 1.9 35.6 0C58.1 63 63 58.1 64.6 51.8c1.9-11.8 1.9-23.8 0-35.6zM33.3 36.3c-2.8 4.4-6.6 8.2-11.1 11-1.5.9-3.3.9-4.8.1s-2.4-2.3-2.5-4c0-1.7.9-3.3 2.4-4.1 2.3-1.4 4.4-3.2 6.1-5.3-1.8-2.1-3.8-3.8-6.1-5.3-2.3-1.3-3-4.2-1.7-6.4s4.3-2.9 6.5-1.6c4.5 2.8 8.2 6.5 11.1 10.9 1 1.4 1 3.3.1 4.7zM49.2 46H37.8c-2.1 0-3.8-1-3.8-3s1.7-3 3.8-3h11.4c2.1 0 3.8 1 3.8 3s-1.7 3-3.8 3z" fill="#ffffff"/>
+</svg>

File diff suppressed because it is too large
+ 0 - 0
public/static/logo-small.svg


File diff suppressed because it is too large
+ 2 - 0
public/static/logo-white.svg


File diff suppressed because it is too large
+ 0 - 0
public/static/logo.svg


+ 47 - 0
routes/index.js

@@ -0,0 +1,47 @@
+const express = require("express");
+const router = express.Router();
+
+const { Dashboard } = require("../controllers/dashboard");
+
+const { AddSite, RemoveSite, RefreshSites, DisableSite, EnableSite } = require("../controllers/site_actions");
+const { Install, Uninstall } = require("../controllers/app_actions");
+
+const {Apps, processApps} = require("../controllers/apps");
+const { Users } = require("../controllers/users");
+const {Account} = require("../controllers/account");
+const {Settings} = require("../controllers/settings");
+const {Logout} = require("../controllers/logout");
+const {Login, processLogin} = require("../controllers/login");
+const {Register, processRegister} = require("../controllers/register");
+
+
+
+router.get("/", Dashboard);
+
+router.post("/install", Install)
+router.post("/uninstall", Uninstall)
+
+router.post("/addsite", AddSite)
+router.post("/removesite", RemoveSite)
+router.get("/refreshsites", RefreshSites)
+router.post("/disablesite", DisableSite)
+router.post("/enablesite", EnableSite)
+
+
+router.get("/users", Users);
+
+router.get("/apps", Apps);
+router.post("/apps", processApps);
+
+router.get("/settings", Settings);
+router.get("/account", Account);
+
+router.get("/login",Login); // Login page
+router.post("/login",processLogin); // Process login
+
+router.get("/register", Register); // Register page
+router.post("/register",processRegister); // Process Register
+
+router.get("/logout",Logout); // Logout
+
+module.exports = router;

+ 69 - 0
setup.sh

@@ -0,0 +1,69 @@
+#!/bin/bash
+
+# To demo DweebUI, run this script on a fresh Debian 12.2 install. This script will open port 443/tcp for Reverse Proxy and 22/tcp for SSH.
+
+# Manual Install:
+# cd DweebUI
+# chmod +x setup.sh
+# sudo ./setup.sh
+
+# Install dependencies
+apt-get install -y curl unzip ufw gnupg ca-certificates lsb-release gpg
+
+# Enable firewall
+ufw allow ssh && ufw --force enable
+
+# Opens port 443/tcp for Reverse Proxy
+ufw allow https
+
+# Install Docker
+install -m 0755 -d /etc/apt/keyrings
+curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
+chmod a+r /etc/apt/keyrings/docker.gpg
+
+echo \
+  "deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian \
+  "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \
+  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
+sudo apt-get update -y
+sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
+
+# Create docker network
+docker network create -d bridge AppBridge 
+
+# Install redis
+curl -fsSL https://packages.redis.io/gpg | sudo gpg --dearmor -o /usr/share/keyrings/redis-archive-keyring.gpg
+echo "deb [signed-by=/usr/share/keyrings/redis-archive-keyring.gpg] https://packages.redis.io/deb $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/redis.list
+apt-get update -y
+apt-get install -y redis
+systemctl enable --now redis-server
+
+# Install nodejs
+mkdir -p /etc/apt/keyrings
+curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | sudo gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg
+NODE_MAJOR=20
+echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_$NODE_MAJOR.x nodistro main" | sudo tee /etc/apt/sources.list.d/nodesource.list
+sudo apt-get update
+sudo apt-get install nodejs -y
+
+
+# Install pnpm and nodejs modules
+npm install -g pnpm
+pnpm i
+
+# Prep for caddy
+mkdir -p /home/docker/caddy/sites
+echo "import sites/*" > /home/docker/caddy/Caddyfile.tmp
+mv /home/docker/caddy/Caddyfile.tmp /home/docker/caddy/Caddyfile
+
+
+# Install pm2 and start DweebUI
+npm install pm2 -g
+pm2 start app.js --name "dweebui"
+pm2 log
+
+
+# Creates a 'docker-compose' alias, since the command changed to 'docker compose' in Debian 11.
+echo '#!/bin/sh
+docker compose "$@"' > /usr/local/bin/docker-compose
+chmod +x /usr/local/bin/docker-compose

+ 5869 - 0
templates.json

@@ -0,0 +1,5869 @@
+{
+  "version": "2",
+  "templates": [
+    {
+      "type": 1,
+      "name": "heimdall",
+      "title": "Heimdall",
+      "note": "",
+      "description": "Heimdall is a way to organise all those links to your most used web sites and web applications in a simple way. <a href='https://hub.docker.com/r/linuxserver/heimdall/' target='_blank'>Docker Hub</a>",
+      "logo": "https://raw.githubusercontent.com/lllllllillllllillll/DweebUI-Icons/main/heimdall.png",
+      "image": "lscr.io/linuxserver/heimdall:latest",
+      "categories": [
+        "Dashboard"
+      ],
+      "ports": [
+        "8001:80/tcp",
+        "4001:443/tcp"
+      ],
+      "volumes": [
+        {
+          "bind": "/home/docker/heimdall",
+          "container": "/config"
+        }
+      ],
+      "env": [
+        {
+          "name": "PGID",
+          "label": "PGID",
+          "default": "1000",
+          "preset": true
+        },
+        {
+          "name": "PUID",
+          "label": "PUID",
+          "default": "1000",
+          "preset": true
+        },
+        {
+          "name": "TZ",
+          "label": "TZ",
+          "default": "America/Los_Angeles"
+        }
+      ]
+    },
+    {
+      "type": 1,
+      "name": "homepage",
+      "title": "Homepage",
+      "description": "A modern (fully static, fast), secure (fully proxied), highly customizable application dashboard with integrations for more than 25 services and translations for over 15 languages. Easily configured via YAML files (or discovery via docker labels). <a href='https://github.com/benphelps/homepage/'>Github</a>",
+      "logo": "https://raw.githubusercontent.com/lllllllillllllillll/DweebUI-Icons/main/homepage.png",
+      "image": "ghcr.io/benphelps/homepage:latest",
+      "categories": [
+        "Dashboard"
+      ],
+      "ports": [
+        "3000:3000/tcp"
+      ],
+      "volumes": [
+        {
+          "bind": "/home/docker/homepage",
+          "container": "/app/config"
+        },
+        {
+          "bind": "/var/run/docker.sock",
+          "container": "/var/run/docker.sock:ro"
+        }
+      ],
+      "env": [
+        {
+          "name": "PGID",
+          "label": "PGID",
+          "default": "1000",
+          "preset": true
+        },
+        {
+          "name": "PUID",
+          "label": "PUID",
+          "default": "1000",
+          "preset": true
+        },
+        {
+          "name": "TZ",
+          "label": "TZ",
+          "default": "America/Los_Angeles"
+        }
+      ]
+    },
+    {
+      "type": 1,
+      "name": "jackett",
+      "title": "Jackett",
+      "description": "Jackett works as a proxy server: it translates queries from apps (Sonarr, SickRage, CouchPotato, Mylar, etc) into tracker-site-specific http queries, parses the html response, then sends results back to the requesting software. This allows for getting recent uploads (like RSS) and performing searches. <a href='https://github.com/Jackett/Jackett/'>Github</a>",
+      "logo": "https://raw.githubusercontent.com/lllllllillllllillll/DweebUI-Icons/main/jackett.png",
+      "image": "linuxserver/jackett:latest",
+      "categories": [
+        "Downloaders",
+        "Tools"
+      ],
+      "ports": [
+        "9117:9117/tcp"
+      ],
+      "volumes": [
+        {
+          "bind": "/home/docker/jackett",
+          "container": "/config"
+        },
+        {
+          "bind": "/media",
+          "container": "/downloads"
+        }
+      ],
+      "env": [
+        {
+          "name": "PGID",
+          "label": "PGID",
+          "default": "1000",
+          "preset": true
+        },
+        {
+          "name": "PUID",
+          "label": "PUID",
+          "default": "1000",
+          "preset": true
+        },
+        {
+          "name": "TZ",
+          "label": "TZ",
+          "default": "America/Los_Angeles"
+        }
+      ]
+    },
+    {
+      "type": 1,
+      "title": "Librespeed",
+      "name": "librespeed",
+      "note": "",
+      "description": "Librespeed is a very lightweight speed test implemented in Javascript, using XMLHttpRequest and Web Workers. No Flash, No Java, No Websocket, No Bullshit. <a href='https://github.com/librespeed/speedtest/'>Github</a>",
+      "platform": "linux",
+      "logo": "https://raw.githubusercontent.com/lllllllillllllillll/DweebUI-Icons/main/librespeed.png",
+      "categories": [
+        "Networking",
+        "Tools"
+      ],
+      "image": "adolfintel/speedtest",
+      "ports": [
+        "81:81/tcp"
+      ],
+      "env": [
+        {
+          "name": "PUID",
+          "label": "PUID",
+          "default": "1000",
+          "description": "for UserID"
+        },
+        {
+          "name": "PGID",
+          "label": "PGID",
+          "default": "1000",
+          "description": "for GroupID"
+        },
+        {
+          "name": "TZ",
+          "label": "TZ",
+          "default": "America/Los_Angeles",
+          "description": "Specify a timezone to use for example Europe/Amsterdam"
+        },
+        {
+          "name": "MODE",
+          "label": "MODE",
+          "default": "standalone",
+          "description": "Set the mode."
+        },
+        {
+          "name": "PASSWORD",
+          "label": "PASSWORD",
+          "default": "SOMEPASSWORD",
+          "description": "Password to access the stats page. If not set, stats page will not allow accesses."
+        },
+        {
+          "name": "WEBPORT",
+          "label": "WEBPORT",
+          "default": "81",
+          "description": "Allows choosing a custom port for the included web server."
+        }
+      ],
+      "restart_policy": "unless-stopped"
+    },
+    {
+      "type": 1,
+      "name": "ombi",
+      "title": "Ombi",
+      "description": "Ombi allows you to host your own Plex Request and user management system. If you are sharing your Plex server with other users, allow them to request new content using an easy to manage interface. . [There is no official Ombi docker image. This one is created and maintained by <a href='https://hub.docker.com/r/linuxserver/ombi/' target='_blank'>linuxserver.io</a>]",
+      "logo": "https://raw.githubusercontent.com/lllllllillllllillll/DweebUI-Icons/main/ombi.png",
+      "image": "linuxserver/ombi:latest",
+      "categories": [
+        "Tools"
+      ],
+      "ports": [
+        "3579:3579/tcp"
+      ],
+      "volumes": [
+        {
+          "bind": "/home/docker/ombi",
+          "container": "/config"
+        },
+        {
+          "bind": "/etc/localtime",
+          "container": "/etc/localtime:ro"
+        }
+      ],
+      "env": [
+        {
+          "name": "PGID",
+          "label": "PGID",
+          "default": "1000",
+          "preset": true
+        },
+        {
+          "name": "PUID",
+          "label": "PUID",
+          "default": "1000",
+          "preset": true
+        }
+      ]
+    },
+    {
+      "type": 1,
+      "name": "overseerr",
+      "title": "Overseerr",
+      "description": "Overseerr is a request management and media discovery tool built to work with your existing Plex ecosystem. <a href='https://overseerr.dev/' target='_blank'>Official Site</a>",
+      "logo": "https://raw.githubusercontent.com/lllllllillllllillll/DweebUI-Icons/main/overseerr.png",
+      "image": "sctx/overseerr:latest",
+      "categories": [
+        "Multimedia",
+        "Tools"
+      ],
+      "ports": [
+        "5055/tcp"
+      ],
+      "volumes": [
+        {
+          "bind": "/home/docker/overseerr",
+          "container": "/app/config"
+        },
+        {
+          "container": "/etc/localtime",
+          "bind": "/etc/localtime:ro",
+          "readonly": true
+        }
+      ],
+      "env": [
+        {
+          "name": "PGID",
+          "label": "PGID",
+          "default": "1000",
+          "preset": true
+        },
+        {
+          "name": "PUID",
+          "label": "PUID",
+          "default": "1000",
+          "preset": true
+        },
+        {
+          "name": "TZ",
+          "label": "TZ",
+          "default": "America/Los_Angeles"
+        }
+      ]
+    },
+    {
+      "type": 1,
+      "name": "plex",
+      "title": "Plex",
+      "description": "Plex organizes your video, music, and photo collections and streams them to all of your screens.",
+      "logo": "https://raw.githubusercontent.com/lllllllillllllillll/DweebUI-Icons/main/plex.png",
+      "image": "linuxserver/plex:latest",
+      "network": "host",
+      "categories": [
+        "Media Server",
+        "Paid"
+      ],
+      "privileged": true,
+      "ports": [],
+      "volumes": [
+        {
+          "container": "/config",
+          "bind": "/opt/mediadepot/apps/plex"
+        },
+        {
+          "container": "/data/tvshows",
+          "bind": "/media/tvshows"
+        },
+        {
+          "container": "/data/movies",
+          "bind": "/media/movies"
+        },
+        {
+          "container": "/data/music",
+          "bind": "/media/music"
+        },
+        {
+          "container": "/transcode"
+        }
+      ],
+      "env": [
+        {
+          "name": "PGID",
+          "label": "PGID",
+          "default": "1000",
+          "preset": true
+        },
+        {
+          "name": "PUID",
+          "label": "PUID",
+          "default": "1000",
+          "preset": true
+        },
+        {
+          "name": "TZ",
+          "label": "TZ",
+          "default": "America/Los_Angeles"
+        },
+        {
+          "name": "VERSION",
+          "label": "VERSION",
+          "default": "latest"
+        }
+      ]
+    },
+    {
+      "type": 1,
+      "name": "prowlarr",
+      "title": "Prowlarr",
+      "description": "Prowlarr is a indexer manager/proxy built on the popular arr .net/reactjs base stack to integrate with your various PVR apps. Prowlarr supports both Torrent Trackers and Usenet Indexers. ",
+      "logo": "https://raw.githubusercontent.com/lllllllillllllillll/DweebUI-Icons/main/prowlarr.png",
+      "image": "ghcr.io/linuxserver/prowlarr:develop",
+      "categories": [
+        "Downloaders",
+        "Tools"
+      ],
+      "ports": [
+        "9696/tcp"
+      ],
+      "volumes": [
+        {
+          "container": "/config",
+          "bind": "/opt/mediadepot/apps/prowlarr"
+        },
+        {
+          "container": "/etc/localtime",
+          "bind": "/etc/localtime",
+          "readonly": true
+        }
+      ],
+      "env": [
+        {
+          "name": "PGID",
+          "label": "PGID",
+          "default": "1000",
+          "preset": true
+        },
+        {
+          "name": "PUID",
+          "label": "PUID",
+          "default": "1000",
+          "preset": true
+        },
+        {
+          "name": "TZ",
+          "label": "TZ",
+          "default": "America/Los_Angeles",
+          "preset": true
+        }
+      ]
+    },
+    {
+      "type": 1,
+      "name": "radarr",
+      "title": "Radarr",
+      "note": "There is no official Radarr docker image. This one is created and maintained by <a href='https://hotio.dev/containers/radarr/' target='_blank'>Hotio.dev</a>",
+      "description": "Radarr is a movie collection manager for Usenet and BitTorrent users. It can monitor multiple RSS feeds for new movies and will interface with clients and indexers to grab, sort, and rename them. <a href='https://radarr.video/#downloads-v3-docker' target='_blank'>Official Site</a>",
+      "logo": "https://raw.githubusercontent.com/lllllllillllllillll/DweebUI-Icons/main/radarr.png",
+      "image": "ghcr.io/hotio/radarr",
+      "categories": [
+        "Downloaders",
+        "Arr"
+      ],
+      "network": "AppBridge",
+      "ports": [
+        "7878:7878/tcp"
+      ],
+      "volumes": [
+        {
+          "bind": "/home/docker/radarr",
+          "container": "/config"
+        }
+      ],
+      "env": [
+        {
+          "name": "PGID",
+          "label": "PGID",
+          "default": "1000",
+          "preset": true
+        },
+        {
+          "name": "PUID",
+          "label": "PUID",
+          "default": "1000",
+          "preset": true
+        }
+      ]
+    },
+    {
+      "type": 1,
+      "name": "readarr",
+      "title": "Readarr",
+      "description": "Readarr is an ebook and audiobook collection manager for Usenet and BitTorrent users. It can monitor multiple RSS feeds for new books from your favorite authors and will grab, sort, and rename them.",
+      "logo": "https://mediadepot.github.io/templates/img/readarr-logo.png",
+      "image": "ghcr.io/linuxserver/readarr:nightly",
+      "categories": [
+        "Downloaders",
+        "Arr"
+      ],
+      "ports": [
+        "8787/tcp"
+      ],
+      "volumes": [
+        {
+          "container": "/config",
+          "bind": "/opt/mediadepot/apps/readarr"
+        },
+        {
+          "container": "/downloads",
+          "bind": "/media/storage/downloads/ebooks"
+        },
+        {
+          "container": "/books",
+          "bind": "/media/storage/ebooks"
+        },
+        {
+          "container": "/blackhole",
+          "bind": "/media/temp/blackhole/ebooks"
+        },
+        {
+          "container": "/etc/localtime",
+          "bind": "/etc/localtime",
+          "readonly": true
+        }
+      ],
+      "env": [
+        {
+          "name": "PGID",
+          "label": "PGID",
+          "default": "1000",
+          "preset": true
+        },
+        {
+          "name": "PUID",
+          "label": "PUID",
+          "default": "1000",
+          "preset": true
+        },
+        {
+          "name": "TZ",
+          "label": "TZ",
+          "default": "America/Los_Angeles"
+        }
+      ]
+    },
+    {
+      "type": 1,
+      "name": "scrutiny",
+      "title": "Scrutiny",
+      "description": "WebUI for smartd S.M.A.R.T monitoring",
+      "logo": "https://mediadepot.github.io/templates/img/scrutiny.png",
+      "image": "analogj/scrutiny:latest",
+      "categories": [
+        "Monitoring"
+      ],
+      "ports": [
+        "8080/tcp"
+      ],
+      "volumes": [
+        {
+          "container": "/scrutiny/config/",
+          "bind": "/opt/mediadepot/apps/scrutiny"
+        },
+        {
+          "container": "/run/udev",
+          "bind": "/run/udev",
+          "readonly": true
+        }
+      ],
+      "env": [],
+      "labels": [
+        {
+          "name": "traefik.enable",
+          "value": "true"
+        },
+        {
+          "name": "traefik.http.services.scrutiny.loadbalancer.server.port",
+          "value": "8080"
+        },
+        {
+          "name": "traefik.http.routers.scrutiny.entrypoints",
+          "value": "websecure"
+        },
+        {
+          "name": "traefik.http.routers.scrutiny.tls.certresolver",
+          "value": "mydnschallenge"
+        }
+      ]
+    },
+    {
+      "type": 1,
+      "name": "sonarr",
+      "title": "Sonarr",
+      "description": "Sonarr (formerly NZBdrone) is a PVR for usenet and bittorrent users. It can monitor multiple RSS feeds for new episodes of your favorite shows and will grab, sort and rename them. It can also be configured to automatically upgrade the quality of files already downloaded when a better quality format becomes available.",
+      "logo": "https://mediadepot.github.io/templates/img/sonarr-icon.png",
+      "image": "linuxserver/sonarr:latest",
+      "categories": [
+        "Downloaders",
+        "Arr"
+      ],
+      "ports": [
+        "8989/tcp"
+      ],
+      "volumes": [
+        {
+          "container": "/config",
+          "bind": "/opt/mediadepot/apps/sonarr"
+        },
+        {
+          "container": "/downloads",
+          "bind": "/media/storage/downloads/tvshows"
+        },
+        {
+          "container": "/tv",
+          "bind": "/media/storage/tvshows"
+        },
+        {
+          "container": "/blackhole",
+          "bind": "/media/temp/blackhole/tvshows"
+        },
+        {
+          "container": "/etc/localtime",
+          "bind": "/etc/localtime",
+          "readonly": true
+        }
+      ],
+      "env": [
+        {
+          "name": "PGID",
+          "label": "PGID",
+          "default": "1000",
+          "preset": true
+        },
+        {
+          "name": "PUID",
+          "label": "PUID",
+          "default": "1000",
+          "preset": true
+        }
+      ],
+      "labels": [
+        {
+          "name": "traefik.enable",
+          "value": "true"
+        },
+        {
+          "name": "traefik.http.services.sonarr.loadbalancer.server.port",
+          "value": "8989"
+        },
+        {
+          "name": "traefik.http.routers.sonarr.entrypoints",
+          "value": "websecure"
+        },
+        {
+          "name": "traefik.http.routers.sonarr.tls.certresolver",
+          "value": "mydnschallenge"
+        }
+      ]
+    },
+    {
+      "type": 1,
+      "name": "tautulli",
+      "title": "Tautulli",
+      "description": "A Python based monitoring and tracking tool for Plex Media Server.",
+      "logo": "https://mediadepot.github.io/templates/img/tautulli-icon.png",
+      "image": "linuxserver/tautulli:latest",
+      "categories": [
+        "MediaServer:Other",
+        "Tools"
+      ],
+      "ports": [
+        "8181/tcp"
+      ],
+      "volumes": [
+        {
+          "container": "/config",
+          "bind": "/opt/mediadepot/apps/tautulli"
+        }
+      ],
+      "env": [
+        {
+          "name": "PGID",
+          "label": "PGID",
+          "default": "1000",
+          "preset": true
+        },
+        {
+          "name": "PUID",
+          "label": "PUID",
+          "default": "1000",
+          "preset": true
+        },
+        {
+          "name": "TZ",
+          "label": "TZ",
+          "default": "America/Los_Angeles"
+        }
+      ],
+      "labels": [
+        {
+          "name": "traefik.enable",
+          "value": "true"
+        },
+        {
+          "name": "traefik.http.services.tautulli.loadbalancer.server.port",
+          "value": "8181"
+        },
+        {
+          "name": "traefik.http.routers.tautulli.entrypoints",
+          "value": "websecure"
+        },
+        {
+          "name": "traefik.http.routers.tautulli.tls.certresolver",
+          "value": "mydnschallenge"
+        }
+      ]
+    },
+    {
+      "type": 1,
+      "name": "watchtower",
+      "title": "Watchtower",
+      "description": "Automatically update running Docker containers",
+      "logo": "https://mediadepot.github.io/templates/img/watchtower-logo.png",
+      "image": "containrrr/watchtower:latest",
+      "command": "--cleanup --label-enable",
+      "categories": [
+        "Monitoring"
+      ],
+      "volumes": [
+        {
+          "container": "/var/run/docker.sock",
+          "bind": "/var/run/docker.sock"
+        }
+      ],
+      "env": []
+    },
+    {
+      "type": 1,
+      "name": "wizarr",
+      "title": "Wizarr",
+      "description": "Wizarr is an advanced user invitation and management system for Jellyfin, Plex, Emby etc. ",
+      "logo": "https://raw.githubusercontent.com/walkxcode/dashboard-icons/main/png/wizarr.png",
+      "image": "ghcr.io/wizarrrr/wizarr",
+      "categories": [
+        "Arr"
+      ],
+      "ports": [
+        "5690/tcp"
+      ],
+      "volumes": [
+        {
+          "container": "/data/database",
+          "bind": "/opt/mediadepot/apps/wizarr"
+        },
+        {
+          "container": "/etc/localtime",
+          "bind": "/etc/localtime",
+          "readonly": true
+        }
+      ],
+      "env": [
+        {
+          "name": "APP_URL",
+          "label": "APP_URL",
+          "default": "https://wizarr.domain.com"
+        }
+      ],
+      "labels": [
+        {
+          "name": "traefik.enable",
+          "value": "true"
+        },
+        {
+          "name": "traefik.http.services.wizarr.loadbalancer.server.port",
+          "value": "5690"
+        },
+        {
+          "name": "traefik.http.routers.wizarr.entrypoints",
+          "value": "websecure"
+        },
+        {
+          "name": "traefik.http.routers.wizarr.tls.certresolver",
+          "value": "mydnschallenge"
+        }
+      ]
+    },
+    {
+      "categories": [
+        "Downloaders"
+      ],
+      "description": "Transmission is designed for easy, powerful use. Transmission has the features you want from a BitTorrent client: encryption, a web interface, peer exchange, magnet links, DHT, \u00ef\u00bf\u00bdTP, UPnP and NAT-PMP port forwarding, webseed support, watch directories, tracker editing, global and per-torrent speed limits, and more.",
+      "env": [
+        {
+          "label": "PUID",
+          "name": "PUID",
+          "set": "1000"
+        },
+        {
+          "label": "PGID",
+          "name": "PGID",
+          "set": "1000"
+        },
+        {
+          "label": "TZ",
+          "name": "TZ",
+          "set": "America/Chicago"
+        }
+      ],
+      "image": "linuxserver/transmission:latest",
+      "logo": "https://raw.githubusercontent.com/thesugarat/portainer_templates-1/master/Images/transmission-icon.png",
+      "platform": "linux",
+      "ports": [
+        "9091/tcp",
+        "51413/tcp",
+        "51413/udp"
+      ],
+      "title": "Transmission",
+      "name": "transmission",
+      "type": 1,
+      "volumes": [
+        {
+          "container": "/config"
+        },
+        {
+          "container": "/downloads"
+        },
+        {
+          "container": "/watch"
+        }
+      ]
+    },
+    {
+      "categories": [
+        "Video"
+      ],
+      "description": "Headless installation of Kodi\u00ef\u00bf\u00bd (formerly known as XBMC\u00ef\u00bf\u00bd), to enable library updates.",
+      "env": [
+        {
+          "label": "PUID",
+          "name": "PUID",
+          "set": "1000"
+        },
+        {
+          "label": "PGID",
+          "name": "PGID",
+          "set": "1000"
+        },
+        {
+          "label": "TZ",
+          "name": "TZ",
+          "set": "America/Chicago"
+        }
+      ],
+      "image": "linuxserver/kodi-headless:latest",
+      "logo": "https://raw.githubusercontent.com/thesugarat/portainer_templates-1/master/Images/kodi-icon.png",
+      "platform": "linux",
+      "ports": [
+        "8080/tcp",
+        "9777/udp"
+      ],
+      "title": "Kodi-Headless",
+      "name": "kodi-headless",
+      "type": 1,
+      "volumes": [
+        {
+          "container": "/config/.kodi"
+        }
+      ]
+    },
+    {
+      "categories": [
+        "Backup:",
+        "Cloud",
+        "Other",
+        "Tools"
+      ],
+      "description": "Syncthing replaces proprietary sync and cloud services with something open, trustworthy and decentralized. Your data is your data alone and you deserve to choose where it is stored, if it is shared with some third party and how it's transmitted over the Internet.",
+      "env": [
+        {
+          "label": "PUID",
+          "name": "PUID",
+          "set": "1000"
+        },
+        {
+          "label": "PGID",
+          "name": "PGID",
+          "set": "1000"
+        },
+        {
+          "label": "TZ",
+          "name": "TZ",
+          "set": "America/Chicago"
+        }
+      ],
+      "image": "linuxserver/syncthing:latest",
+      "logo": "https://raw.githubusercontent.com/thesugarat/portainer_templates-1/master/Images/syncthing-icon.png",
+      "platform": "linux",
+      "ports": [
+        "8384/tcp",
+        "21027/udp",
+        "22000/tcp"
+      ],
+      "title": "Syncthing",
+      "name": "syncthing",
+      "type": 1,
+      "volumes": [
+        {
+          "container": "/config"
+        },
+        {
+          "container": "/sync"
+        }
+      ]
+    },
+    {
+      "type": 1,
+      "name": "mysql",
+      "title": "MySQL",
+      "note": "",
+      "description": "MySQL is the world's most popular open source database. With its proven performance, reliability and ease-of-use, MySQL has become the leading database choice for web-based applications, covering the entire range from personal projects and websites, via e-commerce and information services, all the way to high profile web properties including Facebook, Twitter, YouTube, Yahoo! and many more. <a href='https://www.mysql.com/' target='_blank'>Website</a>. <a href='https://hub.docker.com/_/mysql' target='_blank'>Docker Hub</a>",
+      "logo": "https://raw.githubusercontent.com/lllllllillllllillll/DweebUI-Icons/main/mysql.png",
+      "image": "mysql",
+      "categories": [
+        "Database"
+      ],
+      "volumes": [
+        {
+          "bind": "/home/docker/mysql",
+          "container": "/var/lib/mysql",
+          "mode": "rw"
+        }
+      ],
+      "ports" : [
+        {
+          "host": "3306",
+          "container": "3306"
+        }
+      ],
+      "env": [
+        {
+          "name": "MYSQL_ROOT_PASSWORD",
+          "label": "Root Password",
+          "description": "Root password for MySQL",
+          "type": "password",
+          "default": "password"
+        },
+        {
+          "name": "MYSQL_DATABASE",
+          "label": "Database",
+          "description": "Database name",
+          "type": "text",
+          "default": "heimdall"
+        },
+        {
+          "name": "MYSQL_USER",
+          "label": "User",
+          "description": "Database user",
+          "type": "text",
+          "default": "heimdall"
+        },
+        {
+          "name": "MYSQL_PASSWORD",
+          "label": "Password",
+          "description": "Database password",
+          "type": "password",
+          "default": "password"
+        }
+      ]
+    },
+    {
+      "categories": [
+        "Downloaders"
+      ],
+      "description": "Deluge is a lightweight, Free Software, cross-platform BitTorrent client providing: Full Encryption, WebUI, Plugin System, Much more...",
+      "env": [
+        {
+          "label": "PUID",
+          "name": "PUID",
+          "set": "1000"
+        },
+        {
+          "label": "PGID",
+          "name": "PGID",
+          "set": "1000"
+        },
+        {
+          "label": "UMASK_SET",
+          "name": "UMASK_SET",
+          "set": "000"
+        },
+        {
+          "label": "TZ",
+          "name": "TZ",
+          "set": "America/Chicago"
+        }
+      ],
+      "image": "linuxserver/deluge:latest",
+      "logo": "https://raw.githubusercontent.com/thesugarat/portainer_templates-1/master/Images/deluge-icon.png",
+      "platform": "linux",
+      "title": "Deluge",
+      "name": "deluge",
+      "type": 1,
+      "volumes": [
+        {
+          "container": "/config"
+        },
+        {
+          "container": "/downloads"
+        }
+      ]
+    },
+    {
+      "categories": [
+        "Tools",
+        "Proxy"
+      ],
+      "description": "Nginx is a web server with a strong focus on high concurrency, performance and low memory usage. It can also act as a reverse proxy server for HTTP, HTTPS, SMTP, POP3, and IMAP protocols, as well as a load balancer and an HTTP cache.",
+      "env": [
+        {
+          "label": "PUID",
+          "name": "PUID",
+          "set": "1000"
+        },
+        {
+          "label": "PGID",
+          "name": "PGID",
+          "set": "1000"
+        },
+        {
+          "label": "TZ",
+          "name": "TZ",
+          "set": "America/Chicago"
+        }
+      ],
+      "image": "linuxserver/nginx:latest",
+      "logo": "https://raw.githubusercontent.com/thesugarat/portainer_templates-1/master/Images/nginx-icon.png",
+      "platform": "linux",
+      "ports": [
+        "80/tcp",
+        "443/tcp"
+      ],
+      "title": "Nginx",
+      "name": "nginx",
+      "type": 1,
+      "volumes": [
+        {
+          "container": "/config"
+        }
+      ]
+    },
+    {
+      "categories": [
+        "Downloaders",
+        "Arr"
+      ],
+      "description": "Lidarr is a music collection manager for Usenet and BitTorrent users.",
+      "env": [
+        {
+          "label": "PUID",
+          "name": "PUID",
+          "set": "1000"
+        },
+        {
+          "label": "PGID",
+          "name": "PGID",
+          "set": "1000"
+        },
+        {
+          "label": "TZ",
+          "name": "TZ",
+          "set": "America/Chicago"
+        }
+      ],
+      "image": "linuxserver/lidarr:latest",
+      "logo": "https://raw.githubusercontent.com/thesugarat/portainer_templates-1/master/Images/lidarr.png",
+      "platform": "linux",
+      "ports": [
+        "8686/tcp"
+      ],
+      "title": "Lidarr",
+      "name": "lidarr",
+      "type": 1,
+      "volumes": [
+        {
+          "container": "/config"
+        },
+        {
+          "container": "/downloads"
+        },
+        {
+          "container": "/music"
+        }
+      ]
+    },
+    {
+      "categories": [
+        "Downloaders"
+      ],
+      "description": "The qBittorrent project aims to provide an open-source software alternative to \u00ef\u00bf\u00bdTorrent. qBittorrent is based on the Qt toolkit and libtorrent-rasterbar library.",
+      "env": [
+        {
+          "label": "PUID",
+          "name": "PUID",
+          "set": "1000"
+        },
+        {
+          "label": "PGID",
+          "name": "PGID",
+          "set": "1000"
+        },
+        {
+          "label": "TZ",
+          "name": "TZ",
+          "set": "America/Chicago"
+        }
+      ],
+      "image": "linuxserver/qbittorrent:latest",
+      "logo": "https://raw.githubusercontent.com/thesugarat/portainer_templates-1/master/Images/qbittorrent-icon.png",
+      "platform": "linux",
+      "ports": [
+        "6881/tcp",
+        "6881/udp",
+        "8080/tcp"
+      ],
+      "title": "qbittorrent",
+      "name": "qbittorrent",
+      "type": 1,
+      "volumes": [
+        {
+          "container": "/config"
+        },
+        {
+          "container": "/downloads"
+        }
+      ]
+    },
+    {
+      "categories": [
+        "Other"
+      ],
+      "description": "OpenVPN Access Server is a full featured secure network tunneling VPN software solution that integrates OpenVPN server capabilities, enterprise management capabilities, simplified OpenVPN Connect UI, and OpenVPN Client software packages that accommodate Windows, MAC, Linux, Android, and iOS environments.",
+      "env": [
+        {
+          "label": "INTERFACE",
+          "name": "INTERFACE",
+          "set": "eth0"
+        },
+        {
+          "label": "PGID",
+          "name": "PGID",
+          "set": "1000"
+        },
+        {
+          "label": "PUID",
+          "name": "PUID",
+          "set": "1000"
+        },
+        {
+          "label": "TZ",
+          "name": "TZ",
+          "set": "America/Chicago"
+        }
+      ],
+      "image": "linuxserver/openvpn-as:latest",
+      "logo": "https://raw.githubusercontent.com/thesugarat/portainer_templates-1/master/Images/openvpn-as-icon.png",
+      "platform": "linux",
+      "ports": [
+        "943/tcp",
+        "9443/tcp",
+        "1194/udp"
+      ],
+      "name": "openvpn-as",
+      "title": "OpenVPN Access Server",
+      "type": 1,
+      "volumes": [
+        {
+          "container": "/config"
+        }
+      ]
+    },
+    {
+      "categories": [
+        "Other"
+      ],
+      "description": "Server version of minetest, a free, open source alternative to minecraft.",
+      "env": [
+        {
+          "label": "PUID",
+          "name": "PUID",
+          "set": "1000"
+        },
+        {
+          "label": "PGID",
+          "name": "PGID",
+          "set": "1000"
+        },
+        {
+          "label": "TZ",
+          "name": "TZ",
+          "set": "America/Chicago"
+        }
+      ],
+      "image": "linuxserver/minetest:latest",
+      "logo": "https://raw.githubusercontent.com/linuxserver/beta-templates/master/lsiodev/img/minetest-icon.png",
+      "platform": "linux",
+      "ports": [
+        "30000/udp"
+      ],
+      "title": "Minetest",
+      "name": "minetest",
+      "type": 1,
+      "volumes": [
+        {
+          "container": "/config/.minetest"
+        }
+      ]
+    },
+    {
+      "categories": [
+        "Multimedia"
+      ],
+      "description": "Airsonic is a free, web-based media streamer, providing ubiqutious access to your music. Use it to share your music with friends, or to listen to your own music while at work. You can stream to multiple players simultaneously, for instance to one player in your kitchen and another in your living room.",
+      "env": [
+        {
+          "label": "PUID",
+          "name": "PUID",
+          "set": "1000"
+        },
+        {
+          "label": "PGID",
+          "name": "PGID",
+          "set": "1000"
+        },
+        {
+          "label": "CONTEXT_PATH",
+          "name": "CONTEXT_PATH",
+          "set": "airsonic"
+        },
+        {
+          "label": "JAVA_OPTS",
+          "name": "JAVA_OPTS",
+          "set": "-Xms256m -Xmx512m"
+        },
+        {
+          "label": "TZ",
+          "name": "TZ",
+          "set": "America/Chicago"
+        }
+      ],
+      "image": "linuxserver/airsonic:latest",
+      "logo": "https://raw.githubusercontent.com/thesugarat/portainer_templates-1/master/Images/airsonic-logo.png",
+      "platform": "linux",
+      "ports": [
+        "4040/tcp"
+      ],
+      "name": "airsonic",
+      "title": "Airsonic",
+      "type": 1,
+      "volumes": [
+        {
+          "container": "/music"
+        },
+        {
+          "container": "/playlists"
+        },
+        {
+          "container": "/podcasts"
+        },
+        {
+          "container": "/media"
+        },
+        {
+          "container": "/config"
+        }
+      ]
+    },
+    {
+      "categories": [
+        "Tools",
+        "Web"
+      ],
+      "description": "This container sets up an Nginx webserver and reverse proxy with php support and a built-in letsencrypt client that automates free SSL server certificate generation and renewal processes. It also contains fail2ban for intrusion prevention.\r\n  \r\n  Before running this container, make sure that the url and subdomains are properly forwarded to this container's host.\r\n  \r\n  - Port 443 on the internet side of the router should be forwarded to this container's port 443.\r\n  - If you need a dynamic dns provider, you can use the free provider duckdns.org where the url will be yoursubdomain.duckdns.org and the subdomains    can be www,ftp,cloud\r\n  - The container detects changes to url and subdomains, revokes existing certs and generates new ones during start. \r\n  - It also detects changes to the DHLEVEL parameter and replaces the dhparams file.\r\n  \r\n  - If you'd like to password protect your sites, you can use htpasswd. Run the following command on your host to generate the htpasswd file docker exec -it letsencrypt htpasswd -c /config/nginx/.htpasswd &lt;username&gt;",
+      "env": [
+        {
+          "label": "EMAIL",
+          "name": "EMAIL",
+          "set": "-Xms256m -Xmx512m"
+        },
+        {
+          "label": "URL",
+          "name": "URL",
+          "set": "-Xms256m -Xmx512m"
+        },
+        {
+          "label": "SUBDOMAINS",
+          "name": "SUBDOMAINS",
+          "set": "www,"
+        },
+        {
+          "label": "ONLY_SUBDOMAINS",
+          "name": "ONLY_SUBDOMAINS",
+          "set": "false"
+        },
+        {
+          "label": "DHLEVEL",
+          "name": "DHLEVEL",
+          "set": "2048"
+        },
+        {
+          "label": "PUID",
+          "name": "PUID",
+          "set": "1000"
+        },
+        {
+          "label": "PGID",
+          "name": "PGID",
+          "set": "1000"
+        },
+        {
+          "label": "VALIDATION",
+          "name": "VALIDATION",
+          "set": "http"
+        },
+        {
+          "label": "DNSPLUGIN",
+          "name": "DNSPLUGIN",
+          "set": "http"
+        },
+        {
+          "label": "TZ",
+          "name": "TZ",
+          "set": "America/Chicago"
+        }
+      ],
+      "image": "linuxserver/letsencrypt:latest",
+      "logo": "https://raw.githubusercontent.com/thesugarat/portainer_templates-1/master/Images/letsencrypt.png",
+      "platform": "linux",
+      "ports": [
+        "80/tcp",
+        "443/tcp"
+      ],
+      "title": "Let's Encrypt",
+      "name": "letsencrypt",
+      "type": 1,
+      "volumes": [
+        {
+          "container": "/config"
+        }
+      ]
+    },
+    {
+      "categories": [
+        "Cloud",
+        "Productivity",
+        "Tools",
+        "Other",
+        "Web"
+      ],
+      "description": "Nextcloud is an open source, self-hosted file sync and communication app platform. Access and sync your files, contacts, calendars and communicate and collaborate across your devices. You decide what happens with your data, where it is and who can access it!",
+      "env": [
+        {
+          "label": "PUID",
+          "name": "PUID",
+          "set": "1000"
+        },
+        {
+          "label": "PGID",
+          "name": "PGID",
+          "set": "1000"
+        },
+        {
+          "label": "TZ",
+          "name": "TZ",
+          "set": "America/Chicago"
+        }
+      ],
+      "image": "linuxserver/nextcloud:latest",
+      "logo": "https://raw.githubusercontent.com/thesugarat/portainer_templates-1/master/Images/nextcloud-icon.png",
+      "platform": "linux",
+      "ports": [
+        "443/tcp"
+      ],
+      "title": "Nextcloud",
+      "name": "nextcloud",
+      "type": 1,
+      "volumes": [
+        {
+          "container": "/config"
+        },
+        {
+          "container": "/data"
+        }
+      ]
+    },
+    {
+      "type": 1,
+      "title": "Apprise-api",
+      "name": "apprise-api",
+      "note": "",
+      "description": "Apprise-api takes advantage of Apprise through your network with a user-friendly API. * Send notifications to more then 65+ services. * An incredibly lightweight gateway to Apprise. * A production ready micro-service at your disposal. Apprise API was designed to easily fit into existing (and new) eco-systems that are looking for a simple notification solution.",
+      "categories": [
+        "Tools",
+        "Development"
+      ],
+      "platform": "linux",
+      "logo": "https://raw.githubusercontent.com/caronc/apprise-api/master/apprise_api/static/logo.png",
+      "image": "linuxserver/apprise-api:latest",
+      "env": [
+        {
+          "name": "PUID",
+          "label": "PUID",
+          "default": "1024",
+          "description": "for UserID"
+        },
+        {
+          "name": "PGID",
+          "label": "PGID",
+          "default": "100",
+          "description": "for GroupID"
+        },
+        {
+          "name": "TZ",
+          "label": "TZ",
+          "default": "Europe/Amsterdam",
+          "description": "specify a timezone to use, see this [list](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones#List)."
+        }
+      ],
+      "ports": [
+        "8000:8000/tcp"
+      ],
+      "volumes": [
+        {
+          "container": "/config",
+          "bind": "/volume1/docker/apprise-api/config"
+        }
+      ],
+      "restart_policy": "unless-stopped"
+    },
+    {
+      "type": 1,
+      "title": "Audacity",
+      "name": "audacity",
+      "note": "",
+      "description": "Audacity is an easy-to-use, multi-track audio editor and recorder. Developed by a group of volunteers as open source. (https://www.audacityteam.org/)",
+      "platform": "linux",
+      "categories": [
+        "Multimedia"
+      ],
+      "logo": "https://raw.githubusercontent.com/linuxserver/docker-templates/master/linuxserver.io/img/audacity-logo.png",
+      "image": "linuxserver/audacity:latest",
+      "env": [
+        {
+          "name": "PUID",
+          "label": "PUID",
+          "default": "1024",
+          "description": "for UserID"
+        },
+        {
+          "name": "PGID",
+          "label": "PGID",
+          "default": "100",
+          "description": "for GroupID"
+        },
+        {
+          "name": "TZ",
+          "label": "TZ",
+          "default": "Europe/Amsterdam",
+          "description": "specify a timezone to use, see this [list](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones#List)."
+        }
+      ],
+      "ports": [
+        "3000:3000/tcp",
+        "3001:3001/tcp"
+      ],
+      "volumes": [
+        {
+          "container": "/config",
+          "bind": "/volume1/docker/audacity/config"
+        }
+      ],
+      "restart_policy": "unless-stopped"
+    },
+    {
+      "type": 1,
+      "title": "Bazarr",
+      "name": "bazarr",
+      "note": "",
+      "description": "Bazarr is a companion application to Sonarr and Radarr. It can manage and download subtitles based on your requirements. You define your preferences by TV show or movie and Bazarr takes care of everything for you.",
+      "categories": [
+        "Multimedia",
+        "Downloader",
+        "Arr"
+      ],
+      "platform": "linux",
+      "logo": "https://raw.githubusercontent.com/linuxserver/docker-templates/master/linuxserver.io/img/bazarr.png",
+      "image": "linuxserver/bazarr:latest",
+      "env": [
+        {
+          "name": "PUID",
+          "label": "PUID",
+          "default": "1024",
+          "description": "for UserID"
+        },
+        {
+          "name": "PGID",
+          "label": "PGID",
+          "default": "100",
+          "description": "for GroupID"
+        },
+        {
+          "name": "TZ",
+          "label": "TZ",
+          "default": "Europe/Amsterdam",
+          "description": "specify a timezone to use, see this [list](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones#List)."
+        }
+      ],
+      "ports": [
+        "6767:6767/tcp"
+      ],
+      "volumes": [
+        {
+          "container": "/config",
+          "bind": "/volume1/docker/bazarr/config"
+        },
+        {
+          "container": "/movies",
+          "bind": "/volume1/docker/bazarr/movies"
+        },
+        {
+          "container": "/tv",
+          "bind": "/volume1/docker/bazarr/tv"
+        }
+      ],
+      "restart_policy": "unless-stopped"
+    },
+    {
+      "type": 1,
+      "title": "Changedetection.io",
+      "name": "changedetection.io",
+      "note": "",
+      "description": "Changedetection.io provides free, open-source web page monitoring, notification and change detection. (https://github.com/dgtlmoon/changedetection.io)",
+      "platform": "linux",
+      "logo": "https://github.com/linuxserver/docker-templates/raw/master/linuxserver.io/img/changedetection-icon.png",
+      "image": "linuxserver/changedetection.io:latest",
+      "env": [
+        {
+          "name": "PUID",
+          "label": "PUID",
+          "default": "1024",
+          "description": "for UserID"
+        },
+        {
+          "name": "PGID",
+          "label": "PGID",
+          "default": "100",
+          "description": "for GroupID"
+        },
+        {
+          "name": "TZ",
+          "label": "TZ",
+          "default": "Europe/Amsterdam",
+          "description": "specify a timezone to use, see this [list](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones#List)."
+        },
+        {
+          "name": "BASE_URL",
+          "label": "BASE_URL",
+          "default": "",
+          "description": "Specify the full URL (including protocol) when running behind a reverse proxy"
+        }
+      ],
+      "ports": [
+        "5000:5000/tcp"
+      ],
+      "volumes": [
+        {
+          "container": "/config",
+          "bind": "/volume1/docker/changedetection.io/config"
+        }
+      ],
+      "restart_policy": "unless-stopped"
+    },
+    {
+      "type": 1,
+      "title": "Code-server",
+      "name": "code-server",
+      "note": "",
+      "description": "Code-server is VS Code running on a remote server, accessible through the browser. - Code on your Chromebook, tablet, and laptop with a consistent dev environment. - If you have a Windows or Mac workstation, more easily develop for Linux. - Take advantage of large cloud servers to speed up tests, compilations, downloads, and more. - Preserve battery life when you're on the go. - All intensive computation runs on your server. - You're no longer running excess instances of Chrome. (https://coder.com)",
+      "categories": [
+        "Development"
+      ],
+      "platform": "linux",
+      "logo": "https://raw.githubusercontent.com/linuxserver/docker-templates/master/linuxserver.io/img/code-server-banner.png",
+      "image": "linuxserver/code-server:latest",
+      "env": [
+        {
+          "name": "PUID",
+          "label": "PUID",
+          "default": "1000"
+        },
+        {
+          "name": "PGID",
+          "label": "PGID",
+          "default": "1000"
+
+        },
+        {
+          "name": "TZ",
+          "label": "TZ",
+          "default": "America/Los_Angeles",
+          "description": "specify a timezone to use, see this [list](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones#List)."
+        },
+        {
+          "name": "PASSWORD",
+          "label": "PASSWORD",
+          "default": "password",
+          "description": "Optional web gui password, if `PASSWORD` or `HASHED_PASSWORD` is not provided, there will be no auth."
+        },
+        {
+          "name": "HASHED_PASSWORD",
+          "label": "HASHED_PASSWORD",
+          "default": "",
+          "description": "Optional web gui password, overrides `PASSWORD`, instructions on how to create it is below."
+        },
+        {
+          "name": "SUDO_PASSWORD",
+          "label": "SUDO_PASSWORD",
+          "default": "password",
+          "description": "If this optional variable is set, user will have sudo access in the code-server terminal with the specified password."
+        },
+        {
+          "name": "SUDO_PASSWORD_HASH",
+          "label": "SUDO_PASSWORD_HASH",
+          "default": "",
+          "description": "Optionally set sudo password via hash (takes priority over `SUDO_PASSWORD` var). Format is `$type$salt$hashed`."
+        },
+        {
+          "name": "PROXY_DOMAIN",
+          "label": "PROXY_DOMAIN",
+          "default": "code-server.my.domain",
+          "description": "If this optional variable is set, this domain will be proxied for subdomain proxying. See [Documentation](https://github.com/cdr/code-server/blob/master/docs/FAQ.md#sub-domains)"
+        },
+        {
+          "name": "DEFAULT_WORKSPACE",
+          "label": "DEFAULT_WORKSPACE",
+          "default": "/config/workspace",
+          "description": "If this optional variable is set, code-server will open this directory by default"
+        }
+      ],
+      "ports": [
+        "8443:8443/tcp"
+      ],
+      "volumes": [
+        {
+          "bind": "/home/docker/code-server/config",
+          "container": "/config"
+        }
+      ],
+      "restart_policy": "unless-stopped"
+    },
+    {
+      "type": 1,
+      "title": "Dokuwiki",
+      "name": "dokuwiki",
+      "note": "",
+      "description": "Dokuwiki is a simple to use and highly versatile Open Source wiki software that doesn't require a database. It is loved by users for its clean and readable syntax. The ease of maintenance, backup and integration makes it an administrator's favorite. Built in access controls and authentication connectors make DokuWiki especially useful in the enterprise context and the large number of plugins contributed by its vibrant community allow for a broad range of use cases beyond a traditional wiki.  (https://www.dokuwiki.org/dokuwiki/)",
+      "categories": [
+        "Productivity",
+        "CMS"
+      ],
+      "platform": "linux",
+      "logo": "https://raw.githubusercontent.com/linuxserver/docker-templates/master/linuxserver.io/img/dokuwiki-icon.png",
+      "image": "linuxserver/dokuwiki:latest",
+      "env": [
+        {
+          "name": "PUID",
+          "label": "PUID",
+          "default": "1024",
+          "description": "for UserID"
+        },
+        {
+          "name": "PGID",
+          "label": "PGID",
+          "default": "100",
+          "description": "for GroupID"
+        },
+        {
+          "name": "TZ",
+          "label": "TZ",
+          "default": "Europe/Amsterdam",
+          "description": "specify a timezone to use, see this [list](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones#List)."
+        }
+      ],
+      "ports": [
+        "80:80/tcp",
+        "443:443/tcp"
+      ],
+      "volumes": [
+        {
+          "container": "/config",
+          "bind": "/volume1/docker/dokuwiki/config"
+        }
+      ],
+      "restart_policy": "unless-stopped"
+    },
+    {
+      "type": 1,
+      "title": "Doplarr",
+      "name": "doplarr",
+      "note": "",
+      "description": "Doplarr (https://github.com/kiranshila/Doplarr) is an *arr request bot for Discord.'",
+      "categories": [
+        "Arr"
+      ],
+      "platform": "linux",
+      "logo": "https://raw.githubusercontent.com/linuxserver/docker-templates/master/linuxserver.io/img/doplarr-logo_title.png",
+      "image": "linuxserver/doplarr:latest",
+      "env": [
+        {
+          "name": "PUID",
+          "label": "PUID",
+          "default": "1024",
+          "description": "for UserID"
+        },
+        {
+          "name": "PGID",
+          "label": "PGID",
+          "default": "100",
+          "description": "for GroupID"
+        },
+        {
+          "name": "TZ",
+          "label": "TZ",
+          "default": "Europe/Amsterdam",
+          "description": "specify a timezone to use, see this [list](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones#List)."
+        },
+        {
+          "name": "DISCORD__TOKEN",
+          "label": "DISCORD__TOKEN",
+          "default": "",
+          "description": "Specify your discord bot token."
+        },
+        {
+          "name": "OVERSEERR__API",
+          "label": "OVERSEERR__API",
+          "default": "",
+          "description": "Specify your Overseerr API key. Leave blank if using Radarr/Sonarr."
+        },
+        {
+          "name": "OVERSEERR__URL",
+          "label": "OVERSEERR__URL",
+          "default": "http://localhost:5055",
+          "description": "Specify your Overseerr URL. Leave blank if using Radarr/Sonarr."
+        },
+        {
+          "name": "RADARR__API",
+          "label": "RADARR__API",
+          "default": "",
+          "description": "Specify your Radarr API key. Leave blank if using Overseerr."
+        },
+        {
+          "name": "RADARR__URL",
+          "label": "RADARR__URL",
+          "default": "http://localhost:7878",
+          "description": "Specify your Radarr URL. Leave blank if using Overseerr."
+        },
+        {
+          "name": "SONARR__API",
+          "label": "SONARR__API",
+          "default": "",
+          "description": "Specify your Sonarr API key. Leave blank if using Overseerr."
+        },
+        {
+          "name": "SONARR__URL",
+          "label": "SONARR__URL",
+          "default": "http://localhost:8989",
+          "description": "Specify your Sonarr URL. Leave blank if using Overseerr."
+        },
+        {
+          "name": "DISCORD__MAX_RESULTS",
+          "label": "DISCORD__MAX_RESULTS",
+          "default": "25",
+          "description": "Sets the maximum size of the search results selection"
+        },
+        {
+          "name": "DISCORD__REQUESTED_MSG_STYLE",
+          "label": "DISCORD__REQUESTED_MSG_STYLE",
+          "default": ":plain",
+          "description": "Sets the style of the request alert message. One of `:plain` `:embed` `:none`"
+        },
+        {
+          "name": "SONARR__QUALITY_PROFILE",
+          "label": "SONARR__QUALITY_PROFILE",
+          "default": "",
+          "description": "The name of the quality profile to use by default for Sonarr"
+        },
+        {
+          "name": "RADARR__QUALITY_PROFILE",
+          "label": "RADARR__QUALITY_PROFILE",
+          "default": "",
+          "description": "The name of the quality profile to use by default for Radarr"
+        },
+        {
+          "name": "SONARR__ROOTFOLDER",
+          "label": "SONARR__ROOTFOLDER",
+          "default": "",
+          "description": "The root folder to use by default for Sonarr"
+        },
+        {
+          "name": "RADARR__ROOTFOLDER",
+          "label": "RADARR__ROOTFOLDER",
+          "default": "",
+          "description": "The root folder to use by default for Radarr"
+        },
+        {
+          "name": "SONARR__LANGUAGE_PROFILE",
+          "label": "SONARR__LANGUAGE_PROFILE",
+          "default": "",
+          "description": "The name of the language profile to use by default for Sonarr"
+        },
+        {
+          "name": "OVERSEERR__DEFAULT_ID",
+          "label": "OVERSEERR__DEFAULT_ID",
+          "default": "",
+          "description": "The Overseerr user id to use by default if there is no associated discord account for the requester"
+        },
+        {
+          "name": "PARTIAL_SEASONS",
+          "label": "PARTIAL_SEASONS",
+          "default": "true",
+          "description": "Sets whether users can request partial seasons."
+        },
+        {
+          "name": "LOG_LEVEL",
+          "label": "LOG_LEVEL",
+          "default": ":info",
+          "description": "The log level for the logging backend. This can be changed for debugging purposes. One of trace `:debug` `:info` `:warn` `:error` `:fatal` `:report`"
+        },
+        {
+          "name": "JAVA_OPTS",
+          "label": "JAVA_OPTS",
+          "default": "",
+          "description": "For passing additional java options."
+        }
+      ],
+      "volumes": [
+        {
+          "container": "/config",
+          "bind": "/volume1/docker/doplarr/config"
+        }
+      ],
+      "restart_policy": "unless-stopped"
+    },
+    {
+      "type": 1,
+      "title": "Emby",
+      "name": "emby",
+      "note": "",
+      "description": "[Emby](https://emby.media/) organizes video, music, live TV, and photos from personal media libraries and streams them to smart TVs, streaming boxes and mobile devices. This container is packaged as a standalone emby Media Server.",
+      "categories": [
+        "Media Server",
+        "Paid"
+      ],
+      "platform": "linux",
+      "logo": "https://raw.githubusercontent.com/linuxserver/docker-templates/master/linuxserver.io/img/emby-logo.png",
+      "image": "linuxserver/emby:latest",
+      "env": [
+        {
+          "name": "PUID",
+          "label": "PUID",
+          "default": "1024",
+          "description": "for UserID"
+        },
+        {
+          "name": "PGID",
+          "label": "PGID",
+          "default": "100",
+          "description": "for GroupID"
+        },
+        {
+          "name": "TZ",
+          "label": "TZ",
+          "default": "Europe/Amsterdam",
+          "description": "specify a timezone to use, see this [list](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones#List)."
+        }
+      ],
+      "ports": [
+        "8096:8096/tcp",
+        "8920:8920/tcp"
+      ],
+      "volumes": [
+        {
+          "container": "/config",
+          "bind": "/home/docker/emby/config"
+        },
+        {
+          "container": "/data/tvshows",
+          "bind": "/home/docker/emby/data/tvshows"
+        },
+        {
+          "container": "/data/movies",
+          "bind": "/home/docker/emby/data/movies"
+        },
+        {
+          "container": "/opt/vc/lib",
+          "bind": "/opt/vc/lib"
+        }
+      ],
+      "restart_policy": "unless-stopped"
+    },
+    {
+      "type": 1,
+      "title": "EmbyStat",
+      "name": "embystat",
+      "note": "",
+      "description": "[Embystat](https://github.com/mregni/EmbyStat) is a personal web server that can calculate all kinds of statistics from your (local) Emby server. Just install this on your server and let him calculate all kinds of fun stuff.",
+      "platform": "linux",
+      "logo": "https://raw.githubusercontent.com/linuxserver/docker-templates/master/linuxserver.io/img/embystat-logo.png",
+      "image": "linuxserver/embystat:latest",
+      "env": [
+        {
+          "name": "PUID",
+          "label": "PUID",
+          "default": "1024",
+          "description": "for UserID"
+        },
+        {
+          "name": "PGID",
+          "label": "PGID",
+          "default": "100",
+          "description": "for GroupID"
+        },
+        {
+          "name": "TZ",
+          "label": "TZ",
+          "default": "Europe/Amsterdam",
+          "description": "specify a timezone to use, see this [list](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones#List)."
+        }
+      ],
+      "ports": [
+        "6555:6555/tcp"
+      ],
+      "volumes": [
+        {
+          "container": "/config",
+          "bind": "/volume1/docker/embystat/config"
+        }
+      ],
+      "restart_policy": "unless-stopped"
+    },
+    {
+      "type": 1,
+      "title": "Emulatorjs",
+      "name": "emulatorjs",
+      "note": "",
+      "description": "[Emulatorjs](https://github.com/linuxserver/emulatorjs) - In browser web based emulation portable to nearly any device for many retro consoles. A mix of emulators is used between Libretro and EmulatorJS.",
+      "platform": "linux",
+      "logo": "https://raw.githubusercontent.com/linuxserver/docker-templates/master/linuxserver.io/img/emulatorjs-logo.png",
+      "image": "linuxserver/emulatorjs:latest",
+      "categories": [
+        "Gaming"
+      ],
+      "env": [
+        {
+          "name": "PUID",
+          "label": "PUID",
+          "default": "1024",
+          "description": "for UserID"
+        },
+        {
+          "name": "PGID",
+          "label": "PGID",
+          "default": "100",
+          "description": "for GroupID"
+        },
+        {
+          "name": "TZ",
+          "label": "TZ",
+          "default": "Europe/Amsterdam",
+          "description": "specify a timezone to use, see this [list](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones#List)."
+        },
+        {
+          "name": "SUBFOLDER",
+          "label": "SUBFOLDER",
+          "default": "/",
+          "description": "Specify a subfolder for reverse proxies IE '/FOLDER/'"
+        }
+      ],
+      "ports": [
+        "3000:3000/tcp",
+        "80:80/tcp",
+        "4001:4001/tcp"
+      ],
+      "volumes": [
+        {
+          "container": "/config",
+          "bind": "/volume1/docker/emulatorjs/config"
+        },
+        {
+          "container": "/data",
+          "bind": "/volume1/docker/emulatorjs/data"
+        }
+      ],
+      "restart_policy": "unless-stopped"
+    },
+    {
+      "type": 1,
+      "title": "Fail2ban",
+      "name": "fail2ban",
+      "note": "",
+      "description": "Fail2ban is a daemon to ban hosts that cause multiple authentication errors.",
+      "platform": "linux",
+      "logo": "https://raw.githubusercontent.com/linuxserver/docker-templates/master/linuxserver.io/img/fail2ban-logo.png",
+      "image": "linuxserver/fail2ban:latest",
+      "network": "host",
+      "env": [
+        {
+          "name": "PUID",
+          "label": "PUID",
+          "default": "1024",
+          "description": "for UserID"
+        },
+        {
+          "name": "PGID",
+          "label": "PGID",
+          "default": "100",
+          "description": "for GroupID"
+        },
+        {
+          "name": "TZ",
+          "label": "TZ",
+          "default": "Europe/Amsterdam",
+          "description": "specify a timezone to use, see this [list](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones#List)."
+        },
+        {
+          "name": "VERBOSITY",
+          "label": "VERBOSITY",
+          "default": "-vv",
+          "description": "Set the container log verbosity. Valid options are -v, -vv, -vvv, -vvvv, or leaving the value blank or not setting the variable."
+        }
+      ],
+      "ports": [
+        "80:80/tcp"
+      ],
+      "volumes": [
+        {
+          "container": "/config",
+          "bind": "/volume1/docker/fail2ban/config"
+        },
+        {
+          "container": "/var/log:ro",
+          "bind": "/volume1/docker/fail2ban/var/log:ro"
+        },
+        {
+          "container": "/remotelogs/airsonic:ro",
+          "bind": "/volume1/docker/fail2ban/remotelogs/airsonic:ro"
+        },
+        {
+          "container": "/remotelogs/apache2:ro",
+          "bind": "/volume1/docker/fail2ban/remotelogs/apache2:ro"
+        },
+        {
+          "container": "/remotelogs/authelia:ro",
+          "bind": "/volume1/docker/fail2ban/remotelogs/authelia:ro"
+        },
+        {
+          "container": "/remotelogs/emby:ro",
+          "bind": "/volume1/docker/fail2ban/remotelogs/emby:ro"
+        },
+        {
+          "container": "/remotelogs/filebrowser:ro",
+          "bind": "/volume1/docker/fail2ban/remotelogs/filebrowser:ro"
+        },
+        {
+          "container": "/remotelogs/homeassistant:ro",
+          "bind": "/volume1/docker/fail2ban/remotelogs/homeassistant:ro"
+        },
+        {
+          "container": "/remotelogs/lighttpd:ro",
+          "bind": "/volume1/docker/fail2ban/remotelogs/lighttpd:ro"
+        },
+        {
+          "container": "/remotelogs/nextcloud:ro",
+          "bind": "/volume1/docker/fail2ban/remotelogs/nextcloud:ro"
+        },
+        {
+          "container": "/remotelogs/nginx:ro",
+          "bind": "/volume1/docker/fail2ban/remotelogs/nginx:ro"
+        },
+        {
+          "container": "/remotelogs/nzbget:ro",
+          "bind": "/volume1/docker/fail2ban/remotelogs/nzbget:ro"
+        },
+        {
+          "container": "/remotelogs/overseerr:ro",
+          "bind": "/volume1/docker/fail2ban/remotelogs/overseerr:ro"
+        },
+        {
+          "container": "/remotelogs/prowlarr:ro",
+          "bind": "/volume1/docker/fail2ban/remotelogs/prowlarr:ro"
+        },
+        {
+          "container": "/remotelogs/radarr:ro",
+          "bind": "/volume1/docker/fail2ban/remotelogs/radarr:ro"
+        },
+        {
+          "container": "/remotelogs/sabnzbd:ro",
+          "bind": "/volume1/docker/fail2ban/remotelogs/sabnzbd:ro"
+        },
+        {
+          "container": "/remotelogs/sonarr:ro",
+          "bind": "/volume1/docker/fail2ban/remotelogs/sonarr:ro"
+        },
+        {
+          "container": "/remotelogs/unificontroller:ro",
+          "bind": "/volume1/docker/fail2ban/remotelogs/unificontroller:ro"
+        },
+        {
+          "container": "/remotelogs/vaultwarden:ro",
+          "bind": "/volume1/docker/fail2ban/remotelogs/vaultwarden:ro"
+        }
+      ],
+      "restart_policy": "unless-stopped"
+    },
+    {
+      "type": 1,
+      "title": "Homeassistant",
+      "name": "homeassistant",
+      "note": "",
+      "description": "Home Assistant Core is an open source home automation that puts local control and privacy first. Powered by a worldwide community of tinkerers and DIY enthusiasts. Perfect to run on a Raspberry Pi or a local server.",
+      "categories": [
+        "Tools"
+      ],
+      "platform": "linux",
+      "logo": "https://raw.githubusercontent.com/lllllllillllllillll/DweebUI-Icons/main/homeassistant.png",
+      "image": "linuxserver/homeassistant:latest",
+      "network": "host",
+      "env": [
+        {
+          "name": "PUID",
+          "label": "PUID",
+          "default": "1024",
+          "description": "for UserID"
+        },
+        {
+          "name": "PGID",
+          "label": "PGID",
+          "default": "100",
+          "description": "for GroupID"
+        },
+        {
+          "name": "TZ",
+          "label": "TZ",
+          "default": "Europe/Amsterdam",
+          "description": "specify a timezone to use, see this [list](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones#List)."
+        }
+      ],
+      "ports": [
+        "8123:8123/tcp"
+      ],
+      "volumes": [
+        {
+          "container": "/config",
+          "bind": "/volume1/docker/homeassistant/config"
+        }
+      ],
+      "restart_policy": "unless-stopped"
+    },
+    {
+      "type": 1,
+      "title": "Jellyfin",
+      "name": "jellyfin",
+      "note": "",
+      "description": "Jellyfin is a Free Software Media System that puts you in control of managing and streaming your media. It is an alternative to the proprietary Emby and Plex, to provide media from a dedicated server to end-user devices via multiple apps. Jellyfin is descended from Emby's 3.5.2 release and ported to the .NET Core framework to enable full cross-platform support. There are no strings attached, no premium licenses or features, and no hidden agendas: just a team who want to build something better and work together to achieve it.",
+      "platform": "linux",
+      "logo": "https://raw.githubusercontent.com/walkxcode/dashboard-icons/main/png/jellyfin.png",
+      "image": "linuxserver/jellyfin:latest",
+      "categories": [
+        "Media Server",
+        "LDAP"
+      ],
+      "env": [
+        {
+          "name": "PUID",
+          "label": "PUID",
+          "default": "1024",
+          "description": "for UserID"
+        },
+        {
+          "name": "PGID",
+          "label": "PGID",
+          "default": "100",
+          "description": "for GroupID"
+        },
+        {
+          "name": "TZ",
+          "label": "TZ",
+          "default": "Europe/Amsterdam",
+          "description": "specify a timezone to use, see this [list](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones#List)."
+        },
+        {
+          "name": "JELLYFIN_PublishedServerUrl",
+          "label": "JELLYFIN_PublishedServerUrl",
+          "default": "192.168.0.5",
+          "description": "Set the autodiscovery response domain or IP address."
+        }
+      ],
+      "network": "AppBridge",
+      "ports": [
+        "8096:8096/tcp",
+        "8920:8920/tcp",
+        "7359:7359/udp",
+        "1900:1900/udp"
+      ],
+      "volumes": [
+        {
+          "container": "/config",
+          "bind": "/volume1/docker/jellyfin/config"
+        },
+        {
+          "container": "/data/tvshows",
+          "bind": "/volume1/docker/jellyfin/data/tvshows"
+        },
+        {
+          "container": "/data/movies",
+          "bind": "/volume1/docker/jellyfin/data/movies"
+        }
+      ],
+      "restart_policy": "unless-stopped"
+    },
+    {
+      "type": 1,
+      "title": "Kasm",
+      "name": "kasm",
+      "note": "",
+      "description": "Kasm workspaces is a docker container streaming platform for delivering browser-based access to desktops, applications, and web services. Kasm uses devops-enabled Containerized Desktop Infrastructure (CDI) to create on-demand, disposable, docker containers that are accessible via web browser. Example use-cases include Remote Browser Isolation (RBI), Data Loss Prevention (DLP), Desktop as a Service (DaaS), Secure Remote Access Services (RAS), and Open Source Intelligence (OSINT) collections. The rendering of the graphical-based containers is powered by the open-source project [KasmVNC](https://www.kasmweb.com/kasmvnc.html?utm_campaign=LinuxServer&utm_source=kasmvnc).",
+      "platform": "linux",
+      "logo": "https://kasm-ci.s3.amazonaws.com/kasm_wide.png",
+      "image": "linuxserver/kasm:latest",
+      "privileged": true,
+      "env": [
+        {
+          "name": "KASM_PORT",
+          "label": "KASM_PORT",
+          "default": "443",
+          "description": "Specify the port you bind to the outside for Kasm Workspaces."
+        },
+        {
+          "name": "DOCKER_HUB_USERNAME",
+          "label": "DOCKER_HUB_USERNAME",
+          "default": "USER",
+          "description": "Optionally specify a DockerHub Username to pull private images."
+        },
+        {
+          "name": "DOCKER_HUB_PASSWORD",
+          "label": "DOCKER_HUB_PASSWORD",
+          "default": "PASS",
+          "description": "Optionally specify a DockerHub password to pull private images."
+        },
+        {
+          "name": "DOCKER_MTU",
+          "label": "DOCKER_MTU",
+          "default": "1500",
+          "description": "Optionally specify the mtu options passed to dockerd."
+        }
+      ],
+      "ports": [
+        "3000:3000/tcp",
+        "443:443/tcp"
+      ],
+      "volumes": [
+        {
+          "container": "/opt",
+          "bind": "/volume1/docker/kasm/opt"
+        },
+        {
+          "container": "/profiles",
+          "bind": "/volume1/docker/kasm/profiles"
+        },
+        {
+          "container": "/dev/input",
+          "bind": "/dev/input"
+        },
+        {
+          "container": "/run/udev/data",
+          "bind": "/run/udev/data"
+        }
+      ],
+      "restart_policy": "unless-stopped"
+    },
+    {
+      "type": 1,
+      "title": "Libreoffice",
+      "name": "libreoffice",
+      "note": "",
+      "description": "LibreOffice is a free and powerful office suite, and a successor to OpenOffice.org (commonly known as OpenOffice). Its clean interface and feature-rich tools help you unleash your creativity and enhance your productivity.",
+      "categories": [
+        "Productivity",
+        "Tools"
+      ],
+      "platform": "linux",
+      "logo": "https://raw.githubusercontent.com/linuxserver/docker-templates/master/linuxserver.io/img/libreoffice-logo.png",
+      "image": "linuxserver/libreoffice:latest",
+      "env": [
+        {
+          "name": "PUID",
+          "label": "PUID",
+          "default": "1024",
+          "description": "for UserID"
+        },
+        {
+          "name": "PGID",
+          "label": "PGID",
+          "default": "100",
+          "description": "for GroupID"
+        },
+        {
+          "name": "TZ",
+          "label": "TZ",
+          "default": "Europe/Amsterdam",
+          "description": "specify a timezone to use, see this [list](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones#List)."
+        }
+      ],
+      "ports": [
+        "3000:3000/tcp",
+        "3001:3001/tcp"
+      ],
+      "volumes": [
+        {
+          "bind": "/volume1/docker/libreoffice/config",
+          "container": "/config"
+        }
+      ],
+      "restart_policy": "unless-stopped"
+    },
+    {
+      "type": 1,
+      "title": "Mastodon",
+      "name": "mastodon",
+      "note": "",
+      "description": "Mastodon is a free, open-source social network server based on ActivityPub where users can follow friends and discover new ones. (https://github.com/mastodon/mastodon/)",
+      "categories": [
+        "Communication"
+      ],
+      "platform": "linux",
+      "logo": "https://raw.githubusercontent.com/linuxserver/docker-templates/master/linuxserver.io/img/mastodon-banner.png",
+      "image": "linuxserver/mastodon:latest",
+      "env": [
+        {
+          "name": "PUID",
+          "label": "PUID",
+          "default": "1024",
+          "description": "for UserID"
+        },
+        {
+          "name": "PGID",
+          "label": "PGID",
+          "default": "100",
+          "description": "for GroupID"
+        },
+        {
+          "name": "TZ",
+          "label": "TZ",
+          "default": "Europe/Amsterdam",
+          "description": "specify a timezone to use, see this [list](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones#List)."
+        },
+        {
+          "name": "LOCAL_DOMAIN",
+          "label": "LOCAL_DOMAIN",
+          "default": "example.com",
+          "description": "This is the unique identifier of your server in the network. It cannot be safely changed later."
+        },
+        {
+          "name": "REDIS_HOST",
+          "label": "REDIS_HOST",
+          "default": "redis",
+          "description": "Redis server hostname"
+        },
+        {
+          "name": "REDIS_PORT",
+          "label": "REDIS_PORT",
+          "default": "6379",
+          "description": "Redis port"
+        },
+        {
+          "name": "DB_HOST",
+          "label": "DB_HOST",
+          "default": "db",
+          "description": "Postgres database hostname"
+        },
+        {
+          "name": "DB_USER",
+          "label": "DB_USER",
+          "default": "mastodon",
+          "description": "Postgres username"
+        },
+        {
+          "name": "DB_NAME",
+          "label": "DB_NAME",
+          "default": "mastodon",
+          "description": "Postgres db name"
+        },
+        {
+          "name": "DB_PASS",
+          "label": "DB_PASS",
+          "default": "mastodon",
+          "description": "Postgres password"
+        },
+        {
+          "name": "DB_PORT",
+          "label": "DB_PORT",
+          "default": "5432",
+          "description": "Portgres port"
+        },
+        {
+          "name": "ES_ENABLED",
+          "label": "ES_ENABLED",
+          "default": "false",
+          "description": "Enable or disable Elasticsearch (requires a separate ES instance)"
+        },
+        {
+          "name": "SECRET_KEY_BASE",
+          "label": "SECRET_KEY_BASE",
+          "default": "",
+          "description": "Browser session secret. Changing it will break all active browser sessions."
+        },
+        {
+          "name": "OTP_SECRET",
+          "label": "OTP_SECRET",
+          "default": "",
+          "description": "MFA secret. Changing it will break two-factor authentication."
+        },
+        {
+          "name": "VAPID_PRIVATE_KEY",
+          "label": "VAPID_PRIVATE_KEY",
+          "default": "",
+          "description": "Push notification private key. Changing it will break push notifications."
+        },
+        {
+          "name": "VAPID_PUBLIC_KEY",
+          "label": "VAPID_PUBLIC_KEY",
+          "default": "",
+          "description": "Push notification public key. Changing it will break push notifications."
+        },
+        {
+          "name": "SMTP_SERVER",
+          "label": "SMTP_SERVER",
+          "default": "mail.example.com",
+          "description": "SMTP server for email notifications"
+        },
+        {
+          "name": "SMTP_PORT",
+          "label": "SMTP_PORT",
+          "default": "25",
+          "description": "SMTP server port"
+        },
+        {
+          "name": "SMTP_LOGIN",
+          "label": "SMTP_LOGIN",
+          "default": "",
+          "description": "SMTP username"
+        },
+        {
+          "name": "SMTP_PASSWORD",
+          "label": "SMTP_PASSWORD",
+          "default": "",
+          "description": "SMTP password"
+        },
+        {
+          "name": "SMTP_FROM_ADDRESS",
+          "label": "SMTP_FROM_ADDRESS",
+          "default": "notifications@example.com",
+          "description": "From address for emails send from Mastodon"
+        },
+        {
+          "name": "S3_ENABLED",
+          "label": "S3_ENABLED",
+          "default": "false",
+          "description": "Enable or disable S3 storage of uploaded files"
+        },
+        {
+          "name": "WEB_DOMAIN",
+          "label": "WEB_DOMAIN",
+          "default": "mastodon.example.com",
+          "description": "This can be set if you want your server identifier to be different to the subdomain hosting Mastodon. See [https://docs.joinmastodon.org/admin/config/#basic](https://docs.joinmastodon.org/admin/config/#basic)"
+        },
+        {
+          "name": "ES_HOST",
+          "label": "ES_HOST",
+          "default": "es",
+          "description": "Elasticsearch server hostname"
+        },
+        {
+          "name": "ES_PORT",
+          "label": "ES_PORT",
+          "default": "9200",
+          "description": "Elasticsearch port"
+        },
+        {
+          "name": "ES_USER",
+          "label": "ES_USER",
+          "default": "elastic",
+          "description": "Elasticsearch username"
+        },
+        {
+          "name": "ES_PASS",
+          "label": "ES_PASS",
+          "default": "elastic",
+          "description": "Elasticsearch password"
+        },
+        {
+          "name": "S3_BUCKET",
+          "label": "S3_BUCKET",
+          "default": "",
+          "description": "S3 bucket hostname"
+        },
+        {
+          "name": "AWS_ACCESS_KEY_ID",
+          "label": "AWS_ACCESS_KEY_ID",
+          "default": "",
+          "description": "S3 bucket access key ID"
+        },
+        {
+          "name": "AWS_SECRET_ACCESS_KEY",
+          "label": "AWS_SECRET_ACCESS_KEY",
+          "default": "",
+          "description": "S3 bucket secret access key"
+        },
+        {
+          "name": "S3_ALIAS_HOST",
+          "label": "S3_ALIAS_HOST",
+          "default": "",
+          "description": "Alternate hostname for object fetching if you are front the S3 connections."
+        },
+        {
+          "name": "SIDEKIQ_ONLY",
+          "label": "SIDEKIQ_ONLY",
+          "default": "false",
+          "description": "Only run the sidekiq service in this container instance. For large scale instances that need better queue handling."
+        },
+        {
+          "name": "SIDEKIQ_QUEUE",
+          "label": "SIDEKIQ_QUEUE",
+          "default": "",
+          "description": "The name of the sidekiq queue to run in this container. See [notes](https://docs.joinmastodon.org/admin/scaling/#sidekiq-queues)."
+        },
+        {
+          "name": "SIDEKIQ_DEFAULT",
+          "label": "SIDEKIQ_DEFAULT",
+          "default": "false",
+          "description": "Set to `true` on the main container if you're running additional sidekiq instances. It will run the `default` queue."
+        },
+        {
+          "name": "SIDEKIQ_THREADS",
+          "label": "SIDEKIQ_THREADS",
+          "default": "5",
+          "description": "The number of threads for sidekiq to use. See [notes](https://docs.joinmastodon.org/admin/scaling/#sidekiq-threads)."
+        },
+        {
+          "name": "DB_POOL",
+          "label": "DB_POOL",
+          "default": "5",
+          "description": "The size of the DB connection pool, must be *at least* the same as `SIDEKIQ_THREADS`. See [notes](https://docs.joinmastodon.org/admin/scaling/#sidekiq-threads)."
+        }
+      ],
+      "ports": [
+        "80:80/tcp",
+        "443:443/tcp"
+      ],
+      "volumes": [
+        {
+          "container": "/config",
+          "bind": "/volume1/docker/mastodon/config"
+        }
+      ],
+      "restart_policy": "unless-stopped"
+    },
+    {
+      "type": 1,
+      "title": "Phpmyadmin",
+      "name": "phpmyadmin",
+      "note": "",
+      "description": "Phpmyadmin is a free software tool written in PHP, intended to handle the administration of MySQL over the Web. phpMyAdmin supports a wide range of operations on MySQL and MariaDB.",
+      "categories": [
+        "Tools"
+      ],
+      "platform": "linux",
+      "logo": "https://raw.githubusercontent.com/linuxserver/docker-templates/master/linuxserver.io/img/phpmyadmin-logo.png",
+      "image": "linuxserver/phpmyadmin:latest",
+      "env": [
+        {
+          "name": "PUID",
+          "label": "PUID",
+          "default": "1024",
+          "description": "for UserID"
+        },
+        {
+          "name": "PGID",
+          "label": "PGID",
+          "default": "100",
+          "description": "for GroupID"
+        },
+        {
+          "name": "TZ",
+          "label": "TZ",
+          "default": "Europe/Amsterdam",
+          "description": "specify a timezone to use, see this [list](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones#List)."
+        },
+        {
+          "name": "PMA_ARBITRARY",
+          "label": "PMA_ARBITRARY",
+          "default": "1",
+          "description": "Set to `1` to allow you to connect to any server. Setting to `0` will only allow you to connect to specified hosts (See Application Setup)"
+        },
+        {
+          "name": "PMA_ABSOLUTE_URI",
+          "label": "PMA_ABSOLUTE_URI",
+          "default": "https://phpmyadmin.example.com",
+          "description": "Set the URL you will use to access the web frontend"
+        }
+      ],
+      "ports": [
+        "80:80/tcp"
+      ],
+      "volumes": [
+        {
+          "container": "/config",
+          "bind": "/volume1/docker/phpmyadmin/config"
+        }
+      ],
+      "restart_policy": "unless-stopped"
+    },
+    {
+      "type": 1,
+      "title": "Pidgin",
+      "name": "pidgin",
+      "note": "",
+      "description": "Pidgin (https://pidgin.im/) is a chat program which lets you log into accounts on multiple chat networks simultaneously. This means that you can be chatting with friends on XMPP and sitting in an IRC channel at the same time.",
+      "platform": "linux",
+      "logo": "https://raw.githubusercontent.com/linuxserver/docker-templates/master/linuxserver.io/img/pidgin-logo.png",
+      "image": "linuxserver/pidgin:latest",
+      "env": [
+        {
+          "name": "PUID",
+          "label": "PUID",
+          "default": "1024",
+          "description": "for UserID"
+        },
+        {
+          "name": "PGID",
+          "label": "PGID",
+          "default": "100",
+          "description": "for GroupID"
+        },
+        {
+          "name": "TZ",
+          "label": "TZ",
+          "default": "Europe/Amsterdam",
+          "description": "specify a timezone to use, see this [list](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones#List)."
+        }
+      ],
+      "ports": [
+        "3000:3000/tcp",
+        "3001:3001/tcp"
+      ],
+      "volumes": [
+        {
+          "container": "/config",
+          "bind": "/volume1/docker/pidgin/config"
+        }
+      ],
+      "restart_policy": "unless-stopped"
+    },
+    {
+      "type": 1,
+      "title": "Remmina",
+      "name": "remmina",
+      "note": "",
+      "description": "[Remmina](https://remmina.org/) is a remote desktop client written in GTK, aiming to be useful for system administrators and travellers, who need to work with lots of remote computers in front of either large or tiny screens. Remmina supports multiple network protocols, in an integrated and consistent user interface. Currently RDP, VNC, SPICE, NX, XDMCP, SSH and EXEC are supported.",
+      "platform": "linux",
+      "logo": "https://raw.githubusercontent.com/linuxserver/docker-templates/master/linuxserver.io/img/remmina-icon.png",
+      "image": "linuxserver/remmina:latest",
+      "env": [
+        {
+          "name": "PUID",
+          "label": "PUID",
+          "default": "1024",
+          "description": "for UserID"
+        },
+        {
+          "name": "PGID",
+          "label": "PGID",
+          "default": "100",
+          "description": "for GroupID"
+        },
+        {
+          "name": "TZ",
+          "label": "TZ",
+          "default": "Europe/Amsterdam",
+          "description": "specify a timezone to use, see this [list](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones#List)."
+        }
+      ],
+      "ports": [
+        "3000:3000/tcp",
+        "3001:3001/tcp"
+      ],
+      "volumes": [
+        {
+          "container": "/config",
+          "bind": "/volume1/docker/remmina/config"
+        }
+      ],
+      "restart_policy": "unless-stopped"
+    },
+    {
+      "type": 1,
+      "title": "Sqlitebrowser",
+      "name": "sqlitebrowser",
+      "note": "",
+      "description": "[DB Browser for SQLite](https://sqlitebrowser.org/) is a high quality, visual, open source tool to create, design, and edit database files compatible with SQLite.",
+      "platform": "linux",
+      "logo": "https://raw.githubusercontent.com/linuxserver/docker-templates/master/linuxserver.io/img/sqlitebrowser-banner.png",
+      "image": "linuxserver/sqlitebrowser:latest",
+      "env": [
+        {
+          "name": "PUID",
+          "label": "PUID",
+          "default": "1024",
+          "description": "for UserID"
+        },
+        {
+          "name": "PGID",
+          "label": "PGID",
+          "default": "100",
+          "description": "for GroupID"
+        },
+        {
+          "name": "TZ",
+          "label": "TZ",
+          "default": "Europe/Amsterdam",
+          "description": "specify a timezone to use, see this [list](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones#List)."
+        }
+      ],
+      "ports": [
+        "3000:3000/tcp",
+        "3001:3001/tcp"
+      ],
+      "volumes": [
+        {
+          "container": "/config",
+          "bind": "/volume1/docker/sqlitebrowser/config"
+        }
+      ],
+      "restart_policy": "unless-stopped"
+    },
+    {
+      "type": 1,
+      "title": "Swag",
+      "name": "swag",
+      "note": "",
+      "description": "SWAG - Secure Web Application Gateway (formerly known as letsencrypt, no relation to Let's Encrypt\u2122) sets up an Nginx webserver and reverse proxy with php support and a built-in certbot client that automates free SSL server certificate generation and renewal processes (Let's Encrypt and ZeroSSL). It also contains fail2ban for intrusion prevention.",
+      "platform": "linux",
+      "logo": "https://github.com/linuxserver/docker-templates/raw/master/linuxserver.io/img/swag.gif",
+      "image": "linuxserver/swag:latest",
+      "env": [
+        {
+          "name": "PUID",
+          "label": "PUID",
+          "default": "1024",
+          "description": "for UserID"
+        },
+        {
+          "name": "PGID",
+          "label": "PGID",
+          "default": "100",
+          "description": "for GroupID"
+        },
+        {
+          "name": "TZ",
+          "label": "TZ",
+          "default": "Europe/Amsterdam",
+          "description": "specify a timezone to use, see this [list](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones#List)."
+        },
+        {
+          "name": "URL",
+          "label": "URL",
+          "default": "yourdomain.url",
+          "description": "Top url you have control over (`customdomain.com` if you own it, or `customsubdomain.ddnsprovider.com` if dynamic dns)."
+        },
+        {
+          "name": "VALIDATION",
+          "label": "VALIDATION",
+          "default": "http",
+          "description": "Certbot validation method to use, options are `http` or `dns` (`dns` method also requires `DNSPLUGIN` variable set)."
+        },
+        {
+          "name": "SUBDOMAINS",
+          "label": "SUBDOMAINS",
+          "default": "www,",
+          "description": "Subdomains you'd like the cert to cover (comma separated, no spaces) ie. `www,ftp,cloud`. For a wildcard cert, set this *exactly* to `wildcard` (wildcard cert is available via `dns` validation only)"
+        },
+        {
+          "name": "CERTPROVIDER",
+          "label": "CERTPROVIDER",
+          "default": "",
+          "description": "Optionally define the cert provider. Set to `zerossl` for ZeroSSL certs (requires existing [ZeroSSL account](https://app.zerossl.com/signup) and the e-mail address entered in `EMAIL` env var). Otherwise defaults to Let's Encrypt."
+        },
+        {
+          "name": "DNSPLUGIN",
+          "label": "DNSPLUGIN",
+          "default": "cloudflare",
+          "description": "Required if `VALIDATION` is set to `dns`. Options are `acmedns`, `aliyun`, `azure`, `bunny`, `cloudflare`, `cpanel`, `desec`, `digitalocean`, `directadmin`, `dnsimple`, `dnsmadeeasy`, `dnspod`, `do`, `domeneshop`, `dreamhost`, `duckdns`, `dynu`, `freedns`, `gandi`, `gehirn`, `godaddy`, `google`, `google-domains`, `he`, `hetzner`, `infomaniak`, `inwx`, `ionos`, `linode`, `loopia`, `luadns`, `netcup`, `njalla`, `nsone`, `ovh`, `porkbun`, `rfc2136`, `route53`, `sakuracloud`, `standalone`, `transip`, and `vultr`. Also need to enter the credentials into the corresponding ini (or json for some plugins) file under `/config/dns-conf`."
+        },
+        {
+          "name": "PROPAGATION",
+          "label": "PROPAGATION",
+          "default": "",
+          "description": "Optionally override (in seconds) the default propagation time for the dns plugins."
+        },
+        {
+          "name": "EMAIL",
+          "label": "EMAIL",
+          "default": "",
+          "description": "Optional e-mail address used for cert expiration notifications (Required for ZeroSSL)."
+        },
+        {
+          "name": "ONLY_SUBDOMAINS",
+          "label": "ONLY_SUBDOMAINS",
+          "default": "false",
+          "description": "If you wish to get certs only for certain subdomains, but not the main domain (main domain may be hosted on another machine and cannot be validated), set this to `true`"
+        },
+        {
+          "name": "EXTRA_DOMAINS",
+          "label": "EXTRA_DOMAINS",
+          "default": "",
+          "description": "Additional fully qualified domain names (comma separated, no spaces) ie. `extradomain.com,subdomain.anotherdomain.org,*.anotherdomain.org`"
+        },
+        {
+          "name": "STAGING",
+          "label": "STAGING",
+          "default": "false",
+          "description": "Set to `true` to retrieve certs in staging mode. Rate limits will be much higher, but the resulting cert will not pass the browser's security test. Only to be used for testing purposes."
+        }
+      ],
+      "ports": [
+        "443:443/tcp",
+        "80:80/tcp"
+      ],
+      "volumes": [
+        {
+          "bind": "/home/docker/swag",
+          "container": "/config"
+        }
+      ],
+      "restart_policy": "unless-stopped"
+    },
+    {
+      "type": 1,
+      "title": "Wikijs",
+      "name": "wikijs",
+      "note": "Setup mysql, postgres, mariadb, mssql database first, or use the default sqlite.",
+      "description": "Wikijs is a modern, lightweight and powerful wiki app built on NodeJS. (https://wiki.js.org/)",
+      "platform": "linux",
+      "logo": "https://static.requarks.io/logo/wikijs-full.svg",
+      "image": "linuxserver/wikijs:latest",
+      "env": [
+        {
+          "name": "PUID",
+          "label": "PUID",
+          "default": "1000",
+          "description": "for UserID"
+        },
+        {
+          "name": "PGID",
+          "label": "PGID",
+          "default": "1000",
+          "description": "for GroupID"
+        },
+        {
+          "name": "TZ",
+          "label": "TZ",
+          "default": "Europe/Amsterdam",
+          "description": "specify a timezone to use, see this [list](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones#List)."
+        },
+        {
+          "name": "DB_TYPE",
+          "label": "DB_TYPE",
+          "default": "sqlite",
+          "description": "Type of database (mysql, postgres, mariadb, mssql or sqlite)"
+        },
+        {
+          "name": "DB_HOST",
+          "label": "DB_HOST",
+          "default": "",
+          "description": "Hostname or IP of the database (For PostgreSQL, MySQL, MariaDB and MSSQL)"
+        },
+        {
+          "name": "DB_PORT",
+          "label": "DB_PORT",
+          "default": "",
+          "description": "Port of the database (For PostgreSQL, MySQL, MariaDB and MSSQL)"
+        },
+        {
+          "name": "DB_NAME",
+          "label": "DB_NAME",
+          "default": "",
+          "description": "Database name (For PostgreSQL, MySQL, MariaDB and MSSQL)"
+        },
+        {
+          "name": "DB_USER",
+          "label": "DB_USER",
+          "default": "",
+          "description": "Username to connect to the database (For PostgreSQL, MySQL, MariaDB and MSSQL)"
+        },
+        {
+          "name": "DB_PASS",
+          "label": "DB_PASS",
+          "default": "",
+          "description": "Password to connect to the database (For PostgreSQL, MySQL, MariaDB and MSSQL)"
+        }
+      ],
+      "ports": [
+        "3000:3000/tcp"
+      ],
+      "volumes": [
+        {
+          "bind": "/home/docker/wikijs/config",
+          "container": "/config"
+        },
+        {
+          "bind": "/home/docker/wikijs/data",
+          "container": "/data"
+        }
+      ],
+      "restart_policy": "unless-stopped"
+    },
+    {
+      "type": 1,
+      "title": "Wireguard",
+      "name": "wireguard",
+      "note": "",
+      "description": "WireGuard is an extremely simple yet fast and modern VPN that utilizes state-of-the-art cryptography. It aims to be faster, simpler, leaner, and more useful than IPsec, while avoiding the massive headache. It intends to be considerably more performant than OpenVPN. WireGuard is designed as a general purpose VPN for running on embedded interfaces and super computers alike, fit for many different circumstances. Initially released for the Linux kernel, it is now cross-platform (Windows, macOS, BSD, iOS, Android) and widely deployable. It is currently under heavy development, but already it might be regarded as the most secure, easiest to use, and simplest VPN solution in the industry.",
+      "platform": "linux",
+      "logo": "https://www.wireguard.com/img/wireguard.svg",
+      "image": "linuxserver/wireguard:latest",
+      "env": [
+        {
+          "name": "PUID",
+          "label": "PUID",
+          "default": "1000",
+          "description": "for UserID"
+        },
+        {
+          "name": "PGID",
+          "label": "PGID",
+          "default": "1000",
+          "description": "for GroupID"
+        },
+        {
+          "name": "TZ",
+          "label": "TZ",
+          "default": "Europe/Amsterdam",
+          "description": "specify a timezone to use, see this [list](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones#List)."
+        },
+        {
+          "name": "SERVERURL",
+          "label": "SERVERURL",
+          "default": "wireguard.domain.com",
+          "description": "External IP or domain name for docker host. Used in server mode. If set to `auto`, the container will try to determine and set the external IP automatically"
+        },
+        {
+          "name": "SERVERPORT",
+          "label": "SERVERPORT",
+          "default": "51820",
+          "description": "External port for docker host. Used in server mode."
+        },
+        {
+          "name": "PEERS",
+          "label": "PEERS",
+          "default": "1",
+          "description": "Number of peers to create confs for. Required for server mode. Can also be a list of names: `myPC,myPhone,myTablet` (alphanumeric only)"
+        },
+        {
+          "name": "PEERDNS",
+          "label": "PEERDNS",
+          "default": "auto",
+          "description": "DNS server set in peer/client configs (can be set as `8.8.8.8`). Used in server mode. Defaults to `auto`, which uses wireguard docker host's DNS via included CoreDNS forward."
+        },
+        {
+          "name": "INTERNAL_SUBNET",
+          "label": "INTERNAL_SUBNET",
+          "default": "10.13.13.0",
+          "description": "Internal subnet for the wireguard and server and peers (only change if it clashes). Used in server mode."
+        },
+        {
+          "name": "ALLOWEDIPS",
+          "label": "ALLOWEDIPS",
+          "default": "0.0.0.0/0",
+          "description": "The IPs/Ranges that the peers will be able to reach using the VPN connection. If not specified the default value is: '0.0.0.0/0, ::0/0' This will cause ALL traffic to route through the VPN, if you want split tunneling, set this to only the IPs you would like to use the tunnel AND the ip of the server's WG ip, such as 10.13.13.1."
+        },
+        {
+          "name": "PERSISTENTKEEPALIVE_PEERS",
+          "label": "PERSISTENTKEEPALIVE_PEERS",
+          "default": "",
+          "description": "Set to `all` or a list of comma separated peers (ie. `1,4,laptop`) for the wireguard server to send keepalive packets to listed peers every 25 seconds. Useful if server is accessed via domain name and has dynamic IP. Used only in server mode."
+        },
+        {
+          "name": "LOG_CONFS",
+          "label": "LOG_CONFS",
+          "default": "true",
+          "description": "Generated QR codes will be displayed in the docker log. Set to `false` to skip log output."
+        }
+      ],
+      "ports": [
+        "51820:51820/udp"
+      ],
+      "volumes": [
+        {
+          "bind": "/home/docker/wireguard/config",
+          "container": "/config"
+        },
+        {
+          "bind": "/lib/modules",
+          "container": "/lib/modules"
+        }
+      ],
+      "restart_policy": "unless-stopped"
+    },
+    {
+      "type": 1,
+      "title": "Wireshark",
+      "name": "wireshark",
+      "note": "",
+      "description": "Wireshark is the world's foremost and widely-used network protocol analyzer. It lets you see what's happening on your network at a microscopic level and is the de facto (and often de jure) standard across many commercial and non-profit enterprises, government agencies, and educational institutions.",
+      "platform": "linux",
+      "logo": "https://raw.githubusercontent.com/linuxserver/docker-templates/master/linuxserver.io/img/wireshark-icon.png",
+      "image": "linuxserver/wireshark:latest",
+      "network": "host",
+      "env": [
+        {
+          "name": "PUID",
+          "label": "PUID",
+          "default": "1024",
+          "description": "for UserID"
+        },
+        {
+          "name": "PGID",
+          "label": "PGID",
+          "default": "100",
+          "description": "for GroupID"
+        },
+        {
+          "name": "TZ",
+          "label": "TZ",
+          "default": "Europe/Amsterdam",
+          "description": "specify a timezone to use, see this [list](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones#List)."
+        }
+      ],
+      "ports": [
+        "3000:3000/tcp",
+        "3001:3001/tcp"
+      ],
+      "volumes": [
+        {
+          "container": "/config",
+          "bind": "/volume1/docker/wireshark/config"
+        }
+      ],
+      "restart_policy": "unless-stopped"
+    },
+    {
+      "categories": [
+        "Authentication"
+      ],
+      "note": "recommend requirements: a host with at least 2 CPU cores and 2 GB of RAM",
+      "description": "authentik is an open-source Identity Provider focused on flexibility and versatility. You can use authentik in an existing environment to add support for new protocols, implement sign-up/recovery/etc. in your application so you don't have to deal with it, and many other things.",
+      "env": [
+        {
+          "default": "1000",
+          "label": "PUID",
+          "name": "PUID"
+        },
+        {
+          "default": "1000",
+          "label": "PGID",
+          "name": "PGID"
+        },
+        {
+          "label": "PORT",
+          "name": "PORT"
+        }
+      ],
+      "logo": "https://raw.githubusercontent.com/walkxcode/dashboard-icons/main/png/authentik.png",
+      "name": "authentik",
+      "platform": "linux",
+      "repository": {
+        "stackfile": "Template/Stack/authentik.yml",
+        "url": "https://github.com/xneo1/portainer_templates"
+      },
+      "title": "Authentik",
+      "type": 3
+    },
+    {
+      "categories": [
+        "Productivity"
+      ],
+      "description": "Trilium Notes is a hierarchical note taking application with focus on building large personal knowledge bases",
+      "env": [
+        {
+          "default": "/home/node/trilium-data",
+          "label": "TRILIUM_DATA_DIR",
+          "name": "TRILIUM_DATA_DIR"
+        },
+        {
+          "label": "PORT",
+          "name": "PORT"
+        }
+      ],
+      "image": "zadam/trilium:latest",
+      "logo": "https://www.saashub.com/images/app/service_logos/55/2901389fab77/large.png?1561117248",
+      "name": "trilium",
+      "platform": "linux",
+      "ports": [
+        "3388:8080/tcp"
+      ],
+      "restart_policy": "unless-stopped",
+      "title": "Trilium",
+      "type": 1,
+      "volumes": [
+        {
+          "bind": "/home/docker/trilium-data",
+          "container": "/home/node/trilium-data"
+        }
+      ]
+    },
+    {
+      "categories": [
+        "Communication"
+      ],
+      "description": "Rocket.Chat Server",
+      "logo": "https://raw.githubusercontent.com/portapps/rocketchat-portable/master/res/papp.png",
+      "note": "Rocket.Chat Server Container",
+      "platform": "linux",
+      "repository": {
+        "stackfile": "Template/Stack/rocketchat.yml",
+        "url": "https://github.com/mycroftwilde/portainer_templates"
+      },
+      "title": "Rocket Chat",
+      "name": "rocketchat",
+      "type": 3
+    },
+    {
+      "categories": [
+        "Other"
+      ],
+      "description": "Joplin is an open-source note-taking app",
+      "env": [
+        {
+          "default": "22300",
+          "label": "PORT",
+          "name": "PORT"
+        },
+        {
+          "default": "http://joplin.yourdomain.tld:22300",
+          "label": "URL",
+          "name": "URL"
+        }
+      ],
+      "logo": "https://raw.githubusercontent.com/laurent22/joplin/master/Assets/SquareIcon512.png",
+      "note": "Joplin is an open-source note-taking app",
+      "platform": "linux",
+      "repository": {
+        "stackfile": "Template/Stack/joplin.yml",
+        "url": "https://github.com/mycroftwilde/portainer_templates"
+      },
+      "title": "Joplin",
+      "name": "joplin",
+      "type": 3
+    },
+    {
+      "categories": [
+        "Dashboard"
+      ],
+      "description": "Helps you organize your self-hosted services by making them accessible from a single place.",
+      "logo": "https://raw.githubusercontent.com/walkxcode/dashboard-icons/main/png/dashy.png",
+      "name": "dashy",
+      "platform": "linux",
+      "image": "lissy93/dashy:latest",
+      "title": "Dashy",
+      "restart_policy": "unless-stopped",
+      "type": 3,
+      "ports": [
+        "4000:80/tcp"
+      ]
+    },
+    {
+      "categories": [
+        "Dashboard"
+      ],
+      "description": "Flame is self-hosted startpage for your server. Its design is inspired (heavily) by SUI. Flame is very easy to setup and use. With built-in editors, it allows you to setup your very own application hub in no time - no file editing necessary.",
+      "image": "pawelmalak/flame",
+      "logo": "https://raw.githubusercontent.com/walkxcode/dashboard-icons/main/png/flame.png",
+      "name": "flame-dashboard",
+      "platform": "linux",
+      "ports": [
+        "5005:5005/tcp"
+      ],
+      "restart_policy": "unless-stopped",
+      "title": "Flame-Dashboard",
+      "type": 1,
+      "volumes": [
+        {
+          "bind": "/home/docker/flame-dashboard",
+          "container": "/app/data"
+        }
+      ]
+    },
+    {
+      "categories": [
+        "Authentication"
+      ],
+      "description": "An open-source authentication and authorization server providing 2-factor authentication and single sign-on (SSO) for your applications via a web portal.",
+      "env": [
+        {
+          "label": "TZ",
+          "name": "TZ"
+        }
+      ],
+      "image": "authelia/authelia:latest",
+      "logo": "https://raw.githubusercontent.com/walkxcode/dashboard-icons/main/png/authelia.png",
+      "name": "authelia",
+      "note": "Requires a configuration.yml file in order to work. Documentation is available <a href='https://docs.authelia.com/deployment/deployment-ha'>here</a>.",
+      "platform": "linux",
+      "ports": [
+        "9091:9091/tcp"
+      ],
+      "restart_policy": "unless-stopped",
+      "title": "Authelia",
+      "type": 1,
+      "volumes": [
+        {
+          "bind": "/home/docker/authelia",
+          "container": "/etc/authelia/"
+        }
+      ]
+    },
+    {
+      "categories": [
+        "Tools",
+        "Security"
+      ],
+      "description": "This is a Bitwarden server API implementation written in Rust compatible with upstream Bitwarden clients*, perfect for self-hosted deployment where running the official resource-heavy service might not be ideal.",
+      "image": "vaultwarden/server:latest",
+      "logo": "https://raw.githubusercontent.com/Qballjos/portainer_templates/master/Images/bitwarden.png",
+      "name": "vaultwarden",
+      "note": "This project is not associated with the Bitwarden project nor 8bit Solutions LLC.",
+      "platform": "linux",
+      "ports": [
+        "80/tcp"
+      ],
+      "restart_policy": "unless-stopped",
+      "title": "Vaultwarden",
+      "type": 1,
+      "volumes": [
+        {
+          "bind": "/home/docker/vaultwarden",
+          "container": "/config"
+        }
+      ]
+    },
+    {
+      "categories": [
+        "Networking",
+        "Tools"
+      ],
+      "description": "A clientless remote desktop gateway.",
+      "image": "oznu/guacamole:latest",
+      "logo": "https://raw.githubusercontent.com/Qballjos/portainer_templates/master/Images/guacamole.png",
+      "name": "guacamole",
+      "note": "The default login will be guacadmin/guacadmin. It is common practice to add a new admin user and remove the default user for Guacamole.",
+      "platform": "linux",
+      "ports": [
+        "8080:8080/tcp"
+      ],
+      "restart_policy": "unless-stopped",
+      "title": "Guacamole",
+      "type": 1,
+      "volumes": [
+        {
+          "bind": "/home/docker/guacamole",
+          "container": "/config"
+        }
+      ]
+    },
+    {
+      "categories": [
+        "Dashboard"
+      ],
+      "description": "A dead simple static HOMepage for your servER to keep your s ervices on hand, from a simple yaml configuration file.",
+      "image": "b4bz/homer:latest",
+      "logo": "https://raw.githubusercontent.com/Qballjos/portainer_templates/master/Images/homer.png",
+      "name": "homer",
+      "note": "This container requires a yml file within the config volume. See the documentation here https://github.com/bastienwirtz/homer",
+      "platform": "linux",
+      "ports": [
+        "8902:8080/tcp"
+      ],
+      "restart_policy": "unless-stopped",
+      "title": "Homer",
+      "type": 1,
+      "volumes": [
+        {
+          "bind": "/home/docker/homer/assets",
+          "container": "/www/assets"
+        },
+        {
+          "bind": "/home/docker/homer",
+          "container": "/www/config.yml"
+        }
+      ]
+    },
+    {
+      "categories": [
+        "Monitoring"
+      ],
+      "description": "Create agents that monitor and act on your behalf.",
+      "image": "huginn/huginn:latest",
+      "logo": "https://raw.githubusercontent.com/lllllllillllllillll/DweebUI-Icons/main/huginn.png",
+      "name": "huginn",
+      "platform": "linux",
+      "ports": [
+        "3000:3000/tcp"
+      ],
+      "restart_policy": "unless-stopped",
+      "title": "Huginn",
+      "type": 1,
+      "volumes": [
+        {
+          "bind": "/home/docker/huginn",
+          "container": "/var/lib/mysql"
+        }
+      ]
+    },
+    {
+      "categories": [
+        "Networking",
+        "Security"
+      ],
+      "description": "Nginx Proxy Manager enables you to easily forward to your websites running at home or otherwise, including free SSL, without having to know too much about Nginx or Letsencrypt.",
+      "image": "jc21/nginx-proxy-manager",
+      "logo": "https://raw.githubusercontent.com/Qballjos/portainer_templates/master/Images/proxy_mgr.png",
+      "name": "nginx-proxy-manager",
+      "platform": "linux",
+      "env": [
+        {
+          "label": "DB_SQLITE_FILE",
+          "name": "DB_SQLITE_FILE",
+          "default": "/data/database.sqlite"
+        }
+      ],
+      "ports": [
+        "80:80/tcp",
+        "81:81/tcp",
+        "443:443/tcp"
+      ],
+      "restart_policy": "unless-stopped",
+      "title": "Nginx Proxy Manager",
+      "type": 1,
+      "volumes": [
+        {
+          "bind": "/home/docker/nginx-proxy/data",
+          "container": "/data"
+        },
+        {
+          "bind": "/home/docker/nginx-proxy/letsencrypt",
+          "container": "/etc/letsencrypt"
+        }
+      ]
+    },
+    {
+      "categories": [
+        "Tools"
+      ],
+      "description": "ownCloud is a self-hosted file sync and share server. It provides access to your data through a web interface, sync clients or WebDAV while providing a platform to view, sync and share across devices easily\u2014all under your control. ownCloud\u2019s open architecture is extensible via a simple but powerful API for applications and plugins and it works with any storage.",
+      "env": [
+        {
+          "default": "1000",
+          "label": "PUID",
+          "name": "PUID"
+        },
+        {
+          "default": "100",
+          "label": "PGID",
+          "name": "PGID"
+        },
+        {
+          "label": "TZ",
+          "name": "TZ"
+        },
+        {
+          "label": "OWNCLOUD_DOMAIN",
+          "name": "OWNCLOUD_DOMAIN"
+        },
+        {
+          "label": "DB_PASSWORD",
+          "name": "DB_PASSWORD"
+        },
+        {
+          "label": "ADMIN_USERNAME",
+          "name": "ADMIN_USERNAME"
+        },
+        {
+          "label": "ADMIN_PASSWORD",
+          "name": "ADMIN_PASSWORD"
+        },
+        {
+          "label": "PORT",
+          "name": "PORT"
+        }
+      ],
+      "logo": "https://raw.githubusercontent.com/docker-library/docs/9d36b4ed7cabc35dbd3849272ba2bd7abe482172/owncloud/logo.png",
+      "name": "owncloud",
+      "note": "The database user is owncloud and the database is owncloud.",
+      "platform": "linux",
+      "image": "owncloud/server:latest",
+      "title": "Owncloud",
+      "type": 3
+    },
+    {
+      "categories": [
+        "Networking"
+      ],
+      "description": "A Linux network-level advertisement and Internet tracker blocking application which acts as a DNS sinkhole.",
+      "image": "pihole/pihole:latest",
+      "logo": "https://raw.githubusercontent.com/Qballjos/portainer_templates/master/Images/pihole.png",
+      "name": "pihole",
+      "note": "When the installation is complete, navigate to your.ip.goes.here:1010/admin. Follow the article <a href='https://medium.com/@niktrix/getting-rid-of-systemd-resolved-consuming-port-53-605f0234f32f'>here</a> if you run into issues binding to port 53.",
+      "platform": "linux",
+      "ports": [
+        "53:53/tcp",
+        "53:53/udp",
+        "67:67/udp",
+        "1010:80/tcp",
+        "4443:443/tcp"
+      ],
+      "restart_policy": "unless-stopped",
+      "title": "Pi-Hole",
+      "type": 1,
+      "volumes": [
+        {
+          "bind": "/home/docker/pihole",
+          "container": "/etc/pihole"
+        },
+        {
+          "bind": "/home/docker/pihole/DNS",
+          "container": "/etc/dnsmasq.d"
+        }
+      ]
+    },
+    {
+      "categories": [
+        "Networking",
+        "Tools"
+      ],
+      "description": "This container contains OpenVPN and Transmission with a configuration where Transmission is running only when OpenVPN has an active tunnel. It bundles configuration files for many popular VPN providers to make the setup easier.",
+      "env": [
+        {
+          "default": "1000",
+          "label": "PUID",
+          "name": "PUID"
+        },
+        {
+          "default": "100",
+          "label": "PGID",
+          "name": "PGID"
+        },
+        {
+          "default": "MULLVAD",
+          "description": "https://haugene.github.io/docker-transmission-openvpn/supported-providers/",
+          "label": "OPENVPN_PROVIDER",
+          "name": "OPENVPN_PROVIDER"
+        },
+        {
+          "default": "",
+          "label": "OPENVPN_USERNAME",
+          "name": "OPENVPN_USERNAME"
+        },
+        {
+          "default": "",
+          "label": "OPENVPN_PASSWORD",
+          "name": "OPENVPN_PASSWORD"
+        },
+        {
+          "default": "192.168.0.0/24",
+          "label": "LOCAL_NETWORK",
+          "name": "LOCAL_NETWORK"
+        }
+      ],
+      "image": "haugene/transmission-openvpn:latest",
+      "logo": "https://raw.githubusercontent.com/Qballjos/portainer_templates/master/Images/transmission-icon.png",
+      "name": "transmission-openvpn",
+      "note": "List of supported providers available <a href='https://haugene.github.io/docker-transmission-openvpn/supported-providers'/>here</a>.",
+      "platform": "linux",
+      "ports": [
+        "9091:9091/tcp"
+      ],
+      "restart_policy": "unless-stopped",
+      "title": "Transmission-OpenVPN",
+      "type": 1,
+      "volumes": [
+        {
+          "bind": "/portainer/Downloads",
+          "container": "/data"
+        },
+        {
+          "bind": "/etc/localtime",
+          "container": "/etc/localtime"
+        }
+      ]
+    },
+    {
+      "categories": [
+        "Tools"
+      ],
+      "description": "Self-hosted, ad-free, privacy-respecting Google metasearch engine.",
+      "image": "benbusby/whoogle-search:latest",
+      "logo": "https://raw.githubusercontent.com/Qballjos/portainer_templates/master/Images/whoogle.png",
+      "name": "whoogle",
+      "platform": "linux",
+      "ports": [
+        "5001:5000/tcp"
+      ],
+      "restart_policy": "unless-stopped",
+      "title": "Whoogle",
+      "type": 1,
+      "volumes": [
+        {
+          "bind": "/home/docker/whoogle",
+          "container": "/config"
+        }
+      ]
+    },
+    {
+      "categories": [
+        "Tools"
+      ],
+      "description": "Yacht is a web interface for managing docker containers with an emphasis on templating to provide 1 click deployments. Think of it like a decentralized app store for servers that anyone can make packages for.",
+      "image": "selfhostedpro/yacht:latest",
+      "logo": "https://raw.githubusercontent.com/SelfhostedPro/Yacht/master/readme_media/Yacht_logo_1_dark.png",
+      "name": "yacht",
+      "platform": "linux",
+      "ports": [
+        "8001:8000/tcp"
+      ],
+      "restart_policy": "unless-stopped",
+      "title": "Yacht",
+      "type": 1,
+      "volumes": [
+        {
+          "bind": "/home/docker/yacht",
+          "container": "/config"
+        },
+        {
+          "bind": "/var/run/docker.sock",
+          "container": "/var/run/docker.sock"
+        }
+      ]
+    },
+    {
+      "type": 1,
+      "categories": [
+        "Tools"
+      ],
+      "title": "Paperless-ng",
+      "name": "paperless-ng",
+      "note": "",
+      "description": "Paperless-ng is an application by Daniel Quinn and contributors that indexes your scanned documents and allows you to easily search for documents and store metadata alongside your documents.'",
+      "platform": "linux",
+      "logo": "https://raw.githubusercontent.com/walkxcode/dashboard-icons/main/png/paperless-ng.png",
+      "image": "linuxserver/paperless-ng:latest",
+      "env": [
+        {
+          "name": "PUID",
+          "label": "PUID",
+          "default": "1024",
+          "description": "for GroupID"
+        },
+        {
+          "name": "PGID",
+          "label": "PGID",
+          "default": "100",
+          "description": "for UserID"
+        },
+        {
+          "name": "TZ",
+          "label": "TZ",
+          "default": "Europe/Amsterdam",
+          "description": "Specify a timezone to use for example Europe/Amsterdam"
+        },
+        {
+          "name": "REDIS_URL",
+          "label": "REDIS_URL",
+          "default": "",
+          "description": "Specify an external redis instance to use. Can optionally include a port (`redis:6379`) and/or db (`redis/foo`). If left blank or not included, will use a built-in redis instance. If changed after initial setup will also require manual modification of /config/settings.py"
+        }
+      ],
+      "ports": [
+        "8000:8000/tcp"
+      ],
+      "volumes": [
+        {
+          "container": "/config",
+          "bind": "/volume1/docker/paperless-ng/config"
+        },
+        {
+          "container": "/data",
+          "bind": "/volume1/docker/paperless-ng/data"
+        }
+      ],
+      "restart_policy": "unless-stopped"
+    },
+    {
+      "categories": [
+        "Downloaders",
+        "Multimedia"
+      ],
+      "description": "YoutubeDL-Material is a Material Design frontend for youtube-dl. It's coded using Angular 9 for the frontend, and Node.js on the backend.",
+      "image": "tzahi12345/youtubedl-material:latest",
+      "logo": "https://raw.githubusercontent.com/Qballjos/portainer_templates/master/Images/ytdlm.png",
+      "name": "youtubedl-material",
+      "platform": "linux",
+      "ports": [
+        "17442:17442/tcp"
+      ],
+      "restart_policy": "unless-stopped",
+      "title": "YouTubeDL-Material",
+      "type": 1,
+      "volumes": [
+        {
+          "bind": "/home/docker/ytdlm",
+          "container": "/app/appdata"
+        },
+        {
+          "bind": "/home/docker/ytdlm/video",
+          "container": "/app/video"
+        },
+        {
+          "bind": "/home/docker/ytdlm/subscriptions",
+          "container": "/app/subscriptions"
+        },
+        {
+          "bind": "/home/docker/ytdlm/users",
+          "container": "/app/users"
+        },
+        {
+          "bind": "/home/docker/ytdlm/audio",
+          "container": "/app/audio"
+        }
+      ]
+    },
+    {
+      "categories": [
+        "Other",
+        "Tools",
+        "Gaming"
+      ],
+      "description": "C# application with primary purpose of farming Steam cards from multiple accounts simultaneously.",
+      "env": [
+        {
+          "default": "1000",
+          "label": "PUID",
+          "name": "PUID"
+        },
+        {
+          "default": "1000",
+          "label": "PGID",
+          "name": "PGID"
+        }
+      ],
+      "image": "justarchi/archisteamfarm:latest",
+      "logo": "https://raw.githubusercontent.com/JustArchiNET/ArchiSteamFarm/main/resources/ASF_184x184.png",
+      "name": "archisteamfarm",
+      "platform": "linux",
+      "ports": [
+        "1242:1242/tcp"
+      ],
+      "restart_policy": "unless-stopped",
+      "title": "ArchiSteamFarm",
+      "type": 1,
+      "volumes": [
+        {
+          "bind": "/home/docker/archiSteamFarm/config",
+          "container": "/app/config"
+        },
+        {
+          "bind": "/home/docker/archiSteamFarm/plugins",
+          "container": "/app/plugins"
+        },
+        {
+          "bind": "/home/docker/archiSteamFarm/logs",
+          "container": "/app/logs"
+        }
+      ],
+      "note": ""
+    },
+    {
+      "categories": [
+        "Other",
+        "Tools"
+      ],
+      "description": "ArchiveBox is a powerful, self-hosted internet archiving solution to collect, save, and view sites you want to preserve offline.",
+      "env": [
+        {
+          "default": "*",
+          "label": "ALLOWED_HOSTS",
+          "name": "ALLOWED_HOSTS"
+        },
+        {
+          "default": "750m",
+          "label": "MEDIA_MAX_SIZE",
+          "name": "MEDIA_MAX_SIZE"
+        },
+        {
+          "default": "true",
+          "label": "PUBLIC_INDEX",
+          "name": "PUBLIC_INDEX"
+        },
+        {
+          "default": "true",
+          "label": "PUBLIC_SNAPSHOTS",
+          "name": "PUBLIC_SNAPSHOTS"
+        },
+        {
+          "default": "false",
+          "label": "PUBLIC_ADD_VIEW",
+          "name": "PUBLIC_ADD_VIEW"
+        }
+      ],
+      "image": "archivebox/archivebox:latest",
+      "logo": "https://raw.githubusercontent.com/pi-hosted/pi-hosted/master/images/archivebox.png",
+      "name": "archivebox",
+      "note": "",
+      "platform": "linux",
+      "ports": [
+        "8002:8000/tcp"
+      ],
+      "restart_policy": "unless-stopped",
+      "title": "Archivebox",
+      "type": 1,
+      "volumes": [
+        {
+          "bind": "/home/docker/archivebox",
+          "container": "/data"
+        }
+      ]
+    },
+    {
+      "categories": [
+        "Networking"
+      ],
+      "description": "Caddy is a powerful, enterprise-ready, open source web server with automatic HTTPS written in Go. ",
+      "image": "caddy:latest",
+      "logo": "https://raw.githubusercontent.com/walkxcode/dashboard-icons/main/png/caddy.png",
+      "name": "caddy",
+      "note": "Create firewall rule first: 'sudo ufw allow http' and 'sudo ufw allow https'. Add port 2019/tcp for admin endpoint",
+      "platform": "linux",
+      "network": "host",
+      "ports": [
+        "80:80/tcp",
+        "443:443/tcp",
+        "443:443/udp"
+      ],
+      "restart_policy": "unless-stopped",
+      "title": "Caddy",
+      "type": 1,
+      "volumes": [
+        {
+          "bind": "/home/docker/caddy/",
+          "container": "/data"
+        },
+        {
+          "bind": "/home/docker/caddy/Caddyfile",
+          "container": "/etc/caddy/Caddyfile"
+        },
+        {
+          "bind": "/home/docker/caddy/sites",
+          "container": "/etc/caddy/sites"
+        }
+      ]
+    },
+    {
+      "categories": [
+        "Security",
+        "Tools"
+      ],
+      "description": "ClamAV is an open source antivirus engine for detecting trojans, viruses, malware & other malicious threats.",
+      "image": "mkodockx/docker-clamav:alpine",
+      "logo": "http://www.clamav.net/assets/clamav-trademark.png",
+      "name": "clamav",
+      "platform": "linux",
+      "ports": [
+        "3310:3310/tcp"
+      ],
+      "restart_policy": "unless-stopped",
+      "title": "ClamAV",
+      "type": 1,
+      "volumes": [
+        {
+          "bind": "/etc/timezone",
+          "container": "/etc/timezone"
+        },
+        {
+          "bind": "/etc/localtime",
+          "container": "/etc/localtime"
+        },
+        {
+          "bind": "/home/docker/clamav/config",
+          "container": "/etc/clamav"
+        },
+        {
+          "bind": "/home/docker/clamav/virus_definitions",
+          "container": "/var/lib/clamav"
+        }
+      ],
+      "note": ""
+    },
+    {
+      "categories": [
+        "Arr",
+        "Tools"
+      ],
+      "description": "FlareSolverr is a proxy server to bypass Cloudflare and DDoS-GUARD protection.",
+      "env": [
+        {
+          "default": "info",
+          "label": "LOG_LEVEL",
+          "name": "LOG_LEVEL"
+        },
+        {
+          "default": "false",
+          "label": "LOG_HTML",
+          "name": "LOG_HTML"
+        },
+        {
+          "default": "none",
+          "label": "CAPTCHA_SOLVER",
+          "name": "CAPTCHA_SOLVER"
+        },
+        {
+          "default": "America/New_York",
+          "label": "TZ",
+          "name": "TZ"
+        }
+      ],
+      "image": "ghcr.io/flaresolverr/flaresolverr:latest",
+      "logo": "https://raw.githubusercontent.com/FlareSolverr/FlareSolverr/c48d342b9cfb65d7696b96e9867fcff0ae87a0e2/resources/flaresolverr_logo.svg",
+      "name": "flaresolverr",
+      "platform": "linux",
+      "ports": [
+        "8191:8191/tcp"
+      ],
+      "restart_policy": "unless-stopped",
+      "title": "FlareSolverr",
+      "type": 1,
+      "note": ""
+    },
+    {
+      "categories": [
+        "Gaming",
+        "Paid"
+      ],
+      "description": "This docker image provides the FoundryVTT system for hosting your own virtual table top games.",
+      "env": [
+        {
+          "default": "John",
+          "label": "Foundry Account Name",
+          "name": "FOUNDRY_USERNAME"
+        },
+        {
+          "default": "password",
+          "label": "Foundry Password",
+          "name": "FOUNDRY_PASSWORD"
+        },
+        {
+          "default": "changeme",
+          "label": "Instance Admin Password",
+          "name": "FOUNDRY_ADMIN_KEY"
+        },
+        {
+          "default": "true",
+          "label": "CONTAINER_PRESERVE_CONFIG",
+          "name": "CONTAINER_PRESERVE_CONFIG"
+        }
+      ],
+      "image": "felddy/foundryvtt:release",
+      "logo": "https://raw.githubusercontent.com/lllllllillllllillll/DweebUI-Icons/main/foundryvtt.png",
+      "name": "foundryVTT",
+      "platform": "linux",
+      "ports": [
+        "30000:30000/tcp"
+      ],
+      "restart_policy": "unless-stopped",
+      "title": "FoundryVTT Server",
+      "type": 1,
+      "volumes": [
+        {
+          "bind": "/home/docker/foundryvtt",
+          "container": "/data"
+        }
+      ],
+      "note": ""
+    },
+    {
+      "categories": [
+        "CMS"
+      ],
+      "description": "Ghost is a free and open source blogging platform written in JavaScript and distributed under the MIT License, designed to simplify the process of online publishing for individual bloggers as well as online publications.",
+      "env": [
+        {
+          "default": "development",
+          "label": "NODE_ENV",
+          "name": "NODE_ENV"
+        },
+        {
+          "default": "http://localhost/",
+          "label": "url",
+          "name": "url"
+        }
+      ],
+      "image": "ghost:latest",
+      "logo": "https://raw.githubusercontent.com/pi-hosted/pi-hosted/master/images/ghost.png",
+      "name": "ghost",
+      "platform": "linux",
+      "ports": [
+        "2368:2368/tcp"
+      ],
+      "restart_policy": "unless-stopped",
+      "title": "Ghost",
+      "type": 1,
+      "volumes": [
+        {
+          "bind": "/home/docker/ghost",
+          "container": "/var/lib/ghost/content"
+        }
+      ],
+      "note": ""
+    },
+    {
+      "categories": [
+        "Dashboard",
+        "Web",
+        "Other"
+      ],
+      "description": "Homarr is a simple and lightweight homepage for your server, that helps you easily access all of your services in one place.",
+      "note": "",
+      "env": [
+        {
+          "default": "1000",
+          "label": "PUID",
+          "name": "PUID"
+        },
+        {
+          "default": "1000",
+          "label": "PGID",
+          "name": "PGID"
+        }
+      ],
+      "image": "ghcr.io/ajnart/homarr:latest",
+      "logo": "https://raw.githubusercontent.com/pi-hosted/pi-hosted/master/images/homarr.png",
+      "name": "homarr-secured",
+      "platform": "linux",
+      "ports": [
+        "7575:7575/tcp"
+      ],
+      "restart_policy": "unless-stopped",
+      "title": "Homarr-Secured",
+      "type": 1,
+      "volumes": [
+        {
+          "bind": "/home/docker/homarr/configs",
+          "container": "/app/data/configs"
+        },
+        {
+          "bind": "/home/docker/homarr/icons",
+          "container": "/app/public/icons"
+        }
+      ]
+    },
+    {
+      "categories": [
+        "Tools"
+      ],
+      "description": "Homebridge allows you to integrate with smart home devices that do not natively support HomeKit. There are over 2,000 Homebridge plugins supporting thousands of different smart accessories.",
+      "env": [
+        {
+          "default": "1000",
+          "label": "PGID",
+          "name": "PGID"
+        },
+        {
+          "default": "1000",
+          "label": "PUID",
+          "name": "PUID"
+        },
+        {
+          "default": "1",
+          "label": "HOMEBRIDGE_CONFIG_UI",
+          "name": "HOMEBRIDGE_CONFIG_UI"
+        },
+        {
+          "default": "8581",
+          "label": "HOMEBRIDGE_CONFIG_UI_PORT",
+          "name": "HOMEBRIDGE_CONFIG_UI_PORT"
+        },
+        {
+          "default": "America/New_York",
+          "label": "TZ",
+          "name": "TZ"
+        }
+      ],
+      "image": "homebridge/homebridge:latest",
+      "logo": "https://raw.githubusercontent.com/pi-hosted/pi-hosted/master/images/homebridge.png",
+      "name": "homebridge",
+      "network": "host",
+      "note": "",
+      "platform": "linux",
+      "privileged": true,
+      "restart_policy": "unless-stopped",
+      "title": "Homebridge",
+      "type": 1,
+      "volumes": [
+        {
+          "bind": "/home/docker/homebridge",
+          "container": "/homebridge"
+        }
+      ]
+    },
+    {
+      "categories": [
+        "Downloaders",
+        "Tools"
+      ],
+      "description": "JDownloader 2 is a free, open-source download management tool with a huge community of developers that makes downloading as easy and fast as it should be. Users can start, stop or pause downloads, set bandwith limitations, auto-extract archives and much more. It's an easy-to-extend framework that can save hours of your valuable time every day!. <a href='https://hub.docker.com/r/jlesage/jdownloader-2'>Docker Hub</a>",
+      "env": [
+        {
+          "default": "",
+          "label": "MYJD_DEVICE_NAME",
+          "name": "MYJD_DEVICE_NAME"
+        },
+        {
+          "default": "",
+          "label": "MYJD_USER",
+          "name": "MYJD_USER"
+        },
+        {
+          "default": "",
+          "label": "MYJD_PASSWORD",
+          "name": "MYJD_PASSWORD"
+        }
+      ],
+      "image": "jlesage/jdownloader-2",
+      "logo": "https://raw.githubusercontent.com/pi-hosted/pi-hosted/master/images/jdownloader.png",
+      "name": "jdownloader",
+      "platform": "linux",
+      "ports": [
+        "5800:5800/tcp"
+      ],
+      "restart_policy": "unless-stopped",
+      "title": "JDownloader",
+      "type": 1,
+      "volumes": [
+        {
+          "bind": "/home/docker/jdownloader",
+          "container": "/opt/JDownloader/app/cfg"
+        },
+        {
+          "bind": "/media",
+          "container": "/opt/JDownloader/Downloads"
+        }
+      ],
+      "note": ""
+    },
+    {
+      "categories": [
+        "Other",
+        "Tools"
+      ],
+      "description": "An alternative private front-end to Reddit",
+      "image": "libreddit/libreddit:armv7",
+      "logo": "https://raw.githubusercontent.com/pi-hosted/pi-hosted/master/images/libreddit.png",
+      "name": "libreddit",
+      "platform": "linux",
+      "ports": [
+        "8088:8080/tcp"
+      ],
+      "restart_policy": "unless-stopped",
+      "title": "Libreddit",
+      "type": 1,
+      "volumes": [
+        {
+          "bind": "/home/docker/libreddit",
+          "container": "/config"
+        }
+      ],
+      "note": ""
+    },
+    {
+      "categories": [
+        "Authentication",
+        "LDAP"
+      ],
+      "description": "This project is a lightweight authentication server that provides an opinionated, simplified LDAP interface for authentication.",
+      "env": [
+        {
+          "default": "somesecretjwt",
+          "label": "LLDAP_JWT_SECRET",
+          "name": "LLDAP_JWT_SECRET"
+        },
+        {
+          "default": "someadminpassword",
+          "label": "LLDAP_LDAP_USER_PASS",
+          "name": "LLDAP_LDAP_USER_PASS"
+        },
+        {
+          "default": "dc=example,dc=com",
+          "label": "LLDAP_LDAP_BASE_DN",
+          "name": "LLDAP_LDAP_BASE_DN"
+        }
+      ],
+      "image": "nitnelave/lldap:stable-debian",
+      "logo": "https://raw.githubusercontent.com/pi-hosted/pi-hosted/master/images/lldap.png",
+      "name": "lldap",
+      "platform": "linux",
+      "ports": [
+        "3890:3890/tcp",
+        "17170:17170/tcp"
+      ],
+      "restart_policy": "unless-stopped",
+      "title": "LLDAP",
+      "type": 1,
+      "volumes": [
+        {
+          "bind": "/home/docker/lldap",
+          "container": "/data"
+        }
+      ],
+      "note": ""
+    },
+    {
+      "categories": [
+        "Other",
+        "Tools"
+      ],
+      "description": "A self-hosted recipe manager and meal planner",
+      "env": [
+        {
+          "default": "1000",
+          "label": "PUID",
+          "name": "PUID"
+        },
+        {
+          "default": "1000",
+          "label": "PGID",
+          "name": "PGID"
+        },
+        {
+          "default": "America/New_York",
+          "label": "TZ",
+          "name": "TZ"
+        },
+        {
+          "default": "2",
+          "label": "WEB_CONCURRENCY",
+          "name": "WEB_CONCURRENCY"
+        },
+        {
+          "default": "8",
+          "label": "MAX_WORKERS",
+          "name": "MAX_WORKERS"
+        },
+        {
+          "default": "true",
+          "label": "RECIPE_PUBLIC",
+          "name": "RECIPE_PUBLIC"
+        },
+        {
+          "default": "true",
+          "label": "RECIPE_SHOW_NUTRITION",
+          "name": "RECIPE_SHOW_NUTRITION"
+        },
+        {
+          "default": "true",
+          "label": "RECIPE_SHOW_ASSETS",
+          "name": "RECIPE_SHOW_ASSETS"
+        },
+        {
+          "default": "true",
+          "label": "RECIPE_LANDSCAPE_VIEW",
+          "name": "RECIPE_LANDSCAPE_VIEW"
+        },
+        {
+          "default": "false",
+          "label": "RECIPE_DISABLE_COMMENTS",
+          "name": "RECIPE_DISABLE_COMMENTS"
+        },
+        {
+          "default": "false",
+          "label": "RECIPE_DISABLE_AMOUNT",
+          "name": "RECIPE_DISABLE_AMOUNT"
+        }
+      ],
+      "image": "hkotel/mealie:v0.4.3",
+      "logo": "https://raw.githubusercontent.com/pi-hosted/pi-hosted/master/images/mealie.png",
+      "name": "mealie",
+      "note": "",
+      "platform": "linux",
+      "ports": [
+        "9925:80/tcp"
+      ],
+      "restart_policy": "unless-stopped",
+      "title": "Mealie",
+      "type": 1,
+      "volumes": [
+        {
+          "bind": "/home/docker/mealie",
+          "container": "/app/data"
+        }
+      ]
+    },
+    {
+      "categories": [
+        "Other",
+        "Tools",
+        "Gaming"
+      ],
+      "description": "This docker image provides a Minecraft Server that will automatically download the latest stable version at startup. You can also run/upgrade to any specific version or the latest snapshot. See the Versions section below for more information.",
+      "env": [
+        {
+          "default": "TRUE",
+          "label": "EULA",
+          "name": "EULA"
+        }
+      ],
+      "image": "itzg/minecraft-server:latest",
+      "logo": "https://raw.githubusercontent.com/pi-hosted/pi-hosted/master/images/minecraft.png",
+      "name": "minecraft",
+      "platform": "linux",
+      "ports": [
+        "25565:25565/tcp"
+      ],
+      "restart_policy": "unless-stopped",
+      "title": "Minecraft Server",
+      "type": 1,
+      "volumes": [
+        {
+          "bind": "/home/docker/minecraft-data",
+          "container": "/data"
+        }
+      ],
+      "note": ""
+    },
+    {
+      "categories": [
+        "Networking",
+        "Monitoring"
+      ],
+      "description": "Troubleshoot slowdowns and anomalies in your infrastructure with thousands of per-second metrics, meaningful visualizations, and insightful health alarms with zero configuration.",
+      "env": [
+        {
+          "default": "1000",
+          "label": "DOCKER_USR",
+          "name": "DOCKER_USR"
+        },
+        {
+          "default": "1000",
+          "label": "DOCKER_GRP",
+          "name": "DOCKER_GRP"
+        }
+      ],
+      "image": "netdata/netdata:latest",
+      "logo": "https://raw.githubusercontent.com/walkxcode/dashboard-icons/main/png/netdata.png",
+      "name": "netdata",
+      "note": "",
+      "platform": "linux",
+      "ports": [
+        "19999:19999/tcp"
+      ],
+      "restart_policy": "unless-stopped",
+      "title": "Netdata",
+      "type": 1,
+      "volumes": [
+        {
+          "bind": "/home/docker/netdata/netdataconfig",
+          "container": "/etc/netdata"
+        },
+        {
+          "bind": "/home/docker/netdata/netdatalib",
+          "container": "/var/lib/netdata"
+        },
+        {
+          "bind": "/etc/passwd",
+          "container": "/host/etc/passwd:ro"
+        },
+        {
+          "bind": "/etc/group",
+          "container": "/host/etc/group:ro"
+        },
+        {
+          "bind": "/proc",
+          "container": "/host/proc:ro"
+        },
+        {
+          "bind": "/sys",
+          "container": "/host/sys:ro"
+        },
+        {
+          "bind": "/etc/os-release",
+          "container": "/host/etc/os-release:ro"
+        }
+      ]
+    },
+    {
+      "categories": [
+        "Other",
+        "Tools"
+      ],
+      "description": "Organizr allows you to setup Tabs that will be loaded all in one webpage. You can then work on your server with ease.",
+      "env": [
+        {
+          "default": "1000",
+          "label": "PUID",
+          "name": "PUID"
+        },
+        {
+          "default": "1000",
+          "label": "PGID",
+          "name": "PGID"
+        }
+      ],
+      "image": "organizr/organizr:latest",
+      "logo": "https://raw.githubusercontent.com/pi-hosted/pi-hosted/master/images/organizr-icon.png",
+      "name": "organizr-v2",
+      "platform": "linux",
+      "ports": [
+        "7171:80/tcp"
+      ],
+      "restart_policy": "unless-stopped",
+      "title": "Organizr v2",
+      "type": 1,
+      "volumes": [
+        {
+          "bind": "/home/docker/organizr",
+          "container": "/config"
+        }
+      ],
+      "note": ""
+    },
+    {
+      "type": 1,
+      "name": "postgres",
+      "title": "PostgreSQL",
+      "note": "",
+      "description": "PostgreSQL, also known as Postgres, is a free and open-source relational database management system emphasizing extensibility and SQL compliance. It was originally named POSTGRES, referring to its origins as a successor to the Ingres database developed at the University of California, Berkeley. <a href='https://www.postgresql.org/' target='_blank'>Website</a>. <a href='https://hub.docker.com/_/postgres' target='_blank'>Docker Hub</a>",
+      "logo": "https://raw.githubusercontent.com/walkxcode/dashboard-icons/main/png/postgres.png",
+      "image": "postgres",
+      "categories": [
+        "Database"
+      ],
+      "volumes": [
+        {
+          "bind": "/home/docker/postgres",
+          "container": "/var/lib/postgresql/data",
+          "mode": "rw"
+        }
+      ],
+      "ports" : [
+        {
+          "host": "5432",
+          "container": "5432"
+        }
+      ],
+      "env": [
+        {
+          "name": "POSTGRES_USER",
+          "label": "User",
+          "description": "Database user",
+          "type": "text",
+          "default": "heimdall"
+        },
+        {
+          "name": "POSTGRES_PASSWORD",
+          "label": "Password",
+          "description": "Database password",
+          "type": "password",
+          "default": "password"
+        },
+        {
+          "name": "POSTGRES_DB",
+          "label": "Database",
+          "description": "Database name",
+          "type": "text",
+          "default": "heimdall"
+        }
+      ]
+    },
+    {
+      "categories": [
+        "Downloaders"
+      ],
+      "description": "A docker image with qBittorrent and the Flood UI, also optional WireGuard VPN support. See the official documentation for WireGuard VPN support at https://hotio.dev/containers/qflood/",
+      "env": [
+        {
+          "default": "1000",
+          "label": "PUID",
+          "name": "PUID"
+        },
+        {
+          "default": "1000",
+          "label": "PGID",
+          "name": "PGID"
+        },
+        {
+          "default": "002",
+          "label": "UMASK",
+          "name": "UMASK"
+        },
+        {
+          "default": "America/New_York",
+          "label": "TZ",
+          "name": "TZ"
+        },
+        {
+          "default": "false",
+          "label": "FLOOD_AUTH",
+          "name": "FLOOD_AUTH"
+        }
+      ],
+      "image": "hotio/qflood:latest",
+      "logo": "https://raw.githubusercontent.com/jesec/flood/master/flood.svg",
+      "name": "qflood",
+      "note": "",
+      "platform": "linux",
+      "ports": [
+        "3000:3000/tcp",
+        "8080:8080/tcp"
+      ],
+      "restart_policy": "unless-stopped",
+      "title": "qFlood",
+      "type": 1,
+      "volumes": [
+        {
+          "bind": "/home/docker/qflood",
+          "container": "/config"
+        },
+        {
+          "bind": "/portainer/Downloads",
+          "container": "/app/qBittorrent/downloads"
+        }
+      ]
+    },
+    {
+      "categories": [
+        "Other",
+        "Tools"
+      ],
+      "description": "A remote desktop software, the open source TeamViewer alternative, works out of the box, no configuration required. You have full control of your data, with no concerns about security.",
+      "env": [
+        {
+          "default": "rustdesk.example.com:21117",
+          "description": "Use your domain with the default 21117 port",
+          "label": "RELAY",
+          "name": "RELAY"
+        },
+        {
+          "default": "1",
+          "description": "if set to \"1\" unencrypted connection will not be accepted",
+          "label": "ENCRYPTED_ONLY",
+          "name": "ENCRYPTED_ONLY"
+        }
+      ],
+      "image": "rustdesk/rustdesk-server-s6:latest",
+      "logo": "https://raw.githubusercontent.com/pi-hosted/pi-hosted/master/images/rustdesk.png",
+      "name": "rustdesk",
+      "note": "",
+      "platform": "linux",
+      "ports": [
+        "21115:21115/tcp",
+        "21116:21116/tcp",
+        "21116:21116/udp",
+        "21117:21117/tcp",
+        "21118:21118/tcp",
+        "21119:21119/tcp"
+      ],
+      "restart_policy": "unless-stopped",
+      "title": "RustDesk",
+      "type": 1,
+      "volumes": [
+        {
+          "bind": "/home/docker/rustdesk",
+          "container": "/data"
+        }
+      ]
+    },
+    {
+      "categories": [
+        "Other",
+        "Tools"
+      ],
+      "description": "Open-Source Privacy-respecting metasearch engine",
+      "env": [
+        {
+          "default": "http://localhost:9017",
+          "label": "BASE_URL",
+          "name": "BASE_URL"
+        },
+        {
+          "default": "my-instance",
+          "label": "INSTANCE_NAME",
+          "name": "INSTANCE_NAME"
+        }
+      ],
+      "image": "searxng/searxng:latest",
+      "logo": "https://raw.githubusercontent.com/pi-hosted/pi-hosted/master/images/searx.png",
+      "name": "searxng",
+      "platform": "linux",
+      "ports": [
+        "9017:8080/tcp"
+      ],
+      "restart_policy": "unless-stopped",
+      "title": "SearXNG",
+      "type": 1,
+      "volumes": [
+        {
+          "bind": "/home/docker/searxng",
+          "container": "/etc/searxng"
+        }
+      ],
+      "note": ""
+    },
+    {
+      "type": 1,
+      "name": "surrealdb",
+      "title": "SurrealDB",
+      "note": "",
+      "description": "SurrealDB acts as both a database and a modern, realtime, collaborative API backend layer. SurrealDB can run as a single server or in a highly-available, highly-scalable distributed mode - with support for SQL querying from client devices, GraphQL, ACID transactions, WebSocket connections, structured and unstructured data, graph querying, full-text indexing, geospatial querying, and row-by-row permissions-based access. <a href='https://surrealdb.co/' target='_blank'>Website</a>. <a href='https://hub.docker.com/r/surrealdb/surrealdb' target='_blank'>Docker Hub</a>",
+      "logo": "https://raw.githubusercontent.com/lllllllillllllillll/DweebUI-Icons/main/surrealdb.png",
+      "image": "surrealdb/surrealdb",
+      "categories": [
+        "Database"
+      ],
+      "volumes": [
+        {
+          "bind": "/home/docker/surrealdb",
+          "container": "/data",
+          "mode": "rw"
+        }
+      ],
+      "ports" : [
+        {
+          "host": "3306",
+          "container": "3306"
+        }
+      ],
+      "env": [
+        {
+          "name": "SURREALDB_ADMIN_PASSWORD",
+          "label": "Admin Password",
+          "description": "Admin password for SurrealDB",
+          "type": "password",
+          "default": "password"
+        },
+        {
+          "name": "SURREALDB_ADMIN_EMAIL",
+          "label": "Admin Email",
+          "description": "Admin email for SurrealDB",
+          "type": "text",
+          "default": "root"
+
+        }
+      ]
+    },
+    {
+      "categories": [
+        "Networking",
+        "Security"
+      ],
+      "description": "Traefik is an open-source Edge Router that makes publishing your services a fun and easy experience. It receives requests on behalf of your system and finds out which components are responsible for handling them. ",
+      "image": "traefik:latest",
+      "logo": "https://raw.githubusercontent.com/walkxcode/dashboard-icons/main/png/traefik.png",
+      "name": "traefik",
+      "note": "",
+      "platform": "linux",
+      "ports": [
+        "80:80/tcp",
+        "443:443/tcp",
+        "8080:8080/tcp"
+      ],
+      "restart_policy": "unless-stopped",
+      "command": "--api.insecure=true --providers.docker",
+      "title": "Traefik",
+      "type": 1,
+      "volumes": [
+        {
+          "bind": "/home/docker/traefik/traefik.yml",
+          "container": "/traefik.yml"
+        },
+        {
+          "bind": "/home/docker/traefik/config.yml",
+          "container": "/config.yml"
+        },
+        {
+          "bind": "/home/docker/traefik/acme.json",
+          "container": "/acme.json"
+        },
+        {
+          "bind": "/var/run/docker.sock",
+          "container": "/var/run/docker.sock"
+        }
+      ]
+    },
+    {
+      "categories": [
+        "Tools",
+        "Multimedia"
+      ],
+      "description": "Unmanic is a simple tool for optimising your file library. You can use it to convert your files into a single, uniform format, manage file movements based on timestamps, or execute custom commands against a file based on its file size.",
+      "env": [
+        {
+          "default": "1000",
+          "label": "PUID",
+          "name": "PUID"
+        },
+        {
+          "default": "1000",
+          "label": "PGID",
+          "name": "PGID"
+        }
+      ],
+      "image": "josh5/unmanic:latest",
+      "logo": "https://docs.unmanic.app/img/icon.png",
+      "name": "unmanic",
+      "platform": "linux",
+      "ports": [
+        "8888:8888/tcp"
+      ],
+      "restart_policy": "unless-stopped",
+      "title": "Unmanic",
+      "type": 1,
+      "volumes": [
+        {
+          "bind": "/home/docker/unmanic",
+          "container": "/config"
+        },
+        {
+          "bind": "/media",
+          "container": "/library"
+        },
+        {
+          "bind": "/var/tmp/unmanic",
+          "container": "/tmp/unmanic"
+        }
+      ],
+      "note": ""
+    },
+    {
+      "categories": [
+        "Networking",
+        "VPN"
+      ],
+      "description": "Fast VPN Server with easy to use User Interface",
+      "env": [
+        {
+          "default": "example.domain.com",
+          "description": "Set here your DDNS domain",
+          "label": "WG_HOST",
+          "name": "WG_HOST"
+        },
+        {
+          "default": "ENTER AN ADMIN PASSWORD",
+          "description": "Leave blank to access WebUI without loggin",
+          "label": "PASSWORD",
+          "name": "PASSWORD"
+        },
+        {
+          "default": "51820",
+          "label": "WG_PORT",
+          "name": "WG_PORT"
+        },
+        {
+          "default": "1.1.1.1",
+          "label": "WG_DEFAULT_DNS",
+          "name": "WG_DEFAULT_DNS"
+        },
+        {
+          "default": "10.8.0.x",
+          "label": "WG_DEFAULT_ADDRESS",
+          "name": "WG_DEFAULT_ADDRESS"
+        },
+        {
+          "default": "0.0.0.0/0, ::/0",
+          "label": "WG_ALLOWED_IPS",
+          "name": "WG_ALLOWED_IPS"
+        }
+      ],
+      "logo": "https://raw.githubusercontent.com/pi-hosted/pi-hosted/master/images/wireguard.png",
+      "name": "wg-easy",
+      "platform": "linux",
+      "repository": {
+        "stackfile": "stack/wireguard-easy.yml",
+        "url": "https://github.com/pi-hosted/pi-hosted"
+      },
+      "title": "Wireguard Server",
+      "type": 3,
+      "note": ""
+    },
+    {
+      "categories": [
+        "CMS"
+      ],
+      "description": "WordPress is a web content management system. It was originally created as a tool to publish blogs but has evolved to support publishing other web content, including more traditional websites, mailing lists and Internet forum, media galleries, membership sites, learning management systems and online stores.",
+      "env": [
+        {
+          "default": "db",
+          "label": "Port or host of database server",
+          "name": "WORDPRESS_DB_HOST"
+        },
+        {
+          "default": "exampleuser",
+          "label": "Database user name",
+          "name": "WORDPRESS_DB_USER"
+        },
+        {
+          "default": "examplepass",
+          "label": "Database password for user",
+          "name": "WORDPRESS_DB_PASSWORD"
+        },
+        {
+          "default": "exampledb",
+          "label": "Database name",
+          "name": "WORDPRESS_DB_NAME"
+        }
+      ],
+      "logo": "https://raw.githubusercontent.com/walkxcode/dashboard-icons/main/png/wordpress.png",
+      "note": "Create a mysql or mariadb database for the container first.",
+      "platform": "linux",
+      "image": "wordpress:latest",
+      "title": "Wordpress",
+      "name": "wordpress",
+      "type": 3,
+      "restart_policy": "unless-stopped",
+      "ports": [
+        "8080:80/tcp"
+      ],
+      "network": "AppBridge",
+      "volumes": [
+        {
+          "bind": "/home/docker/wordpress",
+          "container": "/var/www/html"
+        }
+      ]
+    },
+    {
+      "categories": [
+        "Finance",
+        "Productivity"
+      ],
+      "description": "Invoices, Expenses and Tasks built with Laravel and Flutter.",
+      "env": [
+        {
+          "default": "invoice.my.domain",
+          "label": "URL",
+          "name": "URL"
+        },
+        {
+          "label": "APP_KEY",
+          "name": "APP_KEY"
+        },
+        {
+          "label": "TZ",
+          "name": "TZ"
+        },
+        {
+          "label": "DATABASE_PASSWORD",
+          "name": "DATABASE_PASSWORD"
+        },
+        {
+          "label": "MYSQL_ROOT_PASSWORD",
+          "name": "MYSQL_ROOT_PASSWORD"
+        },
+        {
+          "label": "PORT",
+          "name": "PORT"
+        }
+      ],
+      "logo": "https://raw.githubusercontent.com/SelfhostedPro/selfhosted_templates/master/Images/invoice_ninja.png",
+      "name": "invoice_ninja",
+      "note": "The database user is invoice_ninja and the database is ninja_db. Please generate an app key following the documentation <a href='https://github.com/invoiceninja/dockerfiles'>here</a>. ",
+      "platform": "linux",
+      "repository": {
+        "stackfile": "Template/Stack/invoice-ninja.yml",
+        "url": "https://github.com/SelfhostedPro/selfhosted_templates"
+      },
+      "title": "Invoice Ninja",
+      "type": 3
+    },
+    {
+      "categories": [
+        "Gaming"
+      ],
+      "description": "McMyAdmin 2 is the leading web control panel and administration console for Minecraft servers.",
+      "env": [
+        {
+          "default": "1000",
+          "label": "PUID",
+          "name": "PUID"
+        },
+        {
+          "default": "100",
+          "label": "PGID",
+          "name": "PGID"
+        }
+      ],
+      "image": "linuxserver/mcmyadmin2:latest",
+      "logo": "https://raw.githubusercontent.com/SelfhostedPro/selfhosted_templates/master/Images/mcmyadmin-icon.png",
+      "name": "mcmyadmin2",
+      "platform": "linux",
+      "ports": [
+        "8080:8080/tcp",
+        "25565:25565/tcp"
+      ],
+      "restart_policy": "unless-stopped",
+      "title": "McMyAdmin 2",
+      "type": 1,
+      "volumes": [
+        {
+          "container": "/minecraft"
+        }
+      ]
+    },
+    {
+      "categories": [
+        "Other",
+        "Tools"
+      ],
+      "description": "A one-of-a-kind resume builder that's not out to get your data. Completely secure, customizable, portable, open-source and free forever.",
+      "image": "amruthpillai/reactive-resume:latest",
+      "logo": "https://raw.githubusercontent.com/SelfhostedPro/selfhosted_templates/master/Images/reactiveresume.png",
+      "name": "reactive-resume",
+      "platform": "linux",
+      "ports": [
+        "80/tcp"
+      ],
+      "restart_policy": "unless-stopped",
+      "title": "Reactive-Resume",
+      "type": 1,
+      "volumes": [
+        {
+          "bind": "/home/docker/reactiveresume",
+          "container": "/usr/src/app"
+        }
+      ]
+    },
+    {
+      "categories": [
+        "Other",
+        "VPN",
+        "Tools"
+      ],
+      "description": "This container contains OpenVPN and Deluge with a configuration where Deluge is running only when OpenVPN has an active tunnel. It bundles configuration files for many popular VPN providers to make the setup easier.",
+      "env": [
+        {
+          "default": "1001",
+          "label": "PUID",
+          "name": "PUID"
+        },
+        {
+          "default": "1001",
+          "label": "PGID",
+          "name": "PUID"
+        },
+        {
+          "default": "MULLVAD",
+          "description": "see https://github.com/sgtsquiggs/docker-deluge-openvpn",
+          "label": "OPENVPN_PROVIDER",
+          "name": "OPENVPN_PROVIDER"
+        },
+        {
+          "label": "OPENVPN_USERNAME",
+          "name": "OPENVPN_USERNAME"
+        },
+        {
+          "label": "OPENVPN_PASSWORD",
+          "name": "OPENVPN_PASSWORD"
+        }
+      ],
+      "image": "sgtsquiggs/deluge-openvpn:latest",
+      "name": "deluge-openvpn",
+      "logo": "https://raw.githubusercontent.com/walkxcode/dashboard-icons/main/png/deluge.png",
+      "platform": "linux",
+      "ports": [
+        "8112:8112/tcp"
+      ],
+      "restart_policy": "unless-stopped",
+      "title": "Deluge OpenVPN",
+      "type": 1,
+      "volumes": [
+        {
+          "bind": "/etc/localtime",
+          "container": "/etc/localtime"
+        },
+        {
+          "bind": "/portainer/Downloads",
+          "container": "/downloads"
+        },
+        {
+          "bind": "/home/docker/delugeopenvpn/config",
+          "container": "/config"
+        }
+      ]
+    },
+    {
+      "categories": [
+        "Multimedia"
+      ],
+      "note": "",
+      "description": "Tdarr is a popular conditional transcoding application for processing large (or small) media libraries. The application comes in the form of a click-to-run web-app, which you run on your own device and access through a web browser.",
+      "logo": "https://raw.githubusercontent.com/walkxcode/dashboard-icons/main/png/tdarr.png",
+      "name": "tdarr",
+      "platform": "linux",
+      "image": "ghcr.io/haveagitgat/tdarr",
+      "title": "Tdarr",
+      "type": 3,
+      "volumes": [
+        {
+          "bind": "/home/docker/tdarr/configs",
+          "container": "/app/configs"
+        },
+        {
+          "bind": "/portainer/Downloads",
+          "container": "/downloads"
+        }
+      ],
+      "ports": [
+        "8265:8265/tcp"
+      ],
+      "restart_policy": "unless-stopped",
+      "env": [
+        {
+          "default": "1000",
+          "label": "PUID",
+          "name": "PUID"
+        },
+        {
+          "default": "1000",
+          "label": "PGID",
+          "name": "PGID"
+        }
+      ]
+    },
+    {
+      "categories": [
+        "Finance"
+      ],
+      "description": "Cryptofolio is an open-source, and self-hosted solution for tracking your cryptocurrency holdings. It features a web interface, an Android mobile app, and a cross-platform desktop application for Windows, macOS, and Linux.",
+      "image": "xtrendence/cryptofolio:latest",
+      "logo": "https://i.imgur.com/5v8lzea.png",
+      "name": "cryptofolio",
+      "platform": "linux",
+      "ports": [
+        "7280:80/tcp"
+      ],
+      "restart_policy": "always",
+      "title": "Cryptofolio",
+      "type": 1
+    },
+    {
+      "categories": [
+        "Networking"
+      ],
+      "description": "An easy to use Status Page for your websites and applications. Statping will automatically fetch the application and render a beautiful status page with tons of features for you to build an even better status page.",
+      "image": "statping/statping:latest",
+      "logo": "https://raw.githubusercontent.com/xneo1/portainer_templates/master/Images/statping.png",
+      "name": "statping",
+      "platform": "linux",
+      "ports": [
+        "4040:8080/tcp"
+      ],
+      "restart_policy": "always",
+      "title": "Statping",
+      "type": 1,
+      "volumes": [
+        {
+          "bind": "/home/docker/statping",
+          "container": "/app"
+        }
+      ]
+    },
+    {
+      "categories": [
+        "Downloaders"
+      ],
+      "description": "A docker image with qBittorrent and the Flood UI, also optional WireGuard VPN support.",
+      "logo": "https://hotio.dev/img/image-logos/flood.svg",
+      "name": "flood",
+      "platform": "linux",
+      "repository": {
+        "stackfile": "Template/Stack/flood.yml",
+        "url": "https://github.com/xneo1/portainer_templates"
+      },
+      "title": "Flood",
+      "type": 3
+    },
+    {
+      "categories": [
+        "Multimedia",
+        "AI"
+      ],
+      "description": "PhotoPrism is an AI-powered app for browsing, organizing & sharing your photo collection. It makes use of the latest technologies to tag and find pictures automatically without getting in your way.| Copy as Custom stack and EDIT environment variables.",
+      "logo": "https://photoprism.app/static/img/logo.svg",
+      "name": "photoprism",
+      "platform": "linux",
+      "repository": {
+        "stackfile": "Template/Stack/photoprism.yml",
+        "url": "https://github.com/xneo1/portainer_templates"
+      },
+      "title": "Photoprism",
+      "type": 3
+    },
+    {
+      "categories": [
+        "Multimedia",
+        "AI"
+      ],
+      "description": "Immich is a high performance self-hosted photo and video backup solution.",
+      "logo": "https://github.com/immich-app/immich/raw/main/design/immich-logo.svg",
+      "name": "immich",
+      "platform": "linux",
+      "repository": {
+        "stackfile": "Template/Stack/immich.yml",
+        "url": "https://github.com/xneo1/portainer_templates"
+      },
+      "title": "Immich",
+      "type": 3
+    },
+    {
+      "categories": [
+        "Tools"
+      ],
+      "description": "The recipe manager that allows you to manage your ever growing collection of digital recipes.",
+      "logo": "https://docs.tandoor.dev/logo_color.svg",
+      "name": "tandoor",
+      "platform": "linux",
+      "repository": {
+        "stackfile": "Template/Stack/tandoor.yml",
+        "url": "https://github.com/xneo1/portainer_templates"
+      },
+      "title": "Tandoor",
+      "type": 3
+    },
+    {
+      "type": 1,
+      "name": "influxdb",
+      "title": "InfluxDB",
+      "note": "",
+      "description": "InfluxDB is an open source time series database developed by InfluxData. It is written in Go and optimized for fast, high-availability storage and retrieval of time series data in fields such as operations monitoring, application metrics, Internet of Things sensor data, and real-time analytics. <a href='https://www.influxdata.com/' target='_blank'>Website</a>. <a href='https://hub.docker.com/_/influxdb' target='_blank'>Docker Hub</a>",
+      "logo": "https://raw.githubusercontent.com/lllllllillllllillll/DweebUI-Icons/main/influxdb.png",
+      "image": "influxdb",
+      "categories": [
+        "Database"
+      ],
+      "volumes": [
+        {
+          "bind": "/home/docker/influxdb",
+          "container": "/var/lib/influxdb",
+          "mode": "rw"
+        }
+      ],
+      "ports" : [
+        {
+          "host": "8086",
+          "container": "8086"
+        }
+      ],
+      "env": [
+        {
+          "name": "INFLUXDB_ADMIN_USER",
+          "label": "Admin User",
+          "description": "Admin user for InfluxDB",
+          "type": "text",
+          "default": "admin"
+        },
+        {
+          "name": "INFLUXDB_ADMIN_PASSWORD",
+          "label": "Admin Password",
+          "description": "Admin password for InfluxDB",
+          "type": "password",
+          "default": "password"
+        },
+        {
+          "name": "INFLUXDB_DB",
+          "label": "Database",
+          "description": "Database name",
+          "type": "text",
+          "default": "mydb"
+        }
+      ]
+    },
+    {
+      "categories": [
+        "Media Server"
+      ],
+      "description": "Your media enjoyed through a minimal lightweight media server.",
+      "logo": "https://github.com/midarrlabs/midarr-server/raw/master/priv/static/logo.svg",
+      "name": "midarr",
+      "platform": "linux",
+      "repository": {
+        "stackfile": "Template/Stack/midarr.yml",
+        "url": "https://github.com/xneo1/portainer_templates"
+      },
+      "title": "Midarr",
+      "type": 3
+    },
+    {
+      "categories": [
+        "Development"
+      ],
+      "description": "Appwrite is a self-hosted backend-as-a-service platform that provides developers with all the core APIs required to build any application.",
+      "logo": "https://raw.githubusercontent.com/lllllllillllllillll/DweebUI-Icons/main/appwrite.png",
+      "name": "appwrite",
+      "platform": "linux",
+      "repository": {
+        "stackfile": "Template/Stack/appwrite.yml",
+        "url": "https://github.com/xneo1/portainer_templates"
+      },
+      "title": "Appwrite",
+      "type": 3
+    },
+    {
+      "categories": [
+        "Media Server",
+        "LDAP"
+      ],
+      "description": "Tubearchivist is your self hosted YouTube media server",
+      "note": "Require a Redis and Elasticsearch database. Tube Archivist needs around 2GB of available memory for a small testing setup and around 4GB of available memory for a mid to large sized installation. Minimal with dual core with 4 threads, better quad core plus.",
+      "logo": "https://raw.githubusercontent.com/walkxcode/dashboard-icons/main/png/tube-archivist.png",
+      "name": "tubearchivist",
+      "platform": "linux",
+      "repository": {
+        "stackfile": "Template/Stack/tubearchivist.yml",
+        "url": "https://github.com/xneo1/portainer_templates"
+      },
+      "title": "Tubearchivist",
+      "type": 3
+    },
+    {
+      "categories": [
+        "Finance"
+      ],
+      "description": "Actual is a local-first personal finance tool. It is 100% free and open-source. It has a synchronization element so that all your changes can move between devices without any heavy lifting.",
+      "logo": "https://raw.githubusercontent.com/walkxcode/dashboard-icons/main/png/actual.png",
+      "name": "actual-server",
+      "platform": "linux",
+      "image": "actualbudget/actual-server:latest",
+      "restart_policy": "unless-stopped",
+      "title": "Actual-Server",
+      "ports": [
+        "5006:5006/tcp"
+      ],
+      "volumes": [
+        {
+          "bind": "/home/docker/actual",
+          "container": "/data"
+        }
+      ],
+      "type": 3
+    },
+    {
+      "categories": [
+        "Downloaders",
+        "Multimedia"
+      ],
+      "description": "Autobrr is the modern download automation tool for torrents.",
+      "logo": "https://autobrr.com/img/logo.png",
+      "name": "autobrr",
+      "platform": "linux",
+      "repository": {
+        "stackfile": "Template/Stack/autobrr.yml",
+        "url": "https://github.com/xneo1/portainer_templates"
+      },
+      "title": "Autobrr",
+      "type": 3
+    },
+    {
+      "categories": [
+        "Monitoring"
+      ],
+      "description": "Glances is an open-source system cross-platform monitoring tool. It allows real-time monitoring of various aspects of your system such as CPU, memory, disk, network usage etc.",
+      "logo": "https://raw.githubusercontent.com/nicolargo/glances/develop/docs/_static/glances-responsive-webdesign.png",
+      "name": "glances",
+      "platform": "linux",
+      "repository": {
+        "stackfile": "Template/Stack/glances.yml",
+        "url": "https://github.com/xneo1/portainer_templates"
+      },
+      "title": "Glances",
+      "type": 3
+    },
+    {
+      "categories": [
+        "Development",
+        "Low Code",
+        "No code"
+      ],
+      "description": "Tooljet is an Open-source low-code application development platform for building and deploying business applications.",
+      "logo": "https://uploads-ssl.webflow.com/6266634263b9179f76b2236e/63aaa161e3b3be42ec50eb6f_Logomark.svg",
+      "name": "tooljet",
+      "platform": "linux",
+      "repository": {
+        "stackfile": "Template/Stack/tooljet.yml",
+        "url": "https://github.com/xneo1/portainer_templates"
+      },
+      "title": "Tooljet",
+      "type": 3
+    },
+    {
+      "categories": [
+        "Productivity",
+        "Development",
+        "Low-code",
+        "No-code"
+      ],
+      "description": "Budibase allows no-code users to build apps quickly, with more functionality available with a little bit of inline code.",
+      "logo": "https://raw.githubusercontent.com/lllllllillllllillll/DweebUI-Icons/main/budibase.png",
+      "name": "budibase",
+      "platform": "linux",
+      "repository": {
+        "stackfile": "Template/Stack/budibase.yml",
+        "url": "https://github.com/xneo1/portainer_templates"
+      },
+      "title": "Budibase",
+      "type": 3
+    },
+    {
+      "categories": [
+        "Development"
+      ],
+      "description": "Appsmith (www.appsmith.com) is the first open-source low code tool that helps developers build dashboards and admin panels very quickly.",
+      "logo": "https://cdn-images.himalayas.app/vr60veq4neiptamhqm6qxwi3toi3",
+      "name": "appsmith",
+      "platform": "linux",
+      "image": "appsmith/appsmith-ce",
+      "title": "Appsmith",
+      "ports": [
+        "80:80/tcp",
+        "443:443/tcp"
+      ],
+      "volumes": [
+        {
+          "bind": "/home/docker/appsmith",
+          "container": "/appsmith-stacks"
+        }
+      ],
+      "type": 3
+    },
+    {
+      "categories": [
+        "Networking",
+        "Monitoring"
+      ],
+      "description": "Lazytainer monitors network traffic to containers. If there is traffic, the container runs, otherwise the container is stopped/paused.",
+      "logo": "https://raw.githubusercontent.com/walkxcode/dashboard-icons/main/png/lazytainer.png",
+      "name": "lazytainer",
+      "platform": "linux",
+      "repository": {
+        "stackfile": "Template/Stack/lazytainer.yml",
+        "url": "https://github.com/xneo1/portainer_templates"
+      },
+      "title": "Lazytainer",
+      "type": 3
+    },
+    {
+      "categories": [
+        "Finance"
+      ],
+      "description": "I hate money is a web application made to ease shared budget management. It keeps track of who bought what, when, and for whom; and helps to settle the bills.",
+      "logo": "https://raw.githubusercontent.com/walkxcode/dashboard-icons/main/png/ihatemoney.png",
+      "name": "ihatemoney",
+      "platform": "linux",
+      "repository": {
+        "stackfile": "Template/Stack/ihatemoney.yml",
+        "url": "https://github.com/xneo1/portainer_templates"
+      },
+      "title": "I hate money",
+      "type": 3
+    },
+    {
+      "categories": [
+        "Media Server",
+        "LDAP"
+      ],
+      "description": "Fireshare: Share your game clips, videos, or other media via unique links.",
+      "logo": "https://raw.githubusercontent.com/walkxcode/dashboard-icons/main/png/fireshare.png",
+      "name": "fireshare",
+      "platform": "linux",
+      "repository": {
+        "stackfile": "Template/Stack/fireshare.yml",
+        "url": "https://github.com/xneo1/portainer_templates"
+      },
+      "title": "Fireshare",
+      "type": 3
+    },
+    {
+      "categories": [
+        "Productivity"
+      ],
+      "description": "Xwiki s a free wiki software platform written in Java with a design emphasis on extensibility. XWiki is an enterprise wiki.",
+      "logo": "https://upload.wikimedia.org/wikipedia/commons/e/e2/Logo-xwikiorange.svg",
+      "name": "xwiki",
+      "platform": "linux",
+      "repository": {
+        "stackfile": "Template/Stack/xwiki.yml",
+        "url": "https://github.com/xneo1/portainer_templates"
+      },
+      "title": "Xwiki",
+      "type": 3
+    },
+    {
+      "categories": [
+        "Other"
+      ],
+      "description": "Leantime is an open source project management solution to make your ideas reality.",
+      "logo": "https://s3-us-west-2.amazonaws.com/leantime-website/wp-content/uploads/2022/07/24022056/logo-large.png",
+      "name": "leantime",
+      "platform": "linux",
+      "repository": {
+        "stackfile": "Template/Stack/leantime.yml",
+        "url": "https://github.com/xneo1/portainer_templates"
+      },
+      "title": "Leantime",
+      "type": 3
+    },
+    {
+      "categories": [
+        "Other"
+      ],
+      "description": "Jellyseerr is a free and open source software application for managing requests for your media library. It is a a fork of Overseerr built to bring support for Jellyfin & Emby media servers!. <a href='https://github.com/Fallenbagel/jellyseerr/'>Github</a>",
+      "logo": "https://raw.githubusercontent.com/lllllllillllllillll/DweebUI-Icons/main/jellyseerr.png",
+      "name": "jellyseerr",
+      "note": "For Emby : add the environment variable JELLYFIN_TYPE=emby . (this will allow you to use the play button)",
+      "platform": "linux",
+      "image": "fallenbagel/jellyseerr:latest",
+      "title": "Jellyseerr",
+      "type": 3,
+      "volumes": [
+        {
+          "bind": "/home/docker/jellyseerr",
+          "container": "/app/config"
+        }
+      ],
+      "ports": [
+        "5055:5055/tcp"
+      ]
+    },
+    {
+      "categories": [
+        "Productivity"
+      ],
+      "description": "Trudesk is an Open Source Help Desk Software and Ticketing System",
+      "logo": "https://trudesk.io/wp-content/uploads/2019/10/logo-med.png",
+      "name": "trudesk",
+      "platform": "linux",
+      "repository": {
+        "stackfile": "Template/Stack/trudesk.yml",
+        "url": "https://github.com/xneo1/portainer_templates"
+      },
+      "title": "Trudesk",
+      "type": 3
+    },
+    {
+      "categories": [
+        "Dashboard"
+      ],
+      "description": "Dashdot is a modern server dashboard, running on the latest tech, designed with glassmorphism in mind. It is intended to be used for smaller VPS and private servers.",
+      "logo": "https://getdashdot.com/img/logo512.png",
+      "name": "dashdot",
+      "platform": "linux",
+      "repository": {
+        "stackfile": "Template/Stack/dashdot.yml",
+        "url": "https://github.com/xneo1/portainer_templates"
+      },
+      "title": "Dashdot",
+      "type": 3
+    },
+    {
+      "categories": [
+        "Productivity",
+        "Development",
+        "No-code"
+      ],
+      "description": "Open source no-code database and Airtable alternative.Create your own online database without technical experience. Our user friendly no-code tool gives you the powers of a developer without leaving your browser.",
+      "logo": "https://raw.githubusercontent.com/walkxcode/dashboard-icons/main/png/baserow.png",
+      "name": "baserow",
+      "platform": "linux",
+      "repository": {
+        "stackfile": "Template/Stack/baserow.yml",
+        "url": "https://github.com/xneo1/portainer_templates"
+      },
+      "title": "Baserow",
+      "type": 3
+    },
+    {
+      "name": "nocodb",
+      "title": "NocoDB",
+      "note": "",
+      "description": "NocoDB is a free, open-source, self-hosted, no-code platform to make database driven application. <a href='https://www.nocodb.com/' target='_blank'>Website</a>. <a href='https://hub.docker.com/r/nocodb/nocodb' target='_blank'>Docker Hub</a>",
+      "logo": "https://raw.githubusercontent.com/walkxcode/dashboard-icons/main/png/nocodb.png",
+      "image": "nocodb/nocodb",
+      "categories": [
+        "Database"
+      ],
+      "volumes": [
+        {
+          "bind": "/home/docker/nocodb",
+          "container": "/var/lib/nocodb",
+          "mode": "rw"
+        }
+      ],
+      "ports" : [
+        {
+          "host": "8080",
+          "container": "8080"
+        }
+      ],
+      "env": [
+        {
+          "name": "NOCODB_DB_HOST",
+          "label": "Database Host",
+          "description": "Database host",
+          "type": "text",
+          "default": "mysql"
+        },
+        {
+          "name": "NOCODB_DB_PORT",
+          "label": "Database Port",
+          "description": "Database port",
+          "type": "text",
+          "default": "3306"
+        },
+        {
+          "name": "NOCODB_DB_USER",
+          "label": "Database User",
+          "description": "Database user",
+          "type": "text",
+          "default": "root"
+        },
+        {
+          "name": "NOCODB_DB_PASSWORD",
+          "label": "Database Password",
+          "description": "Database password",
+          "type": "password",
+          "default": "password"
+        },
+        {
+          "name": "NOCODB_DB_NAME",
+          "label": "Database Name",
+          "description": "Database name",
+          "type": "text",
+          "default": "nocodb"
+        }
+      ]
+    },
+    {
+      "categories": [
+        "Analytics",
+        "Tools"
+      ],
+      "description": "Google Analytics alternative that protects your data and your customers' privacy",
+      "logo": "https://raw.githubusercontent.com/walkxcode/dashboard-icons/main/png/matomo.png",
+      "name": "matomo",
+      "platform": "linux",
+      "repository": {
+        "stackfile": "Template/Stack/matomo.yml",
+        "url": "https://github.com/xneo1/portainer_templates"
+      },
+      "ports": [
+        "8282:80/tcp"
+      ],
+      "title": "Matomo",
+      "type": 3
+    },
+    {
+      "categories": [
+        "Tools"
+      ],
+      "description": "AdGuard Home is a network-wide software for blocking ads & tracking. After you set it up, it\u2019ll cover ALL your home devices, and you don\u2019t need any client-side software for that. With the rise of Internet-Of-Things and connected devices, it becomes more and more important to be able to control your whole network.",
+      "env": [
+        {
+          "default": "1000",
+          "label": "PUID",
+          "name": "PUID"
+        },
+        {
+          "default": "100",
+          "label": "PGID",
+          "name": "PGID"
+        },
+        {
+          "label": "CONTEXT_PATH",
+          "name": "CONTEXT_PATH",
+          "set": "adguard home"
+        }
+      ],
+      "note": "DNS-over-HTTPS: [80:80/TCP] [443:443/TCP] [443:443/UDP] [3000:3000/TCP] [DEFAULT]. DNS: [53:53/TCP] [53:53/UDP]. Admin Panel: [3000:3000/TCP]. DHCP: [67:67/UDP] [68:68/TCP] [68:68/UDP]. DNS-over-TLS: [853:853/TCP]. DNS-over-QUIC: [784:784/UDP] [853:853/UDP] [8853:8853/UDP]. DNSCrypt: [5443:5443/TCP] [5443:5443/UDP]",
+      "image": "adguard/adguardhome:latest",
+      "logo": "https://raw.githubusercontent.com/Qballjos/portainer_templates/master/Images/adguard.png",
+      "name": "adguard",
+      "platform": "linux",
+      "ports": [
+        "53:53/tcp",
+        "53:53/udp",
+        "67:67/udp",
+        "68:68/tcp",
+        "68:68/udp",
+        "80:80/tcp",
+        "443:443/tcp",
+        "853:853/tcp",
+        "3000:3000/tcp"
+      ],
+      "restart_policy": "unless-stopped",
+      "title": "Adguard",
+      "type": 1,
+      "volumes": [
+        {
+          "bind": "/portainer/Files/AppData/Adguard/Workdir",
+          "container": "/opt/adguardhome/work"
+        },
+        {
+          "bind": "/portainer/Files/AppData/Adguard/Conf",
+          "container": "/opt/adguardhome/conf"
+        }
+      ]
+    },
+    {
+      "type": 1,
+      "name": "mongodb",
+      "title": "MongoDB",
+      "note": "",
+      "description": "MongoDB is a source-available cross-platform document-oriented database program. Classified as a NoSQL database program, MongoDB uses JSON-like documents with optional schemas. <a href='https://www.mongodb.com/' target='_blank'>Website</a>. <a href='https://hub.docker.com/_/mongo' target='_blank'>Docker Hub</a>",
+      "logo": "https://raw.githubusercontent.com/walkxcode/dashboard-icons/main/png/mongodb.png",
+      "image": "mongo",
+      "categories": [
+        "Database"
+      ],
+      "volumes": [
+        {
+          "bind": "/home/docker/mongodb",
+          "container": "/data/db",
+          "mode": "rw"
+        }
+      ],
+      "ports" : [
+        {
+          "host": "27017",
+          "container": "27017"
+        }
+      ],
+      "env": [
+        {
+          "name": "MONGO_INITDB_ROOT_USERNAME",
+          "label": "Root Username",
+          "description": "Root username for MongoDB",
+          "type": "text",
+          "default": "root"
+        },
+        {
+          "name": "MONGO_INITDB_ROOT_PASSWORD",
+          "label": "Root Password",
+          "description": "Root password for MongoDB",
+          "type": "password",
+          "default": "password"
+        }
+      ]
+    },
+    {
+      "type": 1,
+      "name": "cratedb",
+      "title": "CrateDB",
+      "note": "",
+      "description": "CrateDB is a distributed SQL database that combines SQL and search in a way that's simple to scale. It is designed to be highly available, horizontally scalable, and easy to use. <a href='https://crate.io/' target='_blank'>Website</a>. <a href='https://hub.docker.com/_/crate' target='_blank'>Docker Hub</a>",
+      "logo": "https://raw.githubusercontent.com/lllllllillllllillll/DweebUI-Icons/main/cratedb.png",
+      "image": "crate",
+      "categories": [
+        "Database"
+      ],
+      "volumes": [
+        {
+          "bind": "/home/docker/cratedb",
+          "container": "/data",
+          "mode": "rw"
+        }
+      ],
+      "ports" : [
+        {
+          "host": "4200",
+          "container": "4200"
+        },
+        {
+          "host": "4300",
+          "container": "4300"
+        }
+      ],
+      "env": [
+        {
+          "name": "CRATE_HEAP_SIZE",
+          "label": "Heap Size",
+          "description": "Heap size for CrateDB",
+          "type": "text",
+          "default": "2g"
+        }
+      ]
+    },
+    {
+      "type": 1,
+      "name": "elasticsearch",
+      "title": "Elasticsearch",
+      "note": "",
+      "description": "Elasticsearch is a distributed, RESTful search and analytics engine capable of solving a growing number of use cases. It provides a distributed, multitenant-capable full-text search engine with an HTTP web interface and schema-free JSON documents. <a href='https://www.elastic.co/' target='_blank'>Website</a>. <a href='https://hub.docker.com/_/elasticsearch' target='_blank'>Docker Hub</a>",
+      "logo": "https://raw.githubusercontent.com/walkxcode/dashboard-icons/main/png/elasticsearch.png",
+      "image": "elasticsearch",
+      "categories": [
+        "Database"
+      ],
+      "volumes": [
+        {
+          "bind": "/home/docker/elasticsearch",
+          "container": "/usr/share/elasticsearch/data",
+          "mode": "rw"
+        }
+      ],
+      "ports" : [
+        {
+          "host": "9200",
+          "container": "9200"
+        },
+        {
+          "host": "9300",
+          "container": "9300"
+        }
+      ],
+      "env": [
+        {
+          "name": "discovery.type",
+          "label": "Discovery Type",
+          "description": "Discovery type for Elasticsearch",
+          "type": "text",
+          "default": "single-node"
+        }
+      ]
+    },
+    {
+      "type": 1,
+      "title": "SQL Server",
+      "name": "mssql",
+      "description": "Official image for Microsoft SQL Server based on Ubuntu 20.04. <a href=\"https://hub.docker.com/_/microsoft-mssql-server\" target=\"_blank\">Docker Hub</a>",
+      "categories": [
+        "Database"
+      ],
+      "platform": "linux",
+      "note": "Requires at least 2GB of RAM. Make sure to assign enough memory to the Docker VM if you're running on Docker for Mac or Windows. Password needs to include at least 8 characters including uppercase, lowercase letters, base-10 digits and/or non-alphanumeric symbols.",
+      "logo": "https://portainer-io-assets.sfo2.digitaloceanspaces.com/logos/microsoft.png",
+      "image": "mcr.microsoft.com/mssql/server:2022-latest",
+      "ports": [
+        "1433/tcp"
+      ],
+      "env": [
+        {
+          "name": "ACCEPT_EULA",
+          "default": "Y",
+          "preset": true
+        },
+        {
+          "name": "MSSQL_SA_PASSWORD",
+          "label": "MSSQL_SA_PASSWORD",
+          "default": "YOUR_STRONG_PASSWORD"
+        },
+        {
+          "name": "MSSQL_PID",
+          "label": "MSSQL_PID",
+          "default": "Developer"
+        }
+      ]
+    },
+    {
+      "name": "redis",
+      "title": "Redis",
+      "note": "",
+      "description": "Redis is an in-memory data structure project implementing a distributed, in-memory key-value database with optional durability. Redis supports different kinds of abstract data structures, such as strings, lists, maps, sets, sorted sets, HyperLogLogs, bitmaps, streams, and spatial indexes. <a href='https://redis.io/' target='_blank'>Website</a>. <a href='https://hub.docker.com/_/redis' target='_blank'>Docker Hub</a>",
+      "logo": "https://raw.githubusercontent.com/walkxcode/dashboard-icons/main/png/redis.png",
+      "image": "redis",
+      "categories": [
+        "Database"
+      ],
+      "volumes": [
+        {
+          "bind": "/home/docker/redis",
+          "container": "/data",
+          "mode": "rw"
+        }
+      ],
+      "ports" : [
+        {
+          "host": "6379",
+          "container": "6379"
+        }
+      ],
+      "env": [
+        {
+          "name": "REDIS_PASSWORD",
+          "label": "Password",
+          "description": "Password for Redis",
+          "type": "password",
+          "default": "password"
+        }
+      ]
+    },
+    {
+      "type": 1,
+      "title": "Joomla",
+      "name": "joomla",
+      "description": "Joomla! is an award-winning content management system (CMS), which enables you to build web sites and powerful online applications.",
+      "categories": [
+        "CMS"
+      ],
+      "platform": "linux",
+      "logo": "https://portainer-io-assets.sfo2.digitaloceanspaces.com/logos/joomla.png",
+      "image": "joomla:latest",
+      "env": [
+        {
+          "name": "JOOMLA_DB_HOST",
+          "label": "MySQL database host",
+          "type": "container"
+        },
+        {
+          "name": "JOOMLA_DB_PASSWORD",
+          "label": "Database password"
+        }
+      ],
+      "ports": [
+        "80/tcp"
+      ],
+      "volumes": [
+        {
+          "container": "/var/www/html"
+        }
+      ]
+    },
+    {
+      "type": 1,
+      "title": "Drupal",
+      "name": "drupal",
+      "description": "Open-source content management framework",
+      "categories": [
+        "CMS"
+      ],
+      "platform": "linux",
+      "logo": "https://portainer-io-assets.sfo2.digitaloceanspaces.com/logos/drupal.png",
+      "image": "drupal:latest",
+      "ports": [
+        "80/tcp"
+      ],
+      "volumes": [
+        {
+          "container": "/var/www/html"
+        }
+      ]
+    },
+    {
+      "type": 1,
+      "name": "cockroachdb",
+      "title": "CockroachDB",
+      "note": "",
+      "description": "CockroachDB is a distributed SQL database built on a transactional and strongly-consistent key-value store. It scales horizontally; survives disk, machine, rack, and even datacenter failures with minimal latency disruption and no manual intervention; supports strongly-consistent ACID transactions; and provides a familiar SQL API for structuring, manipulating, and querying data. <a href='https://www.cockroachlabs.com/' target='_blank'>Website</a>. <a href='https://hub.docker.com/_/cockroachdb' target='_blank'>Docker Hub</a>",
+      "logo": "https://raw.githubusercontent.com/lllllllillllllillll/DweebUI-Icons/main/cockroachdb.png",
+      "image": "cockroachdb/cockroach",
+      "categories": [
+        "Database"
+      ],
+      "volumes": [
+        {
+          "bind": "/home/docker/cockroachdb",
+          "container": "/cockroach/cockroach-data",
+          "mode": "rw"
+        }
+      ],
+      "ports" : [
+        {
+          "host": "26257",
+          "container": "26257"
+        },
+        {
+          "host": "8080",
+          "container": "8080"
+        }
+      ],
+      "env": [
+        {
+          "name": "COCKROACH_CHANNEL",
+          "label": "Channel",
+          "description": "CockroachDB channel",
+          "type": "text",
+          "default": "stable"
+        },
+        {
+          "name": "COCKROACH_USER",
+          "label": "User",
+          "description": "Database user",
+          "type": "text",
+          "default": "root"
+        },
+        {
+          "name": "COCKROACH_PASSWORD",
+          "label": "Password",
+          "description": "Database password",
+          "type": "password",
+          "default": "password"
+        }
+      ]
+    },
+    {
+      "type": 1,
+      "name": "mariadb",
+      "title": "MariaDB",
+      "note": "",
+      "description": "MariaDB is a community-developed, commercially supported fork of the MySQL relational database management system (RDBMS), intended to remain free and open-source software under the GNU General Public License. Development is led by some of the original developers of MySQL, who forked it due to concerns over its acquisition by Oracle Corporation in 2009. <a href='https://mariadb.org/' target='_blank'>Website</a>. <a href='https://hub.docker.com/_/mariadb' target='_blank'>Docker Hub</a>",
+      "logo": "https://raw.githubusercontent.com/lllllllillllllillll/DweebUI-Icons/main/mariadb.png",
+      "image": "mariadb",
+      "categories": [
+        "Database"
+      ],
+      "volumes": [
+        {
+          "bind": "/home/docker/mariadb",
+          "container": "/var/lib/mysql",
+          "mode": "rw"
+        }
+      ],
+      "ports" : [
+        {
+          "host": "3306",
+          "container": "3306"
+        }
+      ],
+      "env": [
+        {
+          "name": "MYSQL_ROOT_PASSWORD",
+          "label": "Root Password",
+          "description": "Root password for MariaDB",
+          "type": "password",
+          "default": "password"
+        },
+        {
+          "name": "MYSQL_DATABASE",
+          "label": "Database",
+          "description": "Database name",
+          "type": "text",
+          "default": "heimdall"
+        },
+        {
+          "name": "MYSQL_USER",
+          "label": "User",
+          "description": "Database user",
+          "type": "text",
+          "default": "heimdall"
+        },
+        {
+          "name": "MYSQL_PASSWORD",
+          "label": "Password",
+          "description": "Database password",
+          "type": "password",
+          "default": "password"
+        }
+      ]
+    },
+    {
+      "type": 1,
+      "name": "couchdb",
+      "title": "CouchDB",
+      "note": "",
+      "description": "Apache CouchDB is open source database software that focuses on ease of use and having a scalable architecture. It has a document-oriented NoSQL database architecture and is implemented in the concurrency-oriented language Erlang; it uses JSON to store data, JavaScript as its query language using MapReduce, and HTTP for an API. <a href='https://couchdb.apache.org/' target='_blank'>Website</a>. <a href='https://hub.docker.com/_/couchdb' target='_blank'>Docker Hub</a>",
+      "logo": "https://raw.githubusercontent.com/lllllllillllllillll/DweebUI-Icons/main/couchdb.png",
+      "image": "couchdb",
+      "categories": [
+        "Database"
+      ],
+      "volumes": [
+        {
+          "bind": "/home/docker/couchdb",
+          "container": "/opt/couchdb/data",
+          "mode": "rw"
+        }
+      ],
+      "ports" : [
+        {
+          "host": "5984",
+          "container": "5984"
+        }
+      ],
+      "env": [
+        {
+          "name": "COUCHDB_USER",
+          "label": "User",
+          "description": "Database user",
+          "type": "text",
+          "default": "heimdall"
+        },
+        {
+          "name": "COUCHDB_PASSWORD",
+          "label": "Password",
+          "description": "Database password",
+          "type": "password",
+          "default": "password"
+        }
+      ]
+    },
+    {
+      "type": 1,
+      "name": "nvidia-hwa-test",
+      "title": "NVIDIA HWA Test",
+      "note": "",
+      "description": "Nvidia HWA Test is a test container for NVIDIA hardware acceleration. Start the container then check the logs to confirm your output matches the example from this page: <a href='https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/sample-workload.html'>Running a Sample Workload</a>. <a href='https://www.nvidia.com/' target='_blank'>Website</a>. <a href='https://hub.docker.com/r/nvidia/cuda' target='_blank'>Docker Hub</a>",
+      "platform": "linux",
+      "logo": "https://avatars.githubusercontent.com/u/1728152",
+	    "image": "nvidia/cuda:12.2.0-base-ubuntu20.04",
+      "env": [
+        {
+          "name": "DRINODE",
+          "label": "DRINODE",
+          "default": "/dev/dri/renderD128",
+          "description": "Specify the render device (GPU) for the contianer to use."
+        }
+      ],
+      "command": "nvidia-smi"  
+    }
+  ]
+}

+ 145 - 0
views/pages/account.ejs

@@ -0,0 +1,145 @@
+	<!doctype html>
+	<html lang="en">
+	<head>
+		<meta charset="utf-8"/>
+		<meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover"/>
+		<meta http-equiv="X-UA-Compatible" content="ie=edge"/>
+		<title>Settings - Tabler - Premium and Open Source dashboard template with responsive and high quality UI.</title>
+		<!-- CSS files -->
+		<link href="./css/tabler.min.css?1684106062" rel="stylesheet"/>
+		<link href="./css/demo.min.css?1684106062" rel="stylesheet"/>
+		<style>
+		@import url('https://rsms.me/inter/inter.css');
+		:root {
+			--tblr-font-sans-serif: 'Inter Var', -apple-system, BlinkMacSystemFont, San Francisco, Segoe UI, Roboto, Helvetica Neue, sans-serif;
+		}
+		body {
+			font-feature-settings: "cv03", "cv04", "cv11";
+		}
+		</style>
+	</head>
+	<body >
+		<script src="./js/demo-theme.min.js?1684106062"></script>
+		<div class="page">
+		<!-- Navbar -->
+		<%- include('../partials/navbar.ejs') %>
+		<div class="page-wrapper">
+			<!-- Page header -->
+			<div class="page-header d-print-none">
+			<div class="container-xl">
+				<div class="row g-2 align-items-center">
+				<div class="col">
+					<h2 class="page-title">
+					Account Settings
+					</h2>
+				</div>
+				</div>
+			</div>
+			</div>
+			<!-- Page body -->
+			<div class="page-body">
+			<div class="container-xl">
+				<div class="card">
+				<div class="row g-0">
+					<div class="col-3 d-none d-md-block border-end">
+					<div class="card-body">
+						<h4 class="subheader">Business settings</h4>
+						<div class="list-group list-group-transparent">
+						<a href="/account" class="list-group-item list-group-item-action d-flex align-items-center active">Accounts</a>
+						<a href="#" class="list-group-item list-group-item-action d-flex align-items-center">My Notifications</a>
+						<a href="#" class="list-group-item list-group-item-action d-flex align-items-center">Connected Apps</a>
+						<a href="/settings" class="list-group-item list-group-item-action d-flex align-items-center">Settings</a>
+						<a href="#" class="list-group-item list-group-item-action d-flex align-items-center">Billing & Invoices</a>
+						</div>
+						<h4 class="subheader mt-4">Experience</h4>
+						<div class="list-group list-group-transparent">
+						<a href="#" class="list-group-item list-group-item-action">Credits</a>
+						</div>
+					</div>
+					</div>
+					<div class="col d-flex flex-column">
+					<div class="card-body">
+						<h2 class="mb-4">My Account</h2>
+						<h3 class="card-title">Profile Details</h3>
+						<div class="row align-items-center">
+							<div class="col-auto"><span class="avatar avatar-xl"><%- avatar %></span>
+							</div>
+							<div class="col-auto"><a href="#" class="btn">
+								Change avatar
+								</a>
+							</div>
+							<div class="col-auto"><a href="#" class="btn btn-ghost-danger">
+								Delete avatar
+								</a>
+							</div>
+						</div>
+						<h3 class="card-title mt-4">Profile</h3>
+						<div class="row g-3">
+							<div class="col-md">
+								<div class="form-label">Full Name</div>
+								<input type="text" class="form-control" value="<%= name %>" readonly="<%= name %>">
+							</div>
+							<div class="col-md">
+								<div class="form-label">First Name</div>
+								<input type="text" class="form-control" value="<%= first_name %>" readonly="<%= first_name %>">
+							</div>
+							<div class="col-md">
+								<div class="form-label">Last Name</div>
+								<input type="text" class="form-control" value="<%= last_name %>" readonly="<%= last_name %>">
+							</div>
+						</div>
+						<h3 class="card-title mt-4">Email</h3>
+						<p class="card-subtitle">This contact will be shown to others publicly, so choose it carefully.</p>
+						<div>
+							<div class="row g-2">
+								<div class="col-auto">
+									<input type="text" class="form-control w-auto" value="<%= email %>" readonly="<%= email %>">
+								</div>
+								<div class="col-auto">
+									<a href="#" class="btn">Change</a>
+								</div>
+							</div>
+						</div>
+						<h3 class="card-title mt-4">Password</h3>
+						<p class="card-subtitle">You can set a permanent password if you don't want to use temporary login codes.</p>
+						<div>
+							<a href="#" class="btn">
+								Set new password
+							</a>
+						</div>
+						<h3 class="card-title mt-4">Public profile</h3>
+						<p class="card-subtitle">Making your profile public means that anyone on the Dashkit network will be able to find
+						you.</p>
+						<div>
+							<label class="form-check form-switch form-switch-lg">
+								<input class="form-check-input" type="checkbox" >
+								<span class="form-check-label form-check-label-on">You're currently visible</span>
+								<span class="form-check-label form-check-label-off">You're
+								currently invisible</span>
+							</label>
+						</div>
+					</div>
+					<div class="card-footer bg-transparent mt-auto">
+						<div class="btn-list justify-content-end">
+						<a href="#" class="btn">
+							Cancel
+						</a>
+						<a href="#" class="btn btn-primary">
+							Submit
+						</a>
+						</div>
+					</div>
+					</div>
+				</div>
+				</div>
+			</div>
+			</div>
+			<%- include('../partials/footer.ejs') %>
+		</div>
+		</div>
+		<!-- Libs JS -->
+		<!-- Tabler Core -->
+		<script src="./js/tabler.min.js?1684106062" defer></script>
+		<script src="./js/demo.min.js?1684106062" defer></script>
+	</body>
+	</html>

+ 93 - 0
views/pages/apps.ejs

@@ -0,0 +1,93 @@
+<!doctype html>
+<html lang="en">
+  <head>
+    <meta charset="utf-8"/>
+    <meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover"/>
+    <meta http-equiv="X-UA-Compatible" content="ie=edge"/>
+    <title>Apps list.</title>
+    <!-- CSS files -->
+    <link href="./css/tabler.min.css?1685973381" rel="stylesheet"/>
+    <link href="./css/demo.min.css?1685973381" rel="stylesheet"/>
+    <style>
+      @import url('https://rsms.me/inter/inter.css');
+      :root {
+      	--tblr-font-sans-serif: 'Inter Var', -apple-system, BlinkMacSystemFont, San Francisco, Segoe UI, Roboto, Helvetica Neue, sans-serif;
+      }
+      body {
+      	font-feature-settings: "cv03", "cv04", "cv11";
+      }
+    </style>
+  </head>
+  <body >
+    <script src="./js/demo-theme.min.js?1685973381"></script>
+    <div class="page">
+      <!-- Navbar -->
+
+      <%- include('../partials/navbar.ejs') %>
+
+      <div class="page-wrapper">
+        <!-- Page header -->
+        <div class="page-header d-print-none">
+          <div class="container-xl">
+            <div class="row g-2 align-items-center">
+              <div class="col">
+                <h2 class="page-title">
+                  Apps
+                </h2>
+                <div class="text-secondary mt-1"><%= list_start %> - <%= list_end %> of <%= app_count %> Apps.</div>
+              </div>
+              <!-- Page title actions -->
+              <div class="col-auto ms-auto d-print-none">
+                <div class="d-flex">
+                  <form action="/apps" id="search" name="search" method="POST">
+                    <input type="search" class="form-control" name="search" placeholder="Search apps…"/>
+                  </form>
+                   <input type="submit" form="search" class="btn btn-outline-success h-50" value="search"/>
+                </div>
+              </div>
+            </div>
+          </div>
+        </div>
+        <!-- Page body -->
+        <div class="page-body">
+          <div class="container-xl">
+            <div class="row row-cards">
+
+              <%- apps_list %>
+              
+            </div>
+            <div class="d-flex mt-4">
+              <ul class="pagination ms-auto">
+                <li class="page-item">
+                  <a class="page-link" href="<%- prev %>" tabindex="-1" aria-disabled="true">
+                    <!-- Download SVG icon from http://tabler-icons.io/i/chevron-left -->
+                    <svg xmlns="http://www.w3.org/2000/svg" class="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 d="M15 6l-6 6l6 6" /></svg>
+                    prev
+                  </a>
+                </li>
+                <li class="page-item"><a class="page-link" href="/apps?page=1">1</a></li>
+                <li class="page-item"><a class="page-link" href="/apps?page=2">2</a></li>
+                <li class="page-item"><a class="page-link" href="/apps?page=3">3</a></li>
+                <li class="page-item"><a class="page-link" href="/apps?page=4">4</a></li>
+                <li class="page-item"><a class="page-link" href="/apps?page=5">5</a></li>
+                <li class="page-item">
+                  <a class="page-link" href="<%- next %>">
+                    next <!-- Download SVG icon from http://tabler-icons.io/i/chevron-right -->
+                    <svg xmlns="http://www.w3.org/2000/svg" class="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 d="M9 6l6 6l-6 6" /></svg>
+                  </a>
+                </li>
+              </ul>
+            </div>
+          </div>
+        </div>
+        
+        <%- include('../partials/footer.ejs') %>
+
+      </div>
+    </div>
+    <!-- Libs JS -->
+    <!-- Tabler Core -->
+    <script src="./js/tabler.min.js?1685973381" defer></script>
+    <script src="./js/demo.min.js?1685973381" defer></script>
+  </body>
+</html>

+ 278 - 0
views/pages/dashboard.ejs

@@ -0,0 +1,278 @@
+<!doctype html>
+<html lang="en">
+  <head>
+    <meta charset="utf-8"/>
+    <meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover"/>
+    <meta http-equiv="X-UA-Compatible" content="ie=edge"/>
+    <title>Dashboard.</title>
+    <!-- CSS files -->
+    <link href="./css/tabler.min.css?1684106062" rel="stylesheet"/>
+    <link href="./css/demo.min.css?1684106062" rel="stylesheet"/>
+    <link href="./css/meters.css" rel="stylesheet"/>
+    <style>
+      @import url('https://rsms.me/inter/inter.css');
+      :root {
+      	--tblr-font-sans-serif: 'Inter Var', -apple-system, BlinkMacSystemFont, San Francisco, Segoe UI, Roboto, Helvetica Neue, sans-serif;
+      }
+      body {
+      	font-feature-settings: "cv03", "cv04", "cv11";
+      }
+    </style>
+  </head>
+  <body >
+    <div class="page">
+      <!-- Navbar -->
+      <%- include('../partials/navbar.ejs') %>
+      <div class="page-wrapper">
+        <!-- Page header -->
+        
+        <!-- Page body -->
+        <div class="page-body">
+          <div class="container-xl">
+            <div class="row row-deck row-cards">
+              
+              <div class="col-12" id="cards">
+                <div class="row row-cards">
+                  
+                  <div class="col-sm-6 col-lg-3">
+                    <div class="card card-sm">
+                      <div class="card-body">
+                        <div class="row align-items-center">
+                          <div class="col-auto">
+                            <span class="bg-primary text-white avatar"><!-- Download SVG icon from http://tabler-icons.io/i/currency-dollar -->
+                              <svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-cpu" 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 5m0 1a1 1 0 0 1 1 -1h12a1 1 0 0 1 1 1v12a1 1 0 0 1 -1 1h-12a1 1 0 0 1 -1 -1z"></path><path d="M9 9h6v6h-6z"></path><path d="M3 10h2"></path><path d="M3 14h2"></path><path d="M10 3v2"></path><path d="M14 3v2"></path><path d="M21 10h-2"></path><path d="M21 14h-2"></path><path d="M14 21v-2"></path><path d="M10 21v-2"></path></svg>
+                            </span>
+                          </div>
+                          <div class="col">
+                            <div class="font-weight-medium">
+                              <label id="cpu-text" class="cpu-text mb-1" for="cpu">CPU 0%</label>
+                            </div>
+                            <div id="cpu-bar" class="cpu-bar meter animate">
+                              <span style="width: 25%"><span></span></span>
+                            </div>
+                          </div>
+                        </div>
+                      </div>
+                    </div>
+                  </div>
+
+                  <div class="col-sm-6 col-lg-3">
+                    <div class="card card-sm">
+                      <div class="card-body">
+                        <div class="row align-items-center">
+                          <div class="col-auto">
+                            <span class="bg-green text-white avatar"><!-- Download SVG icon from http://tabler-icons.io/i/shopping-cart -->
+                              <svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-container" 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="M20 4v.01"></path> <path d="M20 20v.01"></path> <path d="M20 16v.01"></path> <path d="M20 12v.01"></path> <path d="M20 8v.01"></path> <path d="M8 4m0 1a1 1 0 0 1 1 -1h6a1 1 0 0 1 1 1v14a1 1 0 0 1 -1 1h-6a1 1 0 0 1 -1 -1z"></path> <path d="M4 4v.01"></path> <path d="M4 20v.01"></path> <path d="M4 16v.01"></path> <path d="M4 12v.01"></path> <path d="M4 8v.01"></path> </svg>                            
+                            </span>
+                          </div>
+                          <div class="col">
+                            <div class="font-weight-medium">
+                              <label id="ram-text" class="ram-text mb-1" for="ram">RAM 0%</label>
+                            </div>
+                            <div id="ram-bar" class="ram-bar meter animate orange">
+                              <span style="width: 25%"><span></span></span>
+                            </div>
+                          </div>
+                        </div>
+                      </div>
+                    </div>
+                  </div>
+                  
+                  <div class="col-sm-6 col-lg-3">
+                    <div class="card card-sm">
+                      <div class="card-body">
+                        <div class="row align-items-center">
+                          <div class="col-auto">
+                            <span class="bg-twitter text-white avatar"><!-- Download SVG icon from http://tabler-icons.io/i/brand-twitter -->
+                              <svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-arrows-left-right" 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="M21 17l-18 0"></path> <path d="M6 10l-3 -3l3 -3"></path> <path d="M3 7l18 0"></path> <path d="M18 20l3 -3l-3 -3"></path> </svg>                            
+                            </span>
+                          </div>
+                          <div class="col">
+                            <div class="font-weight-medium">
+                              <label id="net-text" class="net-text mb-1" for="network">NET</label>
+                            </div>
+                            <div id="net-bar" class="meter animate blue">
+                              <span style="width: 25%"><span></span></span>
+                            </div>
+                          </div>
+                        </div>
+                      </div>
+                    </div>
+                  </div>
+
+                  <div class="col-sm-6 col-lg-3">
+                    <div class="card card-sm">
+                      <div class="card-body">
+                        <div class="row align-items-center">
+                          <div class="col-auto">
+                            <span class="bg-facebook text-white avatar"><!-- Download SVG icon from http://tabler-icons.io/i/brand-facebook -->
+                              <svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-database" 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 6m-8 0a8 3 0 1 0 16 0a8 3 0 1 0 -16 0"></path> <path d="M4 6v6a8 3 0 0 0 16 0v-6"></path> <path d="M4 12v6a8 3 0 0 0 16 0v-6"></path></svg>
+                            </span>
+                          </div>
+                          <div class="col">
+                            <div class="font-weight-medium">
+                              <label id="disk-text" class="disk-text mb-1" for="disk">Disk Space</label>
+                            </div>
+                            <div id="disk-bar" class="meter animate red">
+                              <span style="width: 25%"><span></span></span>
+                            </div>
+                          </div>
+                        </div>
+                      </div>
+                    </div>
+                  </div>
+
+
+                </div>
+              </div>
+
+              <div class="col-12 mt-12">
+                <div class="card">
+                  <div class="card-header">
+                    <h3 class="card-title">Caddy Proxy Manager</h3>
+                    <!-- create a button that is aligned to the right -->                  
+                      <div class="card-options btn-list">                  
+                          <a href="/refreshsites" class="btn">
+                          <svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-refresh" 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="M20 11a8.1 8.1 0 0 0 -15.5 -2m-.5 -4v4h4"></path> <path d="M4 13a8.1 8.1 0 0 0 15.5 2m.5 4v-4h-4"></path> </svg>
+                          Re-Scan
+                          </a>
+                          <a href="#" class="btn" data-bs-toggle="modal" data-bs-target="#add-site">
+                          <svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-plus" 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 5l0 14"></path> <path d="M5 12l14 0"></path> </svg>
+                          Add Site
+                          </a>
+                      </div>
+                  </div>
+                  
+                  <div class="modal modal-blur fade" id="add-site" tabindex="-1" style="display: none;" aria-hidden="true">
+                    <div class="modal-dialog modal-sm modal-dialog-centered" role="document">
+                      <div class="modal-content">
+                        <div class="modal-body">
+                          <form action="/addsite" id="addsite" method="POST">
+                          <div class="mb-3">
+                            <div class="form-label">Type</div>
+                            <select class="form-select" name="type">
+                              <option value="reverse_proxy">Reverse Proxy</option>
+                              <option value="proxy">Proxy</option>
+                              <option value="file_server">File Server</option>
+                            </select>
+                          </div>
+                          <div class="mb-3">
+                            <label class="form-label">Domain / Subdomain</label>
+                            <input type="text" class="form-control" name="domain" placeholder="media.mydomainname.com">
+                          </div>
+                          <div class="mb-4">
+                            <div class="row g-2">
+                              <div class="col-8">
+                                <label class="form-label">Hostname / Host IP</label>
+                                <input type="text" class="form-control" name="host" placeholder="localhost">
+                              </div>
+                              <div class="col-4">
+                                <label class="form-label">Port</label>
+                                <input type="text" class="form-control" name="port" placeholder="8000">
+                              </div>
+                            </div>
+                          </div>
+                          <div class="mb-3">
+                            <div class="divide-y">
+                              <div>
+                                <label class="row">
+                                  <span class="col" title="HTTP Strict Transport Security (HSTS) is a simple and widely supported standard to protect visitors by ensuring that their browsers always connect to a website over HTTPS.">HSTS</span>
+                                  <span class="col-auto">
+                                    <label class="form-check form-check-single form-switch">
+                                      <input class="form-check-input" type="checkbox" name="hsts" checked="" disabled="">
+                                    </label>
+                                  </span>
+                                </label>
+                              </div>
+                            </div>
+                          </div>
+                          <div class="mb-3">
+                            <div class="form-label">Container</div>
+                            <select class="form-select" name="container" disabled="">
+                              <option value="0" selected></option>
+                              <option value="1">Jellyfin</option>
+                            </select>
+                          </div>
+                          </form>
+                        </div>
+                        <div class="modal-footer">
+                          <button type="button" class="btn btn-link link-secondary me-auto" data-bs-dismiss="modal">Cancel</button>
+                          <input type="submit" form="addsite" class="btn btn-success" value="Add"/>
+                        </div>
+                      </div>
+                    </div>
+                  </div>
+
+
+                  <div class="table-responsive">
+                    <form method="POST">
+                    <table class="table card-table table-vcenter text-nowrap datatable">
+                      <thead>
+                        <tr>
+                          <th class="w-1"><input class="form-check-input m-0 align-middle" name="select-all" type="checkbox" aria-label="Select all invoices"></th>
+                          <th class="w-1">No. <!-- Download SVG icon from http://tabler-icons.io/i/chevron-up -->
+                            <svg xmlns="http://www.w3.org/2000/svg" class="icon icon-sm icon-thick" 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 d="M6 15l6 -6l6 6" /></svg>
+                          </th>
+                          <th>Domain / Subdomain</th>
+                          <th>Type</th>
+                          <th>Host/IP</th>
+                          <th>Port</th>
+                          <th>HTTP/3</th>
+                          <th>HSTS</th>
+                          <th></th>
+                        </tr>
+                      </thead>
+                      <tbody> 
+                        
+                        <%- include('../partials/site_list.ejs') %>
+
+                      </tbody>
+                    </table>
+                  </div>
+                  <div class="card-footer d-flex align-items-center">
+
+                    <span class="dropdown">
+                      <button class="btn dropdown-toggle align-text-top" data-bs-toggle="dropdown">Actions</button>
+                      <div class="dropdown-menu dropdown-menu-end">
+                        <button class="dropdown-item" type="submit" formaction="/enablesite">
+                          Enable
+                        </button>
+                        <button class="dropdown-item" type="submit" formaction="/disablesite">
+                          Disable
+                        </button>
+                        <button class="dropdown-item" type="submit" formaction="/removesite">
+                          Delete
+                        </button>
+                      </div>
+                    </span>
+
+                  </form>
+                                        
+                    <p class="m-0 text-muted ms-auto">Imported: /home/docker/caddy/Caddyfile</p>
+
+                  </div>
+                </div>
+              </div>
+
+            </div>
+          </div>
+        </div>
+        
+        <%- include('../partials/footer.ejs') %>
+        
+      </div>
+    </div>
+    
+
+    <!-- Libs JS -->
+    <script src="./libs/apexcharts/dist/apexcharts.min.js?1684106062" defer></script>
+    <!-- Tabler Core -->
+    <script src="./js/tabler.min.js?1684106062" defer></script>
+    <script src="./js/demo.min.js?1684106062" defer></script>
+    <!-- Socket.io -->
+    <script src="/socket.io/socket.io.js"></script>
+    <script src="./js/main.js"></script>
+    
+  </body>
+</html>
+

+ 81 - 0
views/pages/login.ejs

@@ -0,0 +1,81 @@
+<!doctype html>
+<html lang="en">
+  <head>
+    <meta charset="utf-8"/>
+    <meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover"/>
+    <meta http-equiv="X-UA-Compatible" content="ie=edge"/>
+    <title>DweebUI - Login</title>
+    <!-- CSS files -->
+    <link href="./css/tabler.min.css?1674944402" rel="stylesheet"/>
+    <link href="./css/demo.min.css?1674944402" rel="stylesheet"/>
+    <style>
+      @import url('https://rsms.me/inter/inter.css');
+      :root {
+      	--tblr-font-sans-serif: 'Inter Var', -apple-system, BlinkMacSystemFont, San Francisco, Segoe UI, Roboto, Helvetica Neue, sans-serif;
+      }
+      body {
+      	font-feature-settings: "cv03", "cv04", "cv11";
+      }
+    </style>
+  </head>
+  <body  class=" d-flex flex-column">
+    <script src="./js/demo-theme.js?1674944402"></script>
+    <div class="page page-center">
+      <div class="container container-tight py-4">
+        <div class="text-center mb-4">
+          <a href="." class="navbar-brand navbar-brand-autodark"><img src="./static/logo.svg" height="36" alt=""></a>
+        </div>
+        <div class="card card-md">
+          <div class="card-body">
+            <h2 class="h2 text-center mb-4">Login to your account</h2>
+            <form action="/login" method="POST" novalidate>
+
+                <% if(error) { %>
+                    <div class="alert alert-danger" role="alert">
+                        <%= error %>
+                    </div>
+                <% } %>
+
+              <div class="mb-3">
+                <label class="form-label">Email address</label>
+                <input type="email" class="form-control" id="email" name="email">
+              </div>
+              <div class="mb-2">
+                <label class="form-label">
+                  Password
+                  <span class="form-label-description">
+                    <a href="./forgot-password.html">I forgot password</a>
+                  </span>
+                </label>
+                <div class="input-group input-group-flat">
+                  <input type="password" class="form-control"  id="password" name="password" autocomplete="off">
+                  <span class="input-group-text">
+                    <a href="#" class="link-secondary" title="Show password" data-bs-toggle="tooltip"><!-- Download SVG icon from http://tabler-icons.io/i/eye -->
+                      <svg xmlns="http://www.w3.org/2000/svg" class="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 d="M12 12m-2 0a2 2 0 1 0 4 0a2 2 0 1 0 -4 0" /><path d="M22 12c-2.667 4.667 -6 7 -10 7s-7.333 -2.333 -10 -7c2.667 -4.667 6 -7 10 -7s7.333 2.333 10 7" /></svg>
+                    </a>
+                  </span>
+                </div>
+              </div>
+              <div class="mb-2">
+                <label class="form-check">
+                  <input type="checkbox" class="form-check-input"/>
+                  <span class="form-check-label">Remember me on this device</span>
+                </label>
+              </div>
+              <div class="form-footer">
+                <button type="submit" class="btn btn-primary w-100">Sign in</button>
+              </div>
+            </form>
+          </div>
+        </div>
+        <div class="text-center text-muted mt-3">
+          Don't have account yet? <a href="/register" tabindex="-1">Sign up</a>
+        </div>
+      </div>
+    </div>
+    <!-- Libs JS -->
+    <!-- Tabler Core -->
+    <script src="./js/tabler.min.js?1674944402" defer></script>
+    <script src="./js/demo.min.js?1674944402" defer></script>
+  </body>
+</html>

+ 182 - 0
views/pages/register.ejs

@@ -0,0 +1,182 @@
+<!doctype html>
+<html lang="en">
+  <head>
+    <meta charset="utf-8"/>
+    <meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover"/>
+    <meta http-equiv="X-UA-Compatible" content="ie=edge"/>
+    <title>DweebUI - Register</title>
+    <!-- CSS files -->
+    <link href="./css/tabler.min.css?1684106062" rel="stylesheet"/>
+    <link href="./css/demo.min.css?1684106062" rel="stylesheet"/>
+    <style>
+      @import url('https://rsms.me/inter/inter.css');
+      :root {
+      	--tblr-font-sans-serif: 'Inter Var', -apple-system, BlinkMacSystemFont, San Francisco, Segoe UI, Roboto, Helvetica Neue, sans-serif;
+      }
+      body {
+      	font-feature-settings: "cv03", "cv04", "cv11";
+      }
+    </style>
+  </head>
+  <body  class=" d-flex flex-column">
+    <script src="./js/demo-theme.js?1684106062"></script>
+    <div class="page page-center">
+
+      
+      <form class="container container-tight py-4" action="/register" method="POST" novalidate>
+        
+        <!-- <div class="text-center mb-4">
+          <a href="." class="navbar-brand navbar-brand-autodark"><img src="./static/logo.svg" height="36" alt=""></a>
+        </div> -->
+
+        <div class="card">
+          
+          <div class="card-body text-center py-4">
+            <h1 class="mt-1">Welcome to DweebUI!</h1>
+            <p class="text-muted">A Docker Web Interface</p>
+
+            <% if(error) { %>
+              <div class="alert alert-danger" role="alert">
+                  <%= error %>
+              </div>
+            <% } %>
+
+          </div>
+          <div class="card-body">
+            
+
+            <div class="row row-cards">
+              <div class="col-sm-6 col-md-6">
+                <div class="mb-2">
+                  <label class="form-label">First Name</label>
+                  <input type="text" class="form-control" id="first_name" name="first_name">
+                </div>
+              </div>
+              <div class="col-sm-6 col-md-6">
+                <div class="mb-2">
+                  <label class="form-label">Last Name</label>
+                  <input type="text" class="form-control" id="last_name" name="last_name">
+                </div>
+              </div>
+            </div>
+            <div class="mb-2">
+              <label class="form-label">Username</label>
+              <input type="email" class="form-control" id="username" name="username">
+            </div>
+            <div class="mb-2">
+              <label class="form-label">Email address</label>
+              <input type="email" class="form-control" id="email" name="email">
+            </div>
+            <div class="mb-2">
+              <label class="form-label">Password</label>
+              <div class="input-group input-group-flat">
+                <input type="password" class="form-control" id="password" name="password"  autocomplete="off">
+                <span class="input-group-text">
+                  <a href="#" class="link-secondary" title="Show password" data-bs-toggle="tooltip"><!-- Download SVG icon from http://tabler-icons.io/i/eye -->
+                    <svg xmlns="http://www.w3.org/2000/svg" class="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 d="M10 12a2 2 0 1 0 4 0a2 2 0 0 0 -4 0" /><path d="M21 12c-2.4 4 -5.4 6 -9 6c-3.6 0 -6.6 -2 -9 -6c2.4 -4 5.4 -6 9 -6c3.6 0 6.6 2 9 6" /></svg>
+                  </a>
+                </span>
+              </div>
+            </div>
+
+            <label class="form-label">Avatar</label>
+            <div class="mb-2">
+              <div class="row g-2">
+                <div class="col-6 col-sm-4">
+                  <label class="form-imagecheck mb-2">
+                    <input name="avatar" type="radio" value="rus.jpg" class="form-imagecheck-input" checked/>
+                    <span class="form-imagecheck-figure">
+                      <img src="./static/avatars/rus.jpg" alt="Group of people sightseeing in the city" class="form-imagecheck-image">
+                    </span>
+                  </label>
+                </div>
+                <div class="col-6 col-sm-4">
+                  <label class="form-imagecheck mb-2">
+                    <input name="avatar" type="radio" value="burns.jpg" class="form-imagecheck-input"/>
+                    <span class="form-imagecheck-figure">
+                      <img src="./static/avatars/burns.jpg" alt="Color Palette Guide. Sample Colors Catalog." class="form-imagecheck-image">
+                    </span>
+                  </label>
+                </div>
+                <div class="col-6 col-sm-4">
+                  <label class="form-imagecheck mb-2">
+                    <input name="avatar" type="radio" value="frank.jpg" class="form-imagecheck-input" />
+                    <span class="form-imagecheck-figure">
+                      <img src="./static/avatars/frank.jpg" alt="Stylish workplace with computer at home" class="form-imagecheck-image">
+                    </span>
+                  </label>
+                </div>
+                <div class="col-6 col-sm-4">
+                  <label class="form-imagecheck mb-2">
+                    <input name="avatar" type="radio" value="moe.jpg" class="form-imagecheck-input"/>
+                    <span class="form-imagecheck-figure">
+                      <img src="./static/avatars/moe.jpg" alt="Pink desk in the home office" class="form-imagecheck-image">
+                    </span>
+                  </label>
+                </div>
+                <div class="col-6 col-sm-4">
+                  <label class="form-imagecheck mb-2">
+                    <input name="avatar" type="radio" value="poochie.jpg" class="form-imagecheck-input" />
+                    <span class="form-imagecheck-figure">
+                      <img src="./static/avatars/poochie.jpg" alt="Young woman sitting on the sofa and working on her laptop" class="form-imagecheck-image">
+                    </span>
+                  </label>
+                </div>
+                <div class="col-6 col-sm-4">
+                  <label class="form-imagecheck mb-2">
+                    <input name="avatar" type="radio" value="skinner.jpg" class="form-imagecheck-input" />
+                    <span class="form-imagecheck-figure">
+                      <img src="./static/avatars/skinner.jpg" alt="Coffee on a table with other items" class="form-imagecheck-image">
+                    </span>
+                  </label>
+                </div>
+              </div>
+            </div>
+
+            <div class="mb-2">
+              <label class="form-check">
+                <input type="checkbox" class="form-check-input" name="tos"/>
+                <span class="form-check-label">Agree to <a href="/TOS" tabindex="-1">Terms of Service.</a>.</span>
+              </label>
+            </div>
+
+          </div>
+        </div>
+        
+        
+        <div class="row align-items-center mt-2">
+          
+          <div class="col">
+            <a href="/login">Sign-in</a>
+          </div>
+
+          <div class="col">
+            <div class="btn-list justify-content-end">
+
+              <div class="d-none d-md-flex">
+                
+                <a href="?theme=dark" class="nav-link px-0 hide-theme-dark" title="Enable dark mode" data-bs-toggle="tooltip" data-bs-placement="bottom">
+                  <!-- Download SVG icon from http://tabler-icons.io/i/moon -->
+                  <svg xmlns="http://www.w3.org/2000/svg" class="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 d="M12 3c.132 0 .263 0 .393 0a7.5 7.5 0 0 0 7.92 12.446a9 9 0 1 1 -8.313 -12.454z" /></svg>
+                </a>
+                <a href="?theme=light" class="nav-link px-0 hide-theme-light" title="Enable light mode" data-bs-toggle="tooltip" data-bs-placement="bottom">
+                  <!-- Download SVG icon from http://tabler-icons.io/i/sun -->
+                  <svg xmlns="http://www.w3.org/2000/svg" class="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 d="M12 12m-4 0a4 4 0 1 0 8 0a4 4 0 1 0 -8 0" /><path d="M3 12h1m8 -9v1m8 8h1m-9 8v1m-6.4 -15.4l.7 .7m12.1 -.7l-.7 .7m0 11.4l.7 .7m-12.1 -.7l-.7 .7" /></svg>
+                </a>
+              </div>
+
+              <button type="submit" class="btn btn-primary">Install</button>
+              
+            </div>
+          </div>
+        </div>
+
+
+      </form>
+    </div>
+    <!-- Libs JS -->
+    <!-- Tabler Core -->
+    <script src="./js/tabler.min.js?1684106062" defer></script>
+    <script src="./js/demo.min.js?1684106062" defer></script>
+  </body>
+</html>

+ 145 - 0
views/pages/settings.ejs

@@ -0,0 +1,145 @@
+	<!doctype html>
+	<!--
+	* Tabler - Premium and Open Source dashboard template with responsive and high quality UI.
+	* @version 1.0.0-beta19
+	* @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)
+	-->
+	<html lang="en">
+	<head>
+		<meta charset="utf-8"/>
+		<meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover"/>
+		<meta http-equiv="X-UA-Compatible" content="ie=edge"/>
+		<title>Settings</title>
+		<!-- CSS files -->
+		<link href="./css/tabler.min.css?1684106062" rel="stylesheet"/>
+		<link href="./css/demo.min.css?1684106062" rel="stylesheet"/>
+		<style>
+		@import url('https://rsms.me/inter/inter.css');
+		:root {
+			--tblr-font-sans-serif: 'Inter Var', -apple-system, BlinkMacSystemFont, San Francisco, Segoe UI, Roboto, Helvetica Neue, sans-serif;
+		}
+		body {
+			font-feature-settings: "cv03", "cv04", "cv11";
+		}
+		</style>
+	</head>
+	<body >
+		<script src="./js/demo-theme.min.js?1684106062"></script>
+		<div class="page">
+		<!-- Navbar -->
+		<%- include('../partials/navbar.ejs') %>
+		<div class="page-wrapper">
+			<!-- Page header -->
+			<div class="page-header d-print-none">
+			<div class="container-xl">
+				<div class="row g-2 align-items-center">
+				<div class="col">
+					<h2 class="page-title">
+					Account Settings
+					</h2>
+				</div>
+				</div>
+			</div>
+			</div>
+			<!-- Page body -->
+			<div class="page-body">
+				<div class="container-xl">
+				  <div class="card">
+					<div class="row g-0">
+					  <div class="col-3 d-none d-md-block border-end">
+						<div class="card-body">
+						  <h4 class="subheader">Business settings</h4>
+						  <div class="list-group list-group-transparent">
+						  <a href="/account" class="list-group-item list-group-item-action d-flex align-items-center">Account</a>
+						  <a href="#" class="list-group-item list-group-item-action d-flex align-items-center">My Notifications</a>
+						  <a href="#" class="list-group-item list-group-item-action d-flex align-items-center">Connected Apps</a>
+						  <a href="/settings" class="list-group-item list-group-item-action d-flex align-items-center active">Settings</a>
+						  <a href="#" class="list-group-item list-group-item-action d-flex align-items-center">Billing & Invoices</a>
+						  </div>
+						  <h4 class="subheader mt-4">Experience</h4>
+						  <div class="list-group list-group-transparent">
+						  <a href="#" class="list-group-item list-group-item-action">Credits</a>
+						  </div>
+						</div>
+					  </div>
+					  <div class="col d-flex flex-column">
+					  
+						<div class="card-body">
+						  <h2 class="mb-2">Settings</h2>
+						  <p class="text-muted mb-4">Configure server below</p>
+						  
+						  <div class="row align-items-center">
+							<div class="col">
+							  <a href="./QuickConnect.bat" class="btn" download="QuickConnect.bat">
+								<!-- Download SVG icon from https://tabler-icons.io/i/brand-tabler-->
+								<svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-brand-windows" 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="M17.8 20l-12 -1.5c-1 -.1 -1.8 -.9 -1.8 -1.9v-9.2c0 -1 .8 -1.8 1.8 -1.9l12 -1.5c1.2 -.1 2.2 .8 2.2 1.9v12.1c0 1.2 -1.1 2.1 -2.2 1.9z"></path> <path d="M12 5l0 14"></path> <path d="M4 12l16 0"></path> </svg>
+								Windows QuickConnect
+							  </a>
+							</div>
+						  </div>
+						  
+						  <div class="row mt-4">
+							<div class="col-md">
+							  <div class="form-label">Full Name</div>
+							  <input type="text" class="form-control" value="" readonly="">
+							</div>
+							<div class="col-md">
+							  <div class="form-label">First Name</div>
+							  <input type="text" class="form-control" value="" readonly="">
+							</div>
+							<div class="col-md">
+							  <div class="form-label">Last Name</div>
+							  <input type="text" class="form-control" value="" readonly="">
+							</div>
+						  </div>
+						  <h3 class="card-title mt-4">Email</h3>
+						  <p class="card-subtitle">This contact will be shown to others publicly, so choose it carefully.</p>
+						  <div>
+							<div class="row g-2">
+							  <div class="col-auto">
+								<input type="text" class="form-control w-auto" value="" readonly="">
+							  </div>
+							  <div class="col-auto">
+								<a href="#" class="btn">Change</a>
+							  </div>
+							</div>
+						  </div>
+						  <h3 class="card-title mt-4">Password</h3>
+						  <p class="card-subtitle">You can set a permanent password if you don't want to use temporary login codes.</p>
+						  <div>
+							<a href="#" class="btn">
+							  Set new password
+							</a>
+						  </div>
+						  <h3 class="card-title mt-4">Public profile</h3>
+						  <p class="card-subtitle">Making your profile public means that anyone on the Dashkit network will be able to find
+						  you.</p>
+						  <div>
+							<label class="form-check form-switch form-switch-lg">
+							  <input class="form-check-input" type="checkbox" >
+							  <span class="form-check-label form-check-label-on">You're currently visible</span>
+							  <span class="form-check-label form-check-label-off">You're
+							  currently invisible</span>
+							</label>
+						  </div>
+						</div>
+	  
+					  </div>
+					  
+					</div>
+				  </div>
+				</div>
+			  </div>
+
+			<%- include('../partials/footer.ejs') %>
+		</div>
+		</div>
+		<!-- Libs JS -->
+		<!-- Tabler Core -->
+		<script src="./js/tabler.min.js?1684106062" defer></script>
+		<script src="./js/demo.min.js?1684106062" defer></script>
+	</body>
+	</html>

+ 81 - 0
views/pages/users.ejs

@@ -0,0 +1,81 @@
+<!doctype html>
+<!--
+* Tabler - Premium and Open Source dashboard template with responsive and high quality UI.
+* @version 1.0.0-beta19
+* @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)
+-->
+<html lang="en">
+  <head>
+    <meta charset="utf-8"/>
+    <meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover"/>
+    <meta http-equiv="X-UA-Compatible" content="ie=edge"/>
+    <title>Users</title>
+    <!-- CSS files -->
+    <link href="./css/tabler.min.css?1685973381" rel="stylesheet"/>
+    <link href="./css/demo.min.css?1685973381" rel="stylesheet"/>
+    <style>
+      @import url('https://rsms.me/inter/inter.css');
+      :root {
+      	--tblr-font-sans-serif: 'Inter Var', -apple-system, BlinkMacSystemFont, San Francisco, Segoe UI, Roboto, Helvetica Neue, sans-serif;
+      }
+      body {
+      	font-feature-settings: "cv03", "cv04", "cv11";
+      }
+    </style>
+  </head>
+  <body >
+    <script src="./js/demo-theme.min.js?1685973381"></script>
+    <div class="page">
+      <!-- Navbar -->
+      
+      <%- include('../partials/navbar.ejs') %>
+
+      <div class="page-wrapper">
+        <!-- Page header -->
+        <div class="page-header d-print-none">
+          <div class="container-xl">
+            <div class="row g-2 align-items-center">
+              <div class="col">
+                <h2 class="page-title">
+                  Users
+                </h2>
+              </div>
+            </div>
+          </div>
+        </div>
+        <!-- Page body -->
+        <div class="page-body">
+          <div class="container-xl">
+            <div class="row row-cards">
+              
+              
+              <div class="col-12">
+                <div class="card">
+                  <div class="table-responsive">
+                    <table class="table table-vcenter table-mobile-md card-table">
+                      <tbody>
+
+                        <%- user_list %>
+                      
+                      </tbody>
+                    </table>
+                  </div>
+                </div>
+              </div>
+
+            
+            </div>
+          </div>
+        </div>
+        <%- include('../partials/footer.ejs') %>
+      </div>
+    </div>
+    <!-- Libs JS -->
+    <!-- Tabler Core -->
+    <script src="./js/tabler.min.js?1685973381" defer></script>
+    <script src="./js/demo.min.js?1685973381" defer></script>
+  </body>
+</html>

+ 34 - 0
views/partials/footer.ejs

@@ -0,0 +1,34 @@
+<footer class="footer footer-transparent d-print-none">
+  <div class="container-xl">
+    <div class="row text-center align-items-center flex-row-reverse">
+      <div class="col-lg-auto ms-lg-auto">
+        <ul class="list-inline list-inline-dots mb-0">
+          <li class="list-inline-item"><a href="https://github.com/lllllllillllllillll/DweebUI/blob/main/README.md" target="_blank" class="link-secondary" rel="noopener">Documentation</a></li>
+          <li class="list-inline-item"><a href="https://github.com/lllllllillllllillll/DweebUI/blob/main/LICENSE" class="link-secondary">License</a></li>
+          <li class="list-inline-item"><a href="https://github.com/lllllllillllllillll/DweebUI/tree/main" target="_blank" class="link-secondary" rel="noopener">Source code</a></li>
+          <li class="list-inline-item">
+            <a href="https://github.com/lllllllillllllillll/DweebUI/tree/main" target="_blank" class="link-secondary" rel="noopener">
+              <!-- Download SVG icon from http://tabler-icons.io/i/heart -->
+              <svg xmlns="http://www.w3.org/2000/svg" class="icon text-pink icon-filled icon-inline" 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 d="M19.5 12.572l-7.5 7.428l-7.5 -7.428a5 5 0 1 1 7.5 -6.566a5 5 0 1 1 7.5 6.572" /></svg>
+              Sponsor
+            </a>
+          </li>
+        </ul>
+      </div>
+      <div class="col-12 col-lg-auto mt-3 mt-lg-0">
+        <ul class="list-inline list-inline-dots mb-0">
+          <li class="list-inline-item">
+            Copyright &copy; 2023
+            <a href="https://dweebui.com" class="link-secondary">DweebUI</a>.
+            All rights reserved.
+          </li>
+          <li class="list-inline-item">
+            <a href="#" class="link-secondary" rel="noopener">
+              v0.01
+            </a>
+          </li>
+        </ul>
+      </div>
+    </div>
+  </div>
+</footer>

+ 253 - 0
views/partials/navbar.ejs

@@ -0,0 +1,253 @@
+<header class="navbar navbar-expand-md d-print-none">
+
+  <script>
+
+      var themeStorageKey = "tablerTheme";
+      var defaultTheme = "light";
+      var selectedTheme;
+
+    (function (factory) {
+      typeof define === 'function' && define.amd ? define(factory) :
+        factory();
+    })((function () {
+      'use strict';
+
+      var params = new Proxy(new URLSearchParams(window.location.search), {
+        get: function get(searchParams, prop) {
+          return searchParams.get(prop);
+        }
+      });
+      if (!!params.theme) {
+        localStorage.setItem(themeStorageKey, params.theme);
+        selectedTheme = params.theme;
+      } else {
+        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');
+      }
+    }
+
+  </script>
+
+  <div class="container-xl">
+    <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbar-menu"
+      aria-controls="navbar-menu" aria-expanded="false" aria-label="Toggle navigation">
+      <span class="navbar-toggler-icon"></span>
+    </button>
+    <h1 class="navbar-brand navbar-brand-autodark d-none-navbar-horizontal pe-0 pe-md-3">
+      <a href="#">
+        <img src="./static/logo.svg" width="110" height="32" alt="Tabler" class="navbar-brand-image">
+      </a>
+    </h1>
+    <div class="navbar-nav flex-row order-md-last">
+      <div class="nav-item d-none d-md-flex me-3">
+        <div class="btn-list">
+          <a href="#" class="btn text-green">
+            <!-- Download SVG icon from http://tabler-icons.io/i/lock -->
+            <svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-lock" 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 13a2 2 0 0 1 2 -2h10a2 2 0 0 1 2 2v6a2 2 0 0 1 -2 2h-10a2 2 0 0 1 -2 -2v-6z"></path> <path d="M11 16a1 1 0 1 0 2 0a1 1 0 0 0 -2 0"></path> <path d="M8 11v-4a4 4 0 1 1 8 0v4"></path> </svg>
+            VPN
+          </a>
+          <a href="#" class="btn text-green">
+            <!-- Download SVG icon from http://tabler-icons.io/i/shield -->
+            <svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-shield" 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 3a12 12 0 0 0 8.5 3a12 12 0 0 1 -8.5 15a12 12 0 0 1 -8.5 -15a12 12 0 0 0 8.5 -3"></path> </svg>
+            Firewall
+          </a>
+          <a href="#" class="btn text-green">
+            <!-- Download SVG icon from http://tabler-icons.io/i/shield -->
+            <svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-screen-share" 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="M21 12v3a1 1 0 0 1 -1 1h-16a1 1 0 0 1 -1 -1v-10a1 1 0 0 1 1 -1h9"></path> <path d="M7 20l10 0"></path> <path d="M9 16l0 4"></path> <path d="M15 16l0 4"></path> <path d="M17 4h4v4"></path> <path d="M16 9l5 -5"></path> </svg>
+            VNC
+          </a>
+        </div>
+      </div>
+      <div class="d-none d-md-flex">
+
+        <button class="nav-link px-0 hide-theme-dark" title="Enable dark mode" data-bs-toggle="tooltip"
+          data-bs-placement="bottom" value="dark-theme" onclick="toggleTheme(this)">
+          <!-- Download SVG icon from http://tabler-icons.io/i/moon -->
+          <svg xmlns="http://www.w3.org/2000/svg" class="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 d="M12 3c.132 0 .263 0 .393 0a7.5 7.5 0 0 0 7.92 12.446a9 9 0 1 1 -8.313 -12.454z" /> </svg>
+        </button>
+
+        <button class="nav-link px-0 hide-theme-light" title="Enable light mode" data-bs-toggle="tooltip"
+          data-bs-placement="bottom" value="light-theme" onclick="toggleTheme(this)">
+          <!-- Download SVG icon from http://tabler-icons.io/i/sun -->
+          <svg xmlns="http://www.w3.org/2000/svg" class="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 d="M12 12m-4 0a4 4 0 1 0 8 0a4 4 0 1 0 -8 0" /> <path d="M3 12h1m8 -9v1m8 8h1m-9 8v1m-6.4 -15.4l.7 .7m12.1 -.7l-.7 .7m0 11.4l.7 .7m-12.1 -.7l-.7 .7" /> </svg>
+        </button>
+
+        <div class="nav-item dropdown d-none d-md-flex me-3">
+          <a href="#" class="nav-link px-0" data-bs-toggle="dropdown" tabindex="-1" aria-label="Show notifications">
+            <!-- Download SVG icon from http://tabler-icons.io/i/bell -->
+            <svg xmlns="http://www.w3.org/2000/svg" class="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 d="M10 5a2 2 0 1 1 4 0a7 7 0 0 1 4 6v3a4 4 0 0 0 2 3h-16a4 4 0 0 0 2 -3v-3a7 7 0 0 1 4 -6" /> <path d="M9 17v1a3 3 0 0 0 6 0v-1" /> </svg>
+            <!-- <span class="badge bg-red"></span> -->
+          </a>
+          <div class="dropdown-menu dropdown-menu-arrow dropdown-menu-end dropdown-menu-card">
+            <div class="card">
+              <div class="card-header">
+                <h3 class="card-title">Alerts</h3>
+              </div>
+              <div class="list-group list-group-flush list-group-hoverable">
+                <div class="list-group-item">
+                  <div class="row align-items-center">
+                    <div class="col-auto"><span class="status-dot status-dot-animated bg-green d-block"></span></div>
+                    <div class="col text-truncate">
+                      <a href="#" class="text-body d-block">App Installed</a>
+                      <div class="d-block text-muted text-truncate mt-n1">
+                        Just an example of an app install notification.
+                      </div>
+                    </div>
+                    <div class="col-auto">
+                      <a href="#" class="list-group-item-actions">
+                        <!-- Download SVG icon from http://tabler-icons.io/i/star -->
+                        <svg xmlns="http://www.w3.org/2000/svg" class="icon text-muted" 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 d="M12 17.75l-6.172 3.245l1.179 -6.873l-5 -4.867l6.9 -1l3.086 -6.253l3.086 6.253l6.9 1l-5 4.867l1.179 6.873z" /> </svg>
+                      </a>
+                    </div>
+                  </div>
+                </div>
+
+                <div class="list-group-item">
+                  <div class="row align-items-center">
+                    <div class="col-auto"><span class="status-dot status-dot-animated bg-red d-block"></span></div>
+                    <div class="col text-truncate">
+                      <a href="#" class="text-body d-block">App Uninstalled</a>
+                      <div class="d-block text-muted text-truncate mt-n1">
+                        Just an example of an app uninstall notification.
+                      </div>
+                    </div>
+                    <div class="col-auto">
+                      <a href="#" class="list-group-item-actions">
+                        <!-- Download SVG icon from http://tabler-icons.io/i/star -->
+                        <svg xmlns="http://www.w3.org/2000/svg" class="icon text-muted" 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 d="M12 17.75l-6.172 3.245l1.179 -6.873l-5 -4.867l6.9 -1l3.086 -6.253l3.086 6.253l6.9 1l-5 4.867l1.179 6.873z" /> </svg>
+                      </a>
+                    </div>
+                  </div>
+                </div>
+              </div>
+            </div>
+          </div>
+        </div>
+      </div>
+      <div class="nav-item dropdown">
+        <a href="#" class="nav-link d-flex lh-1 text-reset p-0" data-bs-toggle="dropdown" aria-label="Open user menu">
+          <span class="avatar avatar-sm"><%- avatar %></span>
+          <div class="d-none d-xl-block ps-2">
+            <div>
+              <%= name %>
+            </div>
+            <div class="mt-1 small text-muted">
+              <%= role %>
+            </div>
+          </div>
+        </a>
+        <div class="dropdown-menu dropdown-menu-end dropdown-menu-arrow">
+          <a href="#" class="dropdown-item">Status</a>
+          <a href="/account" class="dropdown-item">Account</a>
+          <a href="#" class="dropdown-item">Feedback</a>
+          <div class="dropdown-divider"></div>
+          <a href="/settings" class="dropdown-item">Settings</a>
+          <a href="/logout" class="dropdown-item">Logout</a>
+        </div>
+      </div>
+    </div>
+  </div>
+</header>
+<header class="navbar-expand-md">
+  <div class="collapse navbar-collapse" id="navbar-menu">
+    <div class="navbar">
+      <div class="container-xl">
+        <ul class="navbar-nav">
+          <li class="nav-item">
+            <a class="nav-link" href="./">
+              <span
+                class="nav-link-icon d-md-none d-lg-inline-block"><!-- Download SVG icon from https://tabler-icons.io/i/dashboard -->
+                <svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-dashboard" 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 13m-2 0a2 2 0 1 0 4 0a2 2 0 1 0 -4 0"></path> <path d="M13.45 11.55l2.05 -2.05"></path> <path d="M6.4 20a9 9 0 1 1 11.2 0z"></path> </svg>
+              </span>
+              <span class="nav-link-title">
+                Dashboard
+              </span>
+            </a>
+          </li>
+
+          <li class="nav-item">
+            <a class="nav-link" href="/apps">
+              <span
+                class="nav-link-icon d-md-none d-lg-inline-block"><!-- Download SVG icon from https://tabler-icons.io/i/apps -->
+                <svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-apps" 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="M4 4m0 1a1 1 0 0 1 1 -1h4a1 1 0 0 1 1 1v4a1 1 0 0 1 -1 1h-4a1 1 0 0 1 -1 -1z"></path> <path d="M4 14m0 1a1 1 0 0 1 1 -1h4a1 1 0 0 1 1 1v4a1 1 0 0 1 -1 1h-4a1 1 0 0 1 -1 -1z"></path> <path d="M14 14m0 1a1 1 0 0 1 1 -1h4a1 1 0 0 1 1 1v4a1 1 0 0 1 -1 1h-4a1 1 0 0 1 -1 -1z"></path> <path d="M14 7l6 0"></path> <path d="M17 4l0 6"></path> </svg>
+              </span>
+              <span class="nav-link-title">
+                Apps
+              </span>
+            </a>
+          </li>
+
+          <li class="nav-item">
+            <a class="nav-link" href="/users">
+              <span
+                class="nav-link-icon d-md-none d-lg-inline-block"><!-- Download SVG icon from https://tabler-icons.io/i/user -->
+                <svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-user" 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="M8 7a4 4 0 1 0 8 0a4 4 0 0 0 -8 0"></path> <path d="M6 21v-2a4 4 0 0 1 4 -4h4a4 4 0 0 1 4 4v2"></path> </svg>
+              </span>
+              <span class="nav-link-title">
+                Users
+              </span>
+            </a>
+          </li>
+          <li class="nav-item dropdown">
+            <a class="nav-link dropdown-toggle" href="#navbar-help" data-bs-toggle="dropdown"
+              data-bs-auto-close="outside" role="button" aria-expanded="false">
+              <span
+                class="nav-link-icon d-md-none d-lg-inline-block"><!-- Download SVG icon from http://tabler-icons.io/i/lifebuoy -->
+                <svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-tool" 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="M7 10h3v-3l-3.5 -3.5a6 6 0 0 1 8 8l6 6a2 2 0 0 1 -3 3l-6 -6a6 6 0 0 1 -8 -8l3.5 3.5"></path> </svg>
+              </span>
+              <span class="nav-link-title">
+                Tools
+              </span>
+            </a>
+            <div class="dropdown-menu">
+              <a class="dropdown-item" href="#" target="_blank" rel="noopener">
+                VPN
+              </a>
+              <a class="dropdown-item" href="#">
+                Firewall
+              </a>
+              <a class="dropdown-item" href="#" target="_blank" rel="noopener">
+                Backups
+              </a>
+              <a class="dropdown-item text-pink" href="#" target="_blank"
+                rel="noopener">
+                <!-- Download SVG icon from http://tabler-icons.io/i/heart -->
+                <svg xmlns="http://www.w3.org/2000/svg" class="icon icon-inline me-1" 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 d="M19.5 12.572l-7.5 7.428l-7.5 -7.428a5 5 0 1 1 7.5 -6.566a5 5 0 1 1 7.5 6.572" /> </svg>
+                Sponsor project!
+              </a>
+            </div>
+          </li>
+        </ul>
+        <div class="my-2 my-md-0 flex-grow-1 flex-md-grow-0 order-first order-md-last">
+          <form action="./" method="get" autocomplete="off" novalidate>
+            <div class="input-icon">
+              <span class="input-icon-addon">
+                <!-- Download SVG icon from http://tabler-icons.io/i/search -->
+                <svg xmlns="http://www.w3.org/2000/svg" class="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 d="M10 10m-7 0a7 7 0 1 0 14 0a7 7 0 1 0 -14 0" /> <path d="M21 21l-6 -6" /> </svg>
+              </span>
+              <input type="text" value="" class="form-control" placeholder="Search…" aria-label="Search in website">
+            </div>
+          </form>
+        </div>
+      </div>
+    </div>
+  </div>
+</header>

+ 0 - 0
views/partials/site_list.ejs


+ 12 - 0
views/partials/users_list.ejs

@@ -0,0 +1,12 @@
+<tr>
+  <td><input class="form-check-input" type="checkbox"></td>
+  <td>1</td>
+  <td><span class="avatar me-2" style="background-image: url(./static/avatars/burns.jpg)"></span></td>
+  <td>John Doe</td>
+  <td>JDoe</td>
+  <td>JDoe@gmail.com</td>
+  <td>685468468465138</td>
+  <td>Admin</td>
+  <td><span class="badge badge-outline text-green">Active</span></td>
+  <td><a href="#" class="btn">Edit</a></td>
+</tr>

Some files were not shown because too many files changed in this diff