[
  {
    "path": ".gitignore",
    "content": "downloads/\n.gradle/\ngradle/\nlog/\nout/\njre/\nbuild/\n.idea/workspace.xml\nconfig.json\n*.exe"
  },
  {
    "path": ".idea/artifacts/webapp_hardware_bridge_jar.xml",
    "content": "<component name=\"ArtifactManager\">\n  <artifact name=\"webapp-hardware-bridge:jar\">\n    <output-path>$PROJECT_DIR$/out/artifacts/webapp_hardware_bridge_jar</output-path>\n    <root id=\"root\">\n      <element id=\"archive\" name=\"webapp-hardware-bridge.jar\">\n        <element id=\"directory\" name=\"META-INF\">\n          <element id=\"file-copy\" path=\"$PROJECT_DIR$/src/main/resources/META-INF/MANIFEST.MF\" />\n        </element>\n        <element id=\"directory\" name=\"web\">\n          <element id=\"dir-copy\" path=\"$PROJECT_DIR$/src/main/resources/web\" />\n        </element>\n        <element id=\"module-output\" name=\"webapp-hardware-bridge.main\" />\n        <element id=\"file-copy\" path=\"$PROJECT_DIR$/src/main/resources/icon.png\" />\n        <element id=\"file-copy\" path=\"$PROJECT_DIR$/src/main/resources/log4j2.xml\" />\n      </element>\n      <element id=\"library\" level=\"project\" name=\"Gradle: com.fasterxml.jackson.core:jackson-annotations:2.17.2\" />\n      <element id=\"library\" level=\"project\" name=\"Gradle: com.fasterxml.jackson.core:jackson-core:2.17.2\" />\n      <element id=\"library\" level=\"project\" name=\"Gradle: com.fasterxml.jackson.core:jackson-databind:2.17.2\" />\n      <element id=\"library\" level=\"project\" name=\"Gradle: com.fazecast:jSerialComm:2.11.0\" />\n      <element id=\"library\" level=\"project\" name=\"Gradle: commons-codec:commons-codec:1.17.1\" />\n      <element id=\"library\" level=\"project\" name=\"Gradle: commons-io:commons-io:2.16.1\" />\n      <element id=\"library\" level=\"project\" name=\"Gradle: commons-logging:commons-logging:1.2\" />\n      <element id=\"library\" level=\"project\" name=\"Gradle: io.github.hakky54:sslcontext-kickstart-for-jetty:8.3.6\" />\n      <element id=\"library\" level=\"project\" name=\"Gradle: io.github.hakky54:sslcontext-kickstart-for-pem:8.3.6\" />\n      <element id=\"library\" level=\"project\" name=\"Gradle: io.github.hakky54:sslcontext-kickstart:8.3.6\" />\n      <element id=\"library\" level=\"project\" name=\"Gradle: io.javalin.community.ssl:ssl-plugin:6.2.0\" />\n      <element id=\"library\" level=\"project\" name=\"Gradle: io.javalin:javalin:6.2.0\" />\n      <element id=\"library\" level=\"project\" name=\"Gradle: junit:junit:4.13.2\" />\n      <element id=\"library\" level=\"project\" name=\"Gradle: org.apache.httpcomponents.core5:httpcore5:5.2.5\" />\n      <element id=\"library\" level=\"project\" name=\"Gradle: org.apache.logging.log4j:log4j-api:2.23.1\" />\n      <element id=\"library\" level=\"project\" name=\"Gradle: org.apache.logging.log4j:log4j-core:2.23.1\" />\n      <element id=\"library\" level=\"project\" name=\"Gradle: org.apache.logging.log4j:log4j-slf4j2-impl:2.23.1\" />\n      <element id=\"library\" level=\"project\" name=\"Gradle: org.apache.pdfbox:fontbox:2.0.31\" />\n      <element id=\"library\" level=\"project\" name=\"Gradle: org.apache.pdfbox:pdfbox:2.0.31\" />\n      <element id=\"library\" level=\"project\" name=\"Gradle: org.bouncycastle:bcpkix-jdk18on:1.78.1\" />\n      <element id=\"library\" level=\"project\" name=\"Gradle: org.bouncycastle:bcprov-jdk18on:1.78.1\" />\n      <element id=\"library\" level=\"project\" name=\"Gradle: org.bouncycastle:bcutil-jdk18on:1.78.1\" />\n      <element id=\"library\" level=\"project\" name=\"Gradle: org.conscrypt:conscrypt-openjdk-uber:2.5.2\" />\n      <element id=\"library\" level=\"project\" name=\"Gradle: org.eclipse.jetty.http2:http2-common:11.0.21\" />\n      <element id=\"library\" level=\"project\" name=\"Gradle: org.eclipse.jetty.http2:http2-hpack:11.0.21\" />\n      <element id=\"library\" level=\"project\" name=\"Gradle: org.eclipse.jetty.http2:http2-server:11.0.21\" />\n      <element id=\"library\" level=\"project\" name=\"Gradle: org.eclipse.jetty.toolchain:jetty-jakarta-servlet-api:5.0.2\" />\n      <element id=\"library\" level=\"project\" name=\"Gradle: org.eclipse.jetty.websocket:websocket-core-common:11.0.21\" />\n      <element id=\"library\" level=\"project\" name=\"Gradle: org.eclipse.jetty.websocket:websocket-core-server:11.0.21\" />\n      <element id=\"library\" level=\"project\" name=\"Gradle: org.eclipse.jetty.websocket:websocket-jetty-api:11.0.21\" />\n      <element id=\"library\" level=\"project\" name=\"Gradle: org.eclipse.jetty.websocket:websocket-jetty-common:11.0.21\" />\n      <element id=\"library\" level=\"project\" name=\"Gradle: org.eclipse.jetty.websocket:websocket-jetty-server:11.0.21\" />\n      <element id=\"library\" level=\"project\" name=\"Gradle: org.eclipse.jetty.websocket:websocket-servlet:11.0.21\" />\n      <element id=\"library\" level=\"project\" name=\"Gradle: org.eclipse.jetty:jetty-alpn-conscrypt-server:11.0.21\" />\n      <element id=\"library\" level=\"project\" name=\"Gradle: org.eclipse.jetty:jetty-alpn-java-server:11.0.21\" />\n      <element id=\"library\" level=\"project\" name=\"Gradle: org.eclipse.jetty:jetty-alpn-server:11.0.21\" />\n      <element id=\"library\" level=\"project\" name=\"Gradle: org.eclipse.jetty:jetty-http:11.0.21\" />\n      <element id=\"library\" level=\"project\" name=\"Gradle: org.eclipse.jetty:jetty-io:11.0.21\" />\n      <element id=\"library\" level=\"project\" name=\"Gradle: org.eclipse.jetty:jetty-security:11.0.21\" />\n      <element id=\"library\" level=\"project\" name=\"Gradle: org.eclipse.jetty:jetty-server:11.0.21\" />\n      <element id=\"library\" level=\"project\" name=\"Gradle: org.eclipse.jetty:jetty-servlet:11.0.21\" />\n      <element id=\"library\" level=\"project\" name=\"Gradle: org.eclipse.jetty:jetty-util:11.0.21\" />\n      <element id=\"library\" level=\"project\" name=\"Gradle: org.eclipse.jetty:jetty-webapp:11.0.21\" />\n      <element id=\"library\" level=\"project\" name=\"Gradle: org.eclipse.jetty:jetty-xml:11.0.21\" />\n      <element id=\"library\" level=\"project\" name=\"Gradle: org.hamcrest:hamcrest-core:1.3\" />\n      <element id=\"library\" level=\"project\" name=\"Gradle: org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.9.24\" />\n      <element id=\"library\" level=\"project\" name=\"Gradle: org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.9.24\" />\n      <element id=\"library\" level=\"project\" name=\"Gradle: org.jetbrains.kotlin:kotlin-stdlib:1.9.24\" />\n      <element id=\"library\" level=\"project\" name=\"Gradle: org.jetbrains:annotations:13.0\" />\n      <element id=\"library\" level=\"project\" name=\"Gradle: org.projectlombok:lombok:1.18.34\" />\n      <element id=\"library\" level=\"project\" name=\"Gradle: org.slf4j:slf4j-api:2.0.13\" />\n    </root>\n  </artifact>\n</component>"
  },
  {
    "path": ".idea/compiler.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project version=\"4\">\n  <component name=\"CompilerConfiguration\">\n    <annotationProcessing>\n      <profile default=\"true\" name=\"Default\" enabled=\"true\" />\n      <profile name=\"Gradle Imported\" enabled=\"true\">\n        <outputRelativeToContentRoot value=\"true\" />\n        <processorPath useClasspath=\"false\">\n          <entry name=\"$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.projectlombok/lombok/1.18.34/ec547ef414ab1d2c040118fb9c1c265ada63af14/lombok-1.18.34.jar\" />\n        </processorPath>\n        <module name=\"webapp-hardware-bridge.test\" />\n        <module name=\"webapp-hardware-bridge.main\" />\n      </profile>\n    </annotationProcessing>\n    <bytecodeTargetLevel target=\"21\" />\n  </component>\n</project>"
  },
  {
    "path": ".idea/gradle.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project version=\"4\">\n  <component name=\"GradleMigrationSettings\" migrationVersion=\"1\" />\n  <component name=\"GradleSettings\">\n    <option name=\"linkedExternalProjectsSettings\">\n      <GradleProjectSettings>\n        <option name=\"externalProjectPath\" value=\"$PROJECT_DIR$\" />\n        <option name=\"modules\">\n          <set>\n            <option value=\"$PROJECT_DIR$\" />\n          </set>\n        </option>\n      </GradleProjectSettings>\n    </option>\n  </component>\n</project>"
  },
  {
    "path": ".idea/inspectionProfiles/Project_Default.xml",
    "content": "<component name=\"InspectionProjectProfileManager\">\n  <profile version=\"1.0\">\n    <option name=\"myName\" value=\"Project Default\" />\n    <inspection_tool class=\"HtmlUnknownAttribute\" enabled=\"true\" level=\"WARNING\" enabled_by_default=\"true\">\n      <option name=\"myValues\">\n        <value>\n          <list size=\"7\">\n            <item index=\"0\" class=\"java.lang.String\" itemvalue=\"@vue:mounted\" />\n            <item index=\"1\" class=\"java.lang.String\" itemvalue=\"v-scope\" />\n            <item index=\"2\" class=\"java.lang.String\" itemvalue=\"@click\" />\n            <item index=\"3\" class=\"java.lang.String\" itemvalue=\"v-if\" />\n            <item index=\"4\" class=\"java.lang.String\" itemvalue=\"v-for\" />\n            <item index=\"5\" class=\"java.lang.String\" itemvalue=\"v-model\" />\n            <item index=\"6\" class=\"java.lang.String\" itemvalue=\":value\" />\n          </list>\n        </value>\n      </option>\n      <option name=\"myCustomValuesEnabled\" value=\"true\" />\n    </inspection_tool>\n  </profile>\n</component>"
  },
  {
    "path": ".idea/jarRepositories.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project version=\"4\">\n  <component name=\"RemoteRepositoriesConfiguration\">\n    <remote-repository>\n      <option name=\"id\" value=\"central\" />\n      <option name=\"name\" value=\"Maven Central repository\" />\n      <option name=\"url\" value=\"https://repo1.maven.org/maven2\" />\n    </remote-repository>\n    <remote-repository>\n      <option name=\"id\" value=\"jboss.community\" />\n      <option name=\"name\" value=\"JBoss Community repository\" />\n      <option name=\"url\" value=\"https://repository.jboss.org/nexus/content/repositories/public/\" />\n    </remote-repository>\n    <remote-repository>\n      <option name=\"id\" value=\"MavenRepo\" />\n      <option name=\"name\" value=\"MavenRepo\" />\n      <option name=\"url\" value=\"https://repo.maven.apache.org/maven2/\" />\n    </remote-repository>\n  </component>\n</project>"
  },
  {
    "path": ".idea/misc.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project version=\"4\">\n  <component name=\"ExternalStorageConfigurationManager\" enabled=\"true\" />\n  <component name=\"FrameworkDetectionExcludesConfiguration\">\n    <file type=\"web\" url=\"file://$PROJECT_DIR$\" />\n  </component>\n  <component name=\"ProjectRootManager\" version=\"2\" languageLevel=\"JDK_21\" default=\"true\" project-jdk-name=\"temurin-21\" project-jdk-type=\"JavaSDK\">\n    <output url=\"file://$PROJECT_DIR$/out\" />\n  </component>\n</project>"
  },
  {
    "path": ".idea/modules/webapp-hardware-bridge.iml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<module version=\"4\">\n  <component name=\"ExternalSystem\" externalSystem=\"GRADLE\" externalSystemModuleGroup=\"webapp-hardware-bridge\" externalSystemModuleVersion=\"1.0-SNAPSHOT\" linkedProjectId=\"webapp-hardware-bridge\" linkedProjectPath=\"$MODULE_DIR$/../..\" rootProjectPath=\"$MODULE_DIR$/../..\" />\n</module>"
  },
  {
    "path": ".idea/modules/webapp-hardware-bridge.main.iml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<module version=\"4\">\n  <component name=\"AdditionalModuleElements\">\n    <content url=\"file://$MODULE_DIR$/../../build/generated/sources/annotationProcessor/java/main\">\n      <sourceFolder url=\"file://$MODULE_DIR$/../../build/generated/sources/annotationProcessor/java/main\" isTestSource=\"false\" generated=\"true\" />\n    </content>\n  </component>\n</module>"
  },
  {
    "path": ".idea/modules.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project version=\"4\">\n  <component name=\"ProjectModuleManager\">\n    <modules>\n      <module fileurl=\"file://$PROJECT_DIR$/.idea/modules/webapp-hardware-bridge.main.iml\" filepath=\"$PROJECT_DIR$/.idea/modules/webapp-hardware-bridge.main.iml\" />\n    </modules>\n  </component>\n</project>"
  },
  {
    "path": ".idea/vcs.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project version=\"4\">\n  <component name=\"VcsDirectoryMappings\">\n    <mapping directory=\"\" vcs=\"Git\" />\n  </component>\n</project>"
  },
  {
    "path": "ADVANCED.md",
    "content": "# Advanced Configurations\n\n## Authentication\n\n### Enable Authentication\n\nAuthentication is disabled by default, that any website can connect to your bridge and access local resources.\n\nTo prevent unauthorized access, set `server.authentication.enabled` to `true` and `server.authentication.token` to the value you want.\n\nWhen enabled, connections without correct token will be rejected.\n\n#### WebSocket\n\nPoint url to `ws://127.0.0.1:12212/serial/WEIGH?token=1234567890` if your `token` is \"1234567890\"\n\n#### Web UI\n\nEnter `token` as `Password` when prompted and leave `Username` empty.\n\n#### Web API\n\nUse header `Authorization: Bearer 1234567890`\n\n## HTTPS/WSS Support\n\nSome browser does not allow webpage with secure context (i.e. HTTPS)\nto connect non-secured WebSocket server.\n\nEither of below methods required to workaround this:\n\n### Allow non-secure WebSocket server from HTTPS website (Not recommended)\n\nWarning: These setting can open a security hole, use on development environment only\n\nFirefox: Go to `about:config`, set `network.websocket.allowInsecureFromHTTPS` to `true`\n\nChrome: Add `--allow-running-insecure-content` to launching argument\n\n### Enable WebSocket Secure (WSS) with self-signed certificate\n\nWHB have built-in ability to generate self-signed certificate.\n\nSet `server.tls.enabled` to true, `server.tls.selfSigned` to true in `setting.json` and relaunch the application.\n\nUpon start, application should automatically generate a self-signed certificate\n\nand start listening on `wss://127.0.0.1:12212` with secured connection.\n\nOn first setup, you must go to `https://127.0.0.1:12212` to accept that self-signed certificate.\n\nAfter change, point url to `wss://127.0.0.1:12212` instead of `ws://127.0.0.1:12212`\n\n### Enable WebSocket Secure (WSS) with real, user-provided certificate\n\nCopy your certificate and private key to `tls` directory.\n\nSet `server.tls.enabled` to true, `server.tls.selfSigned` to false, `server.tls.cert` and `server.tls.key` in `setting.json` and relaunch the application.\n\nUpon start, application should pickup your certificate and start listening on `wss://127.0.0.1:12212` with secured connection.\n\nAfter change, point url to `wss://127.0.0.1:12212` instead of `ws://127.0.0.1:12212`\n\n#### How to obtain real TLS Certificate?\n\nWHB is usually listening on 127.0.0.1. It's normally impossible to obtain valid certificates signed for that.\n\nA common workaround is to point your (sub-)domain A Record to 127.0.0.1, and obtain certificate with that\n\ne.g. Point `local.tiger-workshop.com` to `127.0.0.1`, then point your WebApp to `wss://local.tiger-workshop.com:12212`\n\n### Why we can't provide certificate for you\n\nShipping private key with application is considered kind of \"key-compromise\".\n\nThe certificate will be revoked by CA. It's very easily detected especially for open-source projects."
  },
  {
    "path": "BUILD.md",
    "content": "# Build Instructions\n\n## Build from source\n\n- JDK 21, [Eclipse Temurin 21](https://adoptium.net/en-GB/temurin/releases/) Recommanded\n- Intelij IDEA (Both Community and Ultimate works)\n\n1. An artifact config file is included in git repository.\n\n2. Use Intelij IDEA to \"Build artifact\" to yield `out\\artifacts\\webapp_hardware_bridge_jar`.\n\n## Windows Installer bundled with JRE\n\n- JRE 21, [Eclipse Temurin 21](https://adoptium.net/en-GB/temurin/releases/) Recommanded\n- [Nullsoft Scriptable Install System](https://nsis.sourceforge.io/) \n\n1. Follow \"Build from source\" instructions to yield `out\\artifacts\\webapp_hardware_bridge_jar`\n\n2. Copy JRE 21 into `./jre` directory \n\n3. Run `install.nsi` with NSIS to yield `whb.exe`\n\n## How to run\n\n1. Start application\n   - GUI: `javaw -cp webapp-hardware-bridge.jar tigerworkshop.webapphardwarebridge.GUI`\n   - Server: `java -cp webapp-hardware-bridge.jar tigerworkshop.webapphardwarebridge.Server`"
  },
  {
    "path": "CHANGELOG.md",
    "content": "# Changelogs\n\n## From 0.x to 1.0.0\n\n- 1.0 is a major rewrite, while maintain compatibility with existing WebApps\n- Settings will lost after upgrade, please reconfigure via \"Web UI\" or \"Web API\"\n\n### Feature changes\n- Added per printer settings (Auto-rotate, DPI...)\n- Added per serial port settings (Baud-rate, data bits, stop bit, parity bit, charset. binary mode, multi-bytes mode)\n- Added \"Web UI\" for configuration, replacing \"Configurator\"\n- Added \"Web API\", a HTTP API for WebApp to configure directly without using \"Web UI\" or \"Configurator\"\n- Config file renamed from \"setting.json\" to \"config.json\", which is in different format\n\n### Internal changes\n- Removed \"Configurator\"\n- Removed undocumented feature \"Cloud Proxy\"\n- Removed usage of JavaFX\n- Rewrite config code\n- Implementation of WebSocket changed from \"Java-WebSocket\" to \"Javalin\"\n- Internal dataflow optimization\n- Simplified code by using \"Lombok\"\n- Upgrade Java version from 8 to 21\n- Many dependencies upgrades and security fixes\n"
  },
  {
    "path": "CONFIGURATION.md",
    "content": "# Configurations\n\n## Web/WebSocket Server\n\n### Bind\n\n- (Default) `127.0.0.1` \n- `127.0.0.1` for normal usage\n- `0.0.0.0` for open to internet access (Not recommended)\n- Other interface address accepted\n\n### Address\n\n- (Default) `127.0.0.1` \n- `127.0.0.1` unless you need to allow internal/internet access\n- IP address / Domain name accepted\n\n### Port\n\n- (Default) `12212`\n- Range: `1024` - `65535`\n\n### Enable authentication\n\n[See Authentication for more detail](ADVANCED.md#authentication)\n\n- (Default) `false`\n\n#### Token\n\n- (Default) Blank\n- Accept any text value\n\n### Enable TLS\n\n[See HTTPS/WSS Support for more detail](ADVANCED.md#httpswss-support)\n\n- (Default) `false`\n\n#### Self Signed\n\n- (Default) `true`\n\n#### Cert\n\n- (Default) `tls/default-cert.pem`\n\n#### Key\n\n- (Default) `tls/default-cert.pem`\n\n#### CA Bundle\n\n- (Default) Empty\n\n## Downloader\n\n### Path\n\nDirectory to save downloaded files\n\n- (Default) `download`\n\n### Timeout\n\nSeconds before download timeout\n\n- (Default) `30`\n\n### Ignore TLS certificate error\n\nIgnore any TLS certificate error (self-signed, expired...) when downloading files\n\nNot recommended for normal usage, useful in some corporate networks where firewall doing MITM\n\n- (Default) `false`\n\n## Printers\n\n### Enabled\n\n- (Default) `true`\n\n### Auto add unknown type\n\nAuto add type mapping to configuration when document received with unknown type\n\n- (Default) `false`\n\n### Fallback to default printer if none matched\n\nFallback to default printer if none of the printers matched in configuration\n\n- (Default) `false`\n\n#### Type\n\nMapping key between WebApp and physically printer name in operating system\n\n#### Printer Name\n\nPrinter name in operating system\n\n#### Auto Rotate\n\nAuto rotate portrait / landscape\n\n- (Default) `false`\n\n#### Reset imageable area\n\nRequired by some printer to handle size correctly\n\n- (Default) `true`\n\n#### Force DPI\n\nRequired by some printer/operating system to handle DPI correctly\n\n- (Default) `0` \n-  `0` - Auto detect\n- Common values: `213`, `300`\n\n## Serials\n\n### Enabled\n\n- (Default) `true`\n\n#### Type\n\nMapping key between WebApp and physically serial port name in operating system\n\n#### Serial Port\n\nSerial port name in operating system\n\n#### Baud Rate\n\nAuto-detect when leave blank\n\n- (Default) Blank\n\n#### Data Bits\n\nAuto-detect when leave blank\n\n- (Default) Blank\n\n#### Stop Bits\n\nAuto-detect when leave blank\n\n- (Default) Blank\n\n#### Parity\n\nAuto-detect when leave blank\n\n- (Default) Blank\n\n#### Read Charset\n\nCharset to decode data received from serial port\n\nChanging this may break compatibility with WebApp integrated with pre-1.0 version\n\n- (Default) `UTF-8`\n- `UTF-8` - Data will be sent to WebSocket as UTF-8 `string`\n- `US-ASCII` - Data will be sent to WebSocket as ASCII `string`\n- `BINARY` - Data will be sent to WebSocket as `blob`\n\n#### Read Multi-bytes\n\nRead all available bytes in serial port and send them to WebSocket at once\n\nChanging this may break compatibility with WebApp integrated with pre-1.0 version\n\n- (Default) `false`"
  },
  {
    "path": "HTTP_API.md",
    "content": "# HTTP APIs\n\nAll endpoints have CORS configured to allow requests from any origin.\n\nYou can get or update the current configuration in your WebApp directly by using the `/config.json` endpoint.\n\n## GET /config.json\n\nGet content of `config.json` file.\n\n## PUT /config.json\n\nUpdate content of `config.json` file.\n\n## GET /system/printers.json\n\nReturn list of available printers.\n\n## GET /system/serials.json\n\nReturn list of available serial ports.\n\n## POST /system/restart.json\n\nRestart WebSocket/Web server"
  },
  {
    "path": "LICENSE",
    "content": "MIT License\n\nCopyright (c) 2017 imTigger\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n"
  },
  {
    "path": "README.md",
    "content": "# WebApp Hardware Bridge\n\n## Introduction\n\nWebApp Hardware Bridge made it possible for WebApps to perform silent print and access to serial ports.\n\nCommon use cases:\n- Web-based POS - PDF and ESC/POS receipt silent print\n- Web-based WMS - Serial weight scale real-time reading, delivery note/packing List silent print\n- Any WebApps need to read/write to serial ports\n\n## Features\n\n- [x] Direct print from WebApps\n- [x] Serial port read/write from WebApps\n- [x] Support all modern browsers that implemented WebSocket (Chrome, Firefox, Edge... etc)\n- [x] [HTTP API](HTTP_API.md) to configure directly from your WebApp\n- [x] [JS SDK/Example included](demo)\n\n### Direct Print\n- 0-click silent printing in web browsers\n- Download via URL / Base64 encoded file / Base64 encoded binary raw command\n- Support multiple printers, mapped by key\n- Support PDF/PNG/JPG Printing\n- Support RAW/ESC-POS Printing\n- Support adding annotation text to PDF/Image before printing\n- Per printer settings\n\n### Serial Access\n- Bidirectional communication\n- Support multiple ports, mapped by key\n- Support multiple connection share same serial port\n- Serial weigh scale (AWH-SA30 supported out-of-box in JS SDK)\n- Per port settings (Baud rate, data bits, stop bit, parity bit)\n\n## How to use?\n\n### Client Side\n\n1. Install and setup mapping via Web UI / API\n\n2. Start \"WebApp Hardware Bridge\" and start using your WebApp\n\n### WebApp Side\n\n1. Check [JS SDK/Example](demo)\n\n## How it works?\n\nWebApp Hardware Bridge is a Java based application, which have more access to underlying hardwares.\n\nIt exposes a WebSocket server on localhost to accept print jobs and serial connections from browsers.\n\n### Print Jobs \n\n- PDF/Images job are downloaded/decoded and then sent to mapped printer.\n- Raw job are sent to mapped printer directly.\n\n### Serial Connections\n\n- Serial port are opened by Java and \"proxied\" as WebSocket stream\n- Serial port can be shared by multiple connections\n- Bidirectional communications possible\n\n### Mappings\n\nWeb UI / API are provided to set up mappings between keys and printers/serials.\n\nTherefore, WebApps do not need to care about the actual printer names.\n\n## More documents\n\n- [Configurations](CONFIGURATION.md)\n- [HTTP APIs](HTTP_API.md)\n- [Advanced Configurations - Authentication](ADVANCED.md#authentication)\n- [Advanced Configurations - HTTPS/WSS Support](ADVANCED.md#httpswss-support)\n- [Build from source](BUILD.md)\n- [Troubleshooting](TROUBLESHOOT.md)\n\n## Upgrade\n\n- Settings will lost after upgrade from 0.x to 1.0, please reconfigure via \"Web UI\" or \"Web API\"\n\n## Changelogs\n\n- [Changelogs](CHANGELOG.md)\n"
  },
  {
    "path": "TROUBLESHOOT.md",
    "content": "# Troubleshoot\n\n- Configurator/GUI do not run? Install [vc_redist.x64.exe](https://www.microsoft.com/en-US/download/details.aspx?id=48145)"
  },
  {
    "path": "build.gradle",
    "content": "plugins {\n    id 'java'\n    id 'application'\n}\n\ngroup 'webapp-hardware-bridge'\nversion '1.0.1'\n\nsourceCompatibility = '21'\ntargetCompatibility = '21'\n\nrepositories {\n    mavenCentral()\n}\n\ndependencies {\n    // The production code uses the SLF4J logging API at compile time\n    implementation group: 'org.apache.logging.log4j', name: 'log4j-slf4j2-impl', version: '2.23.1'\n\n    implementation group: 'commons-io', name: 'commons-io', version: '2.16.1'\n    implementation group: 'commons-codec', name: 'commons-codec', version: '1.17.1'\n    implementation group: 'org.apache.httpcomponents.core5', name: 'httpcore5', version: '5.2.5'\n    implementation group: 'com.fasterxml.jackson.core', name: 'jackson-databind', version: '2.17.2'\n    implementation group: 'com.fazecast', name: 'jSerialComm', version: '2.11.0'\n    implementation group: 'org.apache.pdfbox', name: 'pdfbox', version: '2.0.31'\n    implementation group: 'org.bouncycastle', name: 'bcprov-jdk18on', version: '1.78.1'\n    implementation group: 'org.bouncycastle', name: 'bcpkix-jdk18on', version: '1.78.1'\n    implementation group: 'io.javalin', name: 'javalin', version: '6.2.0'\n    implementation group: 'io.javalin.community.ssl', name: 'ssl-plugin', version: '6.2.0'\n\n    compileOnly 'org.projectlombok:lombok:1.18.34'\n    annotationProcessor 'org.projectlombok:lombok:1.18.34'\n\n    testCompileOnly 'org.projectlombok:lombok:1.18.34'\n    testAnnotationProcessor 'org.projectlombok:lombok:1.18.34'\n\n    testImplementation group: 'junit', name: 'junit', version: '4.13.2'\n}\n\napplication {\n    mainClass = 'tigerworkshop.webapphardwarebridge.GUI'\n}"
  },
  {
    "path": "demo/printer-advanced.htm",
    "content": "<!doctype html>\n<html lang=\"en\">\n<head>\n    <!-- Required meta tags -->\n    <meta charset=\"utf-8\">\n    <meta content=\"width=device-width, initial-scale=1, shrink-to-fit=no\" name=\"viewport\">\n\n    <!-- Bootstrap CSS -->\n    <link rel=\"stylesheet\" href=\"https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css\" integrity=\"sha384-T3c6CoIi6uLrA9TneNEoa7RxnatzjcDSCmG1MXxSR1GAsXEV/Dwwykc2MPK8M2HN\" crossorigin=\"anonymous\">\n\n    <title>WebSocket Printer Advanced</title>\n</head>\n<body>\n<main class=\"container\" role=\"main\">\n    <h1 class=\"mt-5\">WebSocket Printer Advanced</h1>\n\n    <hr/>\n\n    <label>PDF by URL</label>\n    <div class=\"input-group mb-3\">\n        <input class=\"form-control\" id=\"url\" type=\"text\" value=\"https://pdfobject.com/pdf/sample.pdf\"/>\n    </div>\n\n    <label>Connection Status</label>\n\n    <input class=\"form-control mb-3\" id=\"status\"/>\n\n    <label>Output</label>\n\n    <input class=\"form-control mb-3\" id=\"output\"/>\n\n    <hr/>\n\n    <div class=\"py-2\">\n        <p>\n            <button class=\"btn btn-success\" onclick=\"printPDF()\">Normal Print</button>\n        </p>\n\n        <hr/>\n\n        <div>\n            <button class=\"btn btn-primary\" onclick=\"printPDFWithFallback()\">Print (With Fallback)</button>\n            <p class=\"text-muted\">Fallback to window.open() if WebApp Hardware Bridge is not running.</p>\n        </div>\n\n        <hr/>\n\n        <div>\n            <button class=\"btn btn-secondary\" onclick=\"printPDFWithId()\">Print (With id)</button>\n            <p class=\"text-muted\">If &quot;id&quot; is submitted, it will be echoed back in onUpdate() thus we can trace back to jobs we submitted.</p>\n        </div>\n\n        <hr/>\n\n        <div class=\"input-group mb-3\">\n            <div class=\"input-group-prepend\">\n                <input class=\"form-control\" id=\"qty\" type=\"number\" value=\"3\"/>\n            </div>\n\n            <button class=\"btn btn-info\" onclick=\"printPDFWithQty()\">Print (With Qty)</button>\n        </div>\n\n        <p class=\"text-muted\">If &quot;qty&quot; is submitted, specified copies of documents will be printed.</p>\n    </div>\n</main>\n\n<script src=\"websocket-printer.js\"></script>\n<script>\n    var printService = new WebSocketPrinter({\n        onConnect: function () {\n            document.getElementById('status').value = 'Connected';\n        },\n        onDisconnect: function () {\n            document.getElementById('status').value = 'Disconnected';\n        },\n        onUpdate: function (message) {\n            document.getElementById('output').value = message;\n        },\n    });\n\n    function printPDF() {\n        printService.submit({\n            'type': 'INVOICE',\n            'url': document.getElementById('url').value\n        });\n    }\n\n    function printPDFWithId() {\n        printService.submit({\n            'type': 'INVOICE',\n            'id': new Date().getTime(),\n            'url': document.getElementById('url').value\n        });\n    }\n\n    function printPDFWithQty() {\n        printService.submit({\n            'type': 'INVOICE',\n            'qty': document.getElementById('qty').value,\n            'url': document.getElementById('url').value\n        });\n    }\n\n\n    function printPDFWithFallback() {\n        if (printService.isConnected()) {\n            printPDF();\n        } else {\n            alert('WebApp Hardware Bridge not running');\n            window.open(document.getElementById('url').value);\n        }\n    }\n</script>\n</body>\n</html>"
  },
  {
    "path": "demo/printer-annotation.htm",
    "content": "<!doctype html>\n<html lang=\"en\">\n<head>\n    <!-- Required meta tags -->\n    <meta charset=\"utf-8\">\n    <meta content=\"width=device-width, initial-scale=1, shrink-to-fit=no\" name=\"viewport\">\n\n    <!-- Bootstrap CSS -->\n    <link rel=\"stylesheet\" href=\"https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css\" integrity=\"sha384-T3c6CoIi6uLrA9TneNEoa7RxnatzjcDSCmG1MXxSR1GAsXEV/Dwwykc2MPK8M2HN\" crossorigin=\"anonymous\">\n\n    <title>WebSocket Printer Annotation</title>\n</head>\n<body>\n<main class=\"container\" role=\"main\">\n    <h1 class=\"mt-5\">WebSocket Printer Annotation</h1>\n\n    <hr/>\n\n    <label>PDF by URL</label>\n    <div class=\"input-group mb-3\">\n        <input class=\"form-control\" id=\"url\" type=\"text\" value=\"https://pdfobject.com/pdf/sample.pdf\"/>\n    </div>\n\n    <label>Connection Status</label>\n\n    <input class=\"form-control mb-3\" id=\"status\"/>\n\n    <label>Output</label>\n\n    <input class=\"form-control mb-3\" id=\"output\"/>\n\n    <hr/>\n\n    <div class=\"py-2\">\n<textarea class=\"form-control\" id=\"extra\" rows=\"4\">\n[\n    {\"text\": \"Hello World!\", \"x\": 10, \"y\": 10},\n    {\"text\": \"This is annotated by WebApp Hardware Bridge\", \"x\": 10, \"y\": 20, \"size\": 16, \"bold\": true}\n]\n</textarea>\n\n        <p class=\"text-muted\">\n            The &quot;extras&quot; attribute is an array of object, allows adding annotation text on top of the PDF/Image before printing.<br/>\n            Useful for adding extra text such as timestamp on pre-generated logistic labels.\n        </p>\n\n        <p>Example:</p>\n<pre>\n{\n    \"text\": \"Hello World!\", // Mandatory\n    \"x\": 10,                // Mandatory\n    \"y\": 10,                // Mandatory\n    \"size\": 12,             // Optional, default 10\n    \"bold\": true,           // Optional, default false\n}\n</pre>\n\n        <p>\n            <button class=\"btn btn-success\" onclick=\"printPDF()\">Print</button>\n        </p>\n    </div>\n</main>\n\n<script src=\"websocket-printer.js\"></script>\n<script>\n    var printService = new WebSocketPrinter({\n        onConnect: function () {\n            document.getElementById('status').value = 'Connected';\n        },\n        onDisconnect: function () {\n            document.getElementById('status').value = 'Disconnected';\n        },\n        onUpdate: function (message) {\n            document.getElementById('output').value = message;\n        },\n    });\n\n    function printPDF() {\n        printService.submit({\n            'type': 'INVOICE',\n            'url': document.getElementById('url').value,\n            'extras': JSON.parse(document.getElementById('extra').value),\n        });\n    }\n</script>\n</body>\n</html>"
  },
  {
    "path": "demo/printer-basic.htm",
    "content": "<!doctype html>\n<html lang=\"en\">\n<head>\n    <!-- Required meta tags -->\n    <meta charset=\"utf-8\">\n    <meta content=\"width=device-width, initial-scale=1, shrink-to-fit=no\" name=\"viewport\">\n\n    <!-- Bootstrap CSS -->\n    <link rel=\"stylesheet\" href=\"https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css\" integrity=\"sha384-T3c6CoIi6uLrA9TneNEoa7RxnatzjcDSCmG1MXxSR1GAsXEV/Dwwykc2MPK8M2HN\" crossorigin=\"anonymous\">\n\n    <title>WebSocket Printer Basic</title>\n</head>\n<body>\n<main class=\"container\" role=\"main\">\n    <h1 class=\"mt-5\">WebSocket Printer Basic</h1>\n\n    <hr/>\n\n    <label>PDF by URL</label>\n    <div class=\"input-group mb-3\">\n        <input class=\"form-control\" id=\"url\" type=\"text\" value=\"https://pdfobject.com/pdf/sample.pdf\"/>\n\n        <div class=\"input-group-append\">\n            <button class=\"btn btn-success\" onclick=\"printPDF()\">Print</button>\n        </div>\n    </div>\n\n    <hr/>\n\n    <label>Image by URL</label>\n    <div class=\"input-group mb-3\">\n        <input class=\"form-control\" id=\"url2\" type=\"text\" value=\"https://upload.wikimedia.org/wikipedia/commons/4/47/PNG_transparency_demonstration_1.png\"/>\n\n        <div class=\"input-group-append\">\n            <button class=\"btn btn-success\" onclick=\"printImage()\">Print</button>\n        </div>\n    </div>\n\n    <hr/>\n\n    <label>PDF by Base64</label>\n    <div class=\"input-group mb-3\">\n        <input class=\"form-control\" id=\"file_content\" type=\"text\"\n               value=\"JVBERi0xLjcKJeLjz9MKNiAwIG9iago8PCAvVHlwZSAvUGFnZSAvUGFyZW50IDEgMCBSIC9MYXN0TW9kaWZpZWQgKEQ6MjAxNTA4MDIxMjIyMTMrMDAnMDAnKSAvUmVzb3VyY2VzIDIgMCBSIC9NZWRpYUJveCBbMC4wMDAwMDAgMC4wMDAwMDAgNTk1LjI3NjAwMCA4NDEuODkwMDAwXSAvQ3JvcEJveCBbMC4wMDAwMDAgMC4wMDAwMDAgNTk1LjI3NjAwMCA4NDEuODkwMDAwXSAvQmxlZWRCb3ggWzAuMDAwMDAwIDAuMDAwMDAwIDU5NS4yNzYwMDAgODQxLjg5MDAwMF0gL1RyaW1Cb3ggWzAuMDAwMDAwIDAuMDAwMDAwIDU5NS4yNzYwMDAgODQxLjg5MDAwMF0gL0FydEJveCBbMC4wMDAwMDAgMC4wMDAwMDAgNTk1LjI3NjAwMCA4NDEuODkwMDAwXSAvQ29udGVudHMgNyAwIFIgL1JvdGF0ZSAwIC9Hcm91cCA8PCAvVHlwZSAvR3JvdXAgL1MgL1RyYW5zcGFyZW5jeSAvQ1MgL0RldmljZVJHQiA+PiAvQW5ub3RzIFsgNSAwIFIgXSAvUFogMSA+PgplbmRvYmoKNyAwIG9iago8PC9GaWx0ZXIgL0ZsYXRlRGVjb2RlIC9MZW5ndGggMjgwPj4gc3RyZWFtCnictZIxb4MwEIV3fsWNsLi2A4GsbUKrTFTyFjI4tSFUBKhx5Pbf19gqUyolqXrSyacnP/nTPWOUpNgWGMCwtf0Ou709hO1n23XwyOAhp0Axwq6AVbBhAf5Xo72sYDYa6wOrUpwhkmWTlMYJymicLDNgAnYheyrWOWw++WloJWBMoz2w7XXv/QVpRRCNHdFy5YlS7InWsuLnVsPAawlHyYVUwDsBVd/raVQSRDPyQysFnMemq28g/hWHYIIS4nlS7HmI5xmlLlTT6ReHUoZl5HB+5NxhOfkk9bEXI5qBPnyWBMgdUS4uR4myRTIJdn/UDQ6y6I1UdiGHL/CJlqExBum3QVSoV3UZzVCv93/B4MrIL3m/Ae/awBkKZW5kc3RyZWFtCmVuZG9iagoxIDAgb2JqCjw8IC9UeXBlIC9QYWdlcyAvS2lkcyBbIDYgMCBSIF0gL0NvdW50IDEgPj4KZW5kb2JqCjMgMCBvYmoKPDwvVHlwZSAvRm9udCAvU3VidHlwZSAvVHlwZTEgL0Jhc2VGb250IC9IZWx2ZXRpY2EgL05hbWUgL0YxIC9FbmNvZGluZyAvV2luQW5zaUVuY29kaW5nID4+CmVuZG9iago0IDAgb2JqCjw8L1R5cGUgL0ZvbnQgL1N1YnR5cGUgL1R5cGUxIC9CYXNlRm9udCAvVGltZXMtQm9sZEl0YWxpYyAvTmFtZSAvRjIgL0VuY29kaW5nIC9XaW5BbnNpRW5jb2RpbmcgPj4KZW5kb2JqCjIgMCBvYmoKPDwgL1Byb2NTZXQgWy9QREYgL1RleHQgL0ltYWdlQiAvSW1hZ2VDIC9JbWFnZUldIC9Gb250IDw8IC9GMSAzIDAgUiAvRjIgNCAwIFIgPj4gL1hPYmplY3QgPDwgPj4gPj4KZW5kb2JqCjUgMCBvYmoKPDwvVHlwZSAvQW5ub3QgL1N1YnR5cGUgL0xpbmsgL1JlY3QgWzIuODM1MDAwIDEuMDAwMDAwIDE5LjAwNTAwMCAyLjE1NjAwMF0gL0NvbnRlbnRzICj+/wBoAHQAdABwADoALwAvAHcAdwB3AC4AdABjAHAAZABmAC4AbwByAGcpIC9QIDYgMCBSIC9OTSAoMDAwMS0wMDAwKSAvTSAoRDoyMDE1MDgwMjEyMjIxMyswMCcwMCcpIC9GIDQgL0JvcmRlciBbMCAwIDBdIC9BIDw8L1MgL1VSSSAvVVJJIChodHRwOi8vd3d3LnRjcGRmLm9yZyk+PiAvSCAvST4+CmVuZG9iago4IDAgb2JqCjw8IC9UaXRsZSAo/v8AVABDAFAARABGACAARQB4AGEAbQBwAGwAZQAgADAAMAAyKSAvQXV0aG9yICj+/wBOAGkAYwBvAGwAYQAgAEEAcwB1AG4AaSkgL1N1YmplY3QgKP7/AFQAQwBQAEQARgAgAFQAdQB0AG8AcgBpAGEAbCkgL0tleXdvcmRzICj+/wBUAEMAUABEAEYALAAgAFAARABGACwAIABlAHgAYQBtAHAAbABlACwAIAB0AGUAcwB0ACwAIABnAHUAaQBkAGUpIC9DcmVhdG9yICj+/wBUAEMAUABEAEYpIC9Qcm9kdWNlciAo/v8AVABDAFAARABGACAANgAuADIALgAxADEAIABcKABoAHQAdABwADoALwAvAHcAdwB3AC4AdABjAHAAZABmAC4AbwByAGcAXCkpIC9DcmVhdGlvbkRhdGUgKEQ6MjAxNTA4MDIxMjIyMTMrMDAnMDAnKSAvTW9kRGF0ZSAoRDoyMDE1MDgwMjEyMjIxMyswMCcwMCcpIC9UcmFwcGVkIC9GYWxzZSA+PgplbmRvYmoKOSAwIG9iago8PCAvVHlwZSAvTWV0YWRhdGEgL1N1YnR5cGUgL1hNTCAvTGVuZ3RoIDQzMzYgPj4gc3RyZWFtCjw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+Cjx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDQuMi4xLWMwNDMgNTIuMzcyNzI4LCAyMDA5LzAxLzE4LTE1OjA4OjA0Ij4KCTxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CgkJPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIj4KCQkJPGRjOmZvcm1hdD5hcHBsaWNhdGlvbi9wZGY8L2RjOmZvcm1hdD4KCQkJPGRjOnRpdGxlPgoJCQkJPHJkZjpBbHQ+CgkJCQkJPHJkZjpsaSB4bWw6bGFuZz0ieC1kZWZhdWx0Ij5UQ1BERiBFeGFtcGxlIDAwMjwvcmRmOmxpPgoJCQkJPC9yZGY6QWx0PgoJCQk8L2RjOnRpdGxlPgoJCQk8ZGM6Y3JlYXRvcj4KCQkJCTxyZGY6U2VxPgoJCQkJCTxyZGY6bGk+Tmljb2xhIEFzdW5pPC9yZGY6bGk+CgkJCQk8L3JkZjpTZXE+CgkJCTwvZGM6Y3JlYXRvcj4KCQkJPGRjOmRlc2NyaXB0aW9uPgoJCQkJPHJkZjpBbHQ+CgkJCQkJPHJkZjpsaSB4bWw6bGFuZz0ieC1kZWZhdWx0Ij5UQ1BERiBUdXRvcmlhbDwvcmRmOmxpPgoJCQkJPC9yZGY6QWx0PgoJCQk8L2RjOmRlc2NyaXB0aW9uPgoJCQk8ZGM6c3ViamVjdD4KCQkJCTxyZGY6QmFnPgoJCQkJCTxyZGY6bGk+VENQREYsIFBERiwgZXhhbXBsZSwgdGVzdCwgZ3VpZGU8L3JkZjpsaT4KCQkJCTwvcmRmOkJhZz4KCQkJPC9kYzpzdWJqZWN0PgoJCTwvcmRmOkRlc2NyaXB0aW9uPgoJCTxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyI+CgkJCTx4bXA6Q3JlYXRlRGF0ZT4yMDE1LTA4LTAyVDEyOjIyOjEzKzAwOjAwPC94bXA6Q3JlYXRlRGF0ZT4KCQkJPHhtcDpDcmVhdG9yVG9vbD5UQ1BERjwveG1wOkNyZWF0b3JUb29sPgoJCQk8eG1wOk1vZGlmeURhdGU+MjAxNS0wOC0wMlQxMjoyMjoxMyswMDowMDwveG1wOk1vZGlmeURhdGU+CgkJCTx4bXA6TWV0YWRhdGFEYXRlPjIwMTUtMDgtMDJUMTI6MjI6MTMrMDA6MDA8L3htcDpNZXRhZGF0YURhdGU+CgkJPC9yZGY6RGVzY3JpcHRpb24+CgkJPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6cGRmPSJodHRwOi8vbnMuYWRvYmUuY29tL3BkZi8xLjMvIj4KCQkJPHBkZjpLZXl3b3Jkcz5UQ1BERiwgUERGLCBleGFtcGxlLCB0ZXN0LCBndWlkZTwvcGRmOktleXdvcmRzPgoJCQk8cGRmOlByb2R1Y2VyPlRDUERGIDYuMi4xMSAoaHR0cDovL3d3dy50Y3BkZi5vcmcpPC9wZGY6UHJvZHVjZXI+CgkJPC9yZGY6RGVzY3JpcHRpb24+CgkJPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iPgoJCQk8eG1wTU06RG9jdW1lbnRJRD51dWlkOmY2YjgzZWY0LTEyZjItNGE4NS05Yzc3LThlNmY0MTQwOWJmMjwveG1wTU06RG9jdW1lbnRJRD4KCQkJPHhtcE1NOkluc3RhbmNlSUQ+dXVpZDpmNmI4M2VmNC0xMmYyLTRhODUtOWM3Ny04ZTZmNDE0MDliZjI8L3htcE1NOkluc3RhbmNlSUQ+CgkJPC9yZGY6RGVzY3JpcHRpb24+CgkJPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6cGRmYUV4dGVuc2lvbj0iaHR0cDovL3d3dy5haWltLm9yZy9wZGZhL25zL2V4dGVuc2lvbi8iIHhtbG5zOnBkZmFTY2hlbWE9Imh0dHA6Ly93d3cuYWlpbS5vcmcvcGRmYS9ucy9zY2hlbWEjIiB4bWxuczpwZGZhUHJvcGVydHk9Imh0dHA6Ly93d3cuYWlpbS5vcmcvcGRmYS9ucy9wcm9wZXJ0eSMiPgoJCQk8cGRmYUV4dGVuc2lvbjpzY2hlbWFzPgoJCQkJPHJkZjpCYWc+CgkJCQkJPHJkZjpsaSByZGY6cGFyc2VUeXBlPSJSZXNvdXJjZSI+CgkJCQkJCTxwZGZhU2NoZW1hOm5hbWVzcGFjZVVSST5odHRwOi8vbnMuYWRvYmUuY29tL3BkZi8xLjMvPC9wZGZhU2NoZW1hOm5hbWVzcGFjZVVSST4KCQkJCQkJPHBkZmFTY2hlbWE6cHJlZml4PnBkZjwvcGRmYVNjaGVtYTpwcmVmaXg+CgkJCQkJCTxwZGZhU2NoZW1hOnNjaGVtYT5BZG9iZSBQREYgU2NoZW1hPC9wZGZhU2NoZW1hOnNjaGVtYT4KCQkJCQk8L3JkZjpsaT4KCQkJCQk8cmRmOmxpIHJkZjpwYXJzZVR5cGU9IlJlc291cmNlIj4KCQkJCQkJPHBkZmFTY2hlbWE6bmFtZXNwYWNlVVJJPmh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS88L3BkZmFTY2hlbWE6bmFtZXNwYWNlVVJJPgoJCQkJCQk8cGRmYVNjaGVtYTpwcmVmaXg+eG1wTU08L3BkZmFTY2hlbWE6cHJlZml4PgoJCQkJCQk8cGRmYVNjaGVtYTpzY2hlbWE+WE1QIE1lZGlhIE1hbmFnZW1lbnQgU2NoZW1hPC9wZGZhU2NoZW1hOnNjaGVtYT4KCQkJCQkJPHBkZmFTY2hlbWE6cHJvcGVydHk+CgkJCQkJCQk8cmRmOlNlcT4KCQkJCQkJCQk8cmRmOmxpIHJkZjpwYXJzZVR5cGU9IlJlc291cmNlIj4KCQkJCQkJCQkJPHBkZmFQcm9wZXJ0eTpjYXRlZ29yeT5pbnRlcm5hbDwvcGRmYVByb3BlcnR5OmNhdGVnb3J5PgoJCQkJCQkJCQk8cGRmYVByb3BlcnR5OmRlc2NyaXB0aW9uPlVVSUQgYmFzZWQgaWRlbnRpZmllciBmb3Igc3BlY2lmaWMgaW5jYXJuYXRpb24gb2YgYSBkb2N1bWVudDwvcGRmYVByb3BlcnR5OmRlc2NyaXB0aW9uPgoJCQkJCQkJCQk8cGRmYVByb3BlcnR5Om5hbWU+SW5zdGFuY2VJRDwvcGRmYVByb3BlcnR5Om5hbWU+CgkJCQkJCQkJCTxwZGZhUHJvcGVydHk6dmFsdWVUeXBlPlVSSTwvcGRmYVByb3BlcnR5OnZhbHVlVHlwZT4KCQkJCQkJCQk8L3JkZjpsaT4KCQkJCQkJCTwvcmRmOlNlcT4KCQkJCQkJPC9wZGZhU2NoZW1hOnByb3BlcnR5PgoJCQkJCTwvcmRmOmxpPgoJCQkJCTxyZGY6bGkgcmRmOnBhcnNlVHlwZT0iUmVzb3VyY2UiPgoJCQkJCQk8cGRmYVNjaGVtYTpuYW1lc3BhY2VVUkk+aHR0cDovL3d3dy5haWltLm9yZy9wZGZhL25zL2lkLzwvcGRmYVNjaGVtYTpuYW1lc3BhY2VVUkk+CgkJCQkJCTxwZGZhU2NoZW1hOnByZWZpeD5wZGZhaWQ8L3BkZmFTY2hlbWE6cHJlZml4PgoJCQkJCQk8cGRmYVNjaGVtYTpzY2hlbWE+UERGL0EgSUQgU2NoZW1hPC9wZGZhU2NoZW1hOnNjaGVtYT4KCQkJCQkJPHBkZmFTY2hlbWE6cHJvcGVydHk+CgkJCQkJCQk8cmRmOlNlcT4KCQkJCQkJCQk8cmRmOmxpIHJkZjpwYXJzZVR5cGU9IlJlc291cmNlIj4KCQkJCQkJCQkJPHBkZmFQcm9wZXJ0eTpjYXRlZ29yeT5pbnRlcm5hbDwvcGRmYVByb3BlcnR5OmNhdGVnb3J5PgoJCQkJCQkJCQk8cGRmYVByb3BlcnR5OmRlc2NyaXB0aW9uPlBhcnQgb2YgUERGL0Egc3RhbmRhcmQ8L3BkZmFQcm9wZXJ0eTpkZXNjcmlwdGlvbj4KCQkJCQkJCQkJPHBkZmFQcm9wZXJ0eTpuYW1lPnBhcnQ8L3BkZmFQcm9wZXJ0eTpuYW1lPgoJCQkJCQkJCQk8cGRmYVByb3BlcnR5OnZhbHVlVHlwZT5JbnRlZ2VyPC9wZGZhUHJvcGVydHk6dmFsdWVUeXBlPgoJCQkJCQkJCTwvcmRmOmxpPgoJCQkJCQkJCTxyZGY6bGkgcmRmOnBhcnNlVHlwZT0iUmVzb3VyY2UiPgoJCQkJCQkJCQk8cGRmYVByb3BlcnR5OmNhdGVnb3J5PmludGVybmFsPC9wZGZhUHJvcGVydHk6Y2F0ZWdvcnk+CgkJCQkJCQkJCTxwZGZhUHJvcGVydHk6ZGVzY3JpcHRpb24+QW1lbmRtZW50IG9mIFBERi9BIHN0YW5kYXJkPC9wZGZhUHJvcGVydHk6ZGVzY3JpcHRpb24+CgkJCQkJCQkJCTxwZGZhUHJvcGVydHk6bmFtZT5hbWQ8L3BkZmFQcm9wZXJ0eTpuYW1lPgoJCQkJCQkJCQk8cGRmYVByb3BlcnR5OnZhbHVlVHlwZT5UZXh0PC9wZGZhUHJvcGVydHk6dmFsdWVUeXBlPgoJCQkJCQkJCTwvcmRmOmxpPgoJCQkJCQkJCTxyZGY6bGkgcmRmOnBhcnNlVHlwZT0iUmVzb3VyY2UiPgoJCQkJCQkJCQk8cGRmYVByb3BlcnR5OmNhdGVnb3J5PmludGVybmFsPC9wZGZhUHJvcGVydHk6Y2F0ZWdvcnk+CgkJCQkJCQkJCTxwZGZhUHJvcGVydHk6ZGVzY3JpcHRpb24+Q29uZm9ybWFuY2UgbGV2ZWwgb2YgUERGL0Egc3RhbmRhcmQ8L3BkZmFQcm9wZXJ0eTpkZXNjcmlwdGlvbj4KCQkJCQkJCQkJPHBkZmFQcm9wZXJ0eTpuYW1lPmNvbmZvcm1hbmNlPC9wZGZhUHJvcGVydHk6bmFtZT4KCQkJCQkJCQkJPHBkZmFQcm9wZXJ0eTp2YWx1ZVR5cGU+VGV4dDwvcGRmYVByb3BlcnR5OnZhbHVlVHlwZT4KCQkJCQkJCQk8L3JkZjpsaT4KCQkJCQkJCTwvcmRmOlNlcT4KCQkJCQkJPC9wZGZhU2NoZW1hOnByb3BlcnR5PgoJCQkJCTwvcmRmOmxpPgoJCQkJPC9yZGY6QmFnPgoJCQk8L3BkZmFFeHRlbnNpb246c2NoZW1hcz4KCQk8L3JkZjpEZXNjcmlwdGlvbj4KCTwvcmRmOlJERj4KPC94OnhtcG1ldGE+Cjw/eHBhY2tldCBlbmQ9InciPz4KZW5kc3RyZWFtCmVuZG9iagoxMCAwIG9iago8PCAvVHlwZSAvQ2F0YWxvZyAvVmVyc2lvbiAvMS43IC9QYWdlcyAxIDAgUiAvTmFtZXMgPDwgPj4gL1ZpZXdlclByZWZlcmVuY2VzIDw8IC9EaXJlY3Rpb24gL0wyUiA+PiAvUGFnZUxheW91dCAvU2luZ2xlUGFnZSAvUGFnZU1vZGUgL1VzZU5vbmUgL09wZW5BY3Rpb24gWzYgMCBSIC9GaXRIIG51bGxdIC9NZXRhZGF0YSA5IDAgUiAvTGFuZyAo/v8AZQBuKSA+PgplbmRvYmoKeHJlZgowIDExCjAwMDAwMDAwMDAgNjU1MzUgZiAKMDAwMDAwMDgzMyAwMDAwMCBuIAowMDAwMDAxMTExIDAwMDAwIG4gCjAwMDAwMDA4OTIgMDAwMDAgbiAKMDAwMDAwMDk5OCAwMDAwMCBuIAowMDAwMDAxMjI1IDAwMDAwIG4gCjAwMDAwMDAwMTUgMDAwMDAgbiAKMDAwMDAwMDQ4MyAwMDAwMCBuIAowMDAwMDAxNDk2IDAwMDAwIG4gCjAwMDAwMDE5MjMgMDAwMDAgbiAKMDAwMDAwNjM0MSAwMDAwMCBuIAp0cmFpbGVyCjw8IC9TaXplIDExIC9Sb290IDEwIDAgUiAvSW5mbyA4IDAgUiAvSUQgWyA8ZjZiODNlZjQxMmYyNGE4NTljNzc4ZTZmNDE0MDliZjI+IDxmNmI4M2VmNDEyZjI0YTg1OWM3NzhlNmY0MTQwOWJmMj4gXSA+PgpzdGFydHhyZWYKNjU2NAolJUVPRgo=\"/>\n        <div class=\"input-group-append\">\n            <button class=\"btn btn-success\" onclick=\"printPDFBase64()\">Print</button>\n        </div>\n    </div>\n\n    <hr/>\n\n    <label>Raw (ESC/POS)</label>\n    <div class=\"input-group mb-3\">\n        <input class=\"form-control\" id=\"raw_content\" type=\"text\"\n               value=\"G0AbQBthAEhlbGxvIFdvcmxkCh0hERthAUVTQy9QT1MgUHJpbnRlciBUZXN0Ch0hABthAkdvb2RieWUgV29ybGQKHVZBAw==\"/>\n        <div class=\"input-group-append\">\n            <button class=\"btn btn-success\" onclick=\"printRaw()\">Print</button>\n        </div>\n    </div>\n</main>\n\n<script src=\"websocket-printer.js\"></script>\n<script>\n    const printService = new WebSocketPrinter();\n\n    function printPDF() {\n        printService.submit({\n            'type': 'INVOICE',\n            'url': document.getElementById(\"url\").value\n        });\n    }\n\n    function printImage() {\n        printService.submit({\n            'type': 'INVOICE',\n            'url': document.getElementById(\"url2\").value\n        });\n    }\n\n    function printPDFBase64() {\n        printService.submit({\n            'type': 'INVOICE',\n            'url': 'file.pdf',\n            'file_content': document.getElementById('file_content').value\n        });\n    }\n\n    function printRaw() {\n        printService.submit({\n            'type': 'RECEIPT',\n            'raw_content': document.getElementById('raw_content').value\n        });\n    }\n</script>\n</body>\n</html>"
  },
  {
    "path": "demo/serial-basic.html",
    "content": "<!doctype html>\n<html lang=\"en\">\n<head>\n    <!-- Required meta tags -->\n    <meta charset=\"utf-8\">\n    <meta content=\"width=device-width, initial-scale=1, shrink-to-fit=no\" name=\"viewport\">\n\n    <!-- Bootstrap CSS -->\n    <link rel=\"stylesheet\" href=\"https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css\" integrity=\"sha384-T3c6CoIi6uLrA9TneNEoa7RxnatzjcDSCmG1MXxSR1GAsXEV/Dwwykc2MPK8M2HN\" crossorigin=\"anonymous\">\n\n    <title>WebSocket Serial</title>\n</head>\n<body>\n<main class=\"container\" role=\"main\">\n    <h1 class=\"mt-5\">WebSocket Serial</h1>\n\n    <form id=\"form\">\n        <p>Input:</p>\n        <div class=\"input-group mb-3\">\n            <input class=\"form-control\" id=\"input\" name=\"input\" placeholder=\"Input\" type=\"text\" value=\"\"/>\n\n            <div class=\"input-group-append\">\n                <button class=\"btn btn-success\" type=\"submit\">Send</button>\n            </div>\n        </div>\n\n        <p>Output:</p>\n        <textarea class=\"form-control\" rows=\"10\" id=\"output\" name=\"output\"></textarea>\n    </form>\n\n    <script src=\"websocket-serial.js\"></script>\n    <script>\n        const $form = document.getElementById(\"form\");\n        const $input = document.getElementById(\"input\");\n        const $output = document.getElementById(\"output\");\n\n        const serial = new WebSocketSerial({\n            url: 'ws://127.0.0.1:12212/serial/DISPLAY',\n            onMessage: function (message) {\n                $output.value = $output.value + message;\n            }\n        });\n\n        $form.onsubmit = function (e) {\n            serial.send($input.value);\n            $input.value = '';\n            e.preventDefault();\n        }\n    </script>\n</main>\n</body>\n</html>"
  },
  {
    "path": "demo/serial-weigh.htm",
    "content": "<!doctype html>\n<html lang=\"en\">\n<head>\n    <!-- Required meta tags -->\n    <meta charset=\"utf-8\">\n    <meta content=\"width=device-width, initial-scale=1, shrink-to-fit=no\" name=\"viewport\">\n\n    <!-- Bootstrap CSS -->\n    <link rel=\"stylesheet\" href=\"https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css\" integrity=\"sha384-T3c6CoIi6uLrA9TneNEoa7RxnatzjcDSCmG1MXxSR1GAsXEV/Dwwykc2MPK8M2HN\" crossorigin=\"anonymous\">\n\n    <title>WebSocket Serial Weigh (AWH-30)</title>\n</head>\n<body>\n<main class=\"container\" role=\"main\">\n    <h1 class=\"mt-5\">WebSocket Serial Weigh (AWH-30)</h1>\n\n    <hr/>\n\n    <input class=\"form-control\" id=\"weight\" type=\"text\"/>\n</main>\n\n<script src=\"websocket-weigh.js\"></script>\n<script>\n    const $element = document.getElementById(\"weight\");\n    WebSocketWeigh({\n        onUpdate: function (weight, stable) {\n            $element.value = weight;\n            if (stable) {\n                $element.classList.add(\"bg-success\")\n                $element.classList.remove(\"bg-warning\");\n            } else {\n                $element.classList.add(\"bg-warning\")\n                $element.classList.remove(\"bg-success\");\n            }\n        }\n    });\n</script>\n</body>\n</html>"
  },
  {
    "path": "demo/websocket-printer.js",
    "content": "function WebSocketPrinter(options) {\n    var defaults = {\n        url: \"ws://127.0.0.1:12212/printer\",\n        onConnect: function () {\n        },\n        onDisconnect: function () {\n        },\n        onUpdate: function () {\n        },\n    };\n\n    var settings = Object.assign({}, defaults, options);\n    var websocket;\n    var connected = false;\n\n    var onMessage = function (evt) {\n        settings.onUpdate(evt.data);\n    };\n\n    var onConnect = function () {\n        connected = true;\n        settings.onConnect();\n    };\n\n    var onDisconnect = function () {\n        connected = false;\n        settings.onDisconnect();\n        reconnect();\n    };\n\n    var connect = function () {\n        websocket = new WebSocket(settings.url);\n        websocket.onopen = onConnect;\n        websocket.onclose = onDisconnect;\n        websocket.onmessage = onMessage;\n    };\n\n    var reconnect = function () {\n        connect();\n    };\n\n    this.submit = function (data) {\n        if (Array.isArray(data)) {\n            data.forEach(function (element) {\n                websocket.send(JSON.stringify(element));\n            });\n        } else {\n            websocket.send(JSON.stringify(data));\n        }\n    };\n\n    this.isConnected = function () {\n        return connected;\n    };\n\n    connect();\n}"
  },
  {
    "path": "demo/websocket-serial.js",
    "content": "function WebSocketSerial(options) {\n    var defaults = {\n        url: 'ws://127.0.0.1:12212/serial/DISPLAY',\n        onConnect: function () {\n        },\n        onDisconnect: function () {\n        },\n        onMessage: function (message) {\n        }\n    };\n\n    var settings = Object.assign({}, defaults, options);\n    var websocket;\n    var buffer = '';\n\n    var onMessage = function (evt) {\n        var chr = evt.data;\n        settings.onMessage(chr);\n    };\n\n    var onConnect = function () {\n        settings.onConnect();\n    };\n\n    var onDisconnect = function () {\n        settings.onDisconnect();\n        reconnect();\n    };\n\n    var connect = function () {\n        websocket = new WebSocket(settings.url);\n        websocket.onopen = onConnect;\n        websocket.onclose = onDisconnect;\n        websocket.onmessage = onMessage;\n    };\n\n    var reconnect = function () {\n        connect();\n    };\n\n    this.send = function (message) {\n        websocket.send(message);\n    };\n\n    connect();\n}"
  },
  {
    "path": "demo/websocket-weigh.js",
    "content": "function WebSocketWeigh(options) {\n    var defaults = {\n        url: 'ws://127.0.0.1:12212/serial/WEIGH',\n        weightRegex: new RegExp('([0-9]{1,2}\\\\.[0-9]{3})kg'),\n        stableRegex: new RegExp('^ST.*\\\\s+'),\n        onConnect: function () {\n        },\n        onDisconnect: function () {\n        },\n        onUpdate: function (weight, stable) {\n\n        }\n    };\n\n    var settings = Object.assign({}, defaults, options);\n    var websocket;\n    var buffer = '';\n\n    var onMessage = function (evt) {\n        var chr = evt.data;\n        if (chr == \"\\n\") {\n            var weightOutput = settings.weightRegex.exec(buffer);\n            var stableOutput = settings.stableRegex.test(buffer);\n\n            if (weightOutput != null) {\n                settings.onUpdate(weightOutput[1], stableOutput);\n            }\n            buffer = '';\n        } else {\n            buffer = buffer + chr;\n        }\n    };\n\n    var onConnect = function () {\n        settings.onConnect();\n    };\n\n    var onDisconnect = function () {\n        settings.onDisconnect();\n        reconnect();\n    };\n\n    var connect = function () {\n        websocket = new WebSocket(settings.url);\n        websocket.onopen = onConnect;\n        websocket.onclose = onDisconnect;\n        websocket.onmessage = onMessage;\n    };\n\n    var reconnect = function () {\n        connect();\n    };\n\n    connect();\n}"
  },
  {
    "path": "gradlew",
    "content": "#!/bin/sh\n\n#\n# Copyright © 2015-2021 the original authors.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      https://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n\n##############################################################################\n#\n#   Gradle start up script for POSIX generated by Gradle.\n#\n#   Important for running:\n#\n#   (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is\n#       noncompliant, but you have some other compliant shell such as ksh or\n#       bash, then to run this script, type that shell name before the whole\n#       command line, like:\n#\n#           ksh Gradle\n#\n#       Busybox and similar reduced shells will NOT work, because this script\n#       requires all of these POSIX shell features:\n#         * functions;\n#         * expansions «$var», «${var}», «${var:-default}», «${var+SET}»,\n#           «${var#prefix}», «${var%suffix}», and «$( cmd )»;\n#         * compound commands having a testable exit status, especially «case»;\n#         * various built-in commands including «command», «set», and «ulimit».\n#\n#   Important for patching:\n#\n#   (2) This script targets any POSIX shell, so it avoids extensions provided\n#       by Bash, Ksh, etc; in particular arrays are avoided.\n#\n#       The \"traditional\" practice of packing multiple parameters into a\n#       space-separated string is a well documented source of bugs and security\n#       problems, so this is (mostly) avoided, by progressively accumulating\n#       options in \"$@\", and eventually passing that to Java.\n#\n#       Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS,\n#       and GRADLE_OPTS) rely on word-splitting, this is performed explicitly;\n#       see the in-line comments for details.\n#\n#       There are tweaks for specific operating systems such as AIX, CygWin,\n#       Darwin, MinGW, and NonStop.\n#\n#   (3) This script is generated from the Groovy template\n#       https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt\n#       within the Gradle project.\n#\n#       You can find Gradle at https://github.com/gradle/gradle/.\n#\n##############################################################################\n\n# Attempt to set APP_HOME\n\n# Resolve links: $0 may be a link\napp_path=$0\n\n# Need this for daisy-chained symlinks.\nwhile\n    APP_HOME=${app_path%\"${app_path##*/}\"}  # leaves a trailing /; empty if no leading path\n    [ -h \"$app_path\" ]\ndo\n    ls=$( ls -ld \"$app_path\" )\n    link=${ls#*' -> '}\n    case $link in             #(\n      /*)   app_path=$link ;; #(\n      *)    app_path=$APP_HOME$link ;;\n    esac\ndone\n\n# This is normally unused\n# shellcheck disable=SC2034\nAPP_BASE_NAME=${0##*/}\n# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036)\nAPP_HOME=$( cd \"${APP_HOME:-./}\" > /dev/null && pwd -P ) || exit\n\n# Use the maximum available, or set MAX_FD != -1 to use that value.\nMAX_FD=maximum\n\nwarn () {\n    echo \"$*\"\n} >&2\n\ndie () {\n    echo\n    echo \"$*\"\n    echo\n    exit 1\n} >&2\n\n# OS specific support (must be 'true' or 'false').\ncygwin=false\nmsys=false\ndarwin=false\nnonstop=false\ncase \"$( uname )\" in                #(\n  CYGWIN* )         cygwin=true  ;; #(\n  Darwin* )         darwin=true  ;; #(\n  MSYS* | MINGW* )  msys=true    ;; #(\n  NONSTOP* )        nonstop=true ;;\nesac\n\nCLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar\n\n\n# Determine the Java command to use to start the JVM.\nif [ -n \"$JAVA_HOME\" ] ; then\n    if [ -x \"$JAVA_HOME/jre/sh/java\" ] ; then\n        # IBM's JDK on AIX uses strange locations for the executables\n        JAVACMD=$JAVA_HOME/jre/sh/java\n    else\n        JAVACMD=$JAVA_HOME/bin/java\n    fi\n    if [ ! -x \"$JAVACMD\" ] ; then\n        die \"ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME\n\nPlease set the JAVA_HOME variable in your environment to match the\nlocation of your Java installation.\"\n    fi\nelse\n    JAVACMD=java\n    if ! command -v java >/dev/null 2>&1\n    then\n        die \"ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.\n\nPlease set the JAVA_HOME variable in your environment to match the\nlocation of your Java installation.\"\n    fi\nfi\n\n# Increase the maximum file descriptors if we can.\nif ! \"$cygwin\" && ! \"$darwin\" && ! \"$nonstop\" ; then\n    case $MAX_FD in #(\n      max*)\n        # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked.\n        # shellcheck disable=SC2039,SC3045\n        MAX_FD=$( ulimit -H -n ) ||\n            warn \"Could not query maximum file descriptor limit\"\n    esac\n    case $MAX_FD in  #(\n      '' | soft) :;; #(\n      *)\n        # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked.\n        # shellcheck disable=SC2039,SC3045\n        ulimit -n \"$MAX_FD\" ||\n            warn \"Could not set maximum file descriptor limit to $MAX_FD\"\n    esac\nfi\n\n# Collect all arguments for the java command, stacking in reverse order:\n#   * args from the command line\n#   * the main class name\n#   * -classpath\n#   * -D...appname settings\n#   * --module-path (only if needed)\n#   * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables.\n\n# For Cygwin or MSYS, switch paths to Windows format before running java\nif \"$cygwin\" || \"$msys\" ; then\n    APP_HOME=$( cygpath --path --mixed \"$APP_HOME\" )\n    CLASSPATH=$( cygpath --path --mixed \"$CLASSPATH\" )\n\n    JAVACMD=$( cygpath --unix \"$JAVACMD\" )\n\n    # Now convert the arguments - kludge to limit ourselves to /bin/sh\n    for arg do\n        if\n            case $arg in                                #(\n              -*)   false ;;                            # don't mess with options #(\n              /?*)  t=${arg#/} t=/${t%%/*}              # looks like a POSIX filepath\n                    [ -e \"$t\" ] ;;                      #(\n              *)    false ;;\n            esac\n        then\n            arg=$( cygpath --path --ignore --mixed \"$arg\" )\n        fi\n        # Roll the args list around exactly as many times as the number of\n        # args, so each arg winds up back in the position where it started, but\n        # possibly modified.\n        #\n        # NB: a `for` loop captures its iteration list before it begins, so\n        # changing the positional parameters here affects neither the number of\n        # iterations, nor the values presented in `arg`.\n        shift                   # remove old arg\n        set -- \"$@\" \"$arg\"      # push replacement arg\n    done\nfi\n\n\n# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.\nDEFAULT_JVM_OPTS='\"-Xmx64m\" \"-Xms64m\"'\n\n# Collect all arguments for the java command:\n#   * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments,\n#     and any embedded shellness will be escaped.\n#   * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be\n#     treated as '${Hostname}' itself on the command line.\n\nset -- \\\n        \"-Dorg.gradle.appname=$APP_BASE_NAME\" \\\n        -classpath \"$CLASSPATH\" \\\n        org.gradle.wrapper.GradleWrapperMain \\\n        \"$@\"\n\n# Stop when \"xargs\" is not available.\nif ! command -v xargs >/dev/null 2>&1\nthen\n    die \"xargs is not available\"\nfi\n\n# Use \"xargs\" to parse quoted args.\n#\n# With -n1 it outputs one arg per line, with the quotes and backslashes removed.\n#\n# In Bash we could simply go:\n#\n#   readarray ARGS < <( xargs -n1 <<<\"$var\" ) &&\n#   set -- \"${ARGS[@]}\" \"$@\"\n#\n# but POSIX shell has neither arrays nor command substitution, so instead we\n# post-process each arg (as a line of input to sed) to backslash-escape any\n# character that might be a shell metacharacter, then use eval to reverse\n# that process (while maintaining the separation between arguments), and wrap\n# the whole thing up as a single \"set\" statement.\n#\n# This will of course break if any of these variables contains a newline or\n# an unmatched quote.\n#\n\neval \"set -- $(\n        printf '%s\\n' \"$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS\" |\n        xargs -n1 |\n        sed ' s~[^-[:alnum:]+,./:=@_]~\\\\&~g; ' |\n        tr '\\n' ' '\n    )\" '\"$@\"'\n\nexec \"$JAVACMD\" \"$@\"\n"
  },
  {
    "path": "gradlew.bat",
    "content": "@rem\n@rem Copyright 2015 the original author or authors.\n@rem\n@rem Licensed under the Apache License, Version 2.0 (the \"License\");\n@rem you may not use this file except in compliance with the License.\n@rem You may obtain a copy of the License at\n@rem\n@rem      https://www.apache.org/licenses/LICENSE-2.0\n@rem\n@rem Unless required by applicable law or agreed to in writing, software\n@rem distributed under the License is distributed on an \"AS IS\" BASIS,\n@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n@rem See the License for the specific language governing permissions and\n@rem limitations under the License.\n@rem\n\n@if \"%DEBUG%\"==\"\" @echo off\n@rem ##########################################################################\n@rem\n@rem  Gradle startup script for Windows\n@rem\n@rem ##########################################################################\n\n@rem Set local scope for the variables with windows NT shell\nif \"%OS%\"==\"Windows_NT\" setlocal\n\nset DIRNAME=%~dp0\nif \"%DIRNAME%\"==\"\" set DIRNAME=.\n@rem This is normally unused\nset APP_BASE_NAME=%~n0\nset APP_HOME=%DIRNAME%\n\n@rem Resolve any \".\" and \"..\" in APP_HOME to make it shorter.\nfor %%i in (\"%APP_HOME%\") do set APP_HOME=%%~fi\n\n@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.\nset DEFAULT_JVM_OPTS=\"-Xmx64m\" \"-Xms64m\"\n\n@rem Find java.exe\nif defined JAVA_HOME goto findJavaFromJavaHome\n\nset JAVA_EXE=java.exe\n%JAVA_EXE% -version >NUL 2>&1\nif %ERRORLEVEL% equ 0 goto execute\n\necho.\necho ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.\necho.\necho Please set the JAVA_HOME variable in your environment to match the\necho location of your Java installation.\n\ngoto fail\n\n:findJavaFromJavaHome\nset JAVA_HOME=%JAVA_HOME:\"=%\nset JAVA_EXE=%JAVA_HOME%/bin/java.exe\n\nif exist \"%JAVA_EXE%\" goto execute\n\necho.\necho ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%\necho.\necho Please set the JAVA_HOME variable in your environment to match the\necho location of your Java installation.\n\ngoto fail\n\n:execute\n@rem Setup the command line\n\nset CLASSPATH=%APP_HOME%\\gradle\\wrapper\\gradle-wrapper.jar\n\n\n@rem Execute Gradle\n\"%JAVA_EXE%\" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% \"-Dorg.gradle.appname=%APP_BASE_NAME%\" -classpath \"%CLASSPATH%\" org.gradle.wrapper.GradleWrapperMain %*\n\n:end\n@rem End local scope for the variables with windows NT shell\nif %ERRORLEVEL% equ 0 goto mainEnd\n\n:fail\nrem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of\nrem the _cmd.exe /c_ return code!\nset EXIT_CODE=%ERRORLEVEL%\nif %EXIT_CODE% equ 0 set EXIT_CODE=1\nif not \"\"==\"%GRADLE_EXIT_CONSOLE%\" exit %EXIT_CODE%\nexit /b %EXIT_CODE%\n\n:mainEnd\nif \"%OS%\"==\"Windows_NT\" endlocal\n\n:omega\n"
  },
  {
    "path": "install.nsi",
    "content": "; The name of the installer\nName \"WebApp Hardware Bridge\"\n\n; The file to write\nOutFile \"whb.exe\"\n\n; The default installation directory\nInstallDir \"$LOCALAPPDATA\\WebApp Hardware Bridge\"\n\n; Request application privileges for Windows Vista\nRequestExecutionLevel user\n\n;--------------------------------\n\n; Pages\n\n;Page directory\nPage components\nPage instfiles\n\n;--------------------------------\n\n; The stuff to install\nSection \"!Main Application\" ;No components page, name is not important\n  SectionIn RO\n\n  ; Set output path to the installation directory.\n  SetOutPath $INSTDIR\n  \n  ; Remove old version\n  RMDir /r \"$INSTDIR\\jre\"\n  Delete \"$INSTDIR\\*.jar\"\n  Delete \"$INSTDIR\\setting.default.json\"\n  Delete \"$DESKTOP\\WebApp Hardware Bridge (GUI).lnk\"\n  Delete \"$DESKTOP\\WebApp Hardware Bridge (Configurator).lnk\"\n  Delete \"$SMPROGRAMS\\WebApp Hardware Bridge (GUI).lnk\"\n  Delete \"$SMPROGRAMS\\WebApp Hardware Bridge (Configurator).lnk\"\n  \n  ; Put file there\n  File /r out\\artifacts\\webapp_hardware_bridge_jar\\*\n  File /r jre\n  \n  File \"install.nsi\"\n  File \"icon.ico\"\n  \n  ; Delete shortcuts  \n  Delete \"$DESKTOP\\WebApp Hardware Bridge.lnk\"\n  Delete \"$DESKTOP\\WebApp Hardware Bridge (CLI).lnk\"\n  Delete \"$SMPROGRAMS\\WebApp Hardware Bridge.lnk\"\n  Delete \"$SMPROGRAMS\\WebApp Hardware Bridge (CLI).lnk\"\n  \n  ; Create shortcuts\n  CreateShortcut \"$DESKTOP\\WebApp Hardware Bridge.lnk\" \"$INSTDIR\\jre\\bin\\javaw.exe\" \"-cp webapp-hardware-bridge.jar tigerworkshop.webapphardwarebridge.GUI\" \"$INSTDIR\\icon.ico\" 0\n  CreateShortcut \"$DESKTOP\\WebApp Hardware Bridge (CLI).lnk\" \"$INSTDIR\\jre\\bin\\java.exe\" \"-cp webapp-hardware-bridge.jar tigerworkshop.webapphardwarebridge.Server\" \"$INSTDIR\\icon.ico\" 0\n  CreateShortcut \"$SMPROGRAMS\\WebApp Hardware Bridge.lnk\" \"$INSTDIR\\jre\\bin\\javaw.exe\" \"-cp webapp-hardware-bridge.jar tigerworkshop.webapphardwarebridge.GUI\" \"$INSTDIR\\icon.ico\" 0\n  CreateShortcut \"$SMPROGRAMS\\WebApp Hardware Bridge (CLI).lnk\" \"$INSTDIR\\jre\\bin\\java.exe\" \"-cp webapp-hardware-bridge.jar tigerworkshop.webapphardwarebridge.Server\" \"$INSTDIR\\icon.ico\" 0\n\n  ; Write the installation path into the registry\n  WriteRegStr HKCU \"SOFTWARE\\WebApp Hardware Bridge\" \"Install_Dir\" \"$INSTDIR\"\n  \n  ; Write the uninstall keys for Windows\n  WriteRegStr HKCU \"Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\WebApp Hardware Bridge\" \"DisplayName\" \"WebApp Hardware Bridge\"\n  WriteRegStr HKCU \"Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\WebApp Hardware Bridge\" \"UninstallString\" '\"$INSTDIR\\uninstall.exe\"'\n  WriteRegDWORD HKCU \"Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\WebApp Hardware Bridge\" \"NoModify\" 1\n  WriteRegDWORD HKCU \"Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\WebApp Hardware Bridge\" \"NoRepair\" 1\n  WriteUninstaller \"uninstall.exe\"\n\n  ; Auto close when finished\n  SetAutoClose true\nSectionEnd ; end the section\n\nSection \"Auto-start\" autostart\n  CreateShortcut \"$SMSTARTUP\\WebApp Hardware Bridge.lnk\" \"$INSTDIR\\jre\\bin\\javaw.exe\" \"-cp webapp-hardware-bridge.jar tigerworkshop.webapphardwarebridge.GUI\"\nSectionEnd\n\nSection \"Uninstall\"\n  ; Remove registry keys\n  DeleteRegKey HKCU \"Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\WebApp Hardware Bridge\"\n  DeleteRegKey HKCU \"SOFTWARE\\WebApp Hardware Bridge\"\n  \n  ; Delete shortcuts\n  Delete \"$DESKTOP\\WebApp Hardware Bridge.lnk\"\n  Delete \"$DESKTOP\\WebApp Hardware Bridge (CLI).lnk\"\n  Delete \"$SMPROGRAMS\\WebApp Hardware Bridge.lnk\"\n  Delete \"$SMPROGRAMS\\WebApp Hardware Bridge (CLI).lnk\"\n  \n  ; Remove files and uninstaller\n  RMDir /r $INSTDIR\nSectionEnd\n\nFunction .onInstSuccess\n  ExecShell \"\" \"$DESKTOP\\WebApp Hardware Bridge.lnk\"\nFunctionEnd"
  },
  {
    "path": "settings.gradle",
    "content": "rootProject.name = 'webapp-hardware-bridge'"
  },
  {
    "path": "src/main/java/module-info.java",
    "content": "module tigerworkshop.webapphardwarebridge {\n    requires java.desktop;\n    requires com.fazecast.jSerialComm;\n    requires jdk.management;\n    requires org.bouncycastle.provider;\n    requires org.bouncycastle.pkix;\n    requires org.apache.commons.io;\n    requires org.slf4j;\n    requires org.apache.pdfbox;\n    requires org.apache.commons.codec;\n    requires org.apache.httpcomponents.core5.httpcore5;\n    requires org.apache.logging.log4j;\n    requires io.javalin;\n    requires com.fasterxml.jackson.databind;\n    requires io.javalin.community.ssl;\n    requires static lombok;\n\n    opens tigerworkshop.webapphardwarebridge.dtos to com.fasterxml.jackson.databind;\n    opens tigerworkshop.webapphardwarebridge.responses to com.fasterxml.jackson.databind;\n    opens tigerworkshop.webapphardwarebridge.utils to com.fasterxml.jackson.databind;\n\n    exports tigerworkshop.webapphardwarebridge;\n    exports tigerworkshop.webapphardwarebridge.interfaces;\n}"
  },
  {
    "path": "src/main/java/tigerworkshop/webapphardwarebridge/Constants.java",
    "content": "package tigerworkshop.webapphardwarebridge;\n\npublic class Constants {\n    public static final String APP_NAME = \"WebApp Hardware Bridge\";\n    public static final String APP_ID = \"tigerworkshop.webapphardwarebridge\";\n    public static final String VERSION = \"1.0.1\";\n}\n"
  },
  {
    "path": "src/main/java/tigerworkshop/webapphardwarebridge/GUI.java",
    "content": "package tigerworkshop.webapphardwarebridge;\n\nimport com.fasterxml.jackson.databind.ObjectMapper;\nimport lombok.extern.log4j.Log4j2;\nimport tigerworkshop.webapphardwarebridge.dtos.Config;\nimport tigerworkshop.webapphardwarebridge.dtos.NotificationDTO;\nimport tigerworkshop.webapphardwarebridge.interfaces.WebSocketServerInterface;\nimport tigerworkshop.webapphardwarebridge.interfaces.WebSocketServiceInterface;\nimport tigerworkshop.webapphardwarebridge.services.ConfigService;\n\nimport javax.imageio.ImageIO;\nimport java.awt.*;\nimport java.io.File;\nimport java.net.URI;\nimport java.util.Objects;\n\n@Log4j2\npublic class GUI implements WebSocketServiceInterface {\n    private static final ConfigService configService = ConfigService.getInstance();\n\n    private final Server server = new Server();\n    private Config config = configService.getConfig();\n\n    Desktop desktop = Desktop.getDesktop();\n    TrayIcon trayIcon;\n    SystemTray tray;\n\n    public static void main(String[] args) throws Exception {\n        GUI gui = new GUI();\n        gui.launch();\n    }\n\n    public void launch() throws Exception {\n        server.start();\n\n        // Create tray icon\n        if (!SystemTray.isSupported()) {\n            log.warn(\"SystemTray is not supported\");\n            return;\n        }\n\n        // Register service as notification listener\n        if (config.getGui().getNotification().isEnabled()) {\n            server.registerService(this);\n        }\n\n        MenuItem settingItem = new MenuItem(\"Web UI\");\n        settingItem.addActionListener(e -> {\n            try {\n                if (desktop == null || !desktop.isSupported(Desktop.Action.BROWSE)) {\n                    throw new Exception(\"Desktop browse is not supported\");\n                }\n\n                desktop.browse(new URI(config.getServer().getUri()));\n            } catch (Exception ex) {\n                log.error(\"Failed to open Web UI\", ex);\n            }\n        });\n\n        MenuItem appDirectoryItem = new MenuItem(\"App Directory\");\n        appDirectoryItem.addActionListener(e -> {\n            try {\n                if (desktop == null || !desktop.isSupported(Desktop.Action.OPEN)) {\n                    throw new Exception(\"Desktop open is not supported\");\n                }\n\n                desktop.open(new File(\".\"));\n            } catch (Exception ex) {\n                log.error(\"Failed to open log folder\", ex);\n            }\n        });\n\n        MenuItem logDirectoryItem = new MenuItem(\"Log Directory\");\n        logDirectoryItem.addActionListener(e -> {\n            try {\n                if (desktop == null || !desktop.isSupported(Desktop.Action.OPEN)) {\n                    throw new Exception(\"Desktop open is not supported\");\n                }\n\n                desktop.open(new File(\"log\"));\n            } catch (Exception ex) {\n                log.error(\"Failed to open log folder\", ex);\n            }\n        });\n\n        MenuItem restartItem = new MenuItem(\"Restart\");\n        restartItem.addActionListener(e -> restart());\n\n        MenuItem exitItem = new MenuItem(\"Exit\");\n        exitItem.addActionListener(e -> System.exit(0));\n\n        // Add components to pop-up menu\n        final PopupMenu popupMenu = new PopupMenu();\n        popupMenu.add(settingItem);\n        popupMenu.addSeparator();\n        popupMenu.add(appDirectoryItem);\n        popupMenu.add(logDirectoryItem);\n        popupMenu.addSeparator();\n        popupMenu.add(restartItem);\n        popupMenu.add(exitItem);\n\n        tray = SystemTray.getSystemTray();\n\n        // Set icon\n        Dimension trayIconSize = tray.getTrayIconSize();\n        final Image image = ImageIO.read(Objects.requireNonNull(getClass().getClassLoader().getResource(\"icon.png\")));\n        final Image scaledImage = image.getScaledInstance(trayIconSize.width, trayIconSize.height, Image.SCALE_SMOOTH);\n\n        trayIcon = new TrayIcon(scaledImage, Constants.APP_NAME);\n        trayIcon.setPopupMenu(popupMenu);\n\n        tray.add(trayIcon);\n\n        notify(Constants.APP_NAME, \" is running in background!\", TrayIcon.MessageType.INFO);\n    }\n\n    public void notify(String title, String message, TrayIcon.MessageType messageType) {\n        try {\n            trayIcon.displayMessage(title, message, messageType);\n        } catch (Exception e) {\n            log.error(\"Failed to display notification\", e);\n        }\n    }\n\n    public void restart() {\n        try {\n            config = configService.getConfig();\n\n            server.stop();\n            server.start();\n\n            notify(\"Restart\", \"Server restarted successfully\", TrayIcon.MessageType.INFO);\n        } catch (Exception e) {\n            log.error(\"Failed to restart server\", e);\n        }\n    }\n\n    @Override\n    public void start() {\n\n    }\n\n    @Override\n    public void stop() {\n\n    }\n\n    @Override\n    public void messageToService(String message) {\n        try {\n            log.debug(\"GUI Notification: {}\", message);\n\n            NotificationDTO notificationDTO = new ObjectMapper().readValue(message, NotificationDTO.class);\n            notify(notificationDTO.getTitle(), notificationDTO.getMessage(), TrayIcon.MessageType.valueOf(notificationDTO.getType()));\n        } catch (Exception e) {\n            log.error(\"Failed to parse notification message\", e);\n        }\n    }\n\n    @Override\n    public void messageToService(byte[] message) {\n    }\n\n    @Override\n    public void onRegister(WebSocketServerInterface server) {\n\n    }\n\n    @Override\n    public void onUnregister() {\n    }\n\n    @Override\n    public String getChannel() {\n        return \"/notification\";\n    }\n}\n"
  },
  {
    "path": "src/main/java/tigerworkshop/webapphardwarebridge/Server.java",
    "content": "package tigerworkshop.webapphardwarebridge;\n\nimport com.fasterxml.jackson.core.JsonProcessingException;\nimport com.fasterxml.jackson.databind.JsonNode;\nimport com.fasterxml.jackson.databind.ObjectMapper;\nimport com.fazecast.jSerialComm.SerialPort;\nimport io.javalin.Javalin;\nimport io.javalin.community.ssl.SslPlugin;\nimport io.javalin.http.ContentType;\nimport io.javalin.plugin.bundled.CorsPluginConfig;\nimport io.javalin.util.JavalinBindException;\nimport io.javalin.websocket.WsContext;\nimport lombok.extern.log4j.Log4j2;\nimport tigerworkshop.webapphardwarebridge.dtos.*;\nimport tigerworkshop.webapphardwarebridge.interfaces.WebSocketServerInterface;\nimport tigerworkshop.webapphardwarebridge.interfaces.WebSocketServiceInterface;\nimport tigerworkshop.webapphardwarebridge.services.ConfigService;\nimport tigerworkshop.webapphardwarebridge.utils.CertificateGenerator;\nimport tigerworkshop.webapphardwarebridge.utils.ThreadUtil;\nimport tigerworkshop.webapphardwarebridge.websocketservices.PrinterWebSocketService;\nimport tigerworkshop.webapphardwarebridge.websocketservices.SerialWebSocketService;\n\nimport javax.print.PrintService;\nimport java.awt.print.PrinterJob;\nimport java.nio.ByteBuffer;\nimport java.util.*;\nimport java.util.concurrent.ConcurrentHashMap;\nimport java.util.concurrent.ConcurrentLinkedQueue;\nimport java.util.concurrent.TimeUnit;\n\n@Log4j2\npublic class Server implements WebSocketServerInterface {\n    private Javalin javalinServer;\n\n    private static final ObjectMapper objectMapper = new ObjectMapper();\n    private static final ConfigService configService = ConfigService.getInstance();\n\n    private final ConcurrentHashMap<String, ConcurrentLinkedQueue<WsContext>> socketChannelSubscriptions = new ConcurrentHashMap<>();\n    private final ConcurrentHashMap<String, ConcurrentLinkedQueue<WebSocketServiceInterface>> serviceChannelSubscriptions = new ConcurrentHashMap<>();\n    private final ConcurrentLinkedQueue<WebSocketServiceInterface> services = new ConcurrentLinkedQueue<>();\n\n    public static void main(String[] args) {\n        try {\n            new Server().start();\n        } catch (Exception e) {\n            throw new RuntimeException(e);\n        }\n    }\n\n    synchronized public void start() throws Exception {\n        Config config = configService.getConfig();\n\n        Config.Server serverConfig = config.getServer();\n\n        // Create Javalin Server\n        javalinServer = Javalin.create(cfg -> {\n            cfg.showJavalinBanner = false;\n            cfg.staticFiles.add(staticFiles -> staticFiles.directory = \"web\");\n            cfg.bundledPlugins.enableCors(cors -> cors.addRule(CorsPluginConfig.CorsRule::anyHost));\n\n            if (serverConfig.getTls().isEnabled()) {\n                if (serverConfig.getTls().isSelfSigned()) {\n                    log.info(\"TLS Enabled with self-signed certificate\");\n\n                    CertificateGenerator.generateSelfSignedCertificate(serverConfig.getAddress(), serverConfig.getTls().getCert(), serverConfig.getTls().getKey());\n\n                    log.info(\"For first time setup, open in browser and trust the certificate: {}\", serverConfig.getUri());\n                }\n\n                SslPlugin plugin = new SslPlugin(conf -> {\n                    conf.insecure = false;\n                    conf.securePort = serverConfig.getPort();\n                    conf.pemFromPath(serverConfig.getTls().getCert(), serverConfig.getTls().getKey());\n                    conf.sniHostCheck = !serverConfig.getTls().isSelfSigned();\n                });\n                cfg.registerPlugin(plugin);\n            }\n        });\n\n        // Add WebSocket Auth\n        javalinServer.wsBefore(ctx -> {\n            ctx.onConnect(wsConnectContext -> {\n                wsConnectContext.session.getPolicy().setMaxBinaryMessageSize(-1);\n                wsConnectContext.session.getPolicy().setMaxTextMessageSize(-1);\n\n                wsConnectContext.enableAutomaticPings(5, TimeUnit.SECONDS);\n\n                if (serverConfig.getAuthentication().isEnabled()) {\n                    if (Optional.ofNullable(wsConnectContext.queryParam(\"token\")).orElse(\"\").equals(serverConfig.getAuthentication().getToken())) {\n                        return;\n                    }\n\n                    wsConnectContext.closeSession(1003, \"Invalid token\");\n                }\n            });\n        });\n\n        // Add WebSocket Printer Service\n        Config.Printer printerConfig = config.getPrinter();\n        if (printerConfig.isEnabled()) {\n            PrinterWebSocketService printerWebSocketService = new PrinterWebSocketService();\n            printerWebSocketService.start();\n\n            javalinServer.ws(printerWebSocketService.getChannel(), ws -> {\n                ws.onConnect(ctx -> {\n                    log.info(\"{} connected to {}\", ctx.host(), printerWebSocketService.getChannel());\n\n                    addSocketToChannel(printerWebSocketService.getChannel(), ctx);\n                });\n\n                ws.onClose(ctx -> {\n                    log.info(\"{} disconnected from {}\", ctx.host(), printerWebSocketService.getChannel());\n\n                    removeSocketFromChannel(printerWebSocketService.getChannel(), ctx);\n                });\n\n                ws.onMessage(ctx -> {\n                    log.info(\"{} sent message to {}: {}\", ctx.host(), printerWebSocketService.getChannel(), ctx.message());\n\n                    messageToService(\"/printer\", ctx.message());\n                });\n            });\n\n            registerService(printerWebSocketService);\n        }\n\n        // Add WebSocket Serial Service\n        Config.Serial serialConfig = config.getSerial();\n        if (serialConfig.isEnabled()) {\n            serialConfig.getMappings().forEach(mapping -> {\n                try {\n                    log.info(\"Starting SerialWebSocketService: {}\", mapping.toString());\n                    SerialWebSocketService serialWebSocketService = new SerialWebSocketService(mapping);\n                    serialWebSocketService.start();\n\n                    registerService(serialWebSocketService);\n\n                    javalinServer.ws(serialWebSocketService.getChannel(), ws -> {\n                        ws.onConnect(ctx -> {\n                            log.info(\"{} connected to {}\", ctx.host(), serialWebSocketService.getChannel());\n\n                            addSocketToChannel(serialWebSocketService.getChannel(), ctx);\n                        });\n\n                        ws.onClose(ctx -> {\n                            log.info(\"{} disconnected from {}\", ctx.host(), serialWebSocketService.getChannel());\n\n                            removeSocketFromChannel(serialWebSocketService.getChannel(), ctx);\n                        });\n\n                        ws.onMessage(ctx -> {\n                            log.info(\"{} sent message to {}: {}\", ctx.host(), serialWebSocketService.getChannel(), ctx.message());\n\n                            messageToService(serialWebSocketService.getChannel(), ctx.message());\n                        });\n\n                        ws.onBinaryMessage(ctx -> {\n                            log.info(\"{} sent binary message to {}: {}\", ctx.host(), serialWebSocketService.getChannel(), ctx.data());\n\n                            messageToService(serialWebSocketService.getChannel(), ctx.data());\n                        });\n                    });\n                } catch (Exception e) {\n                    String message = \"Failed to start SerialWebSocketService for \" + mapping.getType() + \": \" + e.getMessage();\n                    log.error(message);\n\n                    try {\n                        messageToService(\"/notification\", objectMapper.writeValueAsString(new NotificationDTO(\"ERROR\", \"Serial\", message)));\n                    } catch (JsonProcessingException ex) {\n                        log.error(\"Failed to send notification: {}\", ex.getMessage());\n                    }\n                }\n            });\n        }\n\n        // Add HTTP Auth\n        javalinServer.before(ctx -> {\n            if (serverConfig.getAuthentication().isEnabled()) {\n                try {\n                    // Bearer Token\n                    if (Optional.ofNullable(ctx.header(\"Authorization\")).orElse(\"\").endsWith(serverConfig.getAuthentication().getToken())) {\n                        return;\n                    }\n\n                    // Basic Auth\n                    if (ctx.basicAuthCredentials() != null && Objects.equals(ctx.basicAuthCredentials().getPassword(), serverConfig.getAuthentication().getToken())) {\n                        return;\n                    }\n                } catch (Exception e) {\n                    // NOOP\n                }\n\n                ctx.header(\"WWW-Authenticate\", \"Basic realm=\\\"Token required\\\"\");\n                ctx.res().sendError(401, \"Token mismatch\");\n            }\n        });\n\n        // Add HTTP Service\n        javalinServer.get(\"/config.json\", ctx -> {\n            ctx.contentType(ContentType.APPLICATION_JSON).result(configService.getConfig().toJson());\n        });\n\n        javalinServer.put(\"/config.json\", ctx -> {\n            configService.loadFromJson(ctx.body());\n            configService.save();\n\n            messageToService(\"/notification\", objectMapper.writeValueAsString(new NotificationDTO(\"INFO\", \"Setting\", \"Setting saved successfully\")));\n\n            ctx.contentType(ContentType.APPLICATION_JSON).result(configService.getConfig().toJson());\n        });\n\n        javalinServer.get(\"/system/printers.json\", ctx -> {\n            ArrayList<PrintServiceDTO> dtos = new ArrayList<>();\n            for (PrintService service : PrinterJob.lookupPrintServices()) {\n                dtos.add(new PrintServiceDTO(service.getName(), \"\"));\n            }\n\n            ctx.contentType(ContentType.APPLICATION_JSON).result(objectMapper.writeValueAsString(dtos));\n        });\n\n        javalinServer.get(\"/system/serials.json\", ctx -> {\n            ArrayList<SerialPortDTO> dtos = new ArrayList<>();\n            for (SerialPort port : SerialPort.getCommPorts()) {\n                dtos.add(new SerialPortDTO(port.getSystemPortName(), port.getPortDescription(), port.getManufacturer()));\n            }\n\n            ctx.contentType(ContentType.APPLICATION_JSON).result(objectMapper.writeValueAsString(dtos));\n        });\n\n        javalinServer.get(\"/system/version.json\", ctx -> {\n            VersionDTO dto = new VersionDTO(Constants.APP_NAME, Constants.APP_ID, Constants.VERSION);\n\n            ctx.contentType(ContentType.APPLICATION_JSON).result(objectMapper.writeValueAsString(dto));\n        });\n\n        javalinServer.post(\"/system/restart.json\", ctx -> {\n            stop();\n            ThreadUtil.silentSleep(500);\n            start();\n\n            messageToService(\"/notification\", objectMapper.writeValueAsString(new NotificationDTO(\"INFO\", \"Restart\", \"Server restarted successfully\")));\n        });\n\n        try {\n            javalinServer.start(serverConfig.getBind(), serverConfig.getPort());\n            log.info(\"{} {} running on {}\", Constants.APP_NAME, Constants.VERSION, serverConfig.getUri());\n        } catch (JavalinBindException e) {\n            log.info(\"Unable to bind port, another instance is already running?\");\n            System.exit(1);\n        }\n    }\n\n    synchronized public void stop() throws Exception {\n        for (Iterator<WebSocketServiceInterface> it = services.iterator(); it.hasNext(); ) {\n            WebSocketServiceInterface service = it.next();\n            unregisterService(service);\n            service.stop();\n            it.remove();\n        }\n\n        javalinServer.stop();\n    }\n\n    /*\n     * Service to Server listener\n     */\n    @Override\n    public void messageToServer(String channel, String message) {\n        log.debug(\"Received data from channel: {}, Data: {}\", channel, message);\n\n        ConcurrentLinkedQueue<WsContext> connectionList = socketChannelSubscriptions.getOrDefault(channel, new ConcurrentLinkedQueue<>());\n\n        for (Iterator<WsContext> it = connectionList.iterator(); it.hasNext(); ) {\n            try {\n                WsContext conn = it.next();\n                conn.send(message);\n            } catch (Exception e) {\n                log.warn(\"Exception {}: {}, removing connection from list\", e.getClass().getSimpleName(), e.getMessage());\n                it.remove();\n            }\n        }\n    }\n\n    @Override\n    public void messageToServer(String channel, byte[] message) {\n        log.debug(\"Received data from channel: {}, Data: {}\", channel, message);\n\n        ConcurrentLinkedQueue<WsContext> connectionList = socketChannelSubscriptions.getOrDefault(channel, new ConcurrentLinkedQueue<>());\n\n        for (Iterator<WsContext> it = connectionList.iterator(); it.hasNext(); ) {\n            WsContext conn = it.next();\n            try {\n                conn.send(ByteBuffer.wrap(message));\n            } catch (Exception e) {\n                log.warn(\"Exception: Removing connection from list\");\n                it.remove();\n            }\n        }\n    }\n\n    /*\n     * Service to Service listener\n     */\n    @Override\n    public void messageToService(String channel, String message) {\n        ConcurrentLinkedQueue<WebSocketServiceInterface> services = getServicesForChannel(channel);\n        for (WebSocketServiceInterface service : services) {\n            log.debug(\"Sending: {} to channel: {}, service = {}\", message, channel, service.getClass().getSimpleName());\n\n            service.messageToService(message);\n        }\n    }\n\n    @Override\n    public void messageToService(String channel, byte[] bytes) {\n        ConcurrentLinkedQueue<WebSocketServiceInterface> services = getServicesForChannel(channel);\n        for (WebSocketServiceInterface service : services) {\n            log.debug(\"Sending: {} to channel: {}, service = {}\", bytes, channel, service.getClass().getSimpleName());\n\n            service.messageToService(bytes);\n        }\n    }\n\n    @Override\n    public void registerService(WebSocketServiceInterface service) {\n        service.onRegister(this);\n        addServiceToChannel(service.getChannel(), service);\n    }\n\n    @Override\n    public void unregisterService(WebSocketServiceInterface service) {\n        service.onUnregister();\n        removeServiceFromChannel(service.getChannel(), service);\n    }\n\n    /*\n     * Socket to Channel operations\n     */\n    private ConcurrentLinkedQueue<WsContext> getSocketsForChannel(String channel) {\n        return socketChannelSubscriptions.getOrDefault(channel, new ConcurrentLinkedQueue<>());\n    }\n\n    void addSocketToChannel(String channel, WsContext socket) {\n        ConcurrentLinkedQueue<WsContext> connectionList = getSocketsForChannel(channel);\n        connectionList.add(socket);\n        socketChannelSubscriptions.put(channel, connectionList);\n    }\n\n    private void removeSocketFromChannel(String channel, WsContext socket) {\n        ConcurrentLinkedQueue<WsContext> connectionList = getSocketsForChannel(channel);\n        connectionList.remove(socket);\n        socketChannelSubscriptions.put(channel, connectionList);\n    }\n\n    /*\n     * Service to Channel operations\n     */\n    private ConcurrentLinkedQueue<WebSocketServiceInterface> getServicesForChannel(String channel) {\n        ConcurrentLinkedQueue<WebSocketServiceInterface> services = new ConcurrentLinkedQueue<>();\n\n        services.addAll(serviceChannelSubscriptions.getOrDefault(channel, new ConcurrentLinkedQueue<>()));\n        services.addAll(serviceChannelSubscriptions.getOrDefault(\"*\", new ConcurrentLinkedQueue<>()));\n\n        return services;\n    }\n\n    private void addServiceToChannel(String channel, WebSocketServiceInterface service) {\n        ConcurrentLinkedQueue<WebSocketServiceInterface> serviceList = serviceChannelSubscriptions.getOrDefault(channel, new ConcurrentLinkedQueue<>());\n\n        serviceList.add(service);\n        serviceChannelSubscriptions.put(channel, serviceList);\n\n        if (!services.contains(service)) {\n            services.add(service);\n        }\n    }\n\n    private void removeServiceFromChannel(String channel, WebSocketServiceInterface service) {\n        ConcurrentLinkedQueue<WebSocketServiceInterface> serviceList = getServicesForChannel(channel);\n        serviceList.remove(service);\n        serviceChannelSubscriptions.put(channel, serviceList);\n\n        services.remove(service);\n    }\n}\n"
  },
  {
    "path": "src/main/java/tigerworkshop/webapphardwarebridge/dtos/Config.java",
    "content": "package tigerworkshop.webapphardwarebridge.dtos;\n\nimport com.fasterxml.jackson.annotation.JsonIgnore;\nimport com.fasterxml.jackson.core.JsonProcessingException;\nimport com.fasterxml.jackson.databind.ObjectMapper;\nimport lombok.AllArgsConstructor;\nimport lombok.Data;\nimport lombok.NoArgsConstructor;\n\nimport java.nio.charset.StandardCharsets;\nimport java.util.ArrayList;\n\n@Data\n@NoArgsConstructor\npublic class Config {\n    private GUI gui = new GUI();\n    private Server server = new Server();\n    private Downloader downloader = new Downloader();\n    private Printer printer = new Printer();\n    private Serial serial = new Serial();\n\n    public String toJson() throws JsonProcessingException {\n        return new ObjectMapper().writeValueAsString(this);\n    }\n\n    @Data\n    @NoArgsConstructor\n    public static class GUI {\n        private Notification notification = new Notification();\n    }\n\n    @Data\n    @NoArgsConstructor\n    public static class Notification {\n        private boolean enabled = true;\n    }\n\n    @Data\n    @NoArgsConstructor\n    public static class Server {\n        private String address = \"127.0.0.1\";\n        private String bind = \"127.0.0.1\";\n        private int port = 12212;\n        private Authentication authentication = new Authentication();\n        private TLS tls = new TLS();\n\n        @JsonIgnore\n        public String getUri() {\n            return (tls.isEnabled() ? \"https://\" : \"http://\") + address + \":\" + port;\n        }\n    }\n\n    @Data\n    @NoArgsConstructor\n    public static class Authentication {\n        private boolean enabled = false;\n        private String token = null;\n    }\n\n    @Data\n    @NoArgsConstructor\n    public static class TLS {\n        private boolean enabled = false ;\n        private boolean selfSigned = true;\n        private String cert = \"tls/default-cert.pem\";\n        private String key = \"tls/default-key.pem\";\n        private String caBundle = null;\n    }\n\n    @Data\n    @NoArgsConstructor\n    public static class Downloader {\n        private boolean ignoreTLSCertificateError = false;\n        private double timeout = 30;\n        private String path = \"downloads\";\n    }\n\n    @Data\n    @NoArgsConstructor\n    public static class Printer {\n        private boolean enabled = true;\n        private boolean autoAddUnknownType = false;\n        private boolean fallbackToDefault = false;\n        private ArrayList<PrinterMapping> mappings = new ArrayList<>();\n    }\n\n    @Data\n    @NoArgsConstructor\n    public static class Serial {\n        private boolean enabled = true;\n        private ArrayList<SerialMapping> mappings = new ArrayList<>();\n    }\n\n    @Data\n    @NoArgsConstructor\n    @AllArgsConstructor\n    public static class PrinterMapping {\n        private String type;\n        private String name;\n\n        private boolean autoRotate = false;\n        private boolean resetImageableArea = true;\n        private int forceDPI = 0;\n    }\n\n    @Data\n    @NoArgsConstructor\n    @AllArgsConstructor\n    public static class SerialMapping {\n        private String type;\n        private String name;\n\n        private Integer baudRate;\n        private Integer numDataBits;\n        private Integer numStopBits;\n        private Integer parity;\n\n        private Boolean readMultipleBytes = false;\n        private String readCharset = StandardCharsets.UTF_8.toString();\n    }\n}"
  },
  {
    "path": "src/main/java/tigerworkshop/webapphardwarebridge/dtos/NotificationDTO.java",
    "content": "package tigerworkshop.webapphardwarebridge.dtos;\n\nimport lombok.AllArgsConstructor;\nimport lombok.Getter;\nimport lombok.NoArgsConstructor;\n\n@Getter\n@NoArgsConstructor\n@AllArgsConstructor\npublic class NotificationDTO {\n    public String type;\n    public String title;\n    public String message;\n}\n"
  },
  {
    "path": "src/main/java/tigerworkshop/webapphardwarebridge/dtos/PrintServiceDTO.java",
    "content": "package tigerworkshop.webapphardwarebridge.dtos;\n\nimport lombok.AllArgsConstructor;\nimport lombok.NoArgsConstructor;\n\n@NoArgsConstructor\n@AllArgsConstructor\npublic class PrintServiceDTO {\n    public String name;\n    public String description;\n}\n"
  },
  {
    "path": "src/main/java/tigerworkshop/webapphardwarebridge/dtos/SerialPortDTO.java",
    "content": "package tigerworkshop.webapphardwarebridge.dtos;\n\nimport lombok.AllArgsConstructor;\nimport lombok.NoArgsConstructor;\n\n@NoArgsConstructor\n@AllArgsConstructor\npublic class SerialPortDTO {\n    public String name;\n    public String description;\n    public String manufacturer;\n}\n"
  },
  {
    "path": "src/main/java/tigerworkshop/webapphardwarebridge/dtos/VersionDTO.java",
    "content": "package tigerworkshop.webapphardwarebridge.dtos;\n\nimport lombok.AllArgsConstructor;\nimport lombok.NoArgsConstructor;\n\n@NoArgsConstructor\n@AllArgsConstructor\npublic class VersionDTO {\n    public String appName;\n    public String appId;\n    public String version;\n}\n"
  },
  {
    "path": "src/main/java/tigerworkshop/webapphardwarebridge/interfaces/WebSocketServerInterface.java",
    "content": "package tigerworkshop.webapphardwarebridge.interfaces;\n\n\npublic interface WebSocketServerInterface {\n    void messageToServer(String channel, String message);\n\n    void messageToServer(String channel, byte[] message);\n\n    void messageToService(String channel, String message);\n\n    void messageToService(String channel, byte[] message);\n\n    void registerService(WebSocketServiceInterface service);\n\n    void unregisterService(WebSocketServiceInterface service);\n}\n"
  },
  {
    "path": "src/main/java/tigerworkshop/webapphardwarebridge/interfaces/WebSocketServiceInterface.java",
    "content": "package tigerworkshop.webapphardwarebridge.interfaces;\n\npublic interface WebSocketServiceInterface {\n    void start();\n\n    void stop();\n\n    void messageToService(String message);\n\n    void messageToService(byte[] message);\n\n    void onRegister(WebSocketServerInterface server);\n\n    void onUnregister();\n\n    String getChannel();\n}\n"
  },
  {
    "path": "src/main/java/tigerworkshop/webapphardwarebridge/responses/PrintDocument.java",
    "content": "package tigerworkshop.webapphardwarebridge.responses;\n\nimport com.fasterxml.jackson.annotation.JsonProperty;\nimport lombok.Getter;\nimport lombok.ToString;\nimport tigerworkshop.webapphardwarebridge.utils.AnnotatedPrintable;\n\nimport java.util.ArrayList;\nimport java.util.UUID;\n\n@ToString\n@Getter\npublic class PrintDocument {\n    String type;\n    String url;\n    String id;\n    UUID uuid = UUID.randomUUID();\n    Integer qty = 1;\n    @JsonProperty(\"file_content\") String fileContent;\n    @JsonProperty(\"raw_content\") String rawContent;\n    ArrayList<AnnotatedPrintable.AnnotatedPrintableAnnotation> extras = new ArrayList<>();\n}"
  },
  {
    "path": "src/main/java/tigerworkshop/webapphardwarebridge/responses/PrintResult.java",
    "content": "package tigerworkshop.webapphardwarebridge.responses;\n\nimport lombok.AllArgsConstructor;\nimport lombok.NoArgsConstructor;\nimport lombok.ToString;\n\n@ToString\n@NoArgsConstructor\n@AllArgsConstructor\npublic class PrintResult {\n    public Boolean success;\n    public String message;\n    public String id;\n    public String printerName;\n}\n"
  },
  {
    "path": "src/main/java/tigerworkshop/webapphardwarebridge/services/ConfigService.java",
    "content": "package tigerworkshop.webapphardwarebridge.services;\n\nimport com.fasterxml.jackson.core.JsonProcessingException;\nimport com.fasterxml.jackson.databind.DeserializationFeature;\nimport com.fasterxml.jackson.databind.ObjectMapper;\nimport lombok.Getter;\nimport lombok.extern.log4j.Log4j2;\nimport tigerworkshop.webapphardwarebridge.dtos.Config;\n\nimport java.io.File;\nimport java.io.IOException;\n\n@Log4j2\npublic class ConfigService {\n    @Getter\n    private static final ConfigService instance = new ConfigService();\n\n    private static final String CONFIG_FILENAME = \"config.json\";\n    private static final String PRINTER_PLACEHOLDER = \"\";\n\n    private final ObjectMapper objectMapper = new ObjectMapper()\n            .configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);\n\n    @Getter\n    private Config config = new Config();\n\n    private ConfigService() {\n        try {\n            loadFromFile(CONFIG_FILENAME);\n        } catch (Exception e) {\n            log.warn(\"Failed loading config, creating new file\");\n            save();\n        }\n    }\n\n    public void loadFromJson(String json) throws JsonProcessingException {\n        log.info(\"Loading config from JSON: {}\", json);\n        config = objectMapper.readValue(json, Config.class);\n    }\n\n    public void loadFromFile(String filename) throws IOException {\n        log.info(\"Loading config from file: {}\", filename);\n        config = objectMapper.readValue(new File(filename), Config.class);\n    }\n\n    public void save() {\n        try {\n            objectMapper.writerWithDefaultPrettyPrinter().writeValue(new File(CONFIG_FILENAME), config);\n        } catch (Exception e) {\n            log.error(\"Failed to save config file\", e);\n        }\n    }\n\n    public void addPrintTypeToList(String printType) {\n        config.getPrinter().getMappings().add(new Config.PrinterMapping(printType, PRINTER_PLACEHOLDER, false, true, 0));\n        save();\n    }\n}\n"
  },
  {
    "path": "src/main/java/tigerworkshop/webapphardwarebridge/services/DocumentService.java",
    "content": "package tigerworkshop.webapphardwarebridge.services;\n\nimport lombok.Getter;\nimport lombok.extern.log4j.Log4j2;\nimport org.apache.commons.io.FileUtils;\nimport org.apache.commons.io.FilenameUtils;\nimport tigerworkshop.webapphardwarebridge.dtos.Config;\nimport tigerworkshop.webapphardwarebridge.responses.PrintDocument;\n\nimport javax.net.ssl.HttpsURLConnection;\nimport javax.net.ssl.SSLContext;\nimport javax.net.ssl.TrustManager;\nimport javax.net.ssl.X509TrustManager;\nimport java.io.File;\nimport java.io.IOException;\nimport java.net.HttpURLConnection;\nimport java.net.MalformedURLException;\nimport java.net.URL;\nimport java.net.URLConnection;\nimport java.nio.file.Files;\nimport java.security.cert.X509Certificate;\nimport java.util.Base64;\n\n@Log4j2\npublic class DocumentService {\n    @Getter\n    private static final DocumentService instance = new DocumentService();\n    private static final Config.Downloader downloaderConfig = ConfigService.getInstance().getConfig().getDownloader();\n\n    public File prepareDocument(PrintDocument printDocument) throws Exception {\n        FileUtils.forceMkdir(new File(downloaderConfig.getPath()));\n\n        if (printDocument.getUrl() == null && printDocument.getFileContent() == null) {\n            throw new Exception(\"Both URL and File Content are null\");\n        }\n\n        File output = getOutputFile(printDocument);\n        if (printDocument.getFileContent() != null) {\n            byte[] bytes = Base64.getDecoder().decode(printDocument.getFileContent());\n            Files.write(output.toPath(), bytes);\n        } else {\n            URL url = new URL(printDocument.getUrl());\n            download(url, getOutputFile(printDocument));\n        }\n\n        return output;\n    }\n\n    public void deleteDocument(PrintDocument printDocument) throws IOException {\n        FileUtils.deleteQuietly(getOutputFile(printDocument));\n    }\n\n    private File getOutputFile(PrintDocument printDocument) throws MalformedURLException {\n        File output;\n        if (printDocument.getFileContent() != null) {\n            output = new File(downloaderConfig.getPath() + \"/\" + printDocument.getUuid() + \"-\" + printDocument.getUrl());\n        } else {\n            URL url = new URL(printDocument.getUrl());\n            output = new File(downloaderConfig.getPath() + \"/\" + printDocument.getUuid() + \"-\" + FilenameUtils.getName(url.getPath()));\n        }\n        return output;\n    }\n\n    private void download(URL url, File outputFile) throws Exception {\n        log.info(\"Downloading file from: {}\", url);\n\n        long timeStart = System.currentTimeMillis();\n\n        if (downloaderConfig.isIgnoreTLSCertificateError()) {\n            TrustManager[] trustAllCerts = new TrustManager[]{\n                    new X509TrustManager() {\n                        public X509Certificate[] getAcceptedIssuers() {\n                            return null;\n                        }\n\n                        public void checkClientTrusted(X509Certificate[] certs, String authType) {\n                        }\n\n                        public void checkServerTrusted(X509Certificate[] certs, String authType) {\n                        }\n\n                    }\n            };\n\n            SSLContext sc = SSLContext.getInstance(\"SSL\");\n            sc.init(null, trustAllCerts, new java.security.SecureRandom());\n            HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());\n        }\n\n        URLConnection urlConnection = url.openConnection();\n        urlConnection.setConnectTimeout((int) downloaderConfig.getTimeout() * 1000);\n        urlConnection.setReadTimeout((int) downloaderConfig.getTimeout() * 1000);\n        urlConnection.connect();\n\n        int contentLength = urlConnection.getContentLength();\n        int responseCode;\n        if (urlConnection instanceof HttpsURLConnection) {\n            responseCode = ((HttpsURLConnection) urlConnection).getResponseCode();\n        } else {\n            responseCode = ((HttpURLConnection) urlConnection).getResponseCode();\n        }\n\n        log.trace(\"Content Length: {}\", contentLength);\n        log.trace(\"Response Code: {}\", responseCode);\n\n        // Status code mismatch\n        if (responseCode != 200) {\n            throw new IOException(\"HTTP Status Code: \" + responseCode);\n        }\n\n        FileUtils.copyInputStreamToFile(urlConnection.getInputStream(), outputFile);\n\n        long timeFinish = System.currentTimeMillis();\n        log.info(\"File {} downloaded in {} ms\", outputFile.getName(), timeFinish - timeStart);\n    }\n}\n"
  },
  {
    "path": "src/main/java/tigerworkshop/webapphardwarebridge/utils/AnnotatedPrintable.java",
    "content": "package tigerworkshop.webapphardwarebridge.utils;\n\nimport lombok.Data;\nimport lombok.extern.log4j.Log4j2;\n\nimport java.awt.*;\nimport java.awt.geom.AffineTransform;\nimport java.awt.print.PageFormat;\nimport java.awt.print.Printable;\nimport java.awt.print.PrinterException;\nimport java.util.ArrayList;\n\n@Log4j2\npublic class AnnotatedPrintable implements Printable {\n    private final Printable printable;\n    private final ArrayList<AnnotatedPrintableAnnotation> annotatedPrintableAnnotationArrayList = new ArrayList<>();\n\n    private static final Double MM_TO_PPI = 2.8346457;\n\n    public AnnotatedPrintable(Printable printable) {\n        this.printable = printable;\n    }\n\n    public void addAnnotation(AnnotatedPrintableAnnotation annotatedPrintableAnnotation) {\n        annotatedPrintableAnnotationArrayList.add(annotatedPrintableAnnotation);\n    }\n\n    @Override\n    public int print(Graphics graphics, PageFormat pageFormat, int pageIndex) throws PrinterException {\n        int result = printable.print(graphics, pageFormat, pageIndex);\n\n        if (annotatedPrintableAnnotationArrayList.isEmpty()) {\n            return result;\n        }\n\n        if (result == PAGE_EXISTS) {\n            Graphics2D graphics2D = (Graphics2D) graphics;\n\n            // On Windows we need getDefaultTransform() to print in correct scale\n            // But on Mac it causes NullPointerException, however a blank AffineTransform works\n            try {\n                graphics2D.setTransform(graphics2D.getDeviceConfiguration().getDefaultTransform());\n            } catch (Exception e) {\n                graphics2D.setTransform(new AffineTransform());\n            }\n\n            float clipX = (float) graphics2D.getClipBounds().getX();\n            float clipY = (float) graphics2D.getClipBounds().getY();\n\n            // Catch Exceptions otherwise blank page occur while exceptions silently handled\n            try {\n                for (AnnotatedPrintableAnnotation annotatedPrintableAnnotation : annotatedPrintableAnnotationArrayList) {\n                    if (annotatedPrintableAnnotation.getText() == null) {\n                        log.warn(\"annotatedPrintableAnnotation.getText() is null\");\n                        continue;\n                    }\n\n                    float realX = (float) (clipX + annotatedPrintableAnnotation.getX() * MM_TO_PPI);\n                    float realY = (float) (clipY + annotatedPrintableAnnotation.getY() * MM_TO_PPI);\n\n                    int isBold = annotatedPrintableAnnotation.getBold() != null ? Font.BOLD : Font.PLAIN;\n                    int fontSize = annotatedPrintableAnnotation.getSize() != null ? annotatedPrintableAnnotation.getSize() : 10;\n\n                    Font font = new Font(\"Sans-Serif\", isBold, fontSize);\n                    graphics2D.setColor(Color.BLACK);\n                    graphics2D.setFont(font);\n                    graphics2D.drawString(annotatedPrintableAnnotation.getText(), realX, realY);\n                }\n            } catch (Exception e) {\n                log.error(e.getMessage(), e);\n            }\n\n        }\n\n        return result;\n    }\n\n    @Data\n    public static class AnnotatedPrintableAnnotation {\n        private String text;\n        private Float x;\n        private Float y;\n        private Integer size;\n        private Boolean bold;\n    }\n}\n"
  },
  {
    "path": "src/main/java/tigerworkshop/webapphardwarebridge/utils/CertificateGenerator.java",
    "content": "package tigerworkshop.webapphardwarebridge.utils;\n\nimport lombok.extern.log4j.Log4j2;\nimport org.bouncycastle.asn1.x500.X500Name;\nimport org.bouncycastle.asn1.x509.Extension;\nimport org.bouncycastle.asn1.x509.GeneralName;\nimport org.bouncycastle.asn1.x509.GeneralNames;\nimport org.bouncycastle.asn1.x509.SubjectPublicKeyInfo;\nimport org.bouncycastle.cert.X509CertificateHolder;\nimport org.bouncycastle.cert.X509v3CertificateBuilder;\nimport org.bouncycastle.cert.jcajce.JcaX509CertificateConverter;\nimport org.bouncycastle.jce.provider.BouncyCastleProvider;\nimport org.bouncycastle.openssl.jcajce.JcaPEMWriter;\nimport org.bouncycastle.openssl.jcajce.JcaPKCS8Generator;\nimport org.bouncycastle.operator.ContentSigner;\nimport org.bouncycastle.operator.jcajce.JcaContentSignerBuilder;\n\nimport java.io.File;\nimport java.io.FileWriter;\nimport java.io.IOException;\nimport java.math.BigInteger;\nimport java.security.*;\nimport java.security.cert.X509Certificate;\nimport java.util.Date;\nimport java.util.regex.Pattern;\n\n@Log4j2\npublic class CertificateGenerator {\n    private static final String CERTIFICATE_ALGORITHM = \"RSA\";\n    private static final String CERTIFICATE_ISSUER = \"CN=127.0.0.1\";\n    private static final String CERTIFICATE_DOMAIN = \"CN=127.0.0.1\";\n    private static final int CERTIFICATE_BITS = 2048;\n\n    private static final String IPV4_REGEX = \"(([0-1]?[0-9]{1,2}\\\\.)|(2[0-4][0-9]\\\\.)|(25[0-5]\\\\.)){3}(([0-1]?[0-9]{1,2})|(2[0-4][0-9])|(25[0-5]))\";\n    private static final Pattern IPV4_PATTERN = Pattern.compile(IPV4_REGEX);\n\n    public static void generateSelfSignedCertificate(String address, String certificatePath, String keyPath) {\n        Security.addProvider(new BouncyCastleProvider());\n\n        if (!isCertificateAndKeyExist(certificatePath, keyPath)) {\n            try {\n                log.info(\"Certificate or private key does not exist, attempt to generate.\");\n\n                KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance(CERTIFICATE_ALGORITHM);\n                keyPairGenerator.initialize(CERTIFICATE_BITS, new SecureRandom());\n                KeyPair keyPair = keyPairGenerator.generateKeyPair();\n\n                X500Name issuer = new X500Name(CERTIFICATE_ISSUER);\n                X500Name subject = new X500Name(CERTIFICATE_DOMAIN);\n                BigInteger serialNumber = new BigInteger(64, new SecureRandom());\n                Date validFrom = new Date();\n                Date validTo = new Date(System.currentTimeMillis() + (1000L * 60 * 60 * 24 * 365 * 10));\n                SubjectPublicKeyInfo subPubKeyInfo = SubjectPublicKeyInfo.getInstance(keyPair.getPublic().getEncoded());\n                ContentSigner signer = new JcaContentSignerBuilder(\"SHA256WithRSA\").setProvider(new BouncyCastleProvider()).build(keyPair.getPrivate());\n\n                X509v3CertificateBuilder certificateBuilder = new X509v3CertificateBuilder(issuer, serialNumber, validFrom, validTo, subject, subPubKeyInfo);\n\n                final GeneralNames subjectAltNames;\n                if (IPV4_PATTERN.matcher(address).matches()) {\n                    subjectAltNames = new GeneralNames(new GeneralName(GeneralName.iPAddress, address));\n                } else {\n                    subjectAltNames = new GeneralNames(new GeneralName(GeneralName.dNSName, address));\n                }\n                certificateBuilder.addExtension(Extension.subjectAlternativeName, false, subjectAltNames);\n\n                X509CertificateHolder certificateHolder = certificateBuilder.build(signer);\n                X509Certificate cert = new JcaX509CertificateConverter().getCertificate(certificateHolder);\n\n                log.info(\"Certificate and private key generated.\");\n\n                File directory = new File(\"tls\");\n                if (!directory.isDirectory()) {\n                    directory.mkdir();\n                }\n\n                saveCert(cert, certificatePath);\n                saveKey(keyPair.getPrivate(), keyPath);\n            } catch (Exception e) {\n                log.error(e.getMessage(), e);\n            }\n        } else {\n            log.info(\"Certificate and private key already exists.\");\n        }\n    }\n\n    public static Boolean isCertificateAndKeyExist(String certificatePath, String keyPath) {\n        File certificate = new File(certificatePath);\n        File privateKey = new File(keyPath);\n\n        return certificate.exists() && privateKey.exists();\n    }\n\n    private static void saveCert(X509Certificate cert, String certificatePath) {\n        try {\n            JcaPEMWriter writer = new JcaPEMWriter(new FileWriter(certificatePath));\n            writer.writeObject(cert);\n            writer.close();\n        } catch (IOException e) {\n            log.error(e.getMessage(), e);\n        }\n    }\n\n    private static void saveKey(PrivateKey key, String keyPath) {\n        try {\n            JcaPEMWriter writer = new JcaPEMWriter(new FileWriter(keyPath));\n            writer.writeObject(new JcaPKCS8Generator(key, null));\n            writer.close();\n        } catch (IOException e) {\n            log.error(e.getMessage(), e);\n        }\n    }\n\n}\n"
  },
  {
    "path": "src/main/java/tigerworkshop/webapphardwarebridge/utils/ImagePrintable.java",
    "content": "package tigerworkshop.webapphardwarebridge.utils;\n\nimport java.awt.*;\nimport java.awt.print.PageFormat;\nimport java.awt.print.Printable;\n\npublic class ImagePrintable implements Printable {\n    private final Image image;\n\n    public ImagePrintable(Image image) {\n        this.image = image;\n    }\n\n    public int print(Graphics graphics, PageFormat pageFormat, int pageIndex) {\n        if (pageIndex >= 1) {\n            return Printable.NO_SUCH_PAGE;\n        }\n\n        Graphics2D g2d = (Graphics2D) graphics;\n        g2d.translate((int) pageFormat.getImageableX(), (int) pageFormat.getImageableY());\n\n        double width = pageFormat.getImageableWidth();\n        double height = pageFormat.getImageableHeight();\n\n        g2d.drawImage(image, 0, 0, (int) width, (int) height, null, null);\n\n        return Printable.PAGE_EXISTS;\n    }\n}\n"
  },
  {
    "path": "src/main/java/tigerworkshop/webapphardwarebridge/utils/ThreadUtil.java",
    "content": "package tigerworkshop.webapphardwarebridge.utils;\n\npublic class ThreadUtil {\n    public static void silentSleep(long duration) {\n        try {\n            Thread.sleep(duration);\n        } catch (Exception ignored) {\n        }\n    }\n}\n"
  },
  {
    "path": "src/main/java/tigerworkshop/webapphardwarebridge/websocketservices/PrinterWebSocketService.java",
    "content": "package tigerworkshop.webapphardwarebridge.websocketservices;\n\nimport com.fasterxml.jackson.databind.ObjectMapper;\nimport lombok.AllArgsConstructor;\nimport lombok.Getter;\nimport lombok.extern.log4j.Log4j2;\nimport org.apache.commons.codec.binary.Base64;\nimport org.apache.commons.io.FilenameUtils;\nimport org.apache.pdfbox.pdmodel.PDDocument;\nimport org.apache.pdfbox.printing.PDFPrintable;\nimport org.apache.pdfbox.printing.Scaling;\nimport tigerworkshop.webapphardwarebridge.dtos.Config;\nimport tigerworkshop.webapphardwarebridge.dtos.NotificationDTO;\nimport tigerworkshop.webapphardwarebridge.interfaces.WebSocketServerInterface;\nimport tigerworkshop.webapphardwarebridge.interfaces.WebSocketServiceInterface;\nimport tigerworkshop.webapphardwarebridge.responses.PrintDocument;\nimport tigerworkshop.webapphardwarebridge.responses.PrintResult;\nimport tigerworkshop.webapphardwarebridge.services.ConfigService;\nimport tigerworkshop.webapphardwarebridge.services.DocumentService;\nimport tigerworkshop.webapphardwarebridge.utils.AnnotatedPrintable;\nimport tigerworkshop.webapphardwarebridge.utils.ImagePrintable;\n\nimport javax.imageio.ImageIO;\nimport javax.print.*;\nimport java.awt.*;\nimport java.awt.print.*;\nimport java.io.File;\nimport java.util.Optional;\n\n@Log4j2\npublic class PrinterWebSocketService implements WebSocketServiceInterface {\n    private WebSocketServerInterface server;\n\n    private static final ConfigService configService = ConfigService.getInstance();\n    private static final DocumentService documentService = DocumentService.getInstance();\n    private static final ObjectMapper objectMapper = new ObjectMapper();\n    \n    public PrinterWebSocketService() {\n        log.info(\"Starting PrinterWebSocketService\");\n    }\n\n    @Override\n    public void start() {\n\n    }\n\n    @Override\n    public void stop() {\n\n    }\n\n    @Override\n    public void messageToService(String message) {\n        try {\n            PrintDocument printDocument = objectMapper.readValue(message, PrintDocument.class);\n            printDocument(printDocument);\n        } catch (Exception e) {\n            log.error(e.getMessage(), e);\n        }\n    }\n\n    @Override\n    public void messageToService(byte[] message) {\n        log.error(\"PrinterWebSocketService onDataReceived: binary data not supported\");\n    }\n\n    @Override\n    public void onRegister(WebSocketServerInterface server) {\n        this.server = server;\n    }\n\n    @Override\n    public void onUnregister() {\n        this.server = null;\n    }\n\n    @Override\n    public String getChannel() {\n        return \"/printer\";\n    }\n\n    /**\n     * Prints a PrintDocument\n     */\n    public void printDocument(PrintDocument printDocument) throws Exception {\n        log.info(\"Printing Document {}, {}\", printDocument.getType(), printDocument.getUrl());\n\n        PrinterSearchResult printerSearchResult = null;\n        try {\n            printerSearchResult = searchPrinterForType(printDocument.getType());\n\n            server.messageToService(\"/notification\", objectMapper.writeValueAsString(new NotificationDTO(\"INFO\", \"Printing \" + printDocument.getType(), printDocument.getUrl())));\n\n            if (isRaw(printDocument)) {\n                printRaw(printDocument, printerSearchResult);\n            } else if (isImage(printDocument)) {\n                printImage(printDocument, printerSearchResult);\n            } else if (isPDF(printDocument)) {\n                printPDF(printDocument, printerSearchResult);\n            } else {\n                throw new Exception(\"Unknown file type: \" + printDocument.getUrl());\n            }\n\n            server.messageToServer(getChannel(), objectMapper.writeValueAsString(new PrintResult(true, \"Success\", printDocument.getId(), printerSearchResult.getName())));\n        } catch (Exception e) {\n            String errorMessage = e.getMessage();\n\n            if (e instanceof PrinterAbortException) {\n                errorMessage = \"Printing aborted\";\n            }\n\n            log.error(\"Print Error: {}, {}\", e.getClass().getName(), errorMessage);\n\n            if (!isRaw(printDocument)) {\n                log.error(\"Print Error: Deleting downloaded document\");\n                documentService.deleteDocument(printDocument);\n            }\n\n            server.messageToService(\"/notification\", objectMapper.writeValueAsString(new NotificationDTO(\"ERROR\", \"Print Error \" + printDocument.getType(), errorMessage)));\n\n            server.messageToServer(getChannel(), objectMapper.writeValueAsString(new PrintResult(false, errorMessage, printDocument.getId(), printerSearchResult != null ? printerSearchResult.getName() : null)));\n        }\n    }\n\n    /**\n     * Return if PrintDocument is raw\n     */\n    private Boolean isRaw(PrintDocument printDocument) {\n        return printDocument.getRawContent() != null && !printDocument.getRawContent().isEmpty();\n    }\n\n    /**\n     * Return if PrintDocument is image\n     */\n    private Boolean isImage(PrintDocument printDocument) {\n        String filename = FilenameUtils.getName(printDocument.getUrl());\n\n        return filename.matches(\"^.*\\\\.(jpg|jpeg|png|gif)$\");\n    }\n\n    /**\n     * Return if PrintDocument is PDF\n     */\n    private Boolean isPDF(PrintDocument printDocument) {\n        String filename = FilenameUtils.getName(printDocument.getUrl());\n\n        return filename.matches(\"^.*\\\\.(pdf)$\");\n    }\n\n    /**\n     * Prints raw bytes to specified printer.\n     */\n    private void printRaw(PrintDocument printDocument, PrinterSearchResult printerSearchResult) throws PrintException {\n        log.debug(\"printRaw::{}\", printDocument);\n        long timeStart = System.currentTimeMillis();\n\n        byte[] bytes = Base64.decodeBase64(printDocument.getRawContent());\n\n        DocPrintJob docPrintJob = printerSearchResult.getDocPrintJob();\n        Doc doc = new SimpleDoc(bytes, DocFlavor.BYTE_ARRAY.AUTOSENSE, null);\n        docPrintJob.print(doc, null);\n\n        long timeFinish = System.currentTimeMillis();\n        log.info(\"printRaw finished in {} ms\", timeFinish - timeStart);\n    }\n\n    /**\n     * Prints image to specified printer.\n     */\n    private void printImage(PrintDocument printDocument, PrinterSearchResult printerSearchResult) throws Exception {\n        log.debug(\"printImage::{}\", printDocument);\n\n        File file = documentService.prepareDocument(printDocument);\n        String path = file.getPath();\n        String filename = file.getName();\n\n        long timeStart = System.currentTimeMillis();\n\n        PrinterJob job = PrinterJob.getPrinterJob();\n        job.setPrintService(printerSearchResult.getDocPrintJob().getPrintService());\n\n        PageFormat pageFormat = getPageFormat(job, printerSearchResult);\n\n        Image image = ImageIO.read(new File(path));\n\n        Book book = new Book();\n        AnnotatedPrintable printable = new AnnotatedPrintable(new ImagePrintable(image));\n\n        for (AnnotatedPrintable.AnnotatedPrintableAnnotation printDocumentExtra : printDocument.getExtras()) {\n            printable.addAnnotation(printDocumentExtra);\n        }\n\n        book.append(printable, pageFormat);\n\n        job.setPageable(book);\n        job.setJobName(filename);\n        job.setCopies(printDocument.getQty());\n        job.print();\n\n        long timeFinish = System.currentTimeMillis();\n\n        log.info(\"printImage {} finished in {} ms\", filename, timeFinish - timeStart);\n    }\n\n    /**\n     * Prints PDF to specified printer.\n     */\n    private void printPDF(PrintDocument printDocument, PrinterSearchResult printerSearchResult) throws Exception {\n        log.debug(\"printPDF::{}\", printDocument);\n\n        File file = documentService.prepareDocument(printDocument);\n        String path = file.getPath();\n        String filename = file.getName();\n\n        long timeStart = System.currentTimeMillis();\n\n        DocPrintJob docPrintJob = printerSearchResult.getDocPrintJob();\n\n        PrinterJob job = PrinterJob.getPrinterJob();\n        job.setPrintService(docPrintJob.getPrintService());\n\n        PageFormat pageFormat = getPageFormat(job, printerSearchResult);\n\n        try (PDDocument document = PDDocument.load(new File(path))) {\n            Book book = new Book();\n            for (int i = 0; i < document.getNumberOfPages(); i += 1) {\n                // Rotate Page Automatically\n                PageFormat eachPageFormat = (PageFormat) pageFormat.clone();\n\n                if (printerSearchResult.getMapping().isAutoRotate()) {\n                    if (document.getPage(i).getCropBox().getWidth() > document.getPage(i).getCropBox().getHeight()) {\n                        log.debug(\"Auto rotation result: LANDSCAPE\");\n                        eachPageFormat.setOrientation(PageFormat.LANDSCAPE);\n                    } else {\n                        log.debug(\"Auto rotation result: PORTRAIT\");\n                        eachPageFormat.setOrientation(PageFormat.PORTRAIT);\n                    }\n                }\n\n                PDFPrintable pdfPrintable = new PDFPrintable(document, Scaling.SHRINK_TO_FIT, false, printerSearchResult.getMapping().getForceDPI());\n\n                // Annotate Printable\n                AnnotatedPrintable annotatedPrintable = new AnnotatedPrintable(pdfPrintable);\n                for (AnnotatedPrintable.AnnotatedPrintableAnnotation printDocumentExtra : printDocument.getExtras()) {\n                    annotatedPrintable.addAnnotation(printDocumentExtra);\n                }\n\n                book.append(annotatedPrintable, eachPageFormat);\n            }\n\n            job.setPageable(book);\n            job.setJobName(filename);\n            job.setCopies(printDocument.getQty());\n            job.print();\n\n            long timeFinish = System.currentTimeMillis();\n\n            log.info(\"printPDF {} finished in {} ms\", path, timeFinish - timeStart);\n        }\n    }\n\n    private PageFormat getPageFormat(PrinterJob job, PrinterSearchResult printerSearchResult) {\n        final PageFormat pageFormat = job.defaultPage();\n\n        log.debug(\"PageFormat Size: {} x {}\", pageFormat.getWidth(), pageFormat.getHeight());\n        log.debug(\"PageFormat Imageable Size:{} x {}, XY: {}, {}\", pageFormat.getImageableWidth(), pageFormat.getImageableHeight(), pageFormat.getImageableX(), pageFormat.getImageableY());\n        log.debug(\"Paper Size: {} x {}\", pageFormat.getPaper().getWidth(), pageFormat.getPaper().getHeight());\n        log.debug(\"Paper Imageable Size: {} x {}, XY: {}, {}\", pageFormat.getPaper().getImageableWidth(), pageFormat.getPaper().getImageableHeight(), pageFormat.getPaper().getImageableX(), pageFormat.getPaper().getImageableY());\n\n        // Reset Imageable Area\n        if (printerSearchResult.getMapping().isResetImageableArea()) {\n            log.debug(\"PageFormat reset enabled\");\n            Paper paper = pageFormat.getPaper();\n            paper.setImageableArea(0, 0, paper.getWidth(), paper.getHeight());\n            pageFormat.setPaper(paper);\n        }\n\n        log.debug(\"Final Paper Size: {} x {}\", pageFormat.getPaper().getWidth(), pageFormat.getPaper().getHeight());\n        log.debug(\"Final Paper Imageable Size: {} x {}, XY: {}, {}\", pageFormat.getPaper().getImageableWidth(), pageFormat.getPaper().getImageableHeight(), pageFormat.getPaper().getImageableX(), pageFormat.getPaper().getImageableY());\n\n        return pageFormat;\n    }\n\n    /**\n     * Get PrinterSearchResult for specified type\n     */\n    private PrinterSearchResult searchPrinterForType(String type) throws PrinterException {\n        Optional<Config.PrinterMapping> printerMappingOptional = configService.getConfig().getPrinter().getMappings().stream().filter(it -> it.getType().equals(type)).findFirst();\n\n        if (printerMappingOptional.isPresent()) {\n            Config.PrinterMapping printerMapping = printerMappingOptional.get();\n            PrintService[] printServices = PrinterJob.lookupPrintServices();\n\n            for (PrintService printService : printServices) {\n                if (printService.getName().equalsIgnoreCase(printerMapping.getName())) {\n                    log.info(\"Sending print job type: {} to printer: {}\", type, printService.getName());\n\n                    return new PrinterSearchResult(printService.getName(), printerMapping, printService.createPrintJob(), false);\n                }\n            }\n        }\n\n         if (configService.getConfig().getPrinter().isAutoAddUnknownType()) {\n             // Add unknown type does not already exist\n             if (configService.getConfig().getPrinter().getMappings().stream().noneMatch(it -> it.getType().equals(type))) {\n                 configService.addPrintTypeToList(type);\n             }\n        }\n\n         if (configService.getConfig().getPrinter().isFallbackToDefault()) {\n             log.info(\"No mapped print job type: {}, falling back to default printer\", type);\n\n             PrintService printService = PrintServiceLookup.lookupDefaultPrintService();\n\n             if (printService == null) {\n                 throw new PrinterException(\"No default printer found\");\n             }\n\n             return new PrinterSearchResult(printService.getName(), new Config.PrinterMapping(), printService.createPrintJob(), true);\n        }\n\n         throw new PrinterException(\"No matched printer: \" + type);\n    }\n\n    @Getter\n    @AllArgsConstructor\n    private static class PrinterSearchResult {\n        private String name;\n        private Config.PrinterMapping mapping;\n        private DocPrintJob docPrintJob;\n        private Boolean isDefault;\n    }\n}\n"
  },
  {
    "path": "src/main/java/tigerworkshop/webapphardwarebridge/websocketservices/SerialWebSocketService.java",
    "content": "package tigerworkshop.webapphardwarebridge.websocketservices;\n\nimport com.fasterxml.jackson.core.JsonProcessingException;\nimport com.fasterxml.jackson.databind.ObjectMapper;\nimport com.fazecast.jSerialComm.SerialPort;\nimport lombok.extern.log4j.Log4j2;\nimport org.apache.commons.codec.binary.Hex;\nimport tigerworkshop.webapphardwarebridge.dtos.Config;\nimport tigerworkshop.webapphardwarebridge.dtos.NotificationDTO;\nimport tigerworkshop.webapphardwarebridge.interfaces.WebSocketServerInterface;\nimport tigerworkshop.webapphardwarebridge.interfaces.WebSocketServiceInterface;\nimport tigerworkshop.webapphardwarebridge.utils.ThreadUtil;\n\nimport java.nio.charset.Charset;\nimport java.util.Objects;\n\n@Log4j2\npublic class SerialWebSocketService implements WebSocketServiceInterface {\n    private WebSocketServerInterface server;\n\n    private static final ObjectMapper objectMapper = new ObjectMapper();\n\n    private final Config.SerialMapping mapping;\n    private final SerialPort serialPort;\n    private byte[] writeBuffer = {};\n\n    private Thread readThread;\n    private Thread writeThread;\n    private Thread monitorThread;\n\n    private Boolean isRunning = true;\n\n    private static final String BINARY = \"BINARY\";\n\n    public SerialWebSocketService(Config.SerialMapping newMapping) {\n        log.info(\"Starting SerialWebSocketService on {}\", newMapping.getName());\n\n        this.mapping = newMapping;\n\n        this.serialPort = SerialPort.getCommPort(newMapping.getName());\n\n        if (mapping.getBaudRate() != null) serialPort.setBaudRate(mapping.getBaudRate());\n        if (mapping.getNumDataBits() != null) serialPort.setNumDataBits(mapping.getNumDataBits());\n        if (mapping.getNumStopBits() != null) serialPort.setNumStopBits(mapping.getNumStopBits());\n        if (mapping.getParity() != null) serialPort.setParity(mapping.getParity());\n    }\n\n    @Override\n    public void start() {\n        isRunning = true;\n\n        readThread = new Thread(() -> {\n            log.debug(\"Serial Read Thread started for {}\", mapping.getName());\n\n            while (isRunning) {\n                if (serialPort.isOpen()) {\n                    int bytesAvailable = serialPort.bytesAvailable();\n                    if (bytesAvailable == 0) {\n                        // No data coming from COM portName\n                        ThreadUtil.silentSleep(10);\n                        continue;\n                    } else if (bytesAvailable == -1) {\n                        // Check if portName closed unexpected (e.g. Unplugged)\n                        serialPort.closePort();\n\n                        try {\n                            server.messageToService(\"/notification\", objectMapper.writeValueAsString(new NotificationDTO(\"WARNING\", \"Serial Port\", \"Serial \" + mapping.getName() + \"(\" + mapping.getType() + \") unplugged\")));\n                        } catch (JsonProcessingException e) {\n                            log.error(\"Failed to send notification: {}\", e.getMessage());\n                        }\n\n                        log.warn(\"Serial {} unplugged\", mapping.getName());\n\n                        continue;\n                    }\n\n                    int bytesToRead = mapping.getReadMultipleBytes() ? bytesAvailable : 1;\n\n                    byte[] receivedData = new byte[bytesToRead];\n                    serialPort.readBytes(receivedData, bytesToRead);\n\n                    if (server != null) {\n                        if (Objects.equals(mapping.getReadCharset(), BINARY)) server.messageToServer(getChannel(), receivedData);\n                        else server.messageToServer(getChannel(), new String(receivedData, Charset.forName(mapping.getReadCharset())));\n                    }\n                }\n            }\n\n            log.debug(\"Serial Read Thread stopped for {}\", mapping.getName());\n        });\n\n        writeThread = new Thread(() -> {\n            log.debug(\"Serial Write Thread started for {}\", mapping.getName());\n\n            while (isRunning) {\n                if (serialPort.isOpen()) {\n                    if (writeBuffer.length > 0) {\n                        log.trace(\"Bytes: {}\", Hex.encodeHexString(writeBuffer));\n\n                        serialPort.writeBytes(writeBuffer, writeBuffer.length);\n                        writeBuffer = new byte[]{};\n                    }\n                    ThreadUtil.silentSleep(10);\n                }\n            }\n\n            log.debug(\"Serial Write Thread stopped for {}\", mapping.getName());\n        });\n\n        monitorThread = new Thread(() -> {\n            log.debug(\"Serial Monitor Thread started for {}\", mapping.getName());\n\n            while (isRunning) {\n                if (serialPort.isOpen()) {\n                    ThreadUtil.silentSleep(1000);\n                } else {\n                    log.info(\"Trying to connect to serial @ {}\", serialPort.getSystemPortName());\n                    serialPort.openPort(1000);\n\n                    if (serialPort.isOpen()) {\n                        log.info(\"Serial {} is now open\", mapping.getName());\n                    }\n                }\n            }\n\n            log.debug(\"Serial Monitor Thread stopped for {}\", mapping.getName());\n        });\n\n        readThread.start();\n        writeThread.start();\n        monitorThread.start();\n    }\n\n    @Override\n    public void stop() {\n        log.info(\"Stopping SerialWebSocketService\");\n\n        isRunning = false;\n\n        readThread.interrupt();\n        writeThread.interrupt();\n        monitorThread.interrupt();\n\n        serialPort.closePort();\n\n        log.info(\"Stopped SerialWebSocketService\");\n    }\n\n    @Override\n    public void messageToService(String message) {\n        messageToService(message.getBytes());\n    }\n\n    @Override\n    public void messageToService(byte[] message) {\n        writeBuffer = message;\n    }\n\n    @Override\n    public void onRegister(WebSocketServerInterface newServer) {\n        this.server = newServer;\n    }\n\n    @Override\n    public void onUnregister() {\n        this.server = null;\n    }\n\n    @Override\n    public String getChannel() {\n        return \"/serial/\" + mapping.getType();\n    }\n}\n"
  },
  {
    "path": "src/main/resources/META-INF/MANIFEST.MF",
    "content": "Manifest-Version: 1.0\nMain-Class: tigerworkshop.webapphardwarebridge.GUI\nClass-Path: commons-io-2.16.1.jar jetty-security-11.0.21.jar sslcontext-\n kickstart-for-pem-8.3.6.jar commons-logging-1.2.jar kotlin-stdlib-jdk7-\n 1.9.24.jar kotlin-stdlib-jdk8-1.9.24.jar websocket-jetty-api-11.0.21.ja\n r jetty-xml-11.0.21.jar jetty-alpn-server-11.0.21.jar websocket-core-co\n mmon-11.0.21.jar log4j-core-2.23.1.jar bcpkix-jdk18on-1.78.1.jar websoc\n ket-servlet-11.0.21.jar log4j-api-2.23.1.jar javalin-6.2.0.jar websocke\n t-jetty-server-11.0.21.jar jetty-util-11.0.21.jar bcutil-jdk18on-1.78.1\n .jar websocket-jetty-common-11.0.21.jar pdfbox-2.0.31.jar jetty-alpn-co\n nscrypt-server-11.0.21.jar sslcontext-kickstart-8.3.6.jar http2-server-\n 11.0.21.jar bcprov-jdk18on-1.78.1.jar jetty-io-11.0.21.jar kotlin-stdli\n b-1.9.24.jar jetty-webapp-11.0.21.jar websocket-core-server-11.0.21.jar\n  jetty-jakarta-servlet-api-5.0.2.jar sslcontext-kickstart-for-jetty-8.3\n .6.jar jetty-server-11.0.21.jar commons-codec-1.17.1.jar jSerialComm-2.\n 11.0.jar http2-common-11.0.21.jar jackson-annotations-2.17.2.jar conscr\n ypt-openjdk-uber-2.5.2.jar httpcore5-5.2.5.jar jackson-core-2.17.2.jar \n slf4j-api-2.0.13.jar annotations-13.0.jar fontbox-2.0.31.jar http2-hpac\n k-11.0.21.jar ssl-plugin-6.2.0.jar jetty-alpn-java-server-11.0.21.jar j\n etty-servlet-11.0.21.jar log4j-slf4j2-impl-2.23.1.jar jackson-databind-\n 2.17.2.jar jetty-http-11.0.21.jar\n\n"
  },
  {
    "path": "src/main/resources/log4j2.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<configuration status=\"warn\">\n    <appenders>\n        <Console name=\"Console\" target=\"SYSTEM_OUT\">\n            <PatternLayout pattern=\"%d{HH:mm:ss.SSS} %-5level %msg%n\"/>\n        </Console>\n        <RollingFile name=\"RollingFile\" fileName=\"log/client.log\" filePattern=\"log/client-%i.log\">\n            <PatternLayout pattern=\"%d{HH:mm:ss.SSS} %-5level %logger{36}.%M() @%L - %msg%n\"/>\n            <Policies>\n                <SizeBasedTriggeringPolicy size=\"10MB\"/>\n            </Policies>\n            <DefaultRolloverStrategy max=\"5\"/>\n        </RollingFile>\n    </appenders>\n\n    <loggers>\n        <root level=\"INFO\">\n            <appender-ref ref=\"Console\" level=\"INFO\"/>\n            <appender-ref ref=\"RollingFile\" level=\"INFO\"/>\n        </root>\n    </loggers>\n</configuration>"
  },
  {
    "path": "src/main/resources/web/css/bootstrap-grid.css",
    "content": "/*!\n * Bootstrap Grid v5.2.3 (https://getbootstrap.com/)\n * Copyright 2011-2022 The Bootstrap Authors\n * Copyright 2011-2022 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n:root {\n    --bs-blue: #0d6efd;\n    --bs-indigo: #6610f2;\n    --bs-purple: #6f42c1;\n    --bs-pink: #d63384;\n    --bs-red: #dc3545;\n    --bs-orange: #fd7e14;\n    --bs-yellow: #ffc107;\n    --bs-green: #198754;\n    --bs-teal: #20c997;\n    --bs-cyan: #0dcaf0;\n    --bs-black: #000;\n    --bs-white: #fff;\n    --bs-gray: #6c757d;\n    --bs-gray-dark: #343a40;\n    --bs-gray-100: #f8f9fa;\n    --bs-gray-200: #e9ecef;\n    --bs-gray-300: #dee2e6;\n    --bs-gray-400: #ced4da;\n    --bs-gray-500: #adb5bd;\n    --bs-gray-600: #6c757d;\n    --bs-gray-700: #495057;\n    --bs-gray-800: #343a40;\n    --bs-gray-900: #212529;\n    --bs-primary: #0d6efd;\n    --bs-secondary: #6c757d;\n    --bs-success: #198754;\n    --bs-info: #0dcaf0;\n    --bs-warning: #ffc107;\n    --bs-danger: #dc3545;\n    --bs-light: #f8f9fa;\n    --bs-dark: #212529;\n    --bs-primary-rgb: 13, 110, 253;\n    --bs-secondary-rgb: 108, 117, 125;\n    --bs-success-rgb: 25, 135, 84;\n    --bs-info-rgb: 13, 202, 240;\n    --bs-warning-rgb: 255, 193, 7;\n    --bs-danger-rgb: 220, 53, 69;\n    --bs-light-rgb: 248, 249, 250;\n    --bs-dark-rgb: 33, 37, 41;\n    --bs-white-rgb: 255, 255, 255;\n    --bs-black-rgb: 0, 0, 0;\n    --bs-body-color-rgb: 33, 37, 41;\n    --bs-body-bg-rgb: 255, 255, 255;\n    --bs-font-sans-serif: system-ui, -apple-system, \"Segoe UI\", Roboto, \"Helvetica Neue\", \"Noto Sans\", \"Liberation Sans\", Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n    --bs-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n    --bs-gradient: linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));\n    --bs-body-font-family: var(--bs-font-sans-serif);\n    --bs-body-font-size: 1rem;\n    --bs-body-font-weight: 400;\n    --bs-body-line-height: 1.5;\n    --bs-body-color: #212529;\n    --bs-body-bg: #fff;\n    --bs-border-width: 1px;\n    --bs-border-style: solid;\n    --bs-border-color: #dee2e6;\n    --bs-border-color-translucent: rgba(0, 0, 0, 0.175);\n    --bs-border-radius: 0.375rem;\n    --bs-border-radius-sm: 0.25rem;\n    --bs-border-radius-lg: 0.5rem;\n    --bs-border-radius-xl: 1rem;\n    --bs-border-radius-2xl: 2rem;\n    --bs-border-radius-pill: 50rem;\n    --bs-link-color: #0d6efd;\n    --bs-link-hover-color: #0a58ca;\n    --bs-code-color: #d63384;\n    --bs-highlight-bg: #fff3cd;\n}\n\n.container,\n.container-fluid,\n.container-xxl,\n.container-xl,\n.container-lg,\n.container-md,\n.container-sm {\n    --bs-gutter-x: 1.5rem;\n    --bs-gutter-y: 0;\n    width: 100%;\n    padding-right: calc(var(--bs-gutter-x) * 0.5);\n    padding-left: calc(var(--bs-gutter-x) * 0.5);\n    margin-right: auto;\n    margin-left: auto;\n}\n\n@media (min-width: 576px) {\n    .container-sm, .container {\n        max-width: 540px;\n    }\n}\n\n@media (min-width: 768px) {\n    .container-md, .container-sm, .container {\n        max-width: 720px;\n    }\n}\n\n@media (min-width: 992px) {\n    .container-lg, .container-md, .container-sm, .container {\n        max-width: 960px;\n    }\n}\n\n@media (min-width: 1200px) {\n    .container-xl, .container-lg, .container-md, .container-sm, .container {\n        max-width: 1140px;\n    }\n}\n\n@media (min-width: 1400px) {\n    .container-xxl, .container-xl, .container-lg, .container-md, .container-sm, .container {\n        max-width: 1320px;\n    }\n}\n\n.row {\n    --bs-gutter-x: 1.5rem;\n    --bs-gutter-y: 0;\n    display: flex;\n    flex-wrap: wrap;\n    margin-top: calc(-1 * var(--bs-gutter-y));\n    margin-right: calc(-0.5 * var(--bs-gutter-x));\n    margin-left: calc(-0.5 * var(--bs-gutter-x));\n}\n\n.row > * {\n    box-sizing: border-box;\n    flex-shrink: 0;\n    width: 100%;\n    max-width: 100%;\n    padding-right: calc(var(--bs-gutter-x) * 0.5);\n    padding-left: calc(var(--bs-gutter-x) * 0.5);\n    margin-top: var(--bs-gutter-y);\n}\n\n.col {\n    flex: 1 0 0%;\n}\n\n.row-cols-auto > * {\n    flex: 0 0 auto;\n    width: auto;\n}\n\n.row-cols-1 > * {\n    flex: 0 0 auto;\n    width: 100%;\n}\n\n.row-cols-2 > * {\n    flex: 0 0 auto;\n    width: 50%;\n}\n\n.row-cols-3 > * {\n    flex: 0 0 auto;\n    width: 33.3333333333%;\n}\n\n.row-cols-4 > * {\n    flex: 0 0 auto;\n    width: 25%;\n}\n\n.row-cols-5 > * {\n    flex: 0 0 auto;\n    width: 20%;\n}\n\n.row-cols-6 > * {\n    flex: 0 0 auto;\n    width: 16.6666666667%;\n}\n\n.col-auto {\n    flex: 0 0 auto;\n    width: auto;\n}\n\n.col-1 {\n    flex: 0 0 auto;\n    width: 8.33333333%;\n}\n\n.col-2 {\n    flex: 0 0 auto;\n    width: 16.66666667%;\n}\n\n.col-3 {\n    flex: 0 0 auto;\n    width: 25%;\n}\n\n.col-4 {\n    flex: 0 0 auto;\n    width: 33.33333333%;\n}\n\n.col-5 {\n    flex: 0 0 auto;\n    width: 41.66666667%;\n}\n\n.col-6 {\n    flex: 0 0 auto;\n    width: 50%;\n}\n\n.col-7 {\n    flex: 0 0 auto;\n    width: 58.33333333%;\n}\n\n.col-8 {\n    flex: 0 0 auto;\n    width: 66.66666667%;\n}\n\n.col-9 {\n    flex: 0 0 auto;\n    width: 75%;\n}\n\n.col-10 {\n    flex: 0 0 auto;\n    width: 83.33333333%;\n}\n\n.col-11 {\n    flex: 0 0 auto;\n    width: 91.66666667%;\n}\n\n.col-12 {\n    flex: 0 0 auto;\n    width: 100%;\n}\n\n.offset-1 {\n    margin-left: 8.33333333%;\n}\n\n.offset-2 {\n    margin-left: 16.66666667%;\n}\n\n.offset-3 {\n    margin-left: 25%;\n}\n\n.offset-4 {\n    margin-left: 33.33333333%;\n}\n\n.offset-5 {\n    margin-left: 41.66666667%;\n}\n\n.offset-6 {\n    margin-left: 50%;\n}\n\n.offset-7 {\n    margin-left: 58.33333333%;\n}\n\n.offset-8 {\n    margin-left: 66.66666667%;\n}\n\n.offset-9 {\n    margin-left: 75%;\n}\n\n.offset-10 {\n    margin-left: 83.33333333%;\n}\n\n.offset-11 {\n    margin-left: 91.66666667%;\n}\n\n.g-0,\n.gx-0 {\n    --bs-gutter-x: 0;\n}\n\n.g-0,\n.gy-0 {\n    --bs-gutter-y: 0;\n}\n\n.g-1,\n.gx-1 {\n    --bs-gutter-x: 0.25rem;\n}\n\n.g-1,\n.gy-1 {\n    --bs-gutter-y: 0.25rem;\n}\n\n.g-2,\n.gx-2 {\n    --bs-gutter-x: 0.5rem;\n}\n\n.g-2,\n.gy-2 {\n    --bs-gutter-y: 0.5rem;\n}\n\n.g-3,\n.gx-3 {\n    --bs-gutter-x: 1rem;\n}\n\n.g-3,\n.gy-3 {\n    --bs-gutter-y: 1rem;\n}\n\n.g-4,\n.gx-4 {\n    --bs-gutter-x: 1.5rem;\n}\n\n.g-4,\n.gy-4 {\n    --bs-gutter-y: 1.5rem;\n}\n\n.g-5,\n.gx-5 {\n    --bs-gutter-x: 3rem;\n}\n\n.g-5,\n.gy-5 {\n    --bs-gutter-y: 3rem;\n}\n\n@media (min-width: 576px) {\n    .col-sm {\n        flex: 1 0 0%;\n    }\n\n    .row-cols-sm-auto > * {\n        flex: 0 0 auto;\n        width: auto;\n    }\n\n    .row-cols-sm-1 > * {\n        flex: 0 0 auto;\n        width: 100%;\n    }\n\n    .row-cols-sm-2 > * {\n        flex: 0 0 auto;\n        width: 50%;\n    }\n\n    .row-cols-sm-3 > * {\n        flex: 0 0 auto;\n        width: 33.3333333333%;\n    }\n\n    .row-cols-sm-4 > * {\n        flex: 0 0 auto;\n        width: 25%;\n    }\n\n    .row-cols-sm-5 > * {\n        flex: 0 0 auto;\n        width: 20%;\n    }\n\n    .row-cols-sm-6 > * {\n        flex: 0 0 auto;\n        width: 16.6666666667%;\n    }\n\n    .col-sm-auto {\n        flex: 0 0 auto;\n        width: auto;\n    }\n\n    .col-sm-1 {\n        flex: 0 0 auto;\n        width: 8.33333333%;\n    }\n\n    .col-sm-2 {\n        flex: 0 0 auto;\n        width: 16.66666667%;\n    }\n\n    .col-sm-3 {\n        flex: 0 0 auto;\n        width: 25%;\n    }\n\n    .col-sm-4 {\n        flex: 0 0 auto;\n        width: 33.33333333%;\n    }\n\n    .col-sm-5 {\n        flex: 0 0 auto;\n        width: 41.66666667%;\n    }\n\n    .col-sm-6 {\n        flex: 0 0 auto;\n        width: 50%;\n    }\n\n    .col-sm-7 {\n        flex: 0 0 auto;\n        width: 58.33333333%;\n    }\n\n    .col-sm-8 {\n        flex: 0 0 auto;\n        width: 66.66666667%;\n    }\n\n    .col-sm-9 {\n        flex: 0 0 auto;\n        width: 75%;\n    }\n\n    .col-sm-10 {\n        flex: 0 0 auto;\n        width: 83.33333333%;\n    }\n\n    .col-sm-11 {\n        flex: 0 0 auto;\n        width: 91.66666667%;\n    }\n\n    .col-sm-12 {\n        flex: 0 0 auto;\n        width: 100%;\n    }\n\n    .offset-sm-0 {\n        margin-left: 0;\n    }\n\n    .offset-sm-1 {\n        margin-left: 8.33333333%;\n    }\n\n    .offset-sm-2 {\n        margin-left: 16.66666667%;\n    }\n\n    .offset-sm-3 {\n        margin-left: 25%;\n    }\n\n    .offset-sm-4 {\n        margin-left: 33.33333333%;\n    }\n\n    .offset-sm-5 {\n        margin-left: 41.66666667%;\n    }\n\n    .offset-sm-6 {\n        margin-left: 50%;\n    }\n\n    .offset-sm-7 {\n        margin-left: 58.33333333%;\n    }\n\n    .offset-sm-8 {\n        margin-left: 66.66666667%;\n    }\n\n    .offset-sm-9 {\n        margin-left: 75%;\n    }\n\n    .offset-sm-10 {\n        margin-left: 83.33333333%;\n    }\n\n    .offset-sm-11 {\n        margin-left: 91.66666667%;\n    }\n\n    .g-sm-0,\n    .gx-sm-0 {\n        --bs-gutter-x: 0;\n    }\n\n    .g-sm-0,\n    .gy-sm-0 {\n        --bs-gutter-y: 0;\n    }\n\n    .g-sm-1,\n    .gx-sm-1 {\n        --bs-gutter-x: 0.25rem;\n    }\n\n    .g-sm-1,\n    .gy-sm-1 {\n        --bs-gutter-y: 0.25rem;\n    }\n\n    .g-sm-2,\n    .gx-sm-2 {\n        --bs-gutter-x: 0.5rem;\n    }\n\n    .g-sm-2,\n    .gy-sm-2 {\n        --bs-gutter-y: 0.5rem;\n    }\n\n    .g-sm-3,\n    .gx-sm-3 {\n        --bs-gutter-x: 1rem;\n    }\n\n    .g-sm-3,\n    .gy-sm-3 {\n        --bs-gutter-y: 1rem;\n    }\n\n    .g-sm-4,\n    .gx-sm-4 {\n        --bs-gutter-x: 1.5rem;\n    }\n\n    .g-sm-4,\n    .gy-sm-4 {\n        --bs-gutter-y: 1.5rem;\n    }\n\n    .g-sm-5,\n    .gx-sm-5 {\n        --bs-gutter-x: 3rem;\n    }\n\n    .g-sm-5,\n    .gy-sm-5 {\n        --bs-gutter-y: 3rem;\n    }\n}\n\n@media (min-width: 768px) {\n    .col-md {\n        flex: 1 0 0%;\n    }\n\n    .row-cols-md-auto > * {\n        flex: 0 0 auto;\n        width: auto;\n    }\n\n    .row-cols-md-1 > * {\n        flex: 0 0 auto;\n        width: 100%;\n    }\n\n    .row-cols-md-2 > * {\n        flex: 0 0 auto;\n        width: 50%;\n    }\n\n    .row-cols-md-3 > * {\n        flex: 0 0 auto;\n        width: 33.3333333333%;\n    }\n\n    .row-cols-md-4 > * {\n        flex: 0 0 auto;\n        width: 25%;\n    }\n\n    .row-cols-md-5 > * {\n        flex: 0 0 auto;\n        width: 20%;\n    }\n\n    .row-cols-md-6 > * {\n        flex: 0 0 auto;\n        width: 16.6666666667%;\n    }\n\n    .col-md-auto {\n        flex: 0 0 auto;\n        width: auto;\n    }\n\n    .col-md-1 {\n        flex: 0 0 auto;\n        width: 8.33333333%;\n    }\n\n    .col-md-2 {\n        flex: 0 0 auto;\n        width: 16.66666667%;\n    }\n\n    .col-md-3 {\n        flex: 0 0 auto;\n        width: 25%;\n    }\n\n    .col-md-4 {\n        flex: 0 0 auto;\n        width: 33.33333333%;\n    }\n\n    .col-md-5 {\n        flex: 0 0 auto;\n        width: 41.66666667%;\n    }\n\n    .col-md-6 {\n        flex: 0 0 auto;\n        width: 50%;\n    }\n\n    .col-md-7 {\n        flex: 0 0 auto;\n        width: 58.33333333%;\n    }\n\n    .col-md-8 {\n        flex: 0 0 auto;\n        width: 66.66666667%;\n    }\n\n    .col-md-9 {\n        flex: 0 0 auto;\n        width: 75%;\n    }\n\n    .col-md-10 {\n        flex: 0 0 auto;\n        width: 83.33333333%;\n    }\n\n    .col-md-11 {\n        flex: 0 0 auto;\n        width: 91.66666667%;\n    }\n\n    .col-md-12 {\n        flex: 0 0 auto;\n        width: 100%;\n    }\n\n    .offset-md-0 {\n        margin-left: 0;\n    }\n\n    .offset-md-1 {\n        margin-left: 8.33333333%;\n    }\n\n    .offset-md-2 {\n        margin-left: 16.66666667%;\n    }\n\n    .offset-md-3 {\n        margin-left: 25%;\n    }\n\n    .offset-md-4 {\n        margin-left: 33.33333333%;\n    }\n\n    .offset-md-5 {\n        margin-left: 41.66666667%;\n    }\n\n    .offset-md-6 {\n        margin-left: 50%;\n    }\n\n    .offset-md-7 {\n        margin-left: 58.33333333%;\n    }\n\n    .offset-md-8 {\n        margin-left: 66.66666667%;\n    }\n\n    .offset-md-9 {\n        margin-left: 75%;\n    }\n\n    .offset-md-10 {\n        margin-left: 83.33333333%;\n    }\n\n    .offset-md-11 {\n        margin-left: 91.66666667%;\n    }\n\n    .g-md-0,\n    .gx-md-0 {\n        --bs-gutter-x: 0;\n    }\n\n    .g-md-0,\n    .gy-md-0 {\n        --bs-gutter-y: 0;\n    }\n\n    .g-md-1,\n    .gx-md-1 {\n        --bs-gutter-x: 0.25rem;\n    }\n\n    .g-md-1,\n    .gy-md-1 {\n        --bs-gutter-y: 0.25rem;\n    }\n\n    .g-md-2,\n    .gx-md-2 {\n        --bs-gutter-x: 0.5rem;\n    }\n\n    .g-md-2,\n    .gy-md-2 {\n        --bs-gutter-y: 0.5rem;\n    }\n\n    .g-md-3,\n    .gx-md-3 {\n        --bs-gutter-x: 1rem;\n    }\n\n    .g-md-3,\n    .gy-md-3 {\n        --bs-gutter-y: 1rem;\n    }\n\n    .g-md-4,\n    .gx-md-4 {\n        --bs-gutter-x: 1.5rem;\n    }\n\n    .g-md-4,\n    .gy-md-4 {\n        --bs-gutter-y: 1.5rem;\n    }\n\n    .g-md-5,\n    .gx-md-5 {\n        --bs-gutter-x: 3rem;\n    }\n\n    .g-md-5,\n    .gy-md-5 {\n        --bs-gutter-y: 3rem;\n    }\n}\n\n@media (min-width: 992px) {\n    .col-lg {\n        flex: 1 0 0%;\n    }\n\n    .row-cols-lg-auto > * {\n        flex: 0 0 auto;\n        width: auto;\n    }\n\n    .row-cols-lg-1 > * {\n        flex: 0 0 auto;\n        width: 100%;\n    }\n\n    .row-cols-lg-2 > * {\n        flex: 0 0 auto;\n        width: 50%;\n    }\n\n    .row-cols-lg-3 > * {\n        flex: 0 0 auto;\n        width: 33.3333333333%;\n    }\n\n    .row-cols-lg-4 > * {\n        flex: 0 0 auto;\n        width: 25%;\n    }\n\n    .row-cols-lg-5 > * {\n        flex: 0 0 auto;\n        width: 20%;\n    }\n\n    .row-cols-lg-6 > * {\n        flex: 0 0 auto;\n        width: 16.6666666667%;\n    }\n\n    .col-lg-auto {\n        flex: 0 0 auto;\n        width: auto;\n    }\n\n    .col-lg-1 {\n        flex: 0 0 auto;\n        width: 8.33333333%;\n    }\n\n    .col-lg-2 {\n        flex: 0 0 auto;\n        width: 16.66666667%;\n    }\n\n    .col-lg-3 {\n        flex: 0 0 auto;\n        width: 25%;\n    }\n\n    .col-lg-4 {\n        flex: 0 0 auto;\n        width: 33.33333333%;\n    }\n\n    .col-lg-5 {\n        flex: 0 0 auto;\n        width: 41.66666667%;\n    }\n\n    .col-lg-6 {\n        flex: 0 0 auto;\n        width: 50%;\n    }\n\n    .col-lg-7 {\n        flex: 0 0 auto;\n        width: 58.33333333%;\n    }\n\n    .col-lg-8 {\n        flex: 0 0 auto;\n        width: 66.66666667%;\n    }\n\n    .col-lg-9 {\n        flex: 0 0 auto;\n        width: 75%;\n    }\n\n    .col-lg-10 {\n        flex: 0 0 auto;\n        width: 83.33333333%;\n    }\n\n    .col-lg-11 {\n        flex: 0 0 auto;\n        width: 91.66666667%;\n    }\n\n    .col-lg-12 {\n        flex: 0 0 auto;\n        width: 100%;\n    }\n\n    .offset-lg-0 {\n        margin-left: 0;\n    }\n\n    .offset-lg-1 {\n        margin-left: 8.33333333%;\n    }\n\n    .offset-lg-2 {\n        margin-left: 16.66666667%;\n    }\n\n    .offset-lg-3 {\n        margin-left: 25%;\n    }\n\n    .offset-lg-4 {\n        margin-left: 33.33333333%;\n    }\n\n    .offset-lg-5 {\n        margin-left: 41.66666667%;\n    }\n\n    .offset-lg-6 {\n        margin-left: 50%;\n    }\n\n    .offset-lg-7 {\n        margin-left: 58.33333333%;\n    }\n\n    .offset-lg-8 {\n        margin-left: 66.66666667%;\n    }\n\n    .offset-lg-9 {\n        margin-left: 75%;\n    }\n\n    .offset-lg-10 {\n        margin-left: 83.33333333%;\n    }\n\n    .offset-lg-11 {\n        margin-left: 91.66666667%;\n    }\n\n    .g-lg-0,\n    .gx-lg-0 {\n        --bs-gutter-x: 0;\n    }\n\n    .g-lg-0,\n    .gy-lg-0 {\n        --bs-gutter-y: 0;\n    }\n\n    .g-lg-1,\n    .gx-lg-1 {\n        --bs-gutter-x: 0.25rem;\n    }\n\n    .g-lg-1,\n    .gy-lg-1 {\n        --bs-gutter-y: 0.25rem;\n    }\n\n    .g-lg-2,\n    .gx-lg-2 {\n        --bs-gutter-x: 0.5rem;\n    }\n\n    .g-lg-2,\n    .gy-lg-2 {\n        --bs-gutter-y: 0.5rem;\n    }\n\n    .g-lg-3,\n    .gx-lg-3 {\n        --bs-gutter-x: 1rem;\n    }\n\n    .g-lg-3,\n    .gy-lg-3 {\n        --bs-gutter-y: 1rem;\n    }\n\n    .g-lg-4,\n    .gx-lg-4 {\n        --bs-gutter-x: 1.5rem;\n    }\n\n    .g-lg-4,\n    .gy-lg-4 {\n        --bs-gutter-y: 1.5rem;\n    }\n\n    .g-lg-5,\n    .gx-lg-5 {\n        --bs-gutter-x: 3rem;\n    }\n\n    .g-lg-5,\n    .gy-lg-5 {\n        --bs-gutter-y: 3rem;\n    }\n}\n\n@media (min-width: 1200px) {\n    .col-xl {\n        flex: 1 0 0%;\n    }\n\n    .row-cols-xl-auto > * {\n        flex: 0 0 auto;\n        width: auto;\n    }\n\n    .row-cols-xl-1 > * {\n        flex: 0 0 auto;\n        width: 100%;\n    }\n\n    .row-cols-xl-2 > * {\n        flex: 0 0 auto;\n        width: 50%;\n    }\n\n    .row-cols-xl-3 > * {\n        flex: 0 0 auto;\n        width: 33.3333333333%;\n    }\n\n    .row-cols-xl-4 > * {\n        flex: 0 0 auto;\n        width: 25%;\n    }\n\n    .row-cols-xl-5 > * {\n        flex: 0 0 auto;\n        width: 20%;\n    }\n\n    .row-cols-xl-6 > * {\n        flex: 0 0 auto;\n        width: 16.6666666667%;\n    }\n\n    .col-xl-auto {\n        flex: 0 0 auto;\n        width: auto;\n    }\n\n    .col-xl-1 {\n        flex: 0 0 auto;\n        width: 8.33333333%;\n    }\n\n    .col-xl-2 {\n        flex: 0 0 auto;\n        width: 16.66666667%;\n    }\n\n    .col-xl-3 {\n        flex: 0 0 auto;\n        width: 25%;\n    }\n\n    .col-xl-4 {\n        flex: 0 0 auto;\n        width: 33.33333333%;\n    }\n\n    .col-xl-5 {\n        flex: 0 0 auto;\n        width: 41.66666667%;\n    }\n\n    .col-xl-6 {\n        flex: 0 0 auto;\n        width: 50%;\n    }\n\n    .col-xl-7 {\n        flex: 0 0 auto;\n        width: 58.33333333%;\n    }\n\n    .col-xl-8 {\n        flex: 0 0 auto;\n        width: 66.66666667%;\n    }\n\n    .col-xl-9 {\n        flex: 0 0 auto;\n        width: 75%;\n    }\n\n    .col-xl-10 {\n        flex: 0 0 auto;\n        width: 83.33333333%;\n    }\n\n    .col-xl-11 {\n        flex: 0 0 auto;\n        width: 91.66666667%;\n    }\n\n    .col-xl-12 {\n        flex: 0 0 auto;\n        width: 100%;\n    }\n\n    .offset-xl-0 {\n        margin-left: 0;\n    }\n\n    .offset-xl-1 {\n        margin-left: 8.33333333%;\n    }\n\n    .offset-xl-2 {\n        margin-left: 16.66666667%;\n    }\n\n    .offset-xl-3 {\n        margin-left: 25%;\n    }\n\n    .offset-xl-4 {\n        margin-left: 33.33333333%;\n    }\n\n    .offset-xl-5 {\n        margin-left: 41.66666667%;\n    }\n\n    .offset-xl-6 {\n        margin-left: 50%;\n    }\n\n    .offset-xl-7 {\n        margin-left: 58.33333333%;\n    }\n\n    .offset-xl-8 {\n        margin-left: 66.66666667%;\n    }\n\n    .offset-xl-9 {\n        margin-left: 75%;\n    }\n\n    .offset-xl-10 {\n        margin-left: 83.33333333%;\n    }\n\n    .offset-xl-11 {\n        margin-left: 91.66666667%;\n    }\n\n    .g-xl-0,\n    .gx-xl-0 {\n        --bs-gutter-x: 0;\n    }\n\n    .g-xl-0,\n    .gy-xl-0 {\n        --bs-gutter-y: 0;\n    }\n\n    .g-xl-1,\n    .gx-xl-1 {\n        --bs-gutter-x: 0.25rem;\n    }\n\n    .g-xl-1,\n    .gy-xl-1 {\n        --bs-gutter-y: 0.25rem;\n    }\n\n    .g-xl-2,\n    .gx-xl-2 {\n        --bs-gutter-x: 0.5rem;\n    }\n\n    .g-xl-2,\n    .gy-xl-2 {\n        --bs-gutter-y: 0.5rem;\n    }\n\n    .g-xl-3,\n    .gx-xl-3 {\n        --bs-gutter-x: 1rem;\n    }\n\n    .g-xl-3,\n    .gy-xl-3 {\n        --bs-gutter-y: 1rem;\n    }\n\n    .g-xl-4,\n    .gx-xl-4 {\n        --bs-gutter-x: 1.5rem;\n    }\n\n    .g-xl-4,\n    .gy-xl-4 {\n        --bs-gutter-y: 1.5rem;\n    }\n\n    .g-xl-5,\n    .gx-xl-5 {\n        --bs-gutter-x: 3rem;\n    }\n\n    .g-xl-5,\n    .gy-xl-5 {\n        --bs-gutter-y: 3rem;\n    }\n}\n\n@media (min-width: 1400px) {\n    .col-xxl {\n        flex: 1 0 0%;\n    }\n\n    .row-cols-xxl-auto > * {\n        flex: 0 0 auto;\n        width: auto;\n    }\n\n    .row-cols-xxl-1 > * {\n        flex: 0 0 auto;\n        width: 100%;\n    }\n\n    .row-cols-xxl-2 > * {\n        flex: 0 0 auto;\n        width: 50%;\n    }\n\n    .row-cols-xxl-3 > * {\n        flex: 0 0 auto;\n        width: 33.3333333333%;\n    }\n\n    .row-cols-xxl-4 > * {\n        flex: 0 0 auto;\n        width: 25%;\n    }\n\n    .row-cols-xxl-5 > * {\n        flex: 0 0 auto;\n        width: 20%;\n    }\n\n    .row-cols-xxl-6 > * {\n        flex: 0 0 auto;\n        width: 16.6666666667%;\n    }\n\n    .col-xxl-auto {\n        flex: 0 0 auto;\n        width: auto;\n    }\n\n    .col-xxl-1 {\n        flex: 0 0 auto;\n        width: 8.33333333%;\n    }\n\n    .col-xxl-2 {\n        flex: 0 0 auto;\n        width: 16.66666667%;\n    }\n\n    .col-xxl-3 {\n        flex: 0 0 auto;\n        width: 25%;\n    }\n\n    .col-xxl-4 {\n        flex: 0 0 auto;\n        width: 33.33333333%;\n    }\n\n    .col-xxl-5 {\n        flex: 0 0 auto;\n        width: 41.66666667%;\n    }\n\n    .col-xxl-6 {\n        flex: 0 0 auto;\n        width: 50%;\n    }\n\n    .col-xxl-7 {\n        flex: 0 0 auto;\n        width: 58.33333333%;\n    }\n\n    .col-xxl-8 {\n        flex: 0 0 auto;\n        width: 66.66666667%;\n    }\n\n    .col-xxl-9 {\n        flex: 0 0 auto;\n        width: 75%;\n    }\n\n    .col-xxl-10 {\n        flex: 0 0 auto;\n        width: 83.33333333%;\n    }\n\n    .col-xxl-11 {\n        flex: 0 0 auto;\n        width: 91.66666667%;\n    }\n\n    .col-xxl-12 {\n        flex: 0 0 auto;\n        width: 100%;\n    }\n\n    .offset-xxl-0 {\n        margin-left: 0;\n    }\n\n    .offset-xxl-1 {\n        margin-left: 8.33333333%;\n    }\n\n    .offset-xxl-2 {\n        margin-left: 16.66666667%;\n    }\n\n    .offset-xxl-3 {\n        margin-left: 25%;\n    }\n\n    .offset-xxl-4 {\n        margin-left: 33.33333333%;\n    }\n\n    .offset-xxl-5 {\n        margin-left: 41.66666667%;\n    }\n\n    .offset-xxl-6 {\n        margin-left: 50%;\n    }\n\n    .offset-xxl-7 {\n        margin-left: 58.33333333%;\n    }\n\n    .offset-xxl-8 {\n        margin-left: 66.66666667%;\n    }\n\n    .offset-xxl-9 {\n        margin-left: 75%;\n    }\n\n    .offset-xxl-10 {\n        margin-left: 83.33333333%;\n    }\n\n    .offset-xxl-11 {\n        margin-left: 91.66666667%;\n    }\n\n    .g-xxl-0,\n    .gx-xxl-0 {\n        --bs-gutter-x: 0;\n    }\n\n    .g-xxl-0,\n    .gy-xxl-0 {\n        --bs-gutter-y: 0;\n    }\n\n    .g-xxl-1,\n    .gx-xxl-1 {\n        --bs-gutter-x: 0.25rem;\n    }\n\n    .g-xxl-1,\n    .gy-xxl-1 {\n        --bs-gutter-y: 0.25rem;\n    }\n\n    .g-xxl-2,\n    .gx-xxl-2 {\n        --bs-gutter-x: 0.5rem;\n    }\n\n    .g-xxl-2,\n    .gy-xxl-2 {\n        --bs-gutter-y: 0.5rem;\n    }\n\n    .g-xxl-3,\n    .gx-xxl-3 {\n        --bs-gutter-x: 1rem;\n    }\n\n    .g-xxl-3,\n    .gy-xxl-3 {\n        --bs-gutter-y: 1rem;\n    }\n\n    .g-xxl-4,\n    .gx-xxl-4 {\n        --bs-gutter-x: 1.5rem;\n    }\n\n    .g-xxl-4,\n    .gy-xxl-4 {\n        --bs-gutter-y: 1.5rem;\n    }\n\n    .g-xxl-5,\n    .gx-xxl-5 {\n        --bs-gutter-x: 3rem;\n    }\n\n    .g-xxl-5,\n    .gy-xxl-5 {\n        --bs-gutter-y: 3rem;\n    }\n}\n\n.d-inline {\n    display: inline !important;\n}\n\n.d-inline-block {\n    display: inline-block !important;\n}\n\n.d-block {\n    display: block !important;\n}\n\n.d-grid {\n    display: grid !important;\n}\n\n.d-table {\n    display: table !important;\n}\n\n.d-table-row {\n    display: table-row !important;\n}\n\n.d-table-cell {\n    display: table-cell !important;\n}\n\n.d-flex {\n    display: flex !important;\n}\n\n.d-inline-flex {\n    display: inline-flex !important;\n}\n\n.d-none {\n    display: none !important;\n}\n\n.flex-fill {\n    flex: 1 1 auto !important;\n}\n\n.flex-row {\n    flex-direction: row !important;\n}\n\n.flex-column {\n    flex-direction: column !important;\n}\n\n.flex-row-reverse {\n    flex-direction: row-reverse !important;\n}\n\n.flex-column-reverse {\n    flex-direction: column-reverse !important;\n}\n\n.flex-grow-0 {\n    flex-grow: 0 !important;\n}\n\n.flex-grow-1 {\n    flex-grow: 1 !important;\n}\n\n.flex-shrink-0 {\n    flex-shrink: 0 !important;\n}\n\n.flex-shrink-1 {\n    flex-shrink: 1 !important;\n}\n\n.flex-wrap {\n    flex-wrap: wrap !important;\n}\n\n.flex-nowrap {\n    flex-wrap: nowrap !important;\n}\n\n.flex-wrap-reverse {\n    flex-wrap: wrap-reverse !important;\n}\n\n.justify-content-start {\n    justify-content: flex-start !important;\n}\n\n.justify-content-end {\n    justify-content: flex-end !important;\n}\n\n.justify-content-center {\n    justify-content: center !important;\n}\n\n.justify-content-between {\n    justify-content: space-between !important;\n}\n\n.justify-content-around {\n    justify-content: space-around !important;\n}\n\n.justify-content-evenly {\n    justify-content: space-evenly !important;\n}\n\n.align-items-start {\n    align-items: flex-start !important;\n}\n\n.align-items-end {\n    align-items: flex-end !important;\n}\n\n.align-items-center {\n    align-items: center !important;\n}\n\n.align-items-baseline {\n    align-items: baseline !important;\n}\n\n.align-items-stretch {\n    align-items: stretch !important;\n}\n\n.align-content-start {\n    align-content: flex-start !important;\n}\n\n.align-content-end {\n    align-content: flex-end !important;\n}\n\n.align-content-center {\n    align-content: center !important;\n}\n\n.align-content-between {\n    align-content: space-between !important;\n}\n\n.align-content-around {\n    align-content: space-around !important;\n}\n\n.align-content-stretch {\n    align-content: stretch !important;\n}\n\n.align-self-auto {\n    align-self: auto !important;\n}\n\n.align-self-start {\n    align-self: flex-start !important;\n}\n\n.align-self-end {\n    align-self: flex-end !important;\n}\n\n.align-self-center {\n    align-self: center !important;\n}\n\n.align-self-baseline {\n    align-self: baseline !important;\n}\n\n.align-self-stretch {\n    align-self: stretch !important;\n}\n\n.order-first {\n    order: -1 !important;\n}\n\n.order-0 {\n    order: 0 !important;\n}\n\n.order-1 {\n    order: 1 !important;\n}\n\n.order-2 {\n    order: 2 !important;\n}\n\n.order-3 {\n    order: 3 !important;\n}\n\n.order-4 {\n    order: 4 !important;\n}\n\n.order-5 {\n    order: 5 !important;\n}\n\n.order-last {\n    order: 6 !important;\n}\n\n.m-0 {\n    margin: 0 !important;\n}\n\n.m-1 {\n    margin: 0.25rem !important;\n}\n\n.m-2 {\n    margin: 0.5rem !important;\n}\n\n.m-3 {\n    margin: 1rem !important;\n}\n\n.m-4 {\n    margin: 1.5rem !important;\n}\n\n.m-5 {\n    margin: 3rem !important;\n}\n\n.m-auto {\n    margin: auto !important;\n}\n\n.mx-0 {\n    margin-right: 0 !important;\n    margin-left: 0 !important;\n}\n\n.mx-1 {\n    margin-right: 0.25rem !important;\n    margin-left: 0.25rem !important;\n}\n\n.mx-2 {\n    margin-right: 0.5rem !important;\n    margin-left: 0.5rem !important;\n}\n\n.mx-3 {\n    margin-right: 1rem !important;\n    margin-left: 1rem !important;\n}\n\n.mx-4 {\n    margin-right: 1.5rem !important;\n    margin-left: 1.5rem !important;\n}\n\n.mx-5 {\n    margin-right: 3rem !important;\n    margin-left: 3rem !important;\n}\n\n.mx-auto {\n    margin-right: auto !important;\n    margin-left: auto !important;\n}\n\n.my-0 {\n    margin-top: 0 !important;\n    margin-bottom: 0 !important;\n}\n\n.my-1 {\n    margin-top: 0.25rem !important;\n    margin-bottom: 0.25rem !important;\n}\n\n.my-2 {\n    margin-top: 0.5rem !important;\n    margin-bottom: 0.5rem !important;\n}\n\n.my-3 {\n    margin-top: 1rem !important;\n    margin-bottom: 1rem !important;\n}\n\n.my-4 {\n    margin-top: 1.5rem !important;\n    margin-bottom: 1.5rem !important;\n}\n\n.my-5 {\n    margin-top: 3rem !important;\n    margin-bottom: 3rem !important;\n}\n\n.my-auto {\n    margin-top: auto !important;\n    margin-bottom: auto !important;\n}\n\n.mt-0 {\n    margin-top: 0 !important;\n}\n\n.mt-1 {\n    margin-top: 0.25rem !important;\n}\n\n.mt-2 {\n    margin-top: 0.5rem !important;\n}\n\n.mt-3 {\n    margin-top: 1rem !important;\n}\n\n.mt-4 {\n    margin-top: 1.5rem !important;\n}\n\n.mt-5 {\n    margin-top: 3rem !important;\n}\n\n.mt-auto {\n    margin-top: auto !important;\n}\n\n.me-0 {\n    margin-right: 0 !important;\n}\n\n.me-1 {\n    margin-right: 0.25rem !important;\n}\n\n.me-2 {\n    margin-right: 0.5rem !important;\n}\n\n.me-3 {\n    margin-right: 1rem !important;\n}\n\n.me-4 {\n    margin-right: 1.5rem !important;\n}\n\n.me-5 {\n    margin-right: 3rem !important;\n}\n\n.me-auto {\n    margin-right: auto !important;\n}\n\n.mb-0 {\n    margin-bottom: 0 !important;\n}\n\n.mb-1 {\n    margin-bottom: 0.25rem !important;\n}\n\n.mb-2 {\n    margin-bottom: 0.5rem !important;\n}\n\n.mb-3 {\n    margin-bottom: 1rem !important;\n}\n\n.mb-4 {\n    margin-bottom: 1.5rem !important;\n}\n\n.mb-5 {\n    margin-bottom: 3rem !important;\n}\n\n.mb-auto {\n    margin-bottom: auto !important;\n}\n\n.ms-0 {\n    margin-left: 0 !important;\n}\n\n.ms-1 {\n    margin-left: 0.25rem !important;\n}\n\n.ms-2 {\n    margin-left: 0.5rem !important;\n}\n\n.ms-3 {\n    margin-left: 1rem !important;\n}\n\n.ms-4 {\n    margin-left: 1.5rem !important;\n}\n\n.ms-5 {\n    margin-left: 3rem !important;\n}\n\n.ms-auto {\n    margin-left: auto !important;\n}\n\n.p-0 {\n    padding: 0 !important;\n}\n\n.p-1 {\n    padding: 0.25rem !important;\n}\n\n.p-2 {\n    padding: 0.5rem !important;\n}\n\n.p-3 {\n    padding: 1rem !important;\n}\n\n.p-4 {\n    padding: 1.5rem !important;\n}\n\n.p-5 {\n    padding: 3rem !important;\n}\n\n.px-0 {\n    padding-right: 0 !important;\n    padding-left: 0 !important;\n}\n\n.px-1 {\n    padding-right: 0.25rem !important;\n    padding-left: 0.25rem !important;\n}\n\n.px-2 {\n    padding-right: 0.5rem !important;\n    padding-left: 0.5rem !important;\n}\n\n.px-3 {\n    padding-right: 1rem !important;\n    padding-left: 1rem !important;\n}\n\n.px-4 {\n    padding-right: 1.5rem !important;\n    padding-left: 1.5rem !important;\n}\n\n.px-5 {\n    padding-right: 3rem !important;\n    padding-left: 3rem !important;\n}\n\n.py-0 {\n    padding-top: 0 !important;\n    padding-bottom: 0 !important;\n}\n\n.py-1 {\n    padding-top: 0.25rem !important;\n    padding-bottom: 0.25rem !important;\n}\n\n.py-2 {\n    padding-top: 0.5rem !important;\n    padding-bottom: 0.5rem !important;\n}\n\n.py-3 {\n    padding-top: 1rem !important;\n    padding-bottom: 1rem !important;\n}\n\n.py-4 {\n    padding-top: 1.5rem !important;\n    padding-bottom: 1.5rem !important;\n}\n\n.py-5 {\n    padding-top: 3rem !important;\n    padding-bottom: 3rem !important;\n}\n\n.pt-0 {\n    padding-top: 0 !important;\n}\n\n.pt-1 {\n    padding-top: 0.25rem !important;\n}\n\n.pt-2 {\n    padding-top: 0.5rem !important;\n}\n\n.pt-3 {\n    padding-top: 1rem !important;\n}\n\n.pt-4 {\n    padding-top: 1.5rem !important;\n}\n\n.pt-5 {\n    padding-top: 3rem !important;\n}\n\n.pe-0 {\n    padding-right: 0 !important;\n}\n\n.pe-1 {\n    padding-right: 0.25rem !important;\n}\n\n.pe-2 {\n    padding-right: 0.5rem !important;\n}\n\n.pe-3 {\n    padding-right: 1rem !important;\n}\n\n.pe-4 {\n    padding-right: 1.5rem !important;\n}\n\n.pe-5 {\n    padding-right: 3rem !important;\n}\n\n.pb-0 {\n    padding-bottom: 0 !important;\n}\n\n.pb-1 {\n    padding-bottom: 0.25rem !important;\n}\n\n.pb-2 {\n    padding-bottom: 0.5rem !important;\n}\n\n.pb-3 {\n    padding-bottom: 1rem !important;\n}\n\n.pb-4 {\n    padding-bottom: 1.5rem !important;\n}\n\n.pb-5 {\n    padding-bottom: 3rem !important;\n}\n\n.ps-0 {\n    padding-left: 0 !important;\n}\n\n.ps-1 {\n    padding-left: 0.25rem !important;\n}\n\n.ps-2 {\n    padding-left: 0.5rem !important;\n}\n\n.ps-3 {\n    padding-left: 1rem !important;\n}\n\n.ps-4 {\n    padding-left: 1.5rem !important;\n}\n\n.ps-5 {\n    padding-left: 3rem !important;\n}\n\n@media (min-width: 576px) {\n    .d-sm-inline {\n        display: inline !important;\n    }\n\n    .d-sm-inline-block {\n        display: inline-block !important;\n    }\n\n    .d-sm-block {\n        display: block !important;\n    }\n\n    .d-sm-grid {\n        display: grid !important;\n    }\n\n    .d-sm-table {\n        display: table !important;\n    }\n\n    .d-sm-table-row {\n        display: table-row !important;\n    }\n\n    .d-sm-table-cell {\n        display: table-cell !important;\n    }\n\n    .d-sm-flex {\n        display: flex !important;\n    }\n\n    .d-sm-inline-flex {\n        display: inline-flex !important;\n    }\n\n    .d-sm-none {\n        display: none !important;\n    }\n\n    .flex-sm-fill {\n        flex: 1 1 auto !important;\n    }\n\n    .flex-sm-row {\n        flex-direction: row !important;\n    }\n\n    .flex-sm-column {\n        flex-direction: column !important;\n    }\n\n    .flex-sm-row-reverse {\n        flex-direction: row-reverse !important;\n    }\n\n    .flex-sm-column-reverse {\n        flex-direction: column-reverse !important;\n    }\n\n    .flex-sm-grow-0 {\n        flex-grow: 0 !important;\n    }\n\n    .flex-sm-grow-1 {\n        flex-grow: 1 !important;\n    }\n\n    .flex-sm-shrink-0 {\n        flex-shrink: 0 !important;\n    }\n\n    .flex-sm-shrink-1 {\n        flex-shrink: 1 !important;\n    }\n\n    .flex-sm-wrap {\n        flex-wrap: wrap !important;\n    }\n\n    .flex-sm-nowrap {\n        flex-wrap: nowrap !important;\n    }\n\n    .flex-sm-wrap-reverse {\n        flex-wrap: wrap-reverse !important;\n    }\n\n    .justify-content-sm-start {\n        justify-content: flex-start !important;\n    }\n\n    .justify-content-sm-end {\n        justify-content: flex-end !important;\n    }\n\n    .justify-content-sm-center {\n        justify-content: center !important;\n    }\n\n    .justify-content-sm-between {\n        justify-content: space-between !important;\n    }\n\n    .justify-content-sm-around {\n        justify-content: space-around !important;\n    }\n\n    .justify-content-sm-evenly {\n        justify-content: space-evenly !important;\n    }\n\n    .align-items-sm-start {\n        align-items: flex-start !important;\n    }\n\n    .align-items-sm-end {\n        align-items: flex-end !important;\n    }\n\n    .align-items-sm-center {\n        align-items: center !important;\n    }\n\n    .align-items-sm-baseline {\n        align-items: baseline !important;\n    }\n\n    .align-items-sm-stretch {\n        align-items: stretch !important;\n    }\n\n    .align-content-sm-start {\n        align-content: flex-start !important;\n    }\n\n    .align-content-sm-end {\n        align-content: flex-end !important;\n    }\n\n    .align-content-sm-center {\n        align-content: center !important;\n    }\n\n    .align-content-sm-between {\n        align-content: space-between !important;\n    }\n\n    .align-content-sm-around {\n        align-content: space-around !important;\n    }\n\n    .align-content-sm-stretch {\n        align-content: stretch !important;\n    }\n\n    .align-self-sm-auto {\n        align-self: auto !important;\n    }\n\n    .align-self-sm-start {\n        align-self: flex-start !important;\n    }\n\n    .align-self-sm-end {\n        align-self: flex-end !important;\n    }\n\n    .align-self-sm-center {\n        align-self: center !important;\n    }\n\n    .align-self-sm-baseline {\n        align-self: baseline !important;\n    }\n\n    .align-self-sm-stretch {\n        align-self: stretch !important;\n    }\n\n    .order-sm-first {\n        order: -1 !important;\n    }\n\n    .order-sm-0 {\n        order: 0 !important;\n    }\n\n    .order-sm-1 {\n        order: 1 !important;\n    }\n\n    .order-sm-2 {\n        order: 2 !important;\n    }\n\n    .order-sm-3 {\n        order: 3 !important;\n    }\n\n    .order-sm-4 {\n        order: 4 !important;\n    }\n\n    .order-sm-5 {\n        order: 5 !important;\n    }\n\n    .order-sm-last {\n        order: 6 !important;\n    }\n\n    .m-sm-0 {\n        margin: 0 !important;\n    }\n\n    .m-sm-1 {\n        margin: 0.25rem !important;\n    }\n\n    .m-sm-2 {\n        margin: 0.5rem !important;\n    }\n\n    .m-sm-3 {\n        margin: 1rem !important;\n    }\n\n    .m-sm-4 {\n        margin: 1.5rem !important;\n    }\n\n    .m-sm-5 {\n        margin: 3rem !important;\n    }\n\n    .m-sm-auto {\n        margin: auto !important;\n    }\n\n    .mx-sm-0 {\n        margin-right: 0 !important;\n        margin-left: 0 !important;\n    }\n\n    .mx-sm-1 {\n        margin-right: 0.25rem !important;\n        margin-left: 0.25rem !important;\n    }\n\n    .mx-sm-2 {\n        margin-right: 0.5rem !important;\n        margin-left: 0.5rem !important;\n    }\n\n    .mx-sm-3 {\n        margin-right: 1rem !important;\n        margin-left: 1rem !important;\n    }\n\n    .mx-sm-4 {\n        margin-right: 1.5rem !important;\n        margin-left: 1.5rem !important;\n    }\n\n    .mx-sm-5 {\n        margin-right: 3rem !important;\n        margin-left: 3rem !important;\n    }\n\n    .mx-sm-auto {\n        margin-right: auto !important;\n        margin-left: auto !important;\n    }\n\n    .my-sm-0 {\n        margin-top: 0 !important;\n        margin-bottom: 0 !important;\n    }\n\n    .my-sm-1 {\n        margin-top: 0.25rem !important;\n        margin-bottom: 0.25rem !important;\n    }\n\n    .my-sm-2 {\n        margin-top: 0.5rem !important;\n        margin-bottom: 0.5rem !important;\n    }\n\n    .my-sm-3 {\n        margin-top: 1rem !important;\n        margin-bottom: 1rem !important;\n    }\n\n    .my-sm-4 {\n        margin-top: 1.5rem !important;\n        margin-bottom: 1.5rem !important;\n    }\n\n    .my-sm-5 {\n        margin-top: 3rem !important;\n        margin-bottom: 3rem !important;\n    }\n\n    .my-sm-auto {\n        margin-top: auto !important;\n        margin-bottom: auto !important;\n    }\n\n    .mt-sm-0 {\n        margin-top: 0 !important;\n    }\n\n    .mt-sm-1 {\n        margin-top: 0.25rem !important;\n    }\n\n    .mt-sm-2 {\n        margin-top: 0.5rem !important;\n    }\n\n    .mt-sm-3 {\n        margin-top: 1rem !important;\n    }\n\n    .mt-sm-4 {\n        margin-top: 1.5rem !important;\n    }\n\n    .mt-sm-5 {\n        margin-top: 3rem !important;\n    }\n\n    .mt-sm-auto {\n        margin-top: auto !important;\n    }\n\n    .me-sm-0 {\n        margin-right: 0 !important;\n    }\n\n    .me-sm-1 {\n        margin-right: 0.25rem !important;\n    }\n\n    .me-sm-2 {\n        margin-right: 0.5rem !important;\n    }\n\n    .me-sm-3 {\n        margin-right: 1rem !important;\n    }\n\n    .me-sm-4 {\n        margin-right: 1.5rem !important;\n    }\n\n    .me-sm-5 {\n        margin-right: 3rem !important;\n    }\n\n    .me-sm-auto {\n        margin-right: auto !important;\n    }\n\n    .mb-sm-0 {\n        margin-bottom: 0 !important;\n    }\n\n    .mb-sm-1 {\n        margin-bottom: 0.25rem !important;\n    }\n\n    .mb-sm-2 {\n        margin-bottom: 0.5rem !important;\n    }\n\n    .mb-sm-3 {\n        margin-bottom: 1rem !important;\n    }\n\n    .mb-sm-4 {\n        margin-bottom: 1.5rem !important;\n    }\n\n    .mb-sm-5 {\n        margin-bottom: 3rem !important;\n    }\n\n    .mb-sm-auto {\n        margin-bottom: auto !important;\n    }\n\n    .ms-sm-0 {\n        margin-left: 0 !important;\n    }\n\n    .ms-sm-1 {\n        margin-left: 0.25rem !important;\n    }\n\n    .ms-sm-2 {\n        margin-left: 0.5rem !important;\n    }\n\n    .ms-sm-3 {\n        margin-left: 1rem !important;\n    }\n\n    .ms-sm-4 {\n        margin-left: 1.5rem !important;\n    }\n\n    .ms-sm-5 {\n        margin-left: 3rem !important;\n    }\n\n    .ms-sm-auto {\n        margin-left: auto !important;\n    }\n\n    .p-sm-0 {\n        padding: 0 !important;\n    }\n\n    .p-sm-1 {\n        padding: 0.25rem !important;\n    }\n\n    .p-sm-2 {\n        padding: 0.5rem !important;\n    }\n\n    .p-sm-3 {\n        padding: 1rem !important;\n    }\n\n    .p-sm-4 {\n        padding: 1.5rem !important;\n    }\n\n    .p-sm-5 {\n        padding: 3rem !important;\n    }\n\n    .px-sm-0 {\n        padding-right: 0 !important;\n        padding-left: 0 !important;\n    }\n\n    .px-sm-1 {\n        padding-right: 0.25rem !important;\n        padding-left: 0.25rem !important;\n    }\n\n    .px-sm-2 {\n        padding-right: 0.5rem !important;\n        padding-left: 0.5rem !important;\n    }\n\n    .px-sm-3 {\n        padding-right: 1rem !important;\n        padding-left: 1rem !important;\n    }\n\n    .px-sm-4 {\n        padding-right: 1.5rem !important;\n        padding-left: 1.5rem !important;\n    }\n\n    .px-sm-5 {\n        padding-right: 3rem !important;\n        padding-left: 3rem !important;\n    }\n\n    .py-sm-0 {\n        padding-top: 0 !important;\n        padding-bottom: 0 !important;\n    }\n\n    .py-sm-1 {\n        padding-top: 0.25rem !important;\n        padding-bottom: 0.25rem !important;\n    }\n\n    .py-sm-2 {\n        padding-top: 0.5rem !important;\n        padding-bottom: 0.5rem !important;\n    }\n\n    .py-sm-3 {\n        padding-top: 1rem !important;\n        padding-bottom: 1rem !important;\n    }\n\n    .py-sm-4 {\n        padding-top: 1.5rem !important;\n        padding-bottom: 1.5rem !important;\n    }\n\n    .py-sm-5 {\n        padding-top: 3rem !important;\n        padding-bottom: 3rem !important;\n    }\n\n    .pt-sm-0 {\n        padding-top: 0 !important;\n    }\n\n    .pt-sm-1 {\n        padding-top: 0.25rem !important;\n    }\n\n    .pt-sm-2 {\n        padding-top: 0.5rem !important;\n    }\n\n    .pt-sm-3 {\n        padding-top: 1rem !important;\n    }\n\n    .pt-sm-4 {\n        padding-top: 1.5rem !important;\n    }\n\n    .pt-sm-5 {\n        padding-top: 3rem !important;\n    }\n\n    .pe-sm-0 {\n        padding-right: 0 !important;\n    }\n\n    .pe-sm-1 {\n        padding-right: 0.25rem !important;\n    }\n\n    .pe-sm-2 {\n        padding-right: 0.5rem !important;\n    }\n\n    .pe-sm-3 {\n        padding-right: 1rem !important;\n    }\n\n    .pe-sm-4 {\n        padding-right: 1.5rem !important;\n    }\n\n    .pe-sm-5 {\n        padding-right: 3rem !important;\n    }\n\n    .pb-sm-0 {\n        padding-bottom: 0 !important;\n    }\n\n    .pb-sm-1 {\n        padding-bottom: 0.25rem !important;\n    }\n\n    .pb-sm-2 {\n        padding-bottom: 0.5rem !important;\n    }\n\n    .pb-sm-3 {\n        padding-bottom: 1rem !important;\n    }\n\n    .pb-sm-4 {\n        padding-bottom: 1.5rem !important;\n    }\n\n    .pb-sm-5 {\n        padding-bottom: 3rem !important;\n    }\n\n    .ps-sm-0 {\n        padding-left: 0 !important;\n    }\n\n    .ps-sm-1 {\n        padding-left: 0.25rem !important;\n    }\n\n    .ps-sm-2 {\n        padding-left: 0.5rem !important;\n    }\n\n    .ps-sm-3 {\n        padding-left: 1rem !important;\n    }\n\n    .ps-sm-4 {\n        padding-left: 1.5rem !important;\n    }\n\n    .ps-sm-5 {\n        padding-left: 3rem !important;\n    }\n}\n\n@media (min-width: 768px) {\n    .d-md-inline {\n        display: inline !important;\n    }\n\n    .d-md-inline-block {\n        display: inline-block !important;\n    }\n\n    .d-md-block {\n        display: block !important;\n    }\n\n    .d-md-grid {\n        display: grid !important;\n    }\n\n    .d-md-table {\n        display: table !important;\n    }\n\n    .d-md-table-row {\n        display: table-row !important;\n    }\n\n    .d-md-table-cell {\n        display: table-cell !important;\n    }\n\n    .d-md-flex {\n        display: flex !important;\n    }\n\n    .d-md-inline-flex {\n        display: inline-flex !important;\n    }\n\n    .d-md-none {\n        display: none !important;\n    }\n\n    .flex-md-fill {\n        flex: 1 1 auto !important;\n    }\n\n    .flex-md-row {\n        flex-direction: row !important;\n    }\n\n    .flex-md-column {\n        flex-direction: column !important;\n    }\n\n    .flex-md-row-reverse {\n        flex-direction: row-reverse !important;\n    }\n\n    .flex-md-column-reverse {\n        flex-direction: column-reverse !important;\n    }\n\n    .flex-md-grow-0 {\n        flex-grow: 0 !important;\n    }\n\n    .flex-md-grow-1 {\n        flex-grow: 1 !important;\n    }\n\n    .flex-md-shrink-0 {\n        flex-shrink: 0 !important;\n    }\n\n    .flex-md-shrink-1 {\n        flex-shrink: 1 !important;\n    }\n\n    .flex-md-wrap {\n        flex-wrap: wrap !important;\n    }\n\n    .flex-md-nowrap {\n        flex-wrap: nowrap !important;\n    }\n\n    .flex-md-wrap-reverse {\n        flex-wrap: wrap-reverse !important;\n    }\n\n    .justify-content-md-start {\n        justify-content: flex-start !important;\n    }\n\n    .justify-content-md-end {\n        justify-content: flex-end !important;\n    }\n\n    .justify-content-md-center {\n        justify-content: center !important;\n    }\n\n    .justify-content-md-between {\n        justify-content: space-between !important;\n    }\n\n    .justify-content-md-around {\n        justify-content: space-around !important;\n    }\n\n    .justify-content-md-evenly {\n        justify-content: space-evenly !important;\n    }\n\n    .align-items-md-start {\n        align-items: flex-start !important;\n    }\n\n    .align-items-md-end {\n        align-items: flex-end !important;\n    }\n\n    .align-items-md-center {\n        align-items: center !important;\n    }\n\n    .align-items-md-baseline {\n        align-items: baseline !important;\n    }\n\n    .align-items-md-stretch {\n        align-items: stretch !important;\n    }\n\n    .align-content-md-start {\n        align-content: flex-start !important;\n    }\n\n    .align-content-md-end {\n        align-content: flex-end !important;\n    }\n\n    .align-content-md-center {\n        align-content: center !important;\n    }\n\n    .align-content-md-between {\n        align-content: space-between !important;\n    }\n\n    .align-content-md-around {\n        align-content: space-around !important;\n    }\n\n    .align-content-md-stretch {\n        align-content: stretch !important;\n    }\n\n    .align-self-md-auto {\n        align-self: auto !important;\n    }\n\n    .align-self-md-start {\n        align-self: flex-start !important;\n    }\n\n    .align-self-md-end {\n        align-self: flex-end !important;\n    }\n\n    .align-self-md-center {\n        align-self: center !important;\n    }\n\n    .align-self-md-baseline {\n        align-self: baseline !important;\n    }\n\n    .align-self-md-stretch {\n        align-self: stretch !important;\n    }\n\n    .order-md-first {\n        order: -1 !important;\n    }\n\n    .order-md-0 {\n        order: 0 !important;\n    }\n\n    .order-md-1 {\n        order: 1 !important;\n    }\n\n    .order-md-2 {\n        order: 2 !important;\n    }\n\n    .order-md-3 {\n        order: 3 !important;\n    }\n\n    .order-md-4 {\n        order: 4 !important;\n    }\n\n    .order-md-5 {\n        order: 5 !important;\n    }\n\n    .order-md-last {\n        order: 6 !important;\n    }\n\n    .m-md-0 {\n        margin: 0 !important;\n    }\n\n    .m-md-1 {\n        margin: 0.25rem !important;\n    }\n\n    .m-md-2 {\n        margin: 0.5rem !important;\n    }\n\n    .m-md-3 {\n        margin: 1rem !important;\n    }\n\n    .m-md-4 {\n        margin: 1.5rem !important;\n    }\n\n    .m-md-5 {\n        margin: 3rem !important;\n    }\n\n    .m-md-auto {\n        margin: auto !important;\n    }\n\n    .mx-md-0 {\n        margin-right: 0 !important;\n        margin-left: 0 !important;\n    }\n\n    .mx-md-1 {\n        margin-right: 0.25rem !important;\n        margin-left: 0.25rem !important;\n    }\n\n    .mx-md-2 {\n        margin-right: 0.5rem !important;\n        margin-left: 0.5rem !important;\n    }\n\n    .mx-md-3 {\n        margin-right: 1rem !important;\n        margin-left: 1rem !important;\n    }\n\n    .mx-md-4 {\n        margin-right: 1.5rem !important;\n        margin-left: 1.5rem !important;\n    }\n\n    .mx-md-5 {\n        margin-right: 3rem !important;\n        margin-left: 3rem !important;\n    }\n\n    .mx-md-auto {\n        margin-right: auto !important;\n        margin-left: auto !important;\n    }\n\n    .my-md-0 {\n        margin-top: 0 !important;\n        margin-bottom: 0 !important;\n    }\n\n    .my-md-1 {\n        margin-top: 0.25rem !important;\n        margin-bottom: 0.25rem !important;\n    }\n\n    .my-md-2 {\n        margin-top: 0.5rem !important;\n        margin-bottom: 0.5rem !important;\n    }\n\n    .my-md-3 {\n        margin-top: 1rem !important;\n        margin-bottom: 1rem !important;\n    }\n\n    .my-md-4 {\n        margin-top: 1.5rem !important;\n        margin-bottom: 1.5rem !important;\n    }\n\n    .my-md-5 {\n        margin-top: 3rem !important;\n        margin-bottom: 3rem !important;\n    }\n\n    .my-md-auto {\n        margin-top: auto !important;\n        margin-bottom: auto !important;\n    }\n\n    .mt-md-0 {\n        margin-top: 0 !important;\n    }\n\n    .mt-md-1 {\n        margin-top: 0.25rem !important;\n    }\n\n    .mt-md-2 {\n        margin-top: 0.5rem !important;\n    }\n\n    .mt-md-3 {\n        margin-top: 1rem !important;\n    }\n\n    .mt-md-4 {\n        margin-top: 1.5rem !important;\n    }\n\n    .mt-md-5 {\n        margin-top: 3rem !important;\n    }\n\n    .mt-md-auto {\n        margin-top: auto !important;\n    }\n\n    .me-md-0 {\n        margin-right: 0 !important;\n    }\n\n    .me-md-1 {\n        margin-right: 0.25rem !important;\n    }\n\n    .me-md-2 {\n        margin-right: 0.5rem !important;\n    }\n\n    .me-md-3 {\n        margin-right: 1rem !important;\n    }\n\n    .me-md-4 {\n        margin-right: 1.5rem !important;\n    }\n\n    .me-md-5 {\n        margin-right: 3rem !important;\n    }\n\n    .me-md-auto {\n        margin-right: auto !important;\n    }\n\n    .mb-md-0 {\n        margin-bottom: 0 !important;\n    }\n\n    .mb-md-1 {\n        margin-bottom: 0.25rem !important;\n    }\n\n    .mb-md-2 {\n        margin-bottom: 0.5rem !important;\n    }\n\n    .mb-md-3 {\n        margin-bottom: 1rem !important;\n    }\n\n    .mb-md-4 {\n        margin-bottom: 1.5rem !important;\n    }\n\n    .mb-md-5 {\n        margin-bottom: 3rem !important;\n    }\n\n    .mb-md-auto {\n        margin-bottom: auto !important;\n    }\n\n    .ms-md-0 {\n        margin-left: 0 !important;\n    }\n\n    .ms-md-1 {\n        margin-left: 0.25rem !important;\n    }\n\n    .ms-md-2 {\n        margin-left: 0.5rem !important;\n    }\n\n    .ms-md-3 {\n        margin-left: 1rem !important;\n    }\n\n    .ms-md-4 {\n        margin-left: 1.5rem !important;\n    }\n\n    .ms-md-5 {\n        margin-left: 3rem !important;\n    }\n\n    .ms-md-auto {\n        margin-left: auto !important;\n    }\n\n    .p-md-0 {\n        padding: 0 !important;\n    }\n\n    .p-md-1 {\n        padding: 0.25rem !important;\n    }\n\n    .p-md-2 {\n        padding: 0.5rem !important;\n    }\n\n    .p-md-3 {\n        padding: 1rem !important;\n    }\n\n    .p-md-4 {\n        padding: 1.5rem !important;\n    }\n\n    .p-md-5 {\n        padding: 3rem !important;\n    }\n\n    .px-md-0 {\n        padding-right: 0 !important;\n        padding-left: 0 !important;\n    }\n\n    .px-md-1 {\n        padding-right: 0.25rem !important;\n        padding-left: 0.25rem !important;\n    }\n\n    .px-md-2 {\n        padding-right: 0.5rem !important;\n        padding-left: 0.5rem !important;\n    }\n\n    .px-md-3 {\n        padding-right: 1rem !important;\n        padding-left: 1rem !important;\n    }\n\n    .px-md-4 {\n        padding-right: 1.5rem !important;\n        padding-left: 1.5rem !important;\n    }\n\n    .px-md-5 {\n        padding-right: 3rem !important;\n        padding-left: 3rem !important;\n    }\n\n    .py-md-0 {\n        padding-top: 0 !important;\n        padding-bottom: 0 !important;\n    }\n\n    .py-md-1 {\n        padding-top: 0.25rem !important;\n        padding-bottom: 0.25rem !important;\n    }\n\n    .py-md-2 {\n        padding-top: 0.5rem !important;\n        padding-bottom: 0.5rem !important;\n    }\n\n    .py-md-3 {\n        padding-top: 1rem !important;\n        padding-bottom: 1rem !important;\n    }\n\n    .py-md-4 {\n        padding-top: 1.5rem !important;\n        padding-bottom: 1.5rem !important;\n    }\n\n    .py-md-5 {\n        padding-top: 3rem !important;\n        padding-bottom: 3rem !important;\n    }\n\n    .pt-md-0 {\n        padding-top: 0 !important;\n    }\n\n    .pt-md-1 {\n        padding-top: 0.25rem !important;\n    }\n\n    .pt-md-2 {\n        padding-top: 0.5rem !important;\n    }\n\n    .pt-md-3 {\n        padding-top: 1rem !important;\n    }\n\n    .pt-md-4 {\n        padding-top: 1.5rem !important;\n    }\n\n    .pt-md-5 {\n        padding-top: 3rem !important;\n    }\n\n    .pe-md-0 {\n        padding-right: 0 !important;\n    }\n\n    .pe-md-1 {\n        padding-right: 0.25rem !important;\n    }\n\n    .pe-md-2 {\n        padding-right: 0.5rem !important;\n    }\n\n    .pe-md-3 {\n        padding-right: 1rem !important;\n    }\n\n    .pe-md-4 {\n        padding-right: 1.5rem !important;\n    }\n\n    .pe-md-5 {\n        padding-right: 3rem !important;\n    }\n\n    .pb-md-0 {\n        padding-bottom: 0 !important;\n    }\n\n    .pb-md-1 {\n        padding-bottom: 0.25rem !important;\n    }\n\n    .pb-md-2 {\n        padding-bottom: 0.5rem !important;\n    }\n\n    .pb-md-3 {\n        padding-bottom: 1rem !important;\n    }\n\n    .pb-md-4 {\n        padding-bottom: 1.5rem !important;\n    }\n\n    .pb-md-5 {\n        padding-bottom: 3rem !important;\n    }\n\n    .ps-md-0 {\n        padding-left: 0 !important;\n    }\n\n    .ps-md-1 {\n        padding-left: 0.25rem !important;\n    }\n\n    .ps-md-2 {\n        padding-left: 0.5rem !important;\n    }\n\n    .ps-md-3 {\n        padding-left: 1rem !important;\n    }\n\n    .ps-md-4 {\n        padding-left: 1.5rem !important;\n    }\n\n    .ps-md-5 {\n        padding-left: 3rem !important;\n    }\n}\n\n@media (min-width: 992px) {\n    .d-lg-inline {\n        display: inline !important;\n    }\n\n    .d-lg-inline-block {\n        display: inline-block !important;\n    }\n\n    .d-lg-block {\n        display: block !important;\n    }\n\n    .d-lg-grid {\n        display: grid !important;\n    }\n\n    .d-lg-table {\n        display: table !important;\n    }\n\n    .d-lg-table-row {\n        display: table-row !important;\n    }\n\n    .d-lg-table-cell {\n        display: table-cell !important;\n    }\n\n    .d-lg-flex {\n        display: flex !important;\n    }\n\n    .d-lg-inline-flex {\n        display: inline-flex !important;\n    }\n\n    .d-lg-none {\n        display: none !important;\n    }\n\n    .flex-lg-fill {\n        flex: 1 1 auto !important;\n    }\n\n    .flex-lg-row {\n        flex-direction: row !important;\n    }\n\n    .flex-lg-column {\n        flex-direction: column !important;\n    }\n\n    .flex-lg-row-reverse {\n        flex-direction: row-reverse !important;\n    }\n\n    .flex-lg-column-reverse {\n        flex-direction: column-reverse !important;\n    }\n\n    .flex-lg-grow-0 {\n        flex-grow: 0 !important;\n    }\n\n    .flex-lg-grow-1 {\n        flex-grow: 1 !important;\n    }\n\n    .flex-lg-shrink-0 {\n        flex-shrink: 0 !important;\n    }\n\n    .flex-lg-shrink-1 {\n        flex-shrink: 1 !important;\n    }\n\n    .flex-lg-wrap {\n        flex-wrap: wrap !important;\n    }\n\n    .flex-lg-nowrap {\n        flex-wrap: nowrap !important;\n    }\n\n    .flex-lg-wrap-reverse {\n        flex-wrap: wrap-reverse !important;\n    }\n\n    .justify-content-lg-start {\n        justify-content: flex-start !important;\n    }\n\n    .justify-content-lg-end {\n        justify-content: flex-end !important;\n    }\n\n    .justify-content-lg-center {\n        justify-content: center !important;\n    }\n\n    .justify-content-lg-between {\n        justify-content: space-between !important;\n    }\n\n    .justify-content-lg-around {\n        justify-content: space-around !important;\n    }\n\n    .justify-content-lg-evenly {\n        justify-content: space-evenly !important;\n    }\n\n    .align-items-lg-start {\n        align-items: flex-start !important;\n    }\n\n    .align-items-lg-end {\n        align-items: flex-end !important;\n    }\n\n    .align-items-lg-center {\n        align-items: center !important;\n    }\n\n    .align-items-lg-baseline {\n        align-items: baseline !important;\n    }\n\n    .align-items-lg-stretch {\n        align-items: stretch !important;\n    }\n\n    .align-content-lg-start {\n        align-content: flex-start !important;\n    }\n\n    .align-content-lg-end {\n        align-content: flex-end !important;\n    }\n\n    .align-content-lg-center {\n        align-content: center !important;\n    }\n\n    .align-content-lg-between {\n        align-content: space-between !important;\n    }\n\n    .align-content-lg-around {\n        align-content: space-around !important;\n    }\n\n    .align-content-lg-stretch {\n        align-content: stretch !important;\n    }\n\n    .align-self-lg-auto {\n        align-self: auto !important;\n    }\n\n    .align-self-lg-start {\n        align-self: flex-start !important;\n    }\n\n    .align-self-lg-end {\n        align-self: flex-end !important;\n    }\n\n    .align-self-lg-center {\n        align-self: center !important;\n    }\n\n    .align-self-lg-baseline {\n        align-self: baseline !important;\n    }\n\n    .align-self-lg-stretch {\n        align-self: stretch !important;\n    }\n\n    .order-lg-first {\n        order: -1 !important;\n    }\n\n    .order-lg-0 {\n        order: 0 !important;\n    }\n\n    .order-lg-1 {\n        order: 1 !important;\n    }\n\n    .order-lg-2 {\n        order: 2 !important;\n    }\n\n    .order-lg-3 {\n        order: 3 !important;\n    }\n\n    .order-lg-4 {\n        order: 4 !important;\n    }\n\n    .order-lg-5 {\n        order: 5 !important;\n    }\n\n    .order-lg-last {\n        order: 6 !important;\n    }\n\n    .m-lg-0 {\n        margin: 0 !important;\n    }\n\n    .m-lg-1 {\n        margin: 0.25rem !important;\n    }\n\n    .m-lg-2 {\n        margin: 0.5rem !important;\n    }\n\n    .m-lg-3 {\n        margin: 1rem !important;\n    }\n\n    .m-lg-4 {\n        margin: 1.5rem !important;\n    }\n\n    .m-lg-5 {\n        margin: 3rem !important;\n    }\n\n    .m-lg-auto {\n        margin: auto !important;\n    }\n\n    .mx-lg-0 {\n        margin-right: 0 !important;\n        margin-left: 0 !important;\n    }\n\n    .mx-lg-1 {\n        margin-right: 0.25rem !important;\n        margin-left: 0.25rem !important;\n    }\n\n    .mx-lg-2 {\n        margin-right: 0.5rem !important;\n        margin-left: 0.5rem !important;\n    }\n\n    .mx-lg-3 {\n        margin-right: 1rem !important;\n        margin-left: 1rem !important;\n    }\n\n    .mx-lg-4 {\n        margin-right: 1.5rem !important;\n        margin-left: 1.5rem !important;\n    }\n\n    .mx-lg-5 {\n        margin-right: 3rem !important;\n        margin-left: 3rem !important;\n    }\n\n    .mx-lg-auto {\n        margin-right: auto !important;\n        margin-left: auto !important;\n    }\n\n    .my-lg-0 {\n        margin-top: 0 !important;\n        margin-bottom: 0 !important;\n    }\n\n    .my-lg-1 {\n        margin-top: 0.25rem !important;\n        margin-bottom: 0.25rem !important;\n    }\n\n    .my-lg-2 {\n        margin-top: 0.5rem !important;\n        margin-bottom: 0.5rem !important;\n    }\n\n    .my-lg-3 {\n        margin-top: 1rem !important;\n        margin-bottom: 1rem !important;\n    }\n\n    .my-lg-4 {\n        margin-top: 1.5rem !important;\n        margin-bottom: 1.5rem !important;\n    }\n\n    .my-lg-5 {\n        margin-top: 3rem !important;\n        margin-bottom: 3rem !important;\n    }\n\n    .my-lg-auto {\n        margin-top: auto !important;\n        margin-bottom: auto !important;\n    }\n\n    .mt-lg-0 {\n        margin-top: 0 !important;\n    }\n\n    .mt-lg-1 {\n        margin-top: 0.25rem !important;\n    }\n\n    .mt-lg-2 {\n        margin-top: 0.5rem !important;\n    }\n\n    .mt-lg-3 {\n        margin-top: 1rem !important;\n    }\n\n    .mt-lg-4 {\n        margin-top: 1.5rem !important;\n    }\n\n    .mt-lg-5 {\n        margin-top: 3rem !important;\n    }\n\n    .mt-lg-auto {\n        margin-top: auto !important;\n    }\n\n    .me-lg-0 {\n        margin-right: 0 !important;\n    }\n\n    .me-lg-1 {\n        margin-right: 0.25rem !important;\n    }\n\n    .me-lg-2 {\n        margin-right: 0.5rem !important;\n    }\n\n    .me-lg-3 {\n        margin-right: 1rem !important;\n    }\n\n    .me-lg-4 {\n        margin-right: 1.5rem !important;\n    }\n\n    .me-lg-5 {\n        margin-right: 3rem !important;\n    }\n\n    .me-lg-auto {\n        margin-right: auto !important;\n    }\n\n    .mb-lg-0 {\n        margin-bottom: 0 !important;\n    }\n\n    .mb-lg-1 {\n        margin-bottom: 0.25rem !important;\n    }\n\n    .mb-lg-2 {\n        margin-bottom: 0.5rem !important;\n    }\n\n    .mb-lg-3 {\n        margin-bottom: 1rem !important;\n    }\n\n    .mb-lg-4 {\n        margin-bottom: 1.5rem !important;\n    }\n\n    .mb-lg-5 {\n        margin-bottom: 3rem !important;\n    }\n\n    .mb-lg-auto {\n        margin-bottom: auto !important;\n    }\n\n    .ms-lg-0 {\n        margin-left: 0 !important;\n    }\n\n    .ms-lg-1 {\n        margin-left: 0.25rem !important;\n    }\n\n    .ms-lg-2 {\n        margin-left: 0.5rem !important;\n    }\n\n    .ms-lg-3 {\n        margin-left: 1rem !important;\n    }\n\n    .ms-lg-4 {\n        margin-left: 1.5rem !important;\n    }\n\n    .ms-lg-5 {\n        margin-left: 3rem !important;\n    }\n\n    .ms-lg-auto {\n        margin-left: auto !important;\n    }\n\n    .p-lg-0 {\n        padding: 0 !important;\n    }\n\n    .p-lg-1 {\n        padding: 0.25rem !important;\n    }\n\n    .p-lg-2 {\n        padding: 0.5rem !important;\n    }\n\n    .p-lg-3 {\n        padding: 1rem !important;\n    }\n\n    .p-lg-4 {\n        padding: 1.5rem !important;\n    }\n\n    .p-lg-5 {\n        padding: 3rem !important;\n    }\n\n    .px-lg-0 {\n        padding-right: 0 !important;\n        padding-left: 0 !important;\n    }\n\n    .px-lg-1 {\n        padding-right: 0.25rem !important;\n        padding-left: 0.25rem !important;\n    }\n\n    .px-lg-2 {\n        padding-right: 0.5rem !important;\n        padding-left: 0.5rem !important;\n    }\n\n    .px-lg-3 {\n        padding-right: 1rem !important;\n        padding-left: 1rem !important;\n    }\n\n    .px-lg-4 {\n        padding-right: 1.5rem !important;\n        padding-left: 1.5rem !important;\n    }\n\n    .px-lg-5 {\n        padding-right: 3rem !important;\n        padding-left: 3rem !important;\n    }\n\n    .py-lg-0 {\n        padding-top: 0 !important;\n        padding-bottom: 0 !important;\n    }\n\n    .py-lg-1 {\n        padding-top: 0.25rem !important;\n        padding-bottom: 0.25rem !important;\n    }\n\n    .py-lg-2 {\n        padding-top: 0.5rem !important;\n        padding-bottom: 0.5rem !important;\n    }\n\n    .py-lg-3 {\n        padding-top: 1rem !important;\n        padding-bottom: 1rem !important;\n    }\n\n    .py-lg-4 {\n        padding-top: 1.5rem !important;\n        padding-bottom: 1.5rem !important;\n    }\n\n    .py-lg-5 {\n        padding-top: 3rem !important;\n        padding-bottom: 3rem !important;\n    }\n\n    .pt-lg-0 {\n        padding-top: 0 !important;\n    }\n\n    .pt-lg-1 {\n        padding-top: 0.25rem !important;\n    }\n\n    .pt-lg-2 {\n        padding-top: 0.5rem !important;\n    }\n\n    .pt-lg-3 {\n        padding-top: 1rem !important;\n    }\n\n    .pt-lg-4 {\n        padding-top: 1.5rem !important;\n    }\n\n    .pt-lg-5 {\n        padding-top: 3rem !important;\n    }\n\n    .pe-lg-0 {\n        padding-right: 0 !important;\n    }\n\n    .pe-lg-1 {\n        padding-right: 0.25rem !important;\n    }\n\n    .pe-lg-2 {\n        padding-right: 0.5rem !important;\n    }\n\n    .pe-lg-3 {\n        padding-right: 1rem !important;\n    }\n\n    .pe-lg-4 {\n        padding-right: 1.5rem !important;\n    }\n\n    .pe-lg-5 {\n        padding-right: 3rem !important;\n    }\n\n    .pb-lg-0 {\n        padding-bottom: 0 !important;\n    }\n\n    .pb-lg-1 {\n        padding-bottom: 0.25rem !important;\n    }\n\n    .pb-lg-2 {\n        padding-bottom: 0.5rem !important;\n    }\n\n    .pb-lg-3 {\n        padding-bottom: 1rem !important;\n    }\n\n    .pb-lg-4 {\n        padding-bottom: 1.5rem !important;\n    }\n\n    .pb-lg-5 {\n        padding-bottom: 3rem !important;\n    }\n\n    .ps-lg-0 {\n        padding-left: 0 !important;\n    }\n\n    .ps-lg-1 {\n        padding-left: 0.25rem !important;\n    }\n\n    .ps-lg-2 {\n        padding-left: 0.5rem !important;\n    }\n\n    .ps-lg-3 {\n        padding-left: 1rem !important;\n    }\n\n    .ps-lg-4 {\n        padding-left: 1.5rem !important;\n    }\n\n    .ps-lg-5 {\n        padding-left: 3rem !important;\n    }\n}\n\n@media (min-width: 1200px) {\n    .d-xl-inline {\n        display: inline !important;\n    }\n\n    .d-xl-inline-block {\n        display: inline-block !important;\n    }\n\n    .d-xl-block {\n        display: block !important;\n    }\n\n    .d-xl-grid {\n        display: grid !important;\n    }\n\n    .d-xl-table {\n        display: table !important;\n    }\n\n    .d-xl-table-row {\n        display: table-row !important;\n    }\n\n    .d-xl-table-cell {\n        display: table-cell !important;\n    }\n\n    .d-xl-flex {\n        display: flex !important;\n    }\n\n    .d-xl-inline-flex {\n        display: inline-flex !important;\n    }\n\n    .d-xl-none {\n        display: none !important;\n    }\n\n    .flex-xl-fill {\n        flex: 1 1 auto !important;\n    }\n\n    .flex-xl-row {\n        flex-direction: row !important;\n    }\n\n    .flex-xl-column {\n        flex-direction: column !important;\n    }\n\n    .flex-xl-row-reverse {\n        flex-direction: row-reverse !important;\n    }\n\n    .flex-xl-column-reverse {\n        flex-direction: column-reverse !important;\n    }\n\n    .flex-xl-grow-0 {\n        flex-grow: 0 !important;\n    }\n\n    .flex-xl-grow-1 {\n        flex-grow: 1 !important;\n    }\n\n    .flex-xl-shrink-0 {\n        flex-shrink: 0 !important;\n    }\n\n    .flex-xl-shrink-1 {\n        flex-shrink: 1 !important;\n    }\n\n    .flex-xl-wrap {\n        flex-wrap: wrap !important;\n    }\n\n    .flex-xl-nowrap {\n        flex-wrap: nowrap !important;\n    }\n\n    .flex-xl-wrap-reverse {\n        flex-wrap: wrap-reverse !important;\n    }\n\n    .justify-content-xl-start {\n        justify-content: flex-start !important;\n    }\n\n    .justify-content-xl-end {\n        justify-content: flex-end !important;\n    }\n\n    .justify-content-xl-center {\n        justify-content: center !important;\n    }\n\n    .justify-content-xl-between {\n        justify-content: space-between !important;\n    }\n\n    .justify-content-xl-around {\n        justify-content: space-around !important;\n    }\n\n    .justify-content-xl-evenly {\n        justify-content: space-evenly !important;\n    }\n\n    .align-items-xl-start {\n        align-items: flex-start !important;\n    }\n\n    .align-items-xl-end {\n        align-items: flex-end !important;\n    }\n\n    .align-items-xl-center {\n        align-items: center !important;\n    }\n\n    .align-items-xl-baseline {\n        align-items: baseline !important;\n    }\n\n    .align-items-xl-stretch {\n        align-items: stretch !important;\n    }\n\n    .align-content-xl-start {\n        align-content: flex-start !important;\n    }\n\n    .align-content-xl-end {\n        align-content: flex-end !important;\n    }\n\n    .align-content-xl-center {\n        align-content: center !important;\n    }\n\n    .align-content-xl-between {\n        align-content: space-between !important;\n    }\n\n    .align-content-xl-around {\n        align-content: space-around !important;\n    }\n\n    .align-content-xl-stretch {\n        align-content: stretch !important;\n    }\n\n    .align-self-xl-auto {\n        align-self: auto !important;\n    }\n\n    .align-self-xl-start {\n        align-self: flex-start !important;\n    }\n\n    .align-self-xl-end {\n        align-self: flex-end !important;\n    }\n\n    .align-self-xl-center {\n        align-self: center !important;\n    }\n\n    .align-self-xl-baseline {\n        align-self: baseline !important;\n    }\n\n    .align-self-xl-stretch {\n        align-self: stretch !important;\n    }\n\n    .order-xl-first {\n        order: -1 !important;\n    }\n\n    .order-xl-0 {\n        order: 0 !important;\n    }\n\n    .order-xl-1 {\n        order: 1 !important;\n    }\n\n    .order-xl-2 {\n        order: 2 !important;\n    }\n\n    .order-xl-3 {\n        order: 3 !important;\n    }\n\n    .order-xl-4 {\n        order: 4 !important;\n    }\n\n    .order-xl-5 {\n        order: 5 !important;\n    }\n\n    .order-xl-last {\n        order: 6 !important;\n    }\n\n    .m-xl-0 {\n        margin: 0 !important;\n    }\n\n    .m-xl-1 {\n        margin: 0.25rem !important;\n    }\n\n    .m-xl-2 {\n        margin: 0.5rem !important;\n    }\n\n    .m-xl-3 {\n        margin: 1rem !important;\n    }\n\n    .m-xl-4 {\n        margin: 1.5rem !important;\n    }\n\n    .m-xl-5 {\n        margin: 3rem !important;\n    }\n\n    .m-xl-auto {\n        margin: auto !important;\n    }\n\n    .mx-xl-0 {\n        margin-right: 0 !important;\n        margin-left: 0 !important;\n    }\n\n    .mx-xl-1 {\n        margin-right: 0.25rem !important;\n        margin-left: 0.25rem !important;\n    }\n\n    .mx-xl-2 {\n        margin-right: 0.5rem !important;\n        margin-left: 0.5rem !important;\n    }\n\n    .mx-xl-3 {\n        margin-right: 1rem !important;\n        margin-left: 1rem !important;\n    }\n\n    .mx-xl-4 {\n        margin-right: 1.5rem !important;\n        margin-left: 1.5rem !important;\n    }\n\n    .mx-xl-5 {\n        margin-right: 3rem !important;\n        margin-left: 3rem !important;\n    }\n\n    .mx-xl-auto {\n        margin-right: auto !important;\n        margin-left: auto !important;\n    }\n\n    .my-xl-0 {\n        margin-top: 0 !important;\n        margin-bottom: 0 !important;\n    }\n\n    .my-xl-1 {\n        margin-top: 0.25rem !important;\n        margin-bottom: 0.25rem !important;\n    }\n\n    .my-xl-2 {\n        margin-top: 0.5rem !important;\n        margin-bottom: 0.5rem !important;\n    }\n\n    .my-xl-3 {\n        margin-top: 1rem !important;\n        margin-bottom: 1rem !important;\n    }\n\n    .my-xl-4 {\n        margin-top: 1.5rem !important;\n        margin-bottom: 1.5rem !important;\n    }\n\n    .my-xl-5 {\n        margin-top: 3rem !important;\n        margin-bottom: 3rem !important;\n    }\n\n    .my-xl-auto {\n        margin-top: auto !important;\n        margin-bottom: auto !important;\n    }\n\n    .mt-xl-0 {\n        margin-top: 0 !important;\n    }\n\n    .mt-xl-1 {\n        margin-top: 0.25rem !important;\n    }\n\n    .mt-xl-2 {\n        margin-top: 0.5rem !important;\n    }\n\n    .mt-xl-3 {\n        margin-top: 1rem !important;\n    }\n\n    .mt-xl-4 {\n        margin-top: 1.5rem !important;\n    }\n\n    .mt-xl-5 {\n        margin-top: 3rem !important;\n    }\n\n    .mt-xl-auto {\n        margin-top: auto !important;\n    }\n\n    .me-xl-0 {\n        margin-right: 0 !important;\n    }\n\n    .me-xl-1 {\n        margin-right: 0.25rem !important;\n    }\n\n    .me-xl-2 {\n        margin-right: 0.5rem !important;\n    }\n\n    .me-xl-3 {\n        margin-right: 1rem !important;\n    }\n\n    .me-xl-4 {\n        margin-right: 1.5rem !important;\n    }\n\n    .me-xl-5 {\n        margin-right: 3rem !important;\n    }\n\n    .me-xl-auto {\n        margin-right: auto !important;\n    }\n\n    .mb-xl-0 {\n        margin-bottom: 0 !important;\n    }\n\n    .mb-xl-1 {\n        margin-bottom: 0.25rem !important;\n    }\n\n    .mb-xl-2 {\n        margin-bottom: 0.5rem !important;\n    }\n\n    .mb-xl-3 {\n        margin-bottom: 1rem !important;\n    }\n\n    .mb-xl-4 {\n        margin-bottom: 1.5rem !important;\n    }\n\n    .mb-xl-5 {\n        margin-bottom: 3rem !important;\n    }\n\n    .mb-xl-auto {\n        margin-bottom: auto !important;\n    }\n\n    .ms-xl-0 {\n        margin-left: 0 !important;\n    }\n\n    .ms-xl-1 {\n        margin-left: 0.25rem !important;\n    }\n\n    .ms-xl-2 {\n        margin-left: 0.5rem !important;\n    }\n\n    .ms-xl-3 {\n        margin-left: 1rem !important;\n    }\n\n    .ms-xl-4 {\n        margin-left: 1.5rem !important;\n    }\n\n    .ms-xl-5 {\n        margin-left: 3rem !important;\n    }\n\n    .ms-xl-auto {\n        margin-left: auto !important;\n    }\n\n    .p-xl-0 {\n        padding: 0 !important;\n    }\n\n    .p-xl-1 {\n        padding: 0.25rem !important;\n    }\n\n    .p-xl-2 {\n        padding: 0.5rem !important;\n    }\n\n    .p-xl-3 {\n        padding: 1rem !important;\n    }\n\n    .p-xl-4 {\n        padding: 1.5rem !important;\n    }\n\n    .p-xl-5 {\n        padding: 3rem !important;\n    }\n\n    .px-xl-0 {\n        padding-right: 0 !important;\n        padding-left: 0 !important;\n    }\n\n    .px-xl-1 {\n        padding-right: 0.25rem !important;\n        padding-left: 0.25rem !important;\n    }\n\n    .px-xl-2 {\n        padding-right: 0.5rem !important;\n        padding-left: 0.5rem !important;\n    }\n\n    .px-xl-3 {\n        padding-right: 1rem !important;\n        padding-left: 1rem !important;\n    }\n\n    .px-xl-4 {\n        padding-right: 1.5rem !important;\n        padding-left: 1.5rem !important;\n    }\n\n    .px-xl-5 {\n        padding-right: 3rem !important;\n        padding-left: 3rem !important;\n    }\n\n    .py-xl-0 {\n        padding-top: 0 !important;\n        padding-bottom: 0 !important;\n    }\n\n    .py-xl-1 {\n        padding-top: 0.25rem !important;\n        padding-bottom: 0.25rem !important;\n    }\n\n    .py-xl-2 {\n        padding-top: 0.5rem !important;\n        padding-bottom: 0.5rem !important;\n    }\n\n    .py-xl-3 {\n        padding-top: 1rem !important;\n        padding-bottom: 1rem !important;\n    }\n\n    .py-xl-4 {\n        padding-top: 1.5rem !important;\n        padding-bottom: 1.5rem !important;\n    }\n\n    .py-xl-5 {\n        padding-top: 3rem !important;\n        padding-bottom: 3rem !important;\n    }\n\n    .pt-xl-0 {\n        padding-top: 0 !important;\n    }\n\n    .pt-xl-1 {\n        padding-top: 0.25rem !important;\n    }\n\n    .pt-xl-2 {\n        padding-top: 0.5rem !important;\n    }\n\n    .pt-xl-3 {\n        padding-top: 1rem !important;\n    }\n\n    .pt-xl-4 {\n        padding-top: 1.5rem !important;\n    }\n\n    .pt-xl-5 {\n        padding-top: 3rem !important;\n    }\n\n    .pe-xl-0 {\n        padding-right: 0 !important;\n    }\n\n    .pe-xl-1 {\n        padding-right: 0.25rem !important;\n    }\n\n    .pe-xl-2 {\n        padding-right: 0.5rem !important;\n    }\n\n    .pe-xl-3 {\n        padding-right: 1rem !important;\n    }\n\n    .pe-xl-4 {\n        padding-right: 1.5rem !important;\n    }\n\n    .pe-xl-5 {\n        padding-right: 3rem !important;\n    }\n\n    .pb-xl-0 {\n        padding-bottom: 0 !important;\n    }\n\n    .pb-xl-1 {\n        padding-bottom: 0.25rem !important;\n    }\n\n    .pb-xl-2 {\n        padding-bottom: 0.5rem !important;\n    }\n\n    .pb-xl-3 {\n        padding-bottom: 1rem !important;\n    }\n\n    .pb-xl-4 {\n        padding-bottom: 1.5rem !important;\n    }\n\n    .pb-xl-5 {\n        padding-bottom: 3rem !important;\n    }\n\n    .ps-xl-0 {\n        padding-left: 0 !important;\n    }\n\n    .ps-xl-1 {\n        padding-left: 0.25rem !important;\n    }\n\n    .ps-xl-2 {\n        padding-left: 0.5rem !important;\n    }\n\n    .ps-xl-3 {\n        padding-left: 1rem !important;\n    }\n\n    .ps-xl-4 {\n        padding-left: 1.5rem !important;\n    }\n\n    .ps-xl-5 {\n        padding-left: 3rem !important;\n    }\n}\n\n@media (min-width: 1400px) {\n    .d-xxl-inline {\n        display: inline !important;\n    }\n\n    .d-xxl-inline-block {\n        display: inline-block !important;\n    }\n\n    .d-xxl-block {\n        display: block !important;\n    }\n\n    .d-xxl-grid {\n        display: grid !important;\n    }\n\n    .d-xxl-table {\n        display: table !important;\n    }\n\n    .d-xxl-table-row {\n        display: table-row !important;\n    }\n\n    .d-xxl-table-cell {\n        display: table-cell !important;\n    }\n\n    .d-xxl-flex {\n        display: flex !important;\n    }\n\n    .d-xxl-inline-flex {\n        display: inline-flex !important;\n    }\n\n    .d-xxl-none {\n        display: none !important;\n    }\n\n    .flex-xxl-fill {\n        flex: 1 1 auto !important;\n    }\n\n    .flex-xxl-row {\n        flex-direction: row !important;\n    }\n\n    .flex-xxl-column {\n        flex-direction: column !important;\n    }\n\n    .flex-xxl-row-reverse {\n        flex-direction: row-reverse !important;\n    }\n\n    .flex-xxl-column-reverse {\n        flex-direction: column-reverse !important;\n    }\n\n    .flex-xxl-grow-0 {\n        flex-grow: 0 !important;\n    }\n\n    .flex-xxl-grow-1 {\n        flex-grow: 1 !important;\n    }\n\n    .flex-xxl-shrink-0 {\n        flex-shrink: 0 !important;\n    }\n\n    .flex-xxl-shrink-1 {\n        flex-shrink: 1 !important;\n    }\n\n    .flex-xxl-wrap {\n        flex-wrap: wrap !important;\n    }\n\n    .flex-xxl-nowrap {\n        flex-wrap: nowrap !important;\n    }\n\n    .flex-xxl-wrap-reverse {\n        flex-wrap: wrap-reverse !important;\n    }\n\n    .justify-content-xxl-start {\n        justify-content: flex-start !important;\n    }\n\n    .justify-content-xxl-end {\n        justify-content: flex-end !important;\n    }\n\n    .justify-content-xxl-center {\n        justify-content: center !important;\n    }\n\n    .justify-content-xxl-between {\n        justify-content: space-between !important;\n    }\n\n    .justify-content-xxl-around {\n        justify-content: space-around !important;\n    }\n\n    .justify-content-xxl-evenly {\n        justify-content: space-evenly !important;\n    }\n\n    .align-items-xxl-start {\n        align-items: flex-start !important;\n    }\n\n    .align-items-xxl-end {\n        align-items: flex-end !important;\n    }\n\n    .align-items-xxl-center {\n        align-items: center !important;\n    }\n\n    .align-items-xxl-baseline {\n        align-items: baseline !important;\n    }\n\n    .align-items-xxl-stretch {\n        align-items: stretch !important;\n    }\n\n    .align-content-xxl-start {\n        align-content: flex-start !important;\n    }\n\n    .align-content-xxl-end {\n        align-content: flex-end !important;\n    }\n\n    .align-content-xxl-center {\n        align-content: center !important;\n    }\n\n    .align-content-xxl-between {\n        align-content: space-between !important;\n    }\n\n    .align-content-xxl-around {\n        align-content: space-around !important;\n    }\n\n    .align-content-xxl-stretch {\n        align-content: stretch !important;\n    }\n\n    .align-self-xxl-auto {\n        align-self: auto !important;\n    }\n\n    .align-self-xxl-start {\n        align-self: flex-start !important;\n    }\n\n    .align-self-xxl-end {\n        align-self: flex-end !important;\n    }\n\n    .align-self-xxl-center {\n        align-self: center !important;\n    }\n\n    .align-self-xxl-baseline {\n        align-self: baseline !important;\n    }\n\n    .align-self-xxl-stretch {\n        align-self: stretch !important;\n    }\n\n    .order-xxl-first {\n        order: -1 !important;\n    }\n\n    .order-xxl-0 {\n        order: 0 !important;\n    }\n\n    .order-xxl-1 {\n        order: 1 !important;\n    }\n\n    .order-xxl-2 {\n        order: 2 !important;\n    }\n\n    .order-xxl-3 {\n        order: 3 !important;\n    }\n\n    .order-xxl-4 {\n        order: 4 !important;\n    }\n\n    .order-xxl-5 {\n        order: 5 !important;\n    }\n\n    .order-xxl-last {\n        order: 6 !important;\n    }\n\n    .m-xxl-0 {\n        margin: 0 !important;\n    }\n\n    .m-xxl-1 {\n        margin: 0.25rem !important;\n    }\n\n    .m-xxl-2 {\n        margin: 0.5rem !important;\n    }\n\n    .m-xxl-3 {\n        margin: 1rem !important;\n    }\n\n    .m-xxl-4 {\n        margin: 1.5rem !important;\n    }\n\n    .m-xxl-5 {\n        margin: 3rem !important;\n    }\n\n    .m-xxl-auto {\n        margin: auto !important;\n    }\n\n    .mx-xxl-0 {\n        margin-right: 0 !important;\n        margin-left: 0 !important;\n    }\n\n    .mx-xxl-1 {\n        margin-right: 0.25rem !important;\n        margin-left: 0.25rem !important;\n    }\n\n    .mx-xxl-2 {\n        margin-right: 0.5rem !important;\n        margin-left: 0.5rem !important;\n    }\n\n    .mx-xxl-3 {\n        margin-right: 1rem !important;\n        margin-left: 1rem !important;\n    }\n\n    .mx-xxl-4 {\n        margin-right: 1.5rem !important;\n        margin-left: 1.5rem !important;\n    }\n\n    .mx-xxl-5 {\n        margin-right: 3rem !important;\n        margin-left: 3rem !important;\n    }\n\n    .mx-xxl-auto {\n        margin-right: auto !important;\n        margin-left: auto !important;\n    }\n\n    .my-xxl-0 {\n        margin-top: 0 !important;\n        margin-bottom: 0 !important;\n    }\n\n    .my-xxl-1 {\n        margin-top: 0.25rem !important;\n        margin-bottom: 0.25rem !important;\n    }\n\n    .my-xxl-2 {\n        margin-top: 0.5rem !important;\n        margin-bottom: 0.5rem !important;\n    }\n\n    .my-xxl-3 {\n        margin-top: 1rem !important;\n        margin-bottom: 1rem !important;\n    }\n\n    .my-xxl-4 {\n        margin-top: 1.5rem !important;\n        margin-bottom: 1.5rem !important;\n    }\n\n    .my-xxl-5 {\n        margin-top: 3rem !important;\n        margin-bottom: 3rem !important;\n    }\n\n    .my-xxl-auto {\n        margin-top: auto !important;\n        margin-bottom: auto !important;\n    }\n\n    .mt-xxl-0 {\n        margin-top: 0 !important;\n    }\n\n    .mt-xxl-1 {\n        margin-top: 0.25rem !important;\n    }\n\n    .mt-xxl-2 {\n        margin-top: 0.5rem !important;\n    }\n\n    .mt-xxl-3 {\n        margin-top: 1rem !important;\n    }\n\n    .mt-xxl-4 {\n        margin-top: 1.5rem !important;\n    }\n\n    .mt-xxl-5 {\n        margin-top: 3rem !important;\n    }\n\n    .mt-xxl-auto {\n        margin-top: auto !important;\n    }\n\n    .me-xxl-0 {\n        margin-right: 0 !important;\n    }\n\n    .me-xxl-1 {\n        margin-right: 0.25rem !important;\n    }\n\n    .me-xxl-2 {\n        margin-right: 0.5rem !important;\n    }\n\n    .me-xxl-3 {\n        margin-right: 1rem !important;\n    }\n\n    .me-xxl-4 {\n        margin-right: 1.5rem !important;\n    }\n\n    .me-xxl-5 {\n        margin-right: 3rem !important;\n    }\n\n    .me-xxl-auto {\n        margin-right: auto !important;\n    }\n\n    .mb-xxl-0 {\n        margin-bottom: 0 !important;\n    }\n\n    .mb-xxl-1 {\n        margin-bottom: 0.25rem !important;\n    }\n\n    .mb-xxl-2 {\n        margin-bottom: 0.5rem !important;\n    }\n\n    .mb-xxl-3 {\n        margin-bottom: 1rem !important;\n    }\n\n    .mb-xxl-4 {\n        margin-bottom: 1.5rem !important;\n    }\n\n    .mb-xxl-5 {\n        margin-bottom: 3rem !important;\n    }\n\n    .mb-xxl-auto {\n        margin-bottom: auto !important;\n    }\n\n    .ms-xxl-0 {\n        margin-left: 0 !important;\n    }\n\n    .ms-xxl-1 {\n        margin-left: 0.25rem !important;\n    }\n\n    .ms-xxl-2 {\n        margin-left: 0.5rem !important;\n    }\n\n    .ms-xxl-3 {\n        margin-left: 1rem !important;\n    }\n\n    .ms-xxl-4 {\n        margin-left: 1.5rem !important;\n    }\n\n    .ms-xxl-5 {\n        margin-left: 3rem !important;\n    }\n\n    .ms-xxl-auto {\n        margin-left: auto !important;\n    }\n\n    .p-xxl-0 {\n        padding: 0 !important;\n    }\n\n    .p-xxl-1 {\n        padding: 0.25rem !important;\n    }\n\n    .p-xxl-2 {\n        padding: 0.5rem !important;\n    }\n\n    .p-xxl-3 {\n        padding: 1rem !important;\n    }\n\n    .p-xxl-4 {\n        padding: 1.5rem !important;\n    }\n\n    .p-xxl-5 {\n        padding: 3rem !important;\n    }\n\n    .px-xxl-0 {\n        padding-right: 0 !important;\n        padding-left: 0 !important;\n    }\n\n    .px-xxl-1 {\n        padding-right: 0.25rem !important;\n        padding-left: 0.25rem !important;\n    }\n\n    .px-xxl-2 {\n        padding-right: 0.5rem !important;\n        padding-left: 0.5rem !important;\n    }\n\n    .px-xxl-3 {\n        padding-right: 1rem !important;\n        padding-left: 1rem !important;\n    }\n\n    .px-xxl-4 {\n        padding-right: 1.5rem !important;\n        padding-left: 1.5rem !important;\n    }\n\n    .px-xxl-5 {\n        padding-right: 3rem !important;\n        padding-left: 3rem !important;\n    }\n\n    .py-xxl-0 {\n        padding-top: 0 !important;\n        padding-bottom: 0 !important;\n    }\n\n    .py-xxl-1 {\n        padding-top: 0.25rem !important;\n        padding-bottom: 0.25rem !important;\n    }\n\n    .py-xxl-2 {\n        padding-top: 0.5rem !important;\n        padding-bottom: 0.5rem !important;\n    }\n\n    .py-xxl-3 {\n        padding-top: 1rem !important;\n        padding-bottom: 1rem !important;\n    }\n\n    .py-xxl-4 {\n        padding-top: 1.5rem !important;\n        padding-bottom: 1.5rem !important;\n    }\n\n    .py-xxl-5 {\n        padding-top: 3rem !important;\n        padding-bottom: 3rem !important;\n    }\n\n    .pt-xxl-0 {\n        padding-top: 0 !important;\n    }\n\n    .pt-xxl-1 {\n        padding-top: 0.25rem !important;\n    }\n\n    .pt-xxl-2 {\n        padding-top: 0.5rem !important;\n    }\n\n    .pt-xxl-3 {\n        padding-top: 1rem !important;\n    }\n\n    .pt-xxl-4 {\n        padding-top: 1.5rem !important;\n    }\n\n    .pt-xxl-5 {\n        padding-top: 3rem !important;\n    }\n\n    .pe-xxl-0 {\n        padding-right: 0 !important;\n    }\n\n    .pe-xxl-1 {\n        padding-right: 0.25rem !important;\n    }\n\n    .pe-xxl-2 {\n        padding-right: 0.5rem !important;\n    }\n\n    .pe-xxl-3 {\n        padding-right: 1rem !important;\n    }\n\n    .pe-xxl-4 {\n        padding-right: 1.5rem !important;\n    }\n\n    .pe-xxl-5 {\n        padding-right: 3rem !important;\n    }\n\n    .pb-xxl-0 {\n        padding-bottom: 0 !important;\n    }\n\n    .pb-xxl-1 {\n        padding-bottom: 0.25rem !important;\n    }\n\n    .pb-xxl-2 {\n        padding-bottom: 0.5rem !important;\n    }\n\n    .pb-xxl-3 {\n        padding-bottom: 1rem !important;\n    }\n\n    .pb-xxl-4 {\n        padding-bottom: 1.5rem !important;\n    }\n\n    .pb-xxl-5 {\n        padding-bottom: 3rem !important;\n    }\n\n    .ps-xxl-0 {\n        padding-left: 0 !important;\n    }\n\n    .ps-xxl-1 {\n        padding-left: 0.25rem !important;\n    }\n\n    .ps-xxl-2 {\n        padding-left: 0.5rem !important;\n    }\n\n    .ps-xxl-3 {\n        padding-left: 1rem !important;\n    }\n\n    .ps-xxl-4 {\n        padding-left: 1.5rem !important;\n    }\n\n    .ps-xxl-5 {\n        padding-left: 3rem !important;\n    }\n}\n\n@media print {\n    .d-print-inline {\n        display: inline !important;\n    }\n\n    .d-print-inline-block {\n        display: inline-block !important;\n    }\n\n    .d-print-block {\n        display: block !important;\n    }\n\n    .d-print-grid {\n        display: grid !important;\n    }\n\n    .d-print-table {\n        display: table !important;\n    }\n\n    .d-print-table-row {\n        display: table-row !important;\n    }\n\n    .d-print-table-cell {\n        display: table-cell !important;\n    }\n\n    .d-print-flex {\n        display: flex !important;\n    }\n\n    .d-print-inline-flex {\n        display: inline-flex !important;\n    }\n\n    .d-print-none {\n        display: none !important;\n    }\n}\n\n/*# sourceMappingURL=bootstrap-grid.css.map */"
  },
  {
    "path": "src/main/resources/web/css/bootstrap-grid.rtl.css",
    "content": "/*!\n * Bootstrap Grid v5.2.3 (https://getbootstrap.com/)\n * Copyright 2011-2022 The Bootstrap Authors\n * Copyright 2011-2022 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n:root {\n    --bs-blue: #0d6efd;\n    --bs-indigo: #6610f2;\n    --bs-purple: #6f42c1;\n    --bs-pink: #d63384;\n    --bs-red: #dc3545;\n    --bs-orange: #fd7e14;\n    --bs-yellow: #ffc107;\n    --bs-green: #198754;\n    --bs-teal: #20c997;\n    --bs-cyan: #0dcaf0;\n    --bs-black: #000;\n    --bs-white: #fff;\n    --bs-gray: #6c757d;\n    --bs-gray-dark: #343a40;\n    --bs-gray-100: #f8f9fa;\n    --bs-gray-200: #e9ecef;\n    --bs-gray-300: #dee2e6;\n    --bs-gray-400: #ced4da;\n    --bs-gray-500: #adb5bd;\n    --bs-gray-600: #6c757d;\n    --bs-gray-700: #495057;\n    --bs-gray-800: #343a40;\n    --bs-gray-900: #212529;\n    --bs-primary: #0d6efd;\n    --bs-secondary: #6c757d;\n    --bs-success: #198754;\n    --bs-info: #0dcaf0;\n    --bs-warning: #ffc107;\n    --bs-danger: #dc3545;\n    --bs-light: #f8f9fa;\n    --bs-dark: #212529;\n    --bs-primary-rgb: 13, 110, 253;\n    --bs-secondary-rgb: 108, 117, 125;\n    --bs-success-rgb: 25, 135, 84;\n    --bs-info-rgb: 13, 202, 240;\n    --bs-warning-rgb: 255, 193, 7;\n    --bs-danger-rgb: 220, 53, 69;\n    --bs-light-rgb: 248, 249, 250;\n    --bs-dark-rgb: 33, 37, 41;\n    --bs-white-rgb: 255, 255, 255;\n    --bs-black-rgb: 0, 0, 0;\n    --bs-body-color-rgb: 33, 37, 41;\n    --bs-body-bg-rgb: 255, 255, 255;\n    --bs-font-sans-serif: system-ui, -apple-system, \"Segoe UI\", Roboto, \"Helvetica Neue\", \"Noto Sans\", \"Liberation Sans\", Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n    --bs-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n    --bs-gradient: linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));\n    --bs-body-font-family: var(--bs-font-sans-serif);\n    --bs-body-font-size: 1rem;\n    --bs-body-font-weight: 400;\n    --bs-body-line-height: 1.5;\n    --bs-body-color: #212529;\n    --bs-body-bg: #fff;\n    --bs-border-width: 1px;\n    --bs-border-style: solid;\n    --bs-border-color: #dee2e6;\n    --bs-border-color-translucent: rgba(0, 0, 0, 0.175);\n    --bs-border-radius: 0.375rem;\n    --bs-border-radius-sm: 0.25rem;\n    --bs-border-radius-lg: 0.5rem;\n    --bs-border-radius-xl: 1rem;\n    --bs-border-radius-2xl: 2rem;\n    --bs-border-radius-pill: 50rem;\n    --bs-link-color: #0d6efd;\n    --bs-link-hover-color: #0a58ca;\n    --bs-code-color: #d63384;\n    --bs-highlight-bg: #fff3cd;\n}\n\n.container,\n.container-fluid,\n.container-xxl,\n.container-xl,\n.container-lg,\n.container-md,\n.container-sm {\n    --bs-gutter-x: 1.5rem;\n    --bs-gutter-y: 0;\n    width: 100%;\n    padding-left: calc(var(--bs-gutter-x) * 0.5);\n    padding-right: calc(var(--bs-gutter-x) * 0.5);\n    margin-left: auto;\n    margin-right: auto;\n}\n\n@media (min-width: 576px) {\n    .container-sm, .container {\n        max-width: 540px;\n    }\n}\n\n@media (min-width: 768px) {\n    .container-md, .container-sm, .container {\n        max-width: 720px;\n    }\n}\n\n@media (min-width: 992px) {\n    .container-lg, .container-md, .container-sm, .container {\n        max-width: 960px;\n    }\n}\n\n@media (min-width: 1200px) {\n    .container-xl, .container-lg, .container-md, .container-sm, .container {\n        max-width: 1140px;\n    }\n}\n\n@media (min-width: 1400px) {\n    .container-xxl, .container-xl, .container-lg, .container-md, .container-sm, .container {\n        max-width: 1320px;\n    }\n}\n\n.row {\n    --bs-gutter-x: 1.5rem;\n    --bs-gutter-y: 0;\n    display: flex;\n    flex-wrap: wrap;\n    margin-top: calc(-1 * var(--bs-gutter-y));\n    margin-left: calc(-0.5 * var(--bs-gutter-x));\n    margin-right: calc(-0.5 * var(--bs-gutter-x));\n}\n\n.row > * {\n    box-sizing: border-box;\n    flex-shrink: 0;\n    width: 100%;\n    max-width: 100%;\n    padding-left: calc(var(--bs-gutter-x) * 0.5);\n    padding-right: calc(var(--bs-gutter-x) * 0.5);\n    margin-top: var(--bs-gutter-y);\n}\n\n.col {\n    flex: 1 0 0%;\n}\n\n.row-cols-auto > * {\n    flex: 0 0 auto;\n    width: auto;\n}\n\n.row-cols-1 > * {\n    flex: 0 0 auto;\n    width: 100%;\n}\n\n.row-cols-2 > * {\n    flex: 0 0 auto;\n    width: 50%;\n}\n\n.row-cols-3 > * {\n    flex: 0 0 auto;\n    width: 33.3333333333%;\n}\n\n.row-cols-4 > * {\n    flex: 0 0 auto;\n    width: 25%;\n}\n\n.row-cols-5 > * {\n    flex: 0 0 auto;\n    width: 20%;\n}\n\n.row-cols-6 > * {\n    flex: 0 0 auto;\n    width: 16.6666666667%;\n}\n\n.col-auto {\n    flex: 0 0 auto;\n    width: auto;\n}\n\n.col-1 {\n    flex: 0 0 auto;\n    width: 8.33333333%;\n}\n\n.col-2 {\n    flex: 0 0 auto;\n    width: 16.66666667%;\n}\n\n.col-3 {\n    flex: 0 0 auto;\n    width: 25%;\n}\n\n.col-4 {\n    flex: 0 0 auto;\n    width: 33.33333333%;\n}\n\n.col-5 {\n    flex: 0 0 auto;\n    width: 41.66666667%;\n}\n\n.col-6 {\n    flex: 0 0 auto;\n    width: 50%;\n}\n\n.col-7 {\n    flex: 0 0 auto;\n    width: 58.33333333%;\n}\n\n.col-8 {\n    flex: 0 0 auto;\n    width: 66.66666667%;\n}\n\n.col-9 {\n    flex: 0 0 auto;\n    width: 75%;\n}\n\n.col-10 {\n    flex: 0 0 auto;\n    width: 83.33333333%;\n}\n\n.col-11 {\n    flex: 0 0 auto;\n    width: 91.66666667%;\n}\n\n.col-12 {\n    flex: 0 0 auto;\n    width: 100%;\n}\n\n.offset-1 {\n    margin-right: 8.33333333%;\n}\n\n.offset-2 {\n    margin-right: 16.66666667%;\n}\n\n.offset-3 {\n    margin-right: 25%;\n}\n\n.offset-4 {\n    margin-right: 33.33333333%;\n}\n\n.offset-5 {\n    margin-right: 41.66666667%;\n}\n\n.offset-6 {\n    margin-right: 50%;\n}\n\n.offset-7 {\n    margin-right: 58.33333333%;\n}\n\n.offset-8 {\n    margin-right: 66.66666667%;\n}\n\n.offset-9 {\n    margin-right: 75%;\n}\n\n.offset-10 {\n    margin-right: 83.33333333%;\n}\n\n.offset-11 {\n    margin-right: 91.66666667%;\n}\n\n.g-0,\n.gx-0 {\n    --bs-gutter-x: 0;\n}\n\n.g-0,\n.gy-0 {\n    --bs-gutter-y: 0;\n}\n\n.g-1,\n.gx-1 {\n    --bs-gutter-x: 0.25rem;\n}\n\n.g-1,\n.gy-1 {\n    --bs-gutter-y: 0.25rem;\n}\n\n.g-2,\n.gx-2 {\n    --bs-gutter-x: 0.5rem;\n}\n\n.g-2,\n.gy-2 {\n    --bs-gutter-y: 0.5rem;\n}\n\n.g-3,\n.gx-3 {\n    --bs-gutter-x: 1rem;\n}\n\n.g-3,\n.gy-3 {\n    --bs-gutter-y: 1rem;\n}\n\n.g-4,\n.gx-4 {\n    --bs-gutter-x: 1.5rem;\n}\n\n.g-4,\n.gy-4 {\n    --bs-gutter-y: 1.5rem;\n}\n\n.g-5,\n.gx-5 {\n    --bs-gutter-x: 3rem;\n}\n\n.g-5,\n.gy-5 {\n    --bs-gutter-y: 3rem;\n}\n\n@media (min-width: 576px) {\n    .col-sm {\n        flex: 1 0 0%;\n    }\n\n    .row-cols-sm-auto > * {\n        flex: 0 0 auto;\n        width: auto;\n    }\n\n    .row-cols-sm-1 > * {\n        flex: 0 0 auto;\n        width: 100%;\n    }\n\n    .row-cols-sm-2 > * {\n        flex: 0 0 auto;\n        width: 50%;\n    }\n\n    .row-cols-sm-3 > * {\n        flex: 0 0 auto;\n        width: 33.3333333333%;\n    }\n\n    .row-cols-sm-4 > * {\n        flex: 0 0 auto;\n        width: 25%;\n    }\n\n    .row-cols-sm-5 > * {\n        flex: 0 0 auto;\n        width: 20%;\n    }\n\n    .row-cols-sm-6 > * {\n        flex: 0 0 auto;\n        width: 16.6666666667%;\n    }\n\n    .col-sm-auto {\n        flex: 0 0 auto;\n        width: auto;\n    }\n\n    .col-sm-1 {\n        flex: 0 0 auto;\n        width: 8.33333333%;\n    }\n\n    .col-sm-2 {\n        flex: 0 0 auto;\n        width: 16.66666667%;\n    }\n\n    .col-sm-3 {\n        flex: 0 0 auto;\n        width: 25%;\n    }\n\n    .col-sm-4 {\n        flex: 0 0 auto;\n        width: 33.33333333%;\n    }\n\n    .col-sm-5 {\n        flex: 0 0 auto;\n        width: 41.66666667%;\n    }\n\n    .col-sm-6 {\n        flex: 0 0 auto;\n        width: 50%;\n    }\n\n    .col-sm-7 {\n        flex: 0 0 auto;\n        width: 58.33333333%;\n    }\n\n    .col-sm-8 {\n        flex: 0 0 auto;\n        width: 66.66666667%;\n    }\n\n    .col-sm-9 {\n        flex: 0 0 auto;\n        width: 75%;\n    }\n\n    .col-sm-10 {\n        flex: 0 0 auto;\n        width: 83.33333333%;\n    }\n\n    .col-sm-11 {\n        flex: 0 0 auto;\n        width: 91.66666667%;\n    }\n\n    .col-sm-12 {\n        flex: 0 0 auto;\n        width: 100%;\n    }\n\n    .offset-sm-0 {\n        margin-right: 0;\n    }\n\n    .offset-sm-1 {\n        margin-right: 8.33333333%;\n    }\n\n    .offset-sm-2 {\n        margin-right: 16.66666667%;\n    }\n\n    .offset-sm-3 {\n        margin-right: 25%;\n    }\n\n    .offset-sm-4 {\n        margin-right: 33.33333333%;\n    }\n\n    .offset-sm-5 {\n        margin-right: 41.66666667%;\n    }\n\n    .offset-sm-6 {\n        margin-right: 50%;\n    }\n\n    .offset-sm-7 {\n        margin-right: 58.33333333%;\n    }\n\n    .offset-sm-8 {\n        margin-right: 66.66666667%;\n    }\n\n    .offset-sm-9 {\n        margin-right: 75%;\n    }\n\n    .offset-sm-10 {\n        margin-right: 83.33333333%;\n    }\n\n    .offset-sm-11 {\n        margin-right: 91.66666667%;\n    }\n\n    .g-sm-0,\n    .gx-sm-0 {\n        --bs-gutter-x: 0;\n    }\n\n    .g-sm-0,\n    .gy-sm-0 {\n        --bs-gutter-y: 0;\n    }\n\n    .g-sm-1,\n    .gx-sm-1 {\n        --bs-gutter-x: 0.25rem;\n    }\n\n    .g-sm-1,\n    .gy-sm-1 {\n        --bs-gutter-y: 0.25rem;\n    }\n\n    .g-sm-2,\n    .gx-sm-2 {\n        --bs-gutter-x: 0.5rem;\n    }\n\n    .g-sm-2,\n    .gy-sm-2 {\n        --bs-gutter-y: 0.5rem;\n    }\n\n    .g-sm-3,\n    .gx-sm-3 {\n        --bs-gutter-x: 1rem;\n    }\n\n    .g-sm-3,\n    .gy-sm-3 {\n        --bs-gutter-y: 1rem;\n    }\n\n    .g-sm-4,\n    .gx-sm-4 {\n        --bs-gutter-x: 1.5rem;\n    }\n\n    .g-sm-4,\n    .gy-sm-4 {\n        --bs-gutter-y: 1.5rem;\n    }\n\n    .g-sm-5,\n    .gx-sm-5 {\n        --bs-gutter-x: 3rem;\n    }\n\n    .g-sm-5,\n    .gy-sm-5 {\n        --bs-gutter-y: 3rem;\n    }\n}\n\n@media (min-width: 768px) {\n    .col-md {\n        flex: 1 0 0%;\n    }\n\n    .row-cols-md-auto > * {\n        flex: 0 0 auto;\n        width: auto;\n    }\n\n    .row-cols-md-1 > * {\n        flex: 0 0 auto;\n        width: 100%;\n    }\n\n    .row-cols-md-2 > * {\n        flex: 0 0 auto;\n        width: 50%;\n    }\n\n    .row-cols-md-3 > * {\n        flex: 0 0 auto;\n        width: 33.3333333333%;\n    }\n\n    .row-cols-md-4 > * {\n        flex: 0 0 auto;\n        width: 25%;\n    }\n\n    .row-cols-md-5 > * {\n        flex: 0 0 auto;\n        width: 20%;\n    }\n\n    .row-cols-md-6 > * {\n        flex: 0 0 auto;\n        width: 16.6666666667%;\n    }\n\n    .col-md-auto {\n        flex: 0 0 auto;\n        width: auto;\n    }\n\n    .col-md-1 {\n        flex: 0 0 auto;\n        width: 8.33333333%;\n    }\n\n    .col-md-2 {\n        flex: 0 0 auto;\n        width: 16.66666667%;\n    }\n\n    .col-md-3 {\n        flex: 0 0 auto;\n        width: 25%;\n    }\n\n    .col-md-4 {\n        flex: 0 0 auto;\n        width: 33.33333333%;\n    }\n\n    .col-md-5 {\n        flex: 0 0 auto;\n        width: 41.66666667%;\n    }\n\n    .col-md-6 {\n        flex: 0 0 auto;\n        width: 50%;\n    }\n\n    .col-md-7 {\n        flex: 0 0 auto;\n        width: 58.33333333%;\n    }\n\n    .col-md-8 {\n        flex: 0 0 auto;\n        width: 66.66666667%;\n    }\n\n    .col-md-9 {\n        flex: 0 0 auto;\n        width: 75%;\n    }\n\n    .col-md-10 {\n        flex: 0 0 auto;\n        width: 83.33333333%;\n    }\n\n    .col-md-11 {\n        flex: 0 0 auto;\n        width: 91.66666667%;\n    }\n\n    .col-md-12 {\n        flex: 0 0 auto;\n        width: 100%;\n    }\n\n    .offset-md-0 {\n        margin-right: 0;\n    }\n\n    .offset-md-1 {\n        margin-right: 8.33333333%;\n    }\n\n    .offset-md-2 {\n        margin-right: 16.66666667%;\n    }\n\n    .offset-md-3 {\n        margin-right: 25%;\n    }\n\n    .offset-md-4 {\n        margin-right: 33.33333333%;\n    }\n\n    .offset-md-5 {\n        margin-right: 41.66666667%;\n    }\n\n    .offset-md-6 {\n        margin-right: 50%;\n    }\n\n    .offset-md-7 {\n        margin-right: 58.33333333%;\n    }\n\n    .offset-md-8 {\n        margin-right: 66.66666667%;\n    }\n\n    .offset-md-9 {\n        margin-right: 75%;\n    }\n\n    .offset-md-10 {\n        margin-right: 83.33333333%;\n    }\n\n    .offset-md-11 {\n        margin-right: 91.66666667%;\n    }\n\n    .g-md-0,\n    .gx-md-0 {\n        --bs-gutter-x: 0;\n    }\n\n    .g-md-0,\n    .gy-md-0 {\n        --bs-gutter-y: 0;\n    }\n\n    .g-md-1,\n    .gx-md-1 {\n        --bs-gutter-x: 0.25rem;\n    }\n\n    .g-md-1,\n    .gy-md-1 {\n        --bs-gutter-y: 0.25rem;\n    }\n\n    .g-md-2,\n    .gx-md-2 {\n        --bs-gutter-x: 0.5rem;\n    }\n\n    .g-md-2,\n    .gy-md-2 {\n        --bs-gutter-y: 0.5rem;\n    }\n\n    .g-md-3,\n    .gx-md-3 {\n        --bs-gutter-x: 1rem;\n    }\n\n    .g-md-3,\n    .gy-md-3 {\n        --bs-gutter-y: 1rem;\n    }\n\n    .g-md-4,\n    .gx-md-4 {\n        --bs-gutter-x: 1.5rem;\n    }\n\n    .g-md-4,\n    .gy-md-4 {\n        --bs-gutter-y: 1.5rem;\n    }\n\n    .g-md-5,\n    .gx-md-5 {\n        --bs-gutter-x: 3rem;\n    }\n\n    .g-md-5,\n    .gy-md-5 {\n        --bs-gutter-y: 3rem;\n    }\n}\n\n@media (min-width: 992px) {\n    .col-lg {\n        flex: 1 0 0%;\n    }\n\n    .row-cols-lg-auto > * {\n        flex: 0 0 auto;\n        width: auto;\n    }\n\n    .row-cols-lg-1 > * {\n        flex: 0 0 auto;\n        width: 100%;\n    }\n\n    .row-cols-lg-2 > * {\n        flex: 0 0 auto;\n        width: 50%;\n    }\n\n    .row-cols-lg-3 > * {\n        flex: 0 0 auto;\n        width: 33.3333333333%;\n    }\n\n    .row-cols-lg-4 > * {\n        flex: 0 0 auto;\n        width: 25%;\n    }\n\n    .row-cols-lg-5 > * {\n        flex: 0 0 auto;\n        width: 20%;\n    }\n\n    .row-cols-lg-6 > * {\n        flex: 0 0 auto;\n        width: 16.6666666667%;\n    }\n\n    .col-lg-auto {\n        flex: 0 0 auto;\n        width: auto;\n    }\n\n    .col-lg-1 {\n        flex: 0 0 auto;\n        width: 8.33333333%;\n    }\n\n    .col-lg-2 {\n        flex: 0 0 auto;\n        width: 16.66666667%;\n    }\n\n    .col-lg-3 {\n        flex: 0 0 auto;\n        width: 25%;\n    }\n\n    .col-lg-4 {\n        flex: 0 0 auto;\n        width: 33.33333333%;\n    }\n\n    .col-lg-5 {\n        flex: 0 0 auto;\n        width: 41.66666667%;\n    }\n\n    .col-lg-6 {\n        flex: 0 0 auto;\n        width: 50%;\n    }\n\n    .col-lg-7 {\n        flex: 0 0 auto;\n        width: 58.33333333%;\n    }\n\n    .col-lg-8 {\n        flex: 0 0 auto;\n        width: 66.66666667%;\n    }\n\n    .col-lg-9 {\n        flex: 0 0 auto;\n        width: 75%;\n    }\n\n    .col-lg-10 {\n        flex: 0 0 auto;\n        width: 83.33333333%;\n    }\n\n    .col-lg-11 {\n        flex: 0 0 auto;\n        width: 91.66666667%;\n    }\n\n    .col-lg-12 {\n        flex: 0 0 auto;\n        width: 100%;\n    }\n\n    .offset-lg-0 {\n        margin-right: 0;\n    }\n\n    .offset-lg-1 {\n        margin-right: 8.33333333%;\n    }\n\n    .offset-lg-2 {\n        margin-right: 16.66666667%;\n    }\n\n    .offset-lg-3 {\n        margin-right: 25%;\n    }\n\n    .offset-lg-4 {\n        margin-right: 33.33333333%;\n    }\n\n    .offset-lg-5 {\n        margin-right: 41.66666667%;\n    }\n\n    .offset-lg-6 {\n        margin-right: 50%;\n    }\n\n    .offset-lg-7 {\n        margin-right: 58.33333333%;\n    }\n\n    .offset-lg-8 {\n        margin-right: 66.66666667%;\n    }\n\n    .offset-lg-9 {\n        margin-right: 75%;\n    }\n\n    .offset-lg-10 {\n        margin-right: 83.33333333%;\n    }\n\n    .offset-lg-11 {\n        margin-right: 91.66666667%;\n    }\n\n    .g-lg-0,\n    .gx-lg-0 {\n        --bs-gutter-x: 0;\n    }\n\n    .g-lg-0,\n    .gy-lg-0 {\n        --bs-gutter-y: 0;\n    }\n\n    .g-lg-1,\n    .gx-lg-1 {\n        --bs-gutter-x: 0.25rem;\n    }\n\n    .g-lg-1,\n    .gy-lg-1 {\n        --bs-gutter-y: 0.25rem;\n    }\n\n    .g-lg-2,\n    .gx-lg-2 {\n        --bs-gutter-x: 0.5rem;\n    }\n\n    .g-lg-2,\n    .gy-lg-2 {\n        --bs-gutter-y: 0.5rem;\n    }\n\n    .g-lg-3,\n    .gx-lg-3 {\n        --bs-gutter-x: 1rem;\n    }\n\n    .g-lg-3,\n    .gy-lg-3 {\n        --bs-gutter-y: 1rem;\n    }\n\n    .g-lg-4,\n    .gx-lg-4 {\n        --bs-gutter-x: 1.5rem;\n    }\n\n    .g-lg-4,\n    .gy-lg-4 {\n        --bs-gutter-y: 1.5rem;\n    }\n\n    .g-lg-5,\n    .gx-lg-5 {\n        --bs-gutter-x: 3rem;\n    }\n\n    .g-lg-5,\n    .gy-lg-5 {\n        --bs-gutter-y: 3rem;\n    }\n}\n\n@media (min-width: 1200px) {\n    .col-xl {\n        flex: 1 0 0%;\n    }\n\n    .row-cols-xl-auto > * {\n        flex: 0 0 auto;\n        width: auto;\n    }\n\n    .row-cols-xl-1 > * {\n        flex: 0 0 auto;\n        width: 100%;\n    }\n\n    .row-cols-xl-2 > * {\n        flex: 0 0 auto;\n        width: 50%;\n    }\n\n    .row-cols-xl-3 > * {\n        flex: 0 0 auto;\n        width: 33.3333333333%;\n    }\n\n    .row-cols-xl-4 > * {\n        flex: 0 0 auto;\n        width: 25%;\n    }\n\n    .row-cols-xl-5 > * {\n        flex: 0 0 auto;\n        width: 20%;\n    }\n\n    .row-cols-xl-6 > * {\n        flex: 0 0 auto;\n        width: 16.6666666667%;\n    }\n\n    .col-xl-auto {\n        flex: 0 0 auto;\n        width: auto;\n    }\n\n    .col-xl-1 {\n        flex: 0 0 auto;\n        width: 8.33333333%;\n    }\n\n    .col-xl-2 {\n        flex: 0 0 auto;\n        width: 16.66666667%;\n    }\n\n    .col-xl-3 {\n        flex: 0 0 auto;\n        width: 25%;\n    }\n\n    .col-xl-4 {\n        flex: 0 0 auto;\n        width: 33.33333333%;\n    }\n\n    .col-xl-5 {\n        flex: 0 0 auto;\n        width: 41.66666667%;\n    }\n\n    .col-xl-6 {\n        flex: 0 0 auto;\n        width: 50%;\n    }\n\n    .col-xl-7 {\n        flex: 0 0 auto;\n        width: 58.33333333%;\n    }\n\n    .col-xl-8 {\n        flex: 0 0 auto;\n        width: 66.66666667%;\n    }\n\n    .col-xl-9 {\n        flex: 0 0 auto;\n        width: 75%;\n    }\n\n    .col-xl-10 {\n        flex: 0 0 auto;\n        width: 83.33333333%;\n    }\n\n    .col-xl-11 {\n        flex: 0 0 auto;\n        width: 91.66666667%;\n    }\n\n    .col-xl-12 {\n        flex: 0 0 auto;\n        width: 100%;\n    }\n\n    .offset-xl-0 {\n        margin-right: 0;\n    }\n\n    .offset-xl-1 {\n        margin-right: 8.33333333%;\n    }\n\n    .offset-xl-2 {\n        margin-right: 16.66666667%;\n    }\n\n    .offset-xl-3 {\n        margin-right: 25%;\n    }\n\n    .offset-xl-4 {\n        margin-right: 33.33333333%;\n    }\n\n    .offset-xl-5 {\n        margin-right: 41.66666667%;\n    }\n\n    .offset-xl-6 {\n        margin-right: 50%;\n    }\n\n    .offset-xl-7 {\n        margin-right: 58.33333333%;\n    }\n\n    .offset-xl-8 {\n        margin-right: 66.66666667%;\n    }\n\n    .offset-xl-9 {\n        margin-right: 75%;\n    }\n\n    .offset-xl-10 {\n        margin-right: 83.33333333%;\n    }\n\n    .offset-xl-11 {\n        margin-right: 91.66666667%;\n    }\n\n    .g-xl-0,\n    .gx-xl-0 {\n        --bs-gutter-x: 0;\n    }\n\n    .g-xl-0,\n    .gy-xl-0 {\n        --bs-gutter-y: 0;\n    }\n\n    .g-xl-1,\n    .gx-xl-1 {\n        --bs-gutter-x: 0.25rem;\n    }\n\n    .g-xl-1,\n    .gy-xl-1 {\n        --bs-gutter-y: 0.25rem;\n    }\n\n    .g-xl-2,\n    .gx-xl-2 {\n        --bs-gutter-x: 0.5rem;\n    }\n\n    .g-xl-2,\n    .gy-xl-2 {\n        --bs-gutter-y: 0.5rem;\n    }\n\n    .g-xl-3,\n    .gx-xl-3 {\n        --bs-gutter-x: 1rem;\n    }\n\n    .g-xl-3,\n    .gy-xl-3 {\n        --bs-gutter-y: 1rem;\n    }\n\n    .g-xl-4,\n    .gx-xl-4 {\n        --bs-gutter-x: 1.5rem;\n    }\n\n    .g-xl-4,\n    .gy-xl-4 {\n        --bs-gutter-y: 1.5rem;\n    }\n\n    .g-xl-5,\n    .gx-xl-5 {\n        --bs-gutter-x: 3rem;\n    }\n\n    .g-xl-5,\n    .gy-xl-5 {\n        --bs-gutter-y: 3rem;\n    }\n}\n\n@media (min-width: 1400px) {\n    .col-xxl {\n        flex: 1 0 0%;\n    }\n\n    .row-cols-xxl-auto > * {\n        flex: 0 0 auto;\n        width: auto;\n    }\n\n    .row-cols-xxl-1 > * {\n        flex: 0 0 auto;\n        width: 100%;\n    }\n\n    .row-cols-xxl-2 > * {\n        flex: 0 0 auto;\n        width: 50%;\n    }\n\n    .row-cols-xxl-3 > * {\n        flex: 0 0 auto;\n        width: 33.3333333333%;\n    }\n\n    .row-cols-xxl-4 > * {\n        flex: 0 0 auto;\n        width: 25%;\n    }\n\n    .row-cols-xxl-5 > * {\n        flex: 0 0 auto;\n        width: 20%;\n    }\n\n    .row-cols-xxl-6 > * {\n        flex: 0 0 auto;\n        width: 16.6666666667%;\n    }\n\n    .col-xxl-auto {\n        flex: 0 0 auto;\n        width: auto;\n    }\n\n    .col-xxl-1 {\n        flex: 0 0 auto;\n        width: 8.33333333%;\n    }\n\n    .col-xxl-2 {\n        flex: 0 0 auto;\n        width: 16.66666667%;\n    }\n\n    .col-xxl-3 {\n        flex: 0 0 auto;\n        width: 25%;\n    }\n\n    .col-xxl-4 {\n        flex: 0 0 auto;\n        width: 33.33333333%;\n    }\n\n    .col-xxl-5 {\n        flex: 0 0 auto;\n        width: 41.66666667%;\n    }\n\n    .col-xxl-6 {\n        flex: 0 0 auto;\n        width: 50%;\n    }\n\n    .col-xxl-7 {\n        flex: 0 0 auto;\n        width: 58.33333333%;\n    }\n\n    .col-xxl-8 {\n        flex: 0 0 auto;\n        width: 66.66666667%;\n    }\n\n    .col-xxl-9 {\n        flex: 0 0 auto;\n        width: 75%;\n    }\n\n    .col-xxl-10 {\n        flex: 0 0 auto;\n        width: 83.33333333%;\n    }\n\n    .col-xxl-11 {\n        flex: 0 0 auto;\n        width: 91.66666667%;\n    }\n\n    .col-xxl-12 {\n        flex: 0 0 auto;\n        width: 100%;\n    }\n\n    .offset-xxl-0 {\n        margin-right: 0;\n    }\n\n    .offset-xxl-1 {\n        margin-right: 8.33333333%;\n    }\n\n    .offset-xxl-2 {\n        margin-right: 16.66666667%;\n    }\n\n    .offset-xxl-3 {\n        margin-right: 25%;\n    }\n\n    .offset-xxl-4 {\n        margin-right: 33.33333333%;\n    }\n\n    .offset-xxl-5 {\n        margin-right: 41.66666667%;\n    }\n\n    .offset-xxl-6 {\n        margin-right: 50%;\n    }\n\n    .offset-xxl-7 {\n        margin-right: 58.33333333%;\n    }\n\n    .offset-xxl-8 {\n        margin-right: 66.66666667%;\n    }\n\n    .offset-xxl-9 {\n        margin-right: 75%;\n    }\n\n    .offset-xxl-10 {\n        margin-right: 83.33333333%;\n    }\n\n    .offset-xxl-11 {\n        margin-right: 91.66666667%;\n    }\n\n    .g-xxl-0,\n    .gx-xxl-0 {\n        --bs-gutter-x: 0;\n    }\n\n    .g-xxl-0,\n    .gy-xxl-0 {\n        --bs-gutter-y: 0;\n    }\n\n    .g-xxl-1,\n    .gx-xxl-1 {\n        --bs-gutter-x: 0.25rem;\n    }\n\n    .g-xxl-1,\n    .gy-xxl-1 {\n        --bs-gutter-y: 0.25rem;\n    }\n\n    .g-xxl-2,\n    .gx-xxl-2 {\n        --bs-gutter-x: 0.5rem;\n    }\n\n    .g-xxl-2,\n    .gy-xxl-2 {\n        --bs-gutter-y: 0.5rem;\n    }\n\n    .g-xxl-3,\n    .gx-xxl-3 {\n        --bs-gutter-x: 1rem;\n    }\n\n    .g-xxl-3,\n    .gy-xxl-3 {\n        --bs-gutter-y: 1rem;\n    }\n\n    .g-xxl-4,\n    .gx-xxl-4 {\n        --bs-gutter-x: 1.5rem;\n    }\n\n    .g-xxl-4,\n    .gy-xxl-4 {\n        --bs-gutter-y: 1.5rem;\n    }\n\n    .g-xxl-5,\n    .gx-xxl-5 {\n        --bs-gutter-x: 3rem;\n    }\n\n    .g-xxl-5,\n    .gy-xxl-5 {\n        --bs-gutter-y: 3rem;\n    }\n}\n\n.d-inline {\n    display: inline !important;\n}\n\n.d-inline-block {\n    display: inline-block !important;\n}\n\n.d-block {\n    display: block !important;\n}\n\n.d-grid {\n    display: grid !important;\n}\n\n.d-table {\n    display: table !important;\n}\n\n.d-table-row {\n    display: table-row !important;\n}\n\n.d-table-cell {\n    display: table-cell !important;\n}\n\n.d-flex {\n    display: flex !important;\n}\n\n.d-inline-flex {\n    display: inline-flex !important;\n}\n\n.d-none {\n    display: none !important;\n}\n\n.flex-fill {\n    flex: 1 1 auto !important;\n}\n\n.flex-row {\n    flex-direction: row !important;\n}\n\n.flex-column {\n    flex-direction: column !important;\n}\n\n.flex-row-reverse {\n    flex-direction: row-reverse !important;\n}\n\n.flex-column-reverse {\n    flex-direction: column-reverse !important;\n}\n\n.flex-grow-0 {\n    flex-grow: 0 !important;\n}\n\n.flex-grow-1 {\n    flex-grow: 1 !important;\n}\n\n.flex-shrink-0 {\n    flex-shrink: 0 !important;\n}\n\n.flex-shrink-1 {\n    flex-shrink: 1 !important;\n}\n\n.flex-wrap {\n    flex-wrap: wrap !important;\n}\n\n.flex-nowrap {\n    flex-wrap: nowrap !important;\n}\n\n.flex-wrap-reverse {\n    flex-wrap: wrap-reverse !important;\n}\n\n.justify-content-start {\n    justify-content: flex-start !important;\n}\n\n.justify-content-end {\n    justify-content: flex-end !important;\n}\n\n.justify-content-center {\n    justify-content: center !important;\n}\n\n.justify-content-between {\n    justify-content: space-between !important;\n}\n\n.justify-content-around {\n    justify-content: space-around !important;\n}\n\n.justify-content-evenly {\n    justify-content: space-evenly !important;\n}\n\n.align-items-start {\n    align-items: flex-start !important;\n}\n\n.align-items-end {\n    align-items: flex-end !important;\n}\n\n.align-items-center {\n    align-items: center !important;\n}\n\n.align-items-baseline {\n    align-items: baseline !important;\n}\n\n.align-items-stretch {\n    align-items: stretch !important;\n}\n\n.align-content-start {\n    align-content: flex-start !important;\n}\n\n.align-content-end {\n    align-content: flex-end !important;\n}\n\n.align-content-center {\n    align-content: center !important;\n}\n\n.align-content-between {\n    align-content: space-between !important;\n}\n\n.align-content-around {\n    align-content: space-around !important;\n}\n\n.align-content-stretch {\n    align-content: stretch !important;\n}\n\n.align-self-auto {\n    align-self: auto !important;\n}\n\n.align-self-start {\n    align-self: flex-start !important;\n}\n\n.align-self-end {\n    align-self: flex-end !important;\n}\n\n.align-self-center {\n    align-self: center !important;\n}\n\n.align-self-baseline {\n    align-self: baseline !important;\n}\n\n.align-self-stretch {\n    align-self: stretch !important;\n}\n\n.order-first {\n    order: -1 !important;\n}\n\n.order-0 {\n    order: 0 !important;\n}\n\n.order-1 {\n    order: 1 !important;\n}\n\n.order-2 {\n    order: 2 !important;\n}\n\n.order-3 {\n    order: 3 !important;\n}\n\n.order-4 {\n    order: 4 !important;\n}\n\n.order-5 {\n    order: 5 !important;\n}\n\n.order-last {\n    order: 6 !important;\n}\n\n.m-0 {\n    margin: 0 !important;\n}\n\n.m-1 {\n    margin: 0.25rem !important;\n}\n\n.m-2 {\n    margin: 0.5rem !important;\n}\n\n.m-3 {\n    margin: 1rem !important;\n}\n\n.m-4 {\n    margin: 1.5rem !important;\n}\n\n.m-5 {\n    margin: 3rem !important;\n}\n\n.m-auto {\n    margin: auto !important;\n}\n\n.mx-0 {\n    margin-left: 0 !important;\n    margin-right: 0 !important;\n}\n\n.mx-1 {\n    margin-left: 0.25rem !important;\n    margin-right: 0.25rem !important;\n}\n\n.mx-2 {\n    margin-left: 0.5rem !important;\n    margin-right: 0.5rem !important;\n}\n\n.mx-3 {\n    margin-left: 1rem !important;\n    margin-right: 1rem !important;\n}\n\n.mx-4 {\n    margin-left: 1.5rem !important;\n    margin-right: 1.5rem !important;\n}\n\n.mx-5 {\n    margin-left: 3rem !important;\n    margin-right: 3rem !important;\n}\n\n.mx-auto {\n    margin-left: auto !important;\n    margin-right: auto !important;\n}\n\n.my-0 {\n    margin-top: 0 !important;\n    margin-bottom: 0 !important;\n}\n\n.my-1 {\n    margin-top: 0.25rem !important;\n    margin-bottom: 0.25rem !important;\n}\n\n.my-2 {\n    margin-top: 0.5rem !important;\n    margin-bottom: 0.5rem !important;\n}\n\n.my-3 {\n    margin-top: 1rem !important;\n    margin-bottom: 1rem !important;\n}\n\n.my-4 {\n    margin-top: 1.5rem !important;\n    margin-bottom: 1.5rem !important;\n}\n\n.my-5 {\n    margin-top: 3rem !important;\n    margin-bottom: 3rem !important;\n}\n\n.my-auto {\n    margin-top: auto !important;\n    margin-bottom: auto !important;\n}\n\n.mt-0 {\n    margin-top: 0 !important;\n}\n\n.mt-1 {\n    margin-top: 0.25rem !important;\n}\n\n.mt-2 {\n    margin-top: 0.5rem !important;\n}\n\n.mt-3 {\n    margin-top: 1rem !important;\n}\n\n.mt-4 {\n    margin-top: 1.5rem !important;\n}\n\n.mt-5 {\n    margin-top: 3rem !important;\n}\n\n.mt-auto {\n    margin-top: auto !important;\n}\n\n.me-0 {\n    margin-left: 0 !important;\n}\n\n.me-1 {\n    margin-left: 0.25rem !important;\n}\n\n.me-2 {\n    margin-left: 0.5rem !important;\n}\n\n.me-3 {\n    margin-left: 1rem !important;\n}\n\n.me-4 {\n    margin-left: 1.5rem !important;\n}\n\n.me-5 {\n    margin-left: 3rem !important;\n}\n\n.me-auto {\n    margin-left: auto !important;\n}\n\n.mb-0 {\n    margin-bottom: 0 !important;\n}\n\n.mb-1 {\n    margin-bottom: 0.25rem !important;\n}\n\n.mb-2 {\n    margin-bottom: 0.5rem !important;\n}\n\n.mb-3 {\n    margin-bottom: 1rem !important;\n}\n\n.mb-4 {\n    margin-bottom: 1.5rem !important;\n}\n\n.mb-5 {\n    margin-bottom: 3rem !important;\n}\n\n.mb-auto {\n    margin-bottom: auto !important;\n}\n\n.ms-0 {\n    margin-right: 0 !important;\n}\n\n.ms-1 {\n    margin-right: 0.25rem !important;\n}\n\n.ms-2 {\n    margin-right: 0.5rem !important;\n}\n\n.ms-3 {\n    margin-right: 1rem !important;\n}\n\n.ms-4 {\n    margin-right: 1.5rem !important;\n}\n\n.ms-5 {\n    margin-right: 3rem !important;\n}\n\n.ms-auto {\n    margin-right: auto !important;\n}\n\n.p-0 {\n    padding: 0 !important;\n}\n\n.p-1 {\n    padding: 0.25rem !important;\n}\n\n.p-2 {\n    padding: 0.5rem !important;\n}\n\n.p-3 {\n    padding: 1rem !important;\n}\n\n.p-4 {\n    padding: 1.5rem !important;\n}\n\n.p-5 {\n    padding: 3rem !important;\n}\n\n.px-0 {\n    padding-left: 0 !important;\n    padding-right: 0 !important;\n}\n\n.px-1 {\n    padding-left: 0.25rem !important;\n    padding-right: 0.25rem !important;\n}\n\n.px-2 {\n    padding-left: 0.5rem !important;\n    padding-right: 0.5rem !important;\n}\n\n.px-3 {\n    padding-left: 1rem !important;\n    padding-right: 1rem !important;\n}\n\n.px-4 {\n    padding-left: 1.5rem !important;\n    padding-right: 1.5rem !important;\n}\n\n.px-5 {\n    padding-left: 3rem !important;\n    padding-right: 3rem !important;\n}\n\n.py-0 {\n    padding-top: 0 !important;\n    padding-bottom: 0 !important;\n}\n\n.py-1 {\n    padding-top: 0.25rem !important;\n    padding-bottom: 0.25rem !important;\n}\n\n.py-2 {\n    padding-top: 0.5rem !important;\n    padding-bottom: 0.5rem !important;\n}\n\n.py-3 {\n    padding-top: 1rem !important;\n    padding-bottom: 1rem !important;\n}\n\n.py-4 {\n    padding-top: 1.5rem !important;\n    padding-bottom: 1.5rem !important;\n}\n\n.py-5 {\n    padding-top: 3rem !important;\n    padding-bottom: 3rem !important;\n}\n\n.pt-0 {\n    padding-top: 0 !important;\n}\n\n.pt-1 {\n    padding-top: 0.25rem !important;\n}\n\n.pt-2 {\n    padding-top: 0.5rem !important;\n}\n\n.pt-3 {\n    padding-top: 1rem !important;\n}\n\n.pt-4 {\n    padding-top: 1.5rem !important;\n}\n\n.pt-5 {\n    padding-top: 3rem !important;\n}\n\n.pe-0 {\n    padding-left: 0 !important;\n}\n\n.pe-1 {\n    padding-left: 0.25rem !important;\n}\n\n.pe-2 {\n    padding-left: 0.5rem !important;\n}\n\n.pe-3 {\n    padding-left: 1rem !important;\n}\n\n.pe-4 {\n    padding-left: 1.5rem !important;\n}\n\n.pe-5 {\n    padding-left: 3rem !important;\n}\n\n.pb-0 {\n    padding-bottom: 0 !important;\n}\n\n.pb-1 {\n    padding-bottom: 0.25rem !important;\n}\n\n.pb-2 {\n    padding-bottom: 0.5rem !important;\n}\n\n.pb-3 {\n    padding-bottom: 1rem !important;\n}\n\n.pb-4 {\n    padding-bottom: 1.5rem !important;\n}\n\n.pb-5 {\n    padding-bottom: 3rem !important;\n}\n\n.ps-0 {\n    padding-right: 0 !important;\n}\n\n.ps-1 {\n    padding-right: 0.25rem !important;\n}\n\n.ps-2 {\n    padding-right: 0.5rem !important;\n}\n\n.ps-3 {\n    padding-right: 1rem !important;\n}\n\n.ps-4 {\n    padding-right: 1.5rem !important;\n}\n\n.ps-5 {\n    padding-right: 3rem !important;\n}\n\n@media (min-width: 576px) {\n    .d-sm-inline {\n        display: inline !important;\n    }\n\n    .d-sm-inline-block {\n        display: inline-block !important;\n    }\n\n    .d-sm-block {\n        display: block !important;\n    }\n\n    .d-sm-grid {\n        display: grid !important;\n    }\n\n    .d-sm-table {\n        display: table !important;\n    }\n\n    .d-sm-table-row {\n        display: table-row !important;\n    }\n\n    .d-sm-table-cell {\n        display: table-cell !important;\n    }\n\n    .d-sm-flex {\n        display: flex !important;\n    }\n\n    .d-sm-inline-flex {\n        display: inline-flex !important;\n    }\n\n    .d-sm-none {\n        display: none !important;\n    }\n\n    .flex-sm-fill {\n        flex: 1 1 auto !important;\n    }\n\n    .flex-sm-row {\n        flex-direction: row !important;\n    }\n\n    .flex-sm-column {\n        flex-direction: column !important;\n    }\n\n    .flex-sm-row-reverse {\n        flex-direction: row-reverse !important;\n    }\n\n    .flex-sm-column-reverse {\n        flex-direction: column-reverse !important;\n    }\n\n    .flex-sm-grow-0 {\n        flex-grow: 0 !important;\n    }\n\n    .flex-sm-grow-1 {\n        flex-grow: 1 !important;\n    }\n\n    .flex-sm-shrink-0 {\n        flex-shrink: 0 !important;\n    }\n\n    .flex-sm-shrink-1 {\n        flex-shrink: 1 !important;\n    }\n\n    .flex-sm-wrap {\n        flex-wrap: wrap !important;\n    }\n\n    .flex-sm-nowrap {\n        flex-wrap: nowrap !important;\n    }\n\n    .flex-sm-wrap-reverse {\n        flex-wrap: wrap-reverse !important;\n    }\n\n    .justify-content-sm-start {\n        justify-content: flex-start !important;\n    }\n\n    .justify-content-sm-end {\n        justify-content: flex-end !important;\n    }\n\n    .justify-content-sm-center {\n        justify-content: center !important;\n    }\n\n    .justify-content-sm-between {\n        justify-content: space-between !important;\n    }\n\n    .justify-content-sm-around {\n        justify-content: space-around !important;\n    }\n\n    .justify-content-sm-evenly {\n        justify-content: space-evenly !important;\n    }\n\n    .align-items-sm-start {\n        align-items: flex-start !important;\n    }\n\n    .align-items-sm-end {\n        align-items: flex-end !important;\n    }\n\n    .align-items-sm-center {\n        align-items: center !important;\n    }\n\n    .align-items-sm-baseline {\n        align-items: baseline !important;\n    }\n\n    .align-items-sm-stretch {\n        align-items: stretch !important;\n    }\n\n    .align-content-sm-start {\n        align-content: flex-start !important;\n    }\n\n    .align-content-sm-end {\n        align-content: flex-end !important;\n    }\n\n    .align-content-sm-center {\n        align-content: center !important;\n    }\n\n    .align-content-sm-between {\n        align-content: space-between !important;\n    }\n\n    .align-content-sm-around {\n        align-content: space-around !important;\n    }\n\n    .align-content-sm-stretch {\n        align-content: stretch !important;\n    }\n\n    .align-self-sm-auto {\n        align-self: auto !important;\n    }\n\n    .align-self-sm-start {\n        align-self: flex-start !important;\n    }\n\n    .align-self-sm-end {\n        align-self: flex-end !important;\n    }\n\n    .align-self-sm-center {\n        align-self: center !important;\n    }\n\n    .align-self-sm-baseline {\n        align-self: baseline !important;\n    }\n\n    .align-self-sm-stretch {\n        align-self: stretch !important;\n    }\n\n    .order-sm-first {\n        order: -1 !important;\n    }\n\n    .order-sm-0 {\n        order: 0 !important;\n    }\n\n    .order-sm-1 {\n        order: 1 !important;\n    }\n\n    .order-sm-2 {\n        order: 2 !important;\n    }\n\n    .order-sm-3 {\n        order: 3 !important;\n    }\n\n    .order-sm-4 {\n        order: 4 !important;\n    }\n\n    .order-sm-5 {\n        order: 5 !important;\n    }\n\n    .order-sm-last {\n        order: 6 !important;\n    }\n\n    .m-sm-0 {\n        margin: 0 !important;\n    }\n\n    .m-sm-1 {\n        margin: 0.25rem !important;\n    }\n\n    .m-sm-2 {\n        margin: 0.5rem !important;\n    }\n\n    .m-sm-3 {\n        margin: 1rem !important;\n    }\n\n    .m-sm-4 {\n        margin: 1.5rem !important;\n    }\n\n    .m-sm-5 {\n        margin: 3rem !important;\n    }\n\n    .m-sm-auto {\n        margin: auto !important;\n    }\n\n    .mx-sm-0 {\n        margin-left: 0 !important;\n        margin-right: 0 !important;\n    }\n\n    .mx-sm-1 {\n        margin-left: 0.25rem !important;\n        margin-right: 0.25rem !important;\n    }\n\n    .mx-sm-2 {\n        margin-left: 0.5rem !important;\n        margin-right: 0.5rem !important;\n    }\n\n    .mx-sm-3 {\n        margin-left: 1rem !important;\n        margin-right: 1rem !important;\n    }\n\n    .mx-sm-4 {\n        margin-left: 1.5rem !important;\n        margin-right: 1.5rem !important;\n    }\n\n    .mx-sm-5 {\n        margin-left: 3rem !important;\n        margin-right: 3rem !important;\n    }\n\n    .mx-sm-auto {\n        margin-left: auto !important;\n        margin-right: auto !important;\n    }\n\n    .my-sm-0 {\n        margin-top: 0 !important;\n        margin-bottom: 0 !important;\n    }\n\n    .my-sm-1 {\n        margin-top: 0.25rem !important;\n        margin-bottom: 0.25rem !important;\n    }\n\n    .my-sm-2 {\n        margin-top: 0.5rem !important;\n        margin-bottom: 0.5rem !important;\n    }\n\n    .my-sm-3 {\n        margin-top: 1rem !important;\n        margin-bottom: 1rem !important;\n    }\n\n    .my-sm-4 {\n        margin-top: 1.5rem !important;\n        margin-bottom: 1.5rem !important;\n    }\n\n    .my-sm-5 {\n        margin-top: 3rem !important;\n        margin-bottom: 3rem !important;\n    }\n\n    .my-sm-auto {\n        margin-top: auto !important;\n        margin-bottom: auto !important;\n    }\n\n    .mt-sm-0 {\n        margin-top: 0 !important;\n    }\n\n    .mt-sm-1 {\n        margin-top: 0.25rem !important;\n    }\n\n    .mt-sm-2 {\n        margin-top: 0.5rem !important;\n    }\n\n    .mt-sm-3 {\n        margin-top: 1rem !important;\n    }\n\n    .mt-sm-4 {\n        margin-top: 1.5rem !important;\n    }\n\n    .mt-sm-5 {\n        margin-top: 3rem !important;\n    }\n\n    .mt-sm-auto {\n        margin-top: auto !important;\n    }\n\n    .me-sm-0 {\n        margin-left: 0 !important;\n    }\n\n    .me-sm-1 {\n        margin-left: 0.25rem !important;\n    }\n\n    .me-sm-2 {\n        margin-left: 0.5rem !important;\n    }\n\n    .me-sm-3 {\n        margin-left: 1rem !important;\n    }\n\n    .me-sm-4 {\n        margin-left: 1.5rem !important;\n    }\n\n    .me-sm-5 {\n        margin-left: 3rem !important;\n    }\n\n    .me-sm-auto {\n        margin-left: auto !important;\n    }\n\n    .mb-sm-0 {\n        margin-bottom: 0 !important;\n    }\n\n    .mb-sm-1 {\n        margin-bottom: 0.25rem !important;\n    }\n\n    .mb-sm-2 {\n        margin-bottom: 0.5rem !important;\n    }\n\n    .mb-sm-3 {\n        margin-bottom: 1rem !important;\n    }\n\n    .mb-sm-4 {\n        margin-bottom: 1.5rem !important;\n    }\n\n    .mb-sm-5 {\n        margin-bottom: 3rem !important;\n    }\n\n    .mb-sm-auto {\n        margin-bottom: auto !important;\n    }\n\n    .ms-sm-0 {\n        margin-right: 0 !important;\n    }\n\n    .ms-sm-1 {\n        margin-right: 0.25rem !important;\n    }\n\n    .ms-sm-2 {\n        margin-right: 0.5rem !important;\n    }\n\n    .ms-sm-3 {\n        margin-right: 1rem !important;\n    }\n\n    .ms-sm-4 {\n        margin-right: 1.5rem !important;\n    }\n\n    .ms-sm-5 {\n        margin-right: 3rem !important;\n    }\n\n    .ms-sm-auto {\n        margin-right: auto !important;\n    }\n\n    .p-sm-0 {\n        padding: 0 !important;\n    }\n\n    .p-sm-1 {\n        padding: 0.25rem !important;\n    }\n\n    .p-sm-2 {\n        padding: 0.5rem !important;\n    }\n\n    .p-sm-3 {\n        padding: 1rem !important;\n    }\n\n    .p-sm-4 {\n        padding: 1.5rem !important;\n    }\n\n    .p-sm-5 {\n        padding: 3rem !important;\n    }\n\n    .px-sm-0 {\n        padding-left: 0 !important;\n        padding-right: 0 !important;\n    }\n\n    .px-sm-1 {\n        padding-left: 0.25rem !important;\n        padding-right: 0.25rem !important;\n    }\n\n    .px-sm-2 {\n        padding-left: 0.5rem !important;\n        padding-right: 0.5rem !important;\n    }\n\n    .px-sm-3 {\n        padding-left: 1rem !important;\n        padding-right: 1rem !important;\n    }\n\n    .px-sm-4 {\n        padding-left: 1.5rem !important;\n        padding-right: 1.5rem !important;\n    }\n\n    .px-sm-5 {\n        padding-left: 3rem !important;\n        padding-right: 3rem !important;\n    }\n\n    .py-sm-0 {\n        padding-top: 0 !important;\n        padding-bottom: 0 !important;\n    }\n\n    .py-sm-1 {\n        padding-top: 0.25rem !important;\n        padding-bottom: 0.25rem !important;\n    }\n\n    .py-sm-2 {\n        padding-top: 0.5rem !important;\n        padding-bottom: 0.5rem !important;\n    }\n\n    .py-sm-3 {\n        padding-top: 1rem !important;\n        padding-bottom: 1rem !important;\n    }\n\n    .py-sm-4 {\n        padding-top: 1.5rem !important;\n        padding-bottom: 1.5rem !important;\n    }\n\n    .py-sm-5 {\n        padding-top: 3rem !important;\n        padding-bottom: 3rem !important;\n    }\n\n    .pt-sm-0 {\n        padding-top: 0 !important;\n    }\n\n    .pt-sm-1 {\n        padding-top: 0.25rem !important;\n    }\n\n    .pt-sm-2 {\n        padding-top: 0.5rem !important;\n    }\n\n    .pt-sm-3 {\n        padding-top: 1rem !important;\n    }\n\n    .pt-sm-4 {\n        padding-top: 1.5rem !important;\n    }\n\n    .pt-sm-5 {\n        padding-top: 3rem !important;\n    }\n\n    .pe-sm-0 {\n        padding-left: 0 !important;\n    }\n\n    .pe-sm-1 {\n        padding-left: 0.25rem !important;\n    }\n\n    .pe-sm-2 {\n        padding-left: 0.5rem !important;\n    }\n\n    .pe-sm-3 {\n        padding-left: 1rem !important;\n    }\n\n    .pe-sm-4 {\n        padding-left: 1.5rem !important;\n    }\n\n    .pe-sm-5 {\n        padding-left: 3rem !important;\n    }\n\n    .pb-sm-0 {\n        padding-bottom: 0 !important;\n    }\n\n    .pb-sm-1 {\n        padding-bottom: 0.25rem !important;\n    }\n\n    .pb-sm-2 {\n        padding-bottom: 0.5rem !important;\n    }\n\n    .pb-sm-3 {\n        padding-bottom: 1rem !important;\n    }\n\n    .pb-sm-4 {\n        padding-bottom: 1.5rem !important;\n    }\n\n    .pb-sm-5 {\n        padding-bottom: 3rem !important;\n    }\n\n    .ps-sm-0 {\n        padding-right: 0 !important;\n    }\n\n    .ps-sm-1 {\n        padding-right: 0.25rem !important;\n    }\n\n    .ps-sm-2 {\n        padding-right: 0.5rem !important;\n    }\n\n    .ps-sm-3 {\n        padding-right: 1rem !important;\n    }\n\n    .ps-sm-4 {\n        padding-right: 1.5rem !important;\n    }\n\n    .ps-sm-5 {\n        padding-right: 3rem !important;\n    }\n}\n\n@media (min-width: 768px) {\n    .d-md-inline {\n        display: inline !important;\n    }\n\n    .d-md-inline-block {\n        display: inline-block !important;\n    }\n\n    .d-md-block {\n        display: block !important;\n    }\n\n    .d-md-grid {\n        display: grid !important;\n    }\n\n    .d-md-table {\n        display: table !important;\n    }\n\n    .d-md-table-row {\n        display: table-row !important;\n    }\n\n    .d-md-table-cell {\n        display: table-cell !important;\n    }\n\n    .d-md-flex {\n        display: flex !important;\n    }\n\n    .d-md-inline-flex {\n        display: inline-flex !important;\n    }\n\n    .d-md-none {\n        display: none !important;\n    }\n\n    .flex-md-fill {\n        flex: 1 1 auto !important;\n    }\n\n    .flex-md-row {\n        flex-direction: row !important;\n    }\n\n    .flex-md-column {\n        flex-direction: column !important;\n    }\n\n    .flex-md-row-reverse {\n        flex-direction: row-reverse !important;\n    }\n\n    .flex-md-column-reverse {\n        flex-direction: column-reverse !important;\n    }\n\n    .flex-md-grow-0 {\n        flex-grow: 0 !important;\n    }\n\n    .flex-md-grow-1 {\n        flex-grow: 1 !important;\n    }\n\n    .flex-md-shrink-0 {\n        flex-shrink: 0 !important;\n    }\n\n    .flex-md-shrink-1 {\n        flex-shrink: 1 !important;\n    }\n\n    .flex-md-wrap {\n        flex-wrap: wrap !important;\n    }\n\n    .flex-md-nowrap {\n        flex-wrap: nowrap !important;\n    }\n\n    .flex-md-wrap-reverse {\n        flex-wrap: wrap-reverse !important;\n    }\n\n    .justify-content-md-start {\n        justify-content: flex-start !important;\n    }\n\n    .justify-content-md-end {\n        justify-content: flex-end !important;\n    }\n\n    .justify-content-md-center {\n        justify-content: center !important;\n    }\n\n    .justify-content-md-between {\n        justify-content: space-between !important;\n    }\n\n    .justify-content-md-around {\n        justify-content: space-around !important;\n    }\n\n    .justify-content-md-evenly {\n        justify-content: space-evenly !important;\n    }\n\n    .align-items-md-start {\n        align-items: flex-start !important;\n    }\n\n    .align-items-md-end {\n        align-items: flex-end !important;\n    }\n\n    .align-items-md-center {\n        align-items: center !important;\n    }\n\n    .align-items-md-baseline {\n        align-items: baseline !important;\n    }\n\n    .align-items-md-stretch {\n        align-items: stretch !important;\n    }\n\n    .align-content-md-start {\n        align-content: flex-start !important;\n    }\n\n    .align-content-md-end {\n        align-content: flex-end !important;\n    }\n\n    .align-content-md-center {\n        align-content: center !important;\n    }\n\n    .align-content-md-between {\n        align-content: space-between !important;\n    }\n\n    .align-content-md-around {\n        align-content: space-around !important;\n    }\n\n    .align-content-md-stretch {\n        align-content: stretch !important;\n    }\n\n    .align-self-md-auto {\n        align-self: auto !important;\n    }\n\n    .align-self-md-start {\n        align-self: flex-start !important;\n    }\n\n    .align-self-md-end {\n        align-self: flex-end !important;\n    }\n\n    .align-self-md-center {\n        align-self: center !important;\n    }\n\n    .align-self-md-baseline {\n        align-self: baseline !important;\n    }\n\n    .align-self-md-stretch {\n        align-self: stretch !important;\n    }\n\n    .order-md-first {\n        order: -1 !important;\n    }\n\n    .order-md-0 {\n        order: 0 !important;\n    }\n\n    .order-md-1 {\n        order: 1 !important;\n    }\n\n    .order-md-2 {\n        order: 2 !important;\n    }\n\n    .order-md-3 {\n        order: 3 !important;\n    }\n\n    .order-md-4 {\n        order: 4 !important;\n    }\n\n    .order-md-5 {\n        order: 5 !important;\n    }\n\n    .order-md-last {\n        order: 6 !important;\n    }\n\n    .m-md-0 {\n        margin: 0 !important;\n    }\n\n    .m-md-1 {\n        margin: 0.25rem !important;\n    }\n\n    .m-md-2 {\n        margin: 0.5rem !important;\n    }\n\n    .m-md-3 {\n        margin: 1rem !important;\n    }\n\n    .m-md-4 {\n        margin: 1.5rem !important;\n    }\n\n    .m-md-5 {\n        margin: 3rem !important;\n    }\n\n    .m-md-auto {\n        margin: auto !important;\n    }\n\n    .mx-md-0 {\n        margin-left: 0 !important;\n        margin-right: 0 !important;\n    }\n\n    .mx-md-1 {\n        margin-left: 0.25rem !important;\n        margin-right: 0.25rem !important;\n    }\n\n    .mx-md-2 {\n        margin-left: 0.5rem !important;\n        margin-right: 0.5rem !important;\n    }\n\n    .mx-md-3 {\n        margin-left: 1rem !important;\n        margin-right: 1rem !important;\n    }\n\n    .mx-md-4 {\n        margin-left: 1.5rem !important;\n        margin-right: 1.5rem !important;\n    }\n\n    .mx-md-5 {\n        margin-left: 3rem !important;\n        margin-right: 3rem !important;\n    }\n\n    .mx-md-auto {\n        margin-left: auto !important;\n        margin-right: auto !important;\n    }\n\n    .my-md-0 {\n        margin-top: 0 !important;\n        margin-bottom: 0 !important;\n    }\n\n    .my-md-1 {\n        margin-top: 0.25rem !important;\n        margin-bottom: 0.25rem !important;\n    }\n\n    .my-md-2 {\n        margin-top: 0.5rem !important;\n        margin-bottom: 0.5rem !important;\n    }\n\n    .my-md-3 {\n        margin-top: 1rem !important;\n        margin-bottom: 1rem !important;\n    }\n\n    .my-md-4 {\n        margin-top: 1.5rem !important;\n        margin-bottom: 1.5rem !important;\n    }\n\n    .my-md-5 {\n        margin-top: 3rem !important;\n        margin-bottom: 3rem !important;\n    }\n\n    .my-md-auto {\n        margin-top: auto !important;\n        margin-bottom: auto !important;\n    }\n\n    .mt-md-0 {\n        margin-top: 0 !important;\n    }\n\n    .mt-md-1 {\n        margin-top: 0.25rem !important;\n    }\n\n    .mt-md-2 {\n        margin-top: 0.5rem !important;\n    }\n\n    .mt-md-3 {\n        margin-top: 1rem !important;\n    }\n\n    .mt-md-4 {\n        margin-top: 1.5rem !important;\n    }\n\n    .mt-md-5 {\n        margin-top: 3rem !important;\n    }\n\n    .mt-md-auto {\n        margin-top: auto !important;\n    }\n\n    .me-md-0 {\n        margin-left: 0 !important;\n    }\n\n    .me-md-1 {\n        margin-left: 0.25rem !important;\n    }\n\n    .me-md-2 {\n        margin-left: 0.5rem !important;\n    }\n\n    .me-md-3 {\n        margin-left: 1rem !important;\n    }\n\n    .me-md-4 {\n        margin-left: 1.5rem !important;\n    }\n\n    .me-md-5 {\n        margin-left: 3rem !important;\n    }\n\n    .me-md-auto {\n        margin-left: auto !important;\n    }\n\n    .mb-md-0 {\n        margin-bottom: 0 !important;\n    }\n\n    .mb-md-1 {\n        margin-bottom: 0.25rem !important;\n    }\n\n    .mb-md-2 {\n        margin-bottom: 0.5rem !important;\n    }\n\n    .mb-md-3 {\n        margin-bottom: 1rem !important;\n    }\n\n    .mb-md-4 {\n        margin-bottom: 1.5rem !important;\n    }\n\n    .mb-md-5 {\n        margin-bottom: 3rem !important;\n    }\n\n    .mb-md-auto {\n        margin-bottom: auto !important;\n    }\n\n    .ms-md-0 {\n        margin-right: 0 !important;\n    }\n\n    .ms-md-1 {\n        margin-right: 0.25rem !important;\n    }\n\n    .ms-md-2 {\n        margin-right: 0.5rem !important;\n    }\n\n    .ms-md-3 {\n        margin-right: 1rem !important;\n    }\n\n    .ms-md-4 {\n        margin-right: 1.5rem !important;\n    }\n\n    .ms-md-5 {\n        margin-right: 3rem !important;\n    }\n\n    .ms-md-auto {\n        margin-right: auto !important;\n    }\n\n    .p-md-0 {\n        padding: 0 !important;\n    }\n\n    .p-md-1 {\n        padding: 0.25rem !important;\n    }\n\n    .p-md-2 {\n        padding: 0.5rem !important;\n    }\n\n    .p-md-3 {\n        padding: 1rem !important;\n    }\n\n    .p-md-4 {\n        padding: 1.5rem !important;\n    }\n\n    .p-md-5 {\n        padding: 3rem !important;\n    }\n\n    .px-md-0 {\n        padding-left: 0 !important;\n        padding-right: 0 !important;\n    }\n\n    .px-md-1 {\n        padding-left: 0.25rem !important;\n        padding-right: 0.25rem !important;\n    }\n\n    .px-md-2 {\n        padding-left: 0.5rem !important;\n        padding-right: 0.5rem !important;\n    }\n\n    .px-md-3 {\n        padding-left: 1rem !important;\n        padding-right: 1rem !important;\n    }\n\n    .px-md-4 {\n        padding-left: 1.5rem !important;\n        padding-right: 1.5rem !important;\n    }\n\n    .px-md-5 {\n        padding-left: 3rem !important;\n        padding-right: 3rem !important;\n    }\n\n    .py-md-0 {\n        padding-top: 0 !important;\n        padding-bottom: 0 !important;\n    }\n\n    .py-md-1 {\n        padding-top: 0.25rem !important;\n        padding-bottom: 0.25rem !important;\n    }\n\n    .py-md-2 {\n        padding-top: 0.5rem !important;\n        padding-bottom: 0.5rem !important;\n    }\n\n    .py-md-3 {\n        padding-top: 1rem !important;\n        padding-bottom: 1rem !important;\n    }\n\n    .py-md-4 {\n        padding-top: 1.5rem !important;\n        padding-bottom: 1.5rem !important;\n    }\n\n    .py-md-5 {\n        padding-top: 3rem !important;\n        padding-bottom: 3rem !important;\n    }\n\n    .pt-md-0 {\n        padding-top: 0 !important;\n    }\n\n    .pt-md-1 {\n        padding-top: 0.25rem !important;\n    }\n\n    .pt-md-2 {\n        padding-top: 0.5rem !important;\n    }\n\n    .pt-md-3 {\n        padding-top: 1rem !important;\n    }\n\n    .pt-md-4 {\n        padding-top: 1.5rem !important;\n    }\n\n    .pt-md-5 {\n        padding-top: 3rem !important;\n    }\n\n    .pe-md-0 {\n        padding-left: 0 !important;\n    }\n\n    .pe-md-1 {\n        padding-left: 0.25rem !important;\n    }\n\n    .pe-md-2 {\n        padding-left: 0.5rem !important;\n    }\n\n    .pe-md-3 {\n        padding-left: 1rem !important;\n    }\n\n    .pe-md-4 {\n        padding-left: 1.5rem !important;\n    }\n\n    .pe-md-5 {\n        padding-left: 3rem !important;\n    }\n\n    .pb-md-0 {\n        padding-bottom: 0 !important;\n    }\n\n    .pb-md-1 {\n        padding-bottom: 0.25rem !important;\n    }\n\n    .pb-md-2 {\n        padding-bottom: 0.5rem !important;\n    }\n\n    .pb-md-3 {\n        padding-bottom: 1rem !important;\n    }\n\n    .pb-md-4 {\n        padding-bottom: 1.5rem !important;\n    }\n\n    .pb-md-5 {\n        padding-bottom: 3rem !important;\n    }\n\n    .ps-md-0 {\n        padding-right: 0 !important;\n    }\n\n    .ps-md-1 {\n        padding-right: 0.25rem !important;\n    }\n\n    .ps-md-2 {\n        padding-right: 0.5rem !important;\n    }\n\n    .ps-md-3 {\n        padding-right: 1rem !important;\n    }\n\n    .ps-md-4 {\n        padding-right: 1.5rem !important;\n    }\n\n    .ps-md-5 {\n        padding-right: 3rem !important;\n    }\n}\n\n@media (min-width: 992px) {\n    .d-lg-inline {\n        display: inline !important;\n    }\n\n    .d-lg-inline-block {\n        display: inline-block !important;\n    }\n\n    .d-lg-block {\n        display: block !important;\n    }\n\n    .d-lg-grid {\n        display: grid !important;\n    }\n\n    .d-lg-table {\n        display: table !important;\n    }\n\n    .d-lg-table-row {\n        display: table-row !important;\n    }\n\n    .d-lg-table-cell {\n        display: table-cell !important;\n    }\n\n    .d-lg-flex {\n        display: flex !important;\n    }\n\n    .d-lg-inline-flex {\n        display: inline-flex !important;\n    }\n\n    .d-lg-none {\n        display: none !important;\n    }\n\n    .flex-lg-fill {\n        flex: 1 1 auto !important;\n    }\n\n    .flex-lg-row {\n        flex-direction: row !important;\n    }\n\n    .flex-lg-column {\n        flex-direction: column !important;\n    }\n\n    .flex-lg-row-reverse {\n        flex-direction: row-reverse !important;\n    }\n\n    .flex-lg-column-reverse {\n        flex-direction: column-reverse !important;\n    }\n\n    .flex-lg-grow-0 {\n        flex-grow: 0 !important;\n    }\n\n    .flex-lg-grow-1 {\n        flex-grow: 1 !important;\n    }\n\n    .flex-lg-shrink-0 {\n        flex-shrink: 0 !important;\n    }\n\n    .flex-lg-shrink-1 {\n        flex-shrink: 1 !important;\n    }\n\n    .flex-lg-wrap {\n        flex-wrap: wrap !important;\n    }\n\n    .flex-lg-nowrap {\n        flex-wrap: nowrap !important;\n    }\n\n    .flex-lg-wrap-reverse {\n        flex-wrap: wrap-reverse !important;\n    }\n\n    .justify-content-lg-start {\n        justify-content: flex-start !important;\n    }\n\n    .justify-content-lg-end {\n        justify-content: flex-end !important;\n    }\n\n    .justify-content-lg-center {\n        justify-content: center !important;\n    }\n\n    .justify-content-lg-between {\n        justify-content: space-between !important;\n    }\n\n    .justify-content-lg-around {\n        justify-content: space-around !important;\n    }\n\n    .justify-content-lg-evenly {\n        justify-content: space-evenly !important;\n    }\n\n    .align-items-lg-start {\n        align-items: flex-start !important;\n    }\n\n    .align-items-lg-end {\n        align-items: flex-end !important;\n    }\n\n    .align-items-lg-center {\n        align-items: center !important;\n    }\n\n    .align-items-lg-baseline {\n        align-items: baseline !important;\n    }\n\n    .align-items-lg-stretch {\n        align-items: stretch !important;\n    }\n\n    .align-content-lg-start {\n        align-content: flex-start !important;\n    }\n\n    .align-content-lg-end {\n        align-content: flex-end !important;\n    }\n\n    .align-content-lg-center {\n        align-content: center !important;\n    }\n\n    .align-content-lg-between {\n        align-content: space-between !important;\n    }\n\n    .align-content-lg-around {\n        align-content: space-around !important;\n    }\n\n    .align-content-lg-stretch {\n        align-content: stretch !important;\n    }\n\n    .align-self-lg-auto {\n        align-self: auto !important;\n    }\n\n    .align-self-lg-start {\n        align-self: flex-start !important;\n    }\n\n    .align-self-lg-end {\n        align-self: flex-end !important;\n    }\n\n    .align-self-lg-center {\n        align-self: center !important;\n    }\n\n    .align-self-lg-baseline {\n        align-self: baseline !important;\n    }\n\n    .align-self-lg-stretch {\n        align-self: stretch !important;\n    }\n\n    .order-lg-first {\n        order: -1 !important;\n    }\n\n    .order-lg-0 {\n        order: 0 !important;\n    }\n\n    .order-lg-1 {\n        order: 1 !important;\n    }\n\n    .order-lg-2 {\n        order: 2 !important;\n    }\n\n    .order-lg-3 {\n        order: 3 !important;\n    }\n\n    .order-lg-4 {\n        order: 4 !important;\n    }\n\n    .order-lg-5 {\n        order: 5 !important;\n    }\n\n    .order-lg-last {\n        order: 6 !important;\n    }\n\n    .m-lg-0 {\n        margin: 0 !important;\n    }\n\n    .m-lg-1 {\n        margin: 0.25rem !important;\n    }\n\n    .m-lg-2 {\n        margin: 0.5rem !important;\n    }\n\n    .m-lg-3 {\n        margin: 1rem !important;\n    }\n\n    .m-lg-4 {\n        margin: 1.5rem !important;\n    }\n\n    .m-lg-5 {\n        margin: 3rem !important;\n    }\n\n    .m-lg-auto {\n        margin: auto !important;\n    }\n\n    .mx-lg-0 {\n        margin-left: 0 !important;\n        margin-right: 0 !important;\n    }\n\n    .mx-lg-1 {\n        margin-left: 0.25rem !important;\n        margin-right: 0.25rem !important;\n    }\n\n    .mx-lg-2 {\n        margin-left: 0.5rem !important;\n        margin-right: 0.5rem !important;\n    }\n\n    .mx-lg-3 {\n        margin-left: 1rem !important;\n        margin-right: 1rem !important;\n    }\n\n    .mx-lg-4 {\n        margin-left: 1.5rem !important;\n        margin-right: 1.5rem !important;\n    }\n\n    .mx-lg-5 {\n        margin-left: 3rem !important;\n        margin-right: 3rem !important;\n    }\n\n    .mx-lg-auto {\n        margin-left: auto !important;\n        margin-right: auto !important;\n    }\n\n    .my-lg-0 {\n        margin-top: 0 !important;\n        margin-bottom: 0 !important;\n    }\n\n    .my-lg-1 {\n        margin-top: 0.25rem !important;\n        margin-bottom: 0.25rem !important;\n    }\n\n    .my-lg-2 {\n        margin-top: 0.5rem !important;\n        margin-bottom: 0.5rem !important;\n    }\n\n    .my-lg-3 {\n        margin-top: 1rem !important;\n        margin-bottom: 1rem !important;\n    }\n\n    .my-lg-4 {\n        margin-top: 1.5rem !important;\n        margin-bottom: 1.5rem !important;\n    }\n\n    .my-lg-5 {\n        margin-top: 3rem !important;\n        margin-bottom: 3rem !important;\n    }\n\n    .my-lg-auto {\n        margin-top: auto !important;\n        margin-bottom: auto !important;\n    }\n\n    .mt-lg-0 {\n        margin-top: 0 !important;\n    }\n\n    .mt-lg-1 {\n        margin-top: 0.25rem !important;\n    }\n\n    .mt-lg-2 {\n        margin-top: 0.5rem !important;\n    }\n\n    .mt-lg-3 {\n        margin-top: 1rem !important;\n    }\n\n    .mt-lg-4 {\n        margin-top: 1.5rem !important;\n    }\n\n    .mt-lg-5 {\n        margin-top: 3rem !important;\n    }\n\n    .mt-lg-auto {\n        margin-top: auto !important;\n    }\n\n    .me-lg-0 {\n        margin-left: 0 !important;\n    }\n\n    .me-lg-1 {\n        margin-left: 0.25rem !important;\n    }\n\n    .me-lg-2 {\n        margin-left: 0.5rem !important;\n    }\n\n    .me-lg-3 {\n        margin-left: 1rem !important;\n    }\n\n    .me-lg-4 {\n        margin-left: 1.5rem !important;\n    }\n\n    .me-lg-5 {\n        margin-left: 3rem !important;\n    }\n\n    .me-lg-auto {\n        margin-left: auto !important;\n    }\n\n    .mb-lg-0 {\n        margin-bottom: 0 !important;\n    }\n\n    .mb-lg-1 {\n        margin-bottom: 0.25rem !important;\n    }\n\n    .mb-lg-2 {\n        margin-bottom: 0.5rem !important;\n    }\n\n    .mb-lg-3 {\n        margin-bottom: 1rem !important;\n    }\n\n    .mb-lg-4 {\n        margin-bottom: 1.5rem !important;\n    }\n\n    .mb-lg-5 {\n        margin-bottom: 3rem !important;\n    }\n\n    .mb-lg-auto {\n        margin-bottom: auto !important;\n    }\n\n    .ms-lg-0 {\n        margin-right: 0 !important;\n    }\n\n    .ms-lg-1 {\n        margin-right: 0.25rem !important;\n    }\n\n    .ms-lg-2 {\n        margin-right: 0.5rem !important;\n    }\n\n    .ms-lg-3 {\n        margin-right: 1rem !important;\n    }\n\n    .ms-lg-4 {\n        margin-right: 1.5rem !important;\n    }\n\n    .ms-lg-5 {\n        margin-right: 3rem !important;\n    }\n\n    .ms-lg-auto {\n        margin-right: auto !important;\n    }\n\n    .p-lg-0 {\n        padding: 0 !important;\n    }\n\n    .p-lg-1 {\n        padding: 0.25rem !important;\n    }\n\n    .p-lg-2 {\n        padding: 0.5rem !important;\n    }\n\n    .p-lg-3 {\n        padding: 1rem !important;\n    }\n\n    .p-lg-4 {\n        padding: 1.5rem !important;\n    }\n\n    .p-lg-5 {\n        padding: 3rem !important;\n    }\n\n    .px-lg-0 {\n        padding-left: 0 !important;\n        padding-right: 0 !important;\n    }\n\n    .px-lg-1 {\n        padding-left: 0.25rem !important;\n        padding-right: 0.25rem !important;\n    }\n\n    .px-lg-2 {\n        padding-left: 0.5rem !important;\n        padding-right: 0.5rem !important;\n    }\n\n    .px-lg-3 {\n        padding-left: 1rem !important;\n        padding-right: 1rem !important;\n    }\n\n    .px-lg-4 {\n        padding-left: 1.5rem !important;\n        padding-right: 1.5rem !important;\n    }\n\n    .px-lg-5 {\n        padding-left: 3rem !important;\n        padding-right: 3rem !important;\n    }\n\n    .py-lg-0 {\n        padding-top: 0 !important;\n        padding-bottom: 0 !important;\n    }\n\n    .py-lg-1 {\n        padding-top: 0.25rem !important;\n        padding-bottom: 0.25rem !important;\n    }\n\n    .py-lg-2 {\n        padding-top: 0.5rem !important;\n        padding-bottom: 0.5rem !important;\n    }\n\n    .py-lg-3 {\n        padding-top: 1rem !important;\n        padding-bottom: 1rem !important;\n    }\n\n    .py-lg-4 {\n        padding-top: 1.5rem !important;\n        padding-bottom: 1.5rem !important;\n    }\n\n    .py-lg-5 {\n        padding-top: 3rem !important;\n        padding-bottom: 3rem !important;\n    }\n\n    .pt-lg-0 {\n        padding-top: 0 !important;\n    }\n\n    .pt-lg-1 {\n        padding-top: 0.25rem !important;\n    }\n\n    .pt-lg-2 {\n        padding-top: 0.5rem !important;\n    }\n\n    .pt-lg-3 {\n        padding-top: 1rem !important;\n    }\n\n    .pt-lg-4 {\n        padding-top: 1.5rem !important;\n    }\n\n    .pt-lg-5 {\n        padding-top: 3rem !important;\n    }\n\n    .pe-lg-0 {\n        padding-left: 0 !important;\n    }\n\n    .pe-lg-1 {\n        padding-left: 0.25rem !important;\n    }\n\n    .pe-lg-2 {\n        padding-left: 0.5rem !important;\n    }\n\n    .pe-lg-3 {\n        padding-left: 1rem !important;\n    }\n\n    .pe-lg-4 {\n        padding-left: 1.5rem !important;\n    }\n\n    .pe-lg-5 {\n        padding-left: 3rem !important;\n    }\n\n    .pb-lg-0 {\n        padding-bottom: 0 !important;\n    }\n\n    .pb-lg-1 {\n        padding-bottom: 0.25rem !important;\n    }\n\n    .pb-lg-2 {\n        padding-bottom: 0.5rem !important;\n    }\n\n    .pb-lg-3 {\n        padding-bottom: 1rem !important;\n    }\n\n    .pb-lg-4 {\n        padding-bottom: 1.5rem !important;\n    }\n\n    .pb-lg-5 {\n        padding-bottom: 3rem !important;\n    }\n\n    .ps-lg-0 {\n        padding-right: 0 !important;\n    }\n\n    .ps-lg-1 {\n        padding-right: 0.25rem !important;\n    }\n\n    .ps-lg-2 {\n        padding-right: 0.5rem !important;\n    }\n\n    .ps-lg-3 {\n        padding-right: 1rem !important;\n    }\n\n    .ps-lg-4 {\n        padding-right: 1.5rem !important;\n    }\n\n    .ps-lg-5 {\n        padding-right: 3rem !important;\n    }\n}\n\n@media (min-width: 1200px) {\n    .d-xl-inline {\n        display: inline !important;\n    }\n\n    .d-xl-inline-block {\n        display: inline-block !important;\n    }\n\n    .d-xl-block {\n        display: block !important;\n    }\n\n    .d-xl-grid {\n        display: grid !important;\n    }\n\n    .d-xl-table {\n        display: table !important;\n    }\n\n    .d-xl-table-row {\n        display: table-row !important;\n    }\n\n    .d-xl-table-cell {\n        display: table-cell !important;\n    }\n\n    .d-xl-flex {\n        display: flex !important;\n    }\n\n    .d-xl-inline-flex {\n        display: inline-flex !important;\n    }\n\n    .d-xl-none {\n        display: none !important;\n    }\n\n    .flex-xl-fill {\n        flex: 1 1 auto !important;\n    }\n\n    .flex-xl-row {\n        flex-direction: row !important;\n    }\n\n    .flex-xl-column {\n        flex-direction: column !important;\n    }\n\n    .flex-xl-row-reverse {\n        flex-direction: row-reverse !important;\n    }\n\n    .flex-xl-column-reverse {\n        flex-direction: column-reverse !important;\n    }\n\n    .flex-xl-grow-0 {\n        flex-grow: 0 !important;\n    }\n\n    .flex-xl-grow-1 {\n        flex-grow: 1 !important;\n    }\n\n    .flex-xl-shrink-0 {\n        flex-shrink: 0 !important;\n    }\n\n    .flex-xl-shrink-1 {\n        flex-shrink: 1 !important;\n    }\n\n    .flex-xl-wrap {\n        flex-wrap: wrap !important;\n    }\n\n    .flex-xl-nowrap {\n        flex-wrap: nowrap !important;\n    }\n\n    .flex-xl-wrap-reverse {\n        flex-wrap: wrap-reverse !important;\n    }\n\n    .justify-content-xl-start {\n        justify-content: flex-start !important;\n    }\n\n    .justify-content-xl-end {\n        justify-content: flex-end !important;\n    }\n\n    .justify-content-xl-center {\n        justify-content: center !important;\n    }\n\n    .justify-content-xl-between {\n        justify-content: space-between !important;\n    }\n\n    .justify-content-xl-around {\n        justify-content: space-around !important;\n    }\n\n    .justify-content-xl-evenly {\n        justify-content: space-evenly !important;\n    }\n\n    .align-items-xl-start {\n        align-items: flex-start !important;\n    }\n\n    .align-items-xl-end {\n        align-items: flex-end !important;\n    }\n\n    .align-items-xl-center {\n        align-items: center !important;\n    }\n\n    .align-items-xl-baseline {\n        align-items: baseline !important;\n    }\n\n    .align-items-xl-stretch {\n        align-items: stretch !important;\n    }\n\n    .align-content-xl-start {\n        align-content: flex-start !important;\n    }\n\n    .align-content-xl-end {\n        align-content: flex-end !important;\n    }\n\n    .align-content-xl-center {\n        align-content: center !important;\n    }\n\n    .align-content-xl-between {\n        align-content: space-between !important;\n    }\n\n    .align-content-xl-around {\n        align-content: space-around !important;\n    }\n\n    .align-content-xl-stretch {\n        align-content: stretch !important;\n    }\n\n    .align-self-xl-auto {\n        align-self: auto !important;\n    }\n\n    .align-self-xl-start {\n        align-self: flex-start !important;\n    }\n\n    .align-self-xl-end {\n        align-self: flex-end !important;\n    }\n\n    .align-self-xl-center {\n        align-self: center !important;\n    }\n\n    .align-self-xl-baseline {\n        align-self: baseline !important;\n    }\n\n    .align-self-xl-stretch {\n        align-self: stretch !important;\n    }\n\n    .order-xl-first {\n        order: -1 !important;\n    }\n\n    .order-xl-0 {\n        order: 0 !important;\n    }\n\n    .order-xl-1 {\n        order: 1 !important;\n    }\n\n    .order-xl-2 {\n        order: 2 !important;\n    }\n\n    .order-xl-3 {\n        order: 3 !important;\n    }\n\n    .order-xl-4 {\n        order: 4 !important;\n    }\n\n    .order-xl-5 {\n        order: 5 !important;\n    }\n\n    .order-xl-last {\n        order: 6 !important;\n    }\n\n    .m-xl-0 {\n        margin: 0 !important;\n    }\n\n    .m-xl-1 {\n        margin: 0.25rem !important;\n    }\n\n    .m-xl-2 {\n        margin: 0.5rem !important;\n    }\n\n    .m-xl-3 {\n        margin: 1rem !important;\n    }\n\n    .m-xl-4 {\n        margin: 1.5rem !important;\n    }\n\n    .m-xl-5 {\n        margin: 3rem !important;\n    }\n\n    .m-xl-auto {\n        margin: auto !important;\n    }\n\n    .mx-xl-0 {\n        margin-left: 0 !important;\n        margin-right: 0 !important;\n    }\n\n    .mx-xl-1 {\n        margin-left: 0.25rem !important;\n        margin-right: 0.25rem !important;\n    }\n\n    .mx-xl-2 {\n        margin-left: 0.5rem !important;\n        margin-right: 0.5rem !important;\n    }\n\n    .mx-xl-3 {\n        margin-left: 1rem !important;\n        margin-right: 1rem !important;\n    }\n\n    .mx-xl-4 {\n        margin-left: 1.5rem !important;\n        margin-right: 1.5rem !important;\n    }\n\n    .mx-xl-5 {\n        margin-left: 3rem !important;\n        margin-right: 3rem !important;\n    }\n\n    .mx-xl-auto {\n        margin-left: auto !important;\n        margin-right: auto !important;\n    }\n\n    .my-xl-0 {\n        margin-top: 0 !important;\n        margin-bottom: 0 !important;\n    }\n\n    .my-xl-1 {\n        margin-top: 0.25rem !important;\n        margin-bottom: 0.25rem !important;\n    }\n\n    .my-xl-2 {\n        margin-top: 0.5rem !important;\n        margin-bottom: 0.5rem !important;\n    }\n\n    .my-xl-3 {\n        margin-top: 1rem !important;\n        margin-bottom: 1rem !important;\n    }\n\n    .my-xl-4 {\n        margin-top: 1.5rem !important;\n        margin-bottom: 1.5rem !important;\n    }\n\n    .my-xl-5 {\n        margin-top: 3rem !important;\n        margin-bottom: 3rem !important;\n    }\n\n    .my-xl-auto {\n        margin-top: auto !important;\n        margin-bottom: auto !important;\n    }\n\n    .mt-xl-0 {\n        margin-top: 0 !important;\n    }\n\n    .mt-xl-1 {\n        margin-top: 0.25rem !important;\n    }\n\n    .mt-xl-2 {\n        margin-top: 0.5rem !important;\n    }\n\n    .mt-xl-3 {\n        margin-top: 1rem !important;\n    }\n\n    .mt-xl-4 {\n        margin-top: 1.5rem !important;\n    }\n\n    .mt-xl-5 {\n        margin-top: 3rem !important;\n    }\n\n    .mt-xl-auto {\n        margin-top: auto !important;\n    }\n\n    .me-xl-0 {\n        margin-left: 0 !important;\n    }\n\n    .me-xl-1 {\n        margin-left: 0.25rem !important;\n    }\n\n    .me-xl-2 {\n        margin-left: 0.5rem !important;\n    }\n\n    .me-xl-3 {\n        margin-left: 1rem !important;\n    }\n\n    .me-xl-4 {\n        margin-left: 1.5rem !important;\n    }\n\n    .me-xl-5 {\n        margin-left: 3rem !important;\n    }\n\n    .me-xl-auto {\n        margin-left: auto !important;\n    }\n\n    .mb-xl-0 {\n        margin-bottom: 0 !important;\n    }\n\n    .mb-xl-1 {\n        margin-bottom: 0.25rem !important;\n    }\n\n    .mb-xl-2 {\n        margin-bottom: 0.5rem !important;\n    }\n\n    .mb-xl-3 {\n        margin-bottom: 1rem !important;\n    }\n\n    .mb-xl-4 {\n        margin-bottom: 1.5rem !important;\n    }\n\n    .mb-xl-5 {\n        margin-bottom: 3rem !important;\n    }\n\n    .mb-xl-auto {\n        margin-bottom: auto !important;\n    }\n\n    .ms-xl-0 {\n        margin-right: 0 !important;\n    }\n\n    .ms-xl-1 {\n        margin-right: 0.25rem !important;\n    }\n\n    .ms-xl-2 {\n        margin-right: 0.5rem !important;\n    }\n\n    .ms-xl-3 {\n        margin-right: 1rem !important;\n    }\n\n    .ms-xl-4 {\n        margin-right: 1.5rem !important;\n    }\n\n    .ms-xl-5 {\n        margin-right: 3rem !important;\n    }\n\n    .ms-xl-auto {\n        margin-right: auto !important;\n    }\n\n    .p-xl-0 {\n        padding: 0 !important;\n    }\n\n    .p-xl-1 {\n        padding: 0.25rem !important;\n    }\n\n    .p-xl-2 {\n        padding: 0.5rem !important;\n    }\n\n    .p-xl-3 {\n        padding: 1rem !important;\n    }\n\n    .p-xl-4 {\n        padding: 1.5rem !important;\n    }\n\n    .p-xl-5 {\n        padding: 3rem !important;\n    }\n\n    .px-xl-0 {\n        padding-left: 0 !important;\n        padding-right: 0 !important;\n    }\n\n    .px-xl-1 {\n        padding-left: 0.25rem !important;\n        padding-right: 0.25rem !important;\n    }\n\n    .px-xl-2 {\n        padding-left: 0.5rem !important;\n        padding-right: 0.5rem !important;\n    }\n\n    .px-xl-3 {\n        padding-left: 1rem !important;\n        padding-right: 1rem !important;\n    }\n\n    .px-xl-4 {\n        padding-left: 1.5rem !important;\n        padding-right: 1.5rem !important;\n    }\n\n    .px-xl-5 {\n        padding-left: 3rem !important;\n        padding-right: 3rem !important;\n    }\n\n    .py-xl-0 {\n        padding-top: 0 !important;\n        padding-bottom: 0 !important;\n    }\n\n    .py-xl-1 {\n        padding-top: 0.25rem !important;\n        padding-bottom: 0.25rem !important;\n    }\n\n    .py-xl-2 {\n        padding-top: 0.5rem !important;\n        padding-bottom: 0.5rem !important;\n    }\n\n    .py-xl-3 {\n        padding-top: 1rem !important;\n        padding-bottom: 1rem !important;\n    }\n\n    .py-xl-4 {\n        padding-top: 1.5rem !important;\n        padding-bottom: 1.5rem !important;\n    }\n\n    .py-xl-5 {\n        padding-top: 3rem !important;\n        padding-bottom: 3rem !important;\n    }\n\n    .pt-xl-0 {\n        padding-top: 0 !important;\n    }\n\n    .pt-xl-1 {\n        padding-top: 0.25rem !important;\n    }\n\n    .pt-xl-2 {\n        padding-top: 0.5rem !important;\n    }\n\n    .pt-xl-3 {\n        padding-top: 1rem !important;\n    }\n\n    .pt-xl-4 {\n        padding-top: 1.5rem !important;\n    }\n\n    .pt-xl-5 {\n        padding-top: 3rem !important;\n    }\n\n    .pe-xl-0 {\n        padding-left: 0 !important;\n    }\n\n    .pe-xl-1 {\n        padding-left: 0.25rem !important;\n    }\n\n    .pe-xl-2 {\n        padding-left: 0.5rem !important;\n    }\n\n    .pe-xl-3 {\n        padding-left: 1rem !important;\n    }\n\n    .pe-xl-4 {\n        padding-left: 1.5rem !important;\n    }\n\n    .pe-xl-5 {\n        padding-left: 3rem !important;\n    }\n\n    .pb-xl-0 {\n        padding-bottom: 0 !important;\n    }\n\n    .pb-xl-1 {\n        padding-bottom: 0.25rem !important;\n    }\n\n    .pb-xl-2 {\n        padding-bottom: 0.5rem !important;\n    }\n\n    .pb-xl-3 {\n        padding-bottom: 1rem !important;\n    }\n\n    .pb-xl-4 {\n        padding-bottom: 1.5rem !important;\n    }\n\n    .pb-xl-5 {\n        padding-bottom: 3rem !important;\n    }\n\n    .ps-xl-0 {\n        padding-right: 0 !important;\n    }\n\n    .ps-xl-1 {\n        padding-right: 0.25rem !important;\n    }\n\n    .ps-xl-2 {\n        padding-right: 0.5rem !important;\n    }\n\n    .ps-xl-3 {\n        padding-right: 1rem !important;\n    }\n\n    .ps-xl-4 {\n        padding-right: 1.5rem !important;\n    }\n\n    .ps-xl-5 {\n        padding-right: 3rem !important;\n    }\n}\n\n@media (min-width: 1400px) {\n    .d-xxl-inline {\n        display: inline !important;\n    }\n\n    .d-xxl-inline-block {\n        display: inline-block !important;\n    }\n\n    .d-xxl-block {\n        display: block !important;\n    }\n\n    .d-xxl-grid {\n        display: grid !important;\n    }\n\n    .d-xxl-table {\n        display: table !important;\n    }\n\n    .d-xxl-table-row {\n        display: table-row !important;\n    }\n\n    .d-xxl-table-cell {\n        display: table-cell !important;\n    }\n\n    .d-xxl-flex {\n        display: flex !important;\n    }\n\n    .d-xxl-inline-flex {\n        display: inline-flex !important;\n    }\n\n    .d-xxl-none {\n        display: none !important;\n    }\n\n    .flex-xxl-fill {\n        flex: 1 1 auto !important;\n    }\n\n    .flex-xxl-row {\n        flex-direction: row !important;\n    }\n\n    .flex-xxl-column {\n        flex-direction: column !important;\n    }\n\n    .flex-xxl-row-reverse {\n        flex-direction: row-reverse !important;\n    }\n\n    .flex-xxl-column-reverse {\n        flex-direction: column-reverse !important;\n    }\n\n    .flex-xxl-grow-0 {\n        flex-grow: 0 !important;\n    }\n\n    .flex-xxl-grow-1 {\n        flex-grow: 1 !important;\n    }\n\n    .flex-xxl-shrink-0 {\n        flex-shrink: 0 !important;\n    }\n\n    .flex-xxl-shrink-1 {\n        flex-shrink: 1 !important;\n    }\n\n    .flex-xxl-wrap {\n        flex-wrap: wrap !important;\n    }\n\n    .flex-xxl-nowrap {\n        flex-wrap: nowrap !important;\n    }\n\n    .flex-xxl-wrap-reverse {\n        flex-wrap: wrap-reverse !important;\n    }\n\n    .justify-content-xxl-start {\n        justify-content: flex-start !important;\n    }\n\n    .justify-content-xxl-end {\n        justify-content: flex-end !important;\n    }\n\n    .justify-content-xxl-center {\n        justify-content: center !important;\n    }\n\n    .justify-content-xxl-between {\n        justify-content: space-between !important;\n    }\n\n    .justify-content-xxl-around {\n        justify-content: space-around !important;\n    }\n\n    .justify-content-xxl-evenly {\n        justify-content: space-evenly !important;\n    }\n\n    .align-items-xxl-start {\n        align-items: flex-start !important;\n    }\n\n    .align-items-xxl-end {\n        align-items: flex-end !important;\n    }\n\n    .align-items-xxl-center {\n        align-items: center !important;\n    }\n\n    .align-items-xxl-baseline {\n        align-items: baseline !important;\n    }\n\n    .align-items-xxl-stretch {\n        align-items: stretch !important;\n    }\n\n    .align-content-xxl-start {\n        align-content: flex-start !important;\n    }\n\n    .align-content-xxl-end {\n        align-content: flex-end !important;\n    }\n\n    .align-content-xxl-center {\n        align-content: center !important;\n    }\n\n    .align-content-xxl-between {\n        align-content: space-between !important;\n    }\n\n    .align-content-xxl-around {\n        align-content: space-around !important;\n    }\n\n    .align-content-xxl-stretch {\n        align-content: stretch !important;\n    }\n\n    .align-self-xxl-auto {\n        align-self: auto !important;\n    }\n\n    .align-self-xxl-start {\n        align-self: flex-start !important;\n    }\n\n    .align-self-xxl-end {\n        align-self: flex-end !important;\n    }\n\n    .align-self-xxl-center {\n        align-self: center !important;\n    }\n\n    .align-self-xxl-baseline {\n        align-self: baseline !important;\n    }\n\n    .align-self-xxl-stretch {\n        align-self: stretch !important;\n    }\n\n    .order-xxl-first {\n        order: -1 !important;\n    }\n\n    .order-xxl-0 {\n        order: 0 !important;\n    }\n\n    .order-xxl-1 {\n        order: 1 !important;\n    }\n\n    .order-xxl-2 {\n        order: 2 !important;\n    }\n\n    .order-xxl-3 {\n        order: 3 !important;\n    }\n\n    .order-xxl-4 {\n        order: 4 !important;\n    }\n\n    .order-xxl-5 {\n        order: 5 !important;\n    }\n\n    .order-xxl-last {\n        order: 6 !important;\n    }\n\n    .m-xxl-0 {\n        margin: 0 !important;\n    }\n\n    .m-xxl-1 {\n        margin: 0.25rem !important;\n    }\n\n    .m-xxl-2 {\n        margin: 0.5rem !important;\n    }\n\n    .m-xxl-3 {\n        margin: 1rem !important;\n    }\n\n    .m-xxl-4 {\n        margin: 1.5rem !important;\n    }\n\n    .m-xxl-5 {\n        margin: 3rem !important;\n    }\n\n    .m-xxl-auto {\n        margin: auto !important;\n    }\n\n    .mx-xxl-0 {\n        margin-left: 0 !important;\n        margin-right: 0 !important;\n    }\n\n    .mx-xxl-1 {\n        margin-left: 0.25rem !important;\n        margin-right: 0.25rem !important;\n    }\n\n    .mx-xxl-2 {\n        margin-left: 0.5rem !important;\n        margin-right: 0.5rem !important;\n    }\n\n    .mx-xxl-3 {\n        margin-left: 1rem !important;\n        margin-right: 1rem !important;\n    }\n\n    .mx-xxl-4 {\n        margin-left: 1.5rem !important;\n        margin-right: 1.5rem !important;\n    }\n\n    .mx-xxl-5 {\n        margin-left: 3rem !important;\n        margin-right: 3rem !important;\n    }\n\n    .mx-xxl-auto {\n        margin-left: auto !important;\n        margin-right: auto !important;\n    }\n\n    .my-xxl-0 {\n        margin-top: 0 !important;\n        margin-bottom: 0 !important;\n    }\n\n    .my-xxl-1 {\n        margin-top: 0.25rem !important;\n        margin-bottom: 0.25rem !important;\n    }\n\n    .my-xxl-2 {\n        margin-top: 0.5rem !important;\n        margin-bottom: 0.5rem !important;\n    }\n\n    .my-xxl-3 {\n        margin-top: 1rem !important;\n        margin-bottom: 1rem !important;\n    }\n\n    .my-xxl-4 {\n        margin-top: 1.5rem !important;\n        margin-bottom: 1.5rem !important;\n    }\n\n    .my-xxl-5 {\n        margin-top: 3rem !important;\n        margin-bottom: 3rem !important;\n    }\n\n    .my-xxl-auto {\n        margin-top: auto !important;\n        margin-bottom: auto !important;\n    }\n\n    .mt-xxl-0 {\n        margin-top: 0 !important;\n    }\n\n    .mt-xxl-1 {\n        margin-top: 0.25rem !important;\n    }\n\n    .mt-xxl-2 {\n        margin-top: 0.5rem !important;\n    }\n\n    .mt-xxl-3 {\n        margin-top: 1rem !important;\n    }\n\n    .mt-xxl-4 {\n        margin-top: 1.5rem !important;\n    }\n\n    .mt-xxl-5 {\n        margin-top: 3rem !important;\n    }\n\n    .mt-xxl-auto {\n        margin-top: auto !important;\n    }\n\n    .me-xxl-0 {\n        margin-left: 0 !important;\n    }\n\n    .me-xxl-1 {\n        margin-left: 0.25rem !important;\n    }\n\n    .me-xxl-2 {\n        margin-left: 0.5rem !important;\n    }\n\n    .me-xxl-3 {\n        margin-left: 1rem !important;\n    }\n\n    .me-xxl-4 {\n        margin-left: 1.5rem !important;\n    }\n\n    .me-xxl-5 {\n        margin-left: 3rem !important;\n    }\n\n    .me-xxl-auto {\n        margin-left: auto !important;\n    }\n\n    .mb-xxl-0 {\n        margin-bottom: 0 !important;\n    }\n\n    .mb-xxl-1 {\n        margin-bottom: 0.25rem !important;\n    }\n\n    .mb-xxl-2 {\n        margin-bottom: 0.5rem !important;\n    }\n\n    .mb-xxl-3 {\n        margin-bottom: 1rem !important;\n    }\n\n    .mb-xxl-4 {\n        margin-bottom: 1.5rem !important;\n    }\n\n    .mb-xxl-5 {\n        margin-bottom: 3rem !important;\n    }\n\n    .mb-xxl-auto {\n        margin-bottom: auto !important;\n    }\n\n    .ms-xxl-0 {\n        margin-right: 0 !important;\n    }\n\n    .ms-xxl-1 {\n        margin-right: 0.25rem !important;\n    }\n\n    .ms-xxl-2 {\n        margin-right: 0.5rem !important;\n    }\n\n    .ms-xxl-3 {\n        margin-right: 1rem !important;\n    }\n\n    .ms-xxl-4 {\n        margin-right: 1.5rem !important;\n    }\n\n    .ms-xxl-5 {\n        margin-right: 3rem !important;\n    }\n\n    .ms-xxl-auto {\n        margin-right: auto !important;\n    }\n\n    .p-xxl-0 {\n        padding: 0 !important;\n    }\n\n    .p-xxl-1 {\n        padding: 0.25rem !important;\n    }\n\n    .p-xxl-2 {\n        padding: 0.5rem !important;\n    }\n\n    .p-xxl-3 {\n        padding: 1rem !important;\n    }\n\n    .p-xxl-4 {\n        padding: 1.5rem !important;\n    }\n\n    .p-xxl-5 {\n        padding: 3rem !important;\n    }\n\n    .px-xxl-0 {\n        padding-left: 0 !important;\n        padding-right: 0 !important;\n    }\n\n    .px-xxl-1 {\n        padding-left: 0.25rem !important;\n        padding-right: 0.25rem !important;\n    }\n\n    .px-xxl-2 {\n        padding-left: 0.5rem !important;\n        padding-right: 0.5rem !important;\n    }\n\n    .px-xxl-3 {\n        padding-left: 1rem !important;\n        padding-right: 1rem !important;\n    }\n\n    .px-xxl-4 {\n        padding-left: 1.5rem !important;\n        padding-right: 1.5rem !important;\n    }\n\n    .px-xxl-5 {\n        padding-left: 3rem !important;\n        padding-right: 3rem !important;\n    }\n\n    .py-xxl-0 {\n        padding-top: 0 !important;\n        padding-bottom: 0 !important;\n    }\n\n    .py-xxl-1 {\n        padding-top: 0.25rem !important;\n        padding-bottom: 0.25rem !important;\n    }\n\n    .py-xxl-2 {\n        padding-top: 0.5rem !important;\n        padding-bottom: 0.5rem !important;\n    }\n\n    .py-xxl-3 {\n        padding-top: 1rem !important;\n        padding-bottom: 1rem !important;\n    }\n\n    .py-xxl-4 {\n        padding-top: 1.5rem !important;\n        padding-bottom: 1.5rem !important;\n    }\n\n    .py-xxl-5 {\n        padding-top: 3rem !important;\n        padding-bottom: 3rem !important;\n    }\n\n    .pt-xxl-0 {\n        padding-top: 0 !important;\n    }\n\n    .pt-xxl-1 {\n        padding-top: 0.25rem !important;\n    }\n\n    .pt-xxl-2 {\n        padding-top: 0.5rem !important;\n    }\n\n    .pt-xxl-3 {\n        padding-top: 1rem !important;\n    }\n\n    .pt-xxl-4 {\n        padding-top: 1.5rem !important;\n    }\n\n    .pt-xxl-5 {\n        padding-top: 3rem !important;\n    }\n\n    .pe-xxl-0 {\n        padding-left: 0 !important;\n    }\n\n    .pe-xxl-1 {\n        padding-left: 0.25rem !important;\n    }\n\n    .pe-xxl-2 {\n        padding-left: 0.5rem !important;\n    }\n\n    .pe-xxl-3 {\n        padding-left: 1rem !important;\n    }\n\n    .pe-xxl-4 {\n        padding-left: 1.5rem !important;\n    }\n\n    .pe-xxl-5 {\n        padding-left: 3rem !important;\n    }\n\n    .pb-xxl-0 {\n        padding-bottom: 0 !important;\n    }\n\n    .pb-xxl-1 {\n        padding-bottom: 0.25rem !important;\n    }\n\n    .pb-xxl-2 {\n        padding-bottom: 0.5rem !important;\n    }\n\n    .pb-xxl-3 {\n        padding-bottom: 1rem !important;\n    }\n\n    .pb-xxl-4 {\n        padding-bottom: 1.5rem !important;\n    }\n\n    .pb-xxl-5 {\n        padding-bottom: 3rem !important;\n    }\n\n    .ps-xxl-0 {\n        padding-right: 0 !important;\n    }\n\n    .ps-xxl-1 {\n        padding-right: 0.25rem !important;\n    }\n\n    .ps-xxl-2 {\n        padding-right: 0.5rem !important;\n    }\n\n    .ps-xxl-3 {\n        padding-right: 1rem !important;\n    }\n\n    .ps-xxl-4 {\n        padding-right: 1.5rem !important;\n    }\n\n    .ps-xxl-5 {\n        padding-right: 3rem !important;\n    }\n}\n\n@media print {\n    .d-print-inline {\n        display: inline !important;\n    }\n\n    .d-print-inline-block {\n        display: inline-block !important;\n    }\n\n    .d-print-block {\n        display: block !important;\n    }\n\n    .d-print-grid {\n        display: grid !important;\n    }\n\n    .d-print-table {\n        display: table !important;\n    }\n\n    .d-print-table-row {\n        display: table-row !important;\n    }\n\n    .d-print-table-cell {\n        display: table-cell !important;\n    }\n\n    .d-print-flex {\n        display: flex !important;\n    }\n\n    .d-print-inline-flex {\n        display: inline-flex !important;\n    }\n\n    .d-print-none {\n        display: none !important;\n    }\n}\n\n/*# sourceMappingURL=bootstrap-grid.rtl.css.map */"
  },
  {
    "path": "src/main/resources/web/css/bootstrap-reboot.css",
    "content": "/*!\n * Bootstrap Reboot v5.2.3 (https://getbootstrap.com/)\n * Copyright 2011-2022 The Bootstrap Authors\n * Copyright 2011-2022 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n:root {\n    --bs-blue: #0d6efd;\n    --bs-indigo: #6610f2;\n    --bs-purple: #6f42c1;\n    --bs-pink: #d63384;\n    --bs-red: #dc3545;\n    --bs-orange: #fd7e14;\n    --bs-yellow: #ffc107;\n    --bs-green: #198754;\n    --bs-teal: #20c997;\n    --bs-cyan: #0dcaf0;\n    --bs-black: #000;\n    --bs-white: #fff;\n    --bs-gray: #6c757d;\n    --bs-gray-dark: #343a40;\n    --bs-gray-100: #f8f9fa;\n    --bs-gray-200: #e9ecef;\n    --bs-gray-300: #dee2e6;\n    --bs-gray-400: #ced4da;\n    --bs-gray-500: #adb5bd;\n    --bs-gray-600: #6c757d;\n    --bs-gray-700: #495057;\n    --bs-gray-800: #343a40;\n    --bs-gray-900: #212529;\n    --bs-primary: #0d6efd;\n    --bs-secondary: #6c757d;\n    --bs-success: #198754;\n    --bs-info: #0dcaf0;\n    --bs-warning: #ffc107;\n    --bs-danger: #dc3545;\n    --bs-light: #f8f9fa;\n    --bs-dark: #212529;\n    --bs-primary-rgb: 13, 110, 253;\n    --bs-secondary-rgb: 108, 117, 125;\n    --bs-success-rgb: 25, 135, 84;\n    --bs-info-rgb: 13, 202, 240;\n    --bs-warning-rgb: 255, 193, 7;\n    --bs-danger-rgb: 220, 53, 69;\n    --bs-light-rgb: 248, 249, 250;\n    --bs-dark-rgb: 33, 37, 41;\n    --bs-white-rgb: 255, 255, 255;\n    --bs-black-rgb: 0, 0, 0;\n    --bs-body-color-rgb: 33, 37, 41;\n    --bs-body-bg-rgb: 255, 255, 255;\n    --bs-font-sans-serif: system-ui, -apple-system, \"Segoe UI\", Roboto, \"Helvetica Neue\", \"Noto Sans\", \"Liberation Sans\", Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n    --bs-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n    --bs-gradient: linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));\n    --bs-body-font-family: var(--bs-font-sans-serif);\n    --bs-body-font-size: 1rem;\n    --bs-body-font-weight: 400;\n    --bs-body-line-height: 1.5;\n    --bs-body-color: #212529;\n    --bs-body-bg: #fff;\n    --bs-border-width: 1px;\n    --bs-border-style: solid;\n    --bs-border-color: #dee2e6;\n    --bs-border-color-translucent: rgba(0, 0, 0, 0.175);\n    --bs-border-radius: 0.375rem;\n    --bs-border-radius-sm: 0.25rem;\n    --bs-border-radius-lg: 0.5rem;\n    --bs-border-radius-xl: 1rem;\n    --bs-border-radius-2xl: 2rem;\n    --bs-border-radius-pill: 50rem;\n    --bs-link-color: #0d6efd;\n    --bs-link-hover-color: #0a58ca;\n    --bs-code-color: #d63384;\n    --bs-highlight-bg: #fff3cd;\n}\n\n*,\n*::before,\n*::after {\n    box-sizing: border-box;\n}\n\n@media (prefers-reduced-motion: no-preference) {\n    :root {\n        scroll-behavior: smooth;\n    }\n}\n\nbody {\n    margin: 0;\n    font-family: var(--bs-body-font-family);\n    font-size: var(--bs-body-font-size);\n    font-weight: var(--bs-body-font-weight);\n    line-height: var(--bs-body-line-height);\n    color: var(--bs-body-color);\n    text-align: var(--bs-body-text-align);\n    background-color: var(--bs-body-bg);\n    -webkit-text-size-adjust: 100%;\n    -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\n\nhr {\n    margin: 1rem 0;\n    color: inherit;\n    border: 0;\n    border-top: 1px solid;\n    opacity: 0.25;\n}\n\nh6, h5, h4, h3, h2, h1 {\n    margin-top: 0;\n    margin-bottom: 0.5rem;\n    font-weight: 500;\n    line-height: 1.2;\n}\n\nh1 {\n    font-size: calc(1.375rem + 1.5vw);\n}\n\n@media (min-width: 1200px) {\n    h1 {\n        font-size: 2.5rem;\n    }\n}\n\nh2 {\n    font-size: calc(1.325rem + 0.9vw);\n}\n\n@media (min-width: 1200px) {\n    h2 {\n        font-size: 2rem;\n    }\n}\n\nh3 {\n    font-size: calc(1.3rem + 0.6vw);\n}\n\n@media (min-width: 1200px) {\n    h3 {\n        font-size: 1.75rem;\n    }\n}\n\nh4 {\n    font-size: calc(1.275rem + 0.3vw);\n}\n\n@media (min-width: 1200px) {\n    h4 {\n        font-size: 1.5rem;\n    }\n}\n\nh5 {\n    font-size: 1.25rem;\n}\n\nh6 {\n    font-size: 1rem;\n}\n\np {\n    margin-top: 0;\n    margin-bottom: 1rem;\n}\n\nabbr[title] {\n    -webkit-text-decoration: underline dotted;\n    text-decoration: underline dotted;\n    cursor: help;\n    -webkit-text-decoration-skip-ink: none;\n    text-decoration-skip-ink: none;\n}\n\naddress {\n    margin-bottom: 1rem;\n    font-style: normal;\n    line-height: inherit;\n}\n\nol,\nul {\n    padding-left: 2rem;\n}\n\nol,\nul,\ndl {\n    margin-top: 0;\n    margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n    margin-bottom: 0;\n}\n\ndt {\n    font-weight: 700;\n}\n\ndd {\n    margin-bottom: 0.5rem;\n    margin-left: 0;\n}\n\nblockquote {\n    margin: 0 0 1rem;\n}\n\nb,\nstrong {\n    font-weight: bolder;\n}\n\nsmall {\n    font-size: 0.875em;\n}\n\nmark {\n    padding: 0.1875em;\n    background-color: var(--bs-highlight-bg);\n}\n\nsub,\nsup {\n    position: relative;\n    font-size: 0.75em;\n    line-height: 0;\n    vertical-align: baseline;\n}\n\nsub {\n    bottom: -0.25em;\n}\n\nsup {\n    top: -0.5em;\n}\n\na {\n    color: var(--bs-link-color);\n    text-decoration: underline;\n}\n\na:hover {\n    color: var(--bs-link-hover-color);\n}\n\na:not([href]):not([class]), a:not([href]):not([class]):hover {\n    color: inherit;\n    text-decoration: none;\n}\n\npre,\ncode,\nkbd,\nsamp {\n    font-family: var(--bs-font-monospace);\n    font-size: 1em;\n}\n\npre {\n    display: block;\n    margin-top: 0;\n    margin-bottom: 1rem;\n    overflow: auto;\n    font-size: 0.875em;\n}\n\npre code {\n    font-size: inherit;\n    color: inherit;\n    word-break: normal;\n}\n\ncode {\n    font-size: 0.875em;\n    color: var(--bs-code-color);\n    word-wrap: break-word;\n}\n\na > code {\n    color: inherit;\n}\n\nkbd {\n    padding: 0.1875rem 0.375rem;\n    font-size: 0.875em;\n    color: var(--bs-body-bg);\n    background-color: var(--bs-body-color);\n    border-radius: 0.25rem;\n}\n\nkbd kbd {\n    padding: 0;\n    font-size: 1em;\n}\n\nfigure {\n    margin: 0 0 1rem;\n}\n\nimg,\nsvg {\n    vertical-align: middle;\n}\n\ntable {\n    caption-side: bottom;\n    border-collapse: collapse;\n}\n\ncaption {\n    padding-top: 0.5rem;\n    padding-bottom: 0.5rem;\n    color: #6c757d;\n    text-align: left;\n}\n\nth {\n    text-align: inherit;\n    text-align: -webkit-match-parent;\n}\n\nthead,\ntbody,\ntfoot,\ntr,\ntd,\nth {\n    border-color: inherit;\n    border-style: solid;\n    border-width: 0;\n}\n\nlabel {\n    display: inline-block;\n}\n\nbutton {\n    border-radius: 0;\n}\n\nbutton:focus:not(:focus-visible) {\n    outline: 0;\n}\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n    margin: 0;\n    font-family: inherit;\n    font-size: inherit;\n    line-height: inherit;\n}\n\nbutton,\nselect {\n    text-transform: none;\n}\n\n[role=button] {\n    cursor: pointer;\n}\n\nselect {\n    word-wrap: normal;\n}\n\nselect:disabled {\n    opacity: 1;\n}\n\n[list]:not([type=date]):not([type=datetime-local]):not([type=month]):not([type=week]):not([type=time])::-webkit-calendar-picker-indicator {\n    display: none !important;\n}\n\nbutton,\n[type=button],\n[type=reset],\n[type=submit] {\n    -webkit-appearance: button;\n}\n\nbutton:not(:disabled),\n[type=button]:not(:disabled),\n[type=reset]:not(:disabled),\n[type=submit]:not(:disabled) {\n    cursor: pointer;\n}\n\n::-moz-focus-inner {\n    padding: 0;\n    border-style: none;\n}\n\ntextarea {\n    resize: vertical;\n}\n\nfieldset {\n    min-width: 0;\n    padding: 0;\n    margin: 0;\n    border: 0;\n}\n\nlegend {\n    float: left;\n    width: 100%;\n    padding: 0;\n    margin-bottom: 0.5rem;\n    font-size: calc(1.275rem + 0.3vw);\n    line-height: inherit;\n}\n\n@media (min-width: 1200px) {\n    legend {\n        font-size: 1.5rem;\n    }\n}\n\nlegend + * {\n    clear: left;\n}\n\n::-webkit-datetime-edit-fields-wrapper,\n::-webkit-datetime-edit-text,\n::-webkit-datetime-edit-minute,\n::-webkit-datetime-edit-hour-field,\n::-webkit-datetime-edit-day-field,\n::-webkit-datetime-edit-month-field,\n::-webkit-datetime-edit-year-field {\n    padding: 0;\n}\n\n::-webkit-inner-spin-button {\n    height: auto;\n}\n\n[type=search] {\n    outline-offset: -2px;\n    -webkit-appearance: textfield;\n}\n\n/* rtl:raw:\n[type=\"tel\"],\n[type=\"url\"],\n[type=\"email\"],\n[type=\"number\"] {\n  direction: ltr;\n}\n*/\n::-webkit-search-decoration {\n    -webkit-appearance: none;\n}\n\n::-webkit-color-swatch-wrapper {\n    padding: 0;\n}\n\n::-webkit-file-upload-button {\n    font: inherit;\n    -webkit-appearance: button;\n}\n\n::file-selector-button {\n    font: inherit;\n    -webkit-appearance: button;\n}\n\noutput {\n    display: inline-block;\n}\n\niframe {\n    border: 0;\n}\n\nsummary {\n    display: list-item;\n    cursor: pointer;\n}\n\nprogress {\n    vertical-align: baseline;\n}\n\n[hidden] {\n    display: none !important;\n}\n\n/*# sourceMappingURL=bootstrap-reboot.css.map */"
  },
  {
    "path": "src/main/resources/web/css/bootstrap-reboot.rtl.css",
    "content": "/*!\n * Bootstrap Reboot v5.2.3 (https://getbootstrap.com/)\n * Copyright 2011-2022 The Bootstrap Authors\n * Copyright 2011-2022 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n:root {\n    --bs-blue: #0d6efd;\n    --bs-indigo: #6610f2;\n    --bs-purple: #6f42c1;\n    --bs-pink: #d63384;\n    --bs-red: #dc3545;\n    --bs-orange: #fd7e14;\n    --bs-yellow: #ffc107;\n    --bs-green: #198754;\n    --bs-teal: #20c997;\n    --bs-cyan: #0dcaf0;\n    --bs-black: #000;\n    --bs-white: #fff;\n    --bs-gray: #6c757d;\n    --bs-gray-dark: #343a40;\n    --bs-gray-100: #f8f9fa;\n    --bs-gray-200: #e9ecef;\n    --bs-gray-300: #dee2e6;\n    --bs-gray-400: #ced4da;\n    --bs-gray-500: #adb5bd;\n    --bs-gray-600: #6c757d;\n    --bs-gray-700: #495057;\n    --bs-gray-800: #343a40;\n    --bs-gray-900: #212529;\n    --bs-primary: #0d6efd;\n    --bs-secondary: #6c757d;\n    --bs-success: #198754;\n    --bs-info: #0dcaf0;\n    --bs-warning: #ffc107;\n    --bs-danger: #dc3545;\n    --bs-light: #f8f9fa;\n    --bs-dark: #212529;\n    --bs-primary-rgb: 13, 110, 253;\n    --bs-secondary-rgb: 108, 117, 125;\n    --bs-success-rgb: 25, 135, 84;\n    --bs-info-rgb: 13, 202, 240;\n    --bs-warning-rgb: 255, 193, 7;\n    --bs-danger-rgb: 220, 53, 69;\n    --bs-light-rgb: 248, 249, 250;\n    --bs-dark-rgb: 33, 37, 41;\n    --bs-white-rgb: 255, 255, 255;\n    --bs-black-rgb: 0, 0, 0;\n    --bs-body-color-rgb: 33, 37, 41;\n    --bs-body-bg-rgb: 255, 255, 255;\n    --bs-font-sans-serif: system-ui, -apple-system, \"Segoe UI\", Roboto, \"Helvetica Neue\", \"Noto Sans\", \"Liberation Sans\", Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n    --bs-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n    --bs-gradient: linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));\n    --bs-body-font-family: var(--bs-font-sans-serif);\n    --bs-body-font-size: 1rem;\n    --bs-body-font-weight: 400;\n    --bs-body-line-height: 1.5;\n    --bs-body-color: #212529;\n    --bs-body-bg: #fff;\n    --bs-border-width: 1px;\n    --bs-border-style: solid;\n    --bs-border-color: #dee2e6;\n    --bs-border-color-translucent: rgba(0, 0, 0, 0.175);\n    --bs-border-radius: 0.375rem;\n    --bs-border-radius-sm: 0.25rem;\n    --bs-border-radius-lg: 0.5rem;\n    --bs-border-radius-xl: 1rem;\n    --bs-border-radius-2xl: 2rem;\n    --bs-border-radius-pill: 50rem;\n    --bs-link-color: #0d6efd;\n    --bs-link-hover-color: #0a58ca;\n    --bs-code-color: #d63384;\n    --bs-highlight-bg: #fff3cd;\n}\n\n*,\n*::before,\n*::after {\n    box-sizing: border-box;\n}\n\n@media (prefers-reduced-motion: no-preference) {\n    :root {\n        scroll-behavior: smooth;\n    }\n}\n\nbody {\n    margin: 0;\n    font-family: var(--bs-body-font-family);\n    font-size: var(--bs-body-font-size);\n    font-weight: var(--bs-body-font-weight);\n    line-height: var(--bs-body-line-height);\n    color: var(--bs-body-color);\n    text-align: var(--bs-body-text-align);\n    background-color: var(--bs-body-bg);\n    -webkit-text-size-adjust: 100%;\n    -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\n\nhr {\n    margin: 1rem 0;\n    color: inherit;\n    border: 0;\n    border-top: 1px solid;\n    opacity: 0.25;\n}\n\nh6, h5, h4, h3, h2, h1 {\n    margin-top: 0;\n    margin-bottom: 0.5rem;\n    font-weight: 500;\n    line-height: 1.2;\n}\n\nh1 {\n    font-size: calc(1.375rem + 1.5vw);\n}\n\n@media (min-width: 1200px) {\n    h1 {\n        font-size: 2.5rem;\n    }\n}\n\nh2 {\n    font-size: calc(1.325rem + 0.9vw);\n}\n\n@media (min-width: 1200px) {\n    h2 {\n        font-size: 2rem;\n    }\n}\n\nh3 {\n    font-size: calc(1.3rem + 0.6vw);\n}\n\n@media (min-width: 1200px) {\n    h3 {\n        font-size: 1.75rem;\n    }\n}\n\nh4 {\n    font-size: calc(1.275rem + 0.3vw);\n}\n\n@media (min-width: 1200px) {\n    h4 {\n        font-size: 1.5rem;\n    }\n}\n\nh5 {\n    font-size: 1.25rem;\n}\n\nh6 {\n    font-size: 1rem;\n}\n\np {\n    margin-top: 0;\n    margin-bottom: 1rem;\n}\n\nabbr[title] {\n    -webkit-text-decoration: underline dotted;\n    text-decoration: underline dotted;\n    cursor: help;\n    -webkit-text-decoration-skip-ink: none;\n    text-decoration-skip-ink: none;\n}\n\naddress {\n    margin-bottom: 1rem;\n    font-style: normal;\n    line-height: inherit;\n}\n\nol,\nul {\n    padding-right: 2rem;\n}\n\nol,\nul,\ndl {\n    margin-top: 0;\n    margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n    margin-bottom: 0;\n}\n\ndt {\n    font-weight: 700;\n}\n\ndd {\n    margin-bottom: 0.5rem;\n    margin-right: 0;\n}\n\nblockquote {\n    margin: 0 0 1rem;\n}\n\nb,\nstrong {\n    font-weight: bolder;\n}\n\nsmall {\n    font-size: 0.875em;\n}\n\nmark {\n    padding: 0.1875em;\n    background-color: var(--bs-highlight-bg);\n}\n\nsub,\nsup {\n    position: relative;\n    font-size: 0.75em;\n    line-height: 0;\n    vertical-align: baseline;\n}\n\nsub {\n    bottom: -0.25em;\n}\n\nsup {\n    top: -0.5em;\n}\n\na {\n    color: var(--bs-link-color);\n    text-decoration: underline;\n}\n\na:hover {\n    color: var(--bs-link-hover-color);\n}\n\na:not([href]):not([class]), a:not([href]):not([class]):hover {\n    color: inherit;\n    text-decoration: none;\n}\n\npre,\ncode,\nkbd,\nsamp {\n    font-family: var(--bs-font-monospace);\n    font-size: 1em;\n}\n\npre {\n    display: block;\n    margin-top: 0;\n    margin-bottom: 1rem;\n    overflow: auto;\n    font-size: 0.875em;\n}\n\npre code {\n    font-size: inherit;\n    color: inherit;\n    word-break: normal;\n}\n\ncode {\n    font-size: 0.875em;\n    color: var(--bs-code-color);\n    word-wrap: break-word;\n}\n\na > code {\n    color: inherit;\n}\n\nkbd {\n    padding: 0.1875rem 0.375rem;\n    font-size: 0.875em;\n    color: var(--bs-body-bg);\n    background-color: var(--bs-body-color);\n    border-radius: 0.25rem;\n}\n\nkbd kbd {\n    padding: 0;\n    font-size: 1em;\n}\n\nfigure {\n    margin: 0 0 1rem;\n}\n\nimg,\nsvg {\n    vertical-align: middle;\n}\n\ntable {\n    caption-side: bottom;\n    border-collapse: collapse;\n}\n\ncaption {\n    padding-top: 0.5rem;\n    padding-bottom: 0.5rem;\n    color: #6c757d;\n    text-align: right;\n}\n\nth {\n    text-align: inherit;\n    text-align: -webkit-match-parent;\n}\n\nthead,\ntbody,\ntfoot,\ntr,\ntd,\nth {\n    border-color: inherit;\n    border-style: solid;\n    border-width: 0;\n}\n\nlabel {\n    display: inline-block;\n}\n\nbutton {\n    border-radius: 0;\n}\n\nbutton:focus:not(:focus-visible) {\n    outline: 0;\n}\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n    margin: 0;\n    font-family: inherit;\n    font-size: inherit;\n    line-height: inherit;\n}\n\nbutton,\nselect {\n    text-transform: none;\n}\n\n[role=button] {\n    cursor: pointer;\n}\n\nselect {\n    word-wrap: normal;\n}\n\nselect:disabled {\n    opacity: 1;\n}\n\n[list]:not([type=date]):not([type=datetime-local]):not([type=month]):not([type=week]):not([type=time])::-webkit-calendar-picker-indicator {\n    display: none !important;\n}\n\nbutton,\n[type=button],\n[type=reset],\n[type=submit] {\n    -webkit-appearance: button;\n}\n\nbutton:not(:disabled),\n[type=button]:not(:disabled),\n[type=reset]:not(:disabled),\n[type=submit]:not(:disabled) {\n    cursor: pointer;\n}\n\n::-moz-focus-inner {\n    padding: 0;\n    border-style: none;\n}\n\ntextarea {\n    resize: vertical;\n}\n\nfieldset {\n    min-width: 0;\n    padding: 0;\n    margin: 0;\n    border: 0;\n}\n\nlegend {\n    float: right;\n    width: 100%;\n    padding: 0;\n    margin-bottom: 0.5rem;\n    font-size: calc(1.275rem + 0.3vw);\n    line-height: inherit;\n}\n\n@media (min-width: 1200px) {\n    legend {\n        font-size: 1.5rem;\n    }\n}\n\nlegend + * {\n    clear: right;\n}\n\n::-webkit-datetime-edit-fields-wrapper,\n::-webkit-datetime-edit-text,\n::-webkit-datetime-edit-minute,\n::-webkit-datetime-edit-hour-field,\n::-webkit-datetime-edit-day-field,\n::-webkit-datetime-edit-month-field,\n::-webkit-datetime-edit-year-field {\n    padding: 0;\n}\n\n::-webkit-inner-spin-button {\n    height: auto;\n}\n\n[type=search] {\n    outline-offset: -2px;\n    -webkit-appearance: textfield;\n}\n\n[type=\"tel\"],\n[type=\"url\"],\n[type=\"email\"],\n[type=\"number\"] {\n    direction: ltr;\n}\n\n::-webkit-search-decoration {\n    -webkit-appearance: none;\n}\n\n::-webkit-color-swatch-wrapper {\n    padding: 0;\n}\n\n::-webkit-file-upload-button {\n    font: inherit;\n    -webkit-appearance: button;\n}\n\n::file-selector-button {\n    font: inherit;\n    -webkit-appearance: button;\n}\n\noutput {\n    display: inline-block;\n}\n\niframe {\n    border: 0;\n}\n\nsummary {\n    display: list-item;\n    cursor: pointer;\n}\n\nprogress {\n    vertical-align: baseline;\n}\n\n[hidden] {\n    display: none !important;\n}\n\n/*# sourceMappingURL=bootstrap-reboot.rtl.css.map */"
  },
  {
    "path": "src/main/resources/web/css/bootstrap-utilities.css",
    "content": "/*!\n * Bootstrap Utilities v5.2.3 (https://getbootstrap.com/)\n * Copyright 2011-2022 The Bootstrap Authors\n * Copyright 2011-2022 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n:root {\n    --bs-blue: #0d6efd;\n    --bs-indigo: #6610f2;\n    --bs-purple: #6f42c1;\n    --bs-pink: #d63384;\n    --bs-red: #dc3545;\n    --bs-orange: #fd7e14;\n    --bs-yellow: #ffc107;\n    --bs-green: #198754;\n    --bs-teal: #20c997;\n    --bs-cyan: #0dcaf0;\n    --bs-black: #000;\n    --bs-white: #fff;\n    --bs-gray: #6c757d;\n    --bs-gray-dark: #343a40;\n    --bs-gray-100: #f8f9fa;\n    --bs-gray-200: #e9ecef;\n    --bs-gray-300: #dee2e6;\n    --bs-gray-400: #ced4da;\n    --bs-gray-500: #adb5bd;\n    --bs-gray-600: #6c757d;\n    --bs-gray-700: #495057;\n    --bs-gray-800: #343a40;\n    --bs-gray-900: #212529;\n    --bs-primary: #0d6efd;\n    --bs-secondary: #6c757d;\n    --bs-success: #198754;\n    --bs-info: #0dcaf0;\n    --bs-warning: #ffc107;\n    --bs-danger: #dc3545;\n    --bs-light: #f8f9fa;\n    --bs-dark: #212529;\n    --bs-primary-rgb: 13, 110, 253;\n    --bs-secondary-rgb: 108, 117, 125;\n    --bs-success-rgb: 25, 135, 84;\n    --bs-info-rgb: 13, 202, 240;\n    --bs-warning-rgb: 255, 193, 7;\n    --bs-danger-rgb: 220, 53, 69;\n    --bs-light-rgb: 248, 249, 250;\n    --bs-dark-rgb: 33, 37, 41;\n    --bs-white-rgb: 255, 255, 255;\n    --bs-black-rgb: 0, 0, 0;\n    --bs-body-color-rgb: 33, 37, 41;\n    --bs-body-bg-rgb: 255, 255, 255;\n    --bs-font-sans-serif: system-ui, -apple-system, \"Segoe UI\", Roboto, \"Helvetica Neue\", \"Noto Sans\", \"Liberation Sans\", Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n    --bs-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n    --bs-gradient: linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));\n    --bs-body-font-family: var(--bs-font-sans-serif);\n    --bs-body-font-size: 1rem;\n    --bs-body-font-weight: 400;\n    --bs-body-line-height: 1.5;\n    --bs-body-color: #212529;\n    --bs-body-bg: #fff;\n    --bs-border-width: 1px;\n    --bs-border-style: solid;\n    --bs-border-color: #dee2e6;\n    --bs-border-color-translucent: rgba(0, 0, 0, 0.175);\n    --bs-border-radius: 0.375rem;\n    --bs-border-radius-sm: 0.25rem;\n    --bs-border-radius-lg: 0.5rem;\n    --bs-border-radius-xl: 1rem;\n    --bs-border-radius-2xl: 2rem;\n    --bs-border-radius-pill: 50rem;\n    --bs-link-color: #0d6efd;\n    --bs-link-hover-color: #0a58ca;\n    --bs-code-color: #d63384;\n    --bs-highlight-bg: #fff3cd;\n}\n\n.clearfix::after {\n    display: block;\n    clear: both;\n    content: \"\";\n}\n\n.text-bg-primary {\n    color: #fff !important;\n    background-color: RGBA(13, 110, 253, var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-secondary {\n    color: #fff !important;\n    background-color: RGBA(108, 117, 125, var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-success {\n    color: #fff !important;\n    background-color: RGBA(25, 135, 84, var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-info {\n    color: #000 !important;\n    background-color: RGBA(13, 202, 240, var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-warning {\n    color: #000 !important;\n    background-color: RGBA(255, 193, 7, var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-danger {\n    color: #fff !important;\n    background-color: RGBA(220, 53, 69, var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-light {\n    color: #000 !important;\n    background-color: RGBA(248, 249, 250, var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-dark {\n    color: #fff !important;\n    background-color: RGBA(33, 37, 41, var(--bs-bg-opacity, 1)) !important;\n}\n\n.link-primary {\n    color: #0d6efd !important;\n}\n\n.link-primary:hover, .link-primary:focus {\n    color: #0a58ca !important;\n}\n\n.link-secondary {\n    color: #6c757d !important;\n}\n\n.link-secondary:hover, .link-secondary:focus {\n    color: #565e64 !important;\n}\n\n.link-success {\n    color: #198754 !important;\n}\n\n.link-success:hover, .link-success:focus {\n    color: #146c43 !important;\n}\n\n.link-info {\n    color: #0dcaf0 !important;\n}\n\n.link-info:hover, .link-info:focus {\n    color: #3dd5f3 !important;\n}\n\n.link-warning {\n    color: #ffc107 !important;\n}\n\n.link-warning:hover, .link-warning:focus {\n    color: #ffcd39 !important;\n}\n\n.link-danger {\n    color: #dc3545 !important;\n}\n\n.link-danger:hover, .link-danger:focus {\n    color: #b02a37 !important;\n}\n\n.link-light {\n    color: #f8f9fa !important;\n}\n\n.link-light:hover, .link-light:focus {\n    color: #f9fafb !important;\n}\n\n.link-dark {\n    color: #212529 !important;\n}\n\n.link-dark:hover, .link-dark:focus {\n    color: #1a1e21 !important;\n}\n\n.ratio {\n    position: relative;\n    width: 100%;\n}\n\n.ratio::before {\n    display: block;\n    padding-top: var(--bs-aspect-ratio);\n    content: \"\";\n}\n\n.ratio > * {\n    position: absolute;\n    top: 0;\n    left: 0;\n    width: 100%;\n    height: 100%;\n}\n\n.ratio-1x1 {\n    --bs-aspect-ratio: 100%;\n}\n\n.ratio-4x3 {\n    --bs-aspect-ratio: 75%;\n}\n\n.ratio-16x9 {\n    --bs-aspect-ratio: 56.25%;\n}\n\n.ratio-21x9 {\n    --bs-aspect-ratio: 42.8571428571%;\n}\n\n.fixed-top {\n    position: fixed;\n    top: 0;\n    right: 0;\n    left: 0;\n    z-index: 1030;\n}\n\n.fixed-bottom {\n    position: fixed;\n    right: 0;\n    bottom: 0;\n    left: 0;\n    z-index: 1030;\n}\n\n.sticky-top {\n    position: -webkit-sticky;\n    position: sticky;\n    top: 0;\n    z-index: 1020;\n}\n\n.sticky-bottom {\n    position: -webkit-sticky;\n    position: sticky;\n    bottom: 0;\n    z-index: 1020;\n}\n\n@media (min-width: 576px) {\n    .sticky-sm-top {\n        position: -webkit-sticky;\n        position: sticky;\n        top: 0;\n        z-index: 1020;\n    }\n\n    .sticky-sm-bottom {\n        position: -webkit-sticky;\n        position: sticky;\n        bottom: 0;\n        z-index: 1020;\n    }\n}\n\n@media (min-width: 768px) {\n    .sticky-md-top {\n        position: -webkit-sticky;\n        position: sticky;\n        top: 0;\n        z-index: 1020;\n    }\n\n    .sticky-md-bottom {\n        position: -webkit-sticky;\n        position: sticky;\n        bottom: 0;\n        z-index: 1020;\n    }\n}\n\n@media (min-width: 992px) {\n    .sticky-lg-top {\n        position: -webkit-sticky;\n        position: sticky;\n        top: 0;\n        z-index: 1020;\n    }\n\n    .sticky-lg-bottom {\n        position: -webkit-sticky;\n        position: sticky;\n        bottom: 0;\n        z-index: 1020;\n    }\n}\n\n@media (min-width: 1200px) {\n    .sticky-xl-top {\n        position: -webkit-sticky;\n        position: sticky;\n        top: 0;\n        z-index: 1020;\n    }\n\n    .sticky-xl-bottom {\n        position: -webkit-sticky;\n        position: sticky;\n        bottom: 0;\n        z-index: 1020;\n    }\n}\n\n@media (min-width: 1400px) {\n    .sticky-xxl-top {\n        position: -webkit-sticky;\n        position: sticky;\n        top: 0;\n        z-index: 1020;\n    }\n\n    .sticky-xxl-bottom {\n        position: -webkit-sticky;\n        position: sticky;\n        bottom: 0;\n        z-index: 1020;\n    }\n}\n\n.hstack {\n    display: flex;\n    flex-direction: row;\n    align-items: center;\n    align-self: stretch;\n}\n\n.vstack {\n    display: flex;\n    flex: 1 1 auto;\n    flex-direction: column;\n    align-self: stretch;\n}\n\n.visually-hidden,\n.visually-hidden-focusable:not(:focus):not(:focus-within) {\n    position: absolute !important;\n    width: 1px !important;\n    height: 1px !important;\n    padding: 0 !important;\n    margin: -1px !important;\n    overflow: hidden !important;\n    clip: rect(0, 0, 0, 0) !important;\n    white-space: nowrap !important;\n    border: 0 !important;\n}\n\n.stretched-link::after {\n    position: absolute;\n    top: 0;\n    right: 0;\n    bottom: 0;\n    left: 0;\n    z-index: 1;\n    content: \"\";\n}\n\n.text-truncate {\n    overflow: hidden;\n    text-overflow: ellipsis;\n    white-space: nowrap;\n}\n\n.vr {\n    display: inline-block;\n    align-self: stretch;\n    width: 1px;\n    min-height: 1em;\n    background-color: currentcolor;\n    opacity: 0.25;\n}\n\n.align-baseline {\n    vertical-align: baseline !important;\n}\n\n.align-top {\n    vertical-align: top !important;\n}\n\n.align-middle {\n    vertical-align: middle !important;\n}\n\n.align-bottom {\n    vertical-align: bottom !important;\n}\n\n.align-text-bottom {\n    vertical-align: text-bottom !important;\n}\n\n.align-text-top {\n    vertical-align: text-top !important;\n}\n\n.float-start {\n    float: left !important;\n}\n\n.float-end {\n    float: right !important;\n}\n\n.float-none {\n    float: none !important;\n}\n\n.opacity-0 {\n    opacity: 0 !important;\n}\n\n.opacity-25 {\n    opacity: 0.25 !important;\n}\n\n.opacity-50 {\n    opacity: 0.5 !important;\n}\n\n.opacity-75 {\n    opacity: 0.75 !important;\n}\n\n.opacity-100 {\n    opacity: 1 !important;\n}\n\n.overflow-auto {\n    overflow: auto !important;\n}\n\n.overflow-hidden {\n    overflow: hidden !important;\n}\n\n.overflow-visible {\n    overflow: visible !important;\n}\n\n.overflow-scroll {\n    overflow: scroll !important;\n}\n\n.d-inline {\n    display: inline !important;\n}\n\n.d-inline-block {\n    display: inline-block !important;\n}\n\n.d-block {\n    display: block !important;\n}\n\n.d-grid {\n    display: grid !important;\n}\n\n.d-table {\n    display: table !important;\n}\n\n.d-table-row {\n    display: table-row !important;\n}\n\n.d-table-cell {\n    display: table-cell !important;\n}\n\n.d-flex {\n    display: flex !important;\n}\n\n.d-inline-flex {\n    display: inline-flex !important;\n}\n\n.d-none {\n    display: none !important;\n}\n\n.shadow {\n    box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15) !important;\n}\n\n.shadow-sm {\n    box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075) !important;\n}\n\n.shadow-lg {\n    box-shadow: 0 1rem 3rem rgba(0, 0, 0, 0.175) !important;\n}\n\n.shadow-none {\n    box-shadow: none !important;\n}\n\n.position-static {\n    position: static !important;\n}\n\n.position-relative {\n    position: relative !important;\n}\n\n.position-absolute {\n    position: absolute !important;\n}\n\n.position-fixed {\n    position: fixed !important;\n}\n\n.position-sticky {\n    position: -webkit-sticky !important;\n    position: sticky !important;\n}\n\n.top-0 {\n    top: 0 !important;\n}\n\n.top-50 {\n    top: 50% !important;\n}\n\n.top-100 {\n    top: 100% !important;\n}\n\n.bottom-0 {\n    bottom: 0 !important;\n}\n\n.bottom-50 {\n    bottom: 50% !important;\n}\n\n.bottom-100 {\n    bottom: 100% !important;\n}\n\n.start-0 {\n    left: 0 !important;\n}\n\n.start-50 {\n    left: 50% !important;\n}\n\n.start-100 {\n    left: 100% !important;\n}\n\n.end-0 {\n    right: 0 !important;\n}\n\n.end-50 {\n    right: 50% !important;\n}\n\n.end-100 {\n    right: 100% !important;\n}\n\n.translate-middle {\n    transform: translate(-50%, -50%) !important;\n}\n\n.translate-middle-x {\n    transform: translateX(-50%) !important;\n}\n\n.translate-middle-y {\n    transform: translateY(-50%) !important;\n}\n\n.border {\n    border: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important;\n}\n\n.border-0 {\n    border: 0 !important;\n}\n\n.border-top {\n    border-top: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important;\n}\n\n.border-top-0 {\n    border-top: 0 !important;\n}\n\n.border-end {\n    border-right: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important;\n}\n\n.border-end-0 {\n    border-right: 0 !important;\n}\n\n.border-bottom {\n    border-bottom: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important;\n}\n\n.border-bottom-0 {\n    border-bottom: 0 !important;\n}\n\n.border-start {\n    border-left: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important;\n}\n\n.border-start-0 {\n    border-left: 0 !important;\n}\n\n.border-primary {\n    --bs-border-opacity: 1;\n    border-color: rgba(var(--bs-primary-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-secondary {\n    --bs-border-opacity: 1;\n    border-color: rgba(var(--bs-secondary-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-success {\n    --bs-border-opacity: 1;\n    border-color: rgba(var(--bs-success-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-info {\n    --bs-border-opacity: 1;\n    border-color: rgba(var(--bs-info-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-warning {\n    --bs-border-opacity: 1;\n    border-color: rgba(var(--bs-warning-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-danger {\n    --bs-border-opacity: 1;\n    border-color: rgba(var(--bs-danger-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-light {\n    --bs-border-opacity: 1;\n    border-color: rgba(var(--bs-light-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-dark {\n    --bs-border-opacity: 1;\n    border-color: rgba(var(--bs-dark-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-white {\n    --bs-border-opacity: 1;\n    border-color: rgba(var(--bs-white-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-1 {\n    --bs-border-width: 1px;\n}\n\n.border-2 {\n    --bs-border-width: 2px;\n}\n\n.border-3 {\n    --bs-border-width: 3px;\n}\n\n.border-4 {\n    --bs-border-width: 4px;\n}\n\n.border-5 {\n    --bs-border-width: 5px;\n}\n\n.border-opacity-10 {\n    --bs-border-opacity: 0.1;\n}\n\n.border-opacity-25 {\n    --bs-border-opacity: 0.25;\n}\n\n.border-opacity-50 {\n    --bs-border-opacity: 0.5;\n}\n\n.border-opacity-75 {\n    --bs-border-opacity: 0.75;\n}\n\n.border-opacity-100 {\n    --bs-border-opacity: 1;\n}\n\n.w-25 {\n    width: 25% !important;\n}\n\n.w-50 {\n    width: 50% !important;\n}\n\n.w-75 {\n    width: 75% !important;\n}\n\n.w-100 {\n    width: 100% !important;\n}\n\n.w-auto {\n    width: auto !important;\n}\n\n.mw-100 {\n    max-width: 100% !important;\n}\n\n.vw-100 {\n    width: 100vw !important;\n}\n\n.min-vw-100 {\n    min-width: 100vw !important;\n}\n\n.h-25 {\n    height: 25% !important;\n}\n\n.h-50 {\n    height: 50% !important;\n}\n\n.h-75 {\n    height: 75% !important;\n}\n\n.h-100 {\n    height: 100% !important;\n}\n\n.h-auto {\n    height: auto !important;\n}\n\n.mh-100 {\n    max-height: 100% !important;\n}\n\n.vh-100 {\n    height: 100vh !important;\n}\n\n.min-vh-100 {\n    min-height: 100vh !important;\n}\n\n.flex-fill {\n    flex: 1 1 auto !important;\n}\n\n.flex-row {\n    flex-direction: row !important;\n}\n\n.flex-column {\n    flex-direction: column !important;\n}\n\n.flex-row-reverse {\n    flex-direction: row-reverse !important;\n}\n\n.flex-column-reverse {\n    flex-direction: column-reverse !important;\n}\n\n.flex-grow-0 {\n    flex-grow: 0 !important;\n}\n\n.flex-grow-1 {\n    flex-grow: 1 !important;\n}\n\n.flex-shrink-0 {\n    flex-shrink: 0 !important;\n}\n\n.flex-shrink-1 {\n    flex-shrink: 1 !important;\n}\n\n.flex-wrap {\n    flex-wrap: wrap !important;\n}\n\n.flex-nowrap {\n    flex-wrap: nowrap !important;\n}\n\n.flex-wrap-reverse {\n    flex-wrap: wrap-reverse !important;\n}\n\n.justify-content-start {\n    justify-content: flex-start !important;\n}\n\n.justify-content-end {\n    justify-content: flex-end !important;\n}\n\n.justify-content-center {\n    justify-content: center !important;\n}\n\n.justify-content-between {\n    justify-content: space-between !important;\n}\n\n.justify-content-around {\n    justify-content: space-around !important;\n}\n\n.justify-content-evenly {\n    justify-content: space-evenly !important;\n}\n\n.align-items-start {\n    align-items: flex-start !important;\n}\n\n.align-items-end {\n    align-items: flex-end !important;\n}\n\n.align-items-center {\n    align-items: center !important;\n}\n\n.align-items-baseline {\n    align-items: baseline !important;\n}\n\n.align-items-stretch {\n    align-items: stretch !important;\n}\n\n.align-content-start {\n    align-content: flex-start !important;\n}\n\n.align-content-end {\n    align-content: flex-end !important;\n}\n\n.align-content-center {\n    align-content: center !important;\n}\n\n.align-content-between {\n    align-content: space-between !important;\n}\n\n.align-content-around {\n    align-content: space-around !important;\n}\n\n.align-content-stretch {\n    align-content: stretch !important;\n}\n\n.align-self-auto {\n    align-self: auto !important;\n}\n\n.align-self-start {\n    align-self: flex-start !important;\n}\n\n.align-self-end {\n    align-self: flex-end !important;\n}\n\n.align-self-center {\n    align-self: center !important;\n}\n\n.align-self-baseline {\n    align-self: baseline !important;\n}\n\n.align-self-stretch {\n    align-self: stretch !important;\n}\n\n.order-first {\n    order: -1 !important;\n}\n\n.order-0 {\n    order: 0 !important;\n}\n\n.order-1 {\n    order: 1 !important;\n}\n\n.order-2 {\n    order: 2 !important;\n}\n\n.order-3 {\n    order: 3 !important;\n}\n\n.order-4 {\n    order: 4 !important;\n}\n\n.order-5 {\n    order: 5 !important;\n}\n\n.order-last {\n    order: 6 !important;\n}\n\n.m-0 {\n    margin: 0 !important;\n}\n\n.m-1 {\n    margin: 0.25rem !important;\n}\n\n.m-2 {\n    margin: 0.5rem !important;\n}\n\n.m-3 {\n    margin: 1rem !important;\n}\n\n.m-4 {\n    margin: 1.5rem !important;\n}\n\n.m-5 {\n    margin: 3rem !important;\n}\n\n.m-auto {\n    margin: auto !important;\n}\n\n.mx-0 {\n    margin-right: 0 !important;\n    margin-left: 0 !important;\n}\n\n.mx-1 {\n    margin-right: 0.25rem !important;\n    margin-left: 0.25rem !important;\n}\n\n.mx-2 {\n    margin-right: 0.5rem !important;\n    margin-left: 0.5rem !important;\n}\n\n.mx-3 {\n    margin-right: 1rem !important;\n    margin-left: 1rem !important;\n}\n\n.mx-4 {\n    margin-right: 1.5rem !important;\n    margin-left: 1.5rem !important;\n}\n\n.mx-5 {\n    margin-right: 3rem !important;\n    margin-left: 3rem !important;\n}\n\n.mx-auto {\n    margin-right: auto !important;\n    margin-left: auto !important;\n}\n\n.my-0 {\n    margin-top: 0 !important;\n    margin-bottom: 0 !important;\n}\n\n.my-1 {\n    margin-top: 0.25rem !important;\n    margin-bottom: 0.25rem !important;\n}\n\n.my-2 {\n    margin-top: 0.5rem !important;\n    margin-bottom: 0.5rem !important;\n}\n\n.my-3 {\n    margin-top: 1rem !important;\n    margin-bottom: 1rem !important;\n}\n\n.my-4 {\n    margin-top: 1.5rem !important;\n    margin-bottom: 1.5rem !important;\n}\n\n.my-5 {\n    margin-top: 3rem !important;\n    margin-bottom: 3rem !important;\n}\n\n.my-auto {\n    margin-top: auto !important;\n    margin-bottom: auto !important;\n}\n\n.mt-0 {\n    margin-top: 0 !important;\n}\n\n.mt-1 {\n    margin-top: 0.25rem !important;\n}\n\n.mt-2 {\n    margin-top: 0.5rem !important;\n}\n\n.mt-3 {\n    margin-top: 1rem !important;\n}\n\n.mt-4 {\n    margin-top: 1.5rem !important;\n}\n\n.mt-5 {\n    margin-top: 3rem !important;\n}\n\n.mt-auto {\n    margin-top: auto !important;\n}\n\n.me-0 {\n    margin-right: 0 !important;\n}\n\n.me-1 {\n    margin-right: 0.25rem !important;\n}\n\n.me-2 {\n    margin-right: 0.5rem !important;\n}\n\n.me-3 {\n    margin-right: 1rem !important;\n}\n\n.me-4 {\n    margin-right: 1.5rem !important;\n}\n\n.me-5 {\n    margin-right: 3rem !important;\n}\n\n.me-auto {\n    margin-right: auto !important;\n}\n\n.mb-0 {\n    margin-bottom: 0 !important;\n}\n\n.mb-1 {\n    margin-bottom: 0.25rem !important;\n}\n\n.mb-2 {\n    margin-bottom: 0.5rem !important;\n}\n\n.mb-3 {\n    margin-bottom: 1rem !important;\n}\n\n.mb-4 {\n    margin-bottom: 1.5rem !important;\n}\n\n.mb-5 {\n    margin-bottom: 3rem !important;\n}\n\n.mb-auto {\n    margin-bottom: auto !important;\n}\n\n.ms-0 {\n    margin-left: 0 !important;\n}\n\n.ms-1 {\n    margin-left: 0.25rem !important;\n}\n\n.ms-2 {\n    margin-left: 0.5rem !important;\n}\n\n.ms-3 {\n    margin-left: 1rem !important;\n}\n\n.ms-4 {\n    margin-left: 1.5rem !important;\n}\n\n.ms-5 {\n    margin-left: 3rem !important;\n}\n\n.ms-auto {\n    margin-left: auto !important;\n}\n\n.p-0 {\n    padding: 0 !important;\n}\n\n.p-1 {\n    padding: 0.25rem !important;\n}\n\n.p-2 {\n    padding: 0.5rem !important;\n}\n\n.p-3 {\n    padding: 1rem !important;\n}\n\n.p-4 {\n    padding: 1.5rem !important;\n}\n\n.p-5 {\n    padding: 3rem !important;\n}\n\n.px-0 {\n    padding-right: 0 !important;\n    padding-left: 0 !important;\n}\n\n.px-1 {\n    padding-right: 0.25rem !important;\n    padding-left: 0.25rem !important;\n}\n\n.px-2 {\n    padding-right: 0.5rem !important;\n    padding-left: 0.5rem !important;\n}\n\n.px-3 {\n    padding-right: 1rem !important;\n    padding-left: 1rem !important;\n}\n\n.px-4 {\n    padding-right: 1.5rem !important;\n    padding-left: 1.5rem !important;\n}\n\n.px-5 {\n    padding-right: 3rem !important;\n    padding-left: 3rem !important;\n}\n\n.py-0 {\n    padding-top: 0 !important;\n    padding-bottom: 0 !important;\n}\n\n.py-1 {\n    padding-top: 0.25rem !important;\n    padding-bottom: 0.25rem !important;\n}\n\n.py-2 {\n    padding-top: 0.5rem !important;\n    padding-bottom: 0.5rem !important;\n}\n\n.py-3 {\n    padding-top: 1rem !important;\n    padding-bottom: 1rem !important;\n}\n\n.py-4 {\n    padding-top: 1.5rem !important;\n    padding-bottom: 1.5rem !important;\n}\n\n.py-5 {\n    padding-top: 3rem !important;\n    padding-bottom: 3rem !important;\n}\n\n.pt-0 {\n    padding-top: 0 !important;\n}\n\n.pt-1 {\n    padding-top: 0.25rem !important;\n}\n\n.pt-2 {\n    padding-top: 0.5rem !important;\n}\n\n.pt-3 {\n    padding-top: 1rem !important;\n}\n\n.pt-4 {\n    padding-top: 1.5rem !important;\n}\n\n.pt-5 {\n    padding-top: 3rem !important;\n}\n\n.pe-0 {\n    padding-right: 0 !important;\n}\n\n.pe-1 {\n    padding-right: 0.25rem !important;\n}\n\n.pe-2 {\n    padding-right: 0.5rem !important;\n}\n\n.pe-3 {\n    padding-right: 1rem !important;\n}\n\n.pe-4 {\n    padding-right: 1.5rem !important;\n}\n\n.pe-5 {\n    padding-right: 3rem !important;\n}\n\n.pb-0 {\n    padding-bottom: 0 !important;\n}\n\n.pb-1 {\n    padding-bottom: 0.25rem !important;\n}\n\n.pb-2 {\n    padding-bottom: 0.5rem !important;\n}\n\n.pb-3 {\n    padding-bottom: 1rem !important;\n}\n\n.pb-4 {\n    padding-bottom: 1.5rem !important;\n}\n\n.pb-5 {\n    padding-bottom: 3rem !important;\n}\n\n.ps-0 {\n    padding-left: 0 !important;\n}\n\n.ps-1 {\n    padding-left: 0.25rem !important;\n}\n\n.ps-2 {\n    padding-left: 0.5rem !important;\n}\n\n.ps-3 {\n    padding-left: 1rem !important;\n}\n\n.ps-4 {\n    padding-left: 1.5rem !important;\n}\n\n.ps-5 {\n    padding-left: 3rem !important;\n}\n\n.gap-0 {\n    gap: 0 !important;\n}\n\n.gap-1 {\n    gap: 0.25rem !important;\n}\n\n.gap-2 {\n    gap: 0.5rem !important;\n}\n\n.gap-3 {\n    gap: 1rem !important;\n}\n\n.gap-4 {\n    gap: 1.5rem !important;\n}\n\n.gap-5 {\n    gap: 3rem !important;\n}\n\n.font-monospace {\n    font-family: var(--bs-font-monospace) !important;\n}\n\n.fs-1 {\n    font-size: calc(1.375rem + 1.5vw) !important;\n}\n\n.fs-2 {\n    font-size: calc(1.325rem + 0.9vw) !important;\n}\n\n.fs-3 {\n    font-size: calc(1.3rem + 0.6vw) !important;\n}\n\n.fs-4 {\n    font-size: calc(1.275rem + 0.3vw) !important;\n}\n\n.fs-5 {\n    font-size: 1.25rem !important;\n}\n\n.fs-6 {\n    font-size: 1rem !important;\n}\n\n.fst-italic {\n    font-style: italic !important;\n}\n\n.fst-normal {\n    font-style: normal !important;\n}\n\n.fw-light {\n    font-weight: 300 !important;\n}\n\n.fw-lighter {\n    font-weight: lighter !important;\n}\n\n.fw-normal {\n    font-weight: 400 !important;\n}\n\n.fw-bold {\n    font-weight: 700 !important;\n}\n\n.fw-semibold {\n    font-weight: 600 !important;\n}\n\n.fw-bolder {\n    font-weight: bolder !important;\n}\n\n.lh-1 {\n    line-height: 1 !important;\n}\n\n.lh-sm {\n    line-height: 1.25 !important;\n}\n\n.lh-base {\n    line-height: 1.5 !important;\n}\n\n.lh-lg {\n    line-height: 2 !important;\n}\n\n.text-start {\n    text-align: left !important;\n}\n\n.text-end {\n    text-align: right !important;\n}\n\n.text-center {\n    text-align: center !important;\n}\n\n.text-decoration-none {\n    text-decoration: none !important;\n}\n\n.text-decoration-underline {\n    text-decoration: underline !important;\n}\n\n.text-decoration-line-through {\n    text-decoration: line-through !important;\n}\n\n.text-lowercase {\n    text-transform: lowercase !important;\n}\n\n.text-uppercase {\n    text-transform: uppercase !important;\n}\n\n.text-capitalize {\n    text-transform: capitalize !important;\n}\n\n.text-wrap {\n    white-space: normal !important;\n}\n\n.text-nowrap {\n    white-space: nowrap !important;\n}\n\n/* rtl:begin:remove */\n.text-break {\n    word-wrap: break-word !important;\n    word-break: break-word !important;\n}\n\n/* rtl:end:remove */\n.text-primary {\n    --bs-text-opacity: 1;\n    color: rgba(var(--bs-primary-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-secondary {\n    --bs-text-opacity: 1;\n    color: rgba(var(--bs-secondary-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-success {\n    --bs-text-opacity: 1;\n    color: rgba(var(--bs-success-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-info {\n    --bs-text-opacity: 1;\n    color: rgba(var(--bs-info-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-warning {\n    --bs-text-opacity: 1;\n    color: rgba(var(--bs-warning-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-danger {\n    --bs-text-opacity: 1;\n    color: rgba(var(--bs-danger-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-light {\n    --bs-text-opacity: 1;\n    color: rgba(var(--bs-light-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-dark {\n    --bs-text-opacity: 1;\n    color: rgba(var(--bs-dark-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-black {\n    --bs-text-opacity: 1;\n    color: rgba(var(--bs-black-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-white {\n    --bs-text-opacity: 1;\n    color: rgba(var(--bs-white-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-body {\n    --bs-text-opacity: 1;\n    color: rgba(var(--bs-body-color-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-muted {\n    --bs-text-opacity: 1;\n    color: #6c757d !important;\n}\n\n.text-black-50 {\n    --bs-text-opacity: 1;\n    color: rgba(0, 0, 0, 0.5) !important;\n}\n\n.text-white-50 {\n    --bs-text-opacity: 1;\n    color: rgba(255, 255, 255, 0.5) !important;\n}\n\n.text-reset {\n    --bs-text-opacity: 1;\n    color: inherit !important;\n}\n\n.text-opacity-25 {\n    --bs-text-opacity: 0.25;\n}\n\n.text-opacity-50 {\n    --bs-text-opacity: 0.5;\n}\n\n.text-opacity-75 {\n    --bs-text-opacity: 0.75;\n}\n\n.text-opacity-100 {\n    --bs-text-opacity: 1;\n}\n\n.bg-primary {\n    --bs-bg-opacity: 1;\n    background-color: rgba(var(--bs-primary-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-secondary {\n    --bs-bg-opacity: 1;\n    background-color: rgba(var(--bs-secondary-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-success {\n    --bs-bg-opacity: 1;\n    background-color: rgba(var(--bs-success-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-info {\n    --bs-bg-opacity: 1;\n    background-color: rgba(var(--bs-info-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-warning {\n    --bs-bg-opacity: 1;\n    background-color: rgba(var(--bs-warning-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-danger {\n    --bs-bg-opacity: 1;\n    background-color: rgba(var(--bs-danger-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-light {\n    --bs-bg-opacity: 1;\n    background-color: rgba(var(--bs-light-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-dark {\n    --bs-bg-opacity: 1;\n    background-color: rgba(var(--bs-dark-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-black {\n    --bs-bg-opacity: 1;\n    background-color: rgba(var(--bs-black-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-white {\n    --bs-bg-opacity: 1;\n    background-color: rgba(var(--bs-white-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-body {\n    --bs-bg-opacity: 1;\n    background-color: rgba(var(--bs-body-bg-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-transparent {\n    --bs-bg-opacity: 1;\n    background-color: transparent !important;\n}\n\n.bg-opacity-10 {\n    --bs-bg-opacity: 0.1;\n}\n\n.bg-opacity-25 {\n    --bs-bg-opacity: 0.25;\n}\n\n.bg-opacity-50 {\n    --bs-bg-opacity: 0.5;\n}\n\n.bg-opacity-75 {\n    --bs-bg-opacity: 0.75;\n}\n\n.bg-opacity-100 {\n    --bs-bg-opacity: 1;\n}\n\n.bg-gradient {\n    background-image: var(--bs-gradient) !important;\n}\n\n.user-select-all {\n    -webkit-user-select: all !important;\n    -moz-user-select: all !important;\n    user-select: all !important;\n}\n\n.user-select-auto {\n    -webkit-user-select: auto !important;\n    -moz-user-select: auto !important;\n    user-select: auto !important;\n}\n\n.user-select-none {\n    -webkit-user-select: none !important;\n    -moz-user-select: none !important;\n    user-select: none !important;\n}\n\n.pe-none {\n    pointer-events: none !important;\n}\n\n.pe-auto {\n    pointer-events: auto !important;\n}\n\n.rounded {\n    border-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-0 {\n    border-radius: 0 !important;\n}\n\n.rounded-1 {\n    border-radius: var(--bs-border-radius-sm) !important;\n}\n\n.rounded-2 {\n    border-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-3 {\n    border-radius: var(--bs-border-radius-lg) !important;\n}\n\n.rounded-4 {\n    border-radius: var(--bs-border-radius-xl) !important;\n}\n\n.rounded-5 {\n    border-radius: var(--bs-border-radius-2xl) !important;\n}\n\n.rounded-circle {\n    border-radius: 50% !important;\n}\n\n.rounded-pill {\n    border-radius: var(--bs-border-radius-pill) !important;\n}\n\n.rounded-top {\n    border-top-left-radius: var(--bs-border-radius) !important;\n    border-top-right-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-end {\n    border-top-right-radius: var(--bs-border-radius) !important;\n    border-bottom-right-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-bottom {\n    border-bottom-right-radius: var(--bs-border-radius) !important;\n    border-bottom-left-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-start {\n    border-bottom-left-radius: var(--bs-border-radius) !important;\n    border-top-left-radius: var(--bs-border-radius) !important;\n}\n\n.visible {\n    visibility: visible !important;\n}\n\n.invisible {\n    visibility: hidden !important;\n}\n\n@media (min-width: 576px) {\n    .float-sm-start {\n        float: left !important;\n    }\n\n    .float-sm-end {\n        float: right !important;\n    }\n\n    .float-sm-none {\n        float: none !important;\n    }\n\n    .d-sm-inline {\n        display: inline !important;\n    }\n\n    .d-sm-inline-block {\n        display: inline-block !important;\n    }\n\n    .d-sm-block {\n        display: block !important;\n    }\n\n    .d-sm-grid {\n        display: grid !important;\n    }\n\n    .d-sm-table {\n        display: table !important;\n    }\n\n    .d-sm-table-row {\n        display: table-row !important;\n    }\n\n    .d-sm-table-cell {\n        display: table-cell !important;\n    }\n\n    .d-sm-flex {\n        display: flex !important;\n    }\n\n    .d-sm-inline-flex {\n        display: inline-flex !important;\n    }\n\n    .d-sm-none {\n        display: none !important;\n    }\n\n    .flex-sm-fill {\n        flex: 1 1 auto !important;\n    }\n\n    .flex-sm-row {\n        flex-direction: row !important;\n    }\n\n    .flex-sm-column {\n        flex-direction: column !important;\n    }\n\n    .flex-sm-row-reverse {\n        flex-direction: row-reverse !important;\n    }\n\n    .flex-sm-column-reverse {\n        flex-direction: column-reverse !important;\n    }\n\n    .flex-sm-grow-0 {\n        flex-grow: 0 !important;\n    }\n\n    .flex-sm-grow-1 {\n        flex-grow: 1 !important;\n    }\n\n    .flex-sm-shrink-0 {\n        flex-shrink: 0 !important;\n    }\n\n    .flex-sm-shrink-1 {\n        flex-shrink: 1 !important;\n    }\n\n    .flex-sm-wrap {\n        flex-wrap: wrap !important;\n    }\n\n    .flex-sm-nowrap {\n        flex-wrap: nowrap !important;\n    }\n\n    .flex-sm-wrap-reverse {\n        flex-wrap: wrap-reverse !important;\n    }\n\n    .justify-content-sm-start {\n        justify-content: flex-start !important;\n    }\n\n    .justify-content-sm-end {\n        justify-content: flex-end !important;\n    }\n\n    .justify-content-sm-center {\n        justify-content: center !important;\n    }\n\n    .justify-content-sm-between {\n        justify-content: space-between !important;\n    }\n\n    .justify-content-sm-around {\n        justify-content: space-around !important;\n    }\n\n    .justify-content-sm-evenly {\n        justify-content: space-evenly !important;\n    }\n\n    .align-items-sm-start {\n        align-items: flex-start !important;\n    }\n\n    .align-items-sm-end {\n        align-items: flex-end !important;\n    }\n\n    .align-items-sm-center {\n        align-items: center !important;\n    }\n\n    .align-items-sm-baseline {\n        align-items: baseline !important;\n    }\n\n    .align-items-sm-stretch {\n        align-items: stretch !important;\n    }\n\n    .align-content-sm-start {\n        align-content: flex-start !important;\n    }\n\n    .align-content-sm-end {\n        align-content: flex-end !important;\n    }\n\n    .align-content-sm-center {\n        align-content: center !important;\n    }\n\n    .align-content-sm-between {\n        align-content: space-between !important;\n    }\n\n    .align-content-sm-around {\n        align-content: space-around !important;\n    }\n\n    .align-content-sm-stretch {\n        align-content: stretch !important;\n    }\n\n    .align-self-sm-auto {\n        align-self: auto !important;\n    }\n\n    .align-self-sm-start {\n        align-self: flex-start !important;\n    }\n\n    .align-self-sm-end {\n        align-self: flex-end !important;\n    }\n\n    .align-self-sm-center {\n        align-self: center !important;\n    }\n\n    .align-self-sm-baseline {\n        align-self: baseline !important;\n    }\n\n    .align-self-sm-stretch {\n        align-self: stretch !important;\n    }\n\n    .order-sm-first {\n        order: -1 !important;\n    }\n\n    .order-sm-0 {\n        order: 0 !important;\n    }\n\n    .order-sm-1 {\n        order: 1 !important;\n    }\n\n    .order-sm-2 {\n        order: 2 !important;\n    }\n\n    .order-sm-3 {\n        order: 3 !important;\n    }\n\n    .order-sm-4 {\n        order: 4 !important;\n    }\n\n    .order-sm-5 {\n        order: 5 !important;\n    }\n\n    .order-sm-last {\n        order: 6 !important;\n    }\n\n    .m-sm-0 {\n        margin: 0 !important;\n    }\n\n    .m-sm-1 {\n        margin: 0.25rem !important;\n    }\n\n    .m-sm-2 {\n        margin: 0.5rem !important;\n    }\n\n    .m-sm-3 {\n        margin: 1rem !important;\n    }\n\n    .m-sm-4 {\n        margin: 1.5rem !important;\n    }\n\n    .m-sm-5 {\n        margin: 3rem !important;\n    }\n\n    .m-sm-auto {\n        margin: auto !important;\n    }\n\n    .mx-sm-0 {\n        margin-right: 0 !important;\n        margin-left: 0 !important;\n    }\n\n    .mx-sm-1 {\n        margin-right: 0.25rem !important;\n        margin-left: 0.25rem !important;\n    }\n\n    .mx-sm-2 {\n        margin-right: 0.5rem !important;\n        margin-left: 0.5rem !important;\n    }\n\n    .mx-sm-3 {\n        margin-right: 1rem !important;\n        margin-left: 1rem !important;\n    }\n\n    .mx-sm-4 {\n        margin-right: 1.5rem !important;\n        margin-left: 1.5rem !important;\n    }\n\n    .mx-sm-5 {\n        margin-right: 3rem !important;\n        margin-left: 3rem !important;\n    }\n\n    .mx-sm-auto {\n        margin-right: auto !important;\n        margin-left: auto !important;\n    }\n\n    .my-sm-0 {\n        margin-top: 0 !important;\n        margin-bottom: 0 !important;\n    }\n\n    .my-sm-1 {\n        margin-top: 0.25rem !important;\n        margin-bottom: 0.25rem !important;\n    }\n\n    .my-sm-2 {\n        margin-top: 0.5rem !important;\n        margin-bottom: 0.5rem !important;\n    }\n\n    .my-sm-3 {\n        margin-top: 1rem !important;\n        margin-bottom: 1rem !important;\n    }\n\n    .my-sm-4 {\n        margin-top: 1.5rem !important;\n        margin-bottom: 1.5rem !important;\n    }\n\n    .my-sm-5 {\n        margin-top: 3rem !important;\n        margin-bottom: 3rem !important;\n    }\n\n    .my-sm-auto {\n        margin-top: auto !important;\n        margin-bottom: auto !important;\n    }\n\n    .mt-sm-0 {\n        margin-top: 0 !important;\n    }\n\n    .mt-sm-1 {\n        margin-top: 0.25rem !important;\n    }\n\n    .mt-sm-2 {\n        margin-top: 0.5rem !important;\n    }\n\n    .mt-sm-3 {\n        margin-top: 1rem !important;\n    }\n\n    .mt-sm-4 {\n        margin-top: 1.5rem !important;\n    }\n\n    .mt-sm-5 {\n        margin-top: 3rem !important;\n    }\n\n    .mt-sm-auto {\n        margin-top: auto !important;\n    }\n\n    .me-sm-0 {\n        margin-right: 0 !important;\n    }\n\n    .me-sm-1 {\n        margin-right: 0.25rem !important;\n    }\n\n    .me-sm-2 {\n        margin-right: 0.5rem !important;\n    }\n\n    .me-sm-3 {\n        margin-right: 1rem !important;\n    }\n\n    .me-sm-4 {\n        margin-right: 1.5rem !important;\n    }\n\n    .me-sm-5 {\n        margin-right: 3rem !important;\n    }\n\n    .me-sm-auto {\n        margin-right: auto !important;\n    }\n\n    .mb-sm-0 {\n        margin-bottom: 0 !important;\n    }\n\n    .mb-sm-1 {\n        margin-bottom: 0.25rem !important;\n    }\n\n    .mb-sm-2 {\n        margin-bottom: 0.5rem !important;\n    }\n\n    .mb-sm-3 {\n        margin-bottom: 1rem !important;\n    }\n\n    .mb-sm-4 {\n        margin-bottom: 1.5rem !important;\n    }\n\n    .mb-sm-5 {\n        margin-bottom: 3rem !important;\n    }\n\n    .mb-sm-auto {\n        margin-bottom: auto !important;\n    }\n\n    .ms-sm-0 {\n        margin-left: 0 !important;\n    }\n\n    .ms-sm-1 {\n        margin-left: 0.25rem !important;\n    }\n\n    .ms-sm-2 {\n        margin-left: 0.5rem !important;\n    }\n\n    .ms-sm-3 {\n        margin-left: 1rem !important;\n    }\n\n    .ms-sm-4 {\n        margin-left: 1.5rem !important;\n    }\n\n    .ms-sm-5 {\n        margin-left: 3rem !important;\n    }\n\n    .ms-sm-auto {\n        margin-left: auto !important;\n    }\n\n    .p-sm-0 {\n        padding: 0 !important;\n    }\n\n    .p-sm-1 {\n        padding: 0.25rem !important;\n    }\n\n    .p-sm-2 {\n        padding: 0.5rem !important;\n    }\n\n    .p-sm-3 {\n        padding: 1rem !important;\n    }\n\n    .p-sm-4 {\n        padding: 1.5rem !important;\n    }\n\n    .p-sm-5 {\n        padding: 3rem !important;\n    }\n\n    .px-sm-0 {\n        padding-right: 0 !important;\n        padding-left: 0 !important;\n    }\n\n    .px-sm-1 {\n        padding-right: 0.25rem !important;\n        padding-left: 0.25rem !important;\n    }\n\n    .px-sm-2 {\n        padding-right: 0.5rem !important;\n        padding-left: 0.5rem !important;\n    }\n\n    .px-sm-3 {\n        padding-right: 1rem !important;\n        padding-left: 1rem !important;\n    }\n\n    .px-sm-4 {\n        padding-right: 1.5rem !important;\n        padding-left: 1.5rem !important;\n    }\n\n    .px-sm-5 {\n        padding-right: 3rem !important;\n        padding-left: 3rem !important;\n    }\n\n    .py-sm-0 {\n        padding-top: 0 !important;\n        padding-bottom: 0 !important;\n    }\n\n    .py-sm-1 {\n        padding-top: 0.25rem !important;\n        padding-bottom: 0.25rem !important;\n    }\n\n    .py-sm-2 {\n        padding-top: 0.5rem !important;\n        padding-bottom: 0.5rem !important;\n    }\n\n    .py-sm-3 {\n        padding-top: 1rem !important;\n        padding-bottom: 1rem !important;\n    }\n\n    .py-sm-4 {\n        padding-top: 1.5rem !important;\n        padding-bottom: 1.5rem !important;\n    }\n\n    .py-sm-5 {\n        padding-top: 3rem !important;\n        padding-bottom: 3rem !important;\n    }\n\n    .pt-sm-0 {\n        padding-top: 0 !important;\n    }\n\n    .pt-sm-1 {\n        padding-top: 0.25rem !important;\n    }\n\n    .pt-sm-2 {\n        padding-top: 0.5rem !important;\n    }\n\n    .pt-sm-3 {\n        padding-top: 1rem !important;\n    }\n\n    .pt-sm-4 {\n        padding-top: 1.5rem !important;\n    }\n\n    .pt-sm-5 {\n        padding-top: 3rem !important;\n    }\n\n    .pe-sm-0 {\n        padding-right: 0 !important;\n    }\n\n    .pe-sm-1 {\n        padding-right: 0.25rem !important;\n    }\n\n    .pe-sm-2 {\n        padding-right: 0.5rem !important;\n    }\n\n    .pe-sm-3 {\n        padding-right: 1rem !important;\n    }\n\n    .pe-sm-4 {\n        padding-right: 1.5rem !important;\n    }\n\n    .pe-sm-5 {\n        padding-right: 3rem !important;\n    }\n\n    .pb-sm-0 {\n        padding-bottom: 0 !important;\n    }\n\n    .pb-sm-1 {\n        padding-bottom: 0.25rem !important;\n    }\n\n    .pb-sm-2 {\n        padding-bottom: 0.5rem !important;\n    }\n\n    .pb-sm-3 {\n        padding-bottom: 1rem !important;\n    }\n\n    .pb-sm-4 {\n        padding-bottom: 1.5rem !important;\n    }\n\n    .pb-sm-5 {\n        padding-bottom: 3rem !important;\n    }\n\n    .ps-sm-0 {\n        padding-left: 0 !important;\n    }\n\n    .ps-sm-1 {\n        padding-left: 0.25rem !important;\n    }\n\n    .ps-sm-2 {\n        padding-left: 0.5rem !important;\n    }\n\n    .ps-sm-3 {\n        padding-left: 1rem !important;\n    }\n\n    .ps-sm-4 {\n        padding-left: 1.5rem !important;\n    }\n\n    .ps-sm-5 {\n        padding-left: 3rem !important;\n    }\n\n    .gap-sm-0 {\n        gap: 0 !important;\n    }\n\n    .gap-sm-1 {\n        gap: 0.25rem !important;\n    }\n\n    .gap-sm-2 {\n        gap: 0.5rem !important;\n    }\n\n    .gap-sm-3 {\n        gap: 1rem !important;\n    }\n\n    .gap-sm-4 {\n        gap: 1.5rem !important;\n    }\n\n    .gap-sm-5 {\n        gap: 3rem !important;\n    }\n\n    .text-sm-start {\n        text-align: left !important;\n    }\n\n    .text-sm-end {\n        text-align: right !important;\n    }\n\n    .text-sm-center {\n        text-align: center !important;\n    }\n}\n\n@media (min-width: 768px) {\n    .float-md-start {\n        float: left !important;\n    }\n\n    .float-md-end {\n        float: right !important;\n    }\n\n    .float-md-none {\n        float: none !important;\n    }\n\n    .d-md-inline {\n        display: inline !important;\n    }\n\n    .d-md-inline-block {\n        display: inline-block !important;\n    }\n\n    .d-md-block {\n        display: block !important;\n    }\n\n    .d-md-grid {\n        display: grid !important;\n    }\n\n    .d-md-table {\n        display: table !important;\n    }\n\n    .d-md-table-row {\n        display: table-row !important;\n    }\n\n    .d-md-table-cell {\n        display: table-cell !important;\n    }\n\n    .d-md-flex {\n        display: flex !important;\n    }\n\n    .d-md-inline-flex {\n        display: inline-flex !important;\n    }\n\n    .d-md-none {\n        display: none !important;\n    }\n\n    .flex-md-fill {\n        flex: 1 1 auto !important;\n    }\n\n    .flex-md-row {\n        flex-direction: row !important;\n    }\n\n    .flex-md-column {\n        flex-direction: column !important;\n    }\n\n    .flex-md-row-reverse {\n        flex-direction: row-reverse !important;\n    }\n\n    .flex-md-column-reverse {\n        flex-direction: column-reverse !important;\n    }\n\n    .flex-md-grow-0 {\n        flex-grow: 0 !important;\n    }\n\n    .flex-md-grow-1 {\n        flex-grow: 1 !important;\n    }\n\n    .flex-md-shrink-0 {\n        flex-shrink: 0 !important;\n    }\n\n    .flex-md-shrink-1 {\n        flex-shrink: 1 !important;\n    }\n\n    .flex-md-wrap {\n        flex-wrap: wrap !important;\n    }\n\n    .flex-md-nowrap {\n        flex-wrap: nowrap !important;\n    }\n\n    .flex-md-wrap-reverse {\n        flex-wrap: wrap-reverse !important;\n    }\n\n    .justify-content-md-start {\n        justify-content: flex-start !important;\n    }\n\n    .justify-content-md-end {\n        justify-content: flex-end !important;\n    }\n\n    .justify-content-md-center {\n        justify-content: center !important;\n    }\n\n    .justify-content-md-between {\n        justify-content: space-between !important;\n    }\n\n    .justify-content-md-around {\n        justify-content: space-around !important;\n    }\n\n    .justify-content-md-evenly {\n        justify-content: space-evenly !important;\n    }\n\n    .align-items-md-start {\n        align-items: flex-start !important;\n    }\n\n    .align-items-md-end {\n        align-items: flex-end !important;\n    }\n\n    .align-items-md-center {\n        align-items: center !important;\n    }\n\n    .align-items-md-baseline {\n        align-items: baseline !important;\n    }\n\n    .align-items-md-stretch {\n        align-items: stretch !important;\n    }\n\n    .align-content-md-start {\n        align-content: flex-start !important;\n    }\n\n    .align-content-md-end {\n        align-content: flex-end !important;\n    }\n\n    .align-content-md-center {\n        align-content: center !important;\n    }\n\n    .align-content-md-between {\n        align-content: space-between !important;\n    }\n\n    .align-content-md-around {\n        align-content: space-around !important;\n    }\n\n    .align-content-md-stretch {\n        align-content: stretch !important;\n    }\n\n    .align-self-md-auto {\n        align-self: auto !important;\n    }\n\n    .align-self-md-start {\n        align-self: flex-start !important;\n    }\n\n    .align-self-md-end {\n        align-self: flex-end !important;\n    }\n\n    .align-self-md-center {\n        align-self: center !important;\n    }\n\n    .align-self-md-baseline {\n        align-self: baseline !important;\n    }\n\n    .align-self-md-stretch {\n        align-self: stretch !important;\n    }\n\n    .order-md-first {\n        order: -1 !important;\n    }\n\n    .order-md-0 {\n        order: 0 !important;\n    }\n\n    .order-md-1 {\n        order: 1 !important;\n    }\n\n    .order-md-2 {\n        order: 2 !important;\n    }\n\n    .order-md-3 {\n        order: 3 !important;\n    }\n\n    .order-md-4 {\n        order: 4 !important;\n    }\n\n    .order-md-5 {\n        order: 5 !important;\n    }\n\n    .order-md-last {\n        order: 6 !important;\n    }\n\n    .m-md-0 {\n        margin: 0 !important;\n    }\n\n    .m-md-1 {\n        margin: 0.25rem !important;\n    }\n\n    .m-md-2 {\n        margin: 0.5rem !important;\n    }\n\n    .m-md-3 {\n        margin: 1rem !important;\n    }\n\n    .m-md-4 {\n        margin: 1.5rem !important;\n    }\n\n    .m-md-5 {\n        margin: 3rem !important;\n    }\n\n    .m-md-auto {\n        margin: auto !important;\n    }\n\n    .mx-md-0 {\n        margin-right: 0 !important;\n        margin-left: 0 !important;\n    }\n\n    .mx-md-1 {\n        margin-right: 0.25rem !important;\n        margin-left: 0.25rem !important;\n    }\n\n    .mx-md-2 {\n        margin-right: 0.5rem !important;\n        margin-left: 0.5rem !important;\n    }\n\n    .mx-md-3 {\n        margin-right: 1rem !important;\n        margin-left: 1rem !important;\n    }\n\n    .mx-md-4 {\n        margin-right: 1.5rem !important;\n        margin-left: 1.5rem !important;\n    }\n\n    .mx-md-5 {\n        margin-right: 3rem !important;\n        margin-left: 3rem !important;\n    }\n\n    .mx-md-auto {\n        margin-right: auto !important;\n        margin-left: auto !important;\n    }\n\n    .my-md-0 {\n        margin-top: 0 !important;\n        margin-bottom: 0 !important;\n    }\n\n    .my-md-1 {\n        margin-top: 0.25rem !important;\n        margin-bottom: 0.25rem !important;\n    }\n\n    .my-md-2 {\n        margin-top: 0.5rem !important;\n        margin-bottom: 0.5rem !important;\n    }\n\n    .my-md-3 {\n        margin-top: 1rem !important;\n        margin-bottom: 1rem !important;\n    }\n\n    .my-md-4 {\n        margin-top: 1.5rem !important;\n        margin-bottom: 1.5rem !important;\n    }\n\n    .my-md-5 {\n        margin-top: 3rem !important;\n        margin-bottom: 3rem !important;\n    }\n\n    .my-md-auto {\n        margin-top: auto !important;\n        margin-bottom: auto !important;\n    }\n\n    .mt-md-0 {\n        margin-top: 0 !important;\n    }\n\n    .mt-md-1 {\n        margin-top: 0.25rem !important;\n    }\n\n    .mt-md-2 {\n        margin-top: 0.5rem !important;\n    }\n\n    .mt-md-3 {\n        margin-top: 1rem !important;\n    }\n\n    .mt-md-4 {\n        margin-top: 1.5rem !important;\n    }\n\n    .mt-md-5 {\n        margin-top: 3rem !important;\n    }\n\n    .mt-md-auto {\n        margin-top: auto !important;\n    }\n\n    .me-md-0 {\n        margin-right: 0 !important;\n    }\n\n    .me-md-1 {\n        margin-right: 0.25rem !important;\n    }\n\n    .me-md-2 {\n        margin-right: 0.5rem !important;\n    }\n\n    .me-md-3 {\n        margin-right: 1rem !important;\n    }\n\n    .me-md-4 {\n        margin-right: 1.5rem !important;\n    }\n\n    .me-md-5 {\n        margin-right: 3rem !important;\n    }\n\n    .me-md-auto {\n        margin-right: auto !important;\n    }\n\n    .mb-md-0 {\n        margin-bottom: 0 !important;\n    }\n\n    .mb-md-1 {\n        margin-bottom: 0.25rem !important;\n    }\n\n    .mb-md-2 {\n        margin-bottom: 0.5rem !important;\n    }\n\n    .mb-md-3 {\n        margin-bottom: 1rem !important;\n    }\n\n    .mb-md-4 {\n        margin-bottom: 1.5rem !important;\n    }\n\n    .mb-md-5 {\n        margin-bottom: 3rem !important;\n    }\n\n    .mb-md-auto {\n        margin-bottom: auto !important;\n    }\n\n    .ms-md-0 {\n        margin-left: 0 !important;\n    }\n\n    .ms-md-1 {\n        margin-left: 0.25rem !important;\n    }\n\n    .ms-md-2 {\n        margin-left: 0.5rem !important;\n    }\n\n    .ms-md-3 {\n        margin-left: 1rem !important;\n    }\n\n    .ms-md-4 {\n        margin-left: 1.5rem !important;\n    }\n\n    .ms-md-5 {\n        margin-left: 3rem !important;\n    }\n\n    .ms-md-auto {\n        margin-left: auto !important;\n    }\n\n    .p-md-0 {\n        padding: 0 !important;\n    }\n\n    .p-md-1 {\n        padding: 0.25rem !important;\n    }\n\n    .p-md-2 {\n        padding: 0.5rem !important;\n    }\n\n    .p-md-3 {\n        padding: 1rem !important;\n    }\n\n    .p-md-4 {\n        padding: 1.5rem !important;\n    }\n\n    .p-md-5 {\n        padding: 3rem !important;\n    }\n\n    .px-md-0 {\n        padding-right: 0 !important;\n        padding-left: 0 !important;\n    }\n\n    .px-md-1 {\n        padding-right: 0.25rem !important;\n        padding-left: 0.25rem !important;\n    }\n\n    .px-md-2 {\n        padding-right: 0.5rem !important;\n        padding-left: 0.5rem !important;\n    }\n\n    .px-md-3 {\n        padding-right: 1rem !important;\n        padding-left: 1rem !important;\n    }\n\n    .px-md-4 {\n        padding-right: 1.5rem !important;\n        padding-left: 1.5rem !important;\n    }\n\n    .px-md-5 {\n        padding-right: 3rem !important;\n        padding-left: 3rem !important;\n    }\n\n    .py-md-0 {\n        padding-top: 0 !important;\n        padding-bottom: 0 !important;\n    }\n\n    .py-md-1 {\n        padding-top: 0.25rem !important;\n        padding-bottom: 0.25rem !important;\n    }\n\n    .py-md-2 {\n        padding-top: 0.5rem !important;\n        padding-bottom: 0.5rem !important;\n    }\n\n    .py-md-3 {\n        padding-top: 1rem !important;\n        padding-bottom: 1rem !important;\n    }\n\n    .py-md-4 {\n        padding-top: 1.5rem !important;\n        padding-bottom: 1.5rem !important;\n    }\n\n    .py-md-5 {\n        padding-top: 3rem !important;\n        padding-bottom: 3rem !important;\n    }\n\n    .pt-md-0 {\n        padding-top: 0 !important;\n    }\n\n    .pt-md-1 {\n        padding-top: 0.25rem !important;\n    }\n\n    .pt-md-2 {\n        padding-top: 0.5rem !important;\n    }\n\n    .pt-md-3 {\n        padding-top: 1rem !important;\n    }\n\n    .pt-md-4 {\n        padding-top: 1.5rem !important;\n    }\n\n    .pt-md-5 {\n        padding-top: 3rem !important;\n    }\n\n    .pe-md-0 {\n        padding-right: 0 !important;\n    }\n\n    .pe-md-1 {\n        padding-right: 0.25rem !important;\n    }\n\n    .pe-md-2 {\n        padding-right: 0.5rem !important;\n    }\n\n    .pe-md-3 {\n        padding-right: 1rem !important;\n    }\n\n    .pe-md-4 {\n        padding-right: 1.5rem !important;\n    }\n\n    .pe-md-5 {\n        padding-right: 3rem !important;\n    }\n\n    .pb-md-0 {\n        padding-bottom: 0 !important;\n    }\n\n    .pb-md-1 {\n        padding-bottom: 0.25rem !important;\n    }\n\n    .pb-md-2 {\n        padding-bottom: 0.5rem !important;\n    }\n\n    .pb-md-3 {\n        padding-bottom: 1rem !important;\n    }\n\n    .pb-md-4 {\n        padding-bottom: 1.5rem !important;\n    }\n\n    .pb-md-5 {\n        padding-bottom: 3rem !important;\n    }\n\n    .ps-md-0 {\n        padding-left: 0 !important;\n    }\n\n    .ps-md-1 {\n        padding-left: 0.25rem !important;\n    }\n\n    .ps-md-2 {\n        padding-left: 0.5rem !important;\n    }\n\n    .ps-md-3 {\n        padding-left: 1rem !important;\n    }\n\n    .ps-md-4 {\n        padding-left: 1.5rem !important;\n    }\n\n    .ps-md-5 {\n        padding-left: 3rem !important;\n    }\n\n    .gap-md-0 {\n        gap: 0 !important;\n    }\n\n    .gap-md-1 {\n        gap: 0.25rem !important;\n    }\n\n    .gap-md-2 {\n        gap: 0.5rem !important;\n    }\n\n    .gap-md-3 {\n        gap: 1rem !important;\n    }\n\n    .gap-md-4 {\n        gap: 1.5rem !important;\n    }\n\n    .gap-md-5 {\n        gap: 3rem !important;\n    }\n\n    .text-md-start {\n        text-align: left !important;\n    }\n\n    .text-md-end {\n        text-align: right !important;\n    }\n\n    .text-md-center {\n        text-align: center !important;\n    }\n}\n\n@media (min-width: 992px) {\n    .float-lg-start {\n        float: left !important;\n    }\n\n    .float-lg-end {\n        float: right !important;\n    }\n\n    .float-lg-none {\n        float: none !important;\n    }\n\n    .d-lg-inline {\n        display: inline !important;\n    }\n\n    .d-lg-inline-block {\n        display: inline-block !important;\n    }\n\n    .d-lg-block {\n        display: block !important;\n    }\n\n    .d-lg-grid {\n        display: grid !important;\n    }\n\n    .d-lg-table {\n        display: table !important;\n    }\n\n    .d-lg-table-row {\n        display: table-row !important;\n    }\n\n    .d-lg-table-cell {\n        display: table-cell !important;\n    }\n\n    .d-lg-flex {\n        display: flex !important;\n    }\n\n    .d-lg-inline-flex {\n        display: inline-flex !important;\n    }\n\n    .d-lg-none {\n        display: none !important;\n    }\n\n    .flex-lg-fill {\n        flex: 1 1 auto !important;\n    }\n\n    .flex-lg-row {\n        flex-direction: row !important;\n    }\n\n    .flex-lg-column {\n        flex-direction: column !important;\n    }\n\n    .flex-lg-row-reverse {\n        flex-direction: row-reverse !important;\n    }\n\n    .flex-lg-column-reverse {\n        flex-direction: column-reverse !important;\n    }\n\n    .flex-lg-grow-0 {\n        flex-grow: 0 !important;\n    }\n\n    .flex-lg-grow-1 {\n        flex-grow: 1 !important;\n    }\n\n    .flex-lg-shrink-0 {\n        flex-shrink: 0 !important;\n    }\n\n    .flex-lg-shrink-1 {\n        flex-shrink: 1 !important;\n    }\n\n    .flex-lg-wrap {\n        flex-wrap: wrap !important;\n    }\n\n    .flex-lg-nowrap {\n        flex-wrap: nowrap !important;\n    }\n\n    .flex-lg-wrap-reverse {\n        flex-wrap: wrap-reverse !important;\n    }\n\n    .justify-content-lg-start {\n        justify-content: flex-start !important;\n    }\n\n    .justify-content-lg-end {\n        justify-content: flex-end !important;\n    }\n\n    .justify-content-lg-center {\n        justify-content: center !important;\n    }\n\n    .justify-content-lg-between {\n        justify-content: space-between !important;\n    }\n\n    .justify-content-lg-around {\n        justify-content: space-around !important;\n    }\n\n    .justify-content-lg-evenly {\n        justify-content: space-evenly !important;\n    }\n\n    .align-items-lg-start {\n        align-items: flex-start !important;\n    }\n\n    .align-items-lg-end {\n        align-items: flex-end !important;\n    }\n\n    .align-items-lg-center {\n        align-items: center !important;\n    }\n\n    .align-items-lg-baseline {\n        align-items: baseline !important;\n    }\n\n    .align-items-lg-stretch {\n        align-items: stretch !important;\n    }\n\n    .align-content-lg-start {\n        align-content: flex-start !important;\n    }\n\n    .align-content-lg-end {\n        align-content: flex-end !important;\n    }\n\n    .align-content-lg-center {\n        align-content: center !important;\n    }\n\n    .align-content-lg-between {\n        align-content: space-between !important;\n    }\n\n    .align-content-lg-around {\n        align-content: space-around !important;\n    }\n\n    .align-content-lg-stretch {\n        align-content: stretch !important;\n    }\n\n    .align-self-lg-auto {\n        align-self: auto !important;\n    }\n\n    .align-self-lg-start {\n        align-self: flex-start !important;\n    }\n\n    .align-self-lg-end {\n        align-self: flex-end !important;\n    }\n\n    .align-self-lg-center {\n        align-self: center !important;\n    }\n\n    .align-self-lg-baseline {\n        align-self: baseline !important;\n    }\n\n    .align-self-lg-stretch {\n        align-self: stretch !important;\n    }\n\n    .order-lg-first {\n        order: -1 !important;\n    }\n\n    .order-lg-0 {\n        order: 0 !important;\n    }\n\n    .order-lg-1 {\n        order: 1 !important;\n    }\n\n    .order-lg-2 {\n        order: 2 !important;\n    }\n\n    .order-lg-3 {\n        order: 3 !important;\n    }\n\n    .order-lg-4 {\n        order: 4 !important;\n    }\n\n    .order-lg-5 {\n        order: 5 !important;\n    }\n\n    .order-lg-last {\n        order: 6 !important;\n    }\n\n    .m-lg-0 {\n        margin: 0 !important;\n    }\n\n    .m-lg-1 {\n        margin: 0.25rem !important;\n    }\n\n    .m-lg-2 {\n        margin: 0.5rem !important;\n    }\n\n    .m-lg-3 {\n        margin: 1rem !important;\n    }\n\n    .m-lg-4 {\n        margin: 1.5rem !important;\n    }\n\n    .m-lg-5 {\n        margin: 3rem !important;\n    }\n\n    .m-lg-auto {\n        margin: auto !important;\n    }\n\n    .mx-lg-0 {\n        margin-right: 0 !important;\n        margin-left: 0 !important;\n    }\n\n    .mx-lg-1 {\n        margin-right: 0.25rem !important;\n        margin-left: 0.25rem !important;\n    }\n\n    .mx-lg-2 {\n        margin-right: 0.5rem !important;\n        margin-left: 0.5rem !important;\n    }\n\n    .mx-lg-3 {\n        margin-right: 1rem !important;\n        margin-left: 1rem !important;\n    }\n\n    .mx-lg-4 {\n        margin-right: 1.5rem !important;\n        margin-left: 1.5rem !important;\n    }\n\n    .mx-lg-5 {\n        margin-right: 3rem !important;\n        margin-left: 3rem !important;\n    }\n\n    .mx-lg-auto {\n        margin-right: auto !important;\n        margin-left: auto !important;\n    }\n\n    .my-lg-0 {\n        margin-top: 0 !important;\n        margin-bottom: 0 !important;\n    }\n\n    .my-lg-1 {\n        margin-top: 0.25rem !important;\n        margin-bottom: 0.25rem !important;\n    }\n\n    .my-lg-2 {\n        margin-top: 0.5rem !important;\n        margin-bottom: 0.5rem !important;\n    }\n\n    .my-lg-3 {\n        margin-top: 1rem !important;\n        margin-bottom: 1rem !important;\n    }\n\n    .my-lg-4 {\n        margin-top: 1.5rem !important;\n        margin-bottom: 1.5rem !important;\n    }\n\n    .my-lg-5 {\n        margin-top: 3rem !important;\n        margin-bottom: 3rem !important;\n    }\n\n    .my-lg-auto {\n        margin-top: auto !important;\n        margin-bottom: auto !important;\n    }\n\n    .mt-lg-0 {\n        margin-top: 0 !important;\n    }\n\n    .mt-lg-1 {\n        margin-top: 0.25rem !important;\n    }\n\n    .mt-lg-2 {\n        margin-top: 0.5rem !important;\n    }\n\n    .mt-lg-3 {\n        margin-top: 1rem !important;\n    }\n\n    .mt-lg-4 {\n        margin-top: 1.5rem !important;\n    }\n\n    .mt-lg-5 {\n        margin-top: 3rem !important;\n    }\n\n    .mt-lg-auto {\n        margin-top: auto !important;\n    }\n\n    .me-lg-0 {\n        margin-right: 0 !important;\n    }\n\n    .me-lg-1 {\n        margin-right: 0.25rem !important;\n    }\n\n    .me-lg-2 {\n        margin-right: 0.5rem !important;\n    }\n\n    .me-lg-3 {\n        margin-right: 1rem !important;\n    }\n\n    .me-lg-4 {\n        margin-right: 1.5rem !important;\n    }\n\n    .me-lg-5 {\n        margin-right: 3rem !important;\n    }\n\n    .me-lg-auto {\n        margin-right: auto !important;\n    }\n\n    .mb-lg-0 {\n        margin-bottom: 0 !important;\n    }\n\n    .mb-lg-1 {\n        margin-bottom: 0.25rem !important;\n    }\n\n    .mb-lg-2 {\n        margin-bottom: 0.5rem !important;\n    }\n\n    .mb-lg-3 {\n        margin-bottom: 1rem !important;\n    }\n\n    .mb-lg-4 {\n        margin-bottom: 1.5rem !important;\n    }\n\n    .mb-lg-5 {\n        margin-bottom: 3rem !important;\n    }\n\n    .mb-lg-auto {\n        margin-bottom: auto !important;\n    }\n\n    .ms-lg-0 {\n        margin-left: 0 !important;\n    }\n\n    .ms-lg-1 {\n        margin-left: 0.25rem !important;\n    }\n\n    .ms-lg-2 {\n        margin-left: 0.5rem !important;\n    }\n\n    .ms-lg-3 {\n        margin-left: 1rem !important;\n    }\n\n    .ms-lg-4 {\n        margin-left: 1.5rem !important;\n    }\n\n    .ms-lg-5 {\n        margin-left: 3rem !important;\n    }\n\n    .ms-lg-auto {\n        margin-left: auto !important;\n    }\n\n    .p-lg-0 {\n        padding: 0 !important;\n    }\n\n    .p-lg-1 {\n        padding: 0.25rem !important;\n    }\n\n    .p-lg-2 {\n        padding: 0.5rem !important;\n    }\n\n    .p-lg-3 {\n        padding: 1rem !important;\n    }\n\n    .p-lg-4 {\n        padding: 1.5rem !important;\n    }\n\n    .p-lg-5 {\n        padding: 3rem !important;\n    }\n\n    .px-lg-0 {\n        padding-right: 0 !important;\n        padding-left: 0 !important;\n    }\n\n    .px-lg-1 {\n        padding-right: 0.25rem !important;\n        padding-left: 0.25rem !important;\n    }\n\n    .px-lg-2 {\n        padding-right: 0.5rem !important;\n        padding-left: 0.5rem !important;\n    }\n\n    .px-lg-3 {\n        padding-right: 1rem !important;\n        padding-left: 1rem !important;\n    }\n\n    .px-lg-4 {\n        padding-right: 1.5rem !important;\n        padding-left: 1.5rem !important;\n    }\n\n    .px-lg-5 {\n        padding-right: 3rem !important;\n        padding-left: 3rem !important;\n    }\n\n    .py-lg-0 {\n        padding-top: 0 !important;\n        padding-bottom: 0 !important;\n    }\n\n    .py-lg-1 {\n        padding-top: 0.25rem !important;\n        padding-bottom: 0.25rem !important;\n    }\n\n    .py-lg-2 {\n        padding-top: 0.5rem !important;\n        padding-bottom: 0.5rem !important;\n    }\n\n    .py-lg-3 {\n        padding-top: 1rem !important;\n        padding-bottom: 1rem !important;\n    }\n\n    .py-lg-4 {\n        padding-top: 1.5rem !important;\n        padding-bottom: 1.5rem !important;\n    }\n\n    .py-lg-5 {\n        padding-top: 3rem !important;\n        padding-bottom: 3rem !important;\n    }\n\n    .pt-lg-0 {\n        padding-top: 0 !important;\n    }\n\n    .pt-lg-1 {\n        padding-top: 0.25rem !important;\n    }\n\n    .pt-lg-2 {\n        padding-top: 0.5rem !important;\n    }\n\n    .pt-lg-3 {\n        padding-top: 1rem !important;\n    }\n\n    .pt-lg-4 {\n        padding-top: 1.5rem !important;\n    }\n\n    .pt-lg-5 {\n        padding-top: 3rem !important;\n    }\n\n    .pe-lg-0 {\n        padding-right: 0 !important;\n    }\n\n    .pe-lg-1 {\n        padding-right: 0.25rem !important;\n    }\n\n    .pe-lg-2 {\n        padding-right: 0.5rem !important;\n    }\n\n    .pe-lg-3 {\n        padding-right: 1rem !important;\n    }\n\n    .pe-lg-4 {\n        padding-right: 1.5rem !important;\n    }\n\n    .pe-lg-5 {\n        padding-right: 3rem !important;\n    }\n\n    .pb-lg-0 {\n        padding-bottom: 0 !important;\n    }\n\n    .pb-lg-1 {\n        padding-bottom: 0.25rem !important;\n    }\n\n    .pb-lg-2 {\n        padding-bottom: 0.5rem !important;\n    }\n\n    .pb-lg-3 {\n        padding-bottom: 1rem !important;\n    }\n\n    .pb-lg-4 {\n        padding-bottom: 1.5rem !important;\n    }\n\n    .pb-lg-5 {\n        padding-bottom: 3rem !important;\n    }\n\n    .ps-lg-0 {\n        padding-left: 0 !important;\n    }\n\n    .ps-lg-1 {\n        padding-left: 0.25rem !important;\n    }\n\n    .ps-lg-2 {\n        padding-left: 0.5rem !important;\n    }\n\n    .ps-lg-3 {\n        padding-left: 1rem !important;\n    }\n\n    .ps-lg-4 {\n        padding-left: 1.5rem !important;\n    }\n\n    .ps-lg-5 {\n        padding-left: 3rem !important;\n    }\n\n    .gap-lg-0 {\n        gap: 0 !important;\n    }\n\n    .gap-lg-1 {\n        gap: 0.25rem !important;\n    }\n\n    .gap-lg-2 {\n        gap: 0.5rem !important;\n    }\n\n    .gap-lg-3 {\n        gap: 1rem !important;\n    }\n\n    .gap-lg-4 {\n        gap: 1.5rem !important;\n    }\n\n    .gap-lg-5 {\n        gap: 3rem !important;\n    }\n\n    .text-lg-start {\n        text-align: left !important;\n    }\n\n    .text-lg-end {\n        text-align: right !important;\n    }\n\n    .text-lg-center {\n        text-align: center !important;\n    }\n}\n\n@media (min-width: 1200px) {\n    .float-xl-start {\n        float: left !important;\n    }\n\n    .float-xl-end {\n        float: right !important;\n    }\n\n    .float-xl-none {\n        float: none !important;\n    }\n\n    .d-xl-inline {\n        display: inline !important;\n    }\n\n    .d-xl-inline-block {\n        display: inline-block !important;\n    }\n\n    .d-xl-block {\n        display: block !important;\n    }\n\n    .d-xl-grid {\n        display: grid !important;\n    }\n\n    .d-xl-table {\n        display: table !important;\n    }\n\n    .d-xl-table-row {\n        display: table-row !important;\n    }\n\n    .d-xl-table-cell {\n        display: table-cell !important;\n    }\n\n    .d-xl-flex {\n        display: flex !important;\n    }\n\n    .d-xl-inline-flex {\n        display: inline-flex !important;\n    }\n\n    .d-xl-none {\n        display: none !important;\n    }\n\n    .flex-xl-fill {\n        flex: 1 1 auto !important;\n    }\n\n    .flex-xl-row {\n        flex-direction: row !important;\n    }\n\n    .flex-xl-column {\n        flex-direction: column !important;\n    }\n\n    .flex-xl-row-reverse {\n        flex-direction: row-reverse !important;\n    }\n\n    .flex-xl-column-reverse {\n        flex-direction: column-reverse !important;\n    }\n\n    .flex-xl-grow-0 {\n        flex-grow: 0 !important;\n    }\n\n    .flex-xl-grow-1 {\n        flex-grow: 1 !important;\n    }\n\n    .flex-xl-shrink-0 {\n        flex-shrink: 0 !important;\n    }\n\n    .flex-xl-shrink-1 {\n        flex-shrink: 1 !important;\n    }\n\n    .flex-xl-wrap {\n        flex-wrap: wrap !important;\n    }\n\n    .flex-xl-nowrap {\n        flex-wrap: nowrap !important;\n    }\n\n    .flex-xl-wrap-reverse {\n        flex-wrap: wrap-reverse !important;\n    }\n\n    .justify-content-xl-start {\n        justify-content: flex-start !important;\n    }\n\n    .justify-content-xl-end {\n        justify-content: flex-end !important;\n    }\n\n    .justify-content-xl-center {\n        justify-content: center !important;\n    }\n\n    .justify-content-xl-between {\n        justify-content: space-between !important;\n    }\n\n    .justify-content-xl-around {\n        justify-content: space-around !important;\n    }\n\n    .justify-content-xl-evenly {\n        justify-content: space-evenly !important;\n    }\n\n    .align-items-xl-start {\n        align-items: flex-start !important;\n    }\n\n    .align-items-xl-end {\n        align-items: flex-end !important;\n    }\n\n    .align-items-xl-center {\n        align-items: center !important;\n    }\n\n    .align-items-xl-baseline {\n        align-items: baseline !important;\n    }\n\n    .align-items-xl-stretch {\n        align-items: stretch !important;\n    }\n\n    .align-content-xl-start {\n        align-content: flex-start !important;\n    }\n\n    .align-content-xl-end {\n        align-content: flex-end !important;\n    }\n\n    .align-content-xl-center {\n        align-content: center !important;\n    }\n\n    .align-content-xl-between {\n        align-content: space-between !important;\n    }\n\n    .align-content-xl-around {\n        align-content: space-around !important;\n    }\n\n    .align-content-xl-stretch {\n        align-content: stretch !important;\n    }\n\n    .align-self-xl-auto {\n        align-self: auto !important;\n    }\n\n    .align-self-xl-start {\n        align-self: flex-start !important;\n    }\n\n    .align-self-xl-end {\n        align-self: flex-end !important;\n    }\n\n    .align-self-xl-center {\n        align-self: center !important;\n    }\n\n    .align-self-xl-baseline {\n        align-self: baseline !important;\n    }\n\n    .align-self-xl-stretch {\n        align-self: stretch !important;\n    }\n\n    .order-xl-first {\n        order: -1 !important;\n    }\n\n    .order-xl-0 {\n        order: 0 !important;\n    }\n\n    .order-xl-1 {\n        order: 1 !important;\n    }\n\n    .order-xl-2 {\n        order: 2 !important;\n    }\n\n    .order-xl-3 {\n        order: 3 !important;\n    }\n\n    .order-xl-4 {\n        order: 4 !important;\n    }\n\n    .order-xl-5 {\n        order: 5 !important;\n    }\n\n    .order-xl-last {\n        order: 6 !important;\n    }\n\n    .m-xl-0 {\n        margin: 0 !important;\n    }\n\n    .m-xl-1 {\n        margin: 0.25rem !important;\n    }\n\n    .m-xl-2 {\n        margin: 0.5rem !important;\n    }\n\n    .m-xl-3 {\n        margin: 1rem !important;\n    }\n\n    .m-xl-4 {\n        margin: 1.5rem !important;\n    }\n\n    .m-xl-5 {\n        margin: 3rem !important;\n    }\n\n    .m-xl-auto {\n        margin: auto !important;\n    }\n\n    .mx-xl-0 {\n        margin-right: 0 !important;\n        margin-left: 0 !important;\n    }\n\n    .mx-xl-1 {\n        margin-right: 0.25rem !important;\n        margin-left: 0.25rem !important;\n    }\n\n    .mx-xl-2 {\n        margin-right: 0.5rem !important;\n        margin-left: 0.5rem !important;\n    }\n\n    .mx-xl-3 {\n        margin-right: 1rem !important;\n        margin-left: 1rem !important;\n    }\n\n    .mx-xl-4 {\n        margin-right: 1.5rem !important;\n        margin-left: 1.5rem !important;\n    }\n\n    .mx-xl-5 {\n        margin-right: 3rem !important;\n        margin-left: 3rem !important;\n    }\n\n    .mx-xl-auto {\n        margin-right: auto !important;\n        margin-left: auto !important;\n    }\n\n    .my-xl-0 {\n        margin-top: 0 !important;\n        margin-bottom: 0 !important;\n    }\n\n    .my-xl-1 {\n        margin-top: 0.25rem !important;\n        margin-bottom: 0.25rem !important;\n    }\n\n    .my-xl-2 {\n        margin-top: 0.5rem !important;\n        margin-bottom: 0.5rem !important;\n    }\n\n    .my-xl-3 {\n        margin-top: 1rem !important;\n        margin-bottom: 1rem !important;\n    }\n\n    .my-xl-4 {\n        margin-top: 1.5rem !important;\n        margin-bottom: 1.5rem !important;\n    }\n\n    .my-xl-5 {\n        margin-top: 3rem !important;\n        margin-bottom: 3rem !important;\n    }\n\n    .my-xl-auto {\n        margin-top: auto !important;\n        margin-bottom: auto !important;\n    }\n\n    .mt-xl-0 {\n        margin-top: 0 !important;\n    }\n\n    .mt-xl-1 {\n        margin-top: 0.25rem !important;\n    }\n\n    .mt-xl-2 {\n        margin-top: 0.5rem !important;\n    }\n\n    .mt-xl-3 {\n        margin-top: 1rem !important;\n    }\n\n    .mt-xl-4 {\n        margin-top: 1.5rem !important;\n    }\n\n    .mt-xl-5 {\n        margin-top: 3rem !important;\n    }\n\n    .mt-xl-auto {\n        margin-top: auto !important;\n    }\n\n    .me-xl-0 {\n        margin-right: 0 !important;\n    }\n\n    .me-xl-1 {\n        margin-right: 0.25rem !important;\n    }\n\n    .me-xl-2 {\n        margin-right: 0.5rem !important;\n    }\n\n    .me-xl-3 {\n        margin-right: 1rem !important;\n    }\n\n    .me-xl-4 {\n        margin-right: 1.5rem !important;\n    }\n\n    .me-xl-5 {\n        margin-right: 3rem !important;\n    }\n\n    .me-xl-auto {\n        margin-right: auto !important;\n    }\n\n    .mb-xl-0 {\n        margin-bottom: 0 !important;\n    }\n\n    .mb-xl-1 {\n        margin-bottom: 0.25rem !important;\n    }\n\n    .mb-xl-2 {\n        margin-bottom: 0.5rem !important;\n    }\n\n    .mb-xl-3 {\n        margin-bottom: 1rem !important;\n    }\n\n    .mb-xl-4 {\n        margin-bottom: 1.5rem !important;\n    }\n\n    .mb-xl-5 {\n        margin-bottom: 3rem !important;\n    }\n\n    .mb-xl-auto {\n        margin-bottom: auto !important;\n    }\n\n    .ms-xl-0 {\n        margin-left: 0 !important;\n    }\n\n    .ms-xl-1 {\n        margin-left: 0.25rem !important;\n    }\n\n    .ms-xl-2 {\n        margin-left: 0.5rem !important;\n    }\n\n    .ms-xl-3 {\n        margin-left: 1rem !important;\n    }\n\n    .ms-xl-4 {\n        margin-left: 1.5rem !important;\n    }\n\n    .ms-xl-5 {\n        margin-left: 3rem !important;\n    }\n\n    .ms-xl-auto {\n        margin-left: auto !important;\n    }\n\n    .p-xl-0 {\n        padding: 0 !important;\n    }\n\n    .p-xl-1 {\n        padding: 0.25rem !important;\n    }\n\n    .p-xl-2 {\n        padding: 0.5rem !important;\n    }\n\n    .p-xl-3 {\n        padding: 1rem !important;\n    }\n\n    .p-xl-4 {\n        padding: 1.5rem !important;\n    }\n\n    .p-xl-5 {\n        padding: 3rem !important;\n    }\n\n    .px-xl-0 {\n        padding-right: 0 !important;\n        padding-left: 0 !important;\n    }\n\n    .px-xl-1 {\n        padding-right: 0.25rem !important;\n        padding-left: 0.25rem !important;\n    }\n\n    .px-xl-2 {\n        padding-right: 0.5rem !important;\n        padding-left: 0.5rem !important;\n    }\n\n    .px-xl-3 {\n        padding-right: 1rem !important;\n        padding-left: 1rem !important;\n    }\n\n    .px-xl-4 {\n        padding-right: 1.5rem !important;\n        padding-left: 1.5rem !important;\n    }\n\n    .px-xl-5 {\n        padding-right: 3rem !important;\n        padding-left: 3rem !important;\n    }\n\n    .py-xl-0 {\n        padding-top: 0 !important;\n        padding-bottom: 0 !important;\n    }\n\n    .py-xl-1 {\n        padding-top: 0.25rem !important;\n        padding-bottom: 0.25rem !important;\n    }\n\n    .py-xl-2 {\n        padding-top: 0.5rem !important;\n        padding-bottom: 0.5rem !important;\n    }\n\n    .py-xl-3 {\n        padding-top: 1rem !important;\n        padding-bottom: 1rem !important;\n    }\n\n    .py-xl-4 {\n        padding-top: 1.5rem !important;\n        padding-bottom: 1.5rem !important;\n    }\n\n    .py-xl-5 {\n        padding-top: 3rem !important;\n        padding-bottom: 3rem !important;\n    }\n\n    .pt-xl-0 {\n        padding-top: 0 !important;\n    }\n\n    .pt-xl-1 {\n        padding-top: 0.25rem !important;\n    }\n\n    .pt-xl-2 {\n        padding-top: 0.5rem !important;\n    }\n\n    .pt-xl-3 {\n        padding-top: 1rem !important;\n    }\n\n    .pt-xl-4 {\n        padding-top: 1.5rem !important;\n    }\n\n    .pt-xl-5 {\n        padding-top: 3rem !important;\n    }\n\n    .pe-xl-0 {\n        padding-right: 0 !important;\n    }\n\n    .pe-xl-1 {\n        padding-right: 0.25rem !important;\n    }\n\n    .pe-xl-2 {\n        padding-right: 0.5rem !important;\n    }\n\n    .pe-xl-3 {\n        padding-right: 1rem !important;\n    }\n\n    .pe-xl-4 {\n        padding-right: 1.5rem !important;\n    }\n\n    .pe-xl-5 {\n        padding-right: 3rem !important;\n    }\n\n    .pb-xl-0 {\n        padding-bottom: 0 !important;\n    }\n\n    .pb-xl-1 {\n        padding-bottom: 0.25rem !important;\n    }\n\n    .pb-xl-2 {\n        padding-bottom: 0.5rem !important;\n    }\n\n    .pb-xl-3 {\n        padding-bottom: 1rem !important;\n    }\n\n    .pb-xl-4 {\n        padding-bottom: 1.5rem !important;\n    }\n\n    .pb-xl-5 {\n        padding-bottom: 3rem !important;\n    }\n\n    .ps-xl-0 {\n        padding-left: 0 !important;\n    }\n\n    .ps-xl-1 {\n        padding-left: 0.25rem !important;\n    }\n\n    .ps-xl-2 {\n        padding-left: 0.5rem !important;\n    }\n\n    .ps-xl-3 {\n        padding-left: 1rem !important;\n    }\n\n    .ps-xl-4 {\n        padding-left: 1.5rem !important;\n    }\n\n    .ps-xl-5 {\n        padding-left: 3rem !important;\n    }\n\n    .gap-xl-0 {\n        gap: 0 !important;\n    }\n\n    .gap-xl-1 {\n        gap: 0.25rem !important;\n    }\n\n    .gap-xl-2 {\n        gap: 0.5rem !important;\n    }\n\n    .gap-xl-3 {\n        gap: 1rem !important;\n    }\n\n    .gap-xl-4 {\n        gap: 1.5rem !important;\n    }\n\n    .gap-xl-5 {\n        gap: 3rem !important;\n    }\n\n    .text-xl-start {\n        text-align: left !important;\n    }\n\n    .text-xl-end {\n        text-align: right !important;\n    }\n\n    .text-xl-center {\n        text-align: center !important;\n    }\n}\n\n@media (min-width: 1400px) {\n    .float-xxl-start {\n        float: left !important;\n    }\n\n    .float-xxl-end {\n        float: right !important;\n    }\n\n    .float-xxl-none {\n        float: none !important;\n    }\n\n    .d-xxl-inline {\n        display: inline !important;\n    }\n\n    .d-xxl-inline-block {\n        display: inline-block !important;\n    }\n\n    .d-xxl-block {\n        display: block !important;\n    }\n\n    .d-xxl-grid {\n        display: grid !important;\n    }\n\n    .d-xxl-table {\n        display: table !important;\n    }\n\n    .d-xxl-table-row {\n        display: table-row !important;\n    }\n\n    .d-xxl-table-cell {\n        display: table-cell !important;\n    }\n\n    .d-xxl-flex {\n        display: flex !important;\n    }\n\n    .d-xxl-inline-flex {\n        display: inline-flex !important;\n    }\n\n    .d-xxl-none {\n        display: none !important;\n    }\n\n    .flex-xxl-fill {\n        flex: 1 1 auto !important;\n    }\n\n    .flex-xxl-row {\n        flex-direction: row !important;\n    }\n\n    .flex-xxl-column {\n        flex-direction: column !important;\n    }\n\n    .flex-xxl-row-reverse {\n        flex-direction: row-reverse !important;\n    }\n\n    .flex-xxl-column-reverse {\n        flex-direction: column-reverse !important;\n    }\n\n    .flex-xxl-grow-0 {\n        flex-grow: 0 !important;\n    }\n\n    .flex-xxl-grow-1 {\n        flex-grow: 1 !important;\n    }\n\n    .flex-xxl-shrink-0 {\n        flex-shrink: 0 !important;\n    }\n\n    .flex-xxl-shrink-1 {\n        flex-shrink: 1 !important;\n    }\n\n    .flex-xxl-wrap {\n        flex-wrap: wrap !important;\n    }\n\n    .flex-xxl-nowrap {\n        flex-wrap: nowrap !important;\n    }\n\n    .flex-xxl-wrap-reverse {\n        flex-wrap: wrap-reverse !important;\n    }\n\n    .justify-content-xxl-start {\n        justify-content: flex-start !important;\n    }\n\n    .justify-content-xxl-end {\n        justify-content: flex-end !important;\n    }\n\n    .justify-content-xxl-center {\n        justify-content: center !important;\n    }\n\n    .justify-content-xxl-between {\n        justify-content: space-between !important;\n    }\n\n    .justify-content-xxl-around {\n        justify-content: space-around !important;\n    }\n\n    .justify-content-xxl-evenly {\n        justify-content: space-evenly !important;\n    }\n\n    .align-items-xxl-start {\n        align-items: flex-start !important;\n    }\n\n    .align-items-xxl-end {\n        align-items: flex-end !important;\n    }\n\n    .align-items-xxl-center {\n        align-items: center !important;\n    }\n\n    .align-items-xxl-baseline {\n        align-items: baseline !important;\n    }\n\n    .align-items-xxl-stretch {\n        align-items: stretch !important;\n    }\n\n    .align-content-xxl-start {\n        align-content: flex-start !important;\n    }\n\n    .align-content-xxl-end {\n        align-content: flex-end !important;\n    }\n\n    .align-content-xxl-center {\n        align-content: center !important;\n    }\n\n    .align-content-xxl-between {\n        align-content: space-between !important;\n    }\n\n    .align-content-xxl-around {\n        align-content: space-around !important;\n    }\n\n    .align-content-xxl-stretch {\n        align-content: stretch !important;\n    }\n\n    .align-self-xxl-auto {\n        align-self: auto !important;\n    }\n\n    .align-self-xxl-start {\n        align-self: flex-start !important;\n    }\n\n    .align-self-xxl-end {\n        align-self: flex-end !important;\n    }\n\n    .align-self-xxl-center {\n        align-self: center !important;\n    }\n\n    .align-self-xxl-baseline {\n        align-self: baseline !important;\n    }\n\n    .align-self-xxl-stretch {\n        align-self: stretch !important;\n    }\n\n    .order-xxl-first {\n        order: -1 !important;\n    }\n\n    .order-xxl-0 {\n        order: 0 !important;\n    }\n\n    .order-xxl-1 {\n        order: 1 !important;\n    }\n\n    .order-xxl-2 {\n        order: 2 !important;\n    }\n\n    .order-xxl-3 {\n        order: 3 !important;\n    }\n\n    .order-xxl-4 {\n        order: 4 !important;\n    }\n\n    .order-xxl-5 {\n        order: 5 !important;\n    }\n\n    .order-xxl-last {\n        order: 6 !important;\n    }\n\n    .m-xxl-0 {\n        margin: 0 !important;\n    }\n\n    .m-xxl-1 {\n        margin: 0.25rem !important;\n    }\n\n    .m-xxl-2 {\n        margin: 0.5rem !important;\n    }\n\n    .m-xxl-3 {\n        margin: 1rem !important;\n    }\n\n    .m-xxl-4 {\n        margin: 1.5rem !important;\n    }\n\n    .m-xxl-5 {\n        margin: 3rem !important;\n    }\n\n    .m-xxl-auto {\n        margin: auto !important;\n    }\n\n    .mx-xxl-0 {\n        margin-right: 0 !important;\n        margin-left: 0 !important;\n    }\n\n    .mx-xxl-1 {\n        margin-right: 0.25rem !important;\n        margin-left: 0.25rem !important;\n    }\n\n    .mx-xxl-2 {\n        margin-right: 0.5rem !important;\n        margin-left: 0.5rem !important;\n    }\n\n    .mx-xxl-3 {\n        margin-right: 1rem !important;\n        margin-left: 1rem !important;\n    }\n\n    .mx-xxl-4 {\n        margin-right: 1.5rem !important;\n        margin-left: 1.5rem !important;\n    }\n\n    .mx-xxl-5 {\n        margin-right: 3rem !important;\n        margin-left: 3rem !important;\n    }\n\n    .mx-xxl-auto {\n        margin-right: auto !important;\n        margin-left: auto !important;\n    }\n\n    .my-xxl-0 {\n        margin-top: 0 !important;\n        margin-bottom: 0 !important;\n    }\n\n    .my-xxl-1 {\n        margin-top: 0.25rem !important;\n        margin-bottom: 0.25rem !important;\n    }\n\n    .my-xxl-2 {\n        margin-top: 0.5rem !important;\n        margin-bottom: 0.5rem !important;\n    }\n\n    .my-xxl-3 {\n        margin-top: 1rem !important;\n        margin-bottom: 1rem !important;\n    }\n\n    .my-xxl-4 {\n        margin-top: 1.5rem !important;\n        margin-bottom: 1.5rem !important;\n    }\n\n    .my-xxl-5 {\n        margin-top: 3rem !important;\n        margin-bottom: 3rem !important;\n    }\n\n    .my-xxl-auto {\n        margin-top: auto !important;\n        margin-bottom: auto !important;\n    }\n\n    .mt-xxl-0 {\n        margin-top: 0 !important;\n    }\n\n    .mt-xxl-1 {\n        margin-top: 0.25rem !important;\n    }\n\n    .mt-xxl-2 {\n        margin-top: 0.5rem !important;\n    }\n\n    .mt-xxl-3 {\n        margin-top: 1rem !important;\n    }\n\n    .mt-xxl-4 {\n        margin-top: 1.5rem !important;\n    }\n\n    .mt-xxl-5 {\n        margin-top: 3rem !important;\n    }\n\n    .mt-xxl-auto {\n        margin-top: auto !important;\n    }\n\n    .me-xxl-0 {\n        margin-right: 0 !important;\n    }\n\n    .me-xxl-1 {\n        margin-right: 0.25rem !important;\n    }\n\n    .me-xxl-2 {\n        margin-right: 0.5rem !important;\n    }\n\n    .me-xxl-3 {\n        margin-right: 1rem !important;\n    }\n\n    .me-xxl-4 {\n        margin-right: 1.5rem !important;\n    }\n\n    .me-xxl-5 {\n        margin-right: 3rem !important;\n    }\n\n    .me-xxl-auto {\n        margin-right: auto !important;\n    }\n\n    .mb-xxl-0 {\n        margin-bottom: 0 !important;\n    }\n\n    .mb-xxl-1 {\n        margin-bottom: 0.25rem !important;\n    }\n\n    .mb-xxl-2 {\n        margin-bottom: 0.5rem !important;\n    }\n\n    .mb-xxl-3 {\n        margin-bottom: 1rem !important;\n    }\n\n    .mb-xxl-4 {\n        margin-bottom: 1.5rem !important;\n    }\n\n    .mb-xxl-5 {\n        margin-bottom: 3rem !important;\n    }\n\n    .mb-xxl-auto {\n        margin-bottom: auto !important;\n    }\n\n    .ms-xxl-0 {\n        margin-left: 0 !important;\n    }\n\n    .ms-xxl-1 {\n        margin-left: 0.25rem !important;\n    }\n\n    .ms-xxl-2 {\n        margin-left: 0.5rem !important;\n    }\n\n    .ms-xxl-3 {\n        margin-left: 1rem !important;\n    }\n\n    .ms-xxl-4 {\n        margin-left: 1.5rem !important;\n    }\n\n    .ms-xxl-5 {\n        margin-left: 3rem !important;\n    }\n\n    .ms-xxl-auto {\n        margin-left: auto !important;\n    }\n\n    .p-xxl-0 {\n        padding: 0 !important;\n    }\n\n    .p-xxl-1 {\n        padding: 0.25rem !important;\n    }\n\n    .p-xxl-2 {\n        padding: 0.5rem !important;\n    }\n\n    .p-xxl-3 {\n        padding: 1rem !important;\n    }\n\n    .p-xxl-4 {\n        padding: 1.5rem !important;\n    }\n\n    .p-xxl-5 {\n        padding: 3rem !important;\n    }\n\n    .px-xxl-0 {\n        padding-right: 0 !important;\n        padding-left: 0 !important;\n    }\n\n    .px-xxl-1 {\n        padding-right: 0.25rem !important;\n        padding-left: 0.25rem !important;\n    }\n\n    .px-xxl-2 {\n        padding-right: 0.5rem !important;\n        padding-left: 0.5rem !important;\n    }\n\n    .px-xxl-3 {\n        padding-right: 1rem !important;\n        padding-left: 1rem !important;\n    }\n\n    .px-xxl-4 {\n        padding-right: 1.5rem !important;\n        padding-left: 1.5rem !important;\n    }\n\n    .px-xxl-5 {\n        padding-right: 3rem !important;\n        padding-left: 3rem !important;\n    }\n\n    .py-xxl-0 {\n        padding-top: 0 !important;\n        padding-bottom: 0 !important;\n    }\n\n    .py-xxl-1 {\n        padding-top: 0.25rem !important;\n        padding-bottom: 0.25rem !important;\n    }\n\n    .py-xxl-2 {\n        padding-top: 0.5rem !important;\n        padding-bottom: 0.5rem !important;\n    }\n\n    .py-xxl-3 {\n        padding-top: 1rem !important;\n        padding-bottom: 1rem !important;\n    }\n\n    .py-xxl-4 {\n        padding-top: 1.5rem !important;\n        padding-bottom: 1.5rem !important;\n    }\n\n    .py-xxl-5 {\n        padding-top: 3rem !important;\n        padding-bottom: 3rem !important;\n    }\n\n    .pt-xxl-0 {\n        padding-top: 0 !important;\n    }\n\n    .pt-xxl-1 {\n        padding-top: 0.25rem !important;\n    }\n\n    .pt-xxl-2 {\n        padding-top: 0.5rem !important;\n    }\n\n    .pt-xxl-3 {\n        padding-top: 1rem !important;\n    }\n\n    .pt-xxl-4 {\n        padding-top: 1.5rem !important;\n    }\n\n    .pt-xxl-5 {\n        padding-top: 3rem !important;\n    }\n\n    .pe-xxl-0 {\n        padding-right: 0 !important;\n    }\n\n    .pe-xxl-1 {\n        padding-right: 0.25rem !important;\n    }\n\n    .pe-xxl-2 {\n        padding-right: 0.5rem !important;\n    }\n\n    .pe-xxl-3 {\n        padding-right: 1rem !important;\n    }\n\n    .pe-xxl-4 {\n        padding-right: 1.5rem !important;\n    }\n\n    .pe-xxl-5 {\n        padding-right: 3rem !important;\n    }\n\n    .pb-xxl-0 {\n        padding-bottom: 0 !important;\n    }\n\n    .pb-xxl-1 {\n        padding-bottom: 0.25rem !important;\n    }\n\n    .pb-xxl-2 {\n        padding-bottom: 0.5rem !important;\n    }\n\n    .pb-xxl-3 {\n        padding-bottom: 1rem !important;\n    }\n\n    .pb-xxl-4 {\n        padding-bottom: 1.5rem !important;\n    }\n\n    .pb-xxl-5 {\n        padding-bottom: 3rem !important;\n    }\n\n    .ps-xxl-0 {\n        padding-left: 0 !important;\n    }\n\n    .ps-xxl-1 {\n        padding-left: 0.25rem !important;\n    }\n\n    .ps-xxl-2 {\n        padding-left: 0.5rem !important;\n    }\n\n    .ps-xxl-3 {\n        padding-left: 1rem !important;\n    }\n\n    .ps-xxl-4 {\n        padding-left: 1.5rem !important;\n    }\n\n    .ps-xxl-5 {\n        padding-left: 3rem !important;\n    }\n\n    .gap-xxl-0 {\n        gap: 0 !important;\n    }\n\n    .gap-xxl-1 {\n        gap: 0.25rem !important;\n    }\n\n    .gap-xxl-2 {\n        gap: 0.5rem !important;\n    }\n\n    .gap-xxl-3 {\n        gap: 1rem !important;\n    }\n\n    .gap-xxl-4 {\n        gap: 1.5rem !important;\n    }\n\n    .gap-xxl-5 {\n        gap: 3rem !important;\n    }\n\n    .text-xxl-start {\n        text-align: left !important;\n    }\n\n    .text-xxl-end {\n        text-align: right !important;\n    }\n\n    .text-xxl-center {\n        text-align: center !important;\n    }\n}\n\n@media (min-width: 1200px) {\n    .fs-1 {\n        font-size: 2.5rem !important;\n    }\n\n    .fs-2 {\n        font-size: 2rem !important;\n    }\n\n    .fs-3 {\n        font-size: 1.75rem !important;\n    }\n\n    .fs-4 {\n        font-size: 1.5rem !important;\n    }\n}\n\n@media print {\n    .d-print-inline {\n        display: inline !important;\n    }\n\n    .d-print-inline-block {\n        display: inline-block !important;\n    }\n\n    .d-print-block {\n        display: block !important;\n    }\n\n    .d-print-grid {\n        display: grid !important;\n    }\n\n    .d-print-table {\n        display: table !important;\n    }\n\n    .d-print-table-row {\n        display: table-row !important;\n    }\n\n    .d-print-table-cell {\n        display: table-cell !important;\n    }\n\n    .d-print-flex {\n        display: flex !important;\n    }\n\n    .d-print-inline-flex {\n        display: inline-flex !important;\n    }\n\n    .d-print-none {\n        display: none !important;\n    }\n}\n\n/*# sourceMappingURL=bootstrap-utilities.css.map */"
  },
  {
    "path": "src/main/resources/web/css/bootstrap-utilities.rtl.css",
    "content": "/*!\n * Bootstrap Utilities v5.2.3 (https://getbootstrap.com/)\n * Copyright 2011-2022 The Bootstrap Authors\n * Copyright 2011-2022 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n:root {\n    --bs-blue: #0d6efd;\n    --bs-indigo: #6610f2;\n    --bs-purple: #6f42c1;\n    --bs-pink: #d63384;\n    --bs-red: #dc3545;\n    --bs-orange: #fd7e14;\n    --bs-yellow: #ffc107;\n    --bs-green: #198754;\n    --bs-teal: #20c997;\n    --bs-cyan: #0dcaf0;\n    --bs-black: #000;\n    --bs-white: #fff;\n    --bs-gray: #6c757d;\n    --bs-gray-dark: #343a40;\n    --bs-gray-100: #f8f9fa;\n    --bs-gray-200: #e9ecef;\n    --bs-gray-300: #dee2e6;\n    --bs-gray-400: #ced4da;\n    --bs-gray-500: #adb5bd;\n    --bs-gray-600: #6c757d;\n    --bs-gray-700: #495057;\n    --bs-gray-800: #343a40;\n    --bs-gray-900: #212529;\n    --bs-primary: #0d6efd;\n    --bs-secondary: #6c757d;\n    --bs-success: #198754;\n    --bs-info: #0dcaf0;\n    --bs-warning: #ffc107;\n    --bs-danger: #dc3545;\n    --bs-light: #f8f9fa;\n    --bs-dark: #212529;\n    --bs-primary-rgb: 13, 110, 253;\n    --bs-secondary-rgb: 108, 117, 125;\n    --bs-success-rgb: 25, 135, 84;\n    --bs-info-rgb: 13, 202, 240;\n    --bs-warning-rgb: 255, 193, 7;\n    --bs-danger-rgb: 220, 53, 69;\n    --bs-light-rgb: 248, 249, 250;\n    --bs-dark-rgb: 33, 37, 41;\n    --bs-white-rgb: 255, 255, 255;\n    --bs-black-rgb: 0, 0, 0;\n    --bs-body-color-rgb: 33, 37, 41;\n    --bs-body-bg-rgb: 255, 255, 255;\n    --bs-font-sans-serif: system-ui, -apple-system, \"Segoe UI\", Roboto, \"Helvetica Neue\", \"Noto Sans\", \"Liberation Sans\", Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n    --bs-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n    --bs-gradient: linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));\n    --bs-body-font-family: var(--bs-font-sans-serif);\n    --bs-body-font-size: 1rem;\n    --bs-body-font-weight: 400;\n    --bs-body-line-height: 1.5;\n    --bs-body-color: #212529;\n    --bs-body-bg: #fff;\n    --bs-border-width: 1px;\n    --bs-border-style: solid;\n    --bs-border-color: #dee2e6;\n    --bs-border-color-translucent: rgba(0, 0, 0, 0.175);\n    --bs-border-radius: 0.375rem;\n    --bs-border-radius-sm: 0.25rem;\n    --bs-border-radius-lg: 0.5rem;\n    --bs-border-radius-xl: 1rem;\n    --bs-border-radius-2xl: 2rem;\n    --bs-border-radius-pill: 50rem;\n    --bs-link-color: #0d6efd;\n    --bs-link-hover-color: #0a58ca;\n    --bs-code-color: #d63384;\n    --bs-highlight-bg: #fff3cd;\n}\n\n.clearfix::after {\n    display: block;\n    clear: both;\n    content: \"\";\n}\n\n.text-bg-primary {\n    color: #fff !important;\n    background-color: RGBA(13, 110, 253, var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-secondary {\n    color: #fff !important;\n    background-color: RGBA(108, 117, 125, var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-success {\n    color: #fff !important;\n    background-color: RGBA(25, 135, 84, var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-info {\n    color: #000 !important;\n    background-color: RGBA(13, 202, 240, var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-warning {\n    color: #000 !important;\n    background-color: RGBA(255, 193, 7, var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-danger {\n    color: #fff !important;\n    background-color: RGBA(220, 53, 69, var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-light {\n    color: #000 !important;\n    background-color: RGBA(248, 249, 250, var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-dark {\n    color: #fff !important;\n    background-color: RGBA(33, 37, 41, var(--bs-bg-opacity, 1)) !important;\n}\n\n.link-primary {\n    color: #0d6efd !important;\n}\n\n.link-primary:hover, .link-primary:focus {\n    color: #0a58ca !important;\n}\n\n.link-secondary {\n    color: #6c757d !important;\n}\n\n.link-secondary:hover, .link-secondary:focus {\n    color: #565e64 !important;\n}\n\n.link-success {\n    color: #198754 !important;\n}\n\n.link-success:hover, .link-success:focus {\n    color: #146c43 !important;\n}\n\n.link-info {\n    color: #0dcaf0 !important;\n}\n\n.link-info:hover, .link-info:focus {\n    color: #3dd5f3 !important;\n}\n\n.link-warning {\n    color: #ffc107 !important;\n}\n\n.link-warning:hover, .link-warning:focus {\n    color: #ffcd39 !important;\n}\n\n.link-danger {\n    color: #dc3545 !important;\n}\n\n.link-danger:hover, .link-danger:focus {\n    color: #b02a37 !important;\n}\n\n.link-light {\n    color: #f8f9fa !important;\n}\n\n.link-light:hover, .link-light:focus {\n    color: #f9fafb !important;\n}\n\n.link-dark {\n    color: #212529 !important;\n}\n\n.link-dark:hover, .link-dark:focus {\n    color: #1a1e21 !important;\n}\n\n.ratio {\n    position: relative;\n    width: 100%;\n}\n\n.ratio::before {\n    display: block;\n    padding-top: var(--bs-aspect-ratio);\n    content: \"\";\n}\n\n.ratio > * {\n    position: absolute;\n    top: 0;\n    right: 0;\n    width: 100%;\n    height: 100%;\n}\n\n.ratio-1x1 {\n    --bs-aspect-ratio: 100%;\n}\n\n.ratio-4x3 {\n    --bs-aspect-ratio: 75%;\n}\n\n.ratio-16x9 {\n    --bs-aspect-ratio: 56.25%;\n}\n\n.ratio-21x9 {\n    --bs-aspect-ratio: 42.8571428571%;\n}\n\n.fixed-top {\n    position: fixed;\n    top: 0;\n    left: 0;\n    right: 0;\n    z-index: 1030;\n}\n\n.fixed-bottom {\n    position: fixed;\n    left: 0;\n    bottom: 0;\n    right: 0;\n    z-index: 1030;\n}\n\n.sticky-top {\n    position: -webkit-sticky;\n    position: sticky;\n    top: 0;\n    z-index: 1020;\n}\n\n.sticky-bottom {\n    position: -webkit-sticky;\n    position: sticky;\n    bottom: 0;\n    z-index: 1020;\n}\n\n@media (min-width: 576px) {\n    .sticky-sm-top {\n        position: -webkit-sticky;\n        position: sticky;\n        top: 0;\n        z-index: 1020;\n    }\n\n    .sticky-sm-bottom {\n        position: -webkit-sticky;\n        position: sticky;\n        bottom: 0;\n        z-index: 1020;\n    }\n}\n\n@media (min-width: 768px) {\n    .sticky-md-top {\n        position: -webkit-sticky;\n        position: sticky;\n        top: 0;\n        z-index: 1020;\n    }\n\n    .sticky-md-bottom {\n        position: -webkit-sticky;\n        position: sticky;\n        bottom: 0;\n        z-index: 1020;\n    }\n}\n\n@media (min-width: 992px) {\n    .sticky-lg-top {\n        position: -webkit-sticky;\n        position: sticky;\n        top: 0;\n        z-index: 1020;\n    }\n\n    .sticky-lg-bottom {\n        position: -webkit-sticky;\n        position: sticky;\n        bottom: 0;\n        z-index: 1020;\n    }\n}\n\n@media (min-width: 1200px) {\n    .sticky-xl-top {\n        position: -webkit-sticky;\n        position: sticky;\n        top: 0;\n        z-index: 1020;\n    }\n\n    .sticky-xl-bottom {\n        position: -webkit-sticky;\n        position: sticky;\n        bottom: 0;\n        z-index: 1020;\n    }\n}\n\n@media (min-width: 1400px) {\n    .sticky-xxl-top {\n        position: -webkit-sticky;\n        position: sticky;\n        top: 0;\n        z-index: 1020;\n    }\n\n    .sticky-xxl-bottom {\n        position: -webkit-sticky;\n        position: sticky;\n        bottom: 0;\n        z-index: 1020;\n    }\n}\n\n.hstack {\n    display: flex;\n    flex-direction: row;\n    align-items: center;\n    align-self: stretch;\n}\n\n.vstack {\n    display: flex;\n    flex: 1 1 auto;\n    flex-direction: column;\n    align-self: stretch;\n}\n\n.visually-hidden,\n.visually-hidden-focusable:not(:focus):not(:focus-within) {\n    position: absolute !important;\n    width: 1px !important;\n    height: 1px !important;\n    padding: 0 !important;\n    margin: -1px !important;\n    overflow: hidden !important;\n    clip: rect(0, 0, 0, 0) !important;\n    white-space: nowrap !important;\n    border: 0 !important;\n}\n\n.stretched-link::after {\n    position: absolute;\n    top: 0;\n    left: 0;\n    bottom: 0;\n    right: 0;\n    z-index: 1;\n    content: \"\";\n}\n\n.text-truncate {\n    overflow: hidden;\n    text-overflow: ellipsis;\n    white-space: nowrap;\n}\n\n.vr {\n    display: inline-block;\n    align-self: stretch;\n    width: 1px;\n    min-height: 1em;\n    background-color: currentcolor;\n    opacity: 0.25;\n}\n\n.align-baseline {\n    vertical-align: baseline !important;\n}\n\n.align-top {\n    vertical-align: top !important;\n}\n\n.align-middle {\n    vertical-align: middle !important;\n}\n\n.align-bottom {\n    vertical-align: bottom !important;\n}\n\n.align-text-bottom {\n    vertical-align: text-bottom !important;\n}\n\n.align-text-top {\n    vertical-align: text-top !important;\n}\n\n.float-start {\n    float: right !important;\n}\n\n.float-end {\n    float: left !important;\n}\n\n.float-none {\n    float: none !important;\n}\n\n.opacity-0 {\n    opacity: 0 !important;\n}\n\n.opacity-25 {\n    opacity: 0.25 !important;\n}\n\n.opacity-50 {\n    opacity: 0.5 !important;\n}\n\n.opacity-75 {\n    opacity: 0.75 !important;\n}\n\n.opacity-100 {\n    opacity: 1 !important;\n}\n\n.overflow-auto {\n    overflow: auto !important;\n}\n\n.overflow-hidden {\n    overflow: hidden !important;\n}\n\n.overflow-visible {\n    overflow: visible !important;\n}\n\n.overflow-scroll {\n    overflow: scroll !important;\n}\n\n.d-inline {\n    display: inline !important;\n}\n\n.d-inline-block {\n    display: inline-block !important;\n}\n\n.d-block {\n    display: block !important;\n}\n\n.d-grid {\n    display: grid !important;\n}\n\n.d-table {\n    display: table !important;\n}\n\n.d-table-row {\n    display: table-row !important;\n}\n\n.d-table-cell {\n    display: table-cell !important;\n}\n\n.d-flex {\n    display: flex !important;\n}\n\n.d-inline-flex {\n    display: inline-flex !important;\n}\n\n.d-none {\n    display: none !important;\n}\n\n.shadow {\n    box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15) !important;\n}\n\n.shadow-sm {\n    box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075) !important;\n}\n\n.shadow-lg {\n    box-shadow: 0 1rem 3rem rgba(0, 0, 0, 0.175) !important;\n}\n\n.shadow-none {\n    box-shadow: none !important;\n}\n\n.position-static {\n    position: static !important;\n}\n\n.position-relative {\n    position: relative !important;\n}\n\n.position-absolute {\n    position: absolute !important;\n}\n\n.position-fixed {\n    position: fixed !important;\n}\n\n.position-sticky {\n    position: -webkit-sticky !important;\n    position: sticky !important;\n}\n\n.top-0 {\n    top: 0 !important;\n}\n\n.top-50 {\n    top: 50% !important;\n}\n\n.top-100 {\n    top: 100% !important;\n}\n\n.bottom-0 {\n    bottom: 0 !important;\n}\n\n.bottom-50 {\n    bottom: 50% !important;\n}\n\n.bottom-100 {\n    bottom: 100% !important;\n}\n\n.start-0 {\n    right: 0 !important;\n}\n\n.start-50 {\n    right: 50% !important;\n}\n\n.start-100 {\n    right: 100% !important;\n}\n\n.end-0 {\n    left: 0 !important;\n}\n\n.end-50 {\n    left: 50% !important;\n}\n\n.end-100 {\n    left: 100% !important;\n}\n\n.translate-middle {\n    transform: translate(50%, -50%) !important;\n}\n\n.translate-middle-x {\n    transform: translateX(50%) !important;\n}\n\n.translate-middle-y {\n    transform: translateY(-50%) !important;\n}\n\n.border {\n    border: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important;\n}\n\n.border-0 {\n    border: 0 !important;\n}\n\n.border-top {\n    border-top: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important;\n}\n\n.border-top-0 {\n    border-top: 0 !important;\n}\n\n.border-end {\n    border-left: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important;\n}\n\n.border-end-0 {\n    border-left: 0 !important;\n}\n\n.border-bottom {\n    border-bottom: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important;\n}\n\n.border-bottom-0 {\n    border-bottom: 0 !important;\n}\n\n.border-start {\n    border-right: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important;\n}\n\n.border-start-0 {\n    border-right: 0 !important;\n}\n\n.border-primary {\n    --bs-border-opacity: 1;\n    border-color: rgba(var(--bs-primary-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-secondary {\n    --bs-border-opacity: 1;\n    border-color: rgba(var(--bs-secondary-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-success {\n    --bs-border-opacity: 1;\n    border-color: rgba(var(--bs-success-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-info {\n    --bs-border-opacity: 1;\n    border-color: rgba(var(--bs-info-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-warning {\n    --bs-border-opacity: 1;\n    border-color: rgba(var(--bs-warning-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-danger {\n    --bs-border-opacity: 1;\n    border-color: rgba(var(--bs-danger-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-light {\n    --bs-border-opacity: 1;\n    border-color: rgba(var(--bs-light-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-dark {\n    --bs-border-opacity: 1;\n    border-color: rgba(var(--bs-dark-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-white {\n    --bs-border-opacity: 1;\n    border-color: rgba(var(--bs-white-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-1 {\n    --bs-border-width: 1px;\n}\n\n.border-2 {\n    --bs-border-width: 2px;\n}\n\n.border-3 {\n    --bs-border-width: 3px;\n}\n\n.border-4 {\n    --bs-border-width: 4px;\n}\n\n.border-5 {\n    --bs-border-width: 5px;\n}\n\n.border-opacity-10 {\n    --bs-border-opacity: 0.1;\n}\n\n.border-opacity-25 {\n    --bs-border-opacity: 0.25;\n}\n\n.border-opacity-50 {\n    --bs-border-opacity: 0.5;\n}\n\n.border-opacity-75 {\n    --bs-border-opacity: 0.75;\n}\n\n.border-opacity-100 {\n    --bs-border-opacity: 1;\n}\n\n.w-25 {\n    width: 25% !important;\n}\n\n.w-50 {\n    width: 50% !important;\n}\n\n.w-75 {\n    width: 75% !important;\n}\n\n.w-100 {\n    width: 100% !important;\n}\n\n.w-auto {\n    width: auto !important;\n}\n\n.mw-100 {\n    max-width: 100% !important;\n}\n\n.vw-100 {\n    width: 100vw !important;\n}\n\n.min-vw-100 {\n    min-width: 100vw !important;\n}\n\n.h-25 {\n    height: 25% !important;\n}\n\n.h-50 {\n    height: 50% !important;\n}\n\n.h-75 {\n    height: 75% !important;\n}\n\n.h-100 {\n    height: 100% !important;\n}\n\n.h-auto {\n    height: auto !important;\n}\n\n.mh-100 {\n    max-height: 100% !important;\n}\n\n.vh-100 {\n    height: 100vh !important;\n}\n\n.min-vh-100 {\n    min-height: 100vh !important;\n}\n\n.flex-fill {\n    flex: 1 1 auto !important;\n}\n\n.flex-row {\n    flex-direction: row !important;\n}\n\n.flex-column {\n    flex-direction: column !important;\n}\n\n.flex-row-reverse {\n    flex-direction: row-reverse !important;\n}\n\n.flex-column-reverse {\n    flex-direction: column-reverse !important;\n}\n\n.flex-grow-0 {\n    flex-grow: 0 !important;\n}\n\n.flex-grow-1 {\n    flex-grow: 1 !important;\n}\n\n.flex-shrink-0 {\n    flex-shrink: 0 !important;\n}\n\n.flex-shrink-1 {\n    flex-shrink: 1 !important;\n}\n\n.flex-wrap {\n    flex-wrap: wrap !important;\n}\n\n.flex-nowrap {\n    flex-wrap: nowrap !important;\n}\n\n.flex-wrap-reverse {\n    flex-wrap: wrap-reverse !important;\n}\n\n.justify-content-start {\n    justify-content: flex-start !important;\n}\n\n.justify-content-end {\n    justify-content: flex-end !important;\n}\n\n.justify-content-center {\n    justify-content: center !important;\n}\n\n.justify-content-between {\n    justify-content: space-between !important;\n}\n\n.justify-content-around {\n    justify-content: space-around !important;\n}\n\n.justify-content-evenly {\n    justify-content: space-evenly !important;\n}\n\n.align-items-start {\n    align-items: flex-start !important;\n}\n\n.align-items-end {\n    align-items: flex-end !important;\n}\n\n.align-items-center {\n    align-items: center !important;\n}\n\n.align-items-baseline {\n    align-items: baseline !important;\n}\n\n.align-items-stretch {\n    align-items: stretch !important;\n}\n\n.align-content-start {\n    align-content: flex-start !important;\n}\n\n.align-content-end {\n    align-content: flex-end !important;\n}\n\n.align-content-center {\n    align-content: center !important;\n}\n\n.align-content-between {\n    align-content: space-between !important;\n}\n\n.align-content-around {\n    align-content: space-around !important;\n}\n\n.align-content-stretch {\n    align-content: stretch !important;\n}\n\n.align-self-auto {\n    align-self: auto !important;\n}\n\n.align-self-start {\n    align-self: flex-start !important;\n}\n\n.align-self-end {\n    align-self: flex-end !important;\n}\n\n.align-self-center {\n    align-self: center !important;\n}\n\n.align-self-baseline {\n    align-self: baseline !important;\n}\n\n.align-self-stretch {\n    align-self: stretch !important;\n}\n\n.order-first {\n    order: -1 !important;\n}\n\n.order-0 {\n    order: 0 !important;\n}\n\n.order-1 {\n    order: 1 !important;\n}\n\n.order-2 {\n    order: 2 !important;\n}\n\n.order-3 {\n    order: 3 !important;\n}\n\n.order-4 {\n    order: 4 !important;\n}\n\n.order-5 {\n    order: 5 !important;\n}\n\n.order-last {\n    order: 6 !important;\n}\n\n.m-0 {\n    margin: 0 !important;\n}\n\n.m-1 {\n    margin: 0.25rem !important;\n}\n\n.m-2 {\n    margin: 0.5rem !important;\n}\n\n.m-3 {\n    margin: 1rem !important;\n}\n\n.m-4 {\n    margin: 1.5rem !important;\n}\n\n.m-5 {\n    margin: 3rem !important;\n}\n\n.m-auto {\n    margin: auto !important;\n}\n\n.mx-0 {\n    margin-left: 0 !important;\n    margin-right: 0 !important;\n}\n\n.mx-1 {\n    margin-left: 0.25rem !important;\n    margin-right: 0.25rem !important;\n}\n\n.mx-2 {\n    margin-left: 0.5rem !important;\n    margin-right: 0.5rem !important;\n}\n\n.mx-3 {\n    margin-left: 1rem !important;\n    margin-right: 1rem !important;\n}\n\n.mx-4 {\n    margin-left: 1.5rem !important;\n    margin-right: 1.5rem !important;\n}\n\n.mx-5 {\n    margin-left: 3rem !important;\n    margin-right: 3rem !important;\n}\n\n.mx-auto {\n    margin-left: auto !important;\n    margin-right: auto !important;\n}\n\n.my-0 {\n    margin-top: 0 !important;\n    margin-bottom: 0 !important;\n}\n\n.my-1 {\n    margin-top: 0.25rem !important;\n    margin-bottom: 0.25rem !important;\n}\n\n.my-2 {\n    margin-top: 0.5rem !important;\n    margin-bottom: 0.5rem !important;\n}\n\n.my-3 {\n    margin-top: 1rem !important;\n    margin-bottom: 1rem !important;\n}\n\n.my-4 {\n    margin-top: 1.5rem !important;\n    margin-bottom: 1.5rem !important;\n}\n\n.my-5 {\n    margin-top: 3rem !important;\n    margin-bottom: 3rem !important;\n}\n\n.my-auto {\n    margin-top: auto !important;\n    margin-bottom: auto !important;\n}\n\n.mt-0 {\n    margin-top: 0 !important;\n}\n\n.mt-1 {\n    margin-top: 0.25rem !important;\n}\n\n.mt-2 {\n    margin-top: 0.5rem !important;\n}\n\n.mt-3 {\n    margin-top: 1rem !important;\n}\n\n.mt-4 {\n    margin-top: 1.5rem !important;\n}\n\n.mt-5 {\n    margin-top: 3rem !important;\n}\n\n.mt-auto {\n    margin-top: auto !important;\n}\n\n.me-0 {\n    margin-left: 0 !important;\n}\n\n.me-1 {\n    margin-left: 0.25rem !important;\n}\n\n.me-2 {\n    margin-left: 0.5rem !important;\n}\n\n.me-3 {\n    margin-left: 1rem !important;\n}\n\n.me-4 {\n    margin-left: 1.5rem !important;\n}\n\n.me-5 {\n    margin-left: 3rem !important;\n}\n\n.me-auto {\n    margin-left: auto !important;\n}\n\n.mb-0 {\n    margin-bottom: 0 !important;\n}\n\n.mb-1 {\n    margin-bottom: 0.25rem !important;\n}\n\n.mb-2 {\n    margin-bottom: 0.5rem !important;\n}\n\n.mb-3 {\n    margin-bottom: 1rem !important;\n}\n\n.mb-4 {\n    margin-bottom: 1.5rem !important;\n}\n\n.mb-5 {\n    margin-bottom: 3rem !important;\n}\n\n.mb-auto {\n    margin-bottom: auto !important;\n}\n\n.ms-0 {\n    margin-right: 0 !important;\n}\n\n.ms-1 {\n    margin-right: 0.25rem !important;\n}\n\n.ms-2 {\n    margin-right: 0.5rem !important;\n}\n\n.ms-3 {\n    margin-right: 1rem !important;\n}\n\n.ms-4 {\n    margin-right: 1.5rem !important;\n}\n\n.ms-5 {\n    margin-right: 3rem !important;\n}\n\n.ms-auto {\n    margin-right: auto !important;\n}\n\n.p-0 {\n    padding: 0 !important;\n}\n\n.p-1 {\n    padding: 0.25rem !important;\n}\n\n.p-2 {\n    padding: 0.5rem !important;\n}\n\n.p-3 {\n    padding: 1rem !important;\n}\n\n.p-4 {\n    padding: 1.5rem !important;\n}\n\n.p-5 {\n    padding: 3rem !important;\n}\n\n.px-0 {\n    padding-left: 0 !important;\n    padding-right: 0 !important;\n}\n\n.px-1 {\n    padding-left: 0.25rem !important;\n    padding-right: 0.25rem !important;\n}\n\n.px-2 {\n    padding-left: 0.5rem !important;\n    padding-right: 0.5rem !important;\n}\n\n.px-3 {\n    padding-left: 1rem !important;\n    padding-right: 1rem !important;\n}\n\n.px-4 {\n    padding-left: 1.5rem !important;\n    padding-right: 1.5rem !important;\n}\n\n.px-5 {\n    padding-left: 3rem !important;\n    padding-right: 3rem !important;\n}\n\n.py-0 {\n    padding-top: 0 !important;\n    padding-bottom: 0 !important;\n}\n\n.py-1 {\n    padding-top: 0.25rem !important;\n    padding-bottom: 0.25rem !important;\n}\n\n.py-2 {\n    padding-top: 0.5rem !important;\n    padding-bottom: 0.5rem !important;\n}\n\n.py-3 {\n    padding-top: 1rem !important;\n    padding-bottom: 1rem !important;\n}\n\n.py-4 {\n    padding-top: 1.5rem !important;\n    padding-bottom: 1.5rem !important;\n}\n\n.py-5 {\n    padding-top: 3rem !important;\n    padding-bottom: 3rem !important;\n}\n\n.pt-0 {\n    padding-top: 0 !important;\n}\n\n.pt-1 {\n    padding-top: 0.25rem !important;\n}\n\n.pt-2 {\n    padding-top: 0.5rem !important;\n}\n\n.pt-3 {\n    padding-top: 1rem !important;\n}\n\n.pt-4 {\n    padding-top: 1.5rem !important;\n}\n\n.pt-5 {\n    padding-top: 3rem !important;\n}\n\n.pe-0 {\n    padding-left: 0 !important;\n}\n\n.pe-1 {\n    padding-left: 0.25rem !important;\n}\n\n.pe-2 {\n    padding-left: 0.5rem !important;\n}\n\n.pe-3 {\n    padding-left: 1rem !important;\n}\n\n.pe-4 {\n    padding-left: 1.5rem !important;\n}\n\n.pe-5 {\n    padding-left: 3rem !important;\n}\n\n.pb-0 {\n    padding-bottom: 0 !important;\n}\n\n.pb-1 {\n    padding-bottom: 0.25rem !important;\n}\n\n.pb-2 {\n    padding-bottom: 0.5rem !important;\n}\n\n.pb-3 {\n    padding-bottom: 1rem !important;\n}\n\n.pb-4 {\n    padding-bottom: 1.5rem !important;\n}\n\n.pb-5 {\n    padding-bottom: 3rem !important;\n}\n\n.ps-0 {\n    padding-right: 0 !important;\n}\n\n.ps-1 {\n    padding-right: 0.25rem !important;\n}\n\n.ps-2 {\n    padding-right: 0.5rem !important;\n}\n\n.ps-3 {\n    padding-right: 1rem !important;\n}\n\n.ps-4 {\n    padding-right: 1.5rem !important;\n}\n\n.ps-5 {\n    padding-right: 3rem !important;\n}\n\n.gap-0 {\n    gap: 0 !important;\n}\n\n.gap-1 {\n    gap: 0.25rem !important;\n}\n\n.gap-2 {\n    gap: 0.5rem !important;\n}\n\n.gap-3 {\n    gap: 1rem !important;\n}\n\n.gap-4 {\n    gap: 1.5rem !important;\n}\n\n.gap-5 {\n    gap: 3rem !important;\n}\n\n.font-monospace {\n    font-family: var(--bs-font-monospace) !important;\n}\n\n.fs-1 {\n    font-size: calc(1.375rem + 1.5vw) !important;\n}\n\n.fs-2 {\n    font-size: calc(1.325rem + 0.9vw) !important;\n}\n\n.fs-3 {\n    font-size: calc(1.3rem + 0.6vw) !important;\n}\n\n.fs-4 {\n    font-size: calc(1.275rem + 0.3vw) !important;\n}\n\n.fs-5 {\n    font-size: 1.25rem !important;\n}\n\n.fs-6 {\n    font-size: 1rem !important;\n}\n\n.fst-italic {\n    font-style: italic !important;\n}\n\n.fst-normal {\n    font-style: normal !important;\n}\n\n.fw-light {\n    font-weight: 300 !important;\n}\n\n.fw-lighter {\n    font-weight: lighter !important;\n}\n\n.fw-normal {\n    font-weight: 400 !important;\n}\n\n.fw-bold {\n    font-weight: 700 !important;\n}\n\n.fw-semibold {\n    font-weight: 600 !important;\n}\n\n.fw-bolder {\n    font-weight: bolder !important;\n}\n\n.lh-1 {\n    line-height: 1 !important;\n}\n\n.lh-sm {\n    line-height: 1.25 !important;\n}\n\n.lh-base {\n    line-height: 1.5 !important;\n}\n\n.lh-lg {\n    line-height: 2 !important;\n}\n\n.text-start {\n    text-align: right !important;\n}\n\n.text-end {\n    text-align: left !important;\n}\n\n.text-center {\n    text-align: center !important;\n}\n\n.text-decoration-none {\n    text-decoration: none !important;\n}\n\n.text-decoration-underline {\n    text-decoration: underline !important;\n}\n\n.text-decoration-line-through {\n    text-decoration: line-through !important;\n}\n\n.text-lowercase {\n    text-transform: lowercase !important;\n}\n\n.text-uppercase {\n    text-transform: uppercase !important;\n}\n\n.text-capitalize {\n    text-transform: capitalize !important;\n}\n\n.text-wrap {\n    white-space: normal !important;\n}\n\n.text-nowrap {\n    white-space: nowrap !important;\n}\n\n.text-primary {\n    --bs-text-opacity: 1;\n    color: rgba(var(--bs-primary-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-secondary {\n    --bs-text-opacity: 1;\n    color: rgba(var(--bs-secondary-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-success {\n    --bs-text-opacity: 1;\n    color: rgba(var(--bs-success-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-info {\n    --bs-text-opacity: 1;\n    color: rgba(var(--bs-info-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-warning {\n    --bs-text-opacity: 1;\n    color: rgba(var(--bs-warning-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-danger {\n    --bs-text-opacity: 1;\n    color: rgba(var(--bs-danger-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-light {\n    --bs-text-opacity: 1;\n    color: rgba(var(--bs-light-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-dark {\n    --bs-text-opacity: 1;\n    color: rgba(var(--bs-dark-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-black {\n    --bs-text-opacity: 1;\n    color: rgba(var(--bs-black-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-white {\n    --bs-text-opacity: 1;\n    color: rgba(var(--bs-white-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-body {\n    --bs-text-opacity: 1;\n    color: rgba(var(--bs-body-color-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-muted {\n    --bs-text-opacity: 1;\n    color: #6c757d !important;\n}\n\n.text-black-50 {\n    --bs-text-opacity: 1;\n    color: rgba(0, 0, 0, 0.5) !important;\n}\n\n.text-white-50 {\n    --bs-text-opacity: 1;\n    color: rgba(255, 255, 255, 0.5) !important;\n}\n\n.text-reset {\n    --bs-text-opacity: 1;\n    color: inherit !important;\n}\n\n.text-opacity-25 {\n    --bs-text-opacity: 0.25;\n}\n\n.text-opacity-50 {\n    --bs-text-opacity: 0.5;\n}\n\n.text-opacity-75 {\n    --bs-text-opacity: 0.75;\n}\n\n.text-opacity-100 {\n    --bs-text-opacity: 1;\n}\n\n.bg-primary {\n    --bs-bg-opacity: 1;\n    background-color: rgba(var(--bs-primary-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-secondary {\n    --bs-bg-opacity: 1;\n    background-color: rgba(var(--bs-secondary-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-success {\n    --bs-bg-opacity: 1;\n    background-color: rgba(var(--bs-success-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-info {\n    --bs-bg-opacity: 1;\n    background-color: rgba(var(--bs-info-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-warning {\n    --bs-bg-opacity: 1;\n    background-color: rgba(var(--bs-warning-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-danger {\n    --bs-bg-opacity: 1;\n    background-color: rgba(var(--bs-danger-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-light {\n    --bs-bg-opacity: 1;\n    background-color: rgba(var(--bs-light-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-dark {\n    --bs-bg-opacity: 1;\n    background-color: rgba(var(--bs-dark-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-black {\n    --bs-bg-opacity: 1;\n    background-color: rgba(var(--bs-black-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-white {\n    --bs-bg-opacity: 1;\n    background-color: rgba(var(--bs-white-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-body {\n    --bs-bg-opacity: 1;\n    background-color: rgba(var(--bs-body-bg-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-transparent {\n    --bs-bg-opacity: 1;\n    background-color: transparent !important;\n}\n\n.bg-opacity-10 {\n    --bs-bg-opacity: 0.1;\n}\n\n.bg-opacity-25 {\n    --bs-bg-opacity: 0.25;\n}\n\n.bg-opacity-50 {\n    --bs-bg-opacity: 0.5;\n}\n\n.bg-opacity-75 {\n    --bs-bg-opacity: 0.75;\n}\n\n.bg-opacity-100 {\n    --bs-bg-opacity: 1;\n}\n\n.bg-gradient {\n    background-image: var(--bs-gradient) !important;\n}\n\n.user-select-all {\n    -webkit-user-select: all !important;\n    -moz-user-select: all !important;\n    user-select: all !important;\n}\n\n.user-select-auto {\n    -webkit-user-select: auto !important;\n    -moz-user-select: auto !important;\n    user-select: auto !important;\n}\n\n.user-select-none {\n    -webkit-user-select: none !important;\n    -moz-user-select: none !important;\n    user-select: none !important;\n}\n\n.pe-none {\n    pointer-events: none !important;\n}\n\n.pe-auto {\n    pointer-events: auto !important;\n}\n\n.rounded {\n    border-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-0 {\n    border-radius: 0 !important;\n}\n\n.rounded-1 {\n    border-radius: var(--bs-border-radius-sm) !important;\n}\n\n.rounded-2 {\n    border-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-3 {\n    border-radius: var(--bs-border-radius-lg) !important;\n}\n\n.rounded-4 {\n    border-radius: var(--bs-border-radius-xl) !important;\n}\n\n.rounded-5 {\n    border-radius: var(--bs-border-radius-2xl) !important;\n}\n\n.rounded-circle {\n    border-radius: 50% !important;\n}\n\n.rounded-pill {\n    border-radius: var(--bs-border-radius-pill) !important;\n}\n\n.rounded-top {\n    border-top-right-radius: var(--bs-border-radius) !important;\n    border-top-left-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-end {\n    border-top-left-radius: var(--bs-border-radius) !important;\n    border-bottom-left-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-bottom {\n    border-bottom-left-radius: var(--bs-border-radius) !important;\n    border-bottom-right-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-start {\n    border-bottom-right-radius: var(--bs-border-radius) !important;\n    border-top-right-radius: var(--bs-border-radius) !important;\n}\n\n.visible {\n    visibility: visible !important;\n}\n\n.invisible {\n    visibility: hidden !important;\n}\n\n@media (min-width: 576px) {\n    .float-sm-start {\n        float: right !important;\n    }\n\n    .float-sm-end {\n        float: left !important;\n    }\n\n    .float-sm-none {\n        float: none !important;\n    }\n\n    .d-sm-inline {\n        display: inline !important;\n    }\n\n    .d-sm-inline-block {\n        display: inline-block !important;\n    }\n\n    .d-sm-block {\n        display: block !important;\n    }\n\n    .d-sm-grid {\n        display: grid !important;\n    }\n\n    .d-sm-table {\n        display: table !important;\n    }\n\n    .d-sm-table-row {\n        display: table-row !important;\n    }\n\n    .d-sm-table-cell {\n        display: table-cell !important;\n    }\n\n    .d-sm-flex {\n        display: flex !important;\n    }\n\n    .d-sm-inline-flex {\n        display: inline-flex !important;\n    }\n\n    .d-sm-none {\n        display: none !important;\n    }\n\n    .flex-sm-fill {\n        flex: 1 1 auto !important;\n    }\n\n    .flex-sm-row {\n        flex-direction: row !important;\n    }\n\n    .flex-sm-column {\n        flex-direction: column !important;\n    }\n\n    .flex-sm-row-reverse {\n        flex-direction: row-reverse !important;\n    }\n\n    .flex-sm-column-reverse {\n        flex-direction: column-reverse !important;\n    }\n\n    .flex-sm-grow-0 {\n        flex-grow: 0 !important;\n    }\n\n    .flex-sm-grow-1 {\n        flex-grow: 1 !important;\n    }\n\n    .flex-sm-shrink-0 {\n        flex-shrink: 0 !important;\n    }\n\n    .flex-sm-shrink-1 {\n        flex-shrink: 1 !important;\n    }\n\n    .flex-sm-wrap {\n        flex-wrap: wrap !important;\n    }\n\n    .flex-sm-nowrap {\n        flex-wrap: nowrap !important;\n    }\n\n    .flex-sm-wrap-reverse {\n        flex-wrap: wrap-reverse !important;\n    }\n\n    .justify-content-sm-start {\n        justify-content: flex-start !important;\n    }\n\n    .justify-content-sm-end {\n        justify-content: flex-end !important;\n    }\n\n    .justify-content-sm-center {\n        justify-content: center !important;\n    }\n\n    .justify-content-sm-between {\n        justify-content: space-between !important;\n    }\n\n    .justify-content-sm-around {\n        justify-content: space-around !important;\n    }\n\n    .justify-content-sm-evenly {\n        justify-content: space-evenly !important;\n    }\n\n    .align-items-sm-start {\n        align-items: flex-start !important;\n    }\n\n    .align-items-sm-end {\n        align-items: flex-end !important;\n    }\n\n    .align-items-sm-center {\n        align-items: center !important;\n    }\n\n    .align-items-sm-baseline {\n        align-items: baseline !important;\n    }\n\n    .align-items-sm-stretch {\n        align-items: stretch !important;\n    }\n\n    .align-content-sm-start {\n        align-content: flex-start !important;\n    }\n\n    .align-content-sm-end {\n        align-content: flex-end !important;\n    }\n\n    .align-content-sm-center {\n        align-content: center !important;\n    }\n\n    .align-content-sm-between {\n        align-content: space-between !important;\n    }\n\n    .align-content-sm-around {\n        align-content: space-around !important;\n    }\n\n    .align-content-sm-stretch {\n        align-content: stretch !important;\n    }\n\n    .align-self-sm-auto {\n        align-self: auto !important;\n    }\n\n    .align-self-sm-start {\n        align-self: flex-start !important;\n    }\n\n    .align-self-sm-end {\n        align-self: flex-end !important;\n    }\n\n    .align-self-sm-center {\n        align-self: center !important;\n    }\n\n    .align-self-sm-baseline {\n        align-self: baseline !important;\n    }\n\n    .align-self-sm-stretch {\n        align-self: stretch !important;\n    }\n\n    .order-sm-first {\n        order: -1 !important;\n    }\n\n    .order-sm-0 {\n        order: 0 !important;\n    }\n\n    .order-sm-1 {\n        order: 1 !important;\n    }\n\n    .order-sm-2 {\n        order: 2 !important;\n    }\n\n    .order-sm-3 {\n        order: 3 !important;\n    }\n\n    .order-sm-4 {\n        order: 4 !important;\n    }\n\n    .order-sm-5 {\n        order: 5 !important;\n    }\n\n    .order-sm-last {\n        order: 6 !important;\n    }\n\n    .m-sm-0 {\n        margin: 0 !important;\n    }\n\n    .m-sm-1 {\n        margin: 0.25rem !important;\n    }\n\n    .m-sm-2 {\n        margin: 0.5rem !important;\n    }\n\n    .m-sm-3 {\n        margin: 1rem !important;\n    }\n\n    .m-sm-4 {\n        margin: 1.5rem !important;\n    }\n\n    .m-sm-5 {\n        margin: 3rem !important;\n    }\n\n    .m-sm-auto {\n        margin: auto !important;\n    }\n\n    .mx-sm-0 {\n        margin-left: 0 !important;\n        margin-right: 0 !important;\n    }\n\n    .mx-sm-1 {\n        margin-left: 0.25rem !important;\n        margin-right: 0.25rem !important;\n    }\n\n    .mx-sm-2 {\n        margin-left: 0.5rem !important;\n        margin-right: 0.5rem !important;\n    }\n\n    .mx-sm-3 {\n        margin-left: 1rem !important;\n        margin-right: 1rem !important;\n    }\n\n    .mx-sm-4 {\n        margin-left: 1.5rem !important;\n        margin-right: 1.5rem !important;\n    }\n\n    .mx-sm-5 {\n        margin-left: 3rem !important;\n        margin-right: 3rem !important;\n    }\n\n    .mx-sm-auto {\n        margin-left: auto !important;\n        margin-right: auto !important;\n    }\n\n    .my-sm-0 {\n        margin-top: 0 !important;\n        margin-bottom: 0 !important;\n    }\n\n    .my-sm-1 {\n        margin-top: 0.25rem !important;\n        margin-bottom: 0.25rem !important;\n    }\n\n    .my-sm-2 {\n        margin-top: 0.5rem !important;\n        margin-bottom: 0.5rem !important;\n    }\n\n    .my-sm-3 {\n        margin-top: 1rem !important;\n        margin-bottom: 1rem !important;\n    }\n\n    .my-sm-4 {\n        margin-top: 1.5rem !important;\n        margin-bottom: 1.5rem !important;\n    }\n\n    .my-sm-5 {\n        margin-top: 3rem !important;\n        margin-bottom: 3rem !important;\n    }\n\n    .my-sm-auto {\n        margin-top: auto !important;\n        margin-bottom: auto !important;\n    }\n\n    .mt-sm-0 {\n        margin-top: 0 !important;\n    }\n\n    .mt-sm-1 {\n        margin-top: 0.25rem !important;\n    }\n\n    .mt-sm-2 {\n        margin-top: 0.5rem !important;\n    }\n\n    .mt-sm-3 {\n        margin-top: 1rem !important;\n    }\n\n    .mt-sm-4 {\n        margin-top: 1.5rem !important;\n    }\n\n    .mt-sm-5 {\n        margin-top: 3rem !important;\n    }\n\n    .mt-sm-auto {\n        margin-top: auto !important;\n    }\n\n    .me-sm-0 {\n        margin-left: 0 !important;\n    }\n\n    .me-sm-1 {\n        margin-left: 0.25rem !important;\n    }\n\n    .me-sm-2 {\n        margin-left: 0.5rem !important;\n    }\n\n    .me-sm-3 {\n        margin-left: 1rem !important;\n    }\n\n    .me-sm-4 {\n        margin-left: 1.5rem !important;\n    }\n\n    .me-sm-5 {\n        margin-left: 3rem !important;\n    }\n\n    .me-sm-auto {\n        margin-left: auto !important;\n    }\n\n    .mb-sm-0 {\n        margin-bottom: 0 !important;\n    }\n\n    .mb-sm-1 {\n        margin-bottom: 0.25rem !important;\n    }\n\n    .mb-sm-2 {\n        margin-bottom: 0.5rem !important;\n    }\n\n    .mb-sm-3 {\n        margin-bottom: 1rem !important;\n    }\n\n    .mb-sm-4 {\n        margin-bottom: 1.5rem !important;\n    }\n\n    .mb-sm-5 {\n        margin-bottom: 3rem !important;\n    }\n\n    .mb-sm-auto {\n        margin-bottom: auto !important;\n    }\n\n    .ms-sm-0 {\n        margin-right: 0 !important;\n    }\n\n    .ms-sm-1 {\n        margin-right: 0.25rem !important;\n    }\n\n    .ms-sm-2 {\n        margin-right: 0.5rem !important;\n    }\n\n    .ms-sm-3 {\n        margin-right: 1rem !important;\n    }\n\n    .ms-sm-4 {\n        margin-right: 1.5rem !important;\n    }\n\n    .ms-sm-5 {\n        margin-right: 3rem !important;\n    }\n\n    .ms-sm-auto {\n        margin-right: auto !important;\n    }\n\n    .p-sm-0 {\n        padding: 0 !important;\n    }\n\n    .p-sm-1 {\n        padding: 0.25rem !important;\n    }\n\n    .p-sm-2 {\n        padding: 0.5rem !important;\n    }\n\n    .p-sm-3 {\n        padding: 1rem !important;\n    }\n\n    .p-sm-4 {\n        padding: 1.5rem !important;\n    }\n\n    .p-sm-5 {\n        padding: 3rem !important;\n    }\n\n    .px-sm-0 {\n        padding-left: 0 !important;\n        padding-right: 0 !important;\n    }\n\n    .px-sm-1 {\n        padding-left: 0.25rem !important;\n        padding-right: 0.25rem !important;\n    }\n\n    .px-sm-2 {\n        padding-left: 0.5rem !important;\n        padding-right: 0.5rem !important;\n    }\n\n    .px-sm-3 {\n        padding-left: 1rem !important;\n        padding-right: 1rem !important;\n    }\n\n    .px-sm-4 {\n        padding-left: 1.5rem !important;\n        padding-right: 1.5rem !important;\n    }\n\n    .px-sm-5 {\n        padding-left: 3rem !important;\n        padding-right: 3rem !important;\n    }\n\n    .py-sm-0 {\n        padding-top: 0 !important;\n        padding-bottom: 0 !important;\n    }\n\n    .py-sm-1 {\n        padding-top: 0.25rem !important;\n        padding-bottom: 0.25rem !important;\n    }\n\n    .py-sm-2 {\n        padding-top: 0.5rem !important;\n        padding-bottom: 0.5rem !important;\n    }\n\n    .py-sm-3 {\n        padding-top: 1rem !important;\n        padding-bottom: 1rem !important;\n    }\n\n    .py-sm-4 {\n        padding-top: 1.5rem !important;\n        padding-bottom: 1.5rem !important;\n    }\n\n    .py-sm-5 {\n        padding-top: 3rem !important;\n        padding-bottom: 3rem !important;\n    }\n\n    .pt-sm-0 {\n        padding-top: 0 !important;\n    }\n\n    .pt-sm-1 {\n        padding-top: 0.25rem !important;\n    }\n\n    .pt-sm-2 {\n        padding-top: 0.5rem !important;\n    }\n\n    .pt-sm-3 {\n        padding-top: 1rem !important;\n    }\n\n    .pt-sm-4 {\n        padding-top: 1.5rem !important;\n    }\n\n    .pt-sm-5 {\n        padding-top: 3rem !important;\n    }\n\n    .pe-sm-0 {\n        padding-left: 0 !important;\n    }\n\n    .pe-sm-1 {\n        padding-left: 0.25rem !important;\n    }\n\n    .pe-sm-2 {\n        padding-left: 0.5rem !important;\n    }\n\n    .pe-sm-3 {\n        padding-left: 1rem !important;\n    }\n\n    .pe-sm-4 {\n        padding-left: 1.5rem !important;\n    }\n\n    .pe-sm-5 {\n        padding-left: 3rem !important;\n    }\n\n    .pb-sm-0 {\n        padding-bottom: 0 !important;\n    }\n\n    .pb-sm-1 {\n        padding-bottom: 0.25rem !important;\n    }\n\n    .pb-sm-2 {\n        padding-bottom: 0.5rem !important;\n    }\n\n    .pb-sm-3 {\n        padding-bottom: 1rem !important;\n    }\n\n    .pb-sm-4 {\n        padding-bottom: 1.5rem !important;\n    }\n\n    .pb-sm-5 {\n        padding-bottom: 3rem !important;\n    }\n\n    .ps-sm-0 {\n        padding-right: 0 !important;\n    }\n\n    .ps-sm-1 {\n        padding-right: 0.25rem !important;\n    }\n\n    .ps-sm-2 {\n        padding-right: 0.5rem !important;\n    }\n\n    .ps-sm-3 {\n        padding-right: 1rem !important;\n    }\n\n    .ps-sm-4 {\n        padding-right: 1.5rem !important;\n    }\n\n    .ps-sm-5 {\n        padding-right: 3rem !important;\n    }\n\n    .gap-sm-0 {\n        gap: 0 !important;\n    }\n\n    .gap-sm-1 {\n        gap: 0.25rem !important;\n    }\n\n    .gap-sm-2 {\n        gap: 0.5rem !important;\n    }\n\n    .gap-sm-3 {\n        gap: 1rem !important;\n    }\n\n    .gap-sm-4 {\n        gap: 1.5rem !important;\n    }\n\n    .gap-sm-5 {\n        gap: 3rem !important;\n    }\n\n    .text-sm-start {\n        text-align: right !important;\n    }\n\n    .text-sm-end {\n        text-align: left !important;\n    }\n\n    .text-sm-center {\n        text-align: center !important;\n    }\n}\n\n@media (min-width: 768px) {\n    .float-md-start {\n        float: right !important;\n    }\n\n    .float-md-end {\n        float: left !important;\n    }\n\n    .float-md-none {\n        float: none !important;\n    }\n\n    .d-md-inline {\n        display: inline !important;\n    }\n\n    .d-md-inline-block {\n        display: inline-block !important;\n    }\n\n    .d-md-block {\n        display: block !important;\n    }\n\n    .d-md-grid {\n        display: grid !important;\n    }\n\n    .d-md-table {\n        display: table !important;\n    }\n\n    .d-md-table-row {\n        display: table-row !important;\n    }\n\n    .d-md-table-cell {\n        display: table-cell !important;\n    }\n\n    .d-md-flex {\n        display: flex !important;\n    }\n\n    .d-md-inline-flex {\n        display: inline-flex !important;\n    }\n\n    .d-md-none {\n        display: none !important;\n    }\n\n    .flex-md-fill {\n        flex: 1 1 auto !important;\n    }\n\n    .flex-md-row {\n        flex-direction: row !important;\n    }\n\n    .flex-md-column {\n        flex-direction: column !important;\n    }\n\n    .flex-md-row-reverse {\n        flex-direction: row-reverse !important;\n    }\n\n    .flex-md-column-reverse {\n        flex-direction: column-reverse !important;\n    }\n\n    .flex-md-grow-0 {\n        flex-grow: 0 !important;\n    }\n\n    .flex-md-grow-1 {\n        flex-grow: 1 !important;\n    }\n\n    .flex-md-shrink-0 {\n        flex-shrink: 0 !important;\n    }\n\n    .flex-md-shrink-1 {\n        flex-shrink: 1 !important;\n    }\n\n    .flex-md-wrap {\n        flex-wrap: wrap !important;\n    }\n\n    .flex-md-nowrap {\n        flex-wrap: nowrap !important;\n    }\n\n    .flex-md-wrap-reverse {\n        flex-wrap: wrap-reverse !important;\n    }\n\n    .justify-content-md-start {\n        justify-content: flex-start !important;\n    }\n\n    .justify-content-md-end {\n        justify-content: flex-end !important;\n    }\n\n    .justify-content-md-center {\n        justify-content: center !important;\n    }\n\n    .justify-content-md-between {\n        justify-content: space-between !important;\n    }\n\n    .justify-content-md-around {\n        justify-content: space-around !important;\n    }\n\n    .justify-content-md-evenly {\n        justify-content: space-evenly !important;\n    }\n\n    .align-items-md-start {\n        align-items: flex-start !important;\n    }\n\n    .align-items-md-end {\n        align-items: flex-end !important;\n    }\n\n    .align-items-md-center {\n        align-items: center !important;\n    }\n\n    .align-items-md-baseline {\n        align-items: baseline !important;\n    }\n\n    .align-items-md-stretch {\n        align-items: stretch !important;\n    }\n\n    .align-content-md-start {\n        align-content: flex-start !important;\n    }\n\n    .align-content-md-end {\n        align-content: flex-end !important;\n    }\n\n    .align-content-md-center {\n        align-content: center !important;\n    }\n\n    .align-content-md-between {\n        align-content: space-between !important;\n    }\n\n    .align-content-md-around {\n        align-content: space-around !important;\n    }\n\n    .align-content-md-stretch {\n        align-content: stretch !important;\n    }\n\n    .align-self-md-auto {\n        align-self: auto !important;\n    }\n\n    .align-self-md-start {\n        align-self: flex-start !important;\n    }\n\n    .align-self-md-end {\n        align-self: flex-end !important;\n    }\n\n    .align-self-md-center {\n        align-self: center !important;\n    }\n\n    .align-self-md-baseline {\n        align-self: baseline !important;\n    }\n\n    .align-self-md-stretch {\n        align-self: stretch !important;\n    }\n\n    .order-md-first {\n        order: -1 !important;\n    }\n\n    .order-md-0 {\n        order: 0 !important;\n    }\n\n    .order-md-1 {\n        order: 1 !important;\n    }\n\n    .order-md-2 {\n        order: 2 !important;\n    }\n\n    .order-md-3 {\n        order: 3 !important;\n    }\n\n    .order-md-4 {\n        order: 4 !important;\n    }\n\n    .order-md-5 {\n        order: 5 !important;\n    }\n\n    .order-md-last {\n        order: 6 !important;\n    }\n\n    .m-md-0 {\n        margin: 0 !important;\n    }\n\n    .m-md-1 {\n        margin: 0.25rem !important;\n    }\n\n    .m-md-2 {\n        margin: 0.5rem !important;\n    }\n\n    .m-md-3 {\n        margin: 1rem !important;\n    }\n\n    .m-md-4 {\n        margin: 1.5rem !important;\n    }\n\n    .m-md-5 {\n        margin: 3rem !important;\n    }\n\n    .m-md-auto {\n        margin: auto !important;\n    }\n\n    .mx-md-0 {\n        margin-left: 0 !important;\n        margin-right: 0 !important;\n    }\n\n    .mx-md-1 {\n        margin-left: 0.25rem !important;\n        margin-right: 0.25rem !important;\n    }\n\n    .mx-md-2 {\n        margin-left: 0.5rem !important;\n        margin-right: 0.5rem !important;\n    }\n\n    .mx-md-3 {\n        margin-left: 1rem !important;\n        margin-right: 1rem !important;\n    }\n\n    .mx-md-4 {\n        margin-left: 1.5rem !important;\n        margin-right: 1.5rem !important;\n    }\n\n    .mx-md-5 {\n        margin-left: 3rem !important;\n        margin-right: 3rem !important;\n    }\n\n    .mx-md-auto {\n        margin-left: auto !important;\n        margin-right: auto !important;\n    }\n\n    .my-md-0 {\n        margin-top: 0 !important;\n        margin-bottom: 0 !important;\n    }\n\n    .my-md-1 {\n        margin-top: 0.25rem !important;\n        margin-bottom: 0.25rem !important;\n    }\n\n    .my-md-2 {\n        margin-top: 0.5rem !important;\n        margin-bottom: 0.5rem !important;\n    }\n\n    .my-md-3 {\n        margin-top: 1rem !important;\n        margin-bottom: 1rem !important;\n    }\n\n    .my-md-4 {\n        margin-top: 1.5rem !important;\n        margin-bottom: 1.5rem !important;\n    }\n\n    .my-md-5 {\n        margin-top: 3rem !important;\n        margin-bottom: 3rem !important;\n    }\n\n    .my-md-auto {\n        margin-top: auto !important;\n        margin-bottom: auto !important;\n    }\n\n    .mt-md-0 {\n        margin-top: 0 !important;\n    }\n\n    .mt-md-1 {\n        margin-top: 0.25rem !important;\n    }\n\n    .mt-md-2 {\n        margin-top: 0.5rem !important;\n    }\n\n    .mt-md-3 {\n        margin-top: 1rem !important;\n    }\n\n    .mt-md-4 {\n        margin-top: 1.5rem !important;\n    }\n\n    .mt-md-5 {\n        margin-top: 3rem !important;\n    }\n\n    .mt-md-auto {\n        margin-top: auto !important;\n    }\n\n    .me-md-0 {\n        margin-left: 0 !important;\n    }\n\n    .me-md-1 {\n        margin-left: 0.25rem !important;\n    }\n\n    .me-md-2 {\n        margin-left: 0.5rem !important;\n    }\n\n    .me-md-3 {\n        margin-left: 1rem !important;\n    }\n\n    .me-md-4 {\n        margin-left: 1.5rem !important;\n    }\n\n    .me-md-5 {\n        margin-left: 3rem !important;\n    }\n\n    .me-md-auto {\n        margin-left: auto !important;\n    }\n\n    .mb-md-0 {\n        margin-bottom: 0 !important;\n    }\n\n    .mb-md-1 {\n        margin-bottom: 0.25rem !important;\n    }\n\n    .mb-md-2 {\n        margin-bottom: 0.5rem !important;\n    }\n\n    .mb-md-3 {\n        margin-bottom: 1rem !important;\n    }\n\n    .mb-md-4 {\n        margin-bottom: 1.5rem !important;\n    }\n\n    .mb-md-5 {\n        margin-bottom: 3rem !important;\n    }\n\n    .mb-md-auto {\n        margin-bottom: auto !important;\n    }\n\n    .ms-md-0 {\n        margin-right: 0 !important;\n    }\n\n    .ms-md-1 {\n        margin-right: 0.25rem !important;\n    }\n\n    .ms-md-2 {\n        margin-right: 0.5rem !important;\n    }\n\n    .ms-md-3 {\n        margin-right: 1rem !important;\n    }\n\n    .ms-md-4 {\n        margin-right: 1.5rem !important;\n    }\n\n    .ms-md-5 {\n        margin-right: 3rem !important;\n    }\n\n    .ms-md-auto {\n        margin-right: auto !important;\n    }\n\n    .p-md-0 {\n        padding: 0 !important;\n    }\n\n    .p-md-1 {\n        padding: 0.25rem !important;\n    }\n\n    .p-md-2 {\n        padding: 0.5rem !important;\n    }\n\n    .p-md-3 {\n        padding: 1rem !important;\n    }\n\n    .p-md-4 {\n        padding: 1.5rem !important;\n    }\n\n    .p-md-5 {\n        padding: 3rem !important;\n    }\n\n    .px-md-0 {\n        padding-left: 0 !important;\n        padding-right: 0 !important;\n    }\n\n    .px-md-1 {\n        padding-left: 0.25rem !important;\n        padding-right: 0.25rem !important;\n    }\n\n    .px-md-2 {\n        padding-left: 0.5rem !important;\n        padding-right: 0.5rem !important;\n    }\n\n    .px-md-3 {\n        padding-left: 1rem !important;\n        padding-right: 1rem !important;\n    }\n\n    .px-md-4 {\n        padding-left: 1.5rem !important;\n        padding-right: 1.5rem !important;\n    }\n\n    .px-md-5 {\n        padding-left: 3rem !important;\n        padding-right: 3rem !important;\n    }\n\n    .py-md-0 {\n        padding-top: 0 !important;\n        padding-bottom: 0 !important;\n    }\n\n    .py-md-1 {\n        padding-top: 0.25rem !important;\n        padding-bottom: 0.25rem !important;\n    }\n\n    .py-md-2 {\n        padding-top: 0.5rem !important;\n        padding-bottom: 0.5rem !important;\n    }\n\n    .py-md-3 {\n        padding-top: 1rem !important;\n        padding-bottom: 1rem !important;\n    }\n\n    .py-md-4 {\n        padding-top: 1.5rem !important;\n        padding-bottom: 1.5rem !important;\n    }\n\n    .py-md-5 {\n        padding-top: 3rem !important;\n        padding-bottom: 3rem !important;\n    }\n\n    .pt-md-0 {\n        padding-top: 0 !important;\n    }\n\n    .pt-md-1 {\n        padding-top: 0.25rem !important;\n    }\n\n    .pt-md-2 {\n        padding-top: 0.5rem !important;\n    }\n\n    .pt-md-3 {\n        padding-top: 1rem !important;\n    }\n\n    .pt-md-4 {\n        padding-top: 1.5rem !important;\n    }\n\n    .pt-md-5 {\n        padding-top: 3rem !important;\n    }\n\n    .pe-md-0 {\n        padding-left: 0 !important;\n    }\n\n    .pe-md-1 {\n        padding-left: 0.25rem !important;\n    }\n\n    .pe-md-2 {\n        padding-left: 0.5rem !important;\n    }\n\n    .pe-md-3 {\n        padding-left: 1rem !important;\n    }\n\n    .pe-md-4 {\n        padding-left: 1.5rem !important;\n    }\n\n    .pe-md-5 {\n        padding-left: 3rem !important;\n    }\n\n    .pb-md-0 {\n        padding-bottom: 0 !important;\n    }\n\n    .pb-md-1 {\n        padding-bottom: 0.25rem !important;\n    }\n\n    .pb-md-2 {\n        padding-bottom: 0.5rem !important;\n    }\n\n    .pb-md-3 {\n        padding-bottom: 1rem !important;\n    }\n\n    .pb-md-4 {\n        padding-bottom: 1.5rem !important;\n    }\n\n    .pb-md-5 {\n        padding-bottom: 3rem !important;\n    }\n\n    .ps-md-0 {\n        padding-right: 0 !important;\n    }\n\n    .ps-md-1 {\n        padding-right: 0.25rem !important;\n    }\n\n    .ps-md-2 {\n        padding-right: 0.5rem !important;\n    }\n\n    .ps-md-3 {\n        padding-right: 1rem !important;\n    }\n\n    .ps-md-4 {\n        padding-right: 1.5rem !important;\n    }\n\n    .ps-md-5 {\n        padding-right: 3rem !important;\n    }\n\n    .gap-md-0 {\n        gap: 0 !important;\n    }\n\n    .gap-md-1 {\n        gap: 0.25rem !important;\n    }\n\n    .gap-md-2 {\n        gap: 0.5rem !important;\n    }\n\n    .gap-md-3 {\n        gap: 1rem !important;\n    }\n\n    .gap-md-4 {\n        gap: 1.5rem !important;\n    }\n\n    .gap-md-5 {\n        gap: 3rem !important;\n    }\n\n    .text-md-start {\n        text-align: right !important;\n    }\n\n    .text-md-end {\n        text-align: left !important;\n    }\n\n    .text-md-center {\n        text-align: center !important;\n    }\n}\n\n@media (min-width: 992px) {\n    .float-lg-start {\n        float: right !important;\n    }\n\n    .float-lg-end {\n        float: left !important;\n    }\n\n    .float-lg-none {\n        float: none !important;\n    }\n\n    .d-lg-inline {\n        display: inline !important;\n    }\n\n    .d-lg-inline-block {\n        display: inline-block !important;\n    }\n\n    .d-lg-block {\n        display: block !important;\n    }\n\n    .d-lg-grid {\n        display: grid !important;\n    }\n\n    .d-lg-table {\n        display: table !important;\n    }\n\n    .d-lg-table-row {\n        display: table-row !important;\n    }\n\n    .d-lg-table-cell {\n        display: table-cell !important;\n    }\n\n    .d-lg-flex {\n        display: flex !important;\n    }\n\n    .d-lg-inline-flex {\n        display: inline-flex !important;\n    }\n\n    .d-lg-none {\n        display: none !important;\n    }\n\n    .flex-lg-fill {\n        flex: 1 1 auto !important;\n    }\n\n    .flex-lg-row {\n        flex-direction: row !important;\n    }\n\n    .flex-lg-column {\n        flex-direction: column !important;\n    }\n\n    .flex-lg-row-reverse {\n        flex-direction: row-reverse !important;\n    }\n\n    .flex-lg-column-reverse {\n        flex-direction: column-reverse !important;\n    }\n\n    .flex-lg-grow-0 {\n        flex-grow: 0 !important;\n    }\n\n    .flex-lg-grow-1 {\n        flex-grow: 1 !important;\n    }\n\n    .flex-lg-shrink-0 {\n        flex-shrink: 0 !important;\n    }\n\n    .flex-lg-shrink-1 {\n        flex-shrink: 1 !important;\n    }\n\n    .flex-lg-wrap {\n        flex-wrap: wrap !important;\n    }\n\n    .flex-lg-nowrap {\n        flex-wrap: nowrap !important;\n    }\n\n    .flex-lg-wrap-reverse {\n        flex-wrap: wrap-reverse !important;\n    }\n\n    .justify-content-lg-start {\n        justify-content: flex-start !important;\n    }\n\n    .justify-content-lg-end {\n        justify-content: flex-end !important;\n    }\n\n    .justify-content-lg-center {\n        justify-content: center !important;\n    }\n\n    .justify-content-lg-between {\n        justify-content: space-between !important;\n    }\n\n    .justify-content-lg-around {\n        justify-content: space-around !important;\n    }\n\n    .justify-content-lg-evenly {\n        justify-content: space-evenly !important;\n    }\n\n    .align-items-lg-start {\n        align-items: flex-start !important;\n    }\n\n    .align-items-lg-end {\n        align-items: flex-end !important;\n    }\n\n    .align-items-lg-center {\n        align-items: center !important;\n    }\n\n    .align-items-lg-baseline {\n        align-items: baseline !important;\n    }\n\n    .align-items-lg-stretch {\n        align-items: stretch !important;\n    }\n\n    .align-content-lg-start {\n        align-content: flex-start !important;\n    }\n\n    .align-content-lg-end {\n        align-content: flex-end !important;\n    }\n\n    .align-content-lg-center {\n        align-content: center !important;\n    }\n\n    .align-content-lg-between {\n        align-content: space-between !important;\n    }\n\n    .align-content-lg-around {\n        align-content: space-around !important;\n    }\n\n    .align-content-lg-stretch {\n        align-content: stretch !important;\n    }\n\n    .align-self-lg-auto {\n        align-self: auto !important;\n    }\n\n    .align-self-lg-start {\n        align-self: flex-start !important;\n    }\n\n    .align-self-lg-end {\n        align-self: flex-end !important;\n    }\n\n    .align-self-lg-center {\n        align-self: center !important;\n    }\n\n    .align-self-lg-baseline {\n        align-self: baseline !important;\n    }\n\n    .align-self-lg-stretch {\n        align-self: stretch !important;\n    }\n\n    .order-lg-first {\n        order: -1 !important;\n    }\n\n    .order-lg-0 {\n        order: 0 !important;\n    }\n\n    .order-lg-1 {\n        order: 1 !important;\n    }\n\n    .order-lg-2 {\n        order: 2 !important;\n    }\n\n    .order-lg-3 {\n        order: 3 !important;\n    }\n\n    .order-lg-4 {\n        order: 4 !important;\n    }\n\n    .order-lg-5 {\n        order: 5 !important;\n    }\n\n    .order-lg-last {\n        order: 6 !important;\n    }\n\n    .m-lg-0 {\n        margin: 0 !important;\n    }\n\n    .m-lg-1 {\n        margin: 0.25rem !important;\n    }\n\n    .m-lg-2 {\n        margin: 0.5rem !important;\n    }\n\n    .m-lg-3 {\n        margin: 1rem !important;\n    }\n\n    .m-lg-4 {\n        margin: 1.5rem !important;\n    }\n\n    .m-lg-5 {\n        margin: 3rem !important;\n    }\n\n    .m-lg-auto {\n        margin: auto !important;\n    }\n\n    .mx-lg-0 {\n        margin-left: 0 !important;\n        margin-right: 0 !important;\n    }\n\n    .mx-lg-1 {\n        margin-left: 0.25rem !important;\n        margin-right: 0.25rem !important;\n    }\n\n    .mx-lg-2 {\n        margin-left: 0.5rem !important;\n        margin-right: 0.5rem !important;\n    }\n\n    .mx-lg-3 {\n        margin-left: 1rem !important;\n        margin-right: 1rem !important;\n    }\n\n    .mx-lg-4 {\n        margin-left: 1.5rem !important;\n        margin-right: 1.5rem !important;\n    }\n\n    .mx-lg-5 {\n        margin-left: 3rem !important;\n        margin-right: 3rem !important;\n    }\n\n    .mx-lg-auto {\n        margin-left: auto !important;\n        margin-right: auto !important;\n    }\n\n    .my-lg-0 {\n        margin-top: 0 !important;\n        margin-bottom: 0 !important;\n    }\n\n    .my-lg-1 {\n        margin-top: 0.25rem !important;\n        margin-bottom: 0.25rem !important;\n    }\n\n    .my-lg-2 {\n        margin-top: 0.5rem !important;\n        margin-bottom: 0.5rem !important;\n    }\n\n    .my-lg-3 {\n        margin-top: 1rem !important;\n        margin-bottom: 1rem !important;\n    }\n\n    .my-lg-4 {\n        margin-top: 1.5rem !important;\n        margin-bottom: 1.5rem !important;\n    }\n\n    .my-lg-5 {\n        margin-top: 3rem !important;\n        margin-bottom: 3rem !important;\n    }\n\n    .my-lg-auto {\n        margin-top: auto !important;\n        margin-bottom: auto !important;\n    }\n\n    .mt-lg-0 {\n        margin-top: 0 !important;\n    }\n\n    .mt-lg-1 {\n        margin-top: 0.25rem !important;\n    }\n\n    .mt-lg-2 {\n        margin-top: 0.5rem !important;\n    }\n\n    .mt-lg-3 {\n        margin-top: 1rem !important;\n    }\n\n    .mt-lg-4 {\n        margin-top: 1.5rem !important;\n    }\n\n    .mt-lg-5 {\n        margin-top: 3rem !important;\n    }\n\n    .mt-lg-auto {\n        margin-top: auto !important;\n    }\n\n    .me-lg-0 {\n        margin-left: 0 !important;\n    }\n\n    .me-lg-1 {\n        margin-left: 0.25rem !important;\n    }\n\n    .me-lg-2 {\n        margin-left: 0.5rem !important;\n    }\n\n    .me-lg-3 {\n        margin-left: 1rem !important;\n    }\n\n    .me-lg-4 {\n        margin-left: 1.5rem !important;\n    }\n\n    .me-lg-5 {\n        margin-left: 3rem !important;\n    }\n\n    .me-lg-auto {\n        margin-left: auto !important;\n    }\n\n    .mb-lg-0 {\n        margin-bottom: 0 !important;\n    }\n\n    .mb-lg-1 {\n        margin-bottom: 0.25rem !important;\n    }\n\n    .mb-lg-2 {\n        margin-bottom: 0.5rem !important;\n    }\n\n    .mb-lg-3 {\n        margin-bottom: 1rem !important;\n    }\n\n    .mb-lg-4 {\n        margin-bottom: 1.5rem !important;\n    }\n\n    .mb-lg-5 {\n        margin-bottom: 3rem !important;\n    }\n\n    .mb-lg-auto {\n        margin-bottom: auto !important;\n    }\n\n    .ms-lg-0 {\n        margin-right: 0 !important;\n    }\n\n    .ms-lg-1 {\n        margin-right: 0.25rem !important;\n    }\n\n    .ms-lg-2 {\n        margin-right: 0.5rem !important;\n    }\n\n    .ms-lg-3 {\n        margin-right: 1rem !important;\n    }\n\n    .ms-lg-4 {\n        margin-right: 1.5rem !important;\n    }\n\n    .ms-lg-5 {\n        margin-right: 3rem !important;\n    }\n\n    .ms-lg-auto {\n        margin-right: auto !important;\n    }\n\n    .p-lg-0 {\n        padding: 0 !important;\n    }\n\n    .p-lg-1 {\n        padding: 0.25rem !important;\n    }\n\n    .p-lg-2 {\n        padding: 0.5rem !important;\n    }\n\n    .p-lg-3 {\n        padding: 1rem !important;\n    }\n\n    .p-lg-4 {\n        padding: 1.5rem !important;\n    }\n\n    .p-lg-5 {\n        padding: 3rem !important;\n    }\n\n    .px-lg-0 {\n        padding-left: 0 !important;\n        padding-right: 0 !important;\n    }\n\n    .px-lg-1 {\n        padding-left: 0.25rem !important;\n        padding-right: 0.25rem !important;\n    }\n\n    .px-lg-2 {\n        padding-left: 0.5rem !important;\n        padding-right: 0.5rem !important;\n    }\n\n    .px-lg-3 {\n        padding-left: 1rem !important;\n        padding-right: 1rem !important;\n    }\n\n    .px-lg-4 {\n        padding-left: 1.5rem !important;\n        padding-right: 1.5rem !important;\n    }\n\n    .px-lg-5 {\n        padding-left: 3rem !important;\n        padding-right: 3rem !important;\n    }\n\n    .py-lg-0 {\n        padding-top: 0 !important;\n        padding-bottom: 0 !important;\n    }\n\n    .py-lg-1 {\n        padding-top: 0.25rem !important;\n        padding-bottom: 0.25rem !important;\n    }\n\n    .py-lg-2 {\n        padding-top: 0.5rem !important;\n        padding-bottom: 0.5rem !important;\n    }\n\n    .py-lg-3 {\n        padding-top: 1rem !important;\n        padding-bottom: 1rem !important;\n    }\n\n    .py-lg-4 {\n        padding-top: 1.5rem !important;\n        padding-bottom: 1.5rem !important;\n    }\n\n    .py-lg-5 {\n        padding-top: 3rem !important;\n        padding-bottom: 3rem !important;\n    }\n\n    .pt-lg-0 {\n        padding-top: 0 !important;\n    }\n\n    .pt-lg-1 {\n        padding-top: 0.25rem !important;\n    }\n\n    .pt-lg-2 {\n        padding-top: 0.5rem !important;\n    }\n\n    .pt-lg-3 {\n        padding-top: 1rem !important;\n    }\n\n    .pt-lg-4 {\n        padding-top: 1.5rem !important;\n    }\n\n    .pt-lg-5 {\n        padding-top: 3rem !important;\n    }\n\n    .pe-lg-0 {\n        padding-left: 0 !important;\n    }\n\n    .pe-lg-1 {\n        padding-left: 0.25rem !important;\n    }\n\n    .pe-lg-2 {\n        padding-left: 0.5rem !important;\n    }\n\n    .pe-lg-3 {\n        padding-left: 1rem !important;\n    }\n\n    .pe-lg-4 {\n        padding-left: 1.5rem !important;\n    }\n\n    .pe-lg-5 {\n        padding-left: 3rem !important;\n    }\n\n    .pb-lg-0 {\n        padding-bottom: 0 !important;\n    }\n\n    .pb-lg-1 {\n        padding-bottom: 0.25rem !important;\n    }\n\n    .pb-lg-2 {\n        padding-bottom: 0.5rem !important;\n    }\n\n    .pb-lg-3 {\n        padding-bottom: 1rem !important;\n    }\n\n    .pb-lg-4 {\n        padding-bottom: 1.5rem !important;\n    }\n\n    .pb-lg-5 {\n        padding-bottom: 3rem !important;\n    }\n\n    .ps-lg-0 {\n        padding-right: 0 !important;\n    }\n\n    .ps-lg-1 {\n        padding-right: 0.25rem !important;\n    }\n\n    .ps-lg-2 {\n        padding-right: 0.5rem !important;\n    }\n\n    .ps-lg-3 {\n        padding-right: 1rem !important;\n    }\n\n    .ps-lg-4 {\n        padding-right: 1.5rem !important;\n    }\n\n    .ps-lg-5 {\n        padding-right: 3rem !important;\n    }\n\n    .gap-lg-0 {\n        gap: 0 !important;\n    }\n\n    .gap-lg-1 {\n        gap: 0.25rem !important;\n    }\n\n    .gap-lg-2 {\n        gap: 0.5rem !important;\n    }\n\n    .gap-lg-3 {\n        gap: 1rem !important;\n    }\n\n    .gap-lg-4 {\n        gap: 1.5rem !important;\n    }\n\n    .gap-lg-5 {\n        gap: 3rem !important;\n    }\n\n    .text-lg-start {\n        text-align: right !important;\n    }\n\n    .text-lg-end {\n        text-align: left !important;\n    }\n\n    .text-lg-center {\n        text-align: center !important;\n    }\n}\n\n@media (min-width: 1200px) {\n    .float-xl-start {\n        float: right !important;\n    }\n\n    .float-xl-end {\n        float: left !important;\n    }\n\n    .float-xl-none {\n        float: none !important;\n    }\n\n    .d-xl-inline {\n        display: inline !important;\n    }\n\n    .d-xl-inline-block {\n        display: inline-block !important;\n    }\n\n    .d-xl-block {\n        display: block !important;\n    }\n\n    .d-xl-grid {\n        display: grid !important;\n    }\n\n    .d-xl-table {\n        display: table !important;\n    }\n\n    .d-xl-table-row {\n        display: table-row !important;\n    }\n\n    .d-xl-table-cell {\n        display: table-cell !important;\n    }\n\n    .d-xl-flex {\n        display: flex !important;\n    }\n\n    .d-xl-inline-flex {\n        display: inline-flex !important;\n    }\n\n    .d-xl-none {\n        display: none !important;\n    }\n\n    .flex-xl-fill {\n        flex: 1 1 auto !important;\n    }\n\n    .flex-xl-row {\n        flex-direction: row !important;\n    }\n\n    .flex-xl-column {\n        flex-direction: column !important;\n    }\n\n    .flex-xl-row-reverse {\n        flex-direction: row-reverse !important;\n    }\n\n    .flex-xl-column-reverse {\n        flex-direction: column-reverse !important;\n    }\n\n    .flex-xl-grow-0 {\n        flex-grow: 0 !important;\n    }\n\n    .flex-xl-grow-1 {\n        flex-grow: 1 !important;\n    }\n\n    .flex-xl-shrink-0 {\n        flex-shrink: 0 !important;\n    }\n\n    .flex-xl-shrink-1 {\n        flex-shrink: 1 !important;\n    }\n\n    .flex-xl-wrap {\n        flex-wrap: wrap !important;\n    }\n\n    .flex-xl-nowrap {\n        flex-wrap: nowrap !important;\n    }\n\n    .flex-xl-wrap-reverse {\n        flex-wrap: wrap-reverse !important;\n    }\n\n    .justify-content-xl-start {\n        justify-content: flex-start !important;\n    }\n\n    .justify-content-xl-end {\n        justify-content: flex-end !important;\n    }\n\n    .justify-content-xl-center {\n        justify-content: center !important;\n    }\n\n    .justify-content-xl-between {\n        justify-content: space-between !important;\n    }\n\n    .justify-content-xl-around {\n        justify-content: space-around !important;\n    }\n\n    .justify-content-xl-evenly {\n        justify-content: space-evenly !important;\n    }\n\n    .align-items-xl-start {\n        align-items: flex-start !important;\n    }\n\n    .align-items-xl-end {\n        align-items: flex-end !important;\n    }\n\n    .align-items-xl-center {\n        align-items: center !important;\n    }\n\n    .align-items-xl-baseline {\n        align-items: baseline !important;\n    }\n\n    .align-items-xl-stretch {\n        align-items: stretch !important;\n    }\n\n    .align-content-xl-start {\n        align-content: flex-start !important;\n    }\n\n    .align-content-xl-end {\n        align-content: flex-end !important;\n    }\n\n    .align-content-xl-center {\n        align-content: center !important;\n    }\n\n    .align-content-xl-between {\n        align-content: space-between !important;\n    }\n\n    .align-content-xl-around {\n        align-content: space-around !important;\n    }\n\n    .align-content-xl-stretch {\n        align-content: stretch !important;\n    }\n\n    .align-self-xl-auto {\n        align-self: auto !important;\n    }\n\n    .align-self-xl-start {\n        align-self: flex-start !important;\n    }\n\n    .align-self-xl-end {\n        align-self: flex-end !important;\n    }\n\n    .align-self-xl-center {\n        align-self: center !important;\n    }\n\n    .align-self-xl-baseline {\n        align-self: baseline !important;\n    }\n\n    .align-self-xl-stretch {\n        align-self: stretch !important;\n    }\n\n    .order-xl-first {\n        order: -1 !important;\n    }\n\n    .order-xl-0 {\n        order: 0 !important;\n    }\n\n    .order-xl-1 {\n        order: 1 !important;\n    }\n\n    .order-xl-2 {\n        order: 2 !important;\n    }\n\n    .order-xl-3 {\n        order: 3 !important;\n    }\n\n    .order-xl-4 {\n        order: 4 !important;\n    }\n\n    .order-xl-5 {\n        order: 5 !important;\n    }\n\n    .order-xl-last {\n        order: 6 !important;\n    }\n\n    .m-xl-0 {\n        margin: 0 !important;\n    }\n\n    .m-xl-1 {\n        margin: 0.25rem !important;\n    }\n\n    .m-xl-2 {\n        margin: 0.5rem !important;\n    }\n\n    .m-xl-3 {\n        margin: 1rem !important;\n    }\n\n    .m-xl-4 {\n        margin: 1.5rem !important;\n    }\n\n    .m-xl-5 {\n        margin: 3rem !important;\n    }\n\n    .m-xl-auto {\n        margin: auto !important;\n    }\n\n    .mx-xl-0 {\n        margin-left: 0 !important;\n        margin-right: 0 !important;\n    }\n\n    .mx-xl-1 {\n        margin-left: 0.25rem !important;\n        margin-right: 0.25rem !important;\n    }\n\n    .mx-xl-2 {\n        margin-left: 0.5rem !important;\n        margin-right: 0.5rem !important;\n    }\n\n    .mx-xl-3 {\n        margin-left: 1rem !important;\n        margin-right: 1rem !important;\n    }\n\n    .mx-xl-4 {\n        margin-left: 1.5rem !important;\n        margin-right: 1.5rem !important;\n    }\n\n    .mx-xl-5 {\n        margin-left: 3rem !important;\n        margin-right: 3rem !important;\n    }\n\n    .mx-xl-auto {\n        margin-left: auto !important;\n        margin-right: auto !important;\n    }\n\n    .my-xl-0 {\n        margin-top: 0 !important;\n        margin-bottom: 0 !important;\n    }\n\n    .my-xl-1 {\n        margin-top: 0.25rem !important;\n        margin-bottom: 0.25rem !important;\n    }\n\n    .my-xl-2 {\n        margin-top: 0.5rem !important;\n        margin-bottom: 0.5rem !important;\n    }\n\n    .my-xl-3 {\n        margin-top: 1rem !important;\n        margin-bottom: 1rem !important;\n    }\n\n    .my-xl-4 {\n        margin-top: 1.5rem !important;\n        margin-bottom: 1.5rem !important;\n    }\n\n    .my-xl-5 {\n        margin-top: 3rem !important;\n        margin-bottom: 3rem !important;\n    }\n\n    .my-xl-auto {\n        margin-top: auto !important;\n        margin-bottom: auto !important;\n    }\n\n    .mt-xl-0 {\n        margin-top: 0 !important;\n    }\n\n    .mt-xl-1 {\n        margin-top: 0.25rem !important;\n    }\n\n    .mt-xl-2 {\n        margin-top: 0.5rem !important;\n    }\n\n    .mt-xl-3 {\n        margin-top: 1rem !important;\n    }\n\n    .mt-xl-4 {\n        margin-top: 1.5rem !important;\n    }\n\n    .mt-xl-5 {\n        margin-top: 3rem !important;\n    }\n\n    .mt-xl-auto {\n        margin-top: auto !important;\n    }\n\n    .me-xl-0 {\n        margin-left: 0 !important;\n    }\n\n    .me-xl-1 {\n        margin-left: 0.25rem !important;\n    }\n\n    .me-xl-2 {\n        margin-left: 0.5rem !important;\n    }\n\n    .me-xl-3 {\n        margin-left: 1rem !important;\n    }\n\n    .me-xl-4 {\n        margin-left: 1.5rem !important;\n    }\n\n    .me-xl-5 {\n        margin-left: 3rem !important;\n    }\n\n    .me-xl-auto {\n        margin-left: auto !important;\n    }\n\n    .mb-xl-0 {\n        margin-bottom: 0 !important;\n    }\n\n    .mb-xl-1 {\n        margin-bottom: 0.25rem !important;\n    }\n\n    .mb-xl-2 {\n        margin-bottom: 0.5rem !important;\n    }\n\n    .mb-xl-3 {\n        margin-bottom: 1rem !important;\n    }\n\n    .mb-xl-4 {\n        margin-bottom: 1.5rem !important;\n    }\n\n    .mb-xl-5 {\n        margin-bottom: 3rem !important;\n    }\n\n    .mb-xl-auto {\n        margin-bottom: auto !important;\n    }\n\n    .ms-xl-0 {\n        margin-right: 0 !important;\n    }\n\n    .ms-xl-1 {\n        margin-right: 0.25rem !important;\n    }\n\n    .ms-xl-2 {\n        margin-right: 0.5rem !important;\n    }\n\n    .ms-xl-3 {\n        margin-right: 1rem !important;\n    }\n\n    .ms-xl-4 {\n        margin-right: 1.5rem !important;\n    }\n\n    .ms-xl-5 {\n        margin-right: 3rem !important;\n    }\n\n    .ms-xl-auto {\n        margin-right: auto !important;\n    }\n\n    .p-xl-0 {\n        padding: 0 !important;\n    }\n\n    .p-xl-1 {\n        padding: 0.25rem !important;\n    }\n\n    .p-xl-2 {\n        padding: 0.5rem !important;\n    }\n\n    .p-xl-3 {\n        padding: 1rem !important;\n    }\n\n    .p-xl-4 {\n        padding: 1.5rem !important;\n    }\n\n    .p-xl-5 {\n        padding: 3rem !important;\n    }\n\n    .px-xl-0 {\n        padding-left: 0 !important;\n        padding-right: 0 !important;\n    }\n\n    .px-xl-1 {\n        padding-left: 0.25rem !important;\n        padding-right: 0.25rem !important;\n    }\n\n    .px-xl-2 {\n        padding-left: 0.5rem !important;\n        padding-right: 0.5rem !important;\n    }\n\n    .px-xl-3 {\n        padding-left: 1rem !important;\n        padding-right: 1rem !important;\n    }\n\n    .px-xl-4 {\n        padding-left: 1.5rem !important;\n        padding-right: 1.5rem !important;\n    }\n\n    .px-xl-5 {\n        padding-left: 3rem !important;\n        padding-right: 3rem !important;\n    }\n\n    .py-xl-0 {\n        padding-top: 0 !important;\n        padding-bottom: 0 !important;\n    }\n\n    .py-xl-1 {\n        padding-top: 0.25rem !important;\n        padding-bottom: 0.25rem !important;\n    }\n\n    .py-xl-2 {\n        padding-top: 0.5rem !important;\n        padding-bottom: 0.5rem !important;\n    }\n\n    .py-xl-3 {\n        padding-top: 1rem !important;\n        padding-bottom: 1rem !important;\n    }\n\n    .py-xl-4 {\n        padding-top: 1.5rem !important;\n        padding-bottom: 1.5rem !important;\n    }\n\n    .py-xl-5 {\n        padding-top: 3rem !important;\n        padding-bottom: 3rem !important;\n    }\n\n    .pt-xl-0 {\n        padding-top: 0 !important;\n    }\n\n    .pt-xl-1 {\n        padding-top: 0.25rem !important;\n    }\n\n    .pt-xl-2 {\n        padding-top: 0.5rem !important;\n    }\n\n    .pt-xl-3 {\n        padding-top: 1rem !important;\n    }\n\n    .pt-xl-4 {\n        padding-top: 1.5rem !important;\n    }\n\n    .pt-xl-5 {\n        padding-top: 3rem !important;\n    }\n\n    .pe-xl-0 {\n        padding-left: 0 !important;\n    }\n\n    .pe-xl-1 {\n        padding-left: 0.25rem !important;\n    }\n\n    .pe-xl-2 {\n        padding-left: 0.5rem !important;\n    }\n\n    .pe-xl-3 {\n        padding-left: 1rem !important;\n    }\n\n    .pe-xl-4 {\n        padding-left: 1.5rem !important;\n    }\n\n    .pe-xl-5 {\n        padding-left: 3rem !important;\n    }\n\n    .pb-xl-0 {\n        padding-bottom: 0 !important;\n    }\n\n    .pb-xl-1 {\n        padding-bottom: 0.25rem !important;\n    }\n\n    .pb-xl-2 {\n        padding-bottom: 0.5rem !important;\n    }\n\n    .pb-xl-3 {\n        padding-bottom: 1rem !important;\n    }\n\n    .pb-xl-4 {\n        padding-bottom: 1.5rem !important;\n    }\n\n    .pb-xl-5 {\n        padding-bottom: 3rem !important;\n    }\n\n    .ps-xl-0 {\n        padding-right: 0 !important;\n    }\n\n    .ps-xl-1 {\n        padding-right: 0.25rem !important;\n    }\n\n    .ps-xl-2 {\n        padding-right: 0.5rem !important;\n    }\n\n    .ps-xl-3 {\n        padding-right: 1rem !important;\n    }\n\n    .ps-xl-4 {\n        padding-right: 1.5rem !important;\n    }\n\n    .ps-xl-5 {\n        padding-right: 3rem !important;\n    }\n\n    .gap-xl-0 {\n        gap: 0 !important;\n    }\n\n    .gap-xl-1 {\n        gap: 0.25rem !important;\n    }\n\n    .gap-xl-2 {\n        gap: 0.5rem !important;\n    }\n\n    .gap-xl-3 {\n        gap: 1rem !important;\n    }\n\n    .gap-xl-4 {\n        gap: 1.5rem !important;\n    }\n\n    .gap-xl-5 {\n        gap: 3rem !important;\n    }\n\n    .text-xl-start {\n        text-align: right !important;\n    }\n\n    .text-xl-end {\n        text-align: left !important;\n    }\n\n    .text-xl-center {\n        text-align: center !important;\n    }\n}\n\n@media (min-width: 1400px) {\n    .float-xxl-start {\n        float: right !important;\n    }\n\n    .float-xxl-end {\n        float: left !important;\n    }\n\n    .float-xxl-none {\n        float: none !important;\n    }\n\n    .d-xxl-inline {\n        display: inline !important;\n    }\n\n    .d-xxl-inline-block {\n        display: inline-block !important;\n    }\n\n    .d-xxl-block {\n        display: block !important;\n    }\n\n    .d-xxl-grid {\n        display: grid !important;\n    }\n\n    .d-xxl-table {\n        display: table !important;\n    }\n\n    .d-xxl-table-row {\n        display: table-row !important;\n    }\n\n    .d-xxl-table-cell {\n        display: table-cell !important;\n    }\n\n    .d-xxl-flex {\n        display: flex !important;\n    }\n\n    .d-xxl-inline-flex {\n        display: inline-flex !important;\n    }\n\n    .d-xxl-none {\n        display: none !important;\n    }\n\n    .flex-xxl-fill {\n        flex: 1 1 auto !important;\n    }\n\n    .flex-xxl-row {\n        flex-direction: row !important;\n    }\n\n    .flex-xxl-column {\n        flex-direction: column !important;\n    }\n\n    .flex-xxl-row-reverse {\n        flex-direction: row-reverse !important;\n    }\n\n    .flex-xxl-column-reverse {\n        flex-direction: column-reverse !important;\n    }\n\n    .flex-xxl-grow-0 {\n        flex-grow: 0 !important;\n    }\n\n    .flex-xxl-grow-1 {\n        flex-grow: 1 !important;\n    }\n\n    .flex-xxl-shrink-0 {\n        flex-shrink: 0 !important;\n    }\n\n    .flex-xxl-shrink-1 {\n        flex-shrink: 1 !important;\n    }\n\n    .flex-xxl-wrap {\n        flex-wrap: wrap !important;\n    }\n\n    .flex-xxl-nowrap {\n        flex-wrap: nowrap !important;\n    }\n\n    .flex-xxl-wrap-reverse {\n        flex-wrap: wrap-reverse !important;\n    }\n\n    .justify-content-xxl-start {\n        justify-content: flex-start !important;\n    }\n\n    .justify-content-xxl-end {\n        justify-content: flex-end !important;\n    }\n\n    .justify-content-xxl-center {\n        justify-content: center !important;\n    }\n\n    .justify-content-xxl-between {\n        justify-content: space-between !important;\n    }\n\n    .justify-content-xxl-around {\n        justify-content: space-around !important;\n    }\n\n    .justify-content-xxl-evenly {\n        justify-content: space-evenly !important;\n    }\n\n    .align-items-xxl-start {\n        align-items: flex-start !important;\n    }\n\n    .align-items-xxl-end {\n        align-items: flex-end !important;\n    }\n\n    .align-items-xxl-center {\n        align-items: center !important;\n    }\n\n    .align-items-xxl-baseline {\n        align-items: baseline !important;\n    }\n\n    .align-items-xxl-stretch {\n        align-items: stretch !important;\n    }\n\n    .align-content-xxl-start {\n        align-content: flex-start !important;\n    }\n\n    .align-content-xxl-end {\n        align-content: flex-end !important;\n    }\n\n    .align-content-xxl-center {\n        align-content: center !important;\n    }\n\n    .align-content-xxl-between {\n        align-content: space-between !important;\n    }\n\n    .align-content-xxl-around {\n        align-content: space-around !important;\n    }\n\n    .align-content-xxl-stretch {\n        align-content: stretch !important;\n    }\n\n    .align-self-xxl-auto {\n        align-self: auto !important;\n    }\n\n    .align-self-xxl-start {\n        align-self: flex-start !important;\n    }\n\n    .align-self-xxl-end {\n        align-self: flex-end !important;\n    }\n\n    .align-self-xxl-center {\n        align-self: center !important;\n    }\n\n    .align-self-xxl-baseline {\n        align-self: baseline !important;\n    }\n\n    .align-self-xxl-stretch {\n        align-self: stretch !important;\n    }\n\n    .order-xxl-first {\n        order: -1 !important;\n    }\n\n    .order-xxl-0 {\n        order: 0 !important;\n    }\n\n    .order-xxl-1 {\n        order: 1 !important;\n    }\n\n    .order-xxl-2 {\n        order: 2 !important;\n    }\n\n    .order-xxl-3 {\n        order: 3 !important;\n    }\n\n    .order-xxl-4 {\n        order: 4 !important;\n    }\n\n    .order-xxl-5 {\n        order: 5 !important;\n    }\n\n    .order-xxl-last {\n        order: 6 !important;\n    }\n\n    .m-xxl-0 {\n        margin: 0 !important;\n    }\n\n    .m-xxl-1 {\n        margin: 0.25rem !important;\n    }\n\n    .m-xxl-2 {\n        margin: 0.5rem !important;\n    }\n\n    .m-xxl-3 {\n        margin: 1rem !important;\n    }\n\n    .m-xxl-4 {\n        margin: 1.5rem !important;\n    }\n\n    .m-xxl-5 {\n        margin: 3rem !important;\n    }\n\n    .m-xxl-auto {\n        margin: auto !important;\n    }\n\n    .mx-xxl-0 {\n        margin-left: 0 !important;\n        margin-right: 0 !important;\n    }\n\n    .mx-xxl-1 {\n        margin-left: 0.25rem !important;\n        margin-right: 0.25rem !important;\n    }\n\n    .mx-xxl-2 {\n        margin-left: 0.5rem !important;\n        margin-right: 0.5rem !important;\n    }\n\n    .mx-xxl-3 {\n        margin-left: 1rem !important;\n        margin-right: 1rem !important;\n    }\n\n    .mx-xxl-4 {\n        margin-left: 1.5rem !important;\n        margin-right: 1.5rem !important;\n    }\n\n    .mx-xxl-5 {\n        margin-left: 3rem !important;\n        margin-right: 3rem !important;\n    }\n\n    .mx-xxl-auto {\n        margin-left: auto !important;\n        margin-right: auto !important;\n    }\n\n    .my-xxl-0 {\n        margin-top: 0 !important;\n        margin-bottom: 0 !important;\n    }\n\n    .my-xxl-1 {\n        margin-top: 0.25rem !important;\n        margin-bottom: 0.25rem !important;\n    }\n\n    .my-xxl-2 {\n        margin-top: 0.5rem !important;\n        margin-bottom: 0.5rem !important;\n    }\n\n    .my-xxl-3 {\n        margin-top: 1rem !important;\n        margin-bottom: 1rem !important;\n    }\n\n    .my-xxl-4 {\n        margin-top: 1.5rem !important;\n        margin-bottom: 1.5rem !important;\n    }\n\n    .my-xxl-5 {\n        margin-top: 3rem !important;\n        margin-bottom: 3rem !important;\n    }\n\n    .my-xxl-auto {\n        margin-top: auto !important;\n        margin-bottom: auto !important;\n    }\n\n    .mt-xxl-0 {\n        margin-top: 0 !important;\n    }\n\n    .mt-xxl-1 {\n        margin-top: 0.25rem !important;\n    }\n\n    .mt-xxl-2 {\n        margin-top: 0.5rem !important;\n    }\n\n    .mt-xxl-3 {\n        margin-top: 1rem !important;\n    }\n\n    .mt-xxl-4 {\n        margin-top: 1.5rem !important;\n    }\n\n    .mt-xxl-5 {\n        margin-top: 3rem !important;\n    }\n\n    .mt-xxl-auto {\n        margin-top: auto !important;\n    }\n\n    .me-xxl-0 {\n        margin-left: 0 !important;\n    }\n\n    .me-xxl-1 {\n        margin-left: 0.25rem !important;\n    }\n\n    .me-xxl-2 {\n        margin-left: 0.5rem !important;\n    }\n\n    .me-xxl-3 {\n        margin-left: 1rem !important;\n    }\n\n    .me-xxl-4 {\n        margin-left: 1.5rem !important;\n    }\n\n    .me-xxl-5 {\n        margin-left: 3rem !important;\n    }\n\n    .me-xxl-auto {\n        margin-left: auto !important;\n    }\n\n    .mb-xxl-0 {\n        margin-bottom: 0 !important;\n    }\n\n    .mb-xxl-1 {\n        margin-bottom: 0.25rem !important;\n    }\n\n    .mb-xxl-2 {\n        margin-bottom: 0.5rem !important;\n    }\n\n    .mb-xxl-3 {\n        margin-bottom: 1rem !important;\n    }\n\n    .mb-xxl-4 {\n        margin-bottom: 1.5rem !important;\n    }\n\n    .mb-xxl-5 {\n        margin-bottom: 3rem !important;\n    }\n\n    .mb-xxl-auto {\n        margin-bottom: auto !important;\n    }\n\n    .ms-xxl-0 {\n        margin-right: 0 !important;\n    }\n\n    .ms-xxl-1 {\n        margin-right: 0.25rem !important;\n    }\n\n    .ms-xxl-2 {\n        margin-right: 0.5rem !important;\n    }\n\n    .ms-xxl-3 {\n        margin-right: 1rem !important;\n    }\n\n    .ms-xxl-4 {\n        margin-right: 1.5rem !important;\n    }\n\n    .ms-xxl-5 {\n        margin-right: 3rem !important;\n    }\n\n    .ms-xxl-auto {\n        margin-right: auto !important;\n    }\n\n    .p-xxl-0 {\n        padding: 0 !important;\n    }\n\n    .p-xxl-1 {\n        padding: 0.25rem !important;\n    }\n\n    .p-xxl-2 {\n        padding: 0.5rem !important;\n    }\n\n    .p-xxl-3 {\n        padding: 1rem !important;\n    }\n\n    .p-xxl-4 {\n        padding: 1.5rem !important;\n    }\n\n    .p-xxl-5 {\n        padding: 3rem !important;\n    }\n\n    .px-xxl-0 {\n        padding-left: 0 !important;\n        padding-right: 0 !important;\n    }\n\n    .px-xxl-1 {\n        padding-left: 0.25rem !important;\n        padding-right: 0.25rem !important;\n    }\n\n    .px-xxl-2 {\n        padding-left: 0.5rem !important;\n        padding-right: 0.5rem !important;\n    }\n\n    .px-xxl-3 {\n        padding-left: 1rem !important;\n        padding-right: 1rem !important;\n    }\n\n    .px-xxl-4 {\n        padding-left: 1.5rem !important;\n        padding-right: 1.5rem !important;\n    }\n\n    .px-xxl-5 {\n        padding-left: 3rem !important;\n        padding-right: 3rem !important;\n    }\n\n    .py-xxl-0 {\n        padding-top: 0 !important;\n        padding-bottom: 0 !important;\n    }\n\n    .py-xxl-1 {\n        padding-top: 0.25rem !important;\n        padding-bottom: 0.25rem !important;\n    }\n\n    .py-xxl-2 {\n        padding-top: 0.5rem !important;\n        padding-bottom: 0.5rem !important;\n    }\n\n    .py-xxl-3 {\n        padding-top: 1rem !important;\n        padding-bottom: 1rem !important;\n    }\n\n    .py-xxl-4 {\n        padding-top: 1.5rem !important;\n        padding-bottom: 1.5rem !important;\n    }\n\n    .py-xxl-5 {\n        padding-top: 3rem !important;\n        padding-bottom: 3rem !important;\n    }\n\n    .pt-xxl-0 {\n        padding-top: 0 !important;\n    }\n\n    .pt-xxl-1 {\n        padding-top: 0.25rem !important;\n    }\n\n    .pt-xxl-2 {\n        padding-top: 0.5rem !important;\n    }\n\n    .pt-xxl-3 {\n        padding-top: 1rem !important;\n    }\n\n    .pt-xxl-4 {\n        padding-top: 1.5rem !important;\n    }\n\n    .pt-xxl-5 {\n        padding-top: 3rem !important;\n    }\n\n    .pe-xxl-0 {\n        padding-left: 0 !important;\n    }\n\n    .pe-xxl-1 {\n        padding-left: 0.25rem !important;\n    }\n\n    .pe-xxl-2 {\n        padding-left: 0.5rem !important;\n    }\n\n    .pe-xxl-3 {\n        padding-left: 1rem !important;\n    }\n\n    .pe-xxl-4 {\n        padding-left: 1.5rem !important;\n    }\n\n    .pe-xxl-5 {\n        padding-left: 3rem !important;\n    }\n\n    .pb-xxl-0 {\n        padding-bottom: 0 !important;\n    }\n\n    .pb-xxl-1 {\n        padding-bottom: 0.25rem !important;\n    }\n\n    .pb-xxl-2 {\n        padding-bottom: 0.5rem !important;\n    }\n\n    .pb-xxl-3 {\n        padding-bottom: 1rem !important;\n    }\n\n    .pb-xxl-4 {\n        padding-bottom: 1.5rem !important;\n    }\n\n    .pb-xxl-5 {\n        padding-bottom: 3rem !important;\n    }\n\n    .ps-xxl-0 {\n        padding-right: 0 !important;\n    }\n\n    .ps-xxl-1 {\n        padding-right: 0.25rem !important;\n    }\n\n    .ps-xxl-2 {\n        padding-right: 0.5rem !important;\n    }\n\n    .ps-xxl-3 {\n        padding-right: 1rem !important;\n    }\n\n    .ps-xxl-4 {\n        padding-right: 1.5rem !important;\n    }\n\n    .ps-xxl-5 {\n        padding-right: 3rem !important;\n    }\n\n    .gap-xxl-0 {\n        gap: 0 !important;\n    }\n\n    .gap-xxl-1 {\n        gap: 0.25rem !important;\n    }\n\n    .gap-xxl-2 {\n        gap: 0.5rem !important;\n    }\n\n    .gap-xxl-3 {\n        gap: 1rem !important;\n    }\n\n    .gap-xxl-4 {\n        gap: 1.5rem !important;\n    }\n\n    .gap-xxl-5 {\n        gap: 3rem !important;\n    }\n\n    .text-xxl-start {\n        text-align: right !important;\n    }\n\n    .text-xxl-end {\n        text-align: left !important;\n    }\n\n    .text-xxl-center {\n        text-align: center !important;\n    }\n}\n\n@media (min-width: 1200px) {\n    .fs-1 {\n        font-size: 2.5rem !important;\n    }\n\n    .fs-2 {\n        font-size: 2rem !important;\n    }\n\n    .fs-3 {\n        font-size: 1.75rem !important;\n    }\n\n    .fs-4 {\n        font-size: 1.5rem !important;\n    }\n}\n\n@media print {\n    .d-print-inline {\n        display: inline !important;\n    }\n\n    .d-print-inline-block {\n        display: inline-block !important;\n    }\n\n    .d-print-block {\n        display: block !important;\n    }\n\n    .d-print-grid {\n        display: grid !important;\n    }\n\n    .d-print-table {\n        display: table !important;\n    }\n\n    .d-print-table-row {\n        display: table-row !important;\n    }\n\n    .d-print-table-cell {\n        display: table-cell !important;\n    }\n\n    .d-print-flex {\n        display: flex !important;\n    }\n\n    .d-print-inline-flex {\n        display: inline-flex !important;\n    }\n\n    .d-print-none {\n        display: none !important;\n    }\n}\n\n/*# sourceMappingURL=bootstrap-utilities.rtl.css.map */"
  },
  {
    "path": "src/main/resources/web/css/bootstrap.css",
    "content": "@charset \"UTF-8\";\n/*!\n * Bootstrap  v5.2.3 (https://getbootstrap.com/)\n * Copyright 2011-2022 The Bootstrap Authors\n * Copyright 2011-2022 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n:root {\n    --bs-blue: #0d6efd;\n    --bs-indigo: #6610f2;\n    --bs-purple: #6f42c1;\n    --bs-pink: #d63384;\n    --bs-red: #dc3545;\n    --bs-orange: #fd7e14;\n    --bs-yellow: #ffc107;\n    --bs-green: #198754;\n    --bs-teal: #20c997;\n    --bs-cyan: #0dcaf0;\n    --bs-black: #000;\n    --bs-white: #fff;\n    --bs-gray: #6c757d;\n    --bs-gray-dark: #343a40;\n    --bs-gray-100: #f8f9fa;\n    --bs-gray-200: #e9ecef;\n    --bs-gray-300: #dee2e6;\n    --bs-gray-400: #ced4da;\n    --bs-gray-500: #adb5bd;\n    --bs-gray-600: #6c757d;\n    --bs-gray-700: #495057;\n    --bs-gray-800: #343a40;\n    --bs-gray-900: #212529;\n    --bs-primary: #0d6efd;\n    --bs-secondary: #6c757d;\n    --bs-success: #198754;\n    --bs-info: #0dcaf0;\n    --bs-warning: #ffc107;\n    --bs-danger: #dc3545;\n    --bs-light: #f8f9fa;\n    --bs-dark: #212529;\n    --bs-primary-rgb: 13, 110, 253;\n    --bs-secondary-rgb: 108, 117, 125;\n    --bs-success-rgb: 25, 135, 84;\n    --bs-info-rgb: 13, 202, 240;\n    --bs-warning-rgb: 255, 193, 7;\n    --bs-danger-rgb: 220, 53, 69;\n    --bs-light-rgb: 248, 249, 250;\n    --bs-dark-rgb: 33, 37, 41;\n    --bs-white-rgb: 255, 255, 255;\n    --bs-black-rgb: 0, 0, 0;\n    --bs-body-color-rgb: 33, 37, 41;\n    --bs-body-bg-rgb: 255, 255, 255;\n    --bs-font-sans-serif: system-ui, -apple-system, \"Segoe UI\", Roboto, \"Helvetica Neue\", \"Noto Sans\", \"Liberation Sans\", Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n    --bs-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n    --bs-gradient: linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));\n    --bs-body-font-family: var(--bs-font-sans-serif);\n    --bs-body-font-size: 1rem;\n    --bs-body-font-weight: 400;\n    --bs-body-line-height: 1.5;\n    --bs-body-color: #212529;\n    --bs-body-bg: #fff;\n    --bs-border-width: 1px;\n    --bs-border-style: solid;\n    --bs-border-color: #dee2e6;\n    --bs-border-color-translucent: rgba(0, 0, 0, 0.175);\n    --bs-border-radius: 0.375rem;\n    --bs-border-radius-sm: 0.25rem;\n    --bs-border-radius-lg: 0.5rem;\n    --bs-border-radius-xl: 1rem;\n    --bs-border-radius-2xl: 2rem;\n    --bs-border-radius-pill: 50rem;\n    --bs-link-color: #0d6efd;\n    --bs-link-hover-color: #0a58ca;\n    --bs-code-color: #d63384;\n    --bs-highlight-bg: #fff3cd;\n}\n\n*,\n*::before,\n*::after {\n    box-sizing: border-box;\n}\n\n@media (prefers-reduced-motion: no-preference) {\n    :root {\n        scroll-behavior: smooth;\n    }\n}\n\nbody {\n    margin: 0;\n    font-family: var(--bs-body-font-family);\n    font-size: var(--bs-body-font-size);\n    font-weight: var(--bs-body-font-weight);\n    line-height: var(--bs-body-line-height);\n    color: var(--bs-body-color);\n    text-align: var(--bs-body-text-align);\n    background-color: var(--bs-body-bg);\n    -webkit-text-size-adjust: 100%;\n    -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\n\nhr {\n    margin: 1rem 0;\n    color: inherit;\n    border: 0;\n    border-top: 1px solid;\n    opacity: 0.25;\n}\n\nh6, .h6, h5, .h5, h4, .h4, h3, .h3, h2, .h2, h1, .h1 {\n    margin-top: 0;\n    margin-bottom: 0.5rem;\n    font-weight: 500;\n    line-height: 1.2;\n}\n\nh1, .h1 {\n    font-size: calc(1.375rem + 1.5vw);\n}\n\n@media (min-width: 1200px) {\n    h1, .h1 {\n        font-size: 2.5rem;\n    }\n}\n\nh2, .h2 {\n    font-size: calc(1.325rem + 0.9vw);\n}\n\n@media (min-width: 1200px) {\n    h2, .h2 {\n        font-size: 2rem;\n    }\n}\n\nh3, .h3 {\n    font-size: calc(1.3rem + 0.6vw);\n}\n\n@media (min-width: 1200px) {\n    h3, .h3 {\n        font-size: 1.75rem;\n    }\n}\n\nh4, .h4 {\n    font-size: calc(1.275rem + 0.3vw);\n}\n\n@media (min-width: 1200px) {\n    h4, .h4 {\n        font-size: 1.5rem;\n    }\n}\n\nh5, .h5 {\n    font-size: 1.25rem;\n}\n\nh6, .h6 {\n    font-size: 1rem;\n}\n\np {\n    margin-top: 0;\n    margin-bottom: 1rem;\n}\n\nabbr[title] {\n    -webkit-text-decoration: underline dotted;\n    text-decoration: underline dotted;\n    cursor: help;\n    -webkit-text-decoration-skip-ink: none;\n    text-decoration-skip-ink: none;\n}\n\naddress {\n    margin-bottom: 1rem;\n    font-style: normal;\n    line-height: inherit;\n}\n\nol,\nul {\n    padding-left: 2rem;\n}\n\nol,\nul,\ndl {\n    margin-top: 0;\n    margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n    margin-bottom: 0;\n}\n\ndt {\n    font-weight: 700;\n}\n\ndd {\n    margin-bottom: 0.5rem;\n    margin-left: 0;\n}\n\nblockquote {\n    margin: 0 0 1rem;\n}\n\nb,\nstrong {\n    font-weight: bolder;\n}\n\nsmall, .small {\n    font-size: 0.875em;\n}\n\nmark, .mark {\n    padding: 0.1875em;\n    background-color: var(--bs-highlight-bg);\n}\n\nsub,\nsup {\n    position: relative;\n    font-size: 0.75em;\n    line-height: 0;\n    vertical-align: baseline;\n}\n\nsub {\n    bottom: -0.25em;\n}\n\nsup {\n    top: -0.5em;\n}\n\na {\n    color: var(--bs-link-color);\n    text-decoration: underline;\n}\n\na:hover {\n    color: var(--bs-link-hover-color);\n}\n\na:not([href]):not([class]), a:not([href]):not([class]):hover {\n    color: inherit;\n    text-decoration: none;\n}\n\npre,\ncode,\nkbd,\nsamp {\n    font-family: var(--bs-font-monospace);\n    font-size: 1em;\n}\n\npre {\n    display: block;\n    margin-top: 0;\n    margin-bottom: 1rem;\n    overflow: auto;\n    font-size: 0.875em;\n}\n\npre code {\n    font-size: inherit;\n    color: inherit;\n    word-break: normal;\n}\n\ncode {\n    font-size: 0.875em;\n    color: var(--bs-code-color);\n    word-wrap: break-word;\n}\n\na > code {\n    color: inherit;\n}\n\nkbd {\n    padding: 0.1875rem 0.375rem;\n    font-size: 0.875em;\n    color: var(--bs-body-bg);\n    background-color: var(--bs-body-color);\n    border-radius: 0.25rem;\n}\n\nkbd kbd {\n    padding: 0;\n    font-size: 1em;\n}\n\nfigure {\n    margin: 0 0 1rem;\n}\n\nimg,\nsvg {\n    vertical-align: middle;\n}\n\ntable {\n    caption-side: bottom;\n    border-collapse: collapse;\n}\n\ncaption {\n    padding-top: 0.5rem;\n    padding-bottom: 0.5rem;\n    color: #6c757d;\n    text-align: left;\n}\n\nth {\n    text-align: inherit;\n    text-align: -webkit-match-parent;\n}\n\nthead,\ntbody,\ntfoot,\ntr,\ntd,\nth {\n    border-color: inherit;\n    border-style: solid;\n    border-width: 0;\n}\n\nlabel {\n    display: inline-block;\n}\n\nbutton {\n    border-radius: 0;\n}\n\nbutton:focus:not(:focus-visible) {\n    outline: 0;\n}\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n    margin: 0;\n    font-family: inherit;\n    font-size: inherit;\n    line-height: inherit;\n}\n\nbutton,\nselect {\n    text-transform: none;\n}\n\n[role=button] {\n    cursor: pointer;\n}\n\nselect {\n    word-wrap: normal;\n}\n\nselect:disabled {\n    opacity: 1;\n}\n\n[list]:not([type=date]):not([type=datetime-local]):not([type=month]):not([type=week]):not([type=time])::-webkit-calendar-picker-indicator {\n    display: none !important;\n}\n\nbutton,\n[type=button],\n[type=reset],\n[type=submit] {\n    -webkit-appearance: button;\n}\n\nbutton:not(:disabled),\n[type=button]:not(:disabled),\n[type=reset]:not(:disabled),\n[type=submit]:not(:disabled) {\n    cursor: pointer;\n}\n\n::-moz-focus-inner {\n    padding: 0;\n    border-style: none;\n}\n\ntextarea {\n    resize: vertical;\n}\n\nfieldset {\n    min-width: 0;\n    padding: 0;\n    margin: 0;\n    border: 0;\n}\n\nlegend {\n    float: left;\n    width: 100%;\n    padding: 0;\n    margin-bottom: 0.5rem;\n    font-size: calc(1.275rem + 0.3vw);\n    line-height: inherit;\n}\n\n@media (min-width: 1200px) {\n    legend {\n        font-size: 1.5rem;\n    }\n}\n\nlegend + * {\n    clear: left;\n}\n\n::-webkit-datetime-edit-fields-wrapper,\n::-webkit-datetime-edit-text,\n::-webkit-datetime-edit-minute,\n::-webkit-datetime-edit-hour-field,\n::-webkit-datetime-edit-day-field,\n::-webkit-datetime-edit-month-field,\n::-webkit-datetime-edit-year-field {\n    padding: 0;\n}\n\n::-webkit-inner-spin-button {\n    height: auto;\n}\n\n[type=search] {\n    outline-offset: -2px;\n    -webkit-appearance: textfield;\n}\n\n/* rtl:raw:\n[type=\"tel\"],\n[type=\"url\"],\n[type=\"email\"],\n[type=\"number\"] {\n  direction: ltr;\n}\n*/\n::-webkit-search-decoration {\n    -webkit-appearance: none;\n}\n\n::-webkit-color-swatch-wrapper {\n    padding: 0;\n}\n\n::-webkit-file-upload-button {\n    font: inherit;\n    -webkit-appearance: button;\n}\n\n::file-selector-button {\n    font: inherit;\n    -webkit-appearance: button;\n}\n\noutput {\n    display: inline-block;\n}\n\niframe {\n    border: 0;\n}\n\nsummary {\n    display: list-item;\n    cursor: pointer;\n}\n\nprogress {\n    vertical-align: baseline;\n}\n\n[hidden] {\n    display: none !important;\n}\n\n.lead {\n    font-size: 1.25rem;\n    font-weight: 300;\n}\n\n.display-1 {\n    font-size: calc(1.625rem + 4.5vw);\n    font-weight: 300;\n    line-height: 1.2;\n}\n\n@media (min-width: 1200px) {\n    .display-1 {\n        font-size: 5rem;\n    }\n}\n\n.display-2 {\n    font-size: calc(1.575rem + 3.9vw);\n    font-weight: 300;\n    line-height: 1.2;\n}\n\n@media (min-width: 1200px) {\n    .display-2 {\n        font-size: 4.5rem;\n    }\n}\n\n.display-3 {\n    font-size: calc(1.525rem + 3.3vw);\n    font-weight: 300;\n    line-height: 1.2;\n}\n\n@media (min-width: 1200px) {\n    .display-3 {\n        font-size: 4rem;\n    }\n}\n\n.display-4 {\n    font-size: calc(1.475rem + 2.7vw);\n    font-weight: 300;\n    line-height: 1.2;\n}\n\n@media (min-width: 1200px) {\n    .display-4 {\n        font-size: 3.5rem;\n    }\n}\n\n.display-5 {\n    font-size: calc(1.425rem + 2.1vw);\n    font-weight: 300;\n    line-height: 1.2;\n}\n\n@media (min-width: 1200px) {\n    .display-5 {\n        font-size: 3rem;\n    }\n}\n\n.display-6 {\n    font-size: calc(1.375rem + 1.5vw);\n    font-weight: 300;\n    line-height: 1.2;\n}\n\n@media (min-width: 1200px) {\n    .display-6 {\n        font-size: 2.5rem;\n    }\n}\n\n.list-unstyled {\n    padding-left: 0;\n    list-style: none;\n}\n\n.list-inline {\n    padding-left: 0;\n    list-style: none;\n}\n\n.list-inline-item {\n    display: inline-block;\n}\n\n.list-inline-item:not(:last-child) {\n    margin-right: 0.5rem;\n}\n\n.initialism {\n    font-size: 0.875em;\n    text-transform: uppercase;\n}\n\n.blockquote {\n    margin-bottom: 1rem;\n    font-size: 1.25rem;\n}\n\n.blockquote > :last-child {\n    margin-bottom: 0;\n}\n\n.blockquote-footer {\n    margin-top: -1rem;\n    margin-bottom: 1rem;\n    font-size: 0.875em;\n    color: #6c757d;\n}\n\n.blockquote-footer::before {\n    content: \"— \";\n}\n\n.img-fluid {\n    max-width: 100%;\n    height: auto;\n}\n\n.img-thumbnail {\n    padding: 0.25rem;\n    background-color: #fff;\n    border: 1px solid var(--bs-border-color);\n    border-radius: 0.375rem;\n    max-width: 100%;\n    height: auto;\n}\n\n.figure {\n    display: inline-block;\n}\n\n.figure-img {\n    margin-bottom: 0.5rem;\n    line-height: 1;\n}\n\n.figure-caption {\n    font-size: 0.875em;\n    color: #6c757d;\n}\n\n.container,\n.container-fluid,\n.container-xxl,\n.container-xl,\n.container-lg,\n.container-md,\n.container-sm {\n    --bs-gutter-x: 1.5rem;\n    --bs-gutter-y: 0;\n    width: 100%;\n    padding-right: calc(var(--bs-gutter-x) * 0.5);\n    padding-left: calc(var(--bs-gutter-x) * 0.5);\n    margin-right: auto;\n    margin-left: auto;\n}\n\n@media (min-width: 576px) {\n    .container-sm, .container {\n        max-width: 540px;\n    }\n}\n\n@media (min-width: 768px) {\n    .container-md, .container-sm, .container {\n        max-width: 720px;\n    }\n}\n\n@media (min-width: 992px) {\n    .container-lg, .container-md, .container-sm, .container {\n        max-width: 960px;\n    }\n}\n\n@media (min-width: 1200px) {\n    .container-xl, .container-lg, .container-md, .container-sm, .container {\n        max-width: 1140px;\n    }\n}\n\n@media (min-width: 1400px) {\n    .container-xxl, .container-xl, .container-lg, .container-md, .container-sm, .container {\n        max-width: 1320px;\n    }\n}\n\n.row {\n    --bs-gutter-x: 1.5rem;\n    --bs-gutter-y: 0;\n    display: flex;\n    flex-wrap: wrap;\n    margin-top: calc(-1 * var(--bs-gutter-y));\n    margin-right: calc(-0.5 * var(--bs-gutter-x));\n    margin-left: calc(-0.5 * var(--bs-gutter-x));\n}\n\n.row > * {\n    flex-shrink: 0;\n    width: 100%;\n    max-width: 100%;\n    padding-right: calc(var(--bs-gutter-x) * 0.5);\n    padding-left: calc(var(--bs-gutter-x) * 0.5);\n    margin-top: var(--bs-gutter-y);\n}\n\n.col {\n    flex: 1 0 0%;\n}\n\n.row-cols-auto > * {\n    flex: 0 0 auto;\n    width: auto;\n}\n\n.row-cols-1 > * {\n    flex: 0 0 auto;\n    width: 100%;\n}\n\n.row-cols-2 > * {\n    flex: 0 0 auto;\n    width: 50%;\n}\n\n.row-cols-3 > * {\n    flex: 0 0 auto;\n    width: 33.3333333333%;\n}\n\n.row-cols-4 > * {\n    flex: 0 0 auto;\n    width: 25%;\n}\n\n.row-cols-5 > * {\n    flex: 0 0 auto;\n    width: 20%;\n}\n\n.row-cols-6 > * {\n    flex: 0 0 auto;\n    width: 16.6666666667%;\n}\n\n.col-auto {\n    flex: 0 0 auto;\n    width: auto;\n}\n\n.col-1 {\n    flex: 0 0 auto;\n    width: 8.33333333%;\n}\n\n.col-2 {\n    flex: 0 0 auto;\n    width: 16.66666667%;\n}\n\n.col-3 {\n    flex: 0 0 auto;\n    width: 25%;\n}\n\n.col-4 {\n    flex: 0 0 auto;\n    width: 33.33333333%;\n}\n\n.col-5 {\n    flex: 0 0 auto;\n    width: 41.66666667%;\n}\n\n.col-6 {\n    flex: 0 0 auto;\n    width: 50%;\n}\n\n.col-7 {\n    flex: 0 0 auto;\n    width: 58.33333333%;\n}\n\n.col-8 {\n    flex: 0 0 auto;\n    width: 66.66666667%;\n}\n\n.col-9 {\n    flex: 0 0 auto;\n    width: 75%;\n}\n\n.col-10 {\n    flex: 0 0 auto;\n    width: 83.33333333%;\n}\n\n.col-11 {\n    flex: 0 0 auto;\n    width: 91.66666667%;\n}\n\n.col-12 {\n    flex: 0 0 auto;\n    width: 100%;\n}\n\n.offset-1 {\n    margin-left: 8.33333333%;\n}\n\n.offset-2 {\n    margin-left: 16.66666667%;\n}\n\n.offset-3 {\n    margin-left: 25%;\n}\n\n.offset-4 {\n    margin-left: 33.33333333%;\n}\n\n.offset-5 {\n    margin-left: 41.66666667%;\n}\n\n.offset-6 {\n    margin-left: 50%;\n}\n\n.offset-7 {\n    margin-left: 58.33333333%;\n}\n\n.offset-8 {\n    margin-left: 66.66666667%;\n}\n\n.offset-9 {\n    margin-left: 75%;\n}\n\n.offset-10 {\n    margin-left: 83.33333333%;\n}\n\n.offset-11 {\n    margin-left: 91.66666667%;\n}\n\n.g-0,\n.gx-0 {\n    --bs-gutter-x: 0;\n}\n\n.g-0,\n.gy-0 {\n    --bs-gutter-y: 0;\n}\n\n.g-1,\n.gx-1 {\n    --bs-gutter-x: 0.25rem;\n}\n\n.g-1,\n.gy-1 {\n    --bs-gutter-y: 0.25rem;\n}\n\n.g-2,\n.gx-2 {\n    --bs-gutter-x: 0.5rem;\n}\n\n.g-2,\n.gy-2 {\n    --bs-gutter-y: 0.5rem;\n}\n\n.g-3,\n.gx-3 {\n    --bs-gutter-x: 1rem;\n}\n\n.g-3,\n.gy-3 {\n    --bs-gutter-y: 1rem;\n}\n\n.g-4,\n.gx-4 {\n    --bs-gutter-x: 1.5rem;\n}\n\n.g-4,\n.gy-4 {\n    --bs-gutter-y: 1.5rem;\n}\n\n.g-5,\n.gx-5 {\n    --bs-gutter-x: 3rem;\n}\n\n.g-5,\n.gy-5 {\n    --bs-gutter-y: 3rem;\n}\n\n@media (min-width: 576px) {\n    .col-sm {\n        flex: 1 0 0%;\n    }\n\n    .row-cols-sm-auto > * {\n        flex: 0 0 auto;\n        width: auto;\n    }\n\n    .row-cols-sm-1 > * {\n        flex: 0 0 auto;\n        width: 100%;\n    }\n\n    .row-cols-sm-2 > * {\n        flex: 0 0 auto;\n        width: 50%;\n    }\n\n    .row-cols-sm-3 > * {\n        flex: 0 0 auto;\n        width: 33.3333333333%;\n    }\n\n    .row-cols-sm-4 > * {\n        flex: 0 0 auto;\n        width: 25%;\n    }\n\n    .row-cols-sm-5 > * {\n        flex: 0 0 auto;\n        width: 20%;\n    }\n\n    .row-cols-sm-6 > * {\n        flex: 0 0 auto;\n        width: 16.6666666667%;\n    }\n\n    .col-sm-auto {\n        flex: 0 0 auto;\n        width: auto;\n    }\n\n    .col-sm-1 {\n        flex: 0 0 auto;\n        width: 8.33333333%;\n    }\n\n    .col-sm-2 {\n        flex: 0 0 auto;\n        width: 16.66666667%;\n    }\n\n    .col-sm-3 {\n        flex: 0 0 auto;\n        width: 25%;\n    }\n\n    .col-sm-4 {\n        flex: 0 0 auto;\n        width: 33.33333333%;\n    }\n\n    .col-sm-5 {\n        flex: 0 0 auto;\n        width: 41.66666667%;\n    }\n\n    .col-sm-6 {\n        flex: 0 0 auto;\n        width: 50%;\n    }\n\n    .col-sm-7 {\n        flex: 0 0 auto;\n        width: 58.33333333%;\n    }\n\n    .col-sm-8 {\n        flex: 0 0 auto;\n        width: 66.66666667%;\n    }\n\n    .col-sm-9 {\n        flex: 0 0 auto;\n        width: 75%;\n    }\n\n    .col-sm-10 {\n        flex: 0 0 auto;\n        width: 83.33333333%;\n    }\n\n    .col-sm-11 {\n        flex: 0 0 auto;\n        width: 91.66666667%;\n    }\n\n    .col-sm-12 {\n        flex: 0 0 auto;\n        width: 100%;\n    }\n\n    .offset-sm-0 {\n        margin-left: 0;\n    }\n\n    .offset-sm-1 {\n        margin-left: 8.33333333%;\n    }\n\n    .offset-sm-2 {\n        margin-left: 16.66666667%;\n    }\n\n    .offset-sm-3 {\n        margin-left: 25%;\n    }\n\n    .offset-sm-4 {\n        margin-left: 33.33333333%;\n    }\n\n    .offset-sm-5 {\n        margin-left: 41.66666667%;\n    }\n\n    .offset-sm-6 {\n        margin-left: 50%;\n    }\n\n    .offset-sm-7 {\n        margin-left: 58.33333333%;\n    }\n\n    .offset-sm-8 {\n        margin-left: 66.66666667%;\n    }\n\n    .offset-sm-9 {\n        margin-left: 75%;\n    }\n\n    .offset-sm-10 {\n        margin-left: 83.33333333%;\n    }\n\n    .offset-sm-11 {\n        margin-left: 91.66666667%;\n    }\n\n    .g-sm-0,\n    .gx-sm-0 {\n        --bs-gutter-x: 0;\n    }\n\n    .g-sm-0,\n    .gy-sm-0 {\n        --bs-gutter-y: 0;\n    }\n\n    .g-sm-1,\n    .gx-sm-1 {\n        --bs-gutter-x: 0.25rem;\n    }\n\n    .g-sm-1,\n    .gy-sm-1 {\n        --bs-gutter-y: 0.25rem;\n    }\n\n    .g-sm-2,\n    .gx-sm-2 {\n        --bs-gutter-x: 0.5rem;\n    }\n\n    .g-sm-2,\n    .gy-sm-2 {\n        --bs-gutter-y: 0.5rem;\n    }\n\n    .g-sm-3,\n    .gx-sm-3 {\n        --bs-gutter-x: 1rem;\n    }\n\n    .g-sm-3,\n    .gy-sm-3 {\n        --bs-gutter-y: 1rem;\n    }\n\n    .g-sm-4,\n    .gx-sm-4 {\n        --bs-gutter-x: 1.5rem;\n    }\n\n    .g-sm-4,\n    .gy-sm-4 {\n        --bs-gutter-y: 1.5rem;\n    }\n\n    .g-sm-5,\n    .gx-sm-5 {\n        --bs-gutter-x: 3rem;\n    }\n\n    .g-sm-5,\n    .gy-sm-5 {\n        --bs-gutter-y: 3rem;\n    }\n}\n\n@media (min-width: 768px) {\n    .col-md {\n        flex: 1 0 0%;\n    }\n\n    .row-cols-md-auto > * {\n        flex: 0 0 auto;\n        width: auto;\n    }\n\n    .row-cols-md-1 > * {\n        flex: 0 0 auto;\n        width: 100%;\n    }\n\n    .row-cols-md-2 > * {\n        flex: 0 0 auto;\n        width: 50%;\n    }\n\n    .row-cols-md-3 > * {\n        flex: 0 0 auto;\n        width: 33.3333333333%;\n    }\n\n    .row-cols-md-4 > * {\n        flex: 0 0 auto;\n        width: 25%;\n    }\n\n    .row-cols-md-5 > * {\n        flex: 0 0 auto;\n        width: 20%;\n    }\n\n    .row-cols-md-6 > * {\n        flex: 0 0 auto;\n        width: 16.6666666667%;\n    }\n\n    .col-md-auto {\n        flex: 0 0 auto;\n        width: auto;\n    }\n\n    .col-md-1 {\n        flex: 0 0 auto;\n        width: 8.33333333%;\n    }\n\n    .col-md-2 {\n        flex: 0 0 auto;\n        width: 16.66666667%;\n    }\n\n    .col-md-3 {\n        flex: 0 0 auto;\n        width: 25%;\n    }\n\n    .col-md-4 {\n        flex: 0 0 auto;\n        width: 33.33333333%;\n    }\n\n    .col-md-5 {\n        flex: 0 0 auto;\n        width: 41.66666667%;\n    }\n\n    .col-md-6 {\n        flex: 0 0 auto;\n        width: 50%;\n    }\n\n    .col-md-7 {\n        flex: 0 0 auto;\n        width: 58.33333333%;\n    }\n\n    .col-md-8 {\n        flex: 0 0 auto;\n        width: 66.66666667%;\n    }\n\n    .col-md-9 {\n        flex: 0 0 auto;\n        width: 75%;\n    }\n\n    .col-md-10 {\n        flex: 0 0 auto;\n        width: 83.33333333%;\n    }\n\n    .col-md-11 {\n        flex: 0 0 auto;\n        width: 91.66666667%;\n    }\n\n    .col-md-12 {\n        flex: 0 0 auto;\n        width: 100%;\n    }\n\n    .offset-md-0 {\n        margin-left: 0;\n    }\n\n    .offset-md-1 {\n        margin-left: 8.33333333%;\n    }\n\n    .offset-md-2 {\n        margin-left: 16.66666667%;\n    }\n\n    .offset-md-3 {\n        margin-left: 25%;\n    }\n\n    .offset-md-4 {\n        margin-left: 33.33333333%;\n    }\n\n    .offset-md-5 {\n        margin-left: 41.66666667%;\n    }\n\n    .offset-md-6 {\n        margin-left: 50%;\n    }\n\n    .offset-md-7 {\n        margin-left: 58.33333333%;\n    }\n\n    .offset-md-8 {\n        margin-left: 66.66666667%;\n    }\n\n    .offset-md-9 {\n        margin-left: 75%;\n    }\n\n    .offset-md-10 {\n        margin-left: 83.33333333%;\n    }\n\n    .offset-md-11 {\n        margin-left: 91.66666667%;\n    }\n\n    .g-md-0,\n    .gx-md-0 {\n        --bs-gutter-x: 0;\n    }\n\n    .g-md-0,\n    .gy-md-0 {\n        --bs-gutter-y: 0;\n    }\n\n    .g-md-1,\n    .gx-md-1 {\n        --bs-gutter-x: 0.25rem;\n    }\n\n    .g-md-1,\n    .gy-md-1 {\n        --bs-gutter-y: 0.25rem;\n    }\n\n    .g-md-2,\n    .gx-md-2 {\n        --bs-gutter-x: 0.5rem;\n    }\n\n    .g-md-2,\n    .gy-md-2 {\n        --bs-gutter-y: 0.5rem;\n    }\n\n    .g-md-3,\n    .gx-md-3 {\n        --bs-gutter-x: 1rem;\n    }\n\n    .g-md-3,\n    .gy-md-3 {\n        --bs-gutter-y: 1rem;\n    }\n\n    .g-md-4,\n    .gx-md-4 {\n        --bs-gutter-x: 1.5rem;\n    }\n\n    .g-md-4,\n    .gy-md-4 {\n        --bs-gutter-y: 1.5rem;\n    }\n\n    .g-md-5,\n    .gx-md-5 {\n        --bs-gutter-x: 3rem;\n    }\n\n    .g-md-5,\n    .gy-md-5 {\n        --bs-gutter-y: 3rem;\n    }\n}\n\n@media (min-width: 992px) {\n    .col-lg {\n        flex: 1 0 0%;\n    }\n\n    .row-cols-lg-auto > * {\n        flex: 0 0 auto;\n        width: auto;\n    }\n\n    .row-cols-lg-1 > * {\n        flex: 0 0 auto;\n        width: 100%;\n    }\n\n    .row-cols-lg-2 > * {\n        flex: 0 0 auto;\n        width: 50%;\n    }\n\n    .row-cols-lg-3 > * {\n        flex: 0 0 auto;\n        width: 33.3333333333%;\n    }\n\n    .row-cols-lg-4 > * {\n        flex: 0 0 auto;\n        width: 25%;\n    }\n\n    .row-cols-lg-5 > * {\n        flex: 0 0 auto;\n        width: 20%;\n    }\n\n    .row-cols-lg-6 > * {\n        flex: 0 0 auto;\n        width: 16.6666666667%;\n    }\n\n    .col-lg-auto {\n        flex: 0 0 auto;\n        width: auto;\n    }\n\n    .col-lg-1 {\n        flex: 0 0 auto;\n        width: 8.33333333%;\n    }\n\n    .col-lg-2 {\n        flex: 0 0 auto;\n        width: 16.66666667%;\n    }\n\n    .col-lg-3 {\n        flex: 0 0 auto;\n        width: 25%;\n    }\n\n    .col-lg-4 {\n        flex: 0 0 auto;\n        width: 33.33333333%;\n    }\n\n    .col-lg-5 {\n        flex: 0 0 auto;\n        width: 41.66666667%;\n    }\n\n    .col-lg-6 {\n        flex: 0 0 auto;\n        width: 50%;\n    }\n\n    .col-lg-7 {\n        flex: 0 0 auto;\n        width: 58.33333333%;\n    }\n\n    .col-lg-8 {\n        flex: 0 0 auto;\n        width: 66.66666667%;\n    }\n\n    .col-lg-9 {\n        flex: 0 0 auto;\n        width: 75%;\n    }\n\n    .col-lg-10 {\n        flex: 0 0 auto;\n        width: 83.33333333%;\n    }\n\n    .col-lg-11 {\n        flex: 0 0 auto;\n        width: 91.66666667%;\n    }\n\n    .col-lg-12 {\n        flex: 0 0 auto;\n        width: 100%;\n    }\n\n    .offset-lg-0 {\n        margin-left: 0;\n    }\n\n    .offset-lg-1 {\n        margin-left: 8.33333333%;\n    }\n\n    .offset-lg-2 {\n        margin-left: 16.66666667%;\n    }\n\n    .offset-lg-3 {\n        margin-left: 25%;\n    }\n\n    .offset-lg-4 {\n        margin-left: 33.33333333%;\n    }\n\n    .offset-lg-5 {\n        margin-left: 41.66666667%;\n    }\n\n    .offset-lg-6 {\n        margin-left: 50%;\n    }\n\n    .offset-lg-7 {\n        margin-left: 58.33333333%;\n    }\n\n    .offset-lg-8 {\n        margin-left: 66.66666667%;\n    }\n\n    .offset-lg-9 {\n        margin-left: 75%;\n    }\n\n    .offset-lg-10 {\n        margin-left: 83.33333333%;\n    }\n\n    .offset-lg-11 {\n        margin-left: 91.66666667%;\n    }\n\n    .g-lg-0,\n    .gx-lg-0 {\n        --bs-gutter-x: 0;\n    }\n\n    .g-lg-0,\n    .gy-lg-0 {\n        --bs-gutter-y: 0;\n    }\n\n    .g-lg-1,\n    .gx-lg-1 {\n        --bs-gutter-x: 0.25rem;\n    }\n\n    .g-lg-1,\n    .gy-lg-1 {\n        --bs-gutter-y: 0.25rem;\n    }\n\n    .g-lg-2,\n    .gx-lg-2 {\n        --bs-gutter-x: 0.5rem;\n    }\n\n    .g-lg-2,\n    .gy-lg-2 {\n        --bs-gutter-y: 0.5rem;\n    }\n\n    .g-lg-3,\n    .gx-lg-3 {\n        --bs-gutter-x: 1rem;\n    }\n\n    .g-lg-3,\n    .gy-lg-3 {\n        --bs-gutter-y: 1rem;\n    }\n\n    .g-lg-4,\n    .gx-lg-4 {\n        --bs-gutter-x: 1.5rem;\n    }\n\n    .g-lg-4,\n    .gy-lg-4 {\n        --bs-gutter-y: 1.5rem;\n    }\n\n    .g-lg-5,\n    .gx-lg-5 {\n        --bs-gutter-x: 3rem;\n    }\n\n    .g-lg-5,\n    .gy-lg-5 {\n        --bs-gutter-y: 3rem;\n    }\n}\n\n@media (min-width: 1200px) {\n    .col-xl {\n        flex: 1 0 0%;\n    }\n\n    .row-cols-xl-auto > * {\n        flex: 0 0 auto;\n        width: auto;\n    }\n\n    .row-cols-xl-1 > * {\n        flex: 0 0 auto;\n        width: 100%;\n    }\n\n    .row-cols-xl-2 > * {\n        flex: 0 0 auto;\n        width: 50%;\n    }\n\n    .row-cols-xl-3 > * {\n        flex: 0 0 auto;\n        width: 33.3333333333%;\n    }\n\n    .row-cols-xl-4 > * {\n        flex: 0 0 auto;\n        width: 25%;\n    }\n\n    .row-cols-xl-5 > * {\n        flex: 0 0 auto;\n        width: 20%;\n    }\n\n    .row-cols-xl-6 > * {\n        flex: 0 0 auto;\n        width: 16.6666666667%;\n    }\n\n    .col-xl-auto {\n        flex: 0 0 auto;\n        width: auto;\n    }\n\n    .col-xl-1 {\n        flex: 0 0 auto;\n        width: 8.33333333%;\n    }\n\n    .col-xl-2 {\n        flex: 0 0 auto;\n        width: 16.66666667%;\n    }\n\n    .col-xl-3 {\n        flex: 0 0 auto;\n        width: 25%;\n    }\n\n    .col-xl-4 {\n        flex: 0 0 auto;\n        width: 33.33333333%;\n    }\n\n    .col-xl-5 {\n        flex: 0 0 auto;\n        width: 41.66666667%;\n    }\n\n    .col-xl-6 {\n        flex: 0 0 auto;\n        width: 50%;\n    }\n\n    .col-xl-7 {\n        flex: 0 0 auto;\n        width: 58.33333333%;\n    }\n\n    .col-xl-8 {\n        flex: 0 0 auto;\n        width: 66.66666667%;\n    }\n\n    .col-xl-9 {\n        flex: 0 0 auto;\n        width: 75%;\n    }\n\n    .col-xl-10 {\n        flex: 0 0 auto;\n        width: 83.33333333%;\n    }\n\n    .col-xl-11 {\n        flex: 0 0 auto;\n        width: 91.66666667%;\n    }\n\n    .col-xl-12 {\n        flex: 0 0 auto;\n        width: 100%;\n    }\n\n    .offset-xl-0 {\n        margin-left: 0;\n    }\n\n    .offset-xl-1 {\n        margin-left: 8.33333333%;\n    }\n\n    .offset-xl-2 {\n        margin-left: 16.66666667%;\n    }\n\n    .offset-xl-3 {\n        margin-left: 25%;\n    }\n\n    .offset-xl-4 {\n        margin-left: 33.33333333%;\n    }\n\n    .offset-xl-5 {\n        margin-left: 41.66666667%;\n    }\n\n    .offset-xl-6 {\n        margin-left: 50%;\n    }\n\n    .offset-xl-7 {\n        margin-left: 58.33333333%;\n    }\n\n    .offset-xl-8 {\n        margin-left: 66.66666667%;\n    }\n\n    .offset-xl-9 {\n        margin-left: 75%;\n    }\n\n    .offset-xl-10 {\n        margin-left: 83.33333333%;\n    }\n\n    .offset-xl-11 {\n        margin-left: 91.66666667%;\n    }\n\n    .g-xl-0,\n    .gx-xl-0 {\n        --bs-gutter-x: 0;\n    }\n\n    .g-xl-0,\n    .gy-xl-0 {\n        --bs-gutter-y: 0;\n    }\n\n    .g-xl-1,\n    .gx-xl-1 {\n        --bs-gutter-x: 0.25rem;\n    }\n\n    .g-xl-1,\n    .gy-xl-1 {\n        --bs-gutter-y: 0.25rem;\n    }\n\n    .g-xl-2,\n    .gx-xl-2 {\n        --bs-gutter-x: 0.5rem;\n    }\n\n    .g-xl-2,\n    .gy-xl-2 {\n        --bs-gutter-y: 0.5rem;\n    }\n\n    .g-xl-3,\n    .gx-xl-3 {\n        --bs-gutter-x: 1rem;\n    }\n\n    .g-xl-3,\n    .gy-xl-3 {\n        --bs-gutter-y: 1rem;\n    }\n\n    .g-xl-4,\n    .gx-xl-4 {\n        --bs-gutter-x: 1.5rem;\n    }\n\n    .g-xl-4,\n    .gy-xl-4 {\n        --bs-gutter-y: 1.5rem;\n    }\n\n    .g-xl-5,\n    .gx-xl-5 {\n        --bs-gutter-x: 3rem;\n    }\n\n    .g-xl-5,\n    .gy-xl-5 {\n        --bs-gutter-y: 3rem;\n    }\n}\n\n@media (min-width: 1400px) {\n    .col-xxl {\n        flex: 1 0 0%;\n    }\n\n    .row-cols-xxl-auto > * {\n        flex: 0 0 auto;\n        width: auto;\n    }\n\n    .row-cols-xxl-1 > * {\n        flex: 0 0 auto;\n        width: 100%;\n    }\n\n    .row-cols-xxl-2 > * {\n        flex: 0 0 auto;\n        width: 50%;\n    }\n\n    .row-cols-xxl-3 > * {\n        flex: 0 0 auto;\n        width: 33.3333333333%;\n    }\n\n    .row-cols-xxl-4 > * {\n        flex: 0 0 auto;\n        width: 25%;\n    }\n\n    .row-cols-xxl-5 > * {\n        flex: 0 0 auto;\n        width: 20%;\n    }\n\n    .row-cols-xxl-6 > * {\n        flex: 0 0 auto;\n        width: 16.6666666667%;\n    }\n\n    .col-xxl-auto {\n        flex: 0 0 auto;\n        width: auto;\n    }\n\n    .col-xxl-1 {\n        flex: 0 0 auto;\n        width: 8.33333333%;\n    }\n\n    .col-xxl-2 {\n        flex: 0 0 auto;\n        width: 16.66666667%;\n    }\n\n    .col-xxl-3 {\n        flex: 0 0 auto;\n        width: 25%;\n    }\n\n    .col-xxl-4 {\n        flex: 0 0 auto;\n        width: 33.33333333%;\n    }\n\n    .col-xxl-5 {\n        flex: 0 0 auto;\n        width: 41.66666667%;\n    }\n\n    .col-xxl-6 {\n        flex: 0 0 auto;\n        width: 50%;\n    }\n\n    .col-xxl-7 {\n        flex: 0 0 auto;\n        width: 58.33333333%;\n    }\n\n    .col-xxl-8 {\n        flex: 0 0 auto;\n        width: 66.66666667%;\n    }\n\n    .col-xxl-9 {\n        flex: 0 0 auto;\n        width: 75%;\n    }\n\n    .col-xxl-10 {\n        flex: 0 0 auto;\n        width: 83.33333333%;\n    }\n\n    .col-xxl-11 {\n        flex: 0 0 auto;\n        width: 91.66666667%;\n    }\n\n    .col-xxl-12 {\n        flex: 0 0 auto;\n        width: 100%;\n    }\n\n    .offset-xxl-0 {\n        margin-left: 0;\n    }\n\n    .offset-xxl-1 {\n        margin-left: 8.33333333%;\n    }\n\n    .offset-xxl-2 {\n        margin-left: 16.66666667%;\n    }\n\n    .offset-xxl-3 {\n        margin-left: 25%;\n    }\n\n    .offset-xxl-4 {\n        margin-left: 33.33333333%;\n    }\n\n    .offset-xxl-5 {\n        margin-left: 41.66666667%;\n    }\n\n    .offset-xxl-6 {\n        margin-left: 50%;\n    }\n\n    .offset-xxl-7 {\n        margin-left: 58.33333333%;\n    }\n\n    .offset-xxl-8 {\n        margin-left: 66.66666667%;\n    }\n\n    .offset-xxl-9 {\n        margin-left: 75%;\n    }\n\n    .offset-xxl-10 {\n        margin-left: 83.33333333%;\n    }\n\n    .offset-xxl-11 {\n        margin-left: 91.66666667%;\n    }\n\n    .g-xxl-0,\n    .gx-xxl-0 {\n        --bs-gutter-x: 0;\n    }\n\n    .g-xxl-0,\n    .gy-xxl-0 {\n        --bs-gutter-y: 0;\n    }\n\n    .g-xxl-1,\n    .gx-xxl-1 {\n        --bs-gutter-x: 0.25rem;\n    }\n\n    .g-xxl-1,\n    .gy-xxl-1 {\n        --bs-gutter-y: 0.25rem;\n    }\n\n    .g-xxl-2,\n    .gx-xxl-2 {\n        --bs-gutter-x: 0.5rem;\n    }\n\n    .g-xxl-2,\n    .gy-xxl-2 {\n        --bs-gutter-y: 0.5rem;\n    }\n\n    .g-xxl-3,\n    .gx-xxl-3 {\n        --bs-gutter-x: 1rem;\n    }\n\n    .g-xxl-3,\n    .gy-xxl-3 {\n        --bs-gutter-y: 1rem;\n    }\n\n    .g-xxl-4,\n    .gx-xxl-4 {\n        --bs-gutter-x: 1.5rem;\n    }\n\n    .g-xxl-4,\n    .gy-xxl-4 {\n        --bs-gutter-y: 1.5rem;\n    }\n\n    .g-xxl-5,\n    .gx-xxl-5 {\n        --bs-gutter-x: 3rem;\n    }\n\n    .g-xxl-5,\n    .gy-xxl-5 {\n        --bs-gutter-y: 3rem;\n    }\n}\n\n.table {\n    --bs-table-color: var(--bs-body-color);\n    --bs-table-bg: transparent;\n    --bs-table-border-color: var(--bs-border-color);\n    --bs-table-accent-bg: transparent;\n    --bs-table-striped-color: var(--bs-body-color);\n    --bs-table-striped-bg: rgba(0, 0, 0, 0.05);\n    --bs-table-active-color: var(--bs-body-color);\n    --bs-table-active-bg: rgba(0, 0, 0, 0.1);\n    --bs-table-hover-color: var(--bs-body-color);\n    --bs-table-hover-bg: rgba(0, 0, 0, 0.075);\n    width: 100%;\n    margin-bottom: 1rem;\n    color: var(--bs-table-color);\n    vertical-align: top;\n    border-color: var(--bs-table-border-color);\n}\n\n.table > :not(caption) > * > * {\n    padding: 0.5rem 0.5rem;\n    background-color: var(--bs-table-bg);\n    border-bottom-width: 1px;\n    box-shadow: inset 0 0 0 9999px var(--bs-table-accent-bg);\n}\n\n.table > tbody {\n    vertical-align: inherit;\n}\n\n.table > thead {\n    vertical-align: bottom;\n}\n\n.table-group-divider {\n    border-top: 2px solid currentcolor;\n}\n\n.caption-top {\n    caption-side: top;\n}\n\n.table-sm > :not(caption) > * > * {\n    padding: 0.25rem 0.25rem;\n}\n\n.table-bordered > :not(caption) > * {\n    border-width: 1px 0;\n}\n\n.table-bordered > :not(caption) > * > * {\n    border-width: 0 1px;\n}\n\n.table-borderless > :not(caption) > * > * {\n    border-bottom-width: 0;\n}\n\n.table-borderless > :not(:first-child) {\n    border-top-width: 0;\n}\n\n.table-striped > tbody > tr:nth-of-type(odd) > * {\n    --bs-table-accent-bg: var(--bs-table-striped-bg);\n    color: var(--bs-table-striped-color);\n}\n\n.table-striped-columns > :not(caption) > tr > :nth-child(even) {\n    --bs-table-accent-bg: var(--bs-table-striped-bg);\n    color: var(--bs-table-striped-color);\n}\n\n.table-active {\n    --bs-table-accent-bg: var(--bs-table-active-bg);\n    color: var(--bs-table-active-color);\n}\n\n.table-hover > tbody > tr:hover > * {\n    --bs-table-accent-bg: var(--bs-table-hover-bg);\n    color: var(--bs-table-hover-color);\n}\n\n.table-primary {\n    --bs-table-color: #000;\n    --bs-table-bg: #cfe2ff;\n    --bs-table-border-color: #bacbe6;\n    --bs-table-striped-bg: #c5d7f2;\n    --bs-table-striped-color: #000;\n    --bs-table-active-bg: #bacbe6;\n    --bs-table-active-color: #000;\n    --bs-table-hover-bg: #bfd1ec;\n    --bs-table-hover-color: #000;\n    color: var(--bs-table-color);\n    border-color: var(--bs-table-border-color);\n}\n\n.table-secondary {\n    --bs-table-color: #000;\n    --bs-table-bg: #e2e3e5;\n    --bs-table-border-color: #cbccce;\n    --bs-table-striped-bg: #d7d8da;\n    --bs-table-striped-color: #000;\n    --bs-table-active-bg: #cbccce;\n    --bs-table-active-color: #000;\n    --bs-table-hover-bg: #d1d2d4;\n    --bs-table-hover-color: #000;\n    color: var(--bs-table-color);\n    border-color: var(--bs-table-border-color);\n}\n\n.table-success {\n    --bs-table-color: #000;\n    --bs-table-bg: #d1e7dd;\n    --bs-table-border-color: #bcd0c7;\n    --bs-table-striped-bg: #c7dbd2;\n    --bs-table-striped-color: #000;\n    --bs-table-active-bg: #bcd0c7;\n    --bs-table-active-color: #000;\n    --bs-table-hover-bg: #c1d6cc;\n    --bs-table-hover-color: #000;\n    color: var(--bs-table-color);\n    border-color: var(--bs-table-border-color);\n}\n\n.table-info {\n    --bs-table-color: #000;\n    --bs-table-bg: #cff4fc;\n    --bs-table-border-color: #badce3;\n    --bs-table-striped-bg: #c5e8ef;\n    --bs-table-striped-color: #000;\n    --bs-table-active-bg: #badce3;\n    --bs-table-active-color: #000;\n    --bs-table-hover-bg: #bfe2e9;\n    --bs-table-hover-color: #000;\n    color: var(--bs-table-color);\n    border-color: var(--bs-table-border-color);\n}\n\n.table-warning {\n    --bs-table-color: #000;\n    --bs-table-bg: #fff3cd;\n    --bs-table-border-color: #e6dbb9;\n    --bs-table-striped-bg: #f2e7c3;\n    --bs-table-striped-color: #000;\n    --bs-table-active-bg: #e6dbb9;\n    --bs-table-active-color: #000;\n    --bs-table-hover-bg: #ece1be;\n    --bs-table-hover-color: #000;\n    color: var(--bs-table-color);\n    border-color: var(--bs-table-border-color);\n}\n\n.table-danger {\n    --bs-table-color: #000;\n    --bs-table-bg: #f8d7da;\n    --bs-table-border-color: #dfc2c4;\n    --bs-table-striped-bg: #eccccf;\n    --bs-table-striped-color: #000;\n    --bs-table-active-bg: #dfc2c4;\n    --bs-table-active-color: #000;\n    --bs-table-hover-bg: #e5c7ca;\n    --bs-table-hover-color: #000;\n    color: var(--bs-table-color);\n    border-color: var(--bs-table-border-color);\n}\n\n.table-light {\n    --bs-table-color: #000;\n    --bs-table-bg: #f8f9fa;\n    --bs-table-border-color: #dfe0e1;\n    --bs-table-striped-bg: #ecedee;\n    --bs-table-striped-color: #000;\n    --bs-table-active-bg: #dfe0e1;\n    --bs-table-active-color: #000;\n    --bs-table-hover-bg: #e5e6e7;\n    --bs-table-hover-color: #000;\n    color: var(--bs-table-color);\n    border-color: var(--bs-table-border-color);\n}\n\n.table-dark {\n    --bs-table-color: #fff;\n    --bs-table-bg: #212529;\n    --bs-table-border-color: #373b3e;\n    --bs-table-striped-bg: #2c3034;\n    --bs-table-striped-color: #fff;\n    --bs-table-active-bg: #373b3e;\n    --bs-table-active-color: #fff;\n    --bs-table-hover-bg: #323539;\n    --bs-table-hover-color: #fff;\n    color: var(--bs-table-color);\n    border-color: var(--bs-table-border-color);\n}\n\n.table-responsive {\n    overflow-x: auto;\n    -webkit-overflow-scrolling: touch;\n}\n\n@media (max-width: 575.98px) {\n    .table-responsive-sm {\n        overflow-x: auto;\n        -webkit-overflow-scrolling: touch;\n    }\n}\n\n@media (max-width: 767.98px) {\n    .table-responsive-md {\n        overflow-x: auto;\n        -webkit-overflow-scrolling: touch;\n    }\n}\n\n@media (max-width: 991.98px) {\n    .table-responsive-lg {\n        overflow-x: auto;\n        -webkit-overflow-scrolling: touch;\n    }\n}\n\n@media (max-width: 1199.98px) {\n    .table-responsive-xl {\n        overflow-x: auto;\n        -webkit-overflow-scrolling: touch;\n    }\n}\n\n@media (max-width: 1399.98px) {\n    .table-responsive-xxl {\n        overflow-x: auto;\n        -webkit-overflow-scrolling: touch;\n    }\n}\n\n.form-label {\n    margin-bottom: 0.5rem;\n}\n\n.col-form-label {\n    padding-top: calc(0.375rem + 1px);\n    padding-bottom: calc(0.375rem + 1px);\n    margin-bottom: 0;\n    font-size: inherit;\n    line-height: 1.5;\n}\n\n.col-form-label-lg {\n    padding-top: calc(0.5rem + 1px);\n    padding-bottom: calc(0.5rem + 1px);\n    font-size: 1.25rem;\n}\n\n.col-form-label-sm {\n    padding-top: calc(0.25rem + 1px);\n    padding-bottom: calc(0.25rem + 1px);\n    font-size: 0.875rem;\n}\n\n.form-text {\n    margin-top: 0.25rem;\n    font-size: 0.875em;\n    color: #6c757d;\n}\n\n.form-control {\n    display: block;\n    width: 100%;\n    padding: 0.375rem 0.75rem;\n    font-size: 1rem;\n    font-weight: 400;\n    line-height: 1.5;\n    color: #212529;\n    background-color: #fff;\n    background-clip: padding-box;\n    border: 1px solid #ced4da;\n    -webkit-appearance: none;\n    -moz-appearance: none;\n    appearance: none;\n    border-radius: 0.375rem;\n    transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n    .form-control {\n        transition: none;\n    }\n}\n\n.form-control[type=file] {\n    overflow: hidden;\n}\n\n.form-control[type=file]:not(:disabled):not([readonly]) {\n    cursor: pointer;\n}\n\n.form-control:focus {\n    color: #212529;\n    background-color: #fff;\n    border-color: #86b7fe;\n    outline: 0;\n    box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n}\n\n.form-control::-webkit-date-and-time-value {\n    height: 1.5em;\n}\n\n.form-control::-moz-placeholder {\n    color: #6c757d;\n    opacity: 1;\n}\n\n.form-control::placeholder {\n    color: #6c757d;\n    opacity: 1;\n}\n\n.form-control:disabled {\n    background-color: #e9ecef;\n    opacity: 1;\n}\n\n.form-control::-webkit-file-upload-button {\n    padding: 0.375rem 0.75rem;\n    margin: -0.375rem -0.75rem;\n    -webkit-margin-end: 0.75rem;\n    margin-inline-end: 0.75rem;\n    color: #212529;\n    background-color: #e9ecef;\n    pointer-events: none;\n    border-color: inherit;\n    border-style: solid;\n    border-width: 0;\n    border-inline-end-width: 1px;\n    border-radius: 0;\n    -webkit-transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n    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;\n}\n\n.form-control::file-selector-button {\n    padding: 0.375rem 0.75rem;\n    margin: -0.375rem -0.75rem;\n    -webkit-margin-end: 0.75rem;\n    margin-inline-end: 0.75rem;\n    color: #212529;\n    background-color: #e9ecef;\n    pointer-events: none;\n    border-color: inherit;\n    border-style: solid;\n    border-width: 0;\n    border-inline-end-width: 1px;\n    border-radius: 0;\n    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;\n}\n\n@media (prefers-reduced-motion: reduce) {\n    .form-control::-webkit-file-upload-button {\n        -webkit-transition: none;\n        transition: none;\n    }\n\n    .form-control::file-selector-button {\n        transition: none;\n    }\n}\n\n.form-control:hover:not(:disabled):not([readonly])::-webkit-file-upload-button {\n    background-color: #dde0e3;\n}\n\n.form-control:hover:not(:disabled):not([readonly])::file-selector-button {\n    background-color: #dde0e3;\n}\n\n.form-control-plaintext {\n    display: block;\n    width: 100%;\n    padding: 0.375rem 0;\n    margin-bottom: 0;\n    line-height: 1.5;\n    color: #212529;\n    background-color: transparent;\n    border: solid transparent;\n    border-width: 1px 0;\n}\n\n.form-control-plaintext:focus {\n    outline: 0;\n}\n\n.form-control-plaintext.form-control-sm, .form-control-plaintext.form-control-lg {\n    padding-right: 0;\n    padding-left: 0;\n}\n\n.form-control-sm {\n    min-height: calc(1.5em + 0.5rem + 2px);\n    padding: 0.25rem 0.5rem;\n    font-size: 0.875rem;\n    border-radius: 0.25rem;\n}\n\n.form-control-sm::-webkit-file-upload-button {\n    padding: 0.25rem 0.5rem;\n    margin: -0.25rem -0.5rem;\n    -webkit-margin-end: 0.5rem;\n    margin-inline-end: 0.5rem;\n}\n\n.form-control-sm::file-selector-button {\n    padding: 0.25rem 0.5rem;\n    margin: -0.25rem -0.5rem;\n    -webkit-margin-end: 0.5rem;\n    margin-inline-end: 0.5rem;\n}\n\n.form-control-lg {\n    min-height: calc(1.5em + 1rem + 2px);\n    padding: 0.5rem 1rem;\n    font-size: 1.25rem;\n    border-radius: 0.5rem;\n}\n\n.form-control-lg::-webkit-file-upload-button {\n    padding: 0.5rem 1rem;\n    margin: -0.5rem -1rem;\n    -webkit-margin-end: 1rem;\n    margin-inline-end: 1rem;\n}\n\n.form-control-lg::file-selector-button {\n    padding: 0.5rem 1rem;\n    margin: -0.5rem -1rem;\n    -webkit-margin-end: 1rem;\n    margin-inline-end: 1rem;\n}\n\ntextarea.form-control {\n    min-height: calc(1.5em + 0.75rem + 2px);\n}\n\ntextarea.form-control-sm {\n    min-height: calc(1.5em + 0.5rem + 2px);\n}\n\ntextarea.form-control-lg {\n    min-height: calc(1.5em + 1rem + 2px);\n}\n\n.form-control-color {\n    width: 3rem;\n    height: calc(1.5em + 0.75rem + 2px);\n    padding: 0.375rem;\n}\n\n.form-control-color:not(:disabled):not([readonly]) {\n    cursor: pointer;\n}\n\n.form-control-color::-moz-color-swatch {\n    border: 0 !important;\n    border-radius: 0.375rem;\n}\n\n.form-control-color::-webkit-color-swatch {\n    border-radius: 0.375rem;\n}\n\n.form-control-color.form-control-sm {\n    height: calc(1.5em + 0.5rem + 2px);\n}\n\n.form-control-color.form-control-lg {\n    height: calc(1.5em + 1rem + 2px);\n}\n\n.form-select {\n    display: block;\n    width: 100%;\n    padding: 0.375rem 2.25rem 0.375rem 0.75rem;\n    -moz-padding-start: calc(0.75rem - 3px);\n    font-size: 1rem;\n    font-weight: 400;\n    line-height: 1.5;\n    color: #212529;\n    background-color: #fff;\n    background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e\");\n    background-repeat: no-repeat;\n    background-position: right 0.75rem center;\n    background-size: 16px 12px;\n    border: 1px solid #ced4da;\n    border-radius: 0.375rem;\n    transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n    -webkit-appearance: none;\n    -moz-appearance: none;\n    appearance: none;\n}\n\n@media (prefers-reduced-motion: reduce) {\n    .form-select {\n        transition: none;\n    }\n}\n\n.form-select:focus {\n    border-color: #86b7fe;\n    outline: 0;\n    box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n}\n\n.form-select[multiple], .form-select[size]:not([size=\"1\"]) {\n    padding-right: 0.75rem;\n    background-image: none;\n}\n\n.form-select:disabled {\n    background-color: #e9ecef;\n}\n\n.form-select:-moz-focusring {\n    color: transparent;\n    text-shadow: 0 0 0 #212529;\n}\n\n.form-select-sm {\n    padding-top: 0.25rem;\n    padding-bottom: 0.25rem;\n    padding-left: 0.5rem;\n    font-size: 0.875rem;\n    border-radius: 0.25rem;\n}\n\n.form-select-lg {\n    padding-top: 0.5rem;\n    padding-bottom: 0.5rem;\n    padding-left: 1rem;\n    font-size: 1.25rem;\n    border-radius: 0.5rem;\n}\n\n.form-check {\n    display: block;\n    min-height: 1.5rem;\n    padding-left: 1.5em;\n    margin-bottom: 0.125rem;\n}\n\n.form-check .form-check-input {\n    float: left;\n    margin-left: -1.5em;\n}\n\n.form-check-reverse {\n    padding-right: 1.5em;\n    padding-left: 0;\n    text-align: right;\n}\n\n.form-check-reverse .form-check-input {\n    float: right;\n    margin-right: -1.5em;\n    margin-left: 0;\n}\n\n.form-check-input {\n    width: 1em;\n    height: 1em;\n    margin-top: 0.25em;\n    vertical-align: top;\n    background-color: #fff;\n    background-repeat: no-repeat;\n    background-position: center;\n    background-size: contain;\n    border: 1px solid rgba(0, 0, 0, 0.25);\n    -webkit-appearance: none;\n    -moz-appearance: none;\n    appearance: none;\n    -webkit-print-color-adjust: exact;\n    color-adjust: exact;\n    print-color-adjust: exact;\n}\n\n.form-check-input[type=checkbox] {\n    border-radius: 0.25em;\n}\n\n.form-check-input[type=radio] {\n    border-radius: 50%;\n}\n\n.form-check-input:active {\n    filter: brightness(90%);\n}\n\n.form-check-input:focus {\n    border-color: #86b7fe;\n    outline: 0;\n    box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n}\n\n.form-check-input:checked {\n    background-color: #0d6efd;\n    border-color: #0d6efd;\n}\n\n.form-check-input:checked[type=checkbox] {\n    background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='m6 10 3 3 6-6'/%3e%3c/svg%3e\");\n}\n\n.form-check-input:checked[type=radio] {\n    background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='2' fill='%23fff'/%3e%3c/svg%3e\");\n}\n\n.form-check-input[type=checkbox]:indeterminate {\n    background-color: #0d6efd;\n    border-color: #0d6efd;\n    background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/%3e%3c/svg%3e\");\n}\n\n.form-check-input:disabled {\n    pointer-events: none;\n    filter: none;\n    opacity: 0.5;\n}\n\n.form-check-input[disabled] ~ .form-check-label, .form-check-input:disabled ~ .form-check-label {\n    cursor: default;\n    opacity: 0.5;\n}\n\n.form-switch {\n    padding-left: 2.5em;\n}\n\n.form-switch .form-check-input {\n    width: 2em;\n    margin-left: -2.5em;\n    background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%280, 0, 0, 0.25%29'/%3e%3c/svg%3e\");\n    background-position: left center;\n    border-radius: 2em;\n    transition: background-position 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n    .form-switch .form-check-input {\n        transition: none;\n    }\n}\n\n.form-switch .form-check-input:focus {\n    background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%2386b7fe'/%3e%3c/svg%3e\");\n}\n\n.form-switch .form-check-input:checked {\n    background-position: right center;\n    background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e\");\n}\n\n.form-switch.form-check-reverse {\n    padding-right: 2.5em;\n    padding-left: 0;\n}\n\n.form-switch.form-check-reverse .form-check-input {\n    margin-right: -2.5em;\n    margin-left: 0;\n}\n\n.form-check-inline {\n    display: inline-block;\n    margin-right: 1rem;\n}\n\n.btn-check {\n    position: absolute;\n    clip: rect(0, 0, 0, 0);\n    pointer-events: none;\n}\n\n.btn-check[disabled] + .btn, .btn-check:disabled + .btn {\n    pointer-events: none;\n    filter: none;\n    opacity: 0.65;\n}\n\n.form-range {\n    width: 100%;\n    height: 1.5rem;\n    padding: 0;\n    background-color: transparent;\n    -webkit-appearance: none;\n    -moz-appearance: none;\n    appearance: none;\n}\n\n.form-range:focus {\n    outline: 0;\n}\n\n.form-range:focus::-webkit-slider-thumb {\n    box-shadow: 0 0 0 1px #fff, 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n}\n\n.form-range:focus::-moz-range-thumb {\n    box-shadow: 0 0 0 1px #fff, 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n}\n\n.form-range::-moz-focus-outer {\n    border: 0;\n}\n\n.form-range::-webkit-slider-thumb {\n    width: 1rem;\n    height: 1rem;\n    margin-top: -0.25rem;\n    background-color: #0d6efd;\n    border: 0;\n    border-radius: 1rem;\n    -webkit-transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n    transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n    -webkit-appearance: none;\n    appearance: none;\n}\n\n@media (prefers-reduced-motion: reduce) {\n    .form-range::-webkit-slider-thumb {\n        -webkit-transition: none;\n        transition: none;\n    }\n}\n\n.form-range::-webkit-slider-thumb:active {\n    background-color: #b6d4fe;\n}\n\n.form-range::-webkit-slider-runnable-track {\n    width: 100%;\n    height: 0.5rem;\n    color: transparent;\n    cursor: pointer;\n    background-color: #dee2e6;\n    border-color: transparent;\n    border-radius: 1rem;\n}\n\n.form-range::-moz-range-thumb {\n    width: 1rem;\n    height: 1rem;\n    background-color: #0d6efd;\n    border: 0;\n    border-radius: 1rem;\n    -moz-transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n    transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n    -moz-appearance: none;\n    appearance: none;\n}\n\n@media (prefers-reduced-motion: reduce) {\n    .form-range::-moz-range-thumb {\n        -moz-transition: none;\n        transition: none;\n    }\n}\n\n.form-range::-moz-range-thumb:active {\n    background-color: #b6d4fe;\n}\n\n.form-range::-moz-range-track {\n    width: 100%;\n    height: 0.5rem;\n    color: transparent;\n    cursor: pointer;\n    background-color: #dee2e6;\n    border-color: transparent;\n    border-radius: 1rem;\n}\n\n.form-range:disabled {\n    pointer-events: none;\n}\n\n.form-range:disabled::-webkit-slider-thumb {\n    background-color: #adb5bd;\n}\n\n.form-range:disabled::-moz-range-thumb {\n    background-color: #adb5bd;\n}\n\n.form-floating {\n    position: relative;\n}\n\n.form-floating > .form-control,\n.form-floating > .form-control-plaintext,\n.form-floating > .form-select {\n    height: calc(3.5rem + 2px);\n    line-height: 1.25;\n}\n\n.form-floating > label {\n    position: absolute;\n    top: 0;\n    left: 0;\n    width: 100%;\n    height: 100%;\n    padding: 1rem 0.75rem;\n    overflow: hidden;\n    text-align: start;\n    text-overflow: ellipsis;\n    white-space: nowrap;\n    pointer-events: none;\n    border: 1px solid transparent;\n    transform-origin: 0 0;\n    transition: opacity 0.1s ease-in-out, transform 0.1s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n    .form-floating > label {\n        transition: none;\n    }\n}\n\n.form-floating > .form-control,\n.form-floating > .form-control-plaintext {\n    padding: 1rem 0.75rem;\n}\n\n.form-floating > .form-control::-moz-placeholder, .form-floating > .form-control-plaintext::-moz-placeholder {\n    color: transparent;\n}\n\n.form-floating > .form-control::placeholder,\n.form-floating > .form-control-plaintext::placeholder {\n    color: transparent;\n}\n\n.form-floating > .form-control:not(:-moz-placeholder-shown), .form-floating > .form-control-plaintext:not(:-moz-placeholder-shown) {\n    padding-top: 1.625rem;\n    padding-bottom: 0.625rem;\n}\n\n.form-floating > .form-control:focus, .form-floating > .form-control:not(:placeholder-shown),\n.form-floating > .form-control-plaintext:focus,\n.form-floating > .form-control-plaintext:not(:placeholder-shown) {\n    padding-top: 1.625rem;\n    padding-bottom: 0.625rem;\n}\n\n.form-floating > .form-control:-webkit-autofill,\n.form-floating > .form-control-plaintext:-webkit-autofill {\n    padding-top: 1.625rem;\n    padding-bottom: 0.625rem;\n}\n\n.form-floating > .form-select {\n    padding-top: 1.625rem;\n    padding-bottom: 0.625rem;\n}\n\n.form-floating > .form-control:not(:-moz-placeholder-shown) ~ label {\n    opacity: 0.65;\n    transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);\n}\n\n.form-floating > .form-control:focus ~ label,\n.form-floating > .form-control:not(:placeholder-shown) ~ label,\n.form-floating > .form-control-plaintext ~ label,\n.form-floating > .form-select ~ label {\n    opacity: 0.65;\n    transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);\n}\n\n.form-floating > .form-control:-webkit-autofill ~ label {\n    opacity: 0.65;\n    transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);\n}\n\n.form-floating > .form-control-plaintext ~ label {\n    border-width: 1px 0;\n}\n\n.input-group {\n    position: relative;\n    display: flex;\n    flex-wrap: wrap;\n    align-items: stretch;\n    width: 100%;\n}\n\n.input-group > .form-control,\n.input-group > .form-select,\n.input-group > .form-floating {\n    position: relative;\n    flex: 1 1 auto;\n    width: 1%;\n    min-width: 0;\n}\n\n.input-group > .form-control:focus,\n.input-group > .form-select:focus,\n.input-group > .form-floating:focus-within {\n    z-index: 5;\n}\n\n.input-group .btn {\n    position: relative;\n    z-index: 2;\n}\n\n.input-group .btn:focus {\n    z-index: 5;\n}\n\n.input-group-text {\n    display: flex;\n    align-items: center;\n    padding: 0.375rem 0.75rem;\n    font-size: 1rem;\n    font-weight: 400;\n    line-height: 1.5;\n    color: #212529;\n    text-align: center;\n    white-space: nowrap;\n    background-color: #e9ecef;\n    border: 1px solid #ced4da;\n    border-radius: 0.375rem;\n}\n\n.input-group-lg > .form-control,\n.input-group-lg > .form-select,\n.input-group-lg > .input-group-text,\n.input-group-lg > .btn {\n    padding: 0.5rem 1rem;\n    font-size: 1.25rem;\n    border-radius: 0.5rem;\n}\n\n.input-group-sm > .form-control,\n.input-group-sm > .form-select,\n.input-group-sm > .input-group-text,\n.input-group-sm > .btn {\n    padding: 0.25rem 0.5rem;\n    font-size: 0.875rem;\n    border-radius: 0.25rem;\n}\n\n.input-group-lg > .form-select,\n.input-group-sm > .form-select {\n    padding-right: 3rem;\n}\n\n.input-group:not(.has-validation) > :not(:last-child):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating),\n.input-group:not(.has-validation) > .dropdown-toggle:nth-last-child(n+3),\n.input-group:not(.has-validation) > .form-floating:not(:last-child) > .form-control,\n.input-group:not(.has-validation) > .form-floating:not(:last-child) > .form-select {\n    border-top-right-radius: 0;\n    border-bottom-right-radius: 0;\n}\n\n.input-group.has-validation > :nth-last-child(n+3):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating),\n.input-group.has-validation > .dropdown-toggle:nth-last-child(n+4),\n.input-group.has-validation > .form-floating:nth-last-child(n+3) > .form-control,\n.input-group.has-validation > .form-floating:nth-last-child(n+3) > .form-select {\n    border-top-right-radius: 0;\n    border-bottom-right-radius: 0;\n}\n\n.input-group > :not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback) {\n    margin-left: -1px;\n    border-top-left-radius: 0;\n    border-bottom-left-radius: 0;\n}\n\n.input-group > .form-floating:not(:first-child) > .form-control,\n.input-group > .form-floating:not(:first-child) > .form-select {\n    border-top-left-radius: 0;\n    border-bottom-left-radius: 0;\n}\n\n.valid-feedback {\n    display: none;\n    width: 100%;\n    margin-top: 0.25rem;\n    font-size: 0.875em;\n    color: #198754;\n}\n\n.valid-tooltip {\n    position: absolute;\n    top: 100%;\n    z-index: 5;\n    display: none;\n    max-width: 100%;\n    padding: 0.25rem 0.5rem;\n    margin-top: 0.1rem;\n    font-size: 0.875rem;\n    color: #fff;\n    background-color: rgba(25, 135, 84, 0.9);\n    border-radius: 0.375rem;\n}\n\n.was-validated :valid ~ .valid-feedback,\n.was-validated :valid ~ .valid-tooltip,\n.is-valid ~ .valid-feedback,\n.is-valid ~ .valid-tooltip {\n    display: block;\n}\n\n.was-validated .form-control:valid, .form-control.is-valid {\n    border-color: #198754;\n    padding-right: calc(1.5em + 0.75rem);\n    background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e\");\n    background-repeat: no-repeat;\n    background-position: right calc(0.375em + 0.1875rem) center;\n    background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n\n.was-validated .form-control:valid:focus, .form-control.is-valid:focus {\n    border-color: #198754;\n    box-shadow: 0 0 0 0.25rem rgba(25, 135, 84, 0.25);\n}\n\n.was-validated textarea.form-control:valid, textarea.form-control.is-valid {\n    padding-right: calc(1.5em + 0.75rem);\n    background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem);\n}\n\n.was-validated .form-select:valid, .form-select.is-valid {\n    border-color: #198754;\n}\n\n.was-validated .form-select:valid:not([multiple]):not([size]), .was-validated .form-select:valid:not([multiple])[size=\"1\"], .form-select.is-valid:not([multiple]):not([size]), .form-select.is-valid:not([multiple])[size=\"1\"] {\n    padding-right: 4.125rem;\n    background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e\"), url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e\");\n    background-position: right 0.75rem center, center right 2.25rem;\n    background-size: 16px 12px, calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n\n.was-validated .form-select:valid:focus, .form-select.is-valid:focus {\n    border-color: #198754;\n    box-shadow: 0 0 0 0.25rem rgba(25, 135, 84, 0.25);\n}\n\n.was-validated .form-control-color:valid, .form-control-color.is-valid {\n    width: calc(3rem + calc(1.5em + 0.75rem));\n}\n\n.was-validated .form-check-input:valid, .form-check-input.is-valid {\n    border-color: #198754;\n}\n\n.was-validated .form-check-input:valid:checked, .form-check-input.is-valid:checked {\n    background-color: #198754;\n}\n\n.was-validated .form-check-input:valid:focus, .form-check-input.is-valid:focus {\n    box-shadow: 0 0 0 0.25rem rgba(25, 135, 84, 0.25);\n}\n\n.was-validated .form-check-input:valid ~ .form-check-label, .form-check-input.is-valid ~ .form-check-label {\n    color: #198754;\n}\n\n.form-check-inline .form-check-input ~ .valid-feedback {\n    margin-left: 0.5em;\n}\n\n.was-validated .input-group > .form-control:not(:focus):valid, .input-group > .form-control:not(:focus).is-valid,\n.was-validated .input-group > .form-select:not(:focus):valid,\n.input-group > .form-select:not(:focus).is-valid,\n.was-validated .input-group > .form-floating:not(:focus-within):valid,\n.input-group > .form-floating:not(:focus-within).is-valid {\n    z-index: 3;\n}\n\n.invalid-feedback {\n    display: none;\n    width: 100%;\n    margin-top: 0.25rem;\n    font-size: 0.875em;\n    color: #dc3545;\n}\n\n.invalid-tooltip {\n    position: absolute;\n    top: 100%;\n    z-index: 5;\n    display: none;\n    max-width: 100%;\n    padding: 0.25rem 0.5rem;\n    margin-top: 0.1rem;\n    font-size: 0.875rem;\n    color: #fff;\n    background-color: rgba(220, 53, 69, 0.9);\n    border-radius: 0.375rem;\n}\n\n.was-validated :invalid ~ .invalid-feedback,\n.was-validated :invalid ~ .invalid-tooltip,\n.is-invalid ~ .invalid-feedback,\n.is-invalid ~ .invalid-tooltip {\n    display: block;\n}\n\n.was-validated .form-control:invalid, .form-control.is-invalid {\n    border-color: #dc3545;\n    padding-right: calc(1.5em + 0.75rem);\n    background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e\");\n    background-repeat: no-repeat;\n    background-position: right calc(0.375em + 0.1875rem) center;\n    background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n\n.was-validated .form-control:invalid:focus, .form-control.is-invalid:focus {\n    border-color: #dc3545;\n    box-shadow: 0 0 0 0.25rem rgba(220, 53, 69, 0.25);\n}\n\n.was-validated textarea.form-control:invalid, textarea.form-control.is-invalid {\n    padding-right: calc(1.5em + 0.75rem);\n    background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem);\n}\n\n.was-validated .form-select:invalid, .form-select.is-invalid {\n    border-color: #dc3545;\n}\n\n.was-validated .form-select:invalid:not([multiple]):not([size]), .was-validated .form-select:invalid:not([multiple])[size=\"1\"], .form-select.is-invalid:not([multiple]):not([size]), .form-select.is-invalid:not([multiple])[size=\"1\"] {\n    padding-right: 4.125rem;\n    background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e\"), url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e\");\n    background-position: right 0.75rem center, center right 2.25rem;\n    background-size: 16px 12px, calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n\n.was-validated .form-select:invalid:focus, .form-select.is-invalid:focus {\n    border-color: #dc3545;\n    box-shadow: 0 0 0 0.25rem rgba(220, 53, 69, 0.25);\n}\n\n.was-validated .form-control-color:invalid, .form-control-color.is-invalid {\n    width: calc(3rem + calc(1.5em + 0.75rem));\n}\n\n.was-validated .form-check-input:invalid, .form-check-input.is-invalid {\n    border-color: #dc3545;\n}\n\n.was-validated .form-check-input:invalid:checked, .form-check-input.is-invalid:checked {\n    background-color: #dc3545;\n}\n\n.was-validated .form-check-input:invalid:focus, .form-check-input.is-invalid:focus {\n    box-shadow: 0 0 0 0.25rem rgba(220, 53, 69, 0.25);\n}\n\n.was-validated .form-check-input:invalid ~ .form-check-label, .form-check-input.is-invalid ~ .form-check-label {\n    color: #dc3545;\n}\n\n.form-check-inline .form-check-input ~ .invalid-feedback {\n    margin-left: 0.5em;\n}\n\n.was-validated .input-group > .form-control:not(:focus):invalid, .input-group > .form-control:not(:focus).is-invalid,\n.was-validated .input-group > .form-select:not(:focus):invalid,\n.input-group > .form-select:not(:focus).is-invalid,\n.was-validated .input-group > .form-floating:not(:focus-within):invalid,\n.input-group > .form-floating:not(:focus-within).is-invalid {\n    z-index: 4;\n}\n\n.btn {\n    --bs-btn-padding-x: 0.75rem;\n    --bs-btn-padding-y: 0.375rem;\n    --bs-btn-font-family: ;\n    --bs-btn-font-size: 1rem;\n    --bs-btn-font-weight: 400;\n    --bs-btn-line-height: 1.5;\n    --bs-btn-color: #212529;\n    --bs-btn-bg: transparent;\n    --bs-btn-border-width: 1px;\n    --bs-btn-border-color: transparent;\n    --bs-btn-border-radius: 0.375rem;\n    --bs-btn-hover-border-color: transparent;\n    --bs-btn-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075);\n    --bs-btn-disabled-opacity: 0.65;\n    --bs-btn-focus-box-shadow: 0 0 0 0.25rem rgba(var(--bs-btn-focus-shadow-rgb), .5);\n    display: inline-block;\n    padding: var(--bs-btn-padding-y) var(--bs-btn-padding-x);\n    font-family: var(--bs-btn-font-family);\n    font-size: var(--bs-btn-font-size);\n    font-weight: var(--bs-btn-font-weight);\n    line-height: var(--bs-btn-line-height);\n    color: var(--bs-btn-color);\n    text-align: center;\n    text-decoration: none;\n    vertical-align: middle;\n    cursor: pointer;\n    -webkit-user-select: none;\n    -moz-user-select: none;\n    user-select: none;\n    border: var(--bs-btn-border-width) solid var(--bs-btn-border-color);\n    border-radius: var(--bs-btn-border-radius);\n    background-color: var(--bs-btn-bg);\n    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;\n}\n\n@media (prefers-reduced-motion: reduce) {\n    .btn {\n        transition: none;\n    }\n}\n\n.btn:hover {\n    color: var(--bs-btn-hover-color);\n    background-color: var(--bs-btn-hover-bg);\n    border-color: var(--bs-btn-hover-border-color);\n}\n\n.btn-check + .btn:hover {\n    color: var(--bs-btn-color);\n    background-color: var(--bs-btn-bg);\n    border-color: var(--bs-btn-border-color);\n}\n\n.btn:focus-visible {\n    color: var(--bs-btn-hover-color);\n    background-color: var(--bs-btn-hover-bg);\n    border-color: var(--bs-btn-hover-border-color);\n    outline: 0;\n    box-shadow: var(--bs-btn-focus-box-shadow);\n}\n\n.btn-check:focus-visible + .btn {\n    border-color: var(--bs-btn-hover-border-color);\n    outline: 0;\n    box-shadow: var(--bs-btn-focus-box-shadow);\n}\n\n.btn-check:checked + .btn, :not(.btn-check) + .btn:active, .btn:first-child:active, .btn.active, .btn.show {\n    color: var(--bs-btn-active-color);\n    background-color: var(--bs-btn-active-bg);\n    border-color: var(--bs-btn-active-border-color);\n}\n\n.btn-check:checked + .btn:focus-visible, :not(.btn-check) + .btn:active:focus-visible, .btn:first-child:active:focus-visible, .btn.active:focus-visible, .btn.show:focus-visible {\n    box-shadow: var(--bs-btn-focus-box-shadow);\n}\n\n.btn:disabled, .btn.disabled, fieldset:disabled .btn {\n    color: var(--bs-btn-disabled-color);\n    pointer-events: none;\n    background-color: var(--bs-btn-disabled-bg);\n    border-color: var(--bs-btn-disabled-border-color);\n    opacity: var(--bs-btn-disabled-opacity);\n}\n\n.btn-primary {\n    --bs-btn-color: #fff;\n    --bs-btn-bg: #0d6efd;\n    --bs-btn-border-color: #0d6efd;\n    --bs-btn-hover-color: #fff;\n    --bs-btn-hover-bg: #0b5ed7;\n    --bs-btn-hover-border-color: #0a58ca;\n    --bs-btn-focus-shadow-rgb: 49, 132, 253;\n    --bs-btn-active-color: #fff;\n    --bs-btn-active-bg: #0a58ca;\n    --bs-btn-active-border-color: #0a53be;\n    --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n    --bs-btn-disabled-color: #fff;\n    --bs-btn-disabled-bg: #0d6efd;\n    --bs-btn-disabled-border-color: #0d6efd;\n}\n\n.btn-secondary {\n    --bs-btn-color: #fff;\n    --bs-btn-bg: #6c757d;\n    --bs-btn-border-color: #6c757d;\n    --bs-btn-hover-color: #fff;\n    --bs-btn-hover-bg: #5c636a;\n    --bs-btn-hover-border-color: #565e64;\n    --bs-btn-focus-shadow-rgb: 130, 138, 145;\n    --bs-btn-active-color: #fff;\n    --bs-btn-active-bg: #565e64;\n    --bs-btn-active-border-color: #51585e;\n    --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n    --bs-btn-disabled-color: #fff;\n    --bs-btn-disabled-bg: #6c757d;\n    --bs-btn-disabled-border-color: #6c757d;\n}\n\n.btn-success {\n    --bs-btn-color: #fff;\n    --bs-btn-bg: #198754;\n    --bs-btn-border-color: #198754;\n    --bs-btn-hover-color: #fff;\n    --bs-btn-hover-bg: #157347;\n    --bs-btn-hover-border-color: #146c43;\n    --bs-btn-focus-shadow-rgb: 60, 153, 110;\n    --bs-btn-active-color: #fff;\n    --bs-btn-active-bg: #146c43;\n    --bs-btn-active-border-color: #13653f;\n    --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n    --bs-btn-disabled-color: #fff;\n    --bs-btn-disabled-bg: #198754;\n    --bs-btn-disabled-border-color: #198754;\n}\n\n.btn-info {\n    --bs-btn-color: #000;\n    --bs-btn-bg: #0dcaf0;\n    --bs-btn-border-color: #0dcaf0;\n    --bs-btn-hover-color: #000;\n    --bs-btn-hover-bg: #31d2f2;\n    --bs-btn-hover-border-color: #25cff2;\n    --bs-btn-focus-shadow-rgb: 11, 172, 204;\n    --bs-btn-active-color: #000;\n    --bs-btn-active-bg: #3dd5f3;\n    --bs-btn-active-border-color: #25cff2;\n    --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n    --bs-btn-disabled-color: #000;\n    --bs-btn-disabled-bg: #0dcaf0;\n    --bs-btn-disabled-border-color: #0dcaf0;\n}\n\n.btn-warning {\n    --bs-btn-color: #000;\n    --bs-btn-bg: #ffc107;\n    --bs-btn-border-color: #ffc107;\n    --bs-btn-hover-color: #000;\n    --bs-btn-hover-bg: #ffca2c;\n    --bs-btn-hover-border-color: #ffc720;\n    --bs-btn-focus-shadow-rgb: 217, 164, 6;\n    --bs-btn-active-color: #000;\n    --bs-btn-active-bg: #ffcd39;\n    --bs-btn-active-border-color: #ffc720;\n    --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n    --bs-btn-disabled-color: #000;\n    --bs-btn-disabled-bg: #ffc107;\n    --bs-btn-disabled-border-color: #ffc107;\n}\n\n.btn-danger {\n    --bs-btn-color: #fff;\n    --bs-btn-bg: #dc3545;\n    --bs-btn-border-color: #dc3545;\n    --bs-btn-hover-color: #fff;\n    --bs-btn-hover-bg: #bb2d3b;\n    --bs-btn-hover-border-color: #b02a37;\n    --bs-btn-focus-shadow-rgb: 225, 83, 97;\n    --bs-btn-active-color: #fff;\n    --bs-btn-active-bg: #b02a37;\n    --bs-btn-active-border-color: #a52834;\n    --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n    --bs-btn-disabled-color: #fff;\n    --bs-btn-disabled-bg: #dc3545;\n    --bs-btn-disabled-border-color: #dc3545;\n}\n\n.btn-light {\n    --bs-btn-color: #000;\n    --bs-btn-bg: #f8f9fa;\n    --bs-btn-border-color: #f8f9fa;\n    --bs-btn-hover-color: #000;\n    --bs-btn-hover-bg: #d3d4d5;\n    --bs-btn-hover-border-color: #c6c7c8;\n    --bs-btn-focus-shadow-rgb: 211, 212, 213;\n    --bs-btn-active-color: #000;\n    --bs-btn-active-bg: #c6c7c8;\n    --bs-btn-active-border-color: #babbbc;\n    --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n    --bs-btn-disabled-color: #000;\n    --bs-btn-disabled-bg: #f8f9fa;\n    --bs-btn-disabled-border-color: #f8f9fa;\n}\n\n.btn-dark {\n    --bs-btn-color: #fff;\n    --bs-btn-bg: #212529;\n    --bs-btn-border-color: #212529;\n    --bs-btn-hover-color: #fff;\n    --bs-btn-hover-bg: #424649;\n    --bs-btn-hover-border-color: #373b3e;\n    --bs-btn-focus-shadow-rgb: 66, 70, 73;\n    --bs-btn-active-color: #fff;\n    --bs-btn-active-bg: #4d5154;\n    --bs-btn-active-border-color: #373b3e;\n    --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n    --bs-btn-disabled-color: #fff;\n    --bs-btn-disabled-bg: #212529;\n    --bs-btn-disabled-border-color: #212529;\n}\n\n.btn-outline-primary {\n    --bs-btn-color: #0d6efd;\n    --bs-btn-border-color: #0d6efd;\n    --bs-btn-hover-color: #fff;\n    --bs-btn-hover-bg: #0d6efd;\n    --bs-btn-hover-border-color: #0d6efd;\n    --bs-btn-focus-shadow-rgb: 13, 110, 253;\n    --bs-btn-active-color: #fff;\n    --bs-btn-active-bg: #0d6efd;\n    --bs-btn-active-border-color: #0d6efd;\n    --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n    --bs-btn-disabled-color: #0d6efd;\n    --bs-btn-disabled-bg: transparent;\n    --bs-btn-disabled-border-color: #0d6efd;\n    --bs-gradient: none;\n}\n\n.btn-outline-secondary {\n    --bs-btn-color: #6c757d;\n    --bs-btn-border-color: #6c757d;\n    --bs-btn-hover-color: #fff;\n    --bs-btn-hover-bg: #6c757d;\n    --bs-btn-hover-border-color: #6c757d;\n    --bs-btn-focus-shadow-rgb: 108, 117, 125;\n    --bs-btn-active-color: #fff;\n    --bs-btn-active-bg: #6c757d;\n    --bs-btn-active-border-color: #6c757d;\n    --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n    --bs-btn-disabled-color: #6c757d;\n    --bs-btn-disabled-bg: transparent;\n    --bs-btn-disabled-border-color: #6c757d;\n    --bs-gradient: none;\n}\n\n.btn-outline-success {\n    --bs-btn-color: #198754;\n    --bs-btn-border-color: #198754;\n    --bs-btn-hover-color: #fff;\n    --bs-btn-hover-bg: #198754;\n    --bs-btn-hover-border-color: #198754;\n    --bs-btn-focus-shadow-rgb: 25, 135, 84;\n    --bs-btn-active-color: #fff;\n    --bs-btn-active-bg: #198754;\n    --bs-btn-active-border-color: #198754;\n    --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n    --bs-btn-disabled-color: #198754;\n    --bs-btn-disabled-bg: transparent;\n    --bs-btn-disabled-border-color: #198754;\n    --bs-gradient: none;\n}\n\n.btn-outline-info {\n    --bs-btn-color: #0dcaf0;\n    --bs-btn-border-color: #0dcaf0;\n    --bs-btn-hover-color: #000;\n    --bs-btn-hover-bg: #0dcaf0;\n    --bs-btn-hover-border-color: #0dcaf0;\n    --bs-btn-focus-shadow-rgb: 13, 202, 240;\n    --bs-btn-active-color: #000;\n    --bs-btn-active-bg: #0dcaf0;\n    --bs-btn-active-border-color: #0dcaf0;\n    --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n    --bs-btn-disabled-color: #0dcaf0;\n    --bs-btn-disabled-bg: transparent;\n    --bs-btn-disabled-border-color: #0dcaf0;\n    --bs-gradient: none;\n}\n\n.btn-outline-warning {\n    --bs-btn-color: #ffc107;\n    --bs-btn-border-color: #ffc107;\n    --bs-btn-hover-color: #000;\n    --bs-btn-hover-bg: #ffc107;\n    --bs-btn-hover-border-color: #ffc107;\n    --bs-btn-focus-shadow-rgb: 255, 193, 7;\n    --bs-btn-active-color: #000;\n    --bs-btn-active-bg: #ffc107;\n    --bs-btn-active-border-color: #ffc107;\n    --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n    --bs-btn-disabled-color: #ffc107;\n    --bs-btn-disabled-bg: transparent;\n    --bs-btn-disabled-border-color: #ffc107;\n    --bs-gradient: none;\n}\n\n.btn-outline-danger {\n    --bs-btn-color: #dc3545;\n    --bs-btn-border-color: #dc3545;\n    --bs-btn-hover-color: #fff;\n    --bs-btn-hover-bg: #dc3545;\n    --bs-btn-hover-border-color: #dc3545;\n    --bs-btn-focus-shadow-rgb: 220, 53, 69;\n    --bs-btn-active-color: #fff;\n    --bs-btn-active-bg: #dc3545;\n    --bs-btn-active-border-color: #dc3545;\n    --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n    --bs-btn-disabled-color: #dc3545;\n    --bs-btn-disabled-bg: transparent;\n    --bs-btn-disabled-border-color: #dc3545;\n    --bs-gradient: none;\n}\n\n.btn-outline-light {\n    --bs-btn-color: #f8f9fa;\n    --bs-btn-border-color: #f8f9fa;\n    --bs-btn-hover-color: #000;\n    --bs-btn-hover-bg: #f8f9fa;\n    --bs-btn-hover-border-color: #f8f9fa;\n    --bs-btn-focus-shadow-rgb: 248, 249, 250;\n    --bs-btn-active-color: #000;\n    --bs-btn-active-bg: #f8f9fa;\n    --bs-btn-active-border-color: #f8f9fa;\n    --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n    --bs-btn-disabled-color: #f8f9fa;\n    --bs-btn-disabled-bg: transparent;\n    --bs-btn-disabled-border-color: #f8f9fa;\n    --bs-gradient: none;\n}\n\n.btn-outline-dark {\n    --bs-btn-color: #212529;\n    --bs-btn-border-color: #212529;\n    --bs-btn-hover-color: #fff;\n    --bs-btn-hover-bg: #212529;\n    --bs-btn-hover-border-color: #212529;\n    --bs-btn-focus-shadow-rgb: 33, 37, 41;\n    --bs-btn-active-color: #fff;\n    --bs-btn-active-bg: #212529;\n    --bs-btn-active-border-color: #212529;\n    --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n    --bs-btn-disabled-color: #212529;\n    --bs-btn-disabled-bg: transparent;\n    --bs-btn-disabled-border-color: #212529;\n    --bs-gradient: none;\n}\n\n.btn-link {\n    --bs-btn-font-weight: 400;\n    --bs-btn-color: var(--bs-link-color);\n    --bs-btn-bg: transparent;\n    --bs-btn-border-color: transparent;\n    --bs-btn-hover-color: var(--bs-link-hover-color);\n    --bs-btn-hover-border-color: transparent;\n    --bs-btn-active-color: var(--bs-link-hover-color);\n    --bs-btn-active-border-color: transparent;\n    --bs-btn-disabled-color: #6c757d;\n    --bs-btn-disabled-border-color: transparent;\n    --bs-btn-box-shadow: none;\n    --bs-btn-focus-shadow-rgb: 49, 132, 253;\n    text-decoration: underline;\n}\n\n.btn-link:focus-visible {\n    color: var(--bs-btn-color);\n}\n\n.btn-link:hover {\n    color: var(--bs-btn-hover-color);\n}\n\n.btn-lg, .btn-group-lg > .btn {\n    --bs-btn-padding-y: 0.5rem;\n    --bs-btn-padding-x: 1rem;\n    --bs-btn-font-size: 1.25rem;\n    --bs-btn-border-radius: 0.5rem;\n}\n\n.btn-sm, .btn-group-sm > .btn {\n    --bs-btn-padding-y: 0.25rem;\n    --bs-btn-padding-x: 0.5rem;\n    --bs-btn-font-size: 0.875rem;\n    --bs-btn-border-radius: 0.25rem;\n}\n\n.fade {\n    transition: opacity 0.15s linear;\n}\n\n@media (prefers-reduced-motion: reduce) {\n    .fade {\n        transition: none;\n    }\n}\n\n.fade:not(.show) {\n    opacity: 0;\n}\n\n.collapse:not(.show) {\n    display: none;\n}\n\n.collapsing {\n    height: 0;\n    overflow: hidden;\n    transition: height 0.35s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n    .collapsing {\n        transition: none;\n    }\n}\n\n.collapsing.collapse-horizontal {\n    width: 0;\n    height: auto;\n    transition: width 0.35s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n    .collapsing.collapse-horizontal {\n        transition: none;\n    }\n}\n\n.dropup,\n.dropend,\n.dropdown,\n.dropstart,\n.dropup-center,\n.dropdown-center {\n    position: relative;\n}\n\n.dropdown-toggle {\n    white-space: nowrap;\n}\n\n.dropdown-toggle::after {\n    display: inline-block;\n    margin-left: 0.255em;\n    vertical-align: 0.255em;\n    content: \"\";\n    border-top: 0.3em solid;\n    border-right: 0.3em solid transparent;\n    border-bottom: 0;\n    border-left: 0.3em solid transparent;\n}\n\n.dropdown-toggle:empty::after {\n    margin-left: 0;\n}\n\n.dropdown-menu {\n    --bs-dropdown-zindex: 1000;\n    --bs-dropdown-min-width: 10rem;\n    --bs-dropdown-padding-x: 0;\n    --bs-dropdown-padding-y: 0.5rem;\n    --bs-dropdown-spacer: 0.125rem;\n    --bs-dropdown-font-size: 1rem;\n    --bs-dropdown-color: #212529;\n    --bs-dropdown-bg: #fff;\n    --bs-dropdown-border-color: var(--bs-border-color-translucent);\n    --bs-dropdown-border-radius: 0.375rem;\n    --bs-dropdown-border-width: 1px;\n    --bs-dropdown-inner-border-radius: calc(0.375rem - 1px);\n    --bs-dropdown-divider-bg: var(--bs-border-color-translucent);\n    --bs-dropdown-divider-margin-y: 0.5rem;\n    --bs-dropdown-box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15);\n    --bs-dropdown-link-color: #212529;\n    --bs-dropdown-link-hover-color: #1e2125;\n    --bs-dropdown-link-hover-bg: #e9ecef;\n    --bs-dropdown-link-active-color: #fff;\n    --bs-dropdown-link-active-bg: #0d6efd;\n    --bs-dropdown-link-disabled-color: #adb5bd;\n    --bs-dropdown-item-padding-x: 1rem;\n    --bs-dropdown-item-padding-y: 0.25rem;\n    --bs-dropdown-header-color: #6c757d;\n    --bs-dropdown-header-padding-x: 1rem;\n    --bs-dropdown-header-padding-y: 0.5rem;\n    position: absolute;\n    z-index: var(--bs-dropdown-zindex);\n    display: none;\n    min-width: var(--bs-dropdown-min-width);\n    padding: var(--bs-dropdown-padding-y) var(--bs-dropdown-padding-x);\n    margin: 0;\n    font-size: var(--bs-dropdown-font-size);\n    color: var(--bs-dropdown-color);\n    text-align: left;\n    list-style: none;\n    background-color: var(--bs-dropdown-bg);\n    background-clip: padding-box;\n    border: var(--bs-dropdown-border-width) solid var(--bs-dropdown-border-color);\n    border-radius: var(--bs-dropdown-border-radius);\n}\n\n.dropdown-menu[data-bs-popper] {\n    top: 100%;\n    left: 0;\n    margin-top: var(--bs-dropdown-spacer);\n}\n\n.dropdown-menu-start {\n    --bs-position: start;\n}\n\n.dropdown-menu-start[data-bs-popper] {\n    right: auto;\n    left: 0;\n}\n\n.dropdown-menu-end {\n    --bs-position: end;\n}\n\n.dropdown-menu-end[data-bs-popper] {\n    right: 0;\n    left: auto;\n}\n\n@media (min-width: 576px) {\n    .dropdown-menu-sm-start {\n        --bs-position: start;\n    }\n\n    .dropdown-menu-sm-start[data-bs-popper] {\n        right: auto;\n        left: 0;\n    }\n\n    .dropdown-menu-sm-end {\n        --bs-position: end;\n    }\n\n    .dropdown-menu-sm-end[data-bs-popper] {\n        right: 0;\n        left: auto;\n    }\n}\n\n@media (min-width: 768px) {\n    .dropdown-menu-md-start {\n        --bs-position: start;\n    }\n\n    .dropdown-menu-md-start[data-bs-popper] {\n        right: auto;\n        left: 0;\n    }\n\n    .dropdown-menu-md-end {\n        --bs-position: end;\n    }\n\n    .dropdown-menu-md-end[data-bs-popper] {\n        right: 0;\n        left: auto;\n    }\n}\n\n@media (min-width: 992px) {\n    .dropdown-menu-lg-start {\n        --bs-position: start;\n    }\n\n    .dropdown-menu-lg-start[data-bs-popper] {\n        right: auto;\n        left: 0;\n    }\n\n    .dropdown-menu-lg-end {\n        --bs-position: end;\n    }\n\n    .dropdown-menu-lg-end[data-bs-popper] {\n        right: 0;\n        left: auto;\n    }\n}\n\n@media (min-width: 1200px) {\n    .dropdown-menu-xl-start {\n        --bs-position: start;\n    }\n\n    .dropdown-menu-xl-start[data-bs-popper] {\n        right: auto;\n        left: 0;\n    }\n\n    .dropdown-menu-xl-end {\n        --bs-position: end;\n    }\n\n    .dropdown-menu-xl-end[data-bs-popper] {\n        right: 0;\n        left: auto;\n    }\n}\n\n@media (min-width: 1400px) {\n    .dropdown-menu-xxl-start {\n        --bs-position: start;\n    }\n\n    .dropdown-menu-xxl-start[data-bs-popper] {\n        right: auto;\n        left: 0;\n    }\n\n    .dropdown-menu-xxl-end {\n        --bs-position: end;\n    }\n\n    .dropdown-menu-xxl-end[data-bs-popper] {\n        right: 0;\n        left: auto;\n    }\n}\n\n.dropup .dropdown-menu[data-bs-popper] {\n    top: auto;\n    bottom: 100%;\n    margin-top: 0;\n    margin-bottom: var(--bs-dropdown-spacer);\n}\n\n.dropup .dropdown-toggle::after {\n    display: inline-block;\n    margin-left: 0.255em;\n    vertical-align: 0.255em;\n    content: \"\";\n    border-top: 0;\n    border-right: 0.3em solid transparent;\n    border-bottom: 0.3em solid;\n    border-left: 0.3em solid transparent;\n}\n\n.dropup .dropdown-toggle:empty::after {\n    margin-left: 0;\n}\n\n.dropend .dropdown-menu[data-bs-popper] {\n    top: 0;\n    right: auto;\n    left: 100%;\n    margin-top: 0;\n    margin-left: var(--bs-dropdown-spacer);\n}\n\n.dropend .dropdown-toggle::after {\n    display: inline-block;\n    margin-left: 0.255em;\n    vertical-align: 0.255em;\n    content: \"\";\n    border-top: 0.3em solid transparent;\n    border-right: 0;\n    border-bottom: 0.3em solid transparent;\n    border-left: 0.3em solid;\n}\n\n.dropend .dropdown-toggle:empty::after {\n    margin-left: 0;\n}\n\n.dropend .dropdown-toggle::after {\n    vertical-align: 0;\n}\n\n.dropstart .dropdown-menu[data-bs-popper] {\n    top: 0;\n    right: 100%;\n    left: auto;\n    margin-top: 0;\n    margin-right: var(--bs-dropdown-spacer);\n}\n\n.dropstart .dropdown-toggle::after {\n    display: inline-block;\n    margin-left: 0.255em;\n    vertical-align: 0.255em;\n    content: \"\";\n}\n\n.dropstart .dropdown-toggle::after {\n    display: none;\n}\n\n.dropstart .dropdown-toggle::before {\n    display: inline-block;\n    margin-right: 0.255em;\n    vertical-align: 0.255em;\n    content: \"\";\n    border-top: 0.3em solid transparent;\n    border-right: 0.3em solid;\n    border-bottom: 0.3em solid transparent;\n}\n\n.dropstart .dropdown-toggle:empty::after {\n    margin-left: 0;\n}\n\n.dropstart .dropdown-toggle::before {\n    vertical-align: 0;\n}\n\n.dropdown-divider {\n    height: 0;\n    margin: var(--bs-dropdown-divider-margin-y) 0;\n    overflow: hidden;\n    border-top: 1px solid var(--bs-dropdown-divider-bg);\n    opacity: 1;\n}\n\n.dropdown-item {\n    display: block;\n    width: 100%;\n    padding: var(--bs-dropdown-item-padding-y) var(--bs-dropdown-item-padding-x);\n    clear: both;\n    font-weight: 400;\n    color: var(--bs-dropdown-link-color);\n    text-align: inherit;\n    text-decoration: none;\n    white-space: nowrap;\n    background-color: transparent;\n    border: 0;\n}\n\n.dropdown-item:hover, .dropdown-item:focus {\n    color: var(--bs-dropdown-link-hover-color);\n    background-color: var(--bs-dropdown-link-hover-bg);\n}\n\n.dropdown-item.active, .dropdown-item:active {\n    color: var(--bs-dropdown-link-active-color);\n    text-decoration: none;\n    background-color: var(--bs-dropdown-link-active-bg);\n}\n\n.dropdown-item.disabled, .dropdown-item:disabled {\n    color: var(--bs-dropdown-link-disabled-color);\n    pointer-events: none;\n    background-color: transparent;\n}\n\n.dropdown-menu.show {\n    display: block;\n}\n\n.dropdown-header {\n    display: block;\n    padding: var(--bs-dropdown-header-padding-y) var(--bs-dropdown-header-padding-x);\n    margin-bottom: 0;\n    font-size: 0.875rem;\n    color: var(--bs-dropdown-header-color);\n    white-space: nowrap;\n}\n\n.dropdown-item-text {\n    display: block;\n    padding: var(--bs-dropdown-item-padding-y) var(--bs-dropdown-item-padding-x);\n    color: var(--bs-dropdown-link-color);\n}\n\n.dropdown-menu-dark {\n    --bs-dropdown-color: #dee2e6;\n    --bs-dropdown-bg: #343a40;\n    --bs-dropdown-border-color: var(--bs-border-color-translucent);\n    --bs-dropdown-box-shadow: ;\n    --bs-dropdown-link-color: #dee2e6;\n    --bs-dropdown-link-hover-color: #fff;\n    --bs-dropdown-divider-bg: var(--bs-border-color-translucent);\n    --bs-dropdown-link-hover-bg: rgba(255, 255, 255, 0.15);\n    --bs-dropdown-link-active-color: #fff;\n    --bs-dropdown-link-active-bg: #0d6efd;\n    --bs-dropdown-link-disabled-color: #adb5bd;\n    --bs-dropdown-header-color: #adb5bd;\n}\n\n.btn-group,\n.btn-group-vertical {\n    position: relative;\n    display: inline-flex;\n    vertical-align: middle;\n}\n\n.btn-group > .btn,\n.btn-group-vertical > .btn {\n    position: relative;\n    flex: 1 1 auto;\n}\n\n.btn-group > .btn-check:checked + .btn,\n.btn-group > .btn-check:focus + .btn,\n.btn-group > .btn:hover,\n.btn-group > .btn:focus,\n.btn-group > .btn:active,\n.btn-group > .btn.active,\n.btn-group-vertical > .btn-check:checked + .btn,\n.btn-group-vertical > .btn-check:focus + .btn,\n.btn-group-vertical > .btn:hover,\n.btn-group-vertical > .btn:focus,\n.btn-group-vertical > .btn:active,\n.btn-group-vertical > .btn.active {\n    z-index: 1;\n}\n\n.btn-toolbar {\n    display: flex;\n    flex-wrap: wrap;\n    justify-content: flex-start;\n}\n\n.btn-toolbar .input-group {\n    width: auto;\n}\n\n.btn-group {\n    border-radius: 0.375rem;\n}\n\n.btn-group > :not(.btn-check:first-child) + .btn,\n.btn-group > .btn-group:not(:first-child) {\n    margin-left: -1px;\n}\n\n.btn-group > .btn:not(:last-child):not(.dropdown-toggle),\n.btn-group > .btn.dropdown-toggle-split:first-child,\n.btn-group > .btn-group:not(:last-child) > .btn {\n    border-top-right-radius: 0;\n    border-bottom-right-radius: 0;\n}\n\n.btn-group > .btn:nth-child(n+3),\n.btn-group > :not(.btn-check) + .btn,\n.btn-group > .btn-group:not(:first-child) > .btn {\n    border-top-left-radius: 0;\n    border-bottom-left-radius: 0;\n}\n\n.dropdown-toggle-split {\n    padding-right: 0.5625rem;\n    padding-left: 0.5625rem;\n}\n\n.dropdown-toggle-split::after, .dropup .dropdown-toggle-split::after, .dropend .dropdown-toggle-split::after {\n    margin-left: 0;\n}\n\n.dropstart .dropdown-toggle-split::before {\n    margin-right: 0;\n}\n\n.btn-sm + .dropdown-toggle-split, .btn-group-sm > .btn + .dropdown-toggle-split {\n    padding-right: 0.375rem;\n    padding-left: 0.375rem;\n}\n\n.btn-lg + .dropdown-toggle-split, .btn-group-lg > .btn + .dropdown-toggle-split {\n    padding-right: 0.75rem;\n    padding-left: 0.75rem;\n}\n\n.btn-group-vertical {\n    flex-direction: column;\n    align-items: flex-start;\n    justify-content: center;\n}\n\n.btn-group-vertical > .btn,\n.btn-group-vertical > .btn-group {\n    width: 100%;\n}\n\n.btn-group-vertical > .btn:not(:first-child),\n.btn-group-vertical > .btn-group:not(:first-child) {\n    margin-top: -1px;\n}\n\n.btn-group-vertical > .btn:not(:last-child):not(.dropdown-toggle),\n.btn-group-vertical > .btn-group:not(:last-child) > .btn {\n    border-bottom-right-radius: 0;\n    border-bottom-left-radius: 0;\n}\n\n.btn-group-vertical > .btn ~ .btn,\n.btn-group-vertical > .btn-group:not(:first-child) > .btn {\n    border-top-left-radius: 0;\n    border-top-right-radius: 0;\n}\n\n.nav {\n    --bs-nav-link-padding-x: 1rem;\n    --bs-nav-link-padding-y: 0.5rem;\n    --bs-nav-link-font-weight: ;\n    --bs-nav-link-color: var(--bs-link-color);\n    --bs-nav-link-hover-color: var(--bs-link-hover-color);\n    --bs-nav-link-disabled-color: #6c757d;\n    display: flex;\n    flex-wrap: wrap;\n    padding-left: 0;\n    margin-bottom: 0;\n    list-style: none;\n}\n\n.nav-link {\n    display: block;\n    padding: var(--bs-nav-link-padding-y) var(--bs-nav-link-padding-x);\n    font-size: var(--bs-nav-link-font-size);\n    font-weight: var(--bs-nav-link-font-weight);\n    color: var(--bs-nav-link-color);\n    text-decoration: none;\n    transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n    .nav-link {\n        transition: none;\n    }\n}\n\n.nav-link:hover, .nav-link:focus {\n    color: var(--bs-nav-link-hover-color);\n}\n\n.nav-link.disabled {\n    color: var(--bs-nav-link-disabled-color);\n    pointer-events: none;\n    cursor: default;\n}\n\n.nav-tabs {\n    --bs-nav-tabs-border-width: 1px;\n    --bs-nav-tabs-border-color: #dee2e6;\n    --bs-nav-tabs-border-radius: 0.375rem;\n    --bs-nav-tabs-link-hover-border-color: #e9ecef #e9ecef #dee2e6;\n    --bs-nav-tabs-link-active-color: #495057;\n    --bs-nav-tabs-link-active-bg: #fff;\n    --bs-nav-tabs-link-active-border-color: #dee2e6 #dee2e6 #fff;\n    border-bottom: var(--bs-nav-tabs-border-width) solid var(--bs-nav-tabs-border-color);\n}\n\n.nav-tabs .nav-link {\n    margin-bottom: calc(-1 * var(--bs-nav-tabs-border-width));\n    background: none;\n    border: var(--bs-nav-tabs-border-width) solid transparent;\n    border-top-left-radius: var(--bs-nav-tabs-border-radius);\n    border-top-right-radius: var(--bs-nav-tabs-border-radius);\n}\n\n.nav-tabs .nav-link:hover, .nav-tabs .nav-link:focus {\n    isolation: isolate;\n    border-color: var(--bs-nav-tabs-link-hover-border-color);\n}\n\n.nav-tabs .nav-link.disabled, .nav-tabs .nav-link:disabled {\n    color: var(--bs-nav-link-disabled-color);\n    background-color: transparent;\n    border-color: transparent;\n}\n\n.nav-tabs .nav-link.active,\n.nav-tabs .nav-item.show .nav-link {\n    color: var(--bs-nav-tabs-link-active-color);\n    background-color: var(--bs-nav-tabs-link-active-bg);\n    border-color: var(--bs-nav-tabs-link-active-border-color);\n}\n\n.nav-tabs .dropdown-menu {\n    margin-top: calc(-1 * var(--bs-nav-tabs-border-width));\n    border-top-left-radius: 0;\n    border-top-right-radius: 0;\n}\n\n.nav-pills {\n    --bs-nav-pills-border-radius: 0.375rem;\n    --bs-nav-pills-link-active-color: #fff;\n    --bs-nav-pills-link-active-bg: #0d6efd;\n}\n\n.nav-pills .nav-link {\n    background: none;\n    border: 0;\n    border-radius: var(--bs-nav-pills-border-radius);\n}\n\n.nav-pills .nav-link:disabled {\n    color: var(--bs-nav-link-disabled-color);\n    background-color: transparent;\n    border-color: transparent;\n}\n\n.nav-pills .nav-link.active,\n.nav-pills .show > .nav-link {\n    color: var(--bs-nav-pills-link-active-color);\n    background-color: var(--bs-nav-pills-link-active-bg);\n}\n\n.nav-fill > .nav-link,\n.nav-fill .nav-item {\n    flex: 1 1 auto;\n    text-align: center;\n}\n\n.nav-justified > .nav-link,\n.nav-justified .nav-item {\n    flex-basis: 0;\n    flex-grow: 1;\n    text-align: center;\n}\n\n.nav-fill .nav-item .nav-link,\n.nav-justified .nav-item .nav-link {\n    width: 100%;\n}\n\n.tab-content > .tab-pane {\n    display: none;\n}\n\n.tab-content > .active {\n    display: block;\n}\n\n.navbar {\n    --bs-navbar-padding-x: 0;\n    --bs-navbar-padding-y: 0.5rem;\n    --bs-navbar-color: rgba(0, 0, 0, 0.55);\n    --bs-navbar-hover-color: rgba(0, 0, 0, 0.7);\n    --bs-navbar-disabled-color: rgba(0, 0, 0, 0.3);\n    --bs-navbar-active-color: rgba(0, 0, 0, 0.9);\n    --bs-navbar-brand-padding-y: 0.3125rem;\n    --bs-navbar-brand-margin-end: 1rem;\n    --bs-navbar-brand-font-size: 1.25rem;\n    --bs-navbar-brand-color: rgba(0, 0, 0, 0.9);\n    --bs-navbar-brand-hover-color: rgba(0, 0, 0, 0.9);\n    --bs-navbar-nav-link-padding-x: 0.5rem;\n    --bs-navbar-toggler-padding-y: 0.25rem;\n    --bs-navbar-toggler-padding-x: 0.75rem;\n    --bs-navbar-toggler-font-size: 1.25rem;\n    --bs-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%280, 0, 0, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e\");\n    --bs-navbar-toggler-border-color: rgba(0, 0, 0, 0.1);\n    --bs-navbar-toggler-border-radius: 0.375rem;\n    --bs-navbar-toggler-focus-width: 0.25rem;\n    --bs-navbar-toggler-transition: box-shadow 0.15s ease-in-out;\n    position: relative;\n    display: flex;\n    flex-wrap: wrap;\n    align-items: center;\n    justify-content: space-between;\n    padding: var(--bs-navbar-padding-y) var(--bs-navbar-padding-x);\n}\n\n.navbar > .container,\n.navbar > .container-fluid,\n.navbar > .container-sm,\n.navbar > .container-md,\n.navbar > .container-lg,\n.navbar > .container-xl,\n.navbar > .container-xxl {\n    display: flex;\n    flex-wrap: inherit;\n    align-items: center;\n    justify-content: space-between;\n}\n\n.navbar-brand {\n    padding-top: var(--bs-navbar-brand-padding-y);\n    padding-bottom: var(--bs-navbar-brand-padding-y);\n    margin-right: var(--bs-navbar-brand-margin-end);\n    font-size: var(--bs-navbar-brand-font-size);\n    color: var(--bs-navbar-brand-color);\n    text-decoration: none;\n    white-space: nowrap;\n}\n\n.navbar-brand:hover, .navbar-brand:focus {\n    color: var(--bs-navbar-brand-hover-color);\n}\n\n.navbar-nav {\n    --bs-nav-link-padding-x: 0;\n    --bs-nav-link-padding-y: 0.5rem;\n    --bs-nav-link-font-weight: ;\n    --bs-nav-link-color: var(--bs-navbar-color);\n    --bs-nav-link-hover-color: var(--bs-navbar-hover-color);\n    --bs-nav-link-disabled-color: var(--bs-navbar-disabled-color);\n    display: flex;\n    flex-direction: column;\n    padding-left: 0;\n    margin-bottom: 0;\n    list-style: none;\n}\n\n.navbar-nav .show > .nav-link,\n.navbar-nav .nav-link.active {\n    color: var(--bs-navbar-active-color);\n}\n\n.navbar-nav .dropdown-menu {\n    position: static;\n}\n\n.navbar-text {\n    padding-top: 0.5rem;\n    padding-bottom: 0.5rem;\n    color: var(--bs-navbar-color);\n}\n\n.navbar-text a,\n.navbar-text a:hover,\n.navbar-text a:focus {\n    color: var(--bs-navbar-active-color);\n}\n\n.navbar-collapse {\n    flex-basis: 100%;\n    flex-grow: 1;\n    align-items: center;\n}\n\n.navbar-toggler {\n    padding: var(--bs-navbar-toggler-padding-y) var(--bs-navbar-toggler-padding-x);\n    font-size: var(--bs-navbar-toggler-font-size);\n    line-height: 1;\n    color: var(--bs-navbar-color);\n    background-color: transparent;\n    border: var(--bs-border-width) solid var(--bs-navbar-toggler-border-color);\n    border-radius: var(--bs-navbar-toggler-border-radius);\n    transition: var(--bs-navbar-toggler-transition);\n}\n\n@media (prefers-reduced-motion: reduce) {\n    .navbar-toggler {\n        transition: none;\n    }\n}\n\n.navbar-toggler:hover {\n    text-decoration: none;\n}\n\n.navbar-toggler:focus {\n    text-decoration: none;\n    outline: 0;\n    box-shadow: 0 0 0 var(--bs-navbar-toggler-focus-width);\n}\n\n.navbar-toggler-icon {\n    display: inline-block;\n    width: 1.5em;\n    height: 1.5em;\n    vertical-align: middle;\n    background-image: var(--bs-navbar-toggler-icon-bg);\n    background-repeat: no-repeat;\n    background-position: center;\n    background-size: 100%;\n}\n\n.navbar-nav-scroll {\n    max-height: var(--bs-scroll-height, 75vh);\n    overflow-y: auto;\n}\n\n@media (min-width: 576px) {\n    .navbar-expand-sm {\n        flex-wrap: nowrap;\n        justify-content: flex-start;\n    }\n\n    .navbar-expand-sm .navbar-nav {\n        flex-direction: row;\n    }\n\n    .navbar-expand-sm .navbar-nav .dropdown-menu {\n        position: absolute;\n    }\n\n    .navbar-expand-sm .navbar-nav .nav-link {\n        padding-right: var(--bs-navbar-nav-link-padding-x);\n        padding-left: var(--bs-navbar-nav-link-padding-x);\n    }\n\n    .navbar-expand-sm .navbar-nav-scroll {\n        overflow: visible;\n    }\n\n    .navbar-expand-sm .navbar-collapse {\n        display: flex !important;\n        flex-basis: auto;\n    }\n\n    .navbar-expand-sm .navbar-toggler {\n        display: none;\n    }\n\n    .navbar-expand-sm .offcanvas {\n        position: static;\n        z-index: auto;\n        flex-grow: 1;\n        width: auto !important;\n        height: auto !important;\n        visibility: visible !important;\n        background-color: transparent !important;\n        border: 0 !important;\n        transform: none !important;\n        transition: none;\n    }\n\n    .navbar-expand-sm .offcanvas .offcanvas-header {\n        display: none;\n    }\n\n    .navbar-expand-sm .offcanvas .offcanvas-body {\n        display: flex;\n        flex-grow: 0;\n        padding: 0;\n        overflow-y: visible;\n    }\n}\n\n@media (min-width: 768px) {\n    .navbar-expand-md {\n        flex-wrap: nowrap;\n        justify-content: flex-start;\n    }\n\n    .navbar-expand-md .navbar-nav {\n        flex-direction: row;\n    }\n\n    .navbar-expand-md .navbar-nav .dropdown-menu {\n        position: absolute;\n    }\n\n    .navbar-expand-md .navbar-nav .nav-link {\n        padding-right: var(--bs-navbar-nav-link-padding-x);\n        padding-left: var(--bs-navbar-nav-link-padding-x);\n    }\n\n    .navbar-expand-md .navbar-nav-scroll {\n        overflow: visible;\n    }\n\n    .navbar-expand-md .navbar-collapse {\n        display: flex !important;\n        flex-basis: auto;\n    }\n\n    .navbar-expand-md .navbar-toggler {\n        display: none;\n    }\n\n    .navbar-expand-md .offcanvas {\n        position: static;\n        z-index: auto;\n        flex-grow: 1;\n        width: auto !important;\n        height: auto !important;\n        visibility: visible !important;\n        background-color: transparent !important;\n        border: 0 !important;\n        transform: none !important;\n        transition: none;\n    }\n\n    .navbar-expand-md .offcanvas .offcanvas-header {\n        display: none;\n    }\n\n    .navbar-expand-md .offcanvas .offcanvas-body {\n        display: flex;\n        flex-grow: 0;\n        padding: 0;\n        overflow-y: visible;\n    }\n}\n\n@media (min-width: 992px) {\n    .navbar-expand-lg {\n        flex-wrap: nowrap;\n        justify-content: flex-start;\n    }\n\n    .navbar-expand-lg .navbar-nav {\n        flex-direction: row;\n    }\n\n    .navbar-expand-lg .navbar-nav .dropdown-menu {\n        position: absolute;\n    }\n\n    .navbar-expand-lg .navbar-nav .nav-link {\n        padding-right: var(--bs-navbar-nav-link-padding-x);\n        padding-left: var(--bs-navbar-nav-link-padding-x);\n    }\n\n    .navbar-expand-lg .navbar-nav-scroll {\n        overflow: visible;\n    }\n\n    .navbar-expand-lg .navbar-collapse {\n        display: flex !important;\n        flex-basis: auto;\n    }\n\n    .navbar-expand-lg .navbar-toggler {\n        display: none;\n    }\n\n    .navbar-expand-lg .offcanvas {\n        position: static;\n        z-index: auto;\n        flex-grow: 1;\n        width: auto !important;\n        height: auto !important;\n        visibility: visible !important;\n        background-color: transparent !important;\n        border: 0 !important;\n        transform: none !important;\n        transition: none;\n    }\n\n    .navbar-expand-lg .offcanvas .offcanvas-header {\n        display: none;\n    }\n\n    .navbar-expand-lg .offcanvas .offcanvas-body {\n        display: flex;\n        flex-grow: 0;\n        padding: 0;\n        overflow-y: visible;\n    }\n}\n\n@media (min-width: 1200px) {\n    .navbar-expand-xl {\n        flex-wrap: nowrap;\n        justify-content: flex-start;\n    }\n\n    .navbar-expand-xl .navbar-nav {\n        flex-direction: row;\n    }\n\n    .navbar-expand-xl .navbar-nav .dropdown-menu {\n        position: absolute;\n    }\n\n    .navbar-expand-xl .navbar-nav .nav-link {\n        padding-right: var(--bs-navbar-nav-link-padding-x);\n        padding-left: var(--bs-navbar-nav-link-padding-x);\n    }\n\n    .navbar-expand-xl .navbar-nav-scroll {\n        overflow: visible;\n    }\n\n    .navbar-expand-xl .navbar-collapse {\n        display: flex !important;\n        flex-basis: auto;\n    }\n\n    .navbar-expand-xl .navbar-toggler {\n        display: none;\n    }\n\n    .navbar-expand-xl .offcanvas {\n        position: static;\n        z-index: auto;\n        flex-grow: 1;\n        width: auto !important;\n        height: auto !important;\n        visibility: visible !important;\n        background-color: transparent !important;\n        border: 0 !important;\n        transform: none !important;\n        transition: none;\n    }\n\n    .navbar-expand-xl .offcanvas .offcanvas-header {\n        display: none;\n    }\n\n    .navbar-expand-xl .offcanvas .offcanvas-body {\n        display: flex;\n        flex-grow: 0;\n        padding: 0;\n        overflow-y: visible;\n    }\n}\n\n@media (min-width: 1400px) {\n    .navbar-expand-xxl {\n        flex-wrap: nowrap;\n        justify-content: flex-start;\n    }\n\n    .navbar-expand-xxl .navbar-nav {\n        flex-direction: row;\n    }\n\n    .navbar-expand-xxl .navbar-nav .dropdown-menu {\n        position: absolute;\n    }\n\n    .navbar-expand-xxl .navbar-nav .nav-link {\n        padding-right: var(--bs-navbar-nav-link-padding-x);\n        padding-left: var(--bs-navbar-nav-link-padding-x);\n    }\n\n    .navbar-expand-xxl .navbar-nav-scroll {\n        overflow: visible;\n    }\n\n    .navbar-expand-xxl .navbar-collapse {\n        display: flex !important;\n        flex-basis: auto;\n    }\n\n    .navbar-expand-xxl .navbar-toggler {\n        display: none;\n    }\n\n    .navbar-expand-xxl .offcanvas {\n        position: static;\n        z-index: auto;\n        flex-grow: 1;\n        width: auto !important;\n        height: auto !important;\n        visibility: visible !important;\n        background-color: transparent !important;\n        border: 0 !important;\n        transform: none !important;\n        transition: none;\n    }\n\n    .navbar-expand-xxl .offcanvas .offcanvas-header {\n        display: none;\n    }\n\n    .navbar-expand-xxl .offcanvas .offcanvas-body {\n        display: flex;\n        flex-grow: 0;\n        padding: 0;\n        overflow-y: visible;\n    }\n}\n\n.navbar-expand {\n    flex-wrap: nowrap;\n    justify-content: flex-start;\n}\n\n.navbar-expand .navbar-nav {\n    flex-direction: row;\n}\n\n.navbar-expand .navbar-nav .dropdown-menu {\n    position: absolute;\n}\n\n.navbar-expand .navbar-nav .nav-link {\n    padding-right: var(--bs-navbar-nav-link-padding-x);\n    padding-left: var(--bs-navbar-nav-link-padding-x);\n}\n\n.navbar-expand .navbar-nav-scroll {\n    overflow: visible;\n}\n\n.navbar-expand .navbar-collapse {\n    display: flex !important;\n    flex-basis: auto;\n}\n\n.navbar-expand .navbar-toggler {\n    display: none;\n}\n\n.navbar-expand .offcanvas {\n    position: static;\n    z-index: auto;\n    flex-grow: 1;\n    width: auto !important;\n    height: auto !important;\n    visibility: visible !important;\n    background-color: transparent !important;\n    border: 0 !important;\n    transform: none !important;\n    transition: none;\n}\n\n.navbar-expand .offcanvas .offcanvas-header {\n    display: none;\n}\n\n.navbar-expand .offcanvas .offcanvas-body {\n    display: flex;\n    flex-grow: 0;\n    padding: 0;\n    overflow-y: visible;\n}\n\n.navbar-dark {\n    --bs-navbar-color: rgba(255, 255, 255, 0.55);\n    --bs-navbar-hover-color: rgba(255, 255, 255, 0.75);\n    --bs-navbar-disabled-color: rgba(255, 255, 255, 0.25);\n    --bs-navbar-active-color: #fff;\n    --bs-navbar-brand-color: #fff;\n    --bs-navbar-brand-hover-color: #fff;\n    --bs-navbar-toggler-border-color: rgba(255, 255, 255, 0.1);\n    --bs-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.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e\");\n}\n\n.card {\n    --bs-card-spacer-y: 1rem;\n    --bs-card-spacer-x: 1rem;\n    --bs-card-title-spacer-y: 0.5rem;\n    --bs-card-border-width: 1px;\n    --bs-card-border-color: var(--bs-border-color-translucent);\n    --bs-card-border-radius: 0.375rem;\n    --bs-card-box-shadow: ;\n    --bs-card-inner-border-radius: calc(0.375rem - 1px);\n    --bs-card-cap-padding-y: 0.5rem;\n    --bs-card-cap-padding-x: 1rem;\n    --bs-card-cap-bg: rgba(0, 0, 0, 0.03);\n    --bs-card-cap-color: ;\n    --bs-card-height: ;\n    --bs-card-color: ;\n    --bs-card-bg: #fff;\n    --bs-card-img-overlay-padding: 1rem;\n    --bs-card-group-margin: 0.75rem;\n    position: relative;\n    display: flex;\n    flex-direction: column;\n    min-width: 0;\n    height: var(--bs-card-height);\n    word-wrap: break-word;\n    background-color: var(--bs-card-bg);\n    background-clip: border-box;\n    border: var(--bs-card-border-width) solid var(--bs-card-border-color);\n    border-radius: var(--bs-card-border-radius);\n}\n\n.card > hr {\n    margin-right: 0;\n    margin-left: 0;\n}\n\n.card > .list-group {\n    border-top: inherit;\n    border-bottom: inherit;\n}\n\n.card > .list-group:first-child {\n    border-top-width: 0;\n    border-top-left-radius: var(--bs-card-inner-border-radius);\n    border-top-right-radius: var(--bs-card-inner-border-radius);\n}\n\n.card > .list-group:last-child {\n    border-bottom-width: 0;\n    border-bottom-right-radius: var(--bs-card-inner-border-radius);\n    border-bottom-left-radius: var(--bs-card-inner-border-radius);\n}\n\n.card > .card-header + .list-group,\n.card > .list-group + .card-footer {\n    border-top: 0;\n}\n\n.card-body {\n    flex: 1 1 auto;\n    padding: var(--bs-card-spacer-y) var(--bs-card-spacer-x);\n    color: var(--bs-card-color);\n}\n\n.card-title {\n    margin-bottom: var(--bs-card-title-spacer-y);\n}\n\n.card-subtitle {\n    margin-top: calc(-0.5 * var(--bs-card-title-spacer-y));\n    margin-bottom: 0;\n}\n\n.card-text:last-child {\n    margin-bottom: 0;\n}\n\n.card-link + .card-link {\n    margin-left: var(--bs-card-spacer-x);\n}\n\n.card-header {\n    padding: var(--bs-card-cap-padding-y) var(--bs-card-cap-padding-x);\n    margin-bottom: 0;\n    color: var(--bs-card-cap-color);\n    background-color: var(--bs-card-cap-bg);\n    border-bottom: var(--bs-card-border-width) solid var(--bs-card-border-color);\n}\n\n.card-header:first-child {\n    border-radius: var(--bs-card-inner-border-radius) var(--bs-card-inner-border-radius) 0 0;\n}\n\n.card-footer {\n    padding: var(--bs-card-cap-padding-y) var(--bs-card-cap-padding-x);\n    color: var(--bs-card-cap-color);\n    background-color: var(--bs-card-cap-bg);\n    border-top: var(--bs-card-border-width) solid var(--bs-card-border-color);\n}\n\n.card-footer:last-child {\n    border-radius: 0 0 var(--bs-card-inner-border-radius) var(--bs-card-inner-border-radius);\n}\n\n.card-header-tabs {\n    margin-right: calc(-0.5 * var(--bs-card-cap-padding-x));\n    margin-bottom: calc(-1 * var(--bs-card-cap-padding-y));\n    margin-left: calc(-0.5 * var(--bs-card-cap-padding-x));\n    border-bottom: 0;\n}\n\n.card-header-tabs .nav-link.active {\n    background-color: var(--bs-card-bg);\n    border-bottom-color: var(--bs-card-bg);\n}\n\n.card-header-pills {\n    margin-right: calc(-0.5 * var(--bs-card-cap-padding-x));\n    margin-left: calc(-0.5 * var(--bs-card-cap-padding-x));\n}\n\n.card-img-overlay {\n    position: absolute;\n    top: 0;\n    right: 0;\n    bottom: 0;\n    left: 0;\n    padding: var(--bs-card-img-overlay-padding);\n    border-radius: var(--bs-card-inner-border-radius);\n}\n\n.card-img,\n.card-img-top,\n.card-img-bottom {\n    width: 100%;\n}\n\n.card-img,\n.card-img-top {\n    border-top-left-radius: var(--bs-card-inner-border-radius);\n    border-top-right-radius: var(--bs-card-inner-border-radius);\n}\n\n.card-img,\n.card-img-bottom {\n    border-bottom-right-radius: var(--bs-card-inner-border-radius);\n    border-bottom-left-radius: var(--bs-card-inner-border-radius);\n}\n\n.card-group > .card {\n    margin-bottom: var(--bs-card-group-margin);\n}\n\n@media (min-width: 576px) {\n    .card-group {\n        display: flex;\n        flex-flow: row wrap;\n    }\n\n    .card-group > .card {\n        flex: 1 0 0%;\n        margin-bottom: 0;\n    }\n\n    .card-group > .card + .card {\n        margin-left: 0;\n        border-left: 0;\n    }\n\n    .card-group > .card:not(:last-child) {\n        border-top-right-radius: 0;\n        border-bottom-right-radius: 0;\n    }\n\n    .card-group > .card:not(:last-child) .card-img-top,\n    .card-group > .card:not(:last-child) .card-header {\n        border-top-right-radius: 0;\n    }\n\n    .card-group > .card:not(:last-child) .card-img-bottom,\n    .card-group > .card:not(:last-child) .card-footer {\n        border-bottom-right-radius: 0;\n    }\n\n    .card-group > .card:not(:first-child) {\n        border-top-left-radius: 0;\n        border-bottom-left-radius: 0;\n    }\n\n    .card-group > .card:not(:first-child) .card-img-top,\n    .card-group > .card:not(:first-child) .card-header {\n        border-top-left-radius: 0;\n    }\n\n    .card-group > .card:not(:first-child) .card-img-bottom,\n    .card-group > .card:not(:first-child) .card-footer {\n        border-bottom-left-radius: 0;\n    }\n}\n\n.accordion {\n    --bs-accordion-color: #212529;\n    --bs-accordion-bg: #fff;\n    --bs-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;\n    --bs-accordion-border-color: var(--bs-border-color);\n    --bs-accordion-border-width: 1px;\n    --bs-accordion-border-radius: 0.375rem;\n    --bs-accordion-inner-border-radius: calc(0.375rem - 1px);\n    --bs-accordion-btn-padding-x: 1.25rem;\n    --bs-accordion-btn-padding-y: 1rem;\n    --bs-accordion-btn-color: #212529;\n    --bs-accordion-btn-bg: var(--bs-accordion-bg);\n    --bs-accordion-btn-icon: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23212529'%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\");\n    --bs-accordion-btn-icon-width: 1.25rem;\n    --bs-accordion-btn-icon-transform: rotate(-180deg);\n    --bs-accordion-btn-icon-transition: transform 0.2s ease-in-out;\n    --bs-accordion-btn-active-icon: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%230c63e4'%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\");\n    --bs-accordion-btn-focus-border-color: #86b7fe;\n    --bs-accordion-btn-focus-box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n    --bs-accordion-body-padding-x: 1.25rem;\n    --bs-accordion-body-padding-y: 1rem;\n    --bs-accordion-active-color: #0c63e4;\n    --bs-accordion-active-bg: #e7f1ff;\n}\n\n.accordion-button {\n    position: relative;\n    display: flex;\n    align-items: center;\n    width: 100%;\n    padding: var(--bs-accordion-btn-padding-y) var(--bs-accordion-btn-padding-x);\n    font-size: 1rem;\n    color: var(--bs-accordion-btn-color);\n    text-align: left;\n    background-color: var(--bs-accordion-btn-bg);\n    border: 0;\n    border-radius: 0;\n    overflow-anchor: none;\n    transition: var(--bs-accordion-transition);\n}\n\n@media (prefers-reduced-motion: reduce) {\n    .accordion-button {\n        transition: none;\n    }\n}\n\n.accordion-button:not(.collapsed) {\n    color: var(--bs-accordion-active-color);\n    background-color: var(--bs-accordion-active-bg);\n    box-shadow: inset 0 calc(-1 * var(--bs-accordion-border-width)) 0 var(--bs-accordion-border-color);\n}\n\n.accordion-button:not(.collapsed)::after {\n    background-image: var(--bs-accordion-btn-active-icon);\n    transform: var(--bs-accordion-btn-icon-transform);\n}\n\n.accordion-button::after {\n    flex-shrink: 0;\n    width: var(--bs-accordion-btn-icon-width);\n    height: var(--bs-accordion-btn-icon-width);\n    margin-left: auto;\n    content: \"\";\n    background-image: var(--bs-accordion-btn-icon);\n    background-repeat: no-repeat;\n    background-size: var(--bs-accordion-btn-icon-width);\n    transition: var(--bs-accordion-btn-icon-transition);\n}\n\n@media (prefers-reduced-motion: reduce) {\n    .accordion-button::after {\n        transition: none;\n    }\n}\n\n.accordion-button:hover {\n    z-index: 2;\n}\n\n.accordion-button:focus {\n    z-index: 3;\n    border-color: var(--bs-accordion-btn-focus-border-color);\n    outline: 0;\n    box-shadow: var(--bs-accordion-btn-focus-box-shadow);\n}\n\n.accordion-header {\n    margin-bottom: 0;\n}\n\n.accordion-item {\n    color: var(--bs-accordion-color);\n    background-color: var(--bs-accordion-bg);\n    border: var(--bs-accordion-border-width) solid var(--bs-accordion-border-color);\n}\n\n.accordion-item:first-of-type {\n    border-top-left-radius: var(--bs-accordion-border-radius);\n    border-top-right-radius: var(--bs-accordion-border-radius);\n}\n\n.accordion-item:first-of-type .accordion-button {\n    border-top-left-radius: var(--bs-accordion-inner-border-radius);\n    border-top-right-radius: var(--bs-accordion-inner-border-radius);\n}\n\n.accordion-item:not(:first-of-type) {\n    border-top: 0;\n}\n\n.accordion-item:last-of-type {\n    border-bottom-right-radius: var(--bs-accordion-border-radius);\n    border-bottom-left-radius: var(--bs-accordion-border-radius);\n}\n\n.accordion-item:last-of-type .accordion-button.collapsed {\n    border-bottom-right-radius: var(--bs-accordion-inner-border-radius);\n    border-bottom-left-radius: var(--bs-accordion-inner-border-radius);\n}\n\n.accordion-item:last-of-type .accordion-collapse {\n    border-bottom-right-radius: var(--bs-accordion-border-radius);\n    border-bottom-left-radius: var(--bs-accordion-border-radius);\n}\n\n.accordion-body {\n    padding: var(--bs-accordion-body-padding-y) var(--bs-accordion-body-padding-x);\n}\n\n.accordion-flush .accordion-collapse {\n    border-width: 0;\n}\n\n.accordion-flush .accordion-item {\n    border-right: 0;\n    border-left: 0;\n    border-radius: 0;\n}\n\n.accordion-flush .accordion-item:first-child {\n    border-top: 0;\n}\n\n.accordion-flush .accordion-item:last-child {\n    border-bottom: 0;\n}\n\n.accordion-flush .accordion-item .accordion-button, .accordion-flush .accordion-item .accordion-button.collapsed {\n    border-radius: 0;\n}\n\n.breadcrumb {\n    --bs-breadcrumb-padding-x: 0;\n    --bs-breadcrumb-padding-y: 0;\n    --bs-breadcrumb-margin-bottom: 1rem;\n    --bs-breadcrumb-bg: ;\n    --bs-breadcrumb-border-radius: ;\n    --bs-breadcrumb-divider-color: #6c757d;\n    --bs-breadcrumb-item-padding-x: 0.5rem;\n    --bs-breadcrumb-item-active-color: #6c757d;\n    display: flex;\n    flex-wrap: wrap;\n    padding: var(--bs-breadcrumb-padding-y) var(--bs-breadcrumb-padding-x);\n    margin-bottom: var(--bs-breadcrumb-margin-bottom);\n    font-size: var(--bs-breadcrumb-font-size);\n    list-style: none;\n    background-color: var(--bs-breadcrumb-bg);\n    border-radius: var(--bs-breadcrumb-border-radius);\n}\n\n.breadcrumb-item + .breadcrumb-item {\n    padding-left: var(--bs-breadcrumb-item-padding-x);\n}\n\n.breadcrumb-item + .breadcrumb-item::before {\n    float: left;\n    padding-right: var(--bs-breadcrumb-item-padding-x);\n    color: var(--bs-breadcrumb-divider-color);\n    content: var(--bs-breadcrumb-divider, \"/\") /* rtl: var(--bs-breadcrumb-divider, \"/\") */;\n}\n\n.breadcrumb-item.active {\n    color: var(--bs-breadcrumb-item-active-color);\n}\n\n.pagination {\n    --bs-pagination-padding-x: 0.75rem;\n    --bs-pagination-padding-y: 0.375rem;\n    --bs-pagination-font-size: 1rem;\n    --bs-pagination-color: var(--bs-link-color);\n    --bs-pagination-bg: #fff;\n    --bs-pagination-border-width: 1px;\n    --bs-pagination-border-color: #dee2e6;\n    --bs-pagination-border-radius: 0.375rem;\n    --bs-pagination-hover-color: var(--bs-link-hover-color);\n    --bs-pagination-hover-bg: #e9ecef;\n    --bs-pagination-hover-border-color: #dee2e6;\n    --bs-pagination-focus-color: var(--bs-link-hover-color);\n    --bs-pagination-focus-bg: #e9ecef;\n    --bs-pagination-focus-box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n    --bs-pagination-active-color: #fff;\n    --bs-pagination-active-bg: #0d6efd;\n    --bs-pagination-active-border-color: #0d6efd;\n    --bs-pagination-disabled-color: #6c757d;\n    --bs-pagination-disabled-bg: #fff;\n    --bs-pagination-disabled-border-color: #dee2e6;\n    display: flex;\n    padding-left: 0;\n    list-style: none;\n}\n\n.page-link {\n    position: relative;\n    display: block;\n    padding: var(--bs-pagination-padding-y) var(--bs-pagination-padding-x);\n    font-size: var(--bs-pagination-font-size);\n    color: var(--bs-pagination-color);\n    text-decoration: none;\n    background-color: var(--bs-pagination-bg);\n    border: var(--bs-pagination-border-width) solid var(--bs-pagination-border-color);\n    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;\n}\n\n@media (prefers-reduced-motion: reduce) {\n    .page-link {\n        transition: none;\n    }\n}\n\n.page-link:hover {\n    z-index: 2;\n    color: var(--bs-pagination-hover-color);\n    background-color: var(--bs-pagination-hover-bg);\n    border-color: var(--bs-pagination-hover-border-color);\n}\n\n.page-link:focus {\n    z-index: 3;\n    color: var(--bs-pagination-focus-color);\n    background-color: var(--bs-pagination-focus-bg);\n    outline: 0;\n    box-shadow: var(--bs-pagination-focus-box-shadow);\n}\n\n.page-link.active, .active > .page-link {\n    z-index: 3;\n    color: var(--bs-pagination-active-color);\n    background-color: var(--bs-pagination-active-bg);\n    border-color: var(--bs-pagination-active-border-color);\n}\n\n.page-link.disabled, .disabled > .page-link {\n    color: var(--bs-pagination-disabled-color);\n    pointer-events: none;\n    background-color: var(--bs-pagination-disabled-bg);\n    border-color: var(--bs-pagination-disabled-border-color);\n}\n\n.page-item:not(:first-child) .page-link {\n    margin-left: -1px;\n}\n\n.page-item:first-child .page-link {\n    border-top-left-radius: var(--bs-pagination-border-radius);\n    border-bottom-left-radius: var(--bs-pagination-border-radius);\n}\n\n.page-item:last-child .page-link {\n    border-top-right-radius: var(--bs-pagination-border-radius);\n    border-bottom-right-radius: var(--bs-pagination-border-radius);\n}\n\n.pagination-lg {\n    --bs-pagination-padding-x: 1.5rem;\n    --bs-pagination-padding-y: 0.75rem;\n    --bs-pagination-font-size: 1.25rem;\n    --bs-pagination-border-radius: 0.5rem;\n}\n\n.pagination-sm {\n    --bs-pagination-padding-x: 0.5rem;\n    --bs-pagination-padding-y: 0.25rem;\n    --bs-pagination-font-size: 0.875rem;\n    --bs-pagination-border-radius: 0.25rem;\n}\n\n.badge {\n    --bs-badge-padding-x: 0.65em;\n    --bs-badge-padding-y: 0.35em;\n    --bs-badge-font-size: 0.75em;\n    --bs-badge-font-weight: 700;\n    --bs-badge-color: #fff;\n    --bs-badge-border-radius: 0.375rem;\n    display: inline-block;\n    padding: var(--bs-badge-padding-y) var(--bs-badge-padding-x);\n    font-size: var(--bs-badge-font-size);\n    font-weight: var(--bs-badge-font-weight);\n    line-height: 1;\n    color: var(--bs-badge-color);\n    text-align: center;\n    white-space: nowrap;\n    vertical-align: baseline;\n    border-radius: var(--bs-badge-border-radius);\n}\n\n.badge:empty {\n    display: none;\n}\n\n.btn .badge {\n    position: relative;\n    top: -1px;\n}\n\n.alert {\n    --bs-alert-bg: transparent;\n    --bs-alert-padding-x: 1rem;\n    --bs-alert-padding-y: 1rem;\n    --bs-alert-margin-bottom: 1rem;\n    --bs-alert-color: inherit;\n    --bs-alert-border-color: transparent;\n    --bs-alert-border: 1px solid var(--bs-alert-border-color);\n    --bs-alert-border-radius: 0.375rem;\n    position: relative;\n    padding: var(--bs-alert-padding-y) var(--bs-alert-padding-x);\n    margin-bottom: var(--bs-alert-margin-bottom);\n    color: var(--bs-alert-color);\n    background-color: var(--bs-alert-bg);\n    border: var(--bs-alert-border);\n    border-radius: var(--bs-alert-border-radius);\n}\n\n.alert-heading {\n    color: inherit;\n}\n\n.alert-link {\n    font-weight: 700;\n}\n\n.alert-dismissible {\n    padding-right: 3rem;\n}\n\n.alert-dismissible .btn-close {\n    position: absolute;\n    top: 0;\n    right: 0;\n    z-index: 2;\n    padding: 1.25rem 1rem;\n}\n\n.alert-primary {\n    --bs-alert-color: #084298;\n    --bs-alert-bg: #cfe2ff;\n    --bs-alert-border-color: #b6d4fe;\n}\n\n.alert-primary .alert-link {\n    color: #06357a;\n}\n\n.alert-secondary {\n    --bs-alert-color: #41464b;\n    --bs-alert-bg: #e2e3e5;\n    --bs-alert-border-color: #d3d6d8;\n}\n\n.alert-secondary .alert-link {\n    color: #34383c;\n}\n\n.alert-success {\n    --bs-alert-color: #0f5132;\n    --bs-alert-bg: #d1e7dd;\n    --bs-alert-border-color: #badbcc;\n}\n\n.alert-success .alert-link {\n    color: #0c4128;\n}\n\n.alert-info {\n    --bs-alert-color: #055160;\n    --bs-alert-bg: #cff4fc;\n    --bs-alert-border-color: #b6effb;\n}\n\n.alert-info .alert-link {\n    color: #04414d;\n}\n\n.alert-warning {\n    --bs-alert-color: #664d03;\n    --bs-alert-bg: #fff3cd;\n    --bs-alert-border-color: #ffecb5;\n}\n\n.alert-warning .alert-link {\n    color: #523e02;\n}\n\n.alert-danger {\n    --bs-alert-color: #842029;\n    --bs-alert-bg: #f8d7da;\n    --bs-alert-border-color: #f5c2c7;\n}\n\n.alert-danger .alert-link {\n    color: #6a1a21;\n}\n\n.alert-light {\n    --bs-alert-color: #636464;\n    --bs-alert-bg: #fefefe;\n    --bs-alert-border-color: #fdfdfe;\n}\n\n.alert-light .alert-link {\n    color: #4f5050;\n}\n\n.alert-dark {\n    --bs-alert-color: #141619;\n    --bs-alert-bg: #d3d3d4;\n    --bs-alert-border-color: #bcbebf;\n}\n\n.alert-dark .alert-link {\n    color: #101214;\n}\n\n@keyframes progress-bar-stripes {\n    0% {\n        background-position-x: 1rem;\n    }\n}\n\n.progress {\n    --bs-progress-height: 1rem;\n    --bs-progress-font-size: 0.75rem;\n    --bs-progress-bg: #e9ecef;\n    --bs-progress-border-radius: 0.375rem;\n    --bs-progress-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.075);\n    --bs-progress-bar-color: #fff;\n    --bs-progress-bar-bg: #0d6efd;\n    --bs-progress-bar-transition: width 0.6s ease;\n    display: flex;\n    height: var(--bs-progress-height);\n    overflow: hidden;\n    font-size: var(--bs-progress-font-size);\n    background-color: var(--bs-progress-bg);\n    border-radius: var(--bs-progress-border-radius);\n}\n\n.progress-bar {\n    display: flex;\n    flex-direction: column;\n    justify-content: center;\n    overflow: hidden;\n    color: var(--bs-progress-bar-color);\n    text-align: center;\n    white-space: nowrap;\n    background-color: var(--bs-progress-bar-bg);\n    transition: var(--bs-progress-bar-transition);\n}\n\n@media (prefers-reduced-motion: reduce) {\n    .progress-bar {\n        transition: none;\n    }\n}\n\n.progress-bar-striped {\n    background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n    background-size: var(--bs-progress-height) var(--bs-progress-height);\n}\n\n.progress-bar-animated {\n    animation: 1s linear infinite progress-bar-stripes;\n}\n\n@media (prefers-reduced-motion: reduce) {\n    .progress-bar-animated {\n        animation: none;\n    }\n}\n\n.list-group {\n    --bs-list-group-color: #212529;\n    --bs-list-group-bg: #fff;\n    --bs-list-group-border-color: rgba(0, 0, 0, 0.125);\n    --bs-list-group-border-width: 1px;\n    --bs-list-group-border-radius: 0.375rem;\n    --bs-list-group-item-padding-x: 1rem;\n    --bs-list-group-item-padding-y: 0.5rem;\n    --bs-list-group-action-color: #495057;\n    --bs-list-group-action-hover-color: #495057;\n    --bs-list-group-action-hover-bg: #f8f9fa;\n    --bs-list-group-action-active-color: #212529;\n    --bs-list-group-action-active-bg: #e9ecef;\n    --bs-list-group-disabled-color: #6c757d;\n    --bs-list-group-disabled-bg: #fff;\n    --bs-list-group-active-color: #fff;\n    --bs-list-group-active-bg: #0d6efd;\n    --bs-list-group-active-border-color: #0d6efd;\n    display: flex;\n    flex-direction: column;\n    padding-left: 0;\n    margin-bottom: 0;\n    border-radius: var(--bs-list-group-border-radius);\n}\n\n.list-group-numbered {\n    list-style-type: none;\n    counter-reset: section;\n}\n\n.list-group-numbered > .list-group-item::before {\n    content: counters(section, \".\") \". \";\n    counter-increment: section;\n}\n\n.list-group-item-action {\n    width: 100%;\n    color: var(--bs-list-group-action-color);\n    text-align: inherit;\n}\n\n.list-group-item-action:hover, .list-group-item-action:focus {\n    z-index: 1;\n    color: var(--bs-list-group-action-hover-color);\n    text-decoration: none;\n    background-color: var(--bs-list-group-action-hover-bg);\n}\n\n.list-group-item-action:active {\n    color: var(--bs-list-group-action-active-color);\n    background-color: var(--bs-list-group-action-active-bg);\n}\n\n.list-group-item {\n    position: relative;\n    display: block;\n    padding: var(--bs-list-group-item-padding-y) var(--bs-list-group-item-padding-x);\n    color: var(--bs-list-group-color);\n    text-decoration: none;\n    background-color: var(--bs-list-group-bg);\n    border: var(--bs-list-group-border-width) solid var(--bs-list-group-border-color);\n}\n\n.list-group-item:first-child {\n    border-top-left-radius: inherit;\n    border-top-right-radius: inherit;\n}\n\n.list-group-item:last-child {\n    border-bottom-right-radius: inherit;\n    border-bottom-left-radius: inherit;\n}\n\n.list-group-item.disabled, .list-group-item:disabled {\n    color: var(--bs-list-group-disabled-color);\n    pointer-events: none;\n    background-color: var(--bs-list-group-disabled-bg);\n}\n\n.list-group-item.active {\n    z-index: 2;\n    color: var(--bs-list-group-active-color);\n    background-color: var(--bs-list-group-active-bg);\n    border-color: var(--bs-list-group-active-border-color);\n}\n\n.list-group-item + .list-group-item {\n    border-top-width: 0;\n}\n\n.list-group-item + .list-group-item.active {\n    margin-top: calc(-1 * var(--bs-list-group-border-width));\n    border-top-width: var(--bs-list-group-border-width);\n}\n\n.list-group-horizontal {\n    flex-direction: row;\n}\n\n.list-group-horizontal > .list-group-item:first-child:not(:last-child) {\n    border-bottom-left-radius: var(--bs-list-group-border-radius);\n    border-top-right-radius: 0;\n}\n\n.list-group-horizontal > .list-group-item:last-child:not(:first-child) {\n    border-top-right-radius: var(--bs-list-group-border-radius);\n    border-bottom-left-radius: 0;\n}\n\n.list-group-horizontal > .list-group-item.active {\n    margin-top: 0;\n}\n\n.list-group-horizontal > .list-group-item + .list-group-item {\n    border-top-width: var(--bs-list-group-border-width);\n    border-left-width: 0;\n}\n\n.list-group-horizontal > .list-group-item + .list-group-item.active {\n    margin-left: calc(-1 * var(--bs-list-group-border-width));\n    border-left-width: var(--bs-list-group-border-width);\n}\n\n@media (min-width: 576px) {\n    .list-group-horizontal-sm {\n        flex-direction: row;\n    }\n\n    .list-group-horizontal-sm > .list-group-item:first-child:not(:last-child) {\n        border-bottom-left-radius: var(--bs-list-group-border-radius);\n        border-top-right-radius: 0;\n    }\n\n    .list-group-horizontal-sm > .list-group-item:last-child:not(:first-child) {\n        border-top-right-radius: var(--bs-list-group-border-radius);\n        border-bottom-left-radius: 0;\n    }\n\n    .list-group-horizontal-sm > .list-group-item.active {\n        margin-top: 0;\n    }\n\n    .list-group-horizontal-sm > .list-group-item + .list-group-item {\n        border-top-width: var(--bs-list-group-border-width);\n        border-left-width: 0;\n    }\n\n    .list-group-horizontal-sm > .list-group-item + .list-group-item.active {\n        margin-left: calc(-1 * var(--bs-list-group-border-width));\n        border-left-width: var(--bs-list-group-border-width);\n    }\n}\n\n@media (min-width: 768px) {\n    .list-group-horizontal-md {\n        flex-direction: row;\n    }\n\n    .list-group-horizontal-md > .list-group-item:first-child:not(:last-child) {\n        border-bottom-left-radius: var(--bs-list-group-border-radius);\n        border-top-right-radius: 0;\n    }\n\n    .list-group-horizontal-md > .list-group-item:last-child:not(:first-child) {\n        border-top-right-radius: var(--bs-list-group-border-radius);\n        border-bottom-left-radius: 0;\n    }\n\n    .list-group-horizontal-md > .list-group-item.active {\n        margin-top: 0;\n    }\n\n    .list-group-horizontal-md > .list-group-item + .list-group-item {\n        border-top-width: var(--bs-list-group-border-width);\n        border-left-width: 0;\n    }\n\n    .list-group-horizontal-md > .list-group-item + .list-group-item.active {\n        margin-left: calc(-1 * var(--bs-list-group-border-width));\n        border-left-width: var(--bs-list-group-border-width);\n    }\n}\n\n@media (min-width: 992px) {\n    .list-group-horizontal-lg {\n        flex-direction: row;\n    }\n\n    .list-group-horizontal-lg > .list-group-item:first-child:not(:last-child) {\n        border-bottom-left-radius: var(--bs-list-group-border-radius);\n        border-top-right-radius: 0;\n    }\n\n    .list-group-horizontal-lg > .list-group-item:last-child:not(:first-child) {\n        border-top-right-radius: var(--bs-list-group-border-radius);\n        border-bottom-left-radius: 0;\n    }\n\n    .list-group-horizontal-lg > .list-group-item.active {\n        margin-top: 0;\n    }\n\n    .list-group-horizontal-lg > .list-group-item + .list-group-item {\n        border-top-width: var(--bs-list-group-border-width);\n        border-left-width: 0;\n    }\n\n    .list-group-horizontal-lg > .list-group-item + .list-group-item.active {\n        margin-left: calc(-1 * var(--bs-list-group-border-width));\n        border-left-width: var(--bs-list-group-border-width);\n    }\n}\n\n@media (min-width: 1200px) {\n    .list-group-horizontal-xl {\n        flex-direction: row;\n    }\n\n    .list-group-horizontal-xl > .list-group-item:first-child:not(:last-child) {\n        border-bottom-left-radius: var(--bs-list-group-border-radius);\n        border-top-right-radius: 0;\n    }\n\n    .list-group-horizontal-xl > .list-group-item:last-child:not(:first-child) {\n        border-top-right-radius: var(--bs-list-group-border-radius);\n        border-bottom-left-radius: 0;\n    }\n\n    .list-group-horizontal-xl > .list-group-item.active {\n        margin-top: 0;\n    }\n\n    .list-group-horizontal-xl > .list-group-item + .list-group-item {\n        border-top-width: var(--bs-list-group-border-width);\n        border-left-width: 0;\n    }\n\n    .list-group-horizontal-xl > .list-group-item + .list-group-item.active {\n        margin-left: calc(-1 * var(--bs-list-group-border-width));\n        border-left-width: var(--bs-list-group-border-width);\n    }\n}\n\n@media (min-width: 1400px) {\n    .list-group-horizontal-xxl {\n        flex-direction: row;\n    }\n\n    .list-group-horizontal-xxl > .list-group-item:first-child:not(:last-child) {\n        border-bottom-left-radius: var(--bs-list-group-border-radius);\n        border-top-right-radius: 0;\n    }\n\n    .list-group-horizontal-xxl > .list-group-item:last-child:not(:first-child) {\n        border-top-right-radius: var(--bs-list-group-border-radius);\n        border-bottom-left-radius: 0;\n    }\n\n    .list-group-horizontal-xxl > .list-group-item.active {\n        margin-top: 0;\n    }\n\n    .list-group-horizontal-xxl > .list-group-item + .list-group-item {\n        border-top-width: var(--bs-list-group-border-width);\n        border-left-width: 0;\n    }\n\n    .list-group-horizontal-xxl > .list-group-item + .list-group-item.active {\n        margin-left: calc(-1 * var(--bs-list-group-border-width));\n        border-left-width: var(--bs-list-group-border-width);\n    }\n}\n\n.list-group-flush {\n    border-radius: 0;\n}\n\n.list-group-flush > .list-group-item {\n    border-width: 0 0 var(--bs-list-group-border-width);\n}\n\n.list-group-flush > .list-group-item:last-child {\n    border-bottom-width: 0;\n}\n\n.list-group-item-primary {\n    color: #084298;\n    background-color: #cfe2ff;\n}\n\n.list-group-item-primary.list-group-item-action:hover, .list-group-item-primary.list-group-item-action:focus {\n    color: #084298;\n    background-color: #bacbe6;\n}\n\n.list-group-item-primary.list-group-item-action.active {\n    color: #fff;\n    background-color: #084298;\n    border-color: #084298;\n}\n\n.list-group-item-secondary {\n    color: #41464b;\n    background-color: #e2e3e5;\n}\n\n.list-group-item-secondary.list-group-item-action:hover, .list-group-item-secondary.list-group-item-action:focus {\n    color: #41464b;\n    background-color: #cbccce;\n}\n\n.list-group-item-secondary.list-group-item-action.active {\n    color: #fff;\n    background-color: #41464b;\n    border-color: #41464b;\n}\n\n.list-group-item-success {\n    color: #0f5132;\n    background-color: #d1e7dd;\n}\n\n.list-group-item-success.list-group-item-action:hover, .list-group-item-success.list-group-item-action:focus {\n    color: #0f5132;\n    background-color: #bcd0c7;\n}\n\n.list-group-item-success.list-group-item-action.active {\n    color: #fff;\n    background-color: #0f5132;\n    border-color: #0f5132;\n}\n\n.list-group-item-info {\n    color: #055160;\n    background-color: #cff4fc;\n}\n\n.list-group-item-info.list-group-item-action:hover, .list-group-item-info.list-group-item-action:focus {\n    color: #055160;\n    background-color: #badce3;\n}\n\n.list-group-item-info.list-group-item-action.active {\n    color: #fff;\n    background-color: #055160;\n    border-color: #055160;\n}\n\n.list-group-item-warning {\n    color: #664d03;\n    background-color: #fff3cd;\n}\n\n.list-group-item-warning.list-group-item-action:hover, .list-group-item-warning.list-group-item-action:focus {\n    color: #664d03;\n    background-color: #e6dbb9;\n}\n\n.list-group-item-warning.list-group-item-action.active {\n    color: #fff;\n    background-color: #664d03;\n    border-color: #664d03;\n}\n\n.list-group-item-danger {\n    color: #842029;\n    background-color: #f8d7da;\n}\n\n.list-group-item-danger.list-group-item-action:hover, .list-group-item-danger.list-group-item-action:focus {\n    color: #842029;\n    background-color: #dfc2c4;\n}\n\n.list-group-item-danger.list-group-item-action.active {\n    color: #fff;\n    background-color: #842029;\n    border-color: #842029;\n}\n\n.list-group-item-light {\n    color: #636464;\n    background-color: #fefefe;\n}\n\n.list-group-item-light.list-group-item-action:hover, .list-group-item-light.list-group-item-action:focus {\n    color: #636464;\n    background-color: #e5e5e5;\n}\n\n.list-group-item-light.list-group-item-action.active {\n    color: #fff;\n    background-color: #636464;\n    border-color: #636464;\n}\n\n.list-group-item-dark {\n    color: #141619;\n    background-color: #d3d3d4;\n}\n\n.list-group-item-dark.list-group-item-action:hover, .list-group-item-dark.list-group-item-action:focus {\n    color: #141619;\n    background-color: #bebebf;\n}\n\n.list-group-item-dark.list-group-item-action.active {\n    color: #fff;\n    background-color: #141619;\n    border-color: #141619;\n}\n\n.btn-close {\n    box-sizing: content-box;\n    width: 1em;\n    height: 1em;\n    padding: 0.25em 0.25em;\n    color: #000;\n    background: transparent url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23000'%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\") center/1em auto no-repeat;\n    border: 0;\n    border-radius: 0.375rem;\n    opacity: 0.5;\n}\n\n.btn-close:hover {\n    color: #000;\n    text-decoration: none;\n    opacity: 0.75;\n}\n\n.btn-close:focus {\n    outline: 0;\n    box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n    opacity: 1;\n}\n\n.btn-close:disabled, .btn-close.disabled {\n    pointer-events: none;\n    -webkit-user-select: none;\n    -moz-user-select: none;\n    user-select: none;\n    opacity: 0.25;\n}\n\n.btn-close-white {\n    filter: invert(1) grayscale(100%) brightness(200%);\n}\n\n.toast {\n    --bs-toast-zindex: 1090;\n    --bs-toast-padding-x: 0.75rem;\n    --bs-toast-padding-y: 0.5rem;\n    --bs-toast-spacing: 1.5rem;\n    --bs-toast-max-width: 350px;\n    --bs-toast-font-size: 0.875rem;\n    --bs-toast-color: ;\n    --bs-toast-bg: rgba(255, 255, 255, 0.85);\n    --bs-toast-border-width: 1px;\n    --bs-toast-border-color: var(--bs-border-color-translucent);\n    --bs-toast-border-radius: 0.375rem;\n    --bs-toast-box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15);\n    --bs-toast-header-color: #6c757d;\n    --bs-toast-header-bg: rgba(255, 255, 255, 0.85);\n    --bs-toast-header-border-color: rgba(0, 0, 0, 0.05);\n    width: var(--bs-toast-max-width);\n    max-width: 100%;\n    font-size: var(--bs-toast-font-size);\n    color: var(--bs-toast-color);\n    pointer-events: auto;\n    background-color: var(--bs-toast-bg);\n    background-clip: padding-box;\n    border: var(--bs-toast-border-width) solid var(--bs-toast-border-color);\n    box-shadow: var(--bs-toast-box-shadow);\n    border-radius: var(--bs-toast-border-radius);\n}\n\n.toast.showing {\n    opacity: 0;\n}\n\n.toast:not(.show) {\n    display: none;\n}\n\n.toast-container {\n    --bs-toast-zindex: 1090;\n    position: absolute;\n    z-index: var(--bs-toast-zindex);\n    width: -webkit-max-content;\n    width: -moz-max-content;\n    width: max-content;\n    max-width: 100%;\n    pointer-events: none;\n}\n\n.toast-container > :not(:last-child) {\n    margin-bottom: var(--bs-toast-spacing);\n}\n\n.toast-header {\n    display: flex;\n    align-items: center;\n    padding: var(--bs-toast-padding-y) var(--bs-toast-padding-x);\n    color: var(--bs-toast-header-color);\n    background-color: var(--bs-toast-header-bg);\n    background-clip: padding-box;\n    border-bottom: var(--bs-toast-border-width) solid var(--bs-toast-header-border-color);\n    border-top-left-radius: calc(var(--bs-toast-border-radius) - var(--bs-toast-border-width));\n    border-top-right-radius: calc(var(--bs-toast-border-radius) - var(--bs-toast-border-width));\n}\n\n.toast-header .btn-close {\n    margin-right: calc(-0.5 * var(--bs-toast-padding-x));\n    margin-left: var(--bs-toast-padding-x);\n}\n\n.toast-body {\n    padding: var(--bs-toast-padding-x);\n    word-wrap: break-word;\n}\n\n.modal {\n    --bs-modal-zindex: 1055;\n    --bs-modal-width: 500px;\n    --bs-modal-padding: 1rem;\n    --bs-modal-margin: 0.5rem;\n    --bs-modal-color: ;\n    --bs-modal-bg: #fff;\n    --bs-modal-border-color: var(--bs-border-color-translucent);\n    --bs-modal-border-width: 1px;\n    --bs-modal-border-radius: 0.5rem;\n    --bs-modal-box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075);\n    --bs-modal-inner-border-radius: calc(0.5rem - 1px);\n    --bs-modal-header-padding-x: 1rem;\n    --bs-modal-header-padding-y: 1rem;\n    --bs-modal-header-padding: 1rem 1rem;\n    --bs-modal-header-border-color: var(--bs-border-color);\n    --bs-modal-header-border-width: 1px;\n    --bs-modal-title-line-height: 1.5;\n    --bs-modal-footer-gap: 0.5rem;\n    --bs-modal-footer-bg: ;\n    --bs-modal-footer-border-color: var(--bs-border-color);\n    --bs-modal-footer-border-width: 1px;\n    position: fixed;\n    top: 0;\n    left: 0;\n    z-index: var(--bs-modal-zindex);\n    display: none;\n    width: 100%;\n    height: 100%;\n    overflow-x: hidden;\n    overflow-y: auto;\n    outline: 0;\n}\n\n.modal-dialog {\n    position: relative;\n    width: auto;\n    margin: var(--bs-modal-margin);\n    pointer-events: none;\n}\n\n.modal.fade .modal-dialog {\n    transition: transform 0.3s ease-out;\n    transform: translate(0, -50px);\n}\n\n@media (prefers-reduced-motion: reduce) {\n    .modal.fade .modal-dialog {\n        transition: none;\n    }\n}\n\n.modal.show .modal-dialog {\n    transform: none;\n}\n\n.modal.modal-static .modal-dialog {\n    transform: scale(1.02);\n}\n\n.modal-dialog-scrollable {\n    height: calc(100% - var(--bs-modal-margin) * 2);\n}\n\n.modal-dialog-scrollable .modal-content {\n    max-height: 100%;\n    overflow: hidden;\n}\n\n.modal-dialog-scrollable .modal-body {\n    overflow-y: auto;\n}\n\n.modal-dialog-centered {\n    display: flex;\n    align-items: center;\n    min-height: calc(100% - var(--bs-modal-margin) * 2);\n}\n\n.modal-content {\n    position: relative;\n    display: flex;\n    flex-direction: column;\n    width: 100%;\n    color: var(--bs-modal-color);\n    pointer-events: auto;\n    background-color: var(--bs-modal-bg);\n    background-clip: padding-box;\n    border: var(--bs-modal-border-width) solid var(--bs-modal-border-color);\n    border-radius: var(--bs-modal-border-radius);\n    outline: 0;\n}\n\n.modal-backdrop {\n    --bs-backdrop-zindex: 1050;\n    --bs-backdrop-bg: #000;\n    --bs-backdrop-opacity: 0.5;\n    position: fixed;\n    top: 0;\n    left: 0;\n    z-index: var(--bs-backdrop-zindex);\n    width: 100vw;\n    height: 100vh;\n    background-color: var(--bs-backdrop-bg);\n}\n\n.modal-backdrop.fade {\n    opacity: 0;\n}\n\n.modal-backdrop.show {\n    opacity: var(--bs-backdrop-opacity);\n}\n\n.modal-header {\n    display: flex;\n    flex-shrink: 0;\n    align-items: center;\n    justify-content: space-between;\n    padding: var(--bs-modal-header-padding);\n    border-bottom: var(--bs-modal-header-border-width) solid var(--bs-modal-header-border-color);\n    border-top-left-radius: var(--bs-modal-inner-border-radius);\n    border-top-right-radius: var(--bs-modal-inner-border-radius);\n}\n\n.modal-header .btn-close {\n    padding: calc(var(--bs-modal-header-padding-y) * 0.5) calc(var(--bs-modal-header-padding-x) * 0.5);\n    margin: calc(-0.5 * var(--bs-modal-header-padding-y)) calc(-0.5 * var(--bs-modal-header-padding-x)) calc(-0.5 * var(--bs-modal-header-padding-y)) auto;\n}\n\n.modal-title {\n    margin-bottom: 0;\n    line-height: var(--bs-modal-title-line-height);\n}\n\n.modal-body {\n    position: relative;\n    flex: 1 1 auto;\n    padding: var(--bs-modal-padding);\n}\n\n.modal-footer {\n    display: flex;\n    flex-shrink: 0;\n    flex-wrap: wrap;\n    align-items: center;\n    justify-content: flex-end;\n    padding: calc(var(--bs-modal-padding) - var(--bs-modal-footer-gap) * 0.5);\n    background-color: var(--bs-modal-footer-bg);\n    border-top: var(--bs-modal-footer-border-width) solid var(--bs-modal-footer-border-color);\n    border-bottom-right-radius: var(--bs-modal-inner-border-radius);\n    border-bottom-left-radius: var(--bs-modal-inner-border-radius);\n}\n\n.modal-footer > * {\n    margin: calc(var(--bs-modal-footer-gap) * 0.5);\n}\n\n@media (min-width: 576px) {\n    .modal {\n        --bs-modal-margin: 1.75rem;\n        --bs-modal-box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15);\n    }\n\n    .modal-dialog {\n        max-width: var(--bs-modal-width);\n        margin-right: auto;\n        margin-left: auto;\n    }\n\n    .modal-sm {\n        --bs-modal-width: 300px;\n    }\n}\n\n@media (min-width: 992px) {\n    .modal-lg,\n    .modal-xl {\n        --bs-modal-width: 800px;\n    }\n}\n\n@media (min-width: 1200px) {\n    .modal-xl {\n        --bs-modal-width: 1140px;\n    }\n}\n\n.modal-fullscreen {\n    width: 100vw;\n    max-width: none;\n    height: 100%;\n    margin: 0;\n}\n\n.modal-fullscreen .modal-content {\n    height: 100%;\n    border: 0;\n    border-radius: 0;\n}\n\n.modal-fullscreen .modal-header,\n.modal-fullscreen .modal-footer {\n    border-radius: 0;\n}\n\n.modal-fullscreen .modal-body {\n    overflow-y: auto;\n}\n\n@media (max-width: 575.98px) {\n    .modal-fullscreen-sm-down {\n        width: 100vw;\n        max-width: none;\n        height: 100%;\n        margin: 0;\n    }\n\n    .modal-fullscreen-sm-down .modal-content {\n        height: 100%;\n        border: 0;\n        border-radius: 0;\n    }\n\n    .modal-fullscreen-sm-down .modal-header,\n    .modal-fullscreen-sm-down .modal-footer {\n        border-radius: 0;\n    }\n\n    .modal-fullscreen-sm-down .modal-body {\n        overflow-y: auto;\n    }\n}\n\n@media (max-width: 767.98px) {\n    .modal-fullscreen-md-down {\n        width: 100vw;\n        max-width: none;\n        height: 100%;\n        margin: 0;\n    }\n\n    .modal-fullscreen-md-down .modal-content {\n        height: 100%;\n        border: 0;\n        border-radius: 0;\n    }\n\n    .modal-fullscreen-md-down .modal-header,\n    .modal-fullscreen-md-down .modal-footer {\n        border-radius: 0;\n    }\n\n    .modal-fullscreen-md-down .modal-body {\n        overflow-y: auto;\n    }\n}\n\n@media (max-width: 991.98px) {\n    .modal-fullscreen-lg-down {\n        width: 100vw;\n        max-width: none;\n        height: 100%;\n        margin: 0;\n    }\n\n    .modal-fullscreen-lg-down .modal-content {\n        height: 100%;\n        border: 0;\n        border-radius: 0;\n    }\n\n    .modal-fullscreen-lg-down .modal-header,\n    .modal-fullscreen-lg-down .modal-footer {\n        border-radius: 0;\n    }\n\n    .modal-fullscreen-lg-down .modal-body {\n        overflow-y: auto;\n    }\n}\n\n@media (max-width: 1199.98px) {\n    .modal-fullscreen-xl-down {\n        width: 100vw;\n        max-width: none;\n        height: 100%;\n        margin: 0;\n    }\n\n    .modal-fullscreen-xl-down .modal-content {\n        height: 100%;\n        border: 0;\n        border-radius: 0;\n    }\n\n    .modal-fullscreen-xl-down .modal-header,\n    .modal-fullscreen-xl-down .modal-footer {\n        border-radius: 0;\n    }\n\n    .modal-fullscreen-xl-down .modal-body {\n        overflow-y: auto;\n    }\n}\n\n@media (max-width: 1399.98px) {\n    .modal-fullscreen-xxl-down {\n        width: 100vw;\n        max-width: none;\n        height: 100%;\n        margin: 0;\n    }\n\n    .modal-fullscreen-xxl-down .modal-content {\n        height: 100%;\n        border: 0;\n        border-radius: 0;\n    }\n\n    .modal-fullscreen-xxl-down .modal-header,\n    .modal-fullscreen-xxl-down .modal-footer {\n        border-radius: 0;\n    }\n\n    .modal-fullscreen-xxl-down .modal-body {\n        overflow-y: auto;\n    }\n}\n\n.tooltip {\n    --bs-tooltip-zindex: 1080;\n    --bs-tooltip-max-width: 200px;\n    --bs-tooltip-padding-x: 0.5rem;\n    --bs-tooltip-padding-y: 0.25rem;\n    --bs-tooltip-margin: ;\n    --bs-tooltip-font-size: 0.875rem;\n    --bs-tooltip-color: #fff;\n    --bs-tooltip-bg: #000;\n    --bs-tooltip-border-radius: 0.375rem;\n    --bs-tooltip-opacity: 0.9;\n    --bs-tooltip-arrow-width: 0.8rem;\n    --bs-tooltip-arrow-height: 0.4rem;\n    z-index: var(--bs-tooltip-zindex);\n    display: block;\n    padding: var(--bs-tooltip-arrow-height);\n    margin: var(--bs-tooltip-margin);\n    font-family: var(--bs-font-sans-serif);\n    font-style: normal;\n    font-weight: 400;\n    line-height: 1.5;\n    text-align: left;\n    text-align: start;\n    text-decoration: none;\n    text-shadow: none;\n    text-transform: none;\n    letter-spacing: normal;\n    word-break: normal;\n    white-space: normal;\n    word-spacing: normal;\n    line-break: auto;\n    font-size: var(--bs-tooltip-font-size);\n    word-wrap: break-word;\n    opacity: 0;\n}\n\n.tooltip.show {\n    opacity: var(--bs-tooltip-opacity);\n}\n\n.tooltip .tooltip-arrow {\n    display: block;\n    width: var(--bs-tooltip-arrow-width);\n    height: var(--bs-tooltip-arrow-height);\n}\n\n.tooltip .tooltip-arrow::before {\n    position: absolute;\n    content: \"\";\n    border-color: transparent;\n    border-style: solid;\n}\n\n.bs-tooltip-top .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow {\n    bottom: 0;\n}\n\n.bs-tooltip-top .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow::before {\n    top: -1px;\n    border-width: var(--bs-tooltip-arrow-height) calc(var(--bs-tooltip-arrow-width) * 0.5) 0;\n    border-top-color: var(--bs-tooltip-bg);\n}\n\n/* rtl:begin:ignore */\n.bs-tooltip-end .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow {\n    left: 0;\n    width: var(--bs-tooltip-arrow-height);\n    height: var(--bs-tooltip-arrow-width);\n}\n\n.bs-tooltip-end .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow::before {\n    right: -1px;\n    border-width: calc(var(--bs-tooltip-arrow-width) * 0.5) var(--bs-tooltip-arrow-height) calc(var(--bs-tooltip-arrow-width) * 0.5) 0;\n    border-right-color: var(--bs-tooltip-bg);\n}\n\n/* rtl:end:ignore */\n.bs-tooltip-bottom .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow {\n    top: 0;\n}\n\n.bs-tooltip-bottom .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow::before {\n    bottom: -1px;\n    border-width: 0 calc(var(--bs-tooltip-arrow-width) * 0.5) var(--bs-tooltip-arrow-height);\n    border-bottom-color: var(--bs-tooltip-bg);\n}\n\n/* rtl:begin:ignore */\n.bs-tooltip-start .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow {\n    right: 0;\n    width: var(--bs-tooltip-arrow-height);\n    height: var(--bs-tooltip-arrow-width);\n}\n\n.bs-tooltip-start .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow::before {\n    left: -1px;\n    border-width: calc(var(--bs-tooltip-arrow-width) * 0.5) 0 calc(var(--bs-tooltip-arrow-width) * 0.5) var(--bs-tooltip-arrow-height);\n    border-left-color: var(--bs-tooltip-bg);\n}\n\n/* rtl:end:ignore */\n.tooltip-inner {\n    max-width: var(--bs-tooltip-max-width);\n    padding: var(--bs-tooltip-padding-y) var(--bs-tooltip-padding-x);\n    color: var(--bs-tooltip-color);\n    text-align: center;\n    background-color: var(--bs-tooltip-bg);\n    border-radius: var(--bs-tooltip-border-radius);\n}\n\n.popover {\n    --bs-popover-zindex: 1070;\n    --bs-popover-max-width: 276px;\n    --bs-popover-font-size: 0.875rem;\n    --bs-popover-bg: #fff;\n    --bs-popover-border-width: 1px;\n    --bs-popover-border-color: var(--bs-border-color-translucent);\n    --bs-popover-border-radius: 0.5rem;\n    --bs-popover-inner-border-radius: calc(0.5rem - 1px);\n    --bs-popover-box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15);\n    --bs-popover-header-padding-x: 1rem;\n    --bs-popover-header-padding-y: 0.5rem;\n    --bs-popover-header-font-size: 1rem;\n    --bs-popover-header-color: ;\n    --bs-popover-header-bg: #f0f0f0;\n    --bs-popover-body-padding-x: 1rem;\n    --bs-popover-body-padding-y: 1rem;\n    --bs-popover-body-color: #212529;\n    --bs-popover-arrow-width: 1rem;\n    --bs-popover-arrow-height: 0.5rem;\n    --bs-popover-arrow-border: var(--bs-popover-border-color);\n    z-index: var(--bs-popover-zindex);\n    display: block;\n    max-width: var(--bs-popover-max-width);\n    font-family: var(--bs-font-sans-serif);\n    font-style: normal;\n    font-weight: 400;\n    line-height: 1.5;\n    text-align: left;\n    text-align: start;\n    text-decoration: none;\n    text-shadow: none;\n    text-transform: none;\n    letter-spacing: normal;\n    word-break: normal;\n    white-space: normal;\n    word-spacing: normal;\n    line-break: auto;\n    font-size: var(--bs-popover-font-size);\n    word-wrap: break-word;\n    background-color: var(--bs-popover-bg);\n    background-clip: padding-box;\n    border: var(--bs-popover-border-width) solid var(--bs-popover-border-color);\n    border-radius: var(--bs-popover-border-radius);\n}\n\n.popover .popover-arrow {\n    display: block;\n    width: var(--bs-popover-arrow-width);\n    height: var(--bs-popover-arrow-height);\n}\n\n.popover .popover-arrow::before, .popover .popover-arrow::after {\n    position: absolute;\n    display: block;\n    content: \"\";\n    border-color: transparent;\n    border-style: solid;\n    border-width: 0;\n}\n\n.bs-popover-top > .popover-arrow, .bs-popover-auto[data-popper-placement^=top] > .popover-arrow {\n    bottom: calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width));\n}\n\n.bs-popover-top > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=top] > .popover-arrow::before, .bs-popover-top > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=top] > .popover-arrow::after {\n    border-width: var(--bs-popover-arrow-height) calc(var(--bs-popover-arrow-width) * 0.5) 0;\n}\n\n.bs-popover-top > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=top] > .popover-arrow::before {\n    bottom: 0;\n    border-top-color: var(--bs-popover-arrow-border);\n}\n\n.bs-popover-top > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=top] > .popover-arrow::after {\n    bottom: var(--bs-popover-border-width);\n    border-top-color: var(--bs-popover-bg);\n}\n\n/* rtl:begin:ignore */\n.bs-popover-end > .popover-arrow, .bs-popover-auto[data-popper-placement^=right] > .popover-arrow {\n    left: calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width));\n    width: var(--bs-popover-arrow-height);\n    height: var(--bs-popover-arrow-width);\n}\n\n.bs-popover-end > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=right] > .popover-arrow::before, .bs-popover-end > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=right] > .popover-arrow::after {\n    border-width: calc(var(--bs-popover-arrow-width) * 0.5) var(--bs-popover-arrow-height) calc(var(--bs-popover-arrow-width) * 0.5) 0;\n}\n\n.bs-popover-end > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=right] > .popover-arrow::before {\n    left: 0;\n    border-right-color: var(--bs-popover-arrow-border);\n}\n\n.bs-popover-end > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=right] > .popover-arrow::after {\n    left: var(--bs-popover-border-width);\n    border-right-color: var(--bs-popover-bg);\n}\n\n/* rtl:end:ignore */\n.bs-popover-bottom > .popover-arrow, .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow {\n    top: calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width));\n}\n\n.bs-popover-bottom > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow::before, .bs-popover-bottom > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow::after {\n    border-width: 0 calc(var(--bs-popover-arrow-width) * 0.5) var(--bs-popover-arrow-height);\n}\n\n.bs-popover-bottom > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow::before {\n    top: 0;\n    border-bottom-color: var(--bs-popover-arrow-border);\n}\n\n.bs-popover-bottom > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow::after {\n    top: var(--bs-popover-border-width);\n    border-bottom-color: var(--bs-popover-bg);\n}\n\n.bs-popover-bottom .popover-header::before, .bs-popover-auto[data-popper-placement^=bottom] .popover-header::before {\n    position: absolute;\n    top: 0;\n    left: 50%;\n    display: block;\n    width: var(--bs-popover-arrow-width);\n    margin-left: calc(-0.5 * var(--bs-popover-arrow-width));\n    content: \"\";\n    border-bottom: var(--bs-popover-border-width) solid var(--bs-popover-header-bg);\n}\n\n/* rtl:begin:ignore */\n.bs-popover-start > .popover-arrow, .bs-popover-auto[data-popper-placement^=left] > .popover-arrow {\n    right: calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width));\n    width: var(--bs-popover-arrow-height);\n    height: var(--bs-popover-arrow-width);\n}\n\n.bs-popover-start > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=left] > .popover-arrow::before, .bs-popover-start > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=left] > .popover-arrow::after {\n    border-width: calc(var(--bs-popover-arrow-width) * 0.5) 0 calc(var(--bs-popover-arrow-width) * 0.5) var(--bs-popover-arrow-height);\n}\n\n.bs-popover-start > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=left] > .popover-arrow::before {\n    right: 0;\n    border-left-color: var(--bs-popover-arrow-border);\n}\n\n.bs-popover-start > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=left] > .popover-arrow::after {\n    right: var(--bs-popover-border-width);\n    border-left-color: var(--bs-popover-bg);\n}\n\n/* rtl:end:ignore */\n.popover-header {\n    padding: var(--bs-popover-header-padding-y) var(--bs-popover-header-padding-x);\n    margin-bottom: 0;\n    font-size: var(--bs-popover-header-font-size);\n    color: var(--bs-popover-header-color);\n    background-color: var(--bs-popover-header-bg);\n    border-bottom: var(--bs-popover-border-width) solid var(--bs-popover-border-color);\n    border-top-left-radius: var(--bs-popover-inner-border-radius);\n    border-top-right-radius: var(--bs-popover-inner-border-radius);\n}\n\n.popover-header:empty {\n    display: none;\n}\n\n.popover-body {\n    padding: var(--bs-popover-body-padding-y) var(--bs-popover-body-padding-x);\n    color: var(--bs-popover-body-color);\n}\n\n.carousel {\n    position: relative;\n}\n\n.carousel.pointer-event {\n    touch-action: pan-y;\n}\n\n.carousel-inner {\n    position: relative;\n    width: 100%;\n    overflow: hidden;\n}\n\n.carousel-inner::after {\n    display: block;\n    clear: both;\n    content: \"\";\n}\n\n.carousel-item {\n    position: relative;\n    display: none;\n    float: left;\n    width: 100%;\n    margin-right: -100%;\n    -webkit-backface-visibility: hidden;\n    backface-visibility: hidden;\n    transition: transform 0.6s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n    .carousel-item {\n        transition: none;\n    }\n}\n\n.carousel-item.active,\n.carousel-item-next,\n.carousel-item-prev {\n    display: block;\n}\n\n.carousel-item-next:not(.carousel-item-start),\n.active.carousel-item-end {\n    transform: translateX(100%);\n}\n\n.carousel-item-prev:not(.carousel-item-end),\n.active.carousel-item-start {\n    transform: translateX(-100%);\n}\n\n.carousel-fade .carousel-item {\n    opacity: 0;\n    transition-property: opacity;\n    transform: none;\n}\n\n.carousel-fade .carousel-item.active,\n.carousel-fade .carousel-item-next.carousel-item-start,\n.carousel-fade .carousel-item-prev.carousel-item-end {\n    z-index: 1;\n    opacity: 1;\n}\n\n.carousel-fade .active.carousel-item-start,\n.carousel-fade .active.carousel-item-end {\n    z-index: 0;\n    opacity: 0;\n    transition: opacity 0s 0.6s;\n}\n\n@media (prefers-reduced-motion: reduce) {\n    .carousel-fade .active.carousel-item-start,\n    .carousel-fade .active.carousel-item-end {\n        transition: none;\n    }\n}\n\n.carousel-control-prev,\n.carousel-control-next {\n    position: absolute;\n    top: 0;\n    bottom: 0;\n    z-index: 1;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    width: 15%;\n    padding: 0;\n    color: #fff;\n    text-align: center;\n    background: none;\n    border: 0;\n    opacity: 0.5;\n    transition: opacity 0.15s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n    .carousel-control-prev,\n    .carousel-control-next {\n        transition: none;\n    }\n}\n\n.carousel-control-prev:hover, .carousel-control-prev:focus,\n.carousel-control-next:hover,\n.carousel-control-next:focus {\n    color: #fff;\n    text-decoration: none;\n    outline: 0;\n    opacity: 0.9;\n}\n\n.carousel-control-prev {\n    left: 0;\n}\n\n.carousel-control-next {\n    right: 0;\n}\n\n.carousel-control-prev-icon,\n.carousel-control-next-icon {\n    display: inline-block;\n    width: 2rem;\n    height: 2rem;\n    background-repeat: no-repeat;\n    background-position: 50%;\n    background-size: 100% 100%;\n}\n\n/* rtl:options: {\n  \"autoRename\": true,\n  \"stringMap\":[ {\n    \"name\"    : \"prev-next\",\n    \"search\"  : \"prev\",\n    \"replace\" : \"next\"\n  } ]\n} */\n.carousel-control-prev-icon {\n    background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0z'/%3e%3c/svg%3e\");\n}\n\n.carousel-control-next-icon {\n    background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e\");\n}\n\n.carousel-indicators {\n    position: absolute;\n    right: 0;\n    bottom: 0;\n    left: 0;\n    z-index: 2;\n    display: flex;\n    justify-content: center;\n    padding: 0;\n    margin-right: 15%;\n    margin-bottom: 1rem;\n    margin-left: 15%;\n    list-style: none;\n}\n\n.carousel-indicators [data-bs-target] {\n    box-sizing: content-box;\n    flex: 0 1 auto;\n    width: 30px;\n    height: 3px;\n    padding: 0;\n    margin-right: 3px;\n    margin-left: 3px;\n    text-indent: -999px;\n    cursor: pointer;\n    background-color: #fff;\n    background-clip: padding-box;\n    border: 0;\n    border-top: 10px solid transparent;\n    border-bottom: 10px solid transparent;\n    opacity: 0.5;\n    transition: opacity 0.6s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n    .carousel-indicators [data-bs-target] {\n        transition: none;\n    }\n}\n\n.carousel-indicators .active {\n    opacity: 1;\n}\n\n.carousel-caption {\n    position: absolute;\n    right: 15%;\n    bottom: 1.25rem;\n    left: 15%;\n    padding-top: 1.25rem;\n    padding-bottom: 1.25rem;\n    color: #fff;\n    text-align: center;\n}\n\n.carousel-dark .carousel-control-prev-icon,\n.carousel-dark .carousel-control-next-icon {\n    filter: invert(1) grayscale(100);\n}\n\n.carousel-dark .carousel-indicators [data-bs-target] {\n    background-color: #000;\n}\n\n.carousel-dark .carousel-caption {\n    color: #000;\n}\n\n.spinner-grow,\n.spinner-border {\n    display: inline-block;\n    width: var(--bs-spinner-width);\n    height: var(--bs-spinner-height);\n    vertical-align: var(--bs-spinner-vertical-align);\n    border-radius: 50%;\n    animation: var(--bs-spinner-animation-speed) linear infinite var(--bs-spinner-animation-name);\n}\n\n@keyframes spinner-border {\n    to {\n        transform: rotate(360deg) /* rtl:ignore */;\n    }\n}\n\n.spinner-border {\n    --bs-spinner-width: 2rem;\n    --bs-spinner-height: 2rem;\n    --bs-spinner-vertical-align: -0.125em;\n    --bs-spinner-border-width: 0.25em;\n    --bs-spinner-animation-speed: 0.75s;\n    --bs-spinner-animation-name: spinner-border;\n    border: var(--bs-spinner-border-width) solid currentcolor;\n    border-right-color: transparent;\n}\n\n.spinner-border-sm {\n    --bs-spinner-width: 1rem;\n    --bs-spinner-height: 1rem;\n    --bs-spinner-border-width: 0.2em;\n}\n\n@keyframes spinner-grow {\n    0% {\n        transform: scale(0);\n    }\n    50% {\n        opacity: 1;\n        transform: none;\n    }\n}\n\n.spinner-grow {\n    --bs-spinner-width: 2rem;\n    --bs-spinner-height: 2rem;\n    --bs-spinner-vertical-align: -0.125em;\n    --bs-spinner-animation-speed: 0.75s;\n    --bs-spinner-animation-name: spinner-grow;\n    background-color: currentcolor;\n    opacity: 0;\n}\n\n.spinner-grow-sm {\n    --bs-spinner-width: 1rem;\n    --bs-spinner-height: 1rem;\n}\n\n@media (prefers-reduced-motion: reduce) {\n    .spinner-border,\n    .spinner-grow {\n        --bs-spinner-animation-speed: 1.5s;\n    }\n}\n\n.offcanvas, .offcanvas-xxl, .offcanvas-xl, .offcanvas-lg, .offcanvas-md, .offcanvas-sm {\n    --bs-offcanvas-zindex: 1045;\n    --bs-offcanvas-width: 400px;\n    --bs-offcanvas-height: 30vh;\n    --bs-offcanvas-padding-x: 1rem;\n    --bs-offcanvas-padding-y: 1rem;\n    --bs-offcanvas-color: ;\n    --bs-offcanvas-bg: #fff;\n    --bs-offcanvas-border-width: 1px;\n    --bs-offcanvas-border-color: var(--bs-border-color-translucent);\n    --bs-offcanvas-box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075);\n}\n\n@media (max-width: 575.98px) {\n    .offcanvas-sm {\n        position: fixed;\n        bottom: 0;\n        z-index: var(--bs-offcanvas-zindex);\n        display: flex;\n        flex-direction: column;\n        max-width: 100%;\n        color: var(--bs-offcanvas-color);\n        visibility: hidden;\n        background-color: var(--bs-offcanvas-bg);\n        background-clip: padding-box;\n        outline: 0;\n        transition: transform 0.3s ease-in-out;\n    }\n}\n\n@media (max-width: 575.98px) and (prefers-reduced-motion: reduce) {\n    .offcanvas-sm {\n        transition: none;\n    }\n}\n\n@media (max-width: 575.98px) {\n    .offcanvas-sm.offcanvas-start {\n        top: 0;\n        left: 0;\n        width: var(--bs-offcanvas-width);\n        border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n        transform: translateX(-100%);\n    }\n}\n\n@media (max-width: 575.98px) {\n    .offcanvas-sm.offcanvas-end {\n        top: 0;\n        right: 0;\n        width: var(--bs-offcanvas-width);\n        border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n        transform: translateX(100%);\n    }\n}\n\n@media (max-width: 575.98px) {\n    .offcanvas-sm.offcanvas-top {\n        top: 0;\n        right: 0;\n        left: 0;\n        height: var(--bs-offcanvas-height);\n        max-height: 100%;\n        border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n        transform: translateY(-100%);\n    }\n}\n\n@media (max-width: 575.98px) {\n    .offcanvas-sm.offcanvas-bottom {\n        right: 0;\n        left: 0;\n        height: var(--bs-offcanvas-height);\n        max-height: 100%;\n        border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n        transform: translateY(100%);\n    }\n}\n\n@media (max-width: 575.98px) {\n    .offcanvas-sm.showing, .offcanvas-sm.show:not(.hiding) {\n        transform: none;\n    }\n}\n\n@media (max-width: 575.98px) {\n    .offcanvas-sm.showing, .offcanvas-sm.hiding, .offcanvas-sm.show {\n        visibility: visible;\n    }\n}\n\n@media (min-width: 576px) {\n    .offcanvas-sm {\n        --bs-offcanvas-height: auto;\n        --bs-offcanvas-border-width: 0;\n        background-color: transparent !important;\n    }\n\n    .offcanvas-sm .offcanvas-header {\n        display: none;\n    }\n\n    .offcanvas-sm .offcanvas-body {\n        display: flex;\n        flex-grow: 0;\n        padding: 0;\n        overflow-y: visible;\n        background-color: transparent !important;\n    }\n}\n\n@media (max-width: 767.98px) {\n    .offcanvas-md {\n        position: fixed;\n        bottom: 0;\n        z-index: var(--bs-offcanvas-zindex);\n        display: flex;\n        flex-direction: column;\n        max-width: 100%;\n        color: var(--bs-offcanvas-color);\n        visibility: hidden;\n        background-color: var(--bs-offcanvas-bg);\n        background-clip: padding-box;\n        outline: 0;\n        transition: transform 0.3s ease-in-out;\n    }\n}\n\n@media (max-width: 767.98px) and (prefers-reduced-motion: reduce) {\n    .offcanvas-md {\n        transition: none;\n    }\n}\n\n@media (max-width: 767.98px) {\n    .offcanvas-md.offcanvas-start {\n        top: 0;\n        left: 0;\n        width: var(--bs-offcanvas-width);\n        border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n        transform: translateX(-100%);\n    }\n}\n\n@media (max-width: 767.98px) {\n    .offcanvas-md.offcanvas-end {\n        top: 0;\n        right: 0;\n        width: var(--bs-offcanvas-width);\n        border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n        transform: translateX(100%);\n    }\n}\n\n@media (max-width: 767.98px) {\n    .offcanvas-md.offcanvas-top {\n        top: 0;\n        right: 0;\n        left: 0;\n        height: var(--bs-offcanvas-height);\n        max-height: 100%;\n        border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n        transform: translateY(-100%);\n    }\n}\n\n@media (max-width: 767.98px) {\n    .offcanvas-md.offcanvas-bottom {\n        right: 0;\n        left: 0;\n        height: var(--bs-offcanvas-height);\n        max-height: 100%;\n        border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n        transform: translateY(100%);\n    }\n}\n\n@media (max-width: 767.98px) {\n    .offcanvas-md.showing, .offcanvas-md.show:not(.hiding) {\n        transform: none;\n    }\n}\n\n@media (max-width: 767.98px) {\n    .offcanvas-md.showing, .offcanvas-md.hiding, .offcanvas-md.show {\n        visibility: visible;\n    }\n}\n\n@media (min-width: 768px) {\n    .offcanvas-md {\n        --bs-offcanvas-height: auto;\n        --bs-offcanvas-border-width: 0;\n        background-color: transparent !important;\n    }\n\n    .offcanvas-md .offcanvas-header {\n        display: none;\n    }\n\n    .offcanvas-md .offcanvas-body {\n        display: flex;\n        flex-grow: 0;\n        padding: 0;\n        overflow-y: visible;\n        background-color: transparent !important;\n    }\n}\n\n@media (max-width: 991.98px) {\n    .offcanvas-lg {\n        position: fixed;\n        bottom: 0;\n        z-index: var(--bs-offcanvas-zindex);\n        display: flex;\n        flex-direction: column;\n        max-width: 100%;\n        color: var(--bs-offcanvas-color);\n        visibility: hidden;\n        background-color: var(--bs-offcanvas-bg);\n        background-clip: padding-box;\n        outline: 0;\n        transition: transform 0.3s ease-in-out;\n    }\n}\n\n@media (max-width: 991.98px) and (prefers-reduced-motion: reduce) {\n    .offcanvas-lg {\n        transition: none;\n    }\n}\n\n@media (max-width: 991.98px) {\n    .offcanvas-lg.offcanvas-start {\n        top: 0;\n        left: 0;\n        width: var(--bs-offcanvas-width);\n        border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n        transform: translateX(-100%);\n    }\n}\n\n@media (max-width: 991.98px) {\n    .offcanvas-lg.offcanvas-end {\n        top: 0;\n        right: 0;\n        width: var(--bs-offcanvas-width);\n        border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n        transform: translateX(100%);\n    }\n}\n\n@media (max-width: 991.98px) {\n    .offcanvas-lg.offcanvas-top {\n        top: 0;\n        right: 0;\n        left: 0;\n        height: var(--bs-offcanvas-height);\n        max-height: 100%;\n        border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n        transform: translateY(-100%);\n    }\n}\n\n@media (max-width: 991.98px) {\n    .offcanvas-lg.offcanvas-bottom {\n        right: 0;\n        left: 0;\n        height: var(--bs-offcanvas-height);\n        max-height: 100%;\n        border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n        transform: translateY(100%);\n    }\n}\n\n@media (max-width: 991.98px) {\n    .offcanvas-lg.showing, .offcanvas-lg.show:not(.hiding) {\n        transform: none;\n    }\n}\n\n@media (max-width: 991.98px) {\n    .offcanvas-lg.showing, .offcanvas-lg.hiding, .offcanvas-lg.show {\n        visibility: visible;\n    }\n}\n\n@media (min-width: 992px) {\n    .offcanvas-lg {\n        --bs-offcanvas-height: auto;\n        --bs-offcanvas-border-width: 0;\n        background-color: transparent !important;\n    }\n\n    .offcanvas-lg .offcanvas-header {\n        display: none;\n    }\n\n    .offcanvas-lg .offcanvas-body {\n        display: flex;\n        flex-grow: 0;\n        padding: 0;\n        overflow-y: visible;\n        background-color: transparent !important;\n    }\n}\n\n@media (max-width: 1199.98px) {\n    .offcanvas-xl {\n        position: fixed;\n        bottom: 0;\n        z-index: var(--bs-offcanvas-zindex);\n        display: flex;\n        flex-direction: column;\n        max-width: 100%;\n        color: var(--bs-offcanvas-color);\n        visibility: hidden;\n        background-color: var(--bs-offcanvas-bg);\n        background-clip: padding-box;\n        outline: 0;\n        transition: transform 0.3s ease-in-out;\n    }\n}\n\n@media (max-width: 1199.98px) and (prefers-reduced-motion: reduce) {\n    .offcanvas-xl {\n        transition: none;\n    }\n}\n\n@media (max-width: 1199.98px) {\n    .offcanvas-xl.offcanvas-start {\n        top: 0;\n        left: 0;\n        width: var(--bs-offcanvas-width);\n        border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n        transform: translateX(-100%);\n    }\n}\n\n@media (max-width: 1199.98px) {\n    .offcanvas-xl.offcanvas-end {\n        top: 0;\n        right: 0;\n        width: var(--bs-offcanvas-width);\n        border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n        transform: translateX(100%);\n    }\n}\n\n@media (max-width: 1199.98px) {\n    .offcanvas-xl.offcanvas-top {\n        top: 0;\n        right: 0;\n        left: 0;\n        height: var(--bs-offcanvas-height);\n        max-height: 100%;\n        border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n        transform: translateY(-100%);\n    }\n}\n\n@media (max-width: 1199.98px) {\n    .offcanvas-xl.offcanvas-bottom {\n        right: 0;\n        left: 0;\n        height: var(--bs-offcanvas-height);\n        max-height: 100%;\n        border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n        transform: translateY(100%);\n    }\n}\n\n@media (max-width: 1199.98px) {\n    .offcanvas-xl.showing, .offcanvas-xl.show:not(.hiding) {\n        transform: none;\n    }\n}\n\n@media (max-width: 1199.98px) {\n    .offcanvas-xl.showing, .offcanvas-xl.hiding, .offcanvas-xl.show {\n        visibility: visible;\n    }\n}\n\n@media (min-width: 1200px) {\n    .offcanvas-xl {\n        --bs-offcanvas-height: auto;\n        --bs-offcanvas-border-width: 0;\n        background-color: transparent !important;\n    }\n\n    .offcanvas-xl .offcanvas-header {\n        display: none;\n    }\n\n    .offcanvas-xl .offcanvas-body {\n        display: flex;\n        flex-grow: 0;\n        padding: 0;\n        overflow-y: visible;\n        background-color: transparent !important;\n    }\n}\n\n@media (max-width: 1399.98px) {\n    .offcanvas-xxl {\n        position: fixed;\n        bottom: 0;\n        z-index: var(--bs-offcanvas-zindex);\n        display: flex;\n        flex-direction: column;\n        max-width: 100%;\n        color: var(--bs-offcanvas-color);\n        visibility: hidden;\n        background-color: var(--bs-offcanvas-bg);\n        background-clip: padding-box;\n        outline: 0;\n        transition: transform 0.3s ease-in-out;\n    }\n}\n\n@media (max-width: 1399.98px) and (prefers-reduced-motion: reduce) {\n    .offcanvas-xxl {\n        transition: none;\n    }\n}\n\n@media (max-width: 1399.98px) {\n    .offcanvas-xxl.offcanvas-start {\n        top: 0;\n        left: 0;\n        width: var(--bs-offcanvas-width);\n        border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n        transform: translateX(-100%);\n    }\n}\n\n@media (max-width: 1399.98px) {\n    .offcanvas-xxl.offcanvas-end {\n        top: 0;\n        right: 0;\n        width: var(--bs-offcanvas-width);\n        border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n        transform: translateX(100%);\n    }\n}\n\n@media (max-width: 1399.98px) {\n    .offcanvas-xxl.offcanvas-top {\n        top: 0;\n        right: 0;\n        left: 0;\n        height: var(--bs-offcanvas-height);\n        max-height: 100%;\n        border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n        transform: translateY(-100%);\n    }\n}\n\n@media (max-width: 1399.98px) {\n    .offcanvas-xxl.offcanvas-bottom {\n        right: 0;\n        left: 0;\n        height: var(--bs-offcanvas-height);\n        max-height: 100%;\n        border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n        transform: translateY(100%);\n    }\n}\n\n@media (max-width: 1399.98px) {\n    .offcanvas-xxl.showing, .offcanvas-xxl.show:not(.hiding) {\n        transform: none;\n    }\n}\n\n@media (max-width: 1399.98px) {\n    .offcanvas-xxl.showing, .offcanvas-xxl.hiding, .offcanvas-xxl.show {\n        visibility: visible;\n    }\n}\n\n@media (min-width: 1400px) {\n    .offcanvas-xxl {\n        --bs-offcanvas-height: auto;\n        --bs-offcanvas-border-width: 0;\n        background-color: transparent !important;\n    }\n\n    .offcanvas-xxl .offcanvas-header {\n        display: none;\n    }\n\n    .offcanvas-xxl .offcanvas-body {\n        display: flex;\n        flex-grow: 0;\n        padding: 0;\n        overflow-y: visible;\n        background-color: transparent !important;\n    }\n}\n\n.offcanvas {\n    position: fixed;\n    bottom: 0;\n    z-index: var(--bs-offcanvas-zindex);\n    display: flex;\n    flex-direction: column;\n    max-width: 100%;\n    color: var(--bs-offcanvas-color);\n    visibility: hidden;\n    background-color: var(--bs-offcanvas-bg);\n    background-clip: padding-box;\n    outline: 0;\n    transition: transform 0.3s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n    .offcanvas {\n        transition: none;\n    }\n}\n\n.offcanvas.offcanvas-start {\n    top: 0;\n    left: 0;\n    width: var(--bs-offcanvas-width);\n    border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n    transform: translateX(-100%);\n}\n\n.offcanvas.offcanvas-end {\n    top: 0;\n    right: 0;\n    width: var(--bs-offcanvas-width);\n    border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n    transform: translateX(100%);\n}\n\n.offcanvas.offcanvas-top {\n    top: 0;\n    right: 0;\n    left: 0;\n    height: var(--bs-offcanvas-height);\n    max-height: 100%;\n    border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n    transform: translateY(-100%);\n}\n\n.offcanvas.offcanvas-bottom {\n    right: 0;\n    left: 0;\n    height: var(--bs-offcanvas-height);\n    max-height: 100%;\n    border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n    transform: translateY(100%);\n}\n\n.offcanvas.showing, .offcanvas.show:not(.hiding) {\n    transform: none;\n}\n\n.offcanvas.showing, .offcanvas.hiding, .offcanvas.show {\n    visibility: visible;\n}\n\n.offcanvas-backdrop {\n    position: fixed;\n    top: 0;\n    left: 0;\n    z-index: 1040;\n    width: 100vw;\n    height: 100vh;\n    background-color: #000;\n}\n\n.offcanvas-backdrop.fade {\n    opacity: 0;\n}\n\n.offcanvas-backdrop.show {\n    opacity: 0.5;\n}\n\n.offcanvas-header {\n    display: flex;\n    align-items: center;\n    justify-content: space-between;\n    padding: var(--bs-offcanvas-padding-y) var(--bs-offcanvas-padding-x);\n}\n\n.offcanvas-header .btn-close {\n    padding: calc(var(--bs-offcanvas-padding-y) * 0.5) calc(var(--bs-offcanvas-padding-x) * 0.5);\n    margin-top: calc(-0.5 * var(--bs-offcanvas-padding-y));\n    margin-right: calc(-0.5 * var(--bs-offcanvas-padding-x));\n    margin-bottom: calc(-0.5 * var(--bs-offcanvas-padding-y));\n}\n\n.offcanvas-title {\n    margin-bottom: 0;\n    line-height: 1.5;\n}\n\n.offcanvas-body {\n    flex-grow: 1;\n    padding: var(--bs-offcanvas-padding-y) var(--bs-offcanvas-padding-x);\n    overflow-y: auto;\n}\n\n.placeholder {\n    display: inline-block;\n    min-height: 1em;\n    vertical-align: middle;\n    cursor: wait;\n    background-color: currentcolor;\n    opacity: 0.5;\n}\n\n.placeholder.btn::before {\n    display: inline-block;\n    content: \"\";\n}\n\n.placeholder-xs {\n    min-height: 0.6em;\n}\n\n.placeholder-sm {\n    min-height: 0.8em;\n}\n\n.placeholder-lg {\n    min-height: 1.2em;\n}\n\n.placeholder-glow .placeholder {\n    animation: placeholder-glow 2s ease-in-out infinite;\n}\n\n@keyframes placeholder-glow {\n    50% {\n        opacity: 0.2;\n    }\n}\n\n.placeholder-wave {\n    -webkit-mask-image: linear-gradient(130deg, #000 55%, rgba(0, 0, 0, 0.8) 75%, #000 95%);\n    mask-image: linear-gradient(130deg, #000 55%, rgba(0, 0, 0, 0.8) 75%, #000 95%);\n    -webkit-mask-size: 200% 100%;\n    mask-size: 200% 100%;\n    animation: placeholder-wave 2s linear infinite;\n}\n\n@keyframes placeholder-wave {\n    100% {\n        -webkit-mask-position: -200% 0%;\n        mask-position: -200% 0%;\n    }\n}\n\n.clearfix::after {\n    display: block;\n    clear: both;\n    content: \"\";\n}\n\n.text-bg-primary {\n    color: #fff !important;\n    background-color: RGBA(13, 110, 253, var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-secondary {\n    color: #fff !important;\n    background-color: RGBA(108, 117, 125, var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-success {\n    color: #fff !important;\n    background-color: RGBA(25, 135, 84, var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-info {\n    color: #000 !important;\n    background-color: RGBA(13, 202, 240, var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-warning {\n    color: #000 !important;\n    background-color: RGBA(255, 193, 7, var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-danger {\n    color: #fff !important;\n    background-color: RGBA(220, 53, 69, var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-light {\n    color: #000 !important;\n    background-color: RGBA(248, 249, 250, var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-dark {\n    color: #fff !important;\n    background-color: RGBA(33, 37, 41, var(--bs-bg-opacity, 1)) !important;\n}\n\n.link-primary {\n    color: #0d6efd !important;\n}\n\n.link-primary:hover, .link-primary:focus {\n    color: #0a58ca !important;\n}\n\n.link-secondary {\n    color: #6c757d !important;\n}\n\n.link-secondary:hover, .link-secondary:focus {\n    color: #565e64 !important;\n}\n\n.link-success {\n    color: #198754 !important;\n}\n\n.link-success:hover, .link-success:focus {\n    color: #146c43 !important;\n}\n\n.link-info {\n    color: #0dcaf0 !important;\n}\n\n.link-info:hover, .link-info:focus {\n    color: #3dd5f3 !important;\n}\n\n.link-warning {\n    color: #ffc107 !important;\n}\n\n.link-warning:hover, .link-warning:focus {\n    color: #ffcd39 !important;\n}\n\n.link-danger {\n    color: #dc3545 !important;\n}\n\n.link-danger:hover, .link-danger:focus {\n    color: #b02a37 !important;\n}\n\n.link-light {\n    color: #f8f9fa !important;\n}\n\n.link-light:hover, .link-light:focus {\n    color: #f9fafb !important;\n}\n\n.link-dark {\n    color: #212529 !important;\n}\n\n.link-dark:hover, .link-dark:focus {\n    color: #1a1e21 !important;\n}\n\n.ratio {\n    position: relative;\n    width: 100%;\n}\n\n.ratio::before {\n    display: block;\n    padding-top: var(--bs-aspect-ratio);\n    content: \"\";\n}\n\n.ratio > * {\n    position: absolute;\n    top: 0;\n    left: 0;\n    width: 100%;\n    height: 100%;\n}\n\n.ratio-1x1 {\n    --bs-aspect-ratio: 100%;\n}\n\n.ratio-4x3 {\n    --bs-aspect-ratio: 75%;\n}\n\n.ratio-16x9 {\n    --bs-aspect-ratio: 56.25%;\n}\n\n.ratio-21x9 {\n    --bs-aspect-ratio: 42.8571428571%;\n}\n\n.fixed-top {\n    position: fixed;\n    top: 0;\n    right: 0;\n    left: 0;\n    z-index: 1030;\n}\n\n.fixed-bottom {\n    position: fixed;\n    right: 0;\n    bottom: 0;\n    left: 0;\n    z-index: 1030;\n}\n\n.sticky-top {\n    position: -webkit-sticky;\n    position: sticky;\n    top: 0;\n    z-index: 1020;\n}\n\n.sticky-bottom {\n    position: -webkit-sticky;\n    position: sticky;\n    bottom: 0;\n    z-index: 1020;\n}\n\n@media (min-width: 576px) {\n    .sticky-sm-top {\n        position: -webkit-sticky;\n        position: sticky;\n        top: 0;\n        z-index: 1020;\n    }\n\n    .sticky-sm-bottom {\n        position: -webkit-sticky;\n        position: sticky;\n        bottom: 0;\n        z-index: 1020;\n    }\n}\n\n@media (min-width: 768px) {\n    .sticky-md-top {\n        position: -webkit-sticky;\n        position: sticky;\n        top: 0;\n        z-index: 1020;\n    }\n\n    .sticky-md-bottom {\n        position: -webkit-sticky;\n        position: sticky;\n        bottom: 0;\n        z-index: 1020;\n    }\n}\n\n@media (min-width: 992px) {\n    .sticky-lg-top {\n        position: -webkit-sticky;\n        position: sticky;\n        top: 0;\n        z-index: 1020;\n    }\n\n    .sticky-lg-bottom {\n        position: -webkit-sticky;\n        position: sticky;\n        bottom: 0;\n        z-index: 1020;\n    }\n}\n\n@media (min-width: 1200px) {\n    .sticky-xl-top {\n        position: -webkit-sticky;\n        position: sticky;\n        top: 0;\n        z-index: 1020;\n    }\n\n    .sticky-xl-bottom {\n        position: -webkit-sticky;\n        position: sticky;\n        bottom: 0;\n        z-index: 1020;\n    }\n}\n\n@media (min-width: 1400px) {\n    .sticky-xxl-top {\n        position: -webkit-sticky;\n        position: sticky;\n        top: 0;\n        z-index: 1020;\n    }\n\n    .sticky-xxl-bottom {\n        position: -webkit-sticky;\n        position: sticky;\n        bottom: 0;\n        z-index: 1020;\n    }\n}\n\n.hstack {\n    display: flex;\n    flex-direction: row;\n    align-items: center;\n    align-self: stretch;\n}\n\n.vstack {\n    display: flex;\n    flex: 1 1 auto;\n    flex-direction: column;\n    align-self: stretch;\n}\n\n.visually-hidden,\n.visually-hidden-focusable:not(:focus):not(:focus-within) {\n    position: absolute !important;\n    width: 1px !important;\n    height: 1px !important;\n    padding: 0 !important;\n    margin: -1px !important;\n    overflow: hidden !important;\n    clip: rect(0, 0, 0, 0) !important;\n    white-space: nowrap !important;\n    border: 0 !important;\n}\n\n.stretched-link::after {\n    position: absolute;\n    top: 0;\n    right: 0;\n    bottom: 0;\n    left: 0;\n    z-index: 1;\n    content: \"\";\n}\n\n.text-truncate {\n    overflow: hidden;\n    text-overflow: ellipsis;\n    white-space: nowrap;\n}\n\n.vr {\n    display: inline-block;\n    align-self: stretch;\n    width: 1px;\n    min-height: 1em;\n    background-color: currentcolor;\n    opacity: 0.25;\n}\n\n.align-baseline {\n    vertical-align: baseline !important;\n}\n\n.align-top {\n    vertical-align: top !important;\n}\n\n.align-middle {\n    vertical-align: middle !important;\n}\n\n.align-bottom {\n    vertical-align: bottom !important;\n}\n\n.align-text-bottom {\n    vertical-align: text-bottom !important;\n}\n\n.align-text-top {\n    vertical-align: text-top !important;\n}\n\n.float-start {\n    float: left !important;\n}\n\n.float-end {\n    float: right !important;\n}\n\n.float-none {\n    float: none !important;\n}\n\n.opacity-0 {\n    opacity: 0 !important;\n}\n\n.opacity-25 {\n    opacity: 0.25 !important;\n}\n\n.opacity-50 {\n    opacity: 0.5 !important;\n}\n\n.opacity-75 {\n    opacity: 0.75 !important;\n}\n\n.opacity-100 {\n    opacity: 1 !important;\n}\n\n.overflow-auto {\n    overflow: auto !important;\n}\n\n.overflow-hidden {\n    overflow: hidden !important;\n}\n\n.overflow-visible {\n    overflow: visible !important;\n}\n\n.overflow-scroll {\n    overflow: scroll !important;\n}\n\n.d-inline {\n    display: inline !important;\n}\n\n.d-inline-block {\n    display: inline-block !important;\n}\n\n.d-block {\n    display: block !important;\n}\n\n.d-grid {\n    display: grid !important;\n}\n\n.d-table {\n    display: table !important;\n}\n\n.d-table-row {\n    display: table-row !important;\n}\n\n.d-table-cell {\n    display: table-cell !important;\n}\n\n.d-flex {\n    display: flex !important;\n}\n\n.d-inline-flex {\n    display: inline-flex !important;\n}\n\n.d-none {\n    display: none !important;\n}\n\n.shadow {\n    box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15) !important;\n}\n\n.shadow-sm {\n    box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075) !important;\n}\n\n.shadow-lg {\n    box-shadow: 0 1rem 3rem rgba(0, 0, 0, 0.175) !important;\n}\n\n.shadow-none {\n    box-shadow: none !important;\n}\n\n.position-static {\n    position: static !important;\n}\n\n.position-relative {\n    position: relative !important;\n}\n\n.position-absolute {\n    position: absolute !important;\n}\n\n.position-fixed {\n    position: fixed !important;\n}\n\n.position-sticky {\n    position: -webkit-sticky !important;\n    position: sticky !important;\n}\n\n.top-0 {\n    top: 0 !important;\n}\n\n.top-50 {\n    top: 50% !important;\n}\n\n.top-100 {\n    top: 100% !important;\n}\n\n.bottom-0 {\n    bottom: 0 !important;\n}\n\n.bottom-50 {\n    bottom: 50% !important;\n}\n\n.bottom-100 {\n    bottom: 100% !important;\n}\n\n.start-0 {\n    left: 0 !important;\n}\n\n.start-50 {\n    left: 50% !important;\n}\n\n.start-100 {\n    left: 100% !important;\n}\n\n.end-0 {\n    right: 0 !important;\n}\n\n.end-50 {\n    right: 50% !important;\n}\n\n.end-100 {\n    right: 100% !important;\n}\n\n.translate-middle {\n    transform: translate(-50%, -50%) !important;\n}\n\n.translate-middle-x {\n    transform: translateX(-50%) !important;\n}\n\n.translate-middle-y {\n    transform: translateY(-50%) !important;\n}\n\n.border {\n    border: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important;\n}\n\n.border-0 {\n    border: 0 !important;\n}\n\n.border-top {\n    border-top: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important;\n}\n\n.border-top-0 {\n    border-top: 0 !important;\n}\n\n.border-end {\n    border-right: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important;\n}\n\n.border-end-0 {\n    border-right: 0 !important;\n}\n\n.border-bottom {\n    border-bottom: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important;\n}\n\n.border-bottom-0 {\n    border-bottom: 0 !important;\n}\n\n.border-start {\n    border-left: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important;\n}\n\n.border-start-0 {\n    border-left: 0 !important;\n}\n\n.border-primary {\n    --bs-border-opacity: 1;\n    border-color: rgba(var(--bs-primary-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-secondary {\n    --bs-border-opacity: 1;\n    border-color: rgba(var(--bs-secondary-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-success {\n    --bs-border-opacity: 1;\n    border-color: rgba(var(--bs-success-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-info {\n    --bs-border-opacity: 1;\n    border-color: rgba(var(--bs-info-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-warning {\n    --bs-border-opacity: 1;\n    border-color: rgba(var(--bs-warning-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-danger {\n    --bs-border-opacity: 1;\n    border-color: rgba(var(--bs-danger-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-light {\n    --bs-border-opacity: 1;\n    border-color: rgba(var(--bs-light-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-dark {\n    --bs-border-opacity: 1;\n    border-color: rgba(var(--bs-dark-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-white {\n    --bs-border-opacity: 1;\n    border-color: rgba(var(--bs-white-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-1 {\n    --bs-border-width: 1px;\n}\n\n.border-2 {\n    --bs-border-width: 2px;\n}\n\n.border-3 {\n    --bs-border-width: 3px;\n}\n\n.border-4 {\n    --bs-border-width: 4px;\n}\n\n.border-5 {\n    --bs-border-width: 5px;\n}\n\n.border-opacity-10 {\n    --bs-border-opacity: 0.1;\n}\n\n.border-opacity-25 {\n    --bs-border-opacity: 0.25;\n}\n\n.border-opacity-50 {\n    --bs-border-opacity: 0.5;\n}\n\n.border-opacity-75 {\n    --bs-border-opacity: 0.75;\n}\n\n.border-opacity-100 {\n    --bs-border-opacity: 1;\n}\n\n.w-25 {\n    width: 25% !important;\n}\n\n.w-50 {\n    width: 50% !important;\n}\n\n.w-75 {\n    width: 75% !important;\n}\n\n.w-100 {\n    width: 100% !important;\n}\n\n.w-auto {\n    width: auto !important;\n}\n\n.mw-100 {\n    max-width: 100% !important;\n}\n\n.vw-100 {\n    width: 100vw !important;\n}\n\n.min-vw-100 {\n    min-width: 100vw !important;\n}\n\n.h-25 {\n    height: 25% !important;\n}\n\n.h-50 {\n    height: 50% !important;\n}\n\n.h-75 {\n    height: 75% !important;\n}\n\n.h-100 {\n    height: 100% !important;\n}\n\n.h-auto {\n    height: auto !important;\n}\n\n.mh-100 {\n    max-height: 100% !important;\n}\n\n.vh-100 {\n    height: 100vh !important;\n}\n\n.min-vh-100 {\n    min-height: 100vh !important;\n}\n\n.flex-fill {\n    flex: 1 1 auto !important;\n}\n\n.flex-row {\n    flex-direction: row !important;\n}\n\n.flex-column {\n    flex-direction: column !important;\n}\n\n.flex-row-reverse {\n    flex-direction: row-reverse !important;\n}\n\n.flex-column-reverse {\n    flex-direction: column-reverse !important;\n}\n\n.flex-grow-0 {\n    flex-grow: 0 !important;\n}\n\n.flex-grow-1 {\n    flex-grow: 1 !important;\n}\n\n.flex-shrink-0 {\n    flex-shrink: 0 !important;\n}\n\n.flex-shrink-1 {\n    flex-shrink: 1 !important;\n}\n\n.flex-wrap {\n    flex-wrap: wrap !important;\n}\n\n.flex-nowrap {\n    flex-wrap: nowrap !important;\n}\n\n.flex-wrap-reverse {\n    flex-wrap: wrap-reverse !important;\n}\n\n.justify-content-start {\n    justify-content: flex-start !important;\n}\n\n.justify-content-end {\n    justify-content: flex-end !important;\n}\n\n.justify-content-center {\n    justify-content: center !important;\n}\n\n.justify-content-between {\n    justify-content: space-between !important;\n}\n\n.justify-content-around {\n    justify-content: space-around !important;\n}\n\n.justify-content-evenly {\n    justify-content: space-evenly !important;\n}\n\n.align-items-start {\n    align-items: flex-start !important;\n}\n\n.align-items-end {\n    align-items: flex-end !important;\n}\n\n.align-items-center {\n    align-items: center !important;\n}\n\n.align-items-baseline {\n    align-items: baseline !important;\n}\n\n.align-items-stretch {\n    align-items: stretch !important;\n}\n\n.align-content-start {\n    align-content: flex-start !important;\n}\n\n.align-content-end {\n    align-content: flex-end !important;\n}\n\n.align-content-center {\n    align-content: center !important;\n}\n\n.align-content-between {\n    align-content: space-between !important;\n}\n\n.align-content-around {\n    align-content: space-around !important;\n}\n\n.align-content-stretch {\n    align-content: stretch !important;\n}\n\n.align-self-auto {\n    align-self: auto !important;\n}\n\n.align-self-start {\n    align-self: flex-start !important;\n}\n\n.align-self-end {\n    align-self: flex-end !important;\n}\n\n.align-self-center {\n    align-self: center !important;\n}\n\n.align-self-baseline {\n    align-self: baseline !important;\n}\n\n.align-self-stretch {\n    align-self: stretch !important;\n}\n\n.order-first {\n    order: -1 !important;\n}\n\n.order-0 {\n    order: 0 !important;\n}\n\n.order-1 {\n    order: 1 !important;\n}\n\n.order-2 {\n    order: 2 !important;\n}\n\n.order-3 {\n    order: 3 !important;\n}\n\n.order-4 {\n    order: 4 !important;\n}\n\n.order-5 {\n    order: 5 !important;\n}\n\n.order-last {\n    order: 6 !important;\n}\n\n.m-0 {\n    margin: 0 !important;\n}\n\n.m-1 {\n    margin: 0.25rem !important;\n}\n\n.m-2 {\n    margin: 0.5rem !important;\n}\n\n.m-3 {\n    margin: 1rem !important;\n}\n\n.m-4 {\n    margin: 1.5rem !important;\n}\n\n.m-5 {\n    margin: 3rem !important;\n}\n\n.m-auto {\n    margin: auto !important;\n}\n\n.mx-0 {\n    margin-right: 0 !important;\n    margin-left: 0 !important;\n}\n\n.mx-1 {\n    margin-right: 0.25rem !important;\n    margin-left: 0.25rem !important;\n}\n\n.mx-2 {\n    margin-right: 0.5rem !important;\n    margin-left: 0.5rem !important;\n}\n\n.mx-3 {\n    margin-right: 1rem !important;\n    margin-left: 1rem !important;\n}\n\n.mx-4 {\n    margin-right: 1.5rem !important;\n    margin-left: 1.5rem !important;\n}\n\n.mx-5 {\n    margin-right: 3rem !important;\n    margin-left: 3rem !important;\n}\n\n.mx-auto {\n    margin-right: auto !important;\n    margin-left: auto !important;\n}\n\n.my-0 {\n    margin-top: 0 !important;\n    margin-bottom: 0 !important;\n}\n\n.my-1 {\n    margin-top: 0.25rem !important;\n    margin-bottom: 0.25rem !important;\n}\n\n.my-2 {\n    margin-top: 0.5rem !important;\n    margin-bottom: 0.5rem !important;\n}\n\n.my-3 {\n    margin-top: 1rem !important;\n    margin-bottom: 1rem !important;\n}\n\n.my-4 {\n    margin-top: 1.5rem !important;\n    margin-bottom: 1.5rem !important;\n}\n\n.my-5 {\n    margin-top: 3rem !important;\n    margin-bottom: 3rem !important;\n}\n\n.my-auto {\n    margin-top: auto !important;\n    margin-bottom: auto !important;\n}\n\n.mt-0 {\n    margin-top: 0 !important;\n}\n\n.mt-1 {\n    margin-top: 0.25rem !important;\n}\n\n.mt-2 {\n    margin-top: 0.5rem !important;\n}\n\n.mt-3 {\n    margin-top: 1rem !important;\n}\n\n.mt-4 {\n    margin-top: 1.5rem !important;\n}\n\n.mt-5 {\n    margin-top: 3rem !important;\n}\n\n.mt-auto {\n    margin-top: auto !important;\n}\n\n.me-0 {\n    margin-right: 0 !important;\n}\n\n.me-1 {\n    margin-right: 0.25rem !important;\n}\n\n.me-2 {\n    margin-right: 0.5rem !important;\n}\n\n.me-3 {\n    margin-right: 1rem !important;\n}\n\n.me-4 {\n    margin-right: 1.5rem !important;\n}\n\n.me-5 {\n    margin-right: 3rem !important;\n}\n\n.me-auto {\n    margin-right: auto !important;\n}\n\n.mb-0 {\n    margin-bottom: 0 !important;\n}\n\n.mb-1 {\n    margin-bottom: 0.25rem !important;\n}\n\n.mb-2 {\n    margin-bottom: 0.5rem !important;\n}\n\n.mb-3 {\n    margin-bottom: 1rem !important;\n}\n\n.mb-4 {\n    margin-bottom: 1.5rem !important;\n}\n\n.mb-5 {\n    margin-bottom: 3rem !important;\n}\n\n.mb-auto {\n    margin-bottom: auto !important;\n}\n\n.ms-0 {\n    margin-left: 0 !important;\n}\n\n.ms-1 {\n    margin-left: 0.25rem !important;\n}\n\n.ms-2 {\n    margin-left: 0.5rem !important;\n}\n\n.ms-3 {\n    margin-left: 1rem !important;\n}\n\n.ms-4 {\n    margin-left: 1.5rem !important;\n}\n\n.ms-5 {\n    margin-left: 3rem !important;\n}\n\n.ms-auto {\n    margin-left: auto !important;\n}\n\n.p-0 {\n    padding: 0 !important;\n}\n\n.p-1 {\n    padding: 0.25rem !important;\n}\n\n.p-2 {\n    padding: 0.5rem !important;\n}\n\n.p-3 {\n    padding: 1rem !important;\n}\n\n.p-4 {\n    padding: 1.5rem !important;\n}\n\n.p-5 {\n    padding: 3rem !important;\n}\n\n.px-0 {\n    padding-right: 0 !important;\n    padding-left: 0 !important;\n}\n\n.px-1 {\n    padding-right: 0.25rem !important;\n    padding-left: 0.25rem !important;\n}\n\n.px-2 {\n    padding-right: 0.5rem !important;\n    padding-left: 0.5rem !important;\n}\n\n.px-3 {\n    padding-right: 1rem !important;\n    padding-left: 1rem !important;\n}\n\n.px-4 {\n    padding-right: 1.5rem !important;\n    padding-left: 1.5rem !important;\n}\n\n.px-5 {\n    padding-right: 3rem !important;\n    padding-left: 3rem !important;\n}\n\n.py-0 {\n    padding-top: 0 !important;\n    padding-bottom: 0 !important;\n}\n\n.py-1 {\n    padding-top: 0.25rem !important;\n    padding-bottom: 0.25rem !important;\n}\n\n.py-2 {\n    padding-top: 0.5rem !important;\n    padding-bottom: 0.5rem !important;\n}\n\n.py-3 {\n    padding-top: 1rem !important;\n    padding-bottom: 1rem !important;\n}\n\n.py-4 {\n    padding-top: 1.5rem !important;\n    padding-bottom: 1.5rem !important;\n}\n\n.py-5 {\n    padding-top: 3rem !important;\n    padding-bottom: 3rem !important;\n}\n\n.pt-0 {\n    padding-top: 0 !important;\n}\n\n.pt-1 {\n    padding-top: 0.25rem !important;\n}\n\n.pt-2 {\n    padding-top: 0.5rem !important;\n}\n\n.pt-3 {\n    padding-top: 1rem !important;\n}\n\n.pt-4 {\n    padding-top: 1.5rem !important;\n}\n\n.pt-5 {\n    padding-top: 3rem !important;\n}\n\n.pe-0 {\n    padding-right: 0 !important;\n}\n\n.pe-1 {\n    padding-right: 0.25rem !important;\n}\n\n.pe-2 {\n    padding-right: 0.5rem !important;\n}\n\n.pe-3 {\n    padding-right: 1rem !important;\n}\n\n.pe-4 {\n    padding-right: 1.5rem !important;\n}\n\n.pe-5 {\n    padding-right: 3rem !important;\n}\n\n.pb-0 {\n    padding-bottom: 0 !important;\n}\n\n.pb-1 {\n    padding-bottom: 0.25rem !important;\n}\n\n.pb-2 {\n    padding-bottom: 0.5rem !important;\n}\n\n.pb-3 {\n    padding-bottom: 1rem !important;\n}\n\n.pb-4 {\n    padding-bottom: 1.5rem !important;\n}\n\n.pb-5 {\n    padding-bottom: 3rem !important;\n}\n\n.ps-0 {\n    padding-left: 0 !important;\n}\n\n.ps-1 {\n    padding-left: 0.25rem !important;\n}\n\n.ps-2 {\n    padding-left: 0.5rem !important;\n}\n\n.ps-3 {\n    padding-left: 1rem !important;\n}\n\n.ps-4 {\n    padding-left: 1.5rem !important;\n}\n\n.ps-5 {\n    padding-left: 3rem !important;\n}\n\n.gap-0 {\n    gap: 0 !important;\n}\n\n.gap-1 {\n    gap: 0.25rem !important;\n}\n\n.gap-2 {\n    gap: 0.5rem !important;\n}\n\n.gap-3 {\n    gap: 1rem !important;\n}\n\n.gap-4 {\n    gap: 1.5rem !important;\n}\n\n.gap-5 {\n    gap: 3rem !important;\n}\n\n.font-monospace {\n    font-family: var(--bs-font-monospace) !important;\n}\n\n.fs-1 {\n    font-size: calc(1.375rem + 1.5vw) !important;\n}\n\n.fs-2 {\n    font-size: calc(1.325rem + 0.9vw) !important;\n}\n\n.fs-3 {\n    font-size: calc(1.3rem + 0.6vw) !important;\n}\n\n.fs-4 {\n    font-size: calc(1.275rem + 0.3vw) !important;\n}\n\n.fs-5 {\n    font-size: 1.25rem !important;\n}\n\n.fs-6 {\n    font-size: 1rem !important;\n}\n\n.fst-italic {\n    font-style: italic !important;\n}\n\n.fst-normal {\n    font-style: normal !important;\n}\n\n.fw-light {\n    font-weight: 300 !important;\n}\n\n.fw-lighter {\n    font-weight: lighter !important;\n}\n\n.fw-normal {\n    font-weight: 400 !important;\n}\n\n.fw-bold {\n    font-weight: 700 !important;\n}\n\n.fw-semibold {\n    font-weight: 600 !important;\n}\n\n.fw-bolder {\n    font-weight: bolder !important;\n}\n\n.lh-1 {\n    line-height: 1 !important;\n}\n\n.lh-sm {\n    line-height: 1.25 !important;\n}\n\n.lh-base {\n    line-height: 1.5 !important;\n}\n\n.lh-lg {\n    line-height: 2 !important;\n}\n\n.text-start {\n    text-align: left !important;\n}\n\n.text-end {\n    text-align: right !important;\n}\n\n.text-center {\n    text-align: center !important;\n}\n\n.text-decoration-none {\n    text-decoration: none !important;\n}\n\n.text-decoration-underline {\n    text-decoration: underline !important;\n}\n\n.text-decoration-line-through {\n    text-decoration: line-through !important;\n}\n\n.text-lowercase {\n    text-transform: lowercase !important;\n}\n\n.text-uppercase {\n    text-transform: uppercase !important;\n}\n\n.text-capitalize {\n    text-transform: capitalize !important;\n}\n\n.text-wrap {\n    white-space: normal !important;\n}\n\n.text-nowrap {\n    white-space: nowrap !important;\n}\n\n/* rtl:begin:remove */\n.text-break {\n    word-wrap: break-word !important;\n    word-break: break-word !important;\n}\n\n/* rtl:end:remove */\n.text-primary {\n    --bs-text-opacity: 1;\n    color: rgba(var(--bs-primary-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-secondary {\n    --bs-text-opacity: 1;\n    color: rgba(var(--bs-secondary-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-success {\n    --bs-text-opacity: 1;\n    color: rgba(var(--bs-success-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-info {\n    --bs-text-opacity: 1;\n    color: rgba(var(--bs-info-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-warning {\n    --bs-text-opacity: 1;\n    color: rgba(var(--bs-warning-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-danger {\n    --bs-text-opacity: 1;\n    color: rgba(var(--bs-danger-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-light {\n    --bs-text-opacity: 1;\n    color: rgba(var(--bs-light-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-dark {\n    --bs-text-opacity: 1;\n    color: rgba(var(--bs-dark-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-black {\n    --bs-text-opacity: 1;\n    color: rgba(var(--bs-black-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-white {\n    --bs-text-opacity: 1;\n    color: rgba(var(--bs-white-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-body {\n    --bs-text-opacity: 1;\n    color: rgba(var(--bs-body-color-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-muted {\n    --bs-text-opacity: 1;\n    color: #6c757d !important;\n}\n\n.text-black-50 {\n    --bs-text-opacity: 1;\n    color: rgba(0, 0, 0, 0.5) !important;\n}\n\n.text-white-50 {\n    --bs-text-opacity: 1;\n    color: rgba(255, 255, 255, 0.5) !important;\n}\n\n.text-reset {\n    --bs-text-opacity: 1;\n    color: inherit !important;\n}\n\n.text-opacity-25 {\n    --bs-text-opacity: 0.25;\n}\n\n.text-opacity-50 {\n    --bs-text-opacity: 0.5;\n}\n\n.text-opacity-75 {\n    --bs-text-opacity: 0.75;\n}\n\n.text-opacity-100 {\n    --bs-text-opacity: 1;\n}\n\n.bg-primary {\n    --bs-bg-opacity: 1;\n    background-color: rgba(var(--bs-primary-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-secondary {\n    --bs-bg-opacity: 1;\n    background-color: rgba(var(--bs-secondary-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-success {\n    --bs-bg-opacity: 1;\n    background-color: rgba(var(--bs-success-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-info {\n    --bs-bg-opacity: 1;\n    background-color: rgba(var(--bs-info-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-warning {\n    --bs-bg-opacity: 1;\n    background-color: rgba(var(--bs-warning-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-danger {\n    --bs-bg-opacity: 1;\n    background-color: rgba(var(--bs-danger-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-light {\n    --bs-bg-opacity: 1;\n    background-color: rgba(var(--bs-light-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-dark {\n    --bs-bg-opacity: 1;\n    background-color: rgba(var(--bs-dark-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-black {\n    --bs-bg-opacity: 1;\n    background-color: rgba(var(--bs-black-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-white {\n    --bs-bg-opacity: 1;\n    background-color: rgba(var(--bs-white-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-body {\n    --bs-bg-opacity: 1;\n    background-color: rgba(var(--bs-body-bg-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-transparent {\n    --bs-bg-opacity: 1;\n    background-color: transparent !important;\n}\n\n.bg-opacity-10 {\n    --bs-bg-opacity: 0.1;\n}\n\n.bg-opacity-25 {\n    --bs-bg-opacity: 0.25;\n}\n\n.bg-opacity-50 {\n    --bs-bg-opacity: 0.5;\n}\n\n.bg-opacity-75 {\n    --bs-bg-opacity: 0.75;\n}\n\n.bg-opacity-100 {\n    --bs-bg-opacity: 1;\n}\n\n.bg-gradient {\n    background-image: var(--bs-gradient) !important;\n}\n\n.user-select-all {\n    -webkit-user-select: all !important;\n    -moz-user-select: all !important;\n    user-select: all !important;\n}\n\n.user-select-auto {\n    -webkit-user-select: auto !important;\n    -moz-user-select: auto !important;\n    user-select: auto !important;\n}\n\n.user-select-none {\n    -webkit-user-select: none !important;\n    -moz-user-select: none !important;\n    user-select: none !important;\n}\n\n.pe-none {\n    pointer-events: none !important;\n}\n\n.pe-auto {\n    pointer-events: auto !important;\n}\n\n.rounded {\n    border-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-0 {\n    border-radius: 0 !important;\n}\n\n.rounded-1 {\n    border-radius: var(--bs-border-radius-sm) !important;\n}\n\n.rounded-2 {\n    border-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-3 {\n    border-radius: var(--bs-border-radius-lg) !important;\n}\n\n.rounded-4 {\n    border-radius: var(--bs-border-radius-xl) !important;\n}\n\n.rounded-5 {\n    border-radius: var(--bs-border-radius-2xl) !important;\n}\n\n.rounded-circle {\n    border-radius: 50% !important;\n}\n\n.rounded-pill {\n    border-radius: var(--bs-border-radius-pill) !important;\n}\n\n.rounded-top {\n    border-top-left-radius: var(--bs-border-radius) !important;\n    border-top-right-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-end {\n    border-top-right-radius: var(--bs-border-radius) !important;\n    border-bottom-right-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-bottom {\n    border-bottom-right-radius: var(--bs-border-radius) !important;\n    border-bottom-left-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-start {\n    border-bottom-left-radius: var(--bs-border-radius) !important;\n    border-top-left-radius: var(--bs-border-radius) !important;\n}\n\n.visible {\n    visibility: visible !important;\n}\n\n.invisible {\n    visibility: hidden !important;\n}\n\n@media (min-width: 576px) {\n    .float-sm-start {\n        float: left !important;\n    }\n\n    .float-sm-end {\n        float: right !important;\n    }\n\n    .float-sm-none {\n        float: none !important;\n    }\n\n    .d-sm-inline {\n        display: inline !important;\n    }\n\n    .d-sm-inline-block {\n        display: inline-block !important;\n    }\n\n    .d-sm-block {\n        display: block !important;\n    }\n\n    .d-sm-grid {\n        display: grid !important;\n    }\n\n    .d-sm-table {\n        display: table !important;\n    }\n\n    .d-sm-table-row {\n        display: table-row !important;\n    }\n\n    .d-sm-table-cell {\n        display: table-cell !important;\n    }\n\n    .d-sm-flex {\n        display: flex !important;\n    }\n\n    .d-sm-inline-flex {\n        display: inline-flex !important;\n    }\n\n    .d-sm-none {\n        display: none !important;\n    }\n\n    .flex-sm-fill {\n        flex: 1 1 auto !important;\n    }\n\n    .flex-sm-row {\n        flex-direction: row !important;\n    }\n\n    .flex-sm-column {\n        flex-direction: column !important;\n    }\n\n    .flex-sm-row-reverse {\n        flex-direction: row-reverse !important;\n    }\n\n    .flex-sm-column-reverse {\n        flex-direction: column-reverse !important;\n    }\n\n    .flex-sm-grow-0 {\n        flex-grow: 0 !important;\n    }\n\n    .flex-sm-grow-1 {\n        flex-grow: 1 !important;\n    }\n\n    .flex-sm-shrink-0 {\n        flex-shrink: 0 !important;\n    }\n\n    .flex-sm-shrink-1 {\n        flex-shrink: 1 !important;\n    }\n\n    .flex-sm-wrap {\n        flex-wrap: wrap !important;\n    }\n\n    .flex-sm-nowrap {\n        flex-wrap: nowrap !important;\n    }\n\n    .flex-sm-wrap-reverse {\n        flex-wrap: wrap-reverse !important;\n    }\n\n    .justify-content-sm-start {\n        justify-content: flex-start !important;\n    }\n\n    .justify-content-sm-end {\n        justify-content: flex-end !important;\n    }\n\n    .justify-content-sm-center {\n        justify-content: center !important;\n    }\n\n    .justify-content-sm-between {\n        justify-content: space-between !important;\n    }\n\n    .justify-content-sm-around {\n        justify-content: space-around !important;\n    }\n\n    .justify-content-sm-evenly {\n        justify-content: space-evenly !important;\n    }\n\n    .align-items-sm-start {\n        align-items: flex-start !important;\n    }\n\n    .align-items-sm-end {\n        align-items: flex-end !important;\n    }\n\n    .align-items-sm-center {\n        align-items: center !important;\n    }\n\n    .align-items-sm-baseline {\n        align-items: baseline !important;\n    }\n\n    .align-items-sm-stretch {\n        align-items: stretch !important;\n    }\n\n    .align-content-sm-start {\n        align-content: flex-start !important;\n    }\n\n    .align-content-sm-end {\n        align-content: flex-end !important;\n    }\n\n    .align-content-sm-center {\n        align-content: center !important;\n    }\n\n    .align-content-sm-between {\n        align-content: space-between !important;\n    }\n\n    .align-content-sm-around {\n        align-content: space-around !important;\n    }\n\n    .align-content-sm-stretch {\n        align-content: stretch !important;\n    }\n\n    .align-self-sm-auto {\n        align-self: auto !important;\n    }\n\n    .align-self-sm-start {\n        align-self: flex-start !important;\n    }\n\n    .align-self-sm-end {\n        align-self: flex-end !important;\n    }\n\n    .align-self-sm-center {\n        align-self: center !important;\n    }\n\n    .align-self-sm-baseline {\n        align-self: baseline !important;\n    }\n\n    .align-self-sm-stretch {\n        align-self: stretch !important;\n    }\n\n    .order-sm-first {\n        order: -1 !important;\n    }\n\n    .order-sm-0 {\n        order: 0 !important;\n    }\n\n    .order-sm-1 {\n        order: 1 !important;\n    }\n\n    .order-sm-2 {\n        order: 2 !important;\n    }\n\n    .order-sm-3 {\n        order: 3 !important;\n    }\n\n    .order-sm-4 {\n        order: 4 !important;\n    }\n\n    .order-sm-5 {\n        order: 5 !important;\n    }\n\n    .order-sm-last {\n        order: 6 !important;\n    }\n\n    .m-sm-0 {\n        margin: 0 !important;\n    }\n\n    .m-sm-1 {\n        margin: 0.25rem !important;\n    }\n\n    .m-sm-2 {\n        margin: 0.5rem !important;\n    }\n\n    .m-sm-3 {\n        margin: 1rem !important;\n    }\n\n    .m-sm-4 {\n        margin: 1.5rem !important;\n    }\n\n    .m-sm-5 {\n        margin: 3rem !important;\n    }\n\n    .m-sm-auto {\n        margin: auto !important;\n    }\n\n    .mx-sm-0 {\n        margin-right: 0 !important;\n        margin-left: 0 !important;\n    }\n\n    .mx-sm-1 {\n        margin-right: 0.25rem !important;\n        margin-left: 0.25rem !important;\n    }\n\n    .mx-sm-2 {\n        margin-right: 0.5rem !important;\n        margin-left: 0.5rem !important;\n    }\n\n    .mx-sm-3 {\n        margin-right: 1rem !important;\n        margin-left: 1rem !important;\n    }\n\n    .mx-sm-4 {\n        margin-right: 1.5rem !important;\n        margin-left: 1.5rem !important;\n    }\n\n    .mx-sm-5 {\n        margin-right: 3rem !important;\n        margin-left: 3rem !important;\n    }\n\n    .mx-sm-auto {\n        margin-right: auto !important;\n        margin-left: auto !important;\n    }\n\n    .my-sm-0 {\n        margin-top: 0 !important;\n        margin-bottom: 0 !important;\n    }\n\n    .my-sm-1 {\n        margin-top: 0.25rem !important;\n        margin-bottom: 0.25rem !important;\n    }\n\n    .my-sm-2 {\n        margin-top: 0.5rem !important;\n        margin-bottom: 0.5rem !important;\n    }\n\n    .my-sm-3 {\n        margin-top: 1rem !important;\n        margin-bottom: 1rem !important;\n    }\n\n    .my-sm-4 {\n        margin-top: 1.5rem !important;\n        margin-bottom: 1.5rem !important;\n    }\n\n    .my-sm-5 {\n        margin-top: 3rem !important;\n        margin-bottom: 3rem !important;\n    }\n\n    .my-sm-auto {\n        margin-top: auto !important;\n        margin-bottom: auto !important;\n    }\n\n    .mt-sm-0 {\n        margin-top: 0 !important;\n    }\n\n    .mt-sm-1 {\n        margin-top: 0.25rem !important;\n    }\n\n    .mt-sm-2 {\n        margin-top: 0.5rem !important;\n    }\n\n    .mt-sm-3 {\n        margin-top: 1rem !important;\n    }\n\n    .mt-sm-4 {\n        margin-top: 1.5rem !important;\n    }\n\n    .mt-sm-5 {\n        margin-top: 3rem !important;\n    }\n\n    .mt-sm-auto {\n        margin-top: auto !important;\n    }\n\n    .me-sm-0 {\n        margin-right: 0 !important;\n    }\n\n    .me-sm-1 {\n        margin-right: 0.25rem !important;\n    }\n\n    .me-sm-2 {\n        margin-right: 0.5rem !important;\n    }\n\n    .me-sm-3 {\n        margin-right: 1rem !important;\n    }\n\n    .me-sm-4 {\n        margin-right: 1.5rem !important;\n    }\n\n    .me-sm-5 {\n        margin-right: 3rem !important;\n    }\n\n    .me-sm-auto {\n        margin-right: auto !important;\n    }\n\n    .mb-sm-0 {\n        margin-bottom: 0 !important;\n    }\n\n    .mb-sm-1 {\n        margin-bottom: 0.25rem !important;\n    }\n\n    .mb-sm-2 {\n        margin-bottom: 0.5rem !important;\n    }\n\n    .mb-sm-3 {\n        margin-bottom: 1rem !important;\n    }\n\n    .mb-sm-4 {\n        margin-bottom: 1.5rem !important;\n    }\n\n    .mb-sm-5 {\n        margin-bottom: 3rem !important;\n    }\n\n    .mb-sm-auto {\n        margin-bottom: auto !important;\n    }\n\n    .ms-sm-0 {\n        margin-left: 0 !important;\n    }\n\n    .ms-sm-1 {\n        margin-left: 0.25rem !important;\n    }\n\n    .ms-sm-2 {\n        margin-left: 0.5rem !important;\n    }\n\n    .ms-sm-3 {\n        margin-left: 1rem !important;\n    }\n\n    .ms-sm-4 {\n        margin-left: 1.5rem !important;\n    }\n\n    .ms-sm-5 {\n        margin-left: 3rem !important;\n    }\n\n    .ms-sm-auto {\n        margin-left: auto !important;\n    }\n\n    .p-sm-0 {\n        padding: 0 !important;\n    }\n\n    .p-sm-1 {\n        padding: 0.25rem !important;\n    }\n\n    .p-sm-2 {\n        padding: 0.5rem !important;\n    }\n\n    .p-sm-3 {\n        padding: 1rem !important;\n    }\n\n    .p-sm-4 {\n        padding: 1.5rem !important;\n    }\n\n    .p-sm-5 {\n        padding: 3rem !important;\n    }\n\n    .px-sm-0 {\n        padding-right: 0 !important;\n        padding-left: 0 !important;\n    }\n\n    .px-sm-1 {\n        padding-right: 0.25rem !important;\n        padding-left: 0.25rem !important;\n    }\n\n    .px-sm-2 {\n        padding-right: 0.5rem !important;\n        padding-left: 0.5rem !important;\n    }\n\n    .px-sm-3 {\n        padding-right: 1rem !important;\n        padding-left: 1rem !important;\n    }\n\n    .px-sm-4 {\n        padding-right: 1.5rem !important;\n        padding-left: 1.5rem !important;\n    }\n\n    .px-sm-5 {\n        padding-right: 3rem !important;\n        padding-left: 3rem !important;\n    }\n\n    .py-sm-0 {\n        padding-top: 0 !important;\n        padding-bottom: 0 !important;\n    }\n\n    .py-sm-1 {\n        padding-top: 0.25rem !important;\n        padding-bottom: 0.25rem !important;\n    }\n\n    .py-sm-2 {\n        padding-top: 0.5rem !important;\n        padding-bottom: 0.5rem !important;\n    }\n\n    .py-sm-3 {\n        padding-top: 1rem !important;\n        padding-bottom: 1rem !important;\n    }\n\n    .py-sm-4 {\n        padding-top: 1.5rem !important;\n        padding-bottom: 1.5rem !important;\n    }\n\n    .py-sm-5 {\n        padding-top: 3rem !important;\n        padding-bottom: 3rem !important;\n    }\n\n    .pt-sm-0 {\n        padding-top: 0 !important;\n    }\n\n    .pt-sm-1 {\n        padding-top: 0.25rem !important;\n    }\n\n    .pt-sm-2 {\n        padding-top: 0.5rem !important;\n    }\n\n    .pt-sm-3 {\n        padding-top: 1rem !important;\n    }\n\n    .pt-sm-4 {\n        padding-top: 1.5rem !important;\n    }\n\n    .pt-sm-5 {\n        padding-top: 3rem !important;\n    }\n\n    .pe-sm-0 {\n        padding-right: 0 !important;\n    }\n\n    .pe-sm-1 {\n        padding-right: 0.25rem !important;\n    }\n\n    .pe-sm-2 {\n        padding-right: 0.5rem !important;\n    }\n\n    .pe-sm-3 {\n        padding-right: 1rem !important;\n    }\n\n    .pe-sm-4 {\n        padding-right: 1.5rem !important;\n    }\n\n    .pe-sm-5 {\n        padding-right: 3rem !important;\n    }\n\n    .pb-sm-0 {\n        padding-bottom: 0 !important;\n    }\n\n    .pb-sm-1 {\n        padding-bottom: 0.25rem !important;\n    }\n\n    .pb-sm-2 {\n        padding-bottom: 0.5rem !important;\n    }\n\n    .pb-sm-3 {\n        padding-bottom: 1rem !important;\n    }\n\n    .pb-sm-4 {\n        padding-bottom: 1.5rem !important;\n    }\n\n    .pb-sm-5 {\n        padding-bottom: 3rem !important;\n    }\n\n    .ps-sm-0 {\n        padding-left: 0 !important;\n    }\n\n    .ps-sm-1 {\n        padding-left: 0.25rem !important;\n    }\n\n    .ps-sm-2 {\n        padding-left: 0.5rem !important;\n    }\n\n    .ps-sm-3 {\n        padding-left: 1rem !important;\n    }\n\n    .ps-sm-4 {\n        padding-left: 1.5rem !important;\n    }\n\n    .ps-sm-5 {\n        padding-left: 3rem !important;\n    }\n\n    .gap-sm-0 {\n        gap: 0 !important;\n    }\n\n    .gap-sm-1 {\n        gap: 0.25rem !important;\n    }\n\n    .gap-sm-2 {\n        gap: 0.5rem !important;\n    }\n\n    .gap-sm-3 {\n        gap: 1rem !important;\n    }\n\n    .gap-sm-4 {\n        gap: 1.5rem !important;\n    }\n\n    .gap-sm-5 {\n        gap: 3rem !important;\n    }\n\n    .text-sm-start {\n        text-align: left !important;\n    }\n\n    .text-sm-end {\n        text-align: right !important;\n    }\n\n    .text-sm-center {\n        text-align: center !important;\n    }\n}\n\n@media (min-width: 768px) {\n    .float-md-start {\n        float: left !important;\n    }\n\n    .float-md-end {\n        float: right !important;\n    }\n\n    .float-md-none {\n        float: none !important;\n    }\n\n    .d-md-inline {\n        display: inline !important;\n    }\n\n    .d-md-inline-block {\n        display: inline-block !important;\n    }\n\n    .d-md-block {\n        display: block !important;\n    }\n\n    .d-md-grid {\n        display: grid !important;\n    }\n\n    .d-md-table {\n        display: table !important;\n    }\n\n    .d-md-table-row {\n        display: table-row !important;\n    }\n\n    .d-md-table-cell {\n        display: table-cell !important;\n    }\n\n    .d-md-flex {\n        display: flex !important;\n    }\n\n    .d-md-inline-flex {\n        display: inline-flex !important;\n    }\n\n    .d-md-none {\n        display: none !important;\n    }\n\n    .flex-md-fill {\n        flex: 1 1 auto !important;\n    }\n\n    .flex-md-row {\n        flex-direction: row !important;\n    }\n\n    .flex-md-column {\n        flex-direction: column !important;\n    }\n\n    .flex-md-row-reverse {\n        flex-direction: row-reverse !important;\n    }\n\n    .flex-md-column-reverse {\n        flex-direction: column-reverse !important;\n    }\n\n    .flex-md-grow-0 {\n        flex-grow: 0 !important;\n    }\n\n    .flex-md-grow-1 {\n        flex-grow: 1 !important;\n    }\n\n    .flex-md-shrink-0 {\n        flex-shrink: 0 !important;\n    }\n\n    .flex-md-shrink-1 {\n        flex-shrink: 1 !important;\n    }\n\n    .flex-md-wrap {\n        flex-wrap: wrap !important;\n    }\n\n    .flex-md-nowrap {\n        flex-wrap: nowrap !important;\n    }\n\n    .flex-md-wrap-reverse {\n        flex-wrap: wrap-reverse !important;\n    }\n\n    .justify-content-md-start {\n        justify-content: flex-start !important;\n    }\n\n    .justify-content-md-end {\n        justify-content: flex-end !important;\n    }\n\n    .justify-content-md-center {\n        justify-content: center !important;\n    }\n\n    .justify-content-md-between {\n        justify-content: space-between !important;\n    }\n\n    .justify-content-md-around {\n        justify-content: space-around !important;\n    }\n\n    .justify-content-md-evenly {\n        justify-content: space-evenly !important;\n    }\n\n    .align-items-md-start {\n        align-items: flex-start !important;\n    }\n\n    .align-items-md-end {\n        align-items: flex-end !important;\n    }\n\n    .align-items-md-center {\n        align-items: center !important;\n    }\n\n    .align-items-md-baseline {\n        align-items: baseline !important;\n    }\n\n    .align-items-md-stretch {\n        align-items: stretch !important;\n    }\n\n    .align-content-md-start {\n        align-content: flex-start !important;\n    }\n\n    .align-content-md-end {\n        align-content: flex-end !important;\n    }\n\n    .align-content-md-center {\n        align-content: center !important;\n    }\n\n    .align-content-md-between {\n        align-content: space-between !important;\n    }\n\n    .align-content-md-around {\n        align-content: space-around !important;\n    }\n\n    .align-content-md-stretch {\n        align-content: stretch !important;\n    }\n\n    .align-self-md-auto {\n        align-self: auto !important;\n    }\n\n    .align-self-md-start {\n        align-self: flex-start !important;\n    }\n\n    .align-self-md-end {\n        align-self: flex-end !important;\n    }\n\n    .align-self-md-center {\n        align-self: center !important;\n    }\n\n    .align-self-md-baseline {\n        align-self: baseline !important;\n    }\n\n    .align-self-md-stretch {\n        align-self: stretch !important;\n    }\n\n    .order-md-first {\n        order: -1 !important;\n    }\n\n    .order-md-0 {\n        order: 0 !important;\n    }\n\n    .order-md-1 {\n        order: 1 !important;\n    }\n\n    .order-md-2 {\n        order: 2 !important;\n    }\n\n    .order-md-3 {\n        order: 3 !important;\n    }\n\n    .order-md-4 {\n        order: 4 !important;\n    }\n\n    .order-md-5 {\n        order: 5 !important;\n    }\n\n    .order-md-last {\n        order: 6 !important;\n    }\n\n    .m-md-0 {\n        margin: 0 !important;\n    }\n\n    .m-md-1 {\n        margin: 0.25rem !important;\n    }\n\n    .m-md-2 {\n        margin: 0.5rem !important;\n    }\n\n    .m-md-3 {\n        margin: 1rem !important;\n    }\n\n    .m-md-4 {\n        margin: 1.5rem !important;\n    }\n\n    .m-md-5 {\n        margin: 3rem !important;\n    }\n\n    .m-md-auto {\n        margin: auto !important;\n    }\n\n    .mx-md-0 {\n        margin-right: 0 !important;\n        margin-left: 0 !important;\n    }\n\n    .mx-md-1 {\n        margin-right: 0.25rem !important;\n        margin-left: 0.25rem !important;\n    }\n\n    .mx-md-2 {\n        margin-right: 0.5rem !important;\n        margin-left: 0.5rem !important;\n    }\n\n    .mx-md-3 {\n        margin-right: 1rem !important;\n        margin-left: 1rem !important;\n    }\n\n    .mx-md-4 {\n        margin-right: 1.5rem !important;\n        margin-left: 1.5rem !important;\n    }\n\n    .mx-md-5 {\n        margin-right: 3rem !important;\n        margin-left: 3rem !important;\n    }\n\n    .mx-md-auto {\n        margin-right: auto !important;\n        margin-left: auto !important;\n    }\n\n    .my-md-0 {\n        margin-top: 0 !important;\n        margin-bottom: 0 !important;\n    }\n\n    .my-md-1 {\n        margin-top: 0.25rem !important;\n        margin-bottom: 0.25rem !important;\n    }\n\n    .my-md-2 {\n        margin-top: 0.5rem !important;\n        margin-bottom: 0.5rem !important;\n    }\n\n    .my-md-3 {\n        margin-top: 1rem !important;\n        margin-bottom: 1rem !important;\n    }\n\n    .my-md-4 {\n        margin-top: 1.5rem !important;\n        margin-bottom: 1.5rem !important;\n    }\n\n    .my-md-5 {\n        margin-top: 3rem !important;\n        margin-bottom: 3rem !important;\n    }\n\n    .my-md-auto {\n        margin-top: auto !important;\n        margin-bottom: auto !important;\n    }\n\n    .mt-md-0 {\n        margin-top: 0 !important;\n    }\n\n    .mt-md-1 {\n        margin-top: 0.25rem !important;\n    }\n\n    .mt-md-2 {\n        margin-top: 0.5rem !important;\n    }\n\n    .mt-md-3 {\n        margin-top: 1rem !important;\n    }\n\n    .mt-md-4 {\n        margin-top: 1.5rem !important;\n    }\n\n    .mt-md-5 {\n        margin-top: 3rem !important;\n    }\n\n    .mt-md-auto {\n        margin-top: auto !important;\n    }\n\n    .me-md-0 {\n        margin-right: 0 !important;\n    }\n\n    .me-md-1 {\n        margin-right: 0.25rem !important;\n    }\n\n    .me-md-2 {\n        margin-right: 0.5rem !important;\n    }\n\n    .me-md-3 {\n        margin-right: 1rem !important;\n    }\n\n    .me-md-4 {\n        margin-right: 1.5rem !important;\n    }\n\n    .me-md-5 {\n        margin-right: 3rem !important;\n    }\n\n    .me-md-auto {\n        margin-right: auto !important;\n    }\n\n    .mb-md-0 {\n        margin-bottom: 0 !important;\n    }\n\n    .mb-md-1 {\n        margin-bottom: 0.25rem !important;\n    }\n\n    .mb-md-2 {\n        margin-bottom: 0.5rem !important;\n    }\n\n    .mb-md-3 {\n        margin-bottom: 1rem !important;\n    }\n\n    .mb-md-4 {\n        margin-bottom: 1.5rem !important;\n    }\n\n    .mb-md-5 {\n        margin-bottom: 3rem !important;\n    }\n\n    .mb-md-auto {\n        margin-bottom: auto !important;\n    }\n\n    .ms-md-0 {\n        margin-left: 0 !important;\n    }\n\n    .ms-md-1 {\n        margin-left: 0.25rem !important;\n    }\n\n    .ms-md-2 {\n        margin-left: 0.5rem !important;\n    }\n\n    .ms-md-3 {\n        margin-left: 1rem !important;\n    }\n\n    .ms-md-4 {\n        margin-left: 1.5rem !important;\n    }\n\n    .ms-md-5 {\n        margin-left: 3rem !important;\n    }\n\n    .ms-md-auto {\n        margin-left: auto !important;\n    }\n\n    .p-md-0 {\n        padding: 0 !important;\n    }\n\n    .p-md-1 {\n        padding: 0.25rem !important;\n    }\n\n    .p-md-2 {\n        padding: 0.5rem !important;\n    }\n\n    .p-md-3 {\n        padding: 1rem !important;\n    }\n\n    .p-md-4 {\n        padding: 1.5rem !important;\n    }\n\n    .p-md-5 {\n        padding: 3rem !important;\n    }\n\n    .px-md-0 {\n        padding-right: 0 !important;\n        padding-left: 0 !important;\n    }\n\n    .px-md-1 {\n        padding-right: 0.25rem !important;\n        padding-left: 0.25rem !important;\n    }\n\n    .px-md-2 {\n        padding-right: 0.5rem !important;\n        padding-left: 0.5rem !important;\n    }\n\n    .px-md-3 {\n        padding-right: 1rem !important;\n        padding-left: 1rem !important;\n    }\n\n    .px-md-4 {\n        padding-right: 1.5rem !important;\n        padding-left: 1.5rem !important;\n    }\n\n    .px-md-5 {\n        padding-right: 3rem !important;\n        padding-left: 3rem !important;\n    }\n\n    .py-md-0 {\n        padding-top: 0 !important;\n        padding-bottom: 0 !important;\n    }\n\n    .py-md-1 {\n        padding-top: 0.25rem !important;\n        padding-bottom: 0.25rem !important;\n    }\n\n    .py-md-2 {\n        padding-top: 0.5rem !important;\n        padding-bottom: 0.5rem !important;\n    }\n\n    .py-md-3 {\n        padding-top: 1rem !important;\n        padding-bottom: 1rem !important;\n    }\n\n    .py-md-4 {\n        padding-top: 1.5rem !important;\n        padding-bottom: 1.5rem !important;\n    }\n\n    .py-md-5 {\n        padding-top: 3rem !important;\n        padding-bottom: 3rem !important;\n    }\n\n    .pt-md-0 {\n        padding-top: 0 !important;\n    }\n\n    .pt-md-1 {\n        padding-top: 0.25rem !important;\n    }\n\n    .pt-md-2 {\n        padding-top: 0.5rem !important;\n    }\n\n    .pt-md-3 {\n        padding-top: 1rem !important;\n    }\n\n    .pt-md-4 {\n        padding-top: 1.5rem !important;\n    }\n\n    .pt-md-5 {\n        padding-top: 3rem !important;\n    }\n\n    .pe-md-0 {\n        padding-right: 0 !important;\n    }\n\n    .pe-md-1 {\n        padding-right: 0.25rem !important;\n    }\n\n    .pe-md-2 {\n        padding-right: 0.5rem !important;\n    }\n\n    .pe-md-3 {\n        padding-right: 1rem !important;\n    }\n\n    .pe-md-4 {\n        padding-right: 1.5rem !important;\n    }\n\n    .pe-md-5 {\n        padding-right: 3rem !important;\n    }\n\n    .pb-md-0 {\n        padding-bottom: 0 !important;\n    }\n\n    .pb-md-1 {\n        padding-bottom: 0.25rem !important;\n    }\n\n    .pb-md-2 {\n        padding-bottom: 0.5rem !important;\n    }\n\n    .pb-md-3 {\n        padding-bottom: 1rem !important;\n    }\n\n    .pb-md-4 {\n        padding-bottom: 1.5rem !important;\n    }\n\n    .pb-md-5 {\n        padding-bottom: 3rem !important;\n    }\n\n    .ps-md-0 {\n        padding-left: 0 !important;\n    }\n\n    .ps-md-1 {\n        padding-left: 0.25rem !important;\n    }\n\n    .ps-md-2 {\n        padding-left: 0.5rem !important;\n    }\n\n    .ps-md-3 {\n        padding-left: 1rem !important;\n    }\n\n    .ps-md-4 {\n        padding-left: 1.5rem !important;\n    }\n\n    .ps-md-5 {\n        padding-left: 3rem !important;\n    }\n\n    .gap-md-0 {\n        gap: 0 !important;\n    }\n\n    .gap-md-1 {\n        gap: 0.25rem !important;\n    }\n\n    .gap-md-2 {\n        gap: 0.5rem !important;\n    }\n\n    .gap-md-3 {\n        gap: 1rem !important;\n    }\n\n    .gap-md-4 {\n        gap: 1.5rem !important;\n    }\n\n    .gap-md-5 {\n        gap: 3rem !important;\n    }\n\n    .text-md-start {\n        text-align: left !important;\n    }\n\n    .text-md-end {\n        text-align: right !important;\n    }\n\n    .text-md-center {\n        text-align: center !important;\n    }\n}\n\n@media (min-width: 992px) {\n    .float-lg-start {\n        float: left !important;\n    }\n\n    .float-lg-end {\n        float: right !important;\n    }\n\n    .float-lg-none {\n        float: none !important;\n    }\n\n    .d-lg-inline {\n        display: inline !important;\n    }\n\n    .d-lg-inline-block {\n        display: inline-block !important;\n    }\n\n    .d-lg-block {\n        display: block !important;\n    }\n\n    .d-lg-grid {\n        display: grid !important;\n    }\n\n    .d-lg-table {\n        display: table !important;\n    }\n\n    .d-lg-table-row {\n        display: table-row !important;\n    }\n\n    .d-lg-table-cell {\n        display: table-cell !important;\n    }\n\n    .d-lg-flex {\n        display: flex !important;\n    }\n\n    .d-lg-inline-flex {\n        display: inline-flex !important;\n    }\n\n    .d-lg-none {\n        display: none !important;\n    }\n\n    .flex-lg-fill {\n        flex: 1 1 auto !important;\n    }\n\n    .flex-lg-row {\n        flex-direction: row !important;\n    }\n\n    .flex-lg-column {\n        flex-direction: column !important;\n    }\n\n    .flex-lg-row-reverse {\n        flex-direction: row-reverse !important;\n    }\n\n    .flex-lg-column-reverse {\n        flex-direction: column-reverse !important;\n    }\n\n    .flex-lg-grow-0 {\n        flex-grow: 0 !important;\n    }\n\n    .flex-lg-grow-1 {\n        flex-grow: 1 !important;\n    }\n\n    .flex-lg-shrink-0 {\n        flex-shrink: 0 !important;\n    }\n\n    .flex-lg-shrink-1 {\n        flex-shrink: 1 !important;\n    }\n\n    .flex-lg-wrap {\n        flex-wrap: wrap !important;\n    }\n\n    .flex-lg-nowrap {\n        flex-wrap: nowrap !important;\n    }\n\n    .flex-lg-wrap-reverse {\n        flex-wrap: wrap-reverse !important;\n    }\n\n    .justify-content-lg-start {\n        justify-content: flex-start !important;\n    }\n\n    .justify-content-lg-end {\n        justify-content: flex-end !important;\n    }\n\n    .justify-content-lg-center {\n        justify-content: center !important;\n    }\n\n    .justify-content-lg-between {\n        justify-content: space-between !important;\n    }\n\n    .justify-content-lg-around {\n        justify-content: space-around !important;\n    }\n\n    .justify-content-lg-evenly {\n        justify-content: space-evenly !important;\n    }\n\n    .align-items-lg-start {\n        align-items: flex-start !important;\n    }\n\n    .align-items-lg-end {\n        align-items: flex-end !important;\n    }\n\n    .align-items-lg-center {\n        align-items: center !important;\n    }\n\n    .align-items-lg-baseline {\n        align-items: baseline !important;\n    }\n\n    .align-items-lg-stretch {\n        align-items: stretch !important;\n    }\n\n    .align-content-lg-start {\n        align-content: flex-start !important;\n    }\n\n    .align-content-lg-end {\n        align-content: flex-end !important;\n    }\n\n    .align-content-lg-center {\n        align-content: center !important;\n    }\n\n    .align-content-lg-between {\n        align-content: space-between !important;\n    }\n\n    .align-content-lg-around {\n        align-content: space-around !important;\n    }\n\n    .align-content-lg-stretch {\n        align-content: stretch !important;\n    }\n\n    .align-self-lg-auto {\n        align-self: auto !important;\n    }\n\n    .align-self-lg-start {\n        align-self: flex-start !important;\n    }\n\n    .align-self-lg-end {\n        align-self: flex-end !important;\n    }\n\n    .align-self-lg-center {\n        align-self: center !important;\n    }\n\n    .align-self-lg-baseline {\n        align-self: baseline !important;\n    }\n\n    .align-self-lg-stretch {\n        align-self: stretch !important;\n    }\n\n    .order-lg-first {\n        order: -1 !important;\n    }\n\n    .order-lg-0 {\n        order: 0 !important;\n    }\n\n    .order-lg-1 {\n        order: 1 !important;\n    }\n\n    .order-lg-2 {\n        order: 2 !important;\n    }\n\n    .order-lg-3 {\n        order: 3 !important;\n    }\n\n    .order-lg-4 {\n        order: 4 !important;\n    }\n\n    .order-lg-5 {\n        order: 5 !important;\n    }\n\n    .order-lg-last {\n        order: 6 !important;\n    }\n\n    .m-lg-0 {\n        margin: 0 !important;\n    }\n\n    .m-lg-1 {\n        margin: 0.25rem !important;\n    }\n\n    .m-lg-2 {\n        margin: 0.5rem !important;\n    }\n\n    .m-lg-3 {\n        margin: 1rem !important;\n    }\n\n    .m-lg-4 {\n        margin: 1.5rem !important;\n    }\n\n    .m-lg-5 {\n        margin: 3rem !important;\n    }\n\n    .m-lg-auto {\n        margin: auto !important;\n    }\n\n    .mx-lg-0 {\n        margin-right: 0 !important;\n        margin-left: 0 !important;\n    }\n\n    .mx-lg-1 {\n        margin-right: 0.25rem !important;\n        margin-left: 0.25rem !important;\n    }\n\n    .mx-lg-2 {\n        margin-right: 0.5rem !important;\n        margin-left: 0.5rem !important;\n    }\n\n    .mx-lg-3 {\n        margin-right: 1rem !important;\n        margin-left: 1rem !important;\n    }\n\n    .mx-lg-4 {\n        margin-right: 1.5rem !important;\n        margin-left: 1.5rem !important;\n    }\n\n    .mx-lg-5 {\n        margin-right: 3rem !important;\n        margin-left: 3rem !important;\n    }\n\n    .mx-lg-auto {\n        margin-right: auto !important;\n        margin-left: auto !important;\n    }\n\n    .my-lg-0 {\n        margin-top: 0 !important;\n        margin-bottom: 0 !important;\n    }\n\n    .my-lg-1 {\n        margin-top: 0.25rem !important;\n        margin-bottom: 0.25rem !important;\n    }\n\n    .my-lg-2 {\n        margin-top: 0.5rem !important;\n        margin-bottom: 0.5rem !important;\n    }\n\n    .my-lg-3 {\n        margin-top: 1rem !important;\n        margin-bottom: 1rem !important;\n    }\n\n    .my-lg-4 {\n        margin-top: 1.5rem !important;\n        margin-bottom: 1.5rem !important;\n    }\n\n    .my-lg-5 {\n        margin-top: 3rem !important;\n        margin-bottom: 3rem !important;\n    }\n\n    .my-lg-auto {\n        margin-top: auto !important;\n        margin-bottom: auto !important;\n    }\n\n    .mt-lg-0 {\n        margin-top: 0 !important;\n    }\n\n    .mt-lg-1 {\n        margin-top: 0.25rem !important;\n    }\n\n    .mt-lg-2 {\n        margin-top: 0.5rem !important;\n    }\n\n    .mt-lg-3 {\n        margin-top: 1rem !important;\n    }\n\n    .mt-lg-4 {\n        margin-top: 1.5rem !important;\n    }\n\n    .mt-lg-5 {\n        margin-top: 3rem !important;\n    }\n\n    .mt-lg-auto {\n        margin-top: auto !important;\n    }\n\n    .me-lg-0 {\n        margin-right: 0 !important;\n    }\n\n    .me-lg-1 {\n        margin-right: 0.25rem !important;\n    }\n\n    .me-lg-2 {\n        margin-right: 0.5rem !important;\n    }\n\n    .me-lg-3 {\n        margin-right: 1rem !important;\n    }\n\n    .me-lg-4 {\n        margin-right: 1.5rem !important;\n    }\n\n    .me-lg-5 {\n        margin-right: 3rem !important;\n    }\n\n    .me-lg-auto {\n        margin-right: auto !important;\n    }\n\n    .mb-lg-0 {\n        margin-bottom: 0 !important;\n    }\n\n    .mb-lg-1 {\n        margin-bottom: 0.25rem !important;\n    }\n\n    .mb-lg-2 {\n        margin-bottom: 0.5rem !important;\n    }\n\n    .mb-lg-3 {\n        margin-bottom: 1rem !important;\n    }\n\n    .mb-lg-4 {\n        margin-bottom: 1.5rem !important;\n    }\n\n    .mb-lg-5 {\n        margin-bottom: 3rem !important;\n    }\n\n    .mb-lg-auto {\n        margin-bottom: auto !important;\n    }\n\n    .ms-lg-0 {\n        margin-left: 0 !important;\n    }\n\n    .ms-lg-1 {\n        margin-left: 0.25rem !important;\n    }\n\n    .ms-lg-2 {\n        margin-left: 0.5rem !important;\n    }\n\n    .ms-lg-3 {\n        margin-left: 1rem !important;\n    }\n\n    .ms-lg-4 {\n        margin-left: 1.5rem !important;\n    }\n\n    .ms-lg-5 {\n        margin-left: 3rem !important;\n    }\n\n    .ms-lg-auto {\n        margin-left: auto !important;\n    }\n\n    .p-lg-0 {\n        padding: 0 !important;\n    }\n\n    .p-lg-1 {\n        padding: 0.25rem !important;\n    }\n\n    .p-lg-2 {\n        padding: 0.5rem !important;\n    }\n\n    .p-lg-3 {\n        padding: 1rem !important;\n    }\n\n    .p-lg-4 {\n        padding: 1.5rem !important;\n    }\n\n    .p-lg-5 {\n        padding: 3rem !important;\n    }\n\n    .px-lg-0 {\n        padding-right: 0 !important;\n        padding-left: 0 !important;\n    }\n\n    .px-lg-1 {\n        padding-right: 0.25rem !important;\n        padding-left: 0.25rem !important;\n    }\n\n    .px-lg-2 {\n        padding-right: 0.5rem !important;\n        padding-left: 0.5rem !important;\n    }\n\n    .px-lg-3 {\n        padding-right: 1rem !important;\n        padding-left: 1rem !important;\n    }\n\n    .px-lg-4 {\n        padding-right: 1.5rem !important;\n        padding-left: 1.5rem !important;\n    }\n\n    .px-lg-5 {\n        padding-right: 3rem !important;\n        padding-left: 3rem !important;\n    }\n\n    .py-lg-0 {\n        padding-top: 0 !important;\n        padding-bottom: 0 !important;\n    }\n\n    .py-lg-1 {\n        padding-top: 0.25rem !important;\n        padding-bottom: 0.25rem !important;\n    }\n\n    .py-lg-2 {\n        padding-top: 0.5rem !important;\n        padding-bottom: 0.5rem !important;\n    }\n\n    .py-lg-3 {\n        padding-top: 1rem !important;\n        padding-bottom: 1rem !important;\n    }\n\n    .py-lg-4 {\n        padding-top: 1.5rem !important;\n        padding-bottom: 1.5rem !important;\n    }\n\n    .py-lg-5 {\n        padding-top: 3rem !important;\n        padding-bottom: 3rem !important;\n    }\n\n    .pt-lg-0 {\n        padding-top: 0 !important;\n    }\n\n    .pt-lg-1 {\n        padding-top: 0.25rem !important;\n    }\n\n    .pt-lg-2 {\n        padding-top: 0.5rem !important;\n    }\n\n    .pt-lg-3 {\n        padding-top: 1rem !important;\n    }\n\n    .pt-lg-4 {\n        padding-top: 1.5rem !important;\n    }\n\n    .pt-lg-5 {\n        padding-top: 3rem !important;\n    }\n\n    .pe-lg-0 {\n        padding-right: 0 !important;\n    }\n\n    .pe-lg-1 {\n        padding-right: 0.25rem !important;\n    }\n\n    .pe-lg-2 {\n        padding-right: 0.5rem !important;\n    }\n\n    .pe-lg-3 {\n        padding-right: 1rem !important;\n    }\n\n    .pe-lg-4 {\n        padding-right: 1.5rem !important;\n    }\n\n    .pe-lg-5 {\n        padding-right: 3rem !important;\n    }\n\n    .pb-lg-0 {\n        padding-bottom: 0 !important;\n    }\n\n    .pb-lg-1 {\n        padding-bottom: 0.25rem !important;\n    }\n\n    .pb-lg-2 {\n        padding-bottom: 0.5rem !important;\n    }\n\n    .pb-lg-3 {\n        padding-bottom: 1rem !important;\n    }\n\n    .pb-lg-4 {\n        padding-bottom: 1.5rem !important;\n    }\n\n    .pb-lg-5 {\n        padding-bottom: 3rem !important;\n    }\n\n    .ps-lg-0 {\n        padding-left: 0 !important;\n    }\n\n    .ps-lg-1 {\n        padding-left: 0.25rem !important;\n    }\n\n    .ps-lg-2 {\n        padding-left: 0.5rem !important;\n    }\n\n    .ps-lg-3 {\n        padding-left: 1rem !important;\n    }\n\n    .ps-lg-4 {\n        padding-left: 1.5rem !important;\n    }\n\n    .ps-lg-5 {\n        padding-left: 3rem !important;\n    }\n\n    .gap-lg-0 {\n        gap: 0 !important;\n    }\n\n    .gap-lg-1 {\n        gap: 0.25rem !important;\n    }\n\n    .gap-lg-2 {\n        gap: 0.5rem !important;\n    }\n\n    .gap-lg-3 {\n        gap: 1rem !important;\n    }\n\n    .gap-lg-4 {\n        gap: 1.5rem !important;\n    }\n\n    .gap-lg-5 {\n        gap: 3rem !important;\n    }\n\n    .text-lg-start {\n        text-align: left !important;\n    }\n\n    .text-lg-end {\n        text-align: right !important;\n    }\n\n    .text-lg-center {\n        text-align: center !important;\n    }\n}\n\n@media (min-width: 1200px) {\n    .float-xl-start {\n        float: left !important;\n    }\n\n    .float-xl-end {\n        float: right !important;\n    }\n\n    .float-xl-none {\n        float: none !important;\n    }\n\n    .d-xl-inline {\n        display: inline !important;\n    }\n\n    .d-xl-inline-block {\n        display: inline-block !important;\n    }\n\n    .d-xl-block {\n        display: block !important;\n    }\n\n    .d-xl-grid {\n        display: grid !important;\n    }\n\n    .d-xl-table {\n        display: table !important;\n    }\n\n    .d-xl-table-row {\n        display: table-row !important;\n    }\n\n    .d-xl-table-cell {\n        display: table-cell !important;\n    }\n\n    .d-xl-flex {\n        display: flex !important;\n    }\n\n    .d-xl-inline-flex {\n        display: inline-flex !important;\n    }\n\n    .d-xl-none {\n        display: none !important;\n    }\n\n    .flex-xl-fill {\n        flex: 1 1 auto !important;\n    }\n\n    .flex-xl-row {\n        flex-direction: row !important;\n    }\n\n    .flex-xl-column {\n        flex-direction: column !important;\n    }\n\n    .flex-xl-row-reverse {\n        flex-direction: row-reverse !important;\n    }\n\n    .flex-xl-column-reverse {\n        flex-direction: column-reverse !important;\n    }\n\n    .flex-xl-grow-0 {\n        flex-grow: 0 !important;\n    }\n\n    .flex-xl-grow-1 {\n        flex-grow: 1 !important;\n    }\n\n    .flex-xl-shrink-0 {\n        flex-shrink: 0 !important;\n    }\n\n    .flex-xl-shrink-1 {\n        flex-shrink: 1 !important;\n    }\n\n    .flex-xl-wrap {\n        flex-wrap: wrap !important;\n    }\n\n    .flex-xl-nowrap {\n        flex-wrap: nowrap !important;\n    }\n\n    .flex-xl-wrap-reverse {\n        flex-wrap: wrap-reverse !important;\n    }\n\n    .justify-content-xl-start {\n        justify-content: flex-start !important;\n    }\n\n    .justify-content-xl-end {\n        justify-content: flex-end !important;\n    }\n\n    .justify-content-xl-center {\n        justify-content: center !important;\n    }\n\n    .justify-content-xl-between {\n        justify-content: space-between !important;\n    }\n\n    .justify-content-xl-around {\n        justify-content: space-around !important;\n    }\n\n    .justify-content-xl-evenly {\n        justify-content: space-evenly !important;\n    }\n\n    .align-items-xl-start {\n        align-items: flex-start !important;\n    }\n\n    .align-items-xl-end {\n        align-items: flex-end !important;\n    }\n\n    .align-items-xl-center {\n        align-items: center !important;\n    }\n\n    .align-items-xl-baseline {\n        align-items: baseline !important;\n    }\n\n    .align-items-xl-stretch {\n        align-items: stretch !important;\n    }\n\n    .align-content-xl-start {\n        align-content: flex-start !important;\n    }\n\n    .align-content-xl-end {\n        align-content: flex-end !important;\n    }\n\n    .align-content-xl-center {\n        align-content: center !important;\n    }\n\n    .align-content-xl-between {\n        align-content: space-between !important;\n    }\n\n    .align-content-xl-around {\n        align-content: space-around !important;\n    }\n\n    .align-content-xl-stretch {\n        align-content: stretch !important;\n    }\n\n    .align-self-xl-auto {\n        align-self: auto !important;\n    }\n\n    .align-self-xl-start {\n        align-self: flex-start !important;\n    }\n\n    .align-self-xl-end {\n        align-self: flex-end !important;\n    }\n\n    .align-self-xl-center {\n        align-self: center !important;\n    }\n\n    .align-self-xl-baseline {\n        align-self: baseline !important;\n    }\n\n    .align-self-xl-stretch {\n        align-self: stretch !important;\n    }\n\n    .order-xl-first {\n        order: -1 !important;\n    }\n\n    .order-xl-0 {\n        order: 0 !important;\n    }\n\n    .order-xl-1 {\n        order: 1 !important;\n    }\n\n    .order-xl-2 {\n        order: 2 !important;\n    }\n\n    .order-xl-3 {\n        order: 3 !important;\n    }\n\n    .order-xl-4 {\n        order: 4 !important;\n    }\n\n    .order-xl-5 {\n        order: 5 !important;\n    }\n\n    .order-xl-last {\n        order: 6 !important;\n    }\n\n    .m-xl-0 {\n        margin: 0 !important;\n    }\n\n    .m-xl-1 {\n        margin: 0.25rem !important;\n    }\n\n    .m-xl-2 {\n        margin: 0.5rem !important;\n    }\n\n    .m-xl-3 {\n        margin: 1rem !important;\n    }\n\n    .m-xl-4 {\n        margin: 1.5rem !important;\n    }\n\n    .m-xl-5 {\n        margin: 3rem !important;\n    }\n\n    .m-xl-auto {\n        margin: auto !important;\n    }\n\n    .mx-xl-0 {\n        margin-right: 0 !important;\n        margin-left: 0 !important;\n    }\n\n    .mx-xl-1 {\n        margin-right: 0.25rem !important;\n        margin-left: 0.25rem !important;\n    }\n\n    .mx-xl-2 {\n        margin-right: 0.5rem !important;\n        margin-left: 0.5rem !important;\n    }\n\n    .mx-xl-3 {\n        margin-right: 1rem !important;\n        margin-left: 1rem !important;\n    }\n\n    .mx-xl-4 {\n        margin-right: 1.5rem !important;\n        margin-left: 1.5rem !important;\n    }\n\n    .mx-xl-5 {\n        margin-right: 3rem !important;\n        margin-left: 3rem !important;\n    }\n\n    .mx-xl-auto {\n        margin-right: auto !important;\n        margin-left: auto !important;\n    }\n\n    .my-xl-0 {\n        margin-top: 0 !important;\n        margin-bottom: 0 !important;\n    }\n\n    .my-xl-1 {\n        margin-top: 0.25rem !important;\n        margin-bottom: 0.25rem !important;\n    }\n\n    .my-xl-2 {\n        margin-top: 0.5rem !important;\n        margin-bottom: 0.5rem !important;\n    }\n\n    .my-xl-3 {\n        margin-top: 1rem !important;\n        margin-bottom: 1rem !important;\n    }\n\n    .my-xl-4 {\n        margin-top: 1.5rem !important;\n        margin-bottom: 1.5rem !important;\n    }\n\n    .my-xl-5 {\n        margin-top: 3rem !important;\n        margin-bottom: 3rem !important;\n    }\n\n    .my-xl-auto {\n        margin-top: auto !important;\n        margin-bottom: auto !important;\n    }\n\n    .mt-xl-0 {\n        margin-top: 0 !important;\n    }\n\n    .mt-xl-1 {\n        margin-top: 0.25rem !important;\n    }\n\n    .mt-xl-2 {\n        margin-top: 0.5rem !important;\n    }\n\n    .mt-xl-3 {\n        margin-top: 1rem !important;\n    }\n\n    .mt-xl-4 {\n        margin-top: 1.5rem !important;\n    }\n\n    .mt-xl-5 {\n        margin-top: 3rem !important;\n    }\n\n    .mt-xl-auto {\n        margin-top: auto !important;\n    }\n\n    .me-xl-0 {\n        margin-right: 0 !important;\n    }\n\n    .me-xl-1 {\n        margin-right: 0.25rem !important;\n    }\n\n    .me-xl-2 {\n        margin-right: 0.5rem !important;\n    }\n\n    .me-xl-3 {\n        margin-right: 1rem !important;\n    }\n\n    .me-xl-4 {\n        margin-right: 1.5rem !important;\n    }\n\n    .me-xl-5 {\n        margin-right: 3rem !important;\n    }\n\n    .me-xl-auto {\n        margin-right: auto !important;\n    }\n\n    .mb-xl-0 {\n        margin-bottom: 0 !important;\n    }\n\n    .mb-xl-1 {\n        margin-bottom: 0.25rem !important;\n    }\n\n    .mb-xl-2 {\n        margin-bottom: 0.5rem !important;\n    }\n\n    .mb-xl-3 {\n        margin-bottom: 1rem !important;\n    }\n\n    .mb-xl-4 {\n        margin-bottom: 1.5rem !important;\n    }\n\n    .mb-xl-5 {\n        margin-bottom: 3rem !important;\n    }\n\n    .mb-xl-auto {\n        margin-bottom: auto !important;\n    }\n\n    .ms-xl-0 {\n        margin-left: 0 !important;\n    }\n\n    .ms-xl-1 {\n        margin-left: 0.25rem !important;\n    }\n\n    .ms-xl-2 {\n        margin-left: 0.5rem !important;\n    }\n\n    .ms-xl-3 {\n        margin-left: 1rem !important;\n    }\n\n    .ms-xl-4 {\n        margin-left: 1.5rem !important;\n    }\n\n    .ms-xl-5 {\n        margin-left: 3rem !important;\n    }\n\n    .ms-xl-auto {\n        margin-left: auto !important;\n    }\n\n    .p-xl-0 {\n        padding: 0 !important;\n    }\n\n    .p-xl-1 {\n        padding: 0.25rem !important;\n    }\n\n    .p-xl-2 {\n        padding: 0.5rem !important;\n    }\n\n    .p-xl-3 {\n        padding: 1rem !important;\n    }\n\n    .p-xl-4 {\n        padding: 1.5rem !important;\n    }\n\n    .p-xl-5 {\n        padding: 3rem !important;\n    }\n\n    .px-xl-0 {\n        padding-right: 0 !important;\n        padding-left: 0 !important;\n    }\n\n    .px-xl-1 {\n        padding-right: 0.25rem !important;\n        padding-left: 0.25rem !important;\n    }\n\n    .px-xl-2 {\n        padding-right: 0.5rem !important;\n        padding-left: 0.5rem !important;\n    }\n\n    .px-xl-3 {\n        padding-right: 1rem !important;\n        padding-left: 1rem !important;\n    }\n\n    .px-xl-4 {\n        padding-right: 1.5rem !important;\n        padding-left: 1.5rem !important;\n    }\n\n    .px-xl-5 {\n        padding-right: 3rem !important;\n        padding-left: 3rem !important;\n    }\n\n    .py-xl-0 {\n        padding-top: 0 !important;\n        padding-bottom: 0 !important;\n    }\n\n    .py-xl-1 {\n        padding-top: 0.25rem !important;\n        padding-bottom: 0.25rem !important;\n    }\n\n    .py-xl-2 {\n        padding-top: 0.5rem !important;\n        padding-bottom: 0.5rem !important;\n    }\n\n    .py-xl-3 {\n        padding-top: 1rem !important;\n        padding-bottom: 1rem !important;\n    }\n\n    .py-xl-4 {\n        padding-top: 1.5rem !important;\n        padding-bottom: 1.5rem !important;\n    }\n\n    .py-xl-5 {\n        padding-top: 3rem !important;\n        padding-bottom: 3rem !important;\n    }\n\n    .pt-xl-0 {\n        padding-top: 0 !important;\n    }\n\n    .pt-xl-1 {\n        padding-top: 0.25rem !important;\n    }\n\n    .pt-xl-2 {\n        padding-top: 0.5rem !important;\n    }\n\n    .pt-xl-3 {\n        padding-top: 1rem !important;\n    }\n\n    .pt-xl-4 {\n        padding-top: 1.5rem !important;\n    }\n\n    .pt-xl-5 {\n        padding-top: 3rem !important;\n    }\n\n    .pe-xl-0 {\n        padding-right: 0 !important;\n    }\n\n    .pe-xl-1 {\n        padding-right: 0.25rem !important;\n    }\n\n    .pe-xl-2 {\n        padding-right: 0.5rem !important;\n    }\n\n    .pe-xl-3 {\n        padding-right: 1rem !important;\n    }\n\n    .pe-xl-4 {\n        padding-right: 1.5rem !important;\n    }\n\n    .pe-xl-5 {\n        padding-right: 3rem !important;\n    }\n\n    .pb-xl-0 {\n        padding-bottom: 0 !important;\n    }\n\n    .pb-xl-1 {\n        padding-bottom: 0.25rem !important;\n    }\n\n    .pb-xl-2 {\n        padding-bottom: 0.5rem !important;\n    }\n\n    .pb-xl-3 {\n        padding-bottom: 1rem !important;\n    }\n\n    .pb-xl-4 {\n        padding-bottom: 1.5rem !important;\n    }\n\n    .pb-xl-5 {\n        padding-bottom: 3rem !important;\n    }\n\n    .ps-xl-0 {\n        padding-left: 0 !important;\n    }\n\n    .ps-xl-1 {\n        padding-left: 0.25rem !important;\n    }\n\n    .ps-xl-2 {\n        padding-left: 0.5rem !important;\n    }\n\n    .ps-xl-3 {\n        padding-left: 1rem !important;\n    }\n\n    .ps-xl-4 {\n        padding-left: 1.5rem !important;\n    }\n\n    .ps-xl-5 {\n        padding-left: 3rem !important;\n    }\n\n    .gap-xl-0 {\n        gap: 0 !important;\n    }\n\n    .gap-xl-1 {\n        gap: 0.25rem !important;\n    }\n\n    .gap-xl-2 {\n        gap: 0.5rem !important;\n    }\n\n    .gap-xl-3 {\n        gap: 1rem !important;\n    }\n\n    .gap-xl-4 {\n        gap: 1.5rem !important;\n    }\n\n    .gap-xl-5 {\n        gap: 3rem !important;\n    }\n\n    .text-xl-start {\n        text-align: left !important;\n    }\n\n    .text-xl-end {\n        text-align: right !important;\n    }\n\n    .text-xl-center {\n        text-align: center !important;\n    }\n}\n\n@media (min-width: 1400px) {\n    .float-xxl-start {\n        float: left !important;\n    }\n\n    .float-xxl-end {\n        float: right !important;\n    }\n\n    .float-xxl-none {\n        float: none !important;\n    }\n\n    .d-xxl-inline {\n        display: inline !important;\n    }\n\n    .d-xxl-inline-block {\n        display: inline-block !important;\n    }\n\n    .d-xxl-block {\n        display: block !important;\n    }\n\n    .d-xxl-grid {\n        display: grid !important;\n    }\n\n    .d-xxl-table {\n        display: table !important;\n    }\n\n    .d-xxl-table-row {\n        display: table-row !important;\n    }\n\n    .d-xxl-table-cell {\n        display: table-cell !important;\n    }\n\n    .d-xxl-flex {\n        display: flex !important;\n    }\n\n    .d-xxl-inline-flex {\n        display: inline-flex !important;\n    }\n\n    .d-xxl-none {\n        display: none !important;\n    }\n\n    .flex-xxl-fill {\n        flex: 1 1 auto !important;\n    }\n\n    .flex-xxl-row {\n        flex-direction: row !important;\n    }\n\n    .flex-xxl-column {\n        flex-direction: column !important;\n    }\n\n    .flex-xxl-row-reverse {\n        flex-direction: row-reverse !important;\n    }\n\n    .flex-xxl-column-reverse {\n        flex-direction: column-reverse !important;\n    }\n\n    .flex-xxl-grow-0 {\n        flex-grow: 0 !important;\n    }\n\n    .flex-xxl-grow-1 {\n        flex-grow: 1 !important;\n    }\n\n    .flex-xxl-shrink-0 {\n        flex-shrink: 0 !important;\n    }\n\n    .flex-xxl-shrink-1 {\n        flex-shrink: 1 !important;\n    }\n\n    .flex-xxl-wrap {\n        flex-wrap: wrap !important;\n    }\n\n    .flex-xxl-nowrap {\n        flex-wrap: nowrap !important;\n    }\n\n    .flex-xxl-wrap-reverse {\n        flex-wrap: wrap-reverse !important;\n    }\n\n    .justify-content-xxl-start {\n        justify-content: flex-start !important;\n    }\n\n    .justify-content-xxl-end {\n        justify-content: flex-end !important;\n    }\n\n    .justify-content-xxl-center {\n        justify-content: center !important;\n    }\n\n    .justify-content-xxl-between {\n        justify-content: space-between !important;\n    }\n\n    .justify-content-xxl-around {\n        justify-content: space-around !important;\n    }\n\n    .justify-content-xxl-evenly {\n        justify-content: space-evenly !important;\n    }\n\n    .align-items-xxl-start {\n        align-items: flex-start !important;\n    }\n\n    .align-items-xxl-end {\n        align-items: flex-end !important;\n    }\n\n    .align-items-xxl-center {\n        align-items: center !important;\n    }\n\n    .align-items-xxl-baseline {\n        align-items: baseline !important;\n    }\n\n    .align-items-xxl-stretch {\n        align-items: stretch !important;\n    }\n\n    .align-content-xxl-start {\n        align-content: flex-start !important;\n    }\n\n    .align-content-xxl-end {\n        align-content: flex-end !important;\n    }\n\n    .align-content-xxl-center {\n        align-content: center !important;\n    }\n\n    .align-content-xxl-between {\n        align-content: space-between !important;\n    }\n\n    .align-content-xxl-around {\n        align-content: space-around !important;\n    }\n\n    .align-content-xxl-stretch {\n        align-content: stretch !important;\n    }\n\n    .align-self-xxl-auto {\n        align-self: auto !important;\n    }\n\n    .align-self-xxl-start {\n        align-self: flex-start !important;\n    }\n\n    .align-self-xxl-end {\n        align-self: flex-end !important;\n    }\n\n    .align-self-xxl-center {\n        align-self: center !important;\n    }\n\n    .align-self-xxl-baseline {\n        align-self: baseline !important;\n    }\n\n    .align-self-xxl-stretch {\n        align-self: stretch !important;\n    }\n\n    .order-xxl-first {\n        order: -1 !important;\n    }\n\n    .order-xxl-0 {\n        order: 0 !important;\n    }\n\n    .order-xxl-1 {\n        order: 1 !important;\n    }\n\n    .order-xxl-2 {\n        order: 2 !important;\n    }\n\n    .order-xxl-3 {\n        order: 3 !important;\n    }\n\n    .order-xxl-4 {\n        order: 4 !important;\n    }\n\n    .order-xxl-5 {\n        order: 5 !important;\n    }\n\n    .order-xxl-last {\n        order: 6 !important;\n    }\n\n    .m-xxl-0 {\n        margin: 0 !important;\n    }\n\n    .m-xxl-1 {\n        margin: 0.25rem !important;\n    }\n\n    .m-xxl-2 {\n        margin: 0.5rem !important;\n    }\n\n    .m-xxl-3 {\n        margin: 1rem !important;\n    }\n\n    .m-xxl-4 {\n        margin: 1.5rem !important;\n    }\n\n    .m-xxl-5 {\n        margin: 3rem !important;\n    }\n\n    .m-xxl-auto {\n        margin: auto !important;\n    }\n\n    .mx-xxl-0 {\n        margin-right: 0 !important;\n        margin-left: 0 !important;\n    }\n\n    .mx-xxl-1 {\n        margin-right: 0.25rem !important;\n        margin-left: 0.25rem !important;\n    }\n\n    .mx-xxl-2 {\n        margin-right: 0.5rem !important;\n        margin-left: 0.5rem !important;\n    }\n\n    .mx-xxl-3 {\n        margin-right: 1rem !important;\n        margin-left: 1rem !important;\n    }\n\n    .mx-xxl-4 {\n        margin-right: 1.5rem !important;\n        margin-left: 1.5rem !important;\n    }\n\n    .mx-xxl-5 {\n        margin-right: 3rem !important;\n        margin-left: 3rem !important;\n    }\n\n    .mx-xxl-auto {\n        margin-right: auto !important;\n        margin-left: auto !important;\n    }\n\n    .my-xxl-0 {\n        margin-top: 0 !important;\n        margin-bottom: 0 !important;\n    }\n\n    .my-xxl-1 {\n        margin-top: 0.25rem !important;\n        margin-bottom: 0.25rem !important;\n    }\n\n    .my-xxl-2 {\n        margin-top: 0.5rem !important;\n        margin-bottom: 0.5rem !important;\n    }\n\n    .my-xxl-3 {\n        margin-top: 1rem !important;\n        margin-bottom: 1rem !important;\n    }\n\n    .my-xxl-4 {\n        margin-top: 1.5rem !important;\n        margin-bottom: 1.5rem !important;\n    }\n\n    .my-xxl-5 {\n        margin-top: 3rem !important;\n        margin-bottom: 3rem !important;\n    }\n\n    .my-xxl-auto {\n        margin-top: auto !important;\n        margin-bottom: auto !important;\n    }\n\n    .mt-xxl-0 {\n        margin-top: 0 !important;\n    }\n\n    .mt-xxl-1 {\n        margin-top: 0.25rem !important;\n    }\n\n    .mt-xxl-2 {\n        margin-top: 0.5rem !important;\n    }\n\n    .mt-xxl-3 {\n        margin-top: 1rem !important;\n    }\n\n    .mt-xxl-4 {\n        margin-top: 1.5rem !important;\n    }\n\n    .mt-xxl-5 {\n        margin-top: 3rem !important;\n    }\n\n    .mt-xxl-auto {\n        margin-top: auto !important;\n    }\n\n    .me-xxl-0 {\n        margin-right: 0 !important;\n    }\n\n    .me-xxl-1 {\n        margin-right: 0.25rem !important;\n    }\n\n    .me-xxl-2 {\n        margin-right: 0.5rem !important;\n    }\n\n    .me-xxl-3 {\n        margin-right: 1rem !important;\n    }\n\n    .me-xxl-4 {\n        margin-right: 1.5rem !important;\n    }\n\n    .me-xxl-5 {\n        margin-right: 3rem !important;\n    }\n\n    .me-xxl-auto {\n        margin-right: auto !important;\n    }\n\n    .mb-xxl-0 {\n        margin-bottom: 0 !important;\n    }\n\n    .mb-xxl-1 {\n        margin-bottom: 0.25rem !important;\n    }\n\n    .mb-xxl-2 {\n        margin-bottom: 0.5rem !important;\n    }\n\n    .mb-xxl-3 {\n        margin-bottom: 1rem !important;\n    }\n\n    .mb-xxl-4 {\n        margin-bottom: 1.5rem !important;\n    }\n\n    .mb-xxl-5 {\n        margin-bottom: 3rem !important;\n    }\n\n    .mb-xxl-auto {\n        margin-bottom: auto !important;\n    }\n\n    .ms-xxl-0 {\n        margin-left: 0 !important;\n    }\n\n    .ms-xxl-1 {\n        margin-left: 0.25rem !important;\n    }\n\n    .ms-xxl-2 {\n        margin-left: 0.5rem !important;\n    }\n\n    .ms-xxl-3 {\n        margin-left: 1rem !important;\n    }\n\n    .ms-xxl-4 {\n        margin-left: 1.5rem !important;\n    }\n\n    .ms-xxl-5 {\n        margin-left: 3rem !important;\n    }\n\n    .ms-xxl-auto {\n        margin-left: auto !important;\n    }\n\n    .p-xxl-0 {\n        padding: 0 !important;\n    }\n\n    .p-xxl-1 {\n        padding: 0.25rem !important;\n    }\n\n    .p-xxl-2 {\n        padding: 0.5rem !important;\n    }\n\n    .p-xxl-3 {\n        padding: 1rem !important;\n    }\n\n    .p-xxl-4 {\n        padding: 1.5rem !important;\n    }\n\n    .p-xxl-5 {\n        padding: 3rem !important;\n    }\n\n    .px-xxl-0 {\n        padding-right: 0 !important;\n        padding-left: 0 !important;\n    }\n\n    .px-xxl-1 {\n        padding-right: 0.25rem !important;\n        padding-left: 0.25rem !important;\n    }\n\n    .px-xxl-2 {\n        padding-right: 0.5rem !important;\n        padding-left: 0.5rem !important;\n    }\n\n    .px-xxl-3 {\n        padding-right: 1rem !important;\n        padding-left: 1rem !important;\n    }\n\n    .px-xxl-4 {\n        padding-right: 1.5rem !important;\n        padding-left: 1.5rem !important;\n    }\n\n    .px-xxl-5 {\n        padding-right: 3rem !important;\n        padding-left: 3rem !important;\n    }\n\n    .py-xxl-0 {\n        padding-top: 0 !important;\n        padding-bottom: 0 !important;\n    }\n\n    .py-xxl-1 {\n        padding-top: 0.25rem !important;\n        padding-bottom: 0.25rem !important;\n    }\n\n    .py-xxl-2 {\n        padding-top: 0.5rem !important;\n        padding-bottom: 0.5rem !important;\n    }\n\n    .py-xxl-3 {\n        padding-top: 1rem !important;\n        padding-bottom: 1rem !important;\n    }\n\n    .py-xxl-4 {\n        padding-top: 1.5rem !important;\n        padding-bottom: 1.5rem !important;\n    }\n\n    .py-xxl-5 {\n        padding-top: 3rem !important;\n        padding-bottom: 3rem !important;\n    }\n\n    .pt-xxl-0 {\n        padding-top: 0 !important;\n    }\n\n    .pt-xxl-1 {\n        padding-top: 0.25rem !important;\n    }\n\n    .pt-xxl-2 {\n        padding-top: 0.5rem !important;\n    }\n\n    .pt-xxl-3 {\n        padding-top: 1rem !important;\n    }\n\n    .pt-xxl-4 {\n        padding-top: 1.5rem !important;\n    }\n\n    .pt-xxl-5 {\n        padding-top: 3rem !important;\n    }\n\n    .pe-xxl-0 {\n        padding-right: 0 !important;\n    }\n\n    .pe-xxl-1 {\n        padding-right: 0.25rem !important;\n    }\n\n    .pe-xxl-2 {\n        padding-right: 0.5rem !important;\n    }\n\n    .pe-xxl-3 {\n        padding-right: 1rem !important;\n    }\n\n    .pe-xxl-4 {\n        padding-right: 1.5rem !important;\n    }\n\n    .pe-xxl-5 {\n        padding-right: 3rem !important;\n    }\n\n    .pb-xxl-0 {\n        padding-bottom: 0 !important;\n    }\n\n    .pb-xxl-1 {\n        padding-bottom: 0.25rem !important;\n    }\n\n    .pb-xxl-2 {\n        padding-bottom: 0.5rem !important;\n    }\n\n    .pb-xxl-3 {\n        padding-bottom: 1rem !important;\n    }\n\n    .pb-xxl-4 {\n        padding-bottom: 1.5rem !important;\n    }\n\n    .pb-xxl-5 {\n        padding-bottom: 3rem !important;\n    }\n\n    .ps-xxl-0 {\n        padding-left: 0 !important;\n    }\n\n    .ps-xxl-1 {\n        padding-left: 0.25rem !important;\n    }\n\n    .ps-xxl-2 {\n        padding-left: 0.5rem !important;\n    }\n\n    .ps-xxl-3 {\n        padding-left: 1rem !important;\n    }\n\n    .ps-xxl-4 {\n        padding-left: 1.5rem !important;\n    }\n\n    .ps-xxl-5 {\n        padding-left: 3rem !important;\n    }\n\n    .gap-xxl-0 {\n        gap: 0 !important;\n    }\n\n    .gap-xxl-1 {\n        gap: 0.25rem !important;\n    }\n\n    .gap-xxl-2 {\n        gap: 0.5rem !important;\n    }\n\n    .gap-xxl-3 {\n        gap: 1rem !important;\n    }\n\n    .gap-xxl-4 {\n        gap: 1.5rem !important;\n    }\n\n    .gap-xxl-5 {\n        gap: 3rem !important;\n    }\n\n    .text-xxl-start {\n        text-align: left !important;\n    }\n\n    .text-xxl-end {\n        text-align: right !important;\n    }\n\n    .text-xxl-center {\n        text-align: center !important;\n    }\n}\n\n@media (min-width: 1200px) {\n    .fs-1 {\n        font-size: 2.5rem !important;\n    }\n\n    .fs-2 {\n        font-size: 2rem !important;\n    }\n\n    .fs-3 {\n        font-size: 1.75rem !important;\n    }\n\n    .fs-4 {\n        font-size: 1.5rem !important;\n    }\n}\n\n@media print {\n    .d-print-inline {\n        display: inline !important;\n    }\n\n    .d-print-inline-block {\n        display: inline-block !important;\n    }\n\n    .d-print-block {\n        display: block !important;\n    }\n\n    .d-print-grid {\n        display: grid !important;\n    }\n\n    .d-print-table {\n        display: table !important;\n    }\n\n    .d-print-table-row {\n        display: table-row !important;\n    }\n\n    .d-print-table-cell {\n        display: table-cell !important;\n    }\n\n    .d-print-flex {\n        display: flex !important;\n    }\n\n    .d-print-inline-flex {\n        display: inline-flex !important;\n    }\n\n    .d-print-none {\n        display: none !important;\n    }\n}\n\n/*# sourceMappingURL=bootstrap.css.map */"
  },
  {
    "path": "src/main/resources/web/css/bootstrap.rtl.css",
    "content": "@charset \"UTF-8\";\n/*!\n * Bootstrap  v5.2.3 (https://getbootstrap.com/)\n * Copyright 2011-2022 The Bootstrap Authors\n * Copyright 2011-2022 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n:root {\n    --bs-blue: #0d6efd;\n    --bs-indigo: #6610f2;\n    --bs-purple: #6f42c1;\n    --bs-pink: #d63384;\n    --bs-red: #dc3545;\n    --bs-orange: #fd7e14;\n    --bs-yellow: #ffc107;\n    --bs-green: #198754;\n    --bs-teal: #20c997;\n    --bs-cyan: #0dcaf0;\n    --bs-black: #000;\n    --bs-white: #fff;\n    --bs-gray: #6c757d;\n    --bs-gray-dark: #343a40;\n    --bs-gray-100: #f8f9fa;\n    --bs-gray-200: #e9ecef;\n    --bs-gray-300: #dee2e6;\n    --bs-gray-400: #ced4da;\n    --bs-gray-500: #adb5bd;\n    --bs-gray-600: #6c757d;\n    --bs-gray-700: #495057;\n    --bs-gray-800: #343a40;\n    --bs-gray-900: #212529;\n    --bs-primary: #0d6efd;\n    --bs-secondary: #6c757d;\n    --bs-success: #198754;\n    --bs-info: #0dcaf0;\n    --bs-warning: #ffc107;\n    --bs-danger: #dc3545;\n    --bs-light: #f8f9fa;\n    --bs-dark: #212529;\n    --bs-primary-rgb: 13, 110, 253;\n    --bs-secondary-rgb: 108, 117, 125;\n    --bs-success-rgb: 25, 135, 84;\n    --bs-info-rgb: 13, 202, 240;\n    --bs-warning-rgb: 255, 193, 7;\n    --bs-danger-rgb: 220, 53, 69;\n    --bs-light-rgb: 248, 249, 250;\n    --bs-dark-rgb: 33, 37, 41;\n    --bs-white-rgb: 255, 255, 255;\n    --bs-black-rgb: 0, 0, 0;\n    --bs-body-color-rgb: 33, 37, 41;\n    --bs-body-bg-rgb: 255, 255, 255;\n    --bs-font-sans-serif: system-ui, -apple-system, \"Segoe UI\", Roboto, \"Helvetica Neue\", \"Noto Sans\", \"Liberation Sans\", Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n    --bs-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n    --bs-gradient: linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));\n    --bs-body-font-family: var(--bs-font-sans-serif);\n    --bs-body-font-size: 1rem;\n    --bs-body-font-weight: 400;\n    --bs-body-line-height: 1.5;\n    --bs-body-color: #212529;\n    --bs-body-bg: #fff;\n    --bs-border-width: 1px;\n    --bs-border-style: solid;\n    --bs-border-color: #dee2e6;\n    --bs-border-color-translucent: rgba(0, 0, 0, 0.175);\n    --bs-border-radius: 0.375rem;\n    --bs-border-radius-sm: 0.25rem;\n    --bs-border-radius-lg: 0.5rem;\n    --bs-border-radius-xl: 1rem;\n    --bs-border-radius-2xl: 2rem;\n    --bs-border-radius-pill: 50rem;\n    --bs-link-color: #0d6efd;\n    --bs-link-hover-color: #0a58ca;\n    --bs-code-color: #d63384;\n    --bs-highlight-bg: #fff3cd;\n}\n\n*,\n*::before,\n*::after {\n    box-sizing: border-box;\n}\n\n@media (prefers-reduced-motion: no-preference) {\n    :root {\n        scroll-behavior: smooth;\n    }\n}\n\nbody {\n    margin: 0;\n    font-family: var(--bs-body-font-family);\n    font-size: var(--bs-body-font-size);\n    font-weight: var(--bs-body-font-weight);\n    line-height: var(--bs-body-line-height);\n    color: var(--bs-body-color);\n    text-align: var(--bs-body-text-align);\n    background-color: var(--bs-body-bg);\n    -webkit-text-size-adjust: 100%;\n    -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\n\nhr {\n    margin: 1rem 0;\n    color: inherit;\n    border: 0;\n    border-top: 1px solid;\n    opacity: 0.25;\n}\n\nh6, .h6, h5, .h5, h4, .h4, h3, .h3, h2, .h2, h1, .h1 {\n    margin-top: 0;\n    margin-bottom: 0.5rem;\n    font-weight: 500;\n    line-height: 1.2;\n}\n\nh1, .h1 {\n    font-size: calc(1.375rem + 1.5vw);\n}\n\n@media (min-width: 1200px) {\n    h1, .h1 {\n        font-size: 2.5rem;\n    }\n}\n\nh2, .h2 {\n    font-size: calc(1.325rem + 0.9vw);\n}\n\n@media (min-width: 1200px) {\n    h2, .h2 {\n        font-size: 2rem;\n    }\n}\n\nh3, .h3 {\n    font-size: calc(1.3rem + 0.6vw);\n}\n\n@media (min-width: 1200px) {\n    h3, .h3 {\n        font-size: 1.75rem;\n    }\n}\n\nh4, .h4 {\n    font-size: calc(1.275rem + 0.3vw);\n}\n\n@media (min-width: 1200px) {\n    h4, .h4 {\n        font-size: 1.5rem;\n    }\n}\n\nh5, .h5 {\n    font-size: 1.25rem;\n}\n\nh6, .h6 {\n    font-size: 1rem;\n}\n\np {\n    margin-top: 0;\n    margin-bottom: 1rem;\n}\n\nabbr[title] {\n    -webkit-text-decoration: underline dotted;\n    text-decoration: underline dotted;\n    cursor: help;\n    -webkit-text-decoration-skip-ink: none;\n    text-decoration-skip-ink: none;\n}\n\naddress {\n    margin-bottom: 1rem;\n    font-style: normal;\n    line-height: inherit;\n}\n\nol,\nul {\n    padding-right: 2rem;\n}\n\nol,\nul,\ndl {\n    margin-top: 0;\n    margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n    margin-bottom: 0;\n}\n\ndt {\n    font-weight: 700;\n}\n\ndd {\n    margin-bottom: 0.5rem;\n    margin-right: 0;\n}\n\nblockquote {\n    margin: 0 0 1rem;\n}\n\nb,\nstrong {\n    font-weight: bolder;\n}\n\nsmall, .small {\n    font-size: 0.875em;\n}\n\nmark, .mark {\n    padding: 0.1875em;\n    background-color: var(--bs-highlight-bg);\n}\n\nsub,\nsup {\n    position: relative;\n    font-size: 0.75em;\n    line-height: 0;\n    vertical-align: baseline;\n}\n\nsub {\n    bottom: -0.25em;\n}\n\nsup {\n    top: -0.5em;\n}\n\na {\n    color: var(--bs-link-color);\n    text-decoration: underline;\n}\n\na:hover {\n    color: var(--bs-link-hover-color);\n}\n\na:not([href]):not([class]), a:not([href]):not([class]):hover {\n    color: inherit;\n    text-decoration: none;\n}\n\npre,\ncode,\nkbd,\nsamp {\n    font-family: var(--bs-font-monospace);\n    font-size: 1em;\n}\n\npre {\n    display: block;\n    margin-top: 0;\n    margin-bottom: 1rem;\n    overflow: auto;\n    font-size: 0.875em;\n}\n\npre code {\n    font-size: inherit;\n    color: inherit;\n    word-break: normal;\n}\n\ncode {\n    font-size: 0.875em;\n    color: var(--bs-code-color);\n    word-wrap: break-word;\n}\n\na > code {\n    color: inherit;\n}\n\nkbd {\n    padding: 0.1875rem 0.375rem;\n    font-size: 0.875em;\n    color: var(--bs-body-bg);\n    background-color: var(--bs-body-color);\n    border-radius: 0.25rem;\n}\n\nkbd kbd {\n    padding: 0;\n    font-size: 1em;\n}\n\nfigure {\n    margin: 0 0 1rem;\n}\n\nimg,\nsvg {\n    vertical-align: middle;\n}\n\ntable {\n    caption-side: bottom;\n    border-collapse: collapse;\n}\n\ncaption {\n    padding-top: 0.5rem;\n    padding-bottom: 0.5rem;\n    color: #6c757d;\n    text-align: right;\n}\n\nth {\n    text-align: inherit;\n    text-align: -webkit-match-parent;\n}\n\nthead,\ntbody,\ntfoot,\ntr,\ntd,\nth {\n    border-color: inherit;\n    border-style: solid;\n    border-width: 0;\n}\n\nlabel {\n    display: inline-block;\n}\n\nbutton {\n    border-radius: 0;\n}\n\nbutton:focus:not(:focus-visible) {\n    outline: 0;\n}\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n    margin: 0;\n    font-family: inherit;\n    font-size: inherit;\n    line-height: inherit;\n}\n\nbutton,\nselect {\n    text-transform: none;\n}\n\n[role=button] {\n    cursor: pointer;\n}\n\nselect {\n    word-wrap: normal;\n}\n\nselect:disabled {\n    opacity: 1;\n}\n\n[list]:not([type=date]):not([type=datetime-local]):not([type=month]):not([type=week]):not([type=time])::-webkit-calendar-picker-indicator {\n    display: none !important;\n}\n\nbutton,\n[type=button],\n[type=reset],\n[type=submit] {\n    -webkit-appearance: button;\n}\n\nbutton:not(:disabled),\n[type=button]:not(:disabled),\n[type=reset]:not(:disabled),\n[type=submit]:not(:disabled) {\n    cursor: pointer;\n}\n\n::-moz-focus-inner {\n    padding: 0;\n    border-style: none;\n}\n\ntextarea {\n    resize: vertical;\n}\n\nfieldset {\n    min-width: 0;\n    padding: 0;\n    margin: 0;\n    border: 0;\n}\n\nlegend {\n    float: right;\n    width: 100%;\n    padding: 0;\n    margin-bottom: 0.5rem;\n    font-size: calc(1.275rem + 0.3vw);\n    line-height: inherit;\n}\n\n@media (min-width: 1200px) {\n    legend {\n        font-size: 1.5rem;\n    }\n}\n\nlegend + * {\n    clear: right;\n}\n\n::-webkit-datetime-edit-fields-wrapper,\n::-webkit-datetime-edit-text,\n::-webkit-datetime-edit-minute,\n::-webkit-datetime-edit-hour-field,\n::-webkit-datetime-edit-day-field,\n::-webkit-datetime-edit-month-field,\n::-webkit-datetime-edit-year-field {\n    padding: 0;\n}\n\n::-webkit-inner-spin-button {\n    height: auto;\n}\n\n[type=search] {\n    outline-offset: -2px;\n    -webkit-appearance: textfield;\n}\n\n[type=\"tel\"],\n[type=\"url\"],\n[type=\"email\"],\n[type=\"number\"] {\n    direction: ltr;\n}\n\n::-webkit-search-decoration {\n    -webkit-appearance: none;\n}\n\n::-webkit-color-swatch-wrapper {\n    padding: 0;\n}\n\n::-webkit-file-upload-button {\n    font: inherit;\n    -webkit-appearance: button;\n}\n\n::file-selector-button {\n    font: inherit;\n    -webkit-appearance: button;\n}\n\noutput {\n    display: inline-block;\n}\n\niframe {\n    border: 0;\n}\n\nsummary {\n    display: list-item;\n    cursor: pointer;\n}\n\nprogress {\n    vertical-align: baseline;\n}\n\n[hidden] {\n    display: none !important;\n}\n\n.lead {\n    font-size: 1.25rem;\n    font-weight: 300;\n}\n\n.display-1 {\n    font-size: calc(1.625rem + 4.5vw);\n    font-weight: 300;\n    line-height: 1.2;\n}\n\n@media (min-width: 1200px) {\n    .display-1 {\n        font-size: 5rem;\n    }\n}\n\n.display-2 {\n    font-size: calc(1.575rem + 3.9vw);\n    font-weight: 300;\n    line-height: 1.2;\n}\n\n@media (min-width: 1200px) {\n    .display-2 {\n        font-size: 4.5rem;\n    }\n}\n\n.display-3 {\n    font-size: calc(1.525rem + 3.3vw);\n    font-weight: 300;\n    line-height: 1.2;\n}\n\n@media (min-width: 1200px) {\n    .display-3 {\n        font-size: 4rem;\n    }\n}\n\n.display-4 {\n    font-size: calc(1.475rem + 2.7vw);\n    font-weight: 300;\n    line-height: 1.2;\n}\n\n@media (min-width: 1200px) {\n    .display-4 {\n        font-size: 3.5rem;\n    }\n}\n\n.display-5 {\n    font-size: calc(1.425rem + 2.1vw);\n    font-weight: 300;\n    line-height: 1.2;\n}\n\n@media (min-width: 1200px) {\n    .display-5 {\n        font-size: 3rem;\n    }\n}\n\n.display-6 {\n    font-size: calc(1.375rem + 1.5vw);\n    font-weight: 300;\n    line-height: 1.2;\n}\n\n@media (min-width: 1200px) {\n    .display-6 {\n        font-size: 2.5rem;\n    }\n}\n\n.list-unstyled {\n    padding-right: 0;\n    list-style: none;\n}\n\n.list-inline {\n    padding-right: 0;\n    list-style: none;\n}\n\n.list-inline-item {\n    display: inline-block;\n}\n\n.list-inline-item:not(:last-child) {\n    margin-left: 0.5rem;\n}\n\n.initialism {\n    font-size: 0.875em;\n    text-transform: uppercase;\n}\n\n.blockquote {\n    margin-bottom: 1rem;\n    font-size: 1.25rem;\n}\n\n.blockquote > :last-child {\n    margin-bottom: 0;\n}\n\n.blockquote-footer {\n    margin-top: -1rem;\n    margin-bottom: 1rem;\n    font-size: 0.875em;\n    color: #6c757d;\n}\n\n.blockquote-footer::before {\n    content: \"— \";\n}\n\n.img-fluid {\n    max-width: 100%;\n    height: auto;\n}\n\n.img-thumbnail {\n    padding: 0.25rem;\n    background-color: #fff;\n    border: 1px solid var(--bs-border-color);\n    border-radius: 0.375rem;\n    max-width: 100%;\n    height: auto;\n}\n\n.figure {\n    display: inline-block;\n}\n\n.figure-img {\n    margin-bottom: 0.5rem;\n    line-height: 1;\n}\n\n.figure-caption {\n    font-size: 0.875em;\n    color: #6c757d;\n}\n\n.container,\n.container-fluid,\n.container-xxl,\n.container-xl,\n.container-lg,\n.container-md,\n.container-sm {\n    --bs-gutter-x: 1.5rem;\n    --bs-gutter-y: 0;\n    width: 100%;\n    padding-left: calc(var(--bs-gutter-x) * 0.5);\n    padding-right: calc(var(--bs-gutter-x) * 0.5);\n    margin-left: auto;\n    margin-right: auto;\n}\n\n@media (min-width: 576px) {\n    .container-sm, .container {\n        max-width: 540px;\n    }\n}\n\n@media (min-width: 768px) {\n    .container-md, .container-sm, .container {\n        max-width: 720px;\n    }\n}\n\n@media (min-width: 992px) {\n    .container-lg, .container-md, .container-sm, .container {\n        max-width: 960px;\n    }\n}\n\n@media (min-width: 1200px) {\n    .container-xl, .container-lg, .container-md, .container-sm, .container {\n        max-width: 1140px;\n    }\n}\n\n@media (min-width: 1400px) {\n    .container-xxl, .container-xl, .container-lg, .container-md, .container-sm, .container {\n        max-width: 1320px;\n    }\n}\n\n.row {\n    --bs-gutter-x: 1.5rem;\n    --bs-gutter-y: 0;\n    display: flex;\n    flex-wrap: wrap;\n    margin-top: calc(-1 * var(--bs-gutter-y));\n    margin-left: calc(-0.5 * var(--bs-gutter-x));\n    margin-right: calc(-0.5 * var(--bs-gutter-x));\n}\n\n.row > * {\n    flex-shrink: 0;\n    width: 100%;\n    max-width: 100%;\n    padding-left: calc(var(--bs-gutter-x) * 0.5);\n    padding-right: calc(var(--bs-gutter-x) * 0.5);\n    margin-top: var(--bs-gutter-y);\n}\n\n.col {\n    flex: 1 0 0%;\n}\n\n.row-cols-auto > * {\n    flex: 0 0 auto;\n    width: auto;\n}\n\n.row-cols-1 > * {\n    flex: 0 0 auto;\n    width: 100%;\n}\n\n.row-cols-2 > * {\n    flex: 0 0 auto;\n    width: 50%;\n}\n\n.row-cols-3 > * {\n    flex: 0 0 auto;\n    width: 33.3333333333%;\n}\n\n.row-cols-4 > * {\n    flex: 0 0 auto;\n    width: 25%;\n}\n\n.row-cols-5 > * {\n    flex: 0 0 auto;\n    width: 20%;\n}\n\n.row-cols-6 > * {\n    flex: 0 0 auto;\n    width: 16.6666666667%;\n}\n\n.col-auto {\n    flex: 0 0 auto;\n    width: auto;\n}\n\n.col-1 {\n    flex: 0 0 auto;\n    width: 8.33333333%;\n}\n\n.col-2 {\n    flex: 0 0 auto;\n    width: 16.66666667%;\n}\n\n.col-3 {\n    flex: 0 0 auto;\n    width: 25%;\n}\n\n.col-4 {\n    flex: 0 0 auto;\n    width: 33.33333333%;\n}\n\n.col-5 {\n    flex: 0 0 auto;\n    width: 41.66666667%;\n}\n\n.col-6 {\n    flex: 0 0 auto;\n    width: 50%;\n}\n\n.col-7 {\n    flex: 0 0 auto;\n    width: 58.33333333%;\n}\n\n.col-8 {\n    flex: 0 0 auto;\n    width: 66.66666667%;\n}\n\n.col-9 {\n    flex: 0 0 auto;\n    width: 75%;\n}\n\n.col-10 {\n    flex: 0 0 auto;\n    width: 83.33333333%;\n}\n\n.col-11 {\n    flex: 0 0 auto;\n    width: 91.66666667%;\n}\n\n.col-12 {\n    flex: 0 0 auto;\n    width: 100%;\n}\n\n.offset-1 {\n    margin-right: 8.33333333%;\n}\n\n.offset-2 {\n    margin-right: 16.66666667%;\n}\n\n.offset-3 {\n    margin-right: 25%;\n}\n\n.offset-4 {\n    margin-right: 33.33333333%;\n}\n\n.offset-5 {\n    margin-right: 41.66666667%;\n}\n\n.offset-6 {\n    margin-right: 50%;\n}\n\n.offset-7 {\n    margin-right: 58.33333333%;\n}\n\n.offset-8 {\n    margin-right: 66.66666667%;\n}\n\n.offset-9 {\n    margin-right: 75%;\n}\n\n.offset-10 {\n    margin-right: 83.33333333%;\n}\n\n.offset-11 {\n    margin-right: 91.66666667%;\n}\n\n.g-0,\n.gx-0 {\n    --bs-gutter-x: 0;\n}\n\n.g-0,\n.gy-0 {\n    --bs-gutter-y: 0;\n}\n\n.g-1,\n.gx-1 {\n    --bs-gutter-x: 0.25rem;\n}\n\n.g-1,\n.gy-1 {\n    --bs-gutter-y: 0.25rem;\n}\n\n.g-2,\n.gx-2 {\n    --bs-gutter-x: 0.5rem;\n}\n\n.g-2,\n.gy-2 {\n    --bs-gutter-y: 0.5rem;\n}\n\n.g-3,\n.gx-3 {\n    --bs-gutter-x: 1rem;\n}\n\n.g-3,\n.gy-3 {\n    --bs-gutter-y: 1rem;\n}\n\n.g-4,\n.gx-4 {\n    --bs-gutter-x: 1.5rem;\n}\n\n.g-4,\n.gy-4 {\n    --bs-gutter-y: 1.5rem;\n}\n\n.g-5,\n.gx-5 {\n    --bs-gutter-x: 3rem;\n}\n\n.g-5,\n.gy-5 {\n    --bs-gutter-y: 3rem;\n}\n\n@media (min-width: 576px) {\n    .col-sm {\n        flex: 1 0 0%;\n    }\n\n    .row-cols-sm-auto > * {\n        flex: 0 0 auto;\n        width: auto;\n    }\n\n    .row-cols-sm-1 > * {\n        flex: 0 0 auto;\n        width: 100%;\n    }\n\n    .row-cols-sm-2 > * {\n        flex: 0 0 auto;\n        width: 50%;\n    }\n\n    .row-cols-sm-3 > * {\n        flex: 0 0 auto;\n        width: 33.3333333333%;\n    }\n\n    .row-cols-sm-4 > * {\n        flex: 0 0 auto;\n        width: 25%;\n    }\n\n    .row-cols-sm-5 > * {\n        flex: 0 0 auto;\n        width: 20%;\n    }\n\n    .row-cols-sm-6 > * {\n        flex: 0 0 auto;\n        width: 16.6666666667%;\n    }\n\n    .col-sm-auto {\n        flex: 0 0 auto;\n        width: auto;\n    }\n\n    .col-sm-1 {\n        flex: 0 0 auto;\n        width: 8.33333333%;\n    }\n\n    .col-sm-2 {\n        flex: 0 0 auto;\n        width: 16.66666667%;\n    }\n\n    .col-sm-3 {\n        flex: 0 0 auto;\n        width: 25%;\n    }\n\n    .col-sm-4 {\n        flex: 0 0 auto;\n        width: 33.33333333%;\n    }\n\n    .col-sm-5 {\n        flex: 0 0 auto;\n        width: 41.66666667%;\n    }\n\n    .col-sm-6 {\n        flex: 0 0 auto;\n        width: 50%;\n    }\n\n    .col-sm-7 {\n        flex: 0 0 auto;\n        width: 58.33333333%;\n    }\n\n    .col-sm-8 {\n        flex: 0 0 auto;\n        width: 66.66666667%;\n    }\n\n    .col-sm-9 {\n        flex: 0 0 auto;\n        width: 75%;\n    }\n\n    .col-sm-10 {\n        flex: 0 0 auto;\n        width: 83.33333333%;\n    }\n\n    .col-sm-11 {\n        flex: 0 0 auto;\n        width: 91.66666667%;\n    }\n\n    .col-sm-12 {\n        flex: 0 0 auto;\n        width: 100%;\n    }\n\n    .offset-sm-0 {\n        margin-right: 0;\n    }\n\n    .offset-sm-1 {\n        margin-right: 8.33333333%;\n    }\n\n    .offset-sm-2 {\n        margin-right: 16.66666667%;\n    }\n\n    .offset-sm-3 {\n        margin-right: 25%;\n    }\n\n    .offset-sm-4 {\n        margin-right: 33.33333333%;\n    }\n\n    .offset-sm-5 {\n        margin-right: 41.66666667%;\n    }\n\n    .offset-sm-6 {\n        margin-right: 50%;\n    }\n\n    .offset-sm-7 {\n        margin-right: 58.33333333%;\n    }\n\n    .offset-sm-8 {\n        margin-right: 66.66666667%;\n    }\n\n    .offset-sm-9 {\n        margin-right: 75%;\n    }\n\n    .offset-sm-10 {\n        margin-right: 83.33333333%;\n    }\n\n    .offset-sm-11 {\n        margin-right: 91.66666667%;\n    }\n\n    .g-sm-0,\n    .gx-sm-0 {\n        --bs-gutter-x: 0;\n    }\n\n    .g-sm-0,\n    .gy-sm-0 {\n        --bs-gutter-y: 0;\n    }\n\n    .g-sm-1,\n    .gx-sm-1 {\n        --bs-gutter-x: 0.25rem;\n    }\n\n    .g-sm-1,\n    .gy-sm-1 {\n        --bs-gutter-y: 0.25rem;\n    }\n\n    .g-sm-2,\n    .gx-sm-2 {\n        --bs-gutter-x: 0.5rem;\n    }\n\n    .g-sm-2,\n    .gy-sm-2 {\n        --bs-gutter-y: 0.5rem;\n    }\n\n    .g-sm-3,\n    .gx-sm-3 {\n        --bs-gutter-x: 1rem;\n    }\n\n    .g-sm-3,\n    .gy-sm-3 {\n        --bs-gutter-y: 1rem;\n    }\n\n    .g-sm-4,\n    .gx-sm-4 {\n        --bs-gutter-x: 1.5rem;\n    }\n\n    .g-sm-4,\n    .gy-sm-4 {\n        --bs-gutter-y: 1.5rem;\n    }\n\n    .g-sm-5,\n    .gx-sm-5 {\n        --bs-gutter-x: 3rem;\n    }\n\n    .g-sm-5,\n    .gy-sm-5 {\n        --bs-gutter-y: 3rem;\n    }\n}\n\n@media (min-width: 768px) {\n    .col-md {\n        flex: 1 0 0%;\n    }\n\n    .row-cols-md-auto > * {\n        flex: 0 0 auto;\n        width: auto;\n    }\n\n    .row-cols-md-1 > * {\n        flex: 0 0 auto;\n        width: 100%;\n    }\n\n    .row-cols-md-2 > * {\n        flex: 0 0 auto;\n        width: 50%;\n    }\n\n    .row-cols-md-3 > * {\n        flex: 0 0 auto;\n        width: 33.3333333333%;\n    }\n\n    .row-cols-md-4 > * {\n        flex: 0 0 auto;\n        width: 25%;\n    }\n\n    .row-cols-md-5 > * {\n        flex: 0 0 auto;\n        width: 20%;\n    }\n\n    .row-cols-md-6 > * {\n        flex: 0 0 auto;\n        width: 16.6666666667%;\n    }\n\n    .col-md-auto {\n        flex: 0 0 auto;\n        width: auto;\n    }\n\n    .col-md-1 {\n        flex: 0 0 auto;\n        width: 8.33333333%;\n    }\n\n    .col-md-2 {\n        flex: 0 0 auto;\n        width: 16.66666667%;\n    }\n\n    .col-md-3 {\n        flex: 0 0 auto;\n        width: 25%;\n    }\n\n    .col-md-4 {\n        flex: 0 0 auto;\n        width: 33.33333333%;\n    }\n\n    .col-md-5 {\n        flex: 0 0 auto;\n        width: 41.66666667%;\n    }\n\n    .col-md-6 {\n        flex: 0 0 auto;\n        width: 50%;\n    }\n\n    .col-md-7 {\n        flex: 0 0 auto;\n        width: 58.33333333%;\n    }\n\n    .col-md-8 {\n        flex: 0 0 auto;\n        width: 66.66666667%;\n    }\n\n    .col-md-9 {\n        flex: 0 0 auto;\n        width: 75%;\n    }\n\n    .col-md-10 {\n        flex: 0 0 auto;\n        width: 83.33333333%;\n    }\n\n    .col-md-11 {\n        flex: 0 0 auto;\n        width: 91.66666667%;\n    }\n\n    .col-md-12 {\n        flex: 0 0 auto;\n        width: 100%;\n    }\n\n    .offset-md-0 {\n        margin-right: 0;\n    }\n\n    .offset-md-1 {\n        margin-right: 8.33333333%;\n    }\n\n    .offset-md-2 {\n        margin-right: 16.66666667%;\n    }\n\n    .offset-md-3 {\n        margin-right: 25%;\n    }\n\n    .offset-md-4 {\n        margin-right: 33.33333333%;\n    }\n\n    .offset-md-5 {\n        margin-right: 41.66666667%;\n    }\n\n    .offset-md-6 {\n        margin-right: 50%;\n    }\n\n    .offset-md-7 {\n        margin-right: 58.33333333%;\n    }\n\n    .offset-md-8 {\n        margin-right: 66.66666667%;\n    }\n\n    .offset-md-9 {\n        margin-right: 75%;\n    }\n\n    .offset-md-10 {\n        margin-right: 83.33333333%;\n    }\n\n    .offset-md-11 {\n        margin-right: 91.66666667%;\n    }\n\n    .g-md-0,\n    .gx-md-0 {\n        --bs-gutter-x: 0;\n    }\n\n    .g-md-0,\n    .gy-md-0 {\n        --bs-gutter-y: 0;\n    }\n\n    .g-md-1,\n    .gx-md-1 {\n        --bs-gutter-x: 0.25rem;\n    }\n\n    .g-md-1,\n    .gy-md-1 {\n        --bs-gutter-y: 0.25rem;\n    }\n\n    .g-md-2,\n    .gx-md-2 {\n        --bs-gutter-x: 0.5rem;\n    }\n\n    .g-md-2,\n    .gy-md-2 {\n        --bs-gutter-y: 0.5rem;\n    }\n\n    .g-md-3,\n    .gx-md-3 {\n        --bs-gutter-x: 1rem;\n    }\n\n    .g-md-3,\n    .gy-md-3 {\n        --bs-gutter-y: 1rem;\n    }\n\n    .g-md-4,\n    .gx-md-4 {\n        --bs-gutter-x: 1.5rem;\n    }\n\n    .g-md-4,\n    .gy-md-4 {\n        --bs-gutter-y: 1.5rem;\n    }\n\n    .g-md-5,\n    .gx-md-5 {\n        --bs-gutter-x: 3rem;\n    }\n\n    .g-md-5,\n    .gy-md-5 {\n        --bs-gutter-y: 3rem;\n    }\n}\n\n@media (min-width: 992px) {\n    .col-lg {\n        flex: 1 0 0%;\n    }\n\n    .row-cols-lg-auto > * {\n        flex: 0 0 auto;\n        width: auto;\n    }\n\n    .row-cols-lg-1 > * {\n        flex: 0 0 auto;\n        width: 100%;\n    }\n\n    .row-cols-lg-2 > * {\n        flex: 0 0 auto;\n        width: 50%;\n    }\n\n    .row-cols-lg-3 > * {\n        flex: 0 0 auto;\n        width: 33.3333333333%;\n    }\n\n    .row-cols-lg-4 > * {\n        flex: 0 0 auto;\n        width: 25%;\n    }\n\n    .row-cols-lg-5 > * {\n        flex: 0 0 auto;\n        width: 20%;\n    }\n\n    .row-cols-lg-6 > * {\n        flex: 0 0 auto;\n        width: 16.6666666667%;\n    }\n\n    .col-lg-auto {\n        flex: 0 0 auto;\n        width: auto;\n    }\n\n    .col-lg-1 {\n        flex: 0 0 auto;\n        width: 8.33333333%;\n    }\n\n    .col-lg-2 {\n        flex: 0 0 auto;\n        width: 16.66666667%;\n    }\n\n    .col-lg-3 {\n        flex: 0 0 auto;\n        width: 25%;\n    }\n\n    .col-lg-4 {\n        flex: 0 0 auto;\n        width: 33.33333333%;\n    }\n\n    .col-lg-5 {\n        flex: 0 0 auto;\n        width: 41.66666667%;\n    }\n\n    .col-lg-6 {\n        flex: 0 0 auto;\n        width: 50%;\n    }\n\n    .col-lg-7 {\n        flex: 0 0 auto;\n        width: 58.33333333%;\n    }\n\n    .col-lg-8 {\n        flex: 0 0 auto;\n        width: 66.66666667%;\n    }\n\n    .col-lg-9 {\n        flex: 0 0 auto;\n        width: 75%;\n    }\n\n    .col-lg-10 {\n        flex: 0 0 auto;\n        width: 83.33333333%;\n    }\n\n    .col-lg-11 {\n        flex: 0 0 auto;\n        width: 91.66666667%;\n    }\n\n    .col-lg-12 {\n        flex: 0 0 auto;\n        width: 100%;\n    }\n\n    .offset-lg-0 {\n        margin-right: 0;\n    }\n\n    .offset-lg-1 {\n        margin-right: 8.33333333%;\n    }\n\n    .offset-lg-2 {\n        margin-right: 16.66666667%;\n    }\n\n    .offset-lg-3 {\n        margin-right: 25%;\n    }\n\n    .offset-lg-4 {\n        margin-right: 33.33333333%;\n    }\n\n    .offset-lg-5 {\n        margin-right: 41.66666667%;\n    }\n\n    .offset-lg-6 {\n        margin-right: 50%;\n    }\n\n    .offset-lg-7 {\n        margin-right: 58.33333333%;\n    }\n\n    .offset-lg-8 {\n        margin-right: 66.66666667%;\n    }\n\n    .offset-lg-9 {\n        margin-right: 75%;\n    }\n\n    .offset-lg-10 {\n        margin-right: 83.33333333%;\n    }\n\n    .offset-lg-11 {\n        margin-right: 91.66666667%;\n    }\n\n    .g-lg-0,\n    .gx-lg-0 {\n        --bs-gutter-x: 0;\n    }\n\n    .g-lg-0,\n    .gy-lg-0 {\n        --bs-gutter-y: 0;\n    }\n\n    .g-lg-1,\n    .gx-lg-1 {\n        --bs-gutter-x: 0.25rem;\n    }\n\n    .g-lg-1,\n    .gy-lg-1 {\n        --bs-gutter-y: 0.25rem;\n    }\n\n    .g-lg-2,\n    .gx-lg-2 {\n        --bs-gutter-x: 0.5rem;\n    }\n\n    .g-lg-2,\n    .gy-lg-2 {\n        --bs-gutter-y: 0.5rem;\n    }\n\n    .g-lg-3,\n    .gx-lg-3 {\n        --bs-gutter-x: 1rem;\n    }\n\n    .g-lg-3,\n    .gy-lg-3 {\n        --bs-gutter-y: 1rem;\n    }\n\n    .g-lg-4,\n    .gx-lg-4 {\n        --bs-gutter-x: 1.5rem;\n    }\n\n    .g-lg-4,\n    .gy-lg-4 {\n        --bs-gutter-y: 1.5rem;\n    }\n\n    .g-lg-5,\n    .gx-lg-5 {\n        --bs-gutter-x: 3rem;\n    }\n\n    .g-lg-5,\n    .gy-lg-5 {\n        --bs-gutter-y: 3rem;\n    }\n}\n\n@media (min-width: 1200px) {\n    .col-xl {\n        flex: 1 0 0%;\n    }\n\n    .row-cols-xl-auto > * {\n        flex: 0 0 auto;\n        width: auto;\n    }\n\n    .row-cols-xl-1 > * {\n        flex: 0 0 auto;\n        width: 100%;\n    }\n\n    .row-cols-xl-2 > * {\n        flex: 0 0 auto;\n        width: 50%;\n    }\n\n    .row-cols-xl-3 > * {\n        flex: 0 0 auto;\n        width: 33.3333333333%;\n    }\n\n    .row-cols-xl-4 > * {\n        flex: 0 0 auto;\n        width: 25%;\n    }\n\n    .row-cols-xl-5 > * {\n        flex: 0 0 auto;\n        width: 20%;\n    }\n\n    .row-cols-xl-6 > * {\n        flex: 0 0 auto;\n        width: 16.6666666667%;\n    }\n\n    .col-xl-auto {\n        flex: 0 0 auto;\n        width: auto;\n    }\n\n    .col-xl-1 {\n        flex: 0 0 auto;\n        width: 8.33333333%;\n    }\n\n    .col-xl-2 {\n        flex: 0 0 auto;\n        width: 16.66666667%;\n    }\n\n    .col-xl-3 {\n        flex: 0 0 auto;\n        width: 25%;\n    }\n\n    .col-xl-4 {\n        flex: 0 0 auto;\n        width: 33.33333333%;\n    }\n\n    .col-xl-5 {\n        flex: 0 0 auto;\n        width: 41.66666667%;\n    }\n\n    .col-xl-6 {\n        flex: 0 0 auto;\n        width: 50%;\n    }\n\n    .col-xl-7 {\n        flex: 0 0 auto;\n        width: 58.33333333%;\n    }\n\n    .col-xl-8 {\n        flex: 0 0 auto;\n        width: 66.66666667%;\n    }\n\n    .col-xl-9 {\n        flex: 0 0 auto;\n        width: 75%;\n    }\n\n    .col-xl-10 {\n        flex: 0 0 auto;\n        width: 83.33333333%;\n    }\n\n    .col-xl-11 {\n        flex: 0 0 auto;\n        width: 91.66666667%;\n    }\n\n    .col-xl-12 {\n        flex: 0 0 auto;\n        width: 100%;\n    }\n\n    .offset-xl-0 {\n        margin-right: 0;\n    }\n\n    .offset-xl-1 {\n        margin-right: 8.33333333%;\n    }\n\n    .offset-xl-2 {\n        margin-right: 16.66666667%;\n    }\n\n    .offset-xl-3 {\n        margin-right: 25%;\n    }\n\n    .offset-xl-4 {\n        margin-right: 33.33333333%;\n    }\n\n    .offset-xl-5 {\n        margin-right: 41.66666667%;\n    }\n\n    .offset-xl-6 {\n        margin-right: 50%;\n    }\n\n    .offset-xl-7 {\n        margin-right: 58.33333333%;\n    }\n\n    .offset-xl-8 {\n        margin-right: 66.66666667%;\n    }\n\n    .offset-xl-9 {\n        margin-right: 75%;\n    }\n\n    .offset-xl-10 {\n        margin-right: 83.33333333%;\n    }\n\n    .offset-xl-11 {\n        margin-right: 91.66666667%;\n    }\n\n    .g-xl-0,\n    .gx-xl-0 {\n        --bs-gutter-x: 0;\n    }\n\n    .g-xl-0,\n    .gy-xl-0 {\n        --bs-gutter-y: 0;\n    }\n\n    .g-xl-1,\n    .gx-xl-1 {\n        --bs-gutter-x: 0.25rem;\n    }\n\n    .g-xl-1,\n    .gy-xl-1 {\n        --bs-gutter-y: 0.25rem;\n    }\n\n    .g-xl-2,\n    .gx-xl-2 {\n        --bs-gutter-x: 0.5rem;\n    }\n\n    .g-xl-2,\n    .gy-xl-2 {\n        --bs-gutter-y: 0.5rem;\n    }\n\n    .g-xl-3,\n    .gx-xl-3 {\n        --bs-gutter-x: 1rem;\n    }\n\n    .g-xl-3,\n    .gy-xl-3 {\n        --bs-gutter-y: 1rem;\n    }\n\n    .g-xl-4,\n    .gx-xl-4 {\n        --bs-gutter-x: 1.5rem;\n    }\n\n    .g-xl-4,\n    .gy-xl-4 {\n        --bs-gutter-y: 1.5rem;\n    }\n\n    .g-xl-5,\n    .gx-xl-5 {\n        --bs-gutter-x: 3rem;\n    }\n\n    .g-xl-5,\n    .gy-xl-5 {\n        --bs-gutter-y: 3rem;\n    }\n}\n\n@media (min-width: 1400px) {\n    .col-xxl {\n        flex: 1 0 0%;\n    }\n\n    .row-cols-xxl-auto > * {\n        flex: 0 0 auto;\n        width: auto;\n    }\n\n    .row-cols-xxl-1 > * {\n        flex: 0 0 auto;\n        width: 100%;\n    }\n\n    .row-cols-xxl-2 > * {\n        flex: 0 0 auto;\n        width: 50%;\n    }\n\n    .row-cols-xxl-3 > * {\n        flex: 0 0 auto;\n        width: 33.3333333333%;\n    }\n\n    .row-cols-xxl-4 > * {\n        flex: 0 0 auto;\n        width: 25%;\n    }\n\n    .row-cols-xxl-5 > * {\n        flex: 0 0 auto;\n        width: 20%;\n    }\n\n    .row-cols-xxl-6 > * {\n        flex: 0 0 auto;\n        width: 16.6666666667%;\n    }\n\n    .col-xxl-auto {\n        flex: 0 0 auto;\n        width: auto;\n    }\n\n    .col-xxl-1 {\n        flex: 0 0 auto;\n        width: 8.33333333%;\n    }\n\n    .col-xxl-2 {\n        flex: 0 0 auto;\n        width: 16.66666667%;\n    }\n\n    .col-xxl-3 {\n        flex: 0 0 auto;\n        width: 25%;\n    }\n\n    .col-xxl-4 {\n        flex: 0 0 auto;\n        width: 33.33333333%;\n    }\n\n    .col-xxl-5 {\n        flex: 0 0 auto;\n        width: 41.66666667%;\n    }\n\n    .col-xxl-6 {\n        flex: 0 0 auto;\n        width: 50%;\n    }\n\n    .col-xxl-7 {\n        flex: 0 0 auto;\n        width: 58.33333333%;\n    }\n\n    .col-xxl-8 {\n        flex: 0 0 auto;\n        width: 66.66666667%;\n    }\n\n    .col-xxl-9 {\n        flex: 0 0 auto;\n        width: 75%;\n    }\n\n    .col-xxl-10 {\n        flex: 0 0 auto;\n        width: 83.33333333%;\n    }\n\n    .col-xxl-11 {\n        flex: 0 0 auto;\n        width: 91.66666667%;\n    }\n\n    .col-xxl-12 {\n        flex: 0 0 auto;\n        width: 100%;\n    }\n\n    .offset-xxl-0 {\n        margin-right: 0;\n    }\n\n    .offset-xxl-1 {\n        margin-right: 8.33333333%;\n    }\n\n    .offset-xxl-2 {\n        margin-right: 16.66666667%;\n    }\n\n    .offset-xxl-3 {\n        margin-right: 25%;\n    }\n\n    .offset-xxl-4 {\n        margin-right: 33.33333333%;\n    }\n\n    .offset-xxl-5 {\n        margin-right: 41.66666667%;\n    }\n\n    .offset-xxl-6 {\n        margin-right: 50%;\n    }\n\n    .offset-xxl-7 {\n        margin-right: 58.33333333%;\n    }\n\n    .offset-xxl-8 {\n        margin-right: 66.66666667%;\n    }\n\n    .offset-xxl-9 {\n        margin-right: 75%;\n    }\n\n    .offset-xxl-10 {\n        margin-right: 83.33333333%;\n    }\n\n    .offset-xxl-11 {\n        margin-right: 91.66666667%;\n    }\n\n    .g-xxl-0,\n    .gx-xxl-0 {\n        --bs-gutter-x: 0;\n    }\n\n    .g-xxl-0,\n    .gy-xxl-0 {\n        --bs-gutter-y: 0;\n    }\n\n    .g-xxl-1,\n    .gx-xxl-1 {\n        --bs-gutter-x: 0.25rem;\n    }\n\n    .g-xxl-1,\n    .gy-xxl-1 {\n        --bs-gutter-y: 0.25rem;\n    }\n\n    .g-xxl-2,\n    .gx-xxl-2 {\n        --bs-gutter-x: 0.5rem;\n    }\n\n    .g-xxl-2,\n    .gy-xxl-2 {\n        --bs-gutter-y: 0.5rem;\n    }\n\n    .g-xxl-3,\n    .gx-xxl-3 {\n        --bs-gutter-x: 1rem;\n    }\n\n    .g-xxl-3,\n    .gy-xxl-3 {\n        --bs-gutter-y: 1rem;\n    }\n\n    .g-xxl-4,\n    .gx-xxl-4 {\n        --bs-gutter-x: 1.5rem;\n    }\n\n    .g-xxl-4,\n    .gy-xxl-4 {\n        --bs-gutter-y: 1.5rem;\n    }\n\n    .g-xxl-5,\n    .gx-xxl-5 {\n        --bs-gutter-x: 3rem;\n    }\n\n    .g-xxl-5,\n    .gy-xxl-5 {\n        --bs-gutter-y: 3rem;\n    }\n}\n\n.table {\n    --bs-table-color: var(--bs-body-color);\n    --bs-table-bg: transparent;\n    --bs-table-border-color: var(--bs-border-color);\n    --bs-table-accent-bg: transparent;\n    --bs-table-striped-color: var(--bs-body-color);\n    --bs-table-striped-bg: rgba(0, 0, 0, 0.05);\n    --bs-table-active-color: var(--bs-body-color);\n    --bs-table-active-bg: rgba(0, 0, 0, 0.1);\n    --bs-table-hover-color: var(--bs-body-color);\n    --bs-table-hover-bg: rgba(0, 0, 0, 0.075);\n    width: 100%;\n    margin-bottom: 1rem;\n    color: var(--bs-table-color);\n    vertical-align: top;\n    border-color: var(--bs-table-border-color);\n}\n\n.table > :not(caption) > * > * {\n    padding: 0.5rem 0.5rem;\n    background-color: var(--bs-table-bg);\n    border-bottom-width: 1px;\n    box-shadow: inset 0 0 0 9999px var(--bs-table-accent-bg);\n}\n\n.table > tbody {\n    vertical-align: inherit;\n}\n\n.table > thead {\n    vertical-align: bottom;\n}\n\n.table-group-divider {\n    border-top: 2px solid currentcolor;\n}\n\n.caption-top {\n    caption-side: top;\n}\n\n.table-sm > :not(caption) > * > * {\n    padding: 0.25rem 0.25rem;\n}\n\n.table-bordered > :not(caption) > * {\n    border-width: 1px 0;\n}\n\n.table-bordered > :not(caption) > * > * {\n    border-width: 0 1px;\n}\n\n.table-borderless > :not(caption) > * > * {\n    border-bottom-width: 0;\n}\n\n.table-borderless > :not(:first-child) {\n    border-top-width: 0;\n}\n\n.table-striped > tbody > tr:nth-of-type(odd) > * {\n    --bs-table-accent-bg: var(--bs-table-striped-bg);\n    color: var(--bs-table-striped-color);\n}\n\n.table-striped-columns > :not(caption) > tr > :nth-child(even) {\n    --bs-table-accent-bg: var(--bs-table-striped-bg);\n    color: var(--bs-table-striped-color);\n}\n\n.table-active {\n    --bs-table-accent-bg: var(--bs-table-active-bg);\n    color: var(--bs-table-active-color);\n}\n\n.table-hover > tbody > tr:hover > * {\n    --bs-table-accent-bg: var(--bs-table-hover-bg);\n    color: var(--bs-table-hover-color);\n}\n\n.table-primary {\n    --bs-table-color: #000;\n    --bs-table-bg: #cfe2ff;\n    --bs-table-border-color: #bacbe6;\n    --bs-table-striped-bg: #c5d7f2;\n    --bs-table-striped-color: #000;\n    --bs-table-active-bg: #bacbe6;\n    --bs-table-active-color: #000;\n    --bs-table-hover-bg: #bfd1ec;\n    --bs-table-hover-color: #000;\n    color: var(--bs-table-color);\n    border-color: var(--bs-table-border-color);\n}\n\n.table-secondary {\n    --bs-table-color: #000;\n    --bs-table-bg: #e2e3e5;\n    --bs-table-border-color: #cbccce;\n    --bs-table-striped-bg: #d7d8da;\n    --bs-table-striped-color: #000;\n    --bs-table-active-bg: #cbccce;\n    --bs-table-active-color: #000;\n    --bs-table-hover-bg: #d1d2d4;\n    --bs-table-hover-color: #000;\n    color: var(--bs-table-color);\n    border-color: var(--bs-table-border-color);\n}\n\n.table-success {\n    --bs-table-color: #000;\n    --bs-table-bg: #d1e7dd;\n    --bs-table-border-color: #bcd0c7;\n    --bs-table-striped-bg: #c7dbd2;\n    --bs-table-striped-color: #000;\n    --bs-table-active-bg: #bcd0c7;\n    --bs-table-active-color: #000;\n    --bs-table-hover-bg: #c1d6cc;\n    --bs-table-hover-color: #000;\n    color: var(--bs-table-color);\n    border-color: var(--bs-table-border-color);\n}\n\n.table-info {\n    --bs-table-color: #000;\n    --bs-table-bg: #cff4fc;\n    --bs-table-border-color: #badce3;\n    --bs-table-striped-bg: #c5e8ef;\n    --bs-table-striped-color: #000;\n    --bs-table-active-bg: #badce3;\n    --bs-table-active-color: #000;\n    --bs-table-hover-bg: #bfe2e9;\n    --bs-table-hover-color: #000;\n    color: var(--bs-table-color);\n    border-color: var(--bs-table-border-color);\n}\n\n.table-warning {\n    --bs-table-color: #000;\n    --bs-table-bg: #fff3cd;\n    --bs-table-border-color: #e6dbb9;\n    --bs-table-striped-bg: #f2e7c3;\n    --bs-table-striped-color: #000;\n    --bs-table-active-bg: #e6dbb9;\n    --bs-table-active-color: #000;\n    --bs-table-hover-bg: #ece1be;\n    --bs-table-hover-color: #000;\n    color: var(--bs-table-color);\n    border-color: var(--bs-table-border-color);\n}\n\n.table-danger {\n    --bs-table-color: #000;\n    --bs-table-bg: #f8d7da;\n    --bs-table-border-color: #dfc2c4;\n    --bs-table-striped-bg: #eccccf;\n    --bs-table-striped-color: #000;\n    --bs-table-active-bg: #dfc2c4;\n    --bs-table-active-color: #000;\n    --bs-table-hover-bg: #e5c7ca;\n    --bs-table-hover-color: #000;\n    color: var(--bs-table-color);\n    border-color: var(--bs-table-border-color);\n}\n\n.table-light {\n    --bs-table-color: #000;\n    --bs-table-bg: #f8f9fa;\n    --bs-table-border-color: #dfe0e1;\n    --bs-table-striped-bg: #ecedee;\n    --bs-table-striped-color: #000;\n    --bs-table-active-bg: #dfe0e1;\n    --bs-table-active-color: #000;\n    --bs-table-hover-bg: #e5e6e7;\n    --bs-table-hover-color: #000;\n    color: var(--bs-table-color);\n    border-color: var(--bs-table-border-color);\n}\n\n.table-dark {\n    --bs-table-color: #fff;\n    --bs-table-bg: #212529;\n    --bs-table-border-color: #373b3e;\n    --bs-table-striped-bg: #2c3034;\n    --bs-table-striped-color: #fff;\n    --bs-table-active-bg: #373b3e;\n    --bs-table-active-color: #fff;\n    --bs-table-hover-bg: #323539;\n    --bs-table-hover-color: #fff;\n    color: var(--bs-table-color);\n    border-color: var(--bs-table-border-color);\n}\n\n.table-responsive {\n    overflow-x: auto;\n    -webkit-overflow-scrolling: touch;\n}\n\n@media (max-width: 575.98px) {\n    .table-responsive-sm {\n        overflow-x: auto;\n        -webkit-overflow-scrolling: touch;\n    }\n}\n\n@media (max-width: 767.98px) {\n    .table-responsive-md {\n        overflow-x: auto;\n        -webkit-overflow-scrolling: touch;\n    }\n}\n\n@media (max-width: 991.98px) {\n    .table-responsive-lg {\n        overflow-x: auto;\n        -webkit-overflow-scrolling: touch;\n    }\n}\n\n@media (max-width: 1199.98px) {\n    .table-responsive-xl {\n        overflow-x: auto;\n        -webkit-overflow-scrolling: touch;\n    }\n}\n\n@media (max-width: 1399.98px) {\n    .table-responsive-xxl {\n        overflow-x: auto;\n        -webkit-overflow-scrolling: touch;\n    }\n}\n\n.form-label {\n    margin-bottom: 0.5rem;\n}\n\n.col-form-label {\n    padding-top: calc(0.375rem + 1px);\n    padding-bottom: calc(0.375rem + 1px);\n    margin-bottom: 0;\n    font-size: inherit;\n    line-height: 1.5;\n}\n\n.col-form-label-lg {\n    padding-top: calc(0.5rem + 1px);\n    padding-bottom: calc(0.5rem + 1px);\n    font-size: 1.25rem;\n}\n\n.col-form-label-sm {\n    padding-top: calc(0.25rem + 1px);\n    padding-bottom: calc(0.25rem + 1px);\n    font-size: 0.875rem;\n}\n\n.form-text {\n    margin-top: 0.25rem;\n    font-size: 0.875em;\n    color: #6c757d;\n}\n\n.form-control {\n    display: block;\n    width: 100%;\n    padding: 0.375rem 0.75rem;\n    font-size: 1rem;\n    font-weight: 400;\n    line-height: 1.5;\n    color: #212529;\n    background-color: #fff;\n    background-clip: padding-box;\n    border: 1px solid #ced4da;\n    -webkit-appearance: none;\n    -moz-appearance: none;\n    appearance: none;\n    border-radius: 0.375rem;\n    transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n    .form-control {\n        transition: none;\n    }\n}\n\n.form-control[type=file] {\n    overflow: hidden;\n}\n\n.form-control[type=file]:not(:disabled):not([readonly]) {\n    cursor: pointer;\n}\n\n.form-control:focus {\n    color: #212529;\n    background-color: #fff;\n    border-color: #86b7fe;\n    outline: 0;\n    box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n}\n\n.form-control::-webkit-date-and-time-value {\n    height: 1.5em;\n}\n\n.form-control::-moz-placeholder {\n    color: #6c757d;\n    opacity: 1;\n}\n\n.form-control::placeholder {\n    color: #6c757d;\n    opacity: 1;\n}\n\n.form-control:disabled {\n    background-color: #e9ecef;\n    opacity: 1;\n}\n\n.form-control::-webkit-file-upload-button {\n    padding: 0.375rem 0.75rem;\n    margin: -0.375rem -0.75rem;\n    -webkit-margin-end: 0.75rem;\n    margin-inline-end: 0.75rem;\n    color: #212529;\n    background-color: #e9ecef;\n    pointer-events: none;\n    border-color: inherit;\n    border-style: solid;\n    border-width: 0;\n    border-inline-end-width: 1px;\n    border-radius: 0;\n    -webkit-transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n    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;\n}\n\n.form-control::file-selector-button {\n    padding: 0.375rem 0.75rem;\n    margin: -0.375rem -0.75rem;\n    -webkit-margin-end: 0.75rem;\n    margin-inline-end: 0.75rem;\n    color: #212529;\n    background-color: #e9ecef;\n    pointer-events: none;\n    border-color: inherit;\n    border-style: solid;\n    border-width: 0;\n    border-inline-end-width: 1px;\n    border-radius: 0;\n    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;\n}\n\n@media (prefers-reduced-motion: reduce) {\n    .form-control::-webkit-file-upload-button {\n        -webkit-transition: none;\n        transition: none;\n    }\n\n    .form-control::file-selector-button {\n        transition: none;\n    }\n}\n\n.form-control:hover:not(:disabled):not([readonly])::-webkit-file-upload-button {\n    background-color: #dde0e3;\n}\n\n.form-control:hover:not(:disabled):not([readonly])::file-selector-button {\n    background-color: #dde0e3;\n}\n\n.form-control-plaintext {\n    display: block;\n    width: 100%;\n    padding: 0.375rem 0;\n    margin-bottom: 0;\n    line-height: 1.5;\n    color: #212529;\n    background-color: transparent;\n    border: solid transparent;\n    border-width: 1px 0;\n}\n\n.form-control-plaintext:focus {\n    outline: 0;\n}\n\n.form-control-plaintext.form-control-sm, .form-control-plaintext.form-control-lg {\n    padding-left: 0;\n    padding-right: 0;\n}\n\n.form-control-sm {\n    min-height: calc(1.5em + 0.5rem + 2px);\n    padding: 0.25rem 0.5rem;\n    font-size: 0.875rem;\n    border-radius: 0.25rem;\n}\n\n.form-control-sm::-webkit-file-upload-button {\n    padding: 0.25rem 0.5rem;\n    margin: -0.25rem -0.5rem;\n    -webkit-margin-end: 0.5rem;\n    margin-inline-end: 0.5rem;\n}\n\n.form-control-sm::file-selector-button {\n    padding: 0.25rem 0.5rem;\n    margin: -0.25rem -0.5rem;\n    -webkit-margin-end: 0.5rem;\n    margin-inline-end: 0.5rem;\n}\n\n.form-control-lg {\n    min-height: calc(1.5em + 1rem + 2px);\n    padding: 0.5rem 1rem;\n    font-size: 1.25rem;\n    border-radius: 0.5rem;\n}\n\n.form-control-lg::-webkit-file-upload-button {\n    padding: 0.5rem 1rem;\n    margin: -0.5rem -1rem;\n    -webkit-margin-end: 1rem;\n    margin-inline-end: 1rem;\n}\n\n.form-control-lg::file-selector-button {\n    padding: 0.5rem 1rem;\n    margin: -0.5rem -1rem;\n    -webkit-margin-end: 1rem;\n    margin-inline-end: 1rem;\n}\n\ntextarea.form-control {\n    min-height: calc(1.5em + 0.75rem + 2px);\n}\n\ntextarea.form-control-sm {\n    min-height: calc(1.5em + 0.5rem + 2px);\n}\n\ntextarea.form-control-lg {\n    min-height: calc(1.5em + 1rem + 2px);\n}\n\n.form-control-color {\n    width: 3rem;\n    height: calc(1.5em + 0.75rem + 2px);\n    padding: 0.375rem;\n}\n\n.form-control-color:not(:disabled):not([readonly]) {\n    cursor: pointer;\n}\n\n.form-control-color::-moz-color-swatch {\n    border: 0 !important;\n    border-radius: 0.375rem;\n}\n\n.form-control-color::-webkit-color-swatch {\n    border-radius: 0.375rem;\n}\n\n.form-control-color.form-control-sm {\n    height: calc(1.5em + 0.5rem + 2px);\n}\n\n.form-control-color.form-control-lg {\n    height: calc(1.5em + 1rem + 2px);\n}\n\n.form-select {\n    display: block;\n    width: 100%;\n    padding: 0.375rem 0.75rem 0.375rem 2.25rem;\n    -moz-padding-start: calc(0.75rem - 3px);\n    font-size: 1rem;\n    font-weight: 400;\n    line-height: 1.5;\n    color: #212529;\n    background-color: #fff;\n    background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e\");\n    background-repeat: no-repeat;\n    background-position: left 0.75rem center;\n    background-size: 16px 12px;\n    border: 1px solid #ced4da;\n    border-radius: 0.375rem;\n    transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n    -webkit-appearance: none;\n    -moz-appearance: none;\n    appearance: none;\n}\n\n@media (prefers-reduced-motion: reduce) {\n    .form-select {\n        transition: none;\n    }\n}\n\n.form-select:focus {\n    border-color: #86b7fe;\n    outline: 0;\n    box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n}\n\n.form-select[multiple], .form-select[size]:not([size=\"1\"]) {\n    padding-left: 0.75rem;\n    background-image: none;\n}\n\n.form-select:disabled {\n    background-color: #e9ecef;\n}\n\n.form-select:-moz-focusring {\n    color: transparent;\n    text-shadow: 0 0 0 #212529;\n}\n\n.form-select-sm {\n    padding-top: 0.25rem;\n    padding-bottom: 0.25rem;\n    padding-right: 0.5rem;\n    font-size: 0.875rem;\n    border-radius: 0.25rem;\n}\n\n.form-select-lg {\n    padding-top: 0.5rem;\n    padding-bottom: 0.5rem;\n    padding-right: 1rem;\n    font-size: 1.25rem;\n    border-radius: 0.5rem;\n}\n\n.form-check {\n    display: block;\n    min-height: 1.5rem;\n    padding-right: 1.5em;\n    margin-bottom: 0.125rem;\n}\n\n.form-check .form-check-input {\n    float: right;\n    margin-right: -1.5em;\n}\n\n.form-check-reverse {\n    padding-left: 1.5em;\n    padding-right: 0;\n    text-align: left;\n}\n\n.form-check-reverse .form-check-input {\n    float: left;\n    margin-left: -1.5em;\n    margin-right: 0;\n}\n\n.form-check-input {\n    width: 1em;\n    height: 1em;\n    margin-top: 0.25em;\n    vertical-align: top;\n    background-color: #fff;\n    background-repeat: no-repeat;\n    background-position: center;\n    background-size: contain;\n    border: 1px solid rgba(0, 0, 0, 0.25);\n    -webkit-appearance: none;\n    -moz-appearance: none;\n    appearance: none;\n    -webkit-print-color-adjust: exact;\n    color-adjust: exact;\n    print-color-adjust: exact;\n}\n\n.form-check-input[type=checkbox] {\n    border-radius: 0.25em;\n}\n\n.form-check-input[type=radio] {\n    border-radius: 50%;\n}\n\n.form-check-input:active {\n    filter: brightness(90%);\n}\n\n.form-check-input:focus {\n    border-color: #86b7fe;\n    outline: 0;\n    box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n}\n\n.form-check-input:checked {\n    background-color: #0d6efd;\n    border-color: #0d6efd;\n}\n\n.form-check-input:checked[type=checkbox] {\n    background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='m6 10 3 3 6-6'/%3e%3c/svg%3e\");\n}\n\n.form-check-input:checked[type=radio] {\n    background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='2' fill='%23fff'/%3e%3c/svg%3e\");\n}\n\n.form-check-input[type=checkbox]:indeterminate {\n    background-color: #0d6efd;\n    border-color: #0d6efd;\n    background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/%3e%3c/svg%3e\");\n}\n\n.form-check-input:disabled {\n    pointer-events: none;\n    filter: none;\n    opacity: 0.5;\n}\n\n.form-check-input[disabled] ~ .form-check-label, .form-check-input:disabled ~ .form-check-label {\n    cursor: default;\n    opacity: 0.5;\n}\n\n.form-switch {\n    padding-right: 2.5em;\n}\n\n.form-switch .form-check-input {\n    width: 2em;\n    margin-right: -2.5em;\n    background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%280, 0, 0, 0.25%29'/%3e%3c/svg%3e\");\n    background-position: right center;\n    border-radius: 2em;\n    transition: background-position 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n    .form-switch .form-check-input {\n        transition: none;\n    }\n}\n\n.form-switch .form-check-input:focus {\n    background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%2386b7fe'/%3e%3c/svg%3e\");\n}\n\n.form-switch .form-check-input:checked {\n    background-position: left center;\n    background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e\");\n}\n\n.form-switch.form-check-reverse {\n    padding-left: 2.5em;\n    padding-right: 0;\n}\n\n.form-switch.form-check-reverse .form-check-input {\n    margin-left: -2.5em;\n    margin-right: 0;\n}\n\n.form-check-inline {\n    display: inline-block;\n    margin-left: 1rem;\n}\n\n.btn-check {\n    position: absolute;\n    clip: rect(0, 0, 0, 0);\n    pointer-events: none;\n}\n\n.btn-check[disabled] + .btn, .btn-check:disabled + .btn {\n    pointer-events: none;\n    filter: none;\n    opacity: 0.65;\n}\n\n.form-range {\n    width: 100%;\n    height: 1.5rem;\n    padding: 0;\n    background-color: transparent;\n    -webkit-appearance: none;\n    -moz-appearance: none;\n    appearance: none;\n}\n\n.form-range:focus {\n    outline: 0;\n}\n\n.form-range:focus::-webkit-slider-thumb {\n    box-shadow: 0 0 0 1px #fff, 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n}\n\n.form-range:focus::-moz-range-thumb {\n    box-shadow: 0 0 0 1px #fff, 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n}\n\n.form-range::-moz-focus-outer {\n    border: 0;\n}\n\n.form-range::-webkit-slider-thumb {\n    width: 1rem;\n    height: 1rem;\n    margin-top: -0.25rem;\n    background-color: #0d6efd;\n    border: 0;\n    border-radius: 1rem;\n    -webkit-transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n    transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n    -webkit-appearance: none;\n    appearance: none;\n}\n\n@media (prefers-reduced-motion: reduce) {\n    .form-range::-webkit-slider-thumb {\n        -webkit-transition: none;\n        transition: none;\n    }\n}\n\n.form-range::-webkit-slider-thumb:active {\n    background-color: #b6d4fe;\n}\n\n.form-range::-webkit-slider-runnable-track {\n    width: 100%;\n    height: 0.5rem;\n    color: transparent;\n    cursor: pointer;\n    background-color: #dee2e6;\n    border-color: transparent;\n    border-radius: 1rem;\n}\n\n.form-range::-moz-range-thumb {\n    width: 1rem;\n    height: 1rem;\n    background-color: #0d6efd;\n    border: 0;\n    border-radius: 1rem;\n    -moz-transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n    transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n    -moz-appearance: none;\n    appearance: none;\n}\n\n@media (prefers-reduced-motion: reduce) {\n    .form-range::-moz-range-thumb {\n        -moz-transition: none;\n        transition: none;\n    }\n}\n\n.form-range::-moz-range-thumb:active {\n    background-color: #b6d4fe;\n}\n\n.form-range::-moz-range-track {\n    width: 100%;\n    height: 0.5rem;\n    color: transparent;\n    cursor: pointer;\n    background-color: #dee2e6;\n    border-color: transparent;\n    border-radius: 1rem;\n}\n\n.form-range:disabled {\n    pointer-events: none;\n}\n\n.form-range:disabled::-webkit-slider-thumb {\n    background-color: #adb5bd;\n}\n\n.form-range:disabled::-moz-range-thumb {\n    background-color: #adb5bd;\n}\n\n.form-floating {\n    position: relative;\n}\n\n.form-floating > .form-control,\n.form-floating > .form-control-plaintext,\n.form-floating > .form-select {\n    height: calc(3.5rem + 2px);\n    line-height: 1.25;\n}\n\n.form-floating > label {\n    position: absolute;\n    top: 0;\n    right: 0;\n    width: 100%;\n    height: 100%;\n    padding: 1rem 0.75rem;\n    overflow: hidden;\n    text-align: start;\n    text-overflow: ellipsis;\n    white-space: nowrap;\n    pointer-events: none;\n    border: 1px solid transparent;\n    transform-origin: 100% 0;\n    transition: opacity 0.1s ease-in-out, transform 0.1s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n    .form-floating > label {\n        transition: none;\n    }\n}\n\n.form-floating > .form-control,\n.form-floating > .form-control-plaintext {\n    padding: 1rem 0.75rem;\n}\n\n.form-floating > .form-control::-moz-placeholder, .form-floating > .form-control-plaintext::-moz-placeholder {\n    color: transparent;\n}\n\n.form-floating > .form-control::placeholder,\n.form-floating > .form-control-plaintext::placeholder {\n    color: transparent;\n}\n\n.form-floating > .form-control:not(:-moz-placeholder-shown), .form-floating > .form-control-plaintext:not(:-moz-placeholder-shown) {\n    padding-top: 1.625rem;\n    padding-bottom: 0.625rem;\n}\n\n.form-floating > .form-control:focus, .form-floating > .form-control:not(:placeholder-shown),\n.form-floating > .form-control-plaintext:focus,\n.form-floating > .form-control-plaintext:not(:placeholder-shown) {\n    padding-top: 1.625rem;\n    padding-bottom: 0.625rem;\n}\n\n.form-floating > .form-control:-webkit-autofill,\n.form-floating > .form-control-plaintext:-webkit-autofill {\n    padding-top: 1.625rem;\n    padding-bottom: 0.625rem;\n}\n\n.form-floating > .form-select {\n    padding-top: 1.625rem;\n    padding-bottom: 0.625rem;\n}\n\n.form-floating > .form-control:not(:-moz-placeholder-shown) ~ label {\n    opacity: 0.65;\n    transform: scale(0.85) translateY(-0.5rem) translateX(-0.15rem);\n}\n\n.form-floating > .form-control:focus ~ label,\n.form-floating > .form-control:not(:placeholder-shown) ~ label,\n.form-floating > .form-control-plaintext ~ label,\n.form-floating > .form-select ~ label {\n    opacity: 0.65;\n    transform: scale(0.85) translateY(-0.5rem) translateX(-0.15rem);\n}\n\n.form-floating > .form-control:-webkit-autofill ~ label {\n    opacity: 0.65;\n    transform: scale(0.85) translateY(-0.5rem) translateX(-0.15rem);\n}\n\n.form-floating > .form-control-plaintext ~ label {\n    border-width: 1px 0;\n}\n\n.input-group {\n    position: relative;\n    display: flex;\n    flex-wrap: wrap;\n    align-items: stretch;\n    width: 100%;\n}\n\n.input-group > .form-control,\n.input-group > .form-select,\n.input-group > .form-floating {\n    position: relative;\n    flex: 1 1 auto;\n    width: 1%;\n    min-width: 0;\n}\n\n.input-group > .form-control:focus,\n.input-group > .form-select:focus,\n.input-group > .form-floating:focus-within {\n    z-index: 5;\n}\n\n.input-group .btn {\n    position: relative;\n    z-index: 2;\n}\n\n.input-group .btn:focus {\n    z-index: 5;\n}\n\n.input-group-text {\n    display: flex;\n    align-items: center;\n    padding: 0.375rem 0.75rem;\n    font-size: 1rem;\n    font-weight: 400;\n    line-height: 1.5;\n    color: #212529;\n    text-align: center;\n    white-space: nowrap;\n    background-color: #e9ecef;\n    border: 1px solid #ced4da;\n    border-radius: 0.375rem;\n}\n\n.input-group-lg > .form-control,\n.input-group-lg > .form-select,\n.input-group-lg > .input-group-text,\n.input-group-lg > .btn {\n    padding: 0.5rem 1rem;\n    font-size: 1.25rem;\n    border-radius: 0.5rem;\n}\n\n.input-group-sm > .form-control,\n.input-group-sm > .form-select,\n.input-group-sm > .input-group-text,\n.input-group-sm > .btn {\n    padding: 0.25rem 0.5rem;\n    font-size: 0.875rem;\n    border-radius: 0.25rem;\n}\n\n.input-group-lg > .form-select,\n.input-group-sm > .form-select {\n    padding-left: 3rem;\n}\n\n.input-group:not(.has-validation) > :not(:last-child):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating),\n.input-group:not(.has-validation) > .dropdown-toggle:nth-last-child(n+3),\n.input-group:not(.has-validation) > .form-floating:not(:last-child) > .form-control,\n.input-group:not(.has-validation) > .form-floating:not(:last-child) > .form-select {\n    border-top-left-radius: 0;\n    border-bottom-left-radius: 0;\n}\n\n.input-group.has-validation > :nth-last-child(n+3):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating),\n.input-group.has-validation > .dropdown-toggle:nth-last-child(n+4),\n.input-group.has-validation > .form-floating:nth-last-child(n+3) > .form-control,\n.input-group.has-validation > .form-floating:nth-last-child(n+3) > .form-select {\n    border-top-left-radius: 0;\n    border-bottom-left-radius: 0;\n}\n\n.input-group > :not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback) {\n    margin-right: -1px;\n    border-top-right-radius: 0;\n    border-bottom-right-radius: 0;\n}\n\n.input-group > .form-floating:not(:first-child) > .form-control,\n.input-group > .form-floating:not(:first-child) > .form-select {\n    border-top-right-radius: 0;\n    border-bottom-right-radius: 0;\n}\n\n.valid-feedback {\n    display: none;\n    width: 100%;\n    margin-top: 0.25rem;\n    font-size: 0.875em;\n    color: #198754;\n}\n\n.valid-tooltip {\n    position: absolute;\n    top: 100%;\n    z-index: 5;\n    display: none;\n    max-width: 100%;\n    padding: 0.25rem 0.5rem;\n    margin-top: 0.1rem;\n    font-size: 0.875rem;\n    color: #fff;\n    background-color: rgba(25, 135, 84, 0.9);\n    border-radius: 0.375rem;\n}\n\n.was-validated :valid ~ .valid-feedback,\n.was-validated :valid ~ .valid-tooltip,\n.is-valid ~ .valid-feedback,\n.is-valid ~ .valid-tooltip {\n    display: block;\n}\n\n.was-validated .form-control:valid, .form-control.is-valid {\n    border-color: #198754;\n    padding-left: calc(1.5em + 0.75rem);\n    background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e\");\n    background-repeat: no-repeat;\n    background-position: left calc(0.375em + 0.1875rem) center;\n    background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n\n.was-validated .form-control:valid:focus, .form-control.is-valid:focus {\n    border-color: #198754;\n    box-shadow: 0 0 0 0.25rem rgba(25, 135, 84, 0.25);\n}\n\n.was-validated textarea.form-control:valid, textarea.form-control.is-valid {\n    padding-left: calc(1.5em + 0.75rem);\n    background-position: top calc(0.375em + 0.1875rem) left calc(0.375em + 0.1875rem);\n}\n\n.was-validated .form-select:valid, .form-select.is-valid {\n    border-color: #198754;\n}\n\n.was-validated .form-select:valid:not([multiple]):not([size]), .was-validated .form-select:valid:not([multiple])[size=\"1\"], .form-select.is-valid:not([multiple]):not([size]), .form-select.is-valid:not([multiple])[size=\"1\"] {\n    padding-left: 4.125rem;\n    background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e\"), url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e\");\n    background-position: left 0.75rem center, center left 2.25rem;\n    background-size: 16px 12px, calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n\n.was-validated .form-select:valid:focus, .form-select.is-valid:focus {\n    border-color: #198754;\n    box-shadow: 0 0 0 0.25rem rgba(25, 135, 84, 0.25);\n}\n\n.was-validated .form-control-color:valid, .form-control-color.is-valid {\n    width: calc(3rem + calc(1.5em + 0.75rem));\n}\n\n.was-validated .form-check-input:valid, .form-check-input.is-valid {\n    border-color: #198754;\n}\n\n.was-validated .form-check-input:valid:checked, .form-check-input.is-valid:checked {\n    background-color: #198754;\n}\n\n.was-validated .form-check-input:valid:focus, .form-check-input.is-valid:focus {\n    box-shadow: 0 0 0 0.25rem rgba(25, 135, 84, 0.25);\n}\n\n.was-validated .form-check-input:valid ~ .form-check-label, .form-check-input.is-valid ~ .form-check-label {\n    color: #198754;\n}\n\n.form-check-inline .form-check-input ~ .valid-feedback {\n    margin-right: 0.5em;\n}\n\n.was-validated .input-group > .form-control:not(:focus):valid, .input-group > .form-control:not(:focus).is-valid,\n.was-validated .input-group > .form-select:not(:focus):valid,\n.input-group > .form-select:not(:focus).is-valid,\n.was-validated .input-group > .form-floating:not(:focus-within):valid,\n.input-group > .form-floating:not(:focus-within).is-valid {\n    z-index: 3;\n}\n\n.invalid-feedback {\n    display: none;\n    width: 100%;\n    margin-top: 0.25rem;\n    font-size: 0.875em;\n    color: #dc3545;\n}\n\n.invalid-tooltip {\n    position: absolute;\n    top: 100%;\n    z-index: 5;\n    display: none;\n    max-width: 100%;\n    padding: 0.25rem 0.5rem;\n    margin-top: 0.1rem;\n    font-size: 0.875rem;\n    color: #fff;\n    background-color: rgba(220, 53, 69, 0.9);\n    border-radius: 0.375rem;\n}\n\n.was-validated :invalid ~ .invalid-feedback,\n.was-validated :invalid ~ .invalid-tooltip,\n.is-invalid ~ .invalid-feedback,\n.is-invalid ~ .invalid-tooltip {\n    display: block;\n}\n\n.was-validated .form-control:invalid, .form-control.is-invalid {\n    border-color: #dc3545;\n    padding-left: calc(1.5em + 0.75rem);\n    background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e\");\n    background-repeat: no-repeat;\n    background-position: left calc(0.375em + 0.1875rem) center;\n    background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n\n.was-validated .form-control:invalid:focus, .form-control.is-invalid:focus {\n    border-color: #dc3545;\n    box-shadow: 0 0 0 0.25rem rgba(220, 53, 69, 0.25);\n}\n\n.was-validated textarea.form-control:invalid, textarea.form-control.is-invalid {\n    padding-left: calc(1.5em + 0.75rem);\n    background-position: top calc(0.375em + 0.1875rem) left calc(0.375em + 0.1875rem);\n}\n\n.was-validated .form-select:invalid, .form-select.is-invalid {\n    border-color: #dc3545;\n}\n\n.was-validated .form-select:invalid:not([multiple]):not([size]), .was-validated .form-select:invalid:not([multiple])[size=\"1\"], .form-select.is-invalid:not([multiple]):not([size]), .form-select.is-invalid:not([multiple])[size=\"1\"] {\n    padding-left: 4.125rem;\n    background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e\"), url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e\");\n    background-position: left 0.75rem center, center left 2.25rem;\n    background-size: 16px 12px, calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n\n.was-validated .form-select:invalid:focus, .form-select.is-invalid:focus {\n    border-color: #dc3545;\n    box-shadow: 0 0 0 0.25rem rgba(220, 53, 69, 0.25);\n}\n\n.was-validated .form-control-color:invalid, .form-control-color.is-invalid {\n    width: calc(3rem + calc(1.5em + 0.75rem));\n}\n\n.was-validated .form-check-input:invalid, .form-check-input.is-invalid {\n    border-color: #dc3545;\n}\n\n.was-validated .form-check-input:invalid:checked, .form-check-input.is-invalid:checked {\n    background-color: #dc3545;\n}\n\n.was-validated .form-check-input:invalid:focus, .form-check-input.is-invalid:focus {\n    box-shadow: 0 0 0 0.25rem rgba(220, 53, 69, 0.25);\n}\n\n.was-validated .form-check-input:invalid ~ .form-check-label, .form-check-input.is-invalid ~ .form-check-label {\n    color: #dc3545;\n}\n\n.form-check-inline .form-check-input ~ .invalid-feedback {\n    margin-right: 0.5em;\n}\n\n.was-validated .input-group > .form-control:not(:focus):invalid, .input-group > .form-control:not(:focus).is-invalid,\n.was-validated .input-group > .form-select:not(:focus):invalid,\n.input-group > .form-select:not(:focus).is-invalid,\n.was-validated .input-group > .form-floating:not(:focus-within):invalid,\n.input-group > .form-floating:not(:focus-within).is-invalid {\n    z-index: 4;\n}\n\n.btn {\n    --bs-btn-padding-x: 0.75rem;\n    --bs-btn-padding-y: 0.375rem;\n    --bs-btn-font-family: ;\n    --bs-btn-font-size: 1rem;\n    --bs-btn-font-weight: 400;\n    --bs-btn-line-height: 1.5;\n    --bs-btn-color: #212529;\n    --bs-btn-bg: transparent;\n    --bs-btn-border-width: 1px;\n    --bs-btn-border-color: transparent;\n    --bs-btn-border-radius: 0.375rem;\n    --bs-btn-hover-border-color: transparent;\n    --bs-btn-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075);\n    --bs-btn-disabled-opacity: 0.65;\n    --bs-btn-focus-box-shadow: 0 0 0 0.25rem rgba(var(--bs-btn-focus-shadow-rgb), .5);\n    display: inline-block;\n    padding: var(--bs-btn-padding-y) var(--bs-btn-padding-x);\n    font-family: var(--bs-btn-font-family);\n    font-size: var(--bs-btn-font-size);\n    font-weight: var(--bs-btn-font-weight);\n    line-height: var(--bs-btn-line-height);\n    color: var(--bs-btn-color);\n    text-align: center;\n    text-decoration: none;\n    vertical-align: middle;\n    cursor: pointer;\n    -webkit-user-select: none;\n    -moz-user-select: none;\n    user-select: none;\n    border: var(--bs-btn-border-width) solid var(--bs-btn-border-color);\n    border-radius: var(--bs-btn-border-radius);\n    background-color: var(--bs-btn-bg);\n    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;\n}\n\n@media (prefers-reduced-motion: reduce) {\n    .btn {\n        transition: none;\n    }\n}\n\n.btn:hover {\n    color: var(--bs-btn-hover-color);\n    background-color: var(--bs-btn-hover-bg);\n    border-color: var(--bs-btn-hover-border-color);\n}\n\n.btn-check + .btn:hover {\n    color: var(--bs-btn-color);\n    background-color: var(--bs-btn-bg);\n    border-color: var(--bs-btn-border-color);\n}\n\n.btn:focus-visible {\n    color: var(--bs-btn-hover-color);\n    background-color: var(--bs-btn-hover-bg);\n    border-color: var(--bs-btn-hover-border-color);\n    outline: 0;\n    box-shadow: var(--bs-btn-focus-box-shadow);\n}\n\n.btn-check:focus-visible + .btn {\n    border-color: var(--bs-btn-hover-border-color);\n    outline: 0;\n    box-shadow: var(--bs-btn-focus-box-shadow);\n}\n\n.btn-check:checked + .btn, :not(.btn-check) + .btn:active, .btn:first-child:active, .btn.active, .btn.show {\n    color: var(--bs-btn-active-color);\n    background-color: var(--bs-btn-active-bg);\n    border-color: var(--bs-btn-active-border-color);\n}\n\n.btn-check:checked + .btn:focus-visible, :not(.btn-check) + .btn:active:focus-visible, .btn:first-child:active:focus-visible, .btn.active:focus-visible, .btn.show:focus-visible {\n    box-shadow: var(--bs-btn-focus-box-shadow);\n}\n\n.btn:disabled, .btn.disabled, fieldset:disabled .btn {\n    color: var(--bs-btn-disabled-color);\n    pointer-events: none;\n    background-color: var(--bs-btn-disabled-bg);\n    border-color: var(--bs-btn-disabled-border-color);\n    opacity: var(--bs-btn-disabled-opacity);\n}\n\n.btn-primary {\n    --bs-btn-color: #fff;\n    --bs-btn-bg: #0d6efd;\n    --bs-btn-border-color: #0d6efd;\n    --bs-btn-hover-color: #fff;\n    --bs-btn-hover-bg: #0b5ed7;\n    --bs-btn-hover-border-color: #0a58ca;\n    --bs-btn-focus-shadow-rgb: 49, 132, 253;\n    --bs-btn-active-color: #fff;\n    --bs-btn-active-bg: #0a58ca;\n    --bs-btn-active-border-color: #0a53be;\n    --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n    --bs-btn-disabled-color: #fff;\n    --bs-btn-disabled-bg: #0d6efd;\n    --bs-btn-disabled-border-color: #0d6efd;\n}\n\n.btn-secondary {\n    --bs-btn-color: #fff;\n    --bs-btn-bg: #6c757d;\n    --bs-btn-border-color: #6c757d;\n    --bs-btn-hover-color: #fff;\n    --bs-btn-hover-bg: #5c636a;\n    --bs-btn-hover-border-color: #565e64;\n    --bs-btn-focus-shadow-rgb: 130, 138, 145;\n    --bs-btn-active-color: #fff;\n    --bs-btn-active-bg: #565e64;\n    --bs-btn-active-border-color: #51585e;\n    --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n    --bs-btn-disabled-color: #fff;\n    --bs-btn-disabled-bg: #6c757d;\n    --bs-btn-disabled-border-color: #6c757d;\n}\n\n.btn-success {\n    --bs-btn-color: #fff;\n    --bs-btn-bg: #198754;\n    --bs-btn-border-color: #198754;\n    --bs-btn-hover-color: #fff;\n    --bs-btn-hover-bg: #157347;\n    --bs-btn-hover-border-color: #146c43;\n    --bs-btn-focus-shadow-rgb: 60, 153, 110;\n    --bs-btn-active-color: #fff;\n    --bs-btn-active-bg: #146c43;\n    --bs-btn-active-border-color: #13653f;\n    --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n    --bs-btn-disabled-color: #fff;\n    --bs-btn-disabled-bg: #198754;\n    --bs-btn-disabled-border-color: #198754;\n}\n\n.btn-info {\n    --bs-btn-color: #000;\n    --bs-btn-bg: #0dcaf0;\n    --bs-btn-border-color: #0dcaf0;\n    --bs-btn-hover-color: #000;\n    --bs-btn-hover-bg: #31d2f2;\n    --bs-btn-hover-border-color: #25cff2;\n    --bs-btn-focus-shadow-rgb: 11, 172, 204;\n    --bs-btn-active-color: #000;\n    --bs-btn-active-bg: #3dd5f3;\n    --bs-btn-active-border-color: #25cff2;\n    --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n    --bs-btn-disabled-color: #000;\n    --bs-btn-disabled-bg: #0dcaf0;\n    --bs-btn-disabled-border-color: #0dcaf0;\n}\n\n.btn-warning {\n    --bs-btn-color: #000;\n    --bs-btn-bg: #ffc107;\n    --bs-btn-border-color: #ffc107;\n    --bs-btn-hover-color: #000;\n    --bs-btn-hover-bg: #ffca2c;\n    --bs-btn-hover-border-color: #ffc720;\n    --bs-btn-focus-shadow-rgb: 217, 164, 6;\n    --bs-btn-active-color: #000;\n    --bs-btn-active-bg: #ffcd39;\n    --bs-btn-active-border-color: #ffc720;\n    --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n    --bs-btn-disabled-color: #000;\n    --bs-btn-disabled-bg: #ffc107;\n    --bs-btn-disabled-border-color: #ffc107;\n}\n\n.btn-danger {\n    --bs-btn-color: #fff;\n    --bs-btn-bg: #dc3545;\n    --bs-btn-border-color: #dc3545;\n    --bs-btn-hover-color: #fff;\n    --bs-btn-hover-bg: #bb2d3b;\n    --bs-btn-hover-border-color: #b02a37;\n    --bs-btn-focus-shadow-rgb: 225, 83, 97;\n    --bs-btn-active-color: #fff;\n    --bs-btn-active-bg: #b02a37;\n    --bs-btn-active-border-color: #a52834;\n    --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n    --bs-btn-disabled-color: #fff;\n    --bs-btn-disabled-bg: #dc3545;\n    --bs-btn-disabled-border-color: #dc3545;\n}\n\n.btn-light {\n    --bs-btn-color: #000;\n    --bs-btn-bg: #f8f9fa;\n    --bs-btn-border-color: #f8f9fa;\n    --bs-btn-hover-color: #000;\n    --bs-btn-hover-bg: #d3d4d5;\n    --bs-btn-hover-border-color: #c6c7c8;\n    --bs-btn-focus-shadow-rgb: 211, 212, 213;\n    --bs-btn-active-color: #000;\n    --bs-btn-active-bg: #c6c7c8;\n    --bs-btn-active-border-color: #babbbc;\n    --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n    --bs-btn-disabled-color: #000;\n    --bs-btn-disabled-bg: #f8f9fa;\n    --bs-btn-disabled-border-color: #f8f9fa;\n}\n\n.btn-dark {\n    --bs-btn-color: #fff;\n    --bs-btn-bg: #212529;\n    --bs-btn-border-color: #212529;\n    --bs-btn-hover-color: #fff;\n    --bs-btn-hover-bg: #424649;\n    --bs-btn-hover-border-color: #373b3e;\n    --bs-btn-focus-shadow-rgb: 66, 70, 73;\n    --bs-btn-active-color: #fff;\n    --bs-btn-active-bg: #4d5154;\n    --bs-btn-active-border-color: #373b3e;\n    --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n    --bs-btn-disabled-color: #fff;\n    --bs-btn-disabled-bg: #212529;\n    --bs-btn-disabled-border-color: #212529;\n}\n\n.btn-outline-primary {\n    --bs-btn-color: #0d6efd;\n    --bs-btn-border-color: #0d6efd;\n    --bs-btn-hover-color: #fff;\n    --bs-btn-hover-bg: #0d6efd;\n    --bs-btn-hover-border-color: #0d6efd;\n    --bs-btn-focus-shadow-rgb: 13, 110, 253;\n    --bs-btn-active-color: #fff;\n    --bs-btn-active-bg: #0d6efd;\n    --bs-btn-active-border-color: #0d6efd;\n    --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n    --bs-btn-disabled-color: #0d6efd;\n    --bs-btn-disabled-bg: transparent;\n    --bs-btn-disabled-border-color: #0d6efd;\n    --bs-gradient: none;\n}\n\n.btn-outline-secondary {\n    --bs-btn-color: #6c757d;\n    --bs-btn-border-color: #6c757d;\n    --bs-btn-hover-color: #fff;\n    --bs-btn-hover-bg: #6c757d;\n    --bs-btn-hover-border-color: #6c757d;\n    --bs-btn-focus-shadow-rgb: 108, 117, 125;\n    --bs-btn-active-color: #fff;\n    --bs-btn-active-bg: #6c757d;\n    --bs-btn-active-border-color: #6c757d;\n    --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n    --bs-btn-disabled-color: #6c757d;\n    --bs-btn-disabled-bg: transparent;\n    --bs-btn-disabled-border-color: #6c757d;\n    --bs-gradient: none;\n}\n\n.btn-outline-success {\n    --bs-btn-color: #198754;\n    --bs-btn-border-color: #198754;\n    --bs-btn-hover-color: #fff;\n    --bs-btn-hover-bg: #198754;\n    --bs-btn-hover-border-color: #198754;\n    --bs-btn-focus-shadow-rgb: 25, 135, 84;\n    --bs-btn-active-color: #fff;\n    --bs-btn-active-bg: #198754;\n    --bs-btn-active-border-color: #198754;\n    --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n    --bs-btn-disabled-color: #198754;\n    --bs-btn-disabled-bg: transparent;\n    --bs-btn-disabled-border-color: #198754;\n    --bs-gradient: none;\n}\n\n.btn-outline-info {\n    --bs-btn-color: #0dcaf0;\n    --bs-btn-border-color: #0dcaf0;\n    --bs-btn-hover-color: #000;\n    --bs-btn-hover-bg: #0dcaf0;\n    --bs-btn-hover-border-color: #0dcaf0;\n    --bs-btn-focus-shadow-rgb: 13, 202, 240;\n    --bs-btn-active-color: #000;\n    --bs-btn-active-bg: #0dcaf0;\n    --bs-btn-active-border-color: #0dcaf0;\n    --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n    --bs-btn-disabled-color: #0dcaf0;\n    --bs-btn-disabled-bg: transparent;\n    --bs-btn-disabled-border-color: #0dcaf0;\n    --bs-gradient: none;\n}\n\n.btn-outline-warning {\n    --bs-btn-color: #ffc107;\n    --bs-btn-border-color: #ffc107;\n    --bs-btn-hover-color: #000;\n    --bs-btn-hover-bg: #ffc107;\n    --bs-btn-hover-border-color: #ffc107;\n    --bs-btn-focus-shadow-rgb: 255, 193, 7;\n    --bs-btn-active-color: #000;\n    --bs-btn-active-bg: #ffc107;\n    --bs-btn-active-border-color: #ffc107;\n    --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n    --bs-btn-disabled-color: #ffc107;\n    --bs-btn-disabled-bg: transparent;\n    --bs-btn-disabled-border-color: #ffc107;\n    --bs-gradient: none;\n}\n\n.btn-outline-danger {\n    --bs-btn-color: #dc3545;\n    --bs-btn-border-color: #dc3545;\n    --bs-btn-hover-color: #fff;\n    --bs-btn-hover-bg: #dc3545;\n    --bs-btn-hover-border-color: #dc3545;\n    --bs-btn-focus-shadow-rgb: 220, 53, 69;\n    --bs-btn-active-color: #fff;\n    --bs-btn-active-bg: #dc3545;\n    --bs-btn-active-border-color: #dc3545;\n    --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n    --bs-btn-disabled-color: #dc3545;\n    --bs-btn-disabled-bg: transparent;\n    --bs-btn-disabled-border-color: #dc3545;\n    --bs-gradient: none;\n}\n\n.btn-outline-light {\n    --bs-btn-color: #f8f9fa;\n    --bs-btn-border-color: #f8f9fa;\n    --bs-btn-hover-color: #000;\n    --bs-btn-hover-bg: #f8f9fa;\n    --bs-btn-hover-border-color: #f8f9fa;\n    --bs-btn-focus-shadow-rgb: 248, 249, 250;\n    --bs-btn-active-color: #000;\n    --bs-btn-active-bg: #f8f9fa;\n    --bs-btn-active-border-color: #f8f9fa;\n    --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n    --bs-btn-disabled-color: #f8f9fa;\n    --bs-btn-disabled-bg: transparent;\n    --bs-btn-disabled-border-color: #f8f9fa;\n    --bs-gradient: none;\n}\n\n.btn-outline-dark {\n    --bs-btn-color: #212529;\n    --bs-btn-border-color: #212529;\n    --bs-btn-hover-color: #fff;\n    --bs-btn-hover-bg: #212529;\n    --bs-btn-hover-border-color: #212529;\n    --bs-btn-focus-shadow-rgb: 33, 37, 41;\n    --bs-btn-active-color: #fff;\n    --bs-btn-active-bg: #212529;\n    --bs-btn-active-border-color: #212529;\n    --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n    --bs-btn-disabled-color: #212529;\n    --bs-btn-disabled-bg: transparent;\n    --bs-btn-disabled-border-color: #212529;\n    --bs-gradient: none;\n}\n\n.btn-link {\n    --bs-btn-font-weight: 400;\n    --bs-btn-color: var(--bs-link-color);\n    --bs-btn-bg: transparent;\n    --bs-btn-border-color: transparent;\n    --bs-btn-hover-color: var(--bs-link-hover-color);\n    --bs-btn-hover-border-color: transparent;\n    --bs-btn-active-color: var(--bs-link-hover-color);\n    --bs-btn-active-border-color: transparent;\n    --bs-btn-disabled-color: #6c757d;\n    --bs-btn-disabled-border-color: transparent;\n    --bs-btn-box-shadow: none;\n    --bs-btn-focus-shadow-rgb: 49, 132, 253;\n    text-decoration: underline;\n}\n\n.btn-link:focus-visible {\n    color: var(--bs-btn-color);\n}\n\n.btn-link:hover {\n    color: var(--bs-btn-hover-color);\n}\n\n.btn-lg, .btn-group-lg > .btn {\n    --bs-btn-padding-y: 0.5rem;\n    --bs-btn-padding-x: 1rem;\n    --bs-btn-font-size: 1.25rem;\n    --bs-btn-border-radius: 0.5rem;\n}\n\n.btn-sm, .btn-group-sm > .btn {\n    --bs-btn-padding-y: 0.25rem;\n    --bs-btn-padding-x: 0.5rem;\n    --bs-btn-font-size: 0.875rem;\n    --bs-btn-border-radius: 0.25rem;\n}\n\n.fade {\n    transition: opacity 0.15s linear;\n}\n\n@media (prefers-reduced-motion: reduce) {\n    .fade {\n        transition: none;\n    }\n}\n\n.fade:not(.show) {\n    opacity: 0;\n}\n\n.collapse:not(.show) {\n    display: none;\n}\n\n.collapsing {\n    height: 0;\n    overflow: hidden;\n    transition: height 0.35s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n    .collapsing {\n        transition: none;\n    }\n}\n\n.collapsing.collapse-horizontal {\n    width: 0;\n    height: auto;\n    transition: width 0.35s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n    .collapsing.collapse-horizontal {\n        transition: none;\n    }\n}\n\n.dropup,\n.dropend,\n.dropdown,\n.dropstart,\n.dropup-center,\n.dropdown-center {\n    position: relative;\n}\n\n.dropdown-toggle {\n    white-space: nowrap;\n}\n\n.dropdown-toggle::after {\n    display: inline-block;\n    margin-right: 0.255em;\n    vertical-align: 0.255em;\n    content: \"\";\n    border-top: 0.3em solid;\n    border-left: 0.3em solid transparent;\n    border-bottom: 0;\n    border-right: 0.3em solid transparent;\n}\n\n.dropdown-toggle:empty::after {\n    margin-right: 0;\n}\n\n.dropdown-menu {\n    --bs-dropdown-zindex: 1000;\n    --bs-dropdown-min-width: 10rem;\n    --bs-dropdown-padding-x: 0;\n    --bs-dropdown-padding-y: 0.5rem;\n    --bs-dropdown-spacer: 0.125rem;\n    --bs-dropdown-font-size: 1rem;\n    --bs-dropdown-color: #212529;\n    --bs-dropdown-bg: #fff;\n    --bs-dropdown-border-color: var(--bs-border-color-translucent);\n    --bs-dropdown-border-radius: 0.375rem;\n    --bs-dropdown-border-width: 1px;\n    --bs-dropdown-inner-border-radius: calc(0.375rem - 1px);\n    --bs-dropdown-divider-bg: var(--bs-border-color-translucent);\n    --bs-dropdown-divider-margin-y: 0.5rem;\n    --bs-dropdown-box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15);\n    --bs-dropdown-link-color: #212529;\n    --bs-dropdown-link-hover-color: #1e2125;\n    --bs-dropdown-link-hover-bg: #e9ecef;\n    --bs-dropdown-link-active-color: #fff;\n    --bs-dropdown-link-active-bg: #0d6efd;\n    --bs-dropdown-link-disabled-color: #adb5bd;\n    --bs-dropdown-item-padding-x: 1rem;\n    --bs-dropdown-item-padding-y: 0.25rem;\n    --bs-dropdown-header-color: #6c757d;\n    --bs-dropdown-header-padding-x: 1rem;\n    --bs-dropdown-header-padding-y: 0.5rem;\n    position: absolute;\n    z-index: var(--bs-dropdown-zindex);\n    display: none;\n    min-width: var(--bs-dropdown-min-width);\n    padding: var(--bs-dropdown-padding-y) var(--bs-dropdown-padding-x);\n    margin: 0;\n    font-size: var(--bs-dropdown-font-size);\n    color: var(--bs-dropdown-color);\n    text-align: right;\n    list-style: none;\n    background-color: var(--bs-dropdown-bg);\n    background-clip: padding-box;\n    border: var(--bs-dropdown-border-width) solid var(--bs-dropdown-border-color);\n    border-radius: var(--bs-dropdown-border-radius);\n}\n\n.dropdown-menu[data-bs-popper] {\n    top: 100%;\n    right: 0;\n    margin-top: var(--bs-dropdown-spacer);\n}\n\n.dropdown-menu-start {\n    --bs-position: start;\n}\n\n.dropdown-menu-start[data-bs-popper] {\n    left: auto;\n    right: 0;\n}\n\n.dropdown-menu-end {\n    --bs-position: end;\n}\n\n.dropdown-menu-end[data-bs-popper] {\n    left: 0;\n    right: auto;\n}\n\n@media (min-width: 576px) {\n    .dropdown-menu-sm-start {\n        --bs-position: start;\n    }\n\n    .dropdown-menu-sm-start[data-bs-popper] {\n        left: auto;\n        right: 0;\n    }\n\n    .dropdown-menu-sm-end {\n        --bs-position: end;\n    }\n\n    .dropdown-menu-sm-end[data-bs-popper] {\n        left: 0;\n        right: auto;\n    }\n}\n\n@media (min-width: 768px) {\n    .dropdown-menu-md-start {\n        --bs-position: start;\n    }\n\n    .dropdown-menu-md-start[data-bs-popper] {\n        left: auto;\n        right: 0;\n    }\n\n    .dropdown-menu-md-end {\n        --bs-position: end;\n    }\n\n    .dropdown-menu-md-end[data-bs-popper] {\n        left: 0;\n        right: auto;\n    }\n}\n\n@media (min-width: 992px) {\n    .dropdown-menu-lg-start {\n        --bs-position: start;\n    }\n\n    .dropdown-menu-lg-start[data-bs-popper] {\n        left: auto;\n        right: 0;\n    }\n\n    .dropdown-menu-lg-end {\n        --bs-position: end;\n    }\n\n    .dropdown-menu-lg-end[data-bs-popper] {\n        left: 0;\n        right: auto;\n    }\n}\n\n@media (min-width: 1200px) {\n    .dropdown-menu-xl-start {\n        --bs-position: start;\n    }\n\n    .dropdown-menu-xl-start[data-bs-popper] {\n        left: auto;\n        right: 0;\n    }\n\n    .dropdown-menu-xl-end {\n        --bs-position: end;\n    }\n\n    .dropdown-menu-xl-end[data-bs-popper] {\n        left: 0;\n        right: auto;\n    }\n}\n\n@media (min-width: 1400px) {\n    .dropdown-menu-xxl-start {\n        --bs-position: start;\n    }\n\n    .dropdown-menu-xxl-start[data-bs-popper] {\n        left: auto;\n        right: 0;\n    }\n\n    .dropdown-menu-xxl-end {\n        --bs-position: end;\n    }\n\n    .dropdown-menu-xxl-end[data-bs-popper] {\n        left: 0;\n        right: auto;\n    }\n}\n\n.dropup .dropdown-menu[data-bs-popper] {\n    top: auto;\n    bottom: 100%;\n    margin-top: 0;\n    margin-bottom: var(--bs-dropdown-spacer);\n}\n\n.dropup .dropdown-toggle::after {\n    display: inline-block;\n    margin-right: 0.255em;\n    vertical-align: 0.255em;\n    content: \"\";\n    border-top: 0;\n    border-left: 0.3em solid transparent;\n    border-bottom: 0.3em solid;\n    border-right: 0.3em solid transparent;\n}\n\n.dropup .dropdown-toggle:empty::after {\n    margin-right: 0;\n}\n\n.dropend .dropdown-menu[data-bs-popper] {\n    top: 0;\n    left: auto;\n    right: 100%;\n    margin-top: 0;\n    margin-right: var(--bs-dropdown-spacer);\n}\n\n.dropend .dropdown-toggle::after {\n    display: inline-block;\n    margin-right: 0.255em;\n    vertical-align: 0.255em;\n    content: \"\";\n    border-top: 0.3em solid transparent;\n    border-left: 0;\n    border-bottom: 0.3em solid transparent;\n    border-right: 0.3em solid;\n}\n\n.dropend .dropdown-toggle:empty::after {\n    margin-right: 0;\n}\n\n.dropend .dropdown-toggle::after {\n    vertical-align: 0;\n}\n\n.dropstart .dropdown-menu[data-bs-popper] {\n    top: 0;\n    left: 100%;\n    right: auto;\n    margin-top: 0;\n    margin-left: var(--bs-dropdown-spacer);\n}\n\n.dropstart .dropdown-toggle::after {\n    display: inline-block;\n    margin-right: 0.255em;\n    vertical-align: 0.255em;\n    content: \"\";\n}\n\n.dropstart .dropdown-toggle::after {\n    display: none;\n}\n\n.dropstart .dropdown-toggle::before {\n    display: inline-block;\n    margin-left: 0.255em;\n    vertical-align: 0.255em;\n    content: \"\";\n    border-top: 0.3em solid transparent;\n    border-left: 0.3em solid;\n    border-bottom: 0.3em solid transparent;\n}\n\n.dropstart .dropdown-toggle:empty::after {\n    margin-right: 0;\n}\n\n.dropstart .dropdown-toggle::before {\n    vertical-align: 0;\n}\n\n.dropdown-divider {\n    height: 0;\n    margin: var(--bs-dropdown-divider-margin-y) 0;\n    overflow: hidden;\n    border-top: 1px solid var(--bs-dropdown-divider-bg);\n    opacity: 1;\n}\n\n.dropdown-item {\n    display: block;\n    width: 100%;\n    padding: var(--bs-dropdown-item-padding-y) var(--bs-dropdown-item-padding-x);\n    clear: both;\n    font-weight: 400;\n    color: var(--bs-dropdown-link-color);\n    text-align: inherit;\n    text-decoration: none;\n    white-space: nowrap;\n    background-color: transparent;\n    border: 0;\n}\n\n.dropdown-item:hover, .dropdown-item:focus {\n    color: var(--bs-dropdown-link-hover-color);\n    background-color: var(--bs-dropdown-link-hover-bg);\n}\n\n.dropdown-item.active, .dropdown-item:active {\n    color: var(--bs-dropdown-link-active-color);\n    text-decoration: none;\n    background-color: var(--bs-dropdown-link-active-bg);\n}\n\n.dropdown-item.disabled, .dropdown-item:disabled {\n    color: var(--bs-dropdown-link-disabled-color);\n    pointer-events: none;\n    background-color: transparent;\n}\n\n.dropdown-menu.show {\n    display: block;\n}\n\n.dropdown-header {\n    display: block;\n    padding: var(--bs-dropdown-header-padding-y) var(--bs-dropdown-header-padding-x);\n    margin-bottom: 0;\n    font-size: 0.875rem;\n    color: var(--bs-dropdown-header-color);\n    white-space: nowrap;\n}\n\n.dropdown-item-text {\n    display: block;\n    padding: var(--bs-dropdown-item-padding-y) var(--bs-dropdown-item-padding-x);\n    color: var(--bs-dropdown-link-color);\n}\n\n.dropdown-menu-dark {\n    --bs-dropdown-color: #dee2e6;\n    --bs-dropdown-bg: #343a40;\n    --bs-dropdown-border-color: var(--bs-border-color-translucent);\n    --bs-dropdown-box-shadow: ;\n    --bs-dropdown-link-color: #dee2e6;\n    --bs-dropdown-link-hover-color: #fff;\n    --bs-dropdown-divider-bg: var(--bs-border-color-translucent);\n    --bs-dropdown-link-hover-bg: rgba(255, 255, 255, 0.15);\n    --bs-dropdown-link-active-color: #fff;\n    --bs-dropdown-link-active-bg: #0d6efd;\n    --bs-dropdown-link-disabled-color: #adb5bd;\n    --bs-dropdown-header-color: #adb5bd;\n}\n\n.btn-group,\n.btn-group-vertical {\n    position: relative;\n    display: inline-flex;\n    vertical-align: middle;\n}\n\n.btn-group > .btn,\n.btn-group-vertical > .btn {\n    position: relative;\n    flex: 1 1 auto;\n}\n\n.btn-group > .btn-check:checked + .btn,\n.btn-group > .btn-check:focus + .btn,\n.btn-group > .btn:hover,\n.btn-group > .btn:focus,\n.btn-group > .btn:active,\n.btn-group > .btn.active,\n.btn-group-vertical > .btn-check:checked + .btn,\n.btn-group-vertical > .btn-check:focus + .btn,\n.btn-group-vertical > .btn:hover,\n.btn-group-vertical > .btn:focus,\n.btn-group-vertical > .btn:active,\n.btn-group-vertical > .btn.active {\n    z-index: 1;\n}\n\n.btn-toolbar {\n    display: flex;\n    flex-wrap: wrap;\n    justify-content: flex-start;\n}\n\n.btn-toolbar .input-group {\n    width: auto;\n}\n\n.btn-group {\n    border-radius: 0.375rem;\n}\n\n.btn-group > :not(.btn-check:first-child) + .btn,\n.btn-group > .btn-group:not(:first-child) {\n    margin-right: -1px;\n}\n\n.btn-group > .btn:not(:last-child):not(.dropdown-toggle),\n.btn-group > .btn.dropdown-toggle-split:first-child,\n.btn-group > .btn-group:not(:last-child) > .btn {\n    border-top-left-radius: 0;\n    border-bottom-left-radius: 0;\n}\n\n.btn-group > .btn:nth-child(n+3),\n.btn-group > :not(.btn-check) + .btn,\n.btn-group > .btn-group:not(:first-child) > .btn {\n    border-top-right-radius: 0;\n    border-bottom-right-radius: 0;\n}\n\n.dropdown-toggle-split {\n    padding-left: 0.5625rem;\n    padding-right: 0.5625rem;\n}\n\n.dropdown-toggle-split::after, .dropup .dropdown-toggle-split::after, .dropend .dropdown-toggle-split::after {\n    margin-right: 0;\n}\n\n.dropstart .dropdown-toggle-split::before {\n    margin-left: 0;\n}\n\n.btn-sm + .dropdown-toggle-split, .btn-group-sm > .btn + .dropdown-toggle-split {\n    padding-left: 0.375rem;\n    padding-right: 0.375rem;\n}\n\n.btn-lg + .dropdown-toggle-split, .btn-group-lg > .btn + .dropdown-toggle-split {\n    padding-left: 0.75rem;\n    padding-right: 0.75rem;\n}\n\n.btn-group-vertical {\n    flex-direction: column;\n    align-items: flex-start;\n    justify-content: center;\n}\n\n.btn-group-vertical > .btn,\n.btn-group-vertical > .btn-group {\n    width: 100%;\n}\n\n.btn-group-vertical > .btn:not(:first-child),\n.btn-group-vertical > .btn-group:not(:first-child) {\n    margin-top: -1px;\n}\n\n.btn-group-vertical > .btn:not(:last-child):not(.dropdown-toggle),\n.btn-group-vertical > .btn-group:not(:last-child) > .btn {\n    border-bottom-left-radius: 0;\n    border-bottom-right-radius: 0;\n}\n\n.btn-group-vertical > .btn ~ .btn,\n.btn-group-vertical > .btn-group:not(:first-child) > .btn {\n    border-top-right-radius: 0;\n    border-top-left-radius: 0;\n}\n\n.nav {\n    --bs-nav-link-padding-x: 1rem;\n    --bs-nav-link-padding-y: 0.5rem;\n    --bs-nav-link-font-weight: ;\n    --bs-nav-link-color: var(--bs-link-color);\n    --bs-nav-link-hover-color: var(--bs-link-hover-color);\n    --bs-nav-link-disabled-color: #6c757d;\n    display: flex;\n    flex-wrap: wrap;\n    padding-right: 0;\n    margin-bottom: 0;\n    list-style: none;\n}\n\n.nav-link {\n    display: block;\n    padding: var(--bs-nav-link-padding-y) var(--bs-nav-link-padding-x);\n    font-size: var(--bs-nav-link-font-size);\n    font-weight: var(--bs-nav-link-font-weight);\n    color: var(--bs-nav-link-color);\n    text-decoration: none;\n    transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n    .nav-link {\n        transition: none;\n    }\n}\n\n.nav-link:hover, .nav-link:focus {\n    color: var(--bs-nav-link-hover-color);\n}\n\n.nav-link.disabled {\n    color: var(--bs-nav-link-disabled-color);\n    pointer-events: none;\n    cursor: default;\n}\n\n.nav-tabs {\n    --bs-nav-tabs-border-width: 1px;\n    --bs-nav-tabs-border-color: #dee2e6;\n    --bs-nav-tabs-border-radius: 0.375rem;\n    --bs-nav-tabs-link-hover-border-color: #e9ecef #e9ecef #dee2e6;\n    --bs-nav-tabs-link-active-color: #495057;\n    --bs-nav-tabs-link-active-bg: #fff;\n    --bs-nav-tabs-link-active-border-color: #dee2e6 #dee2e6 #fff;\n    border-bottom: var(--bs-nav-tabs-border-width) solid var(--bs-nav-tabs-border-color);\n}\n\n.nav-tabs .nav-link {\n    margin-bottom: calc(-1 * var(--bs-nav-tabs-border-width));\n    background: none;\n    border: var(--bs-nav-tabs-border-width) solid transparent;\n    border-top-right-radius: var(--bs-nav-tabs-border-radius);\n    border-top-left-radius: var(--bs-nav-tabs-border-radius);\n}\n\n.nav-tabs .nav-link:hover, .nav-tabs .nav-link:focus {\n    isolation: isolate;\n    border-color: var(--bs-nav-tabs-link-hover-border-color);\n}\n\n.nav-tabs .nav-link.disabled, .nav-tabs .nav-link:disabled {\n    color: var(--bs-nav-link-disabled-color);\n    background-color: transparent;\n    border-color: transparent;\n}\n\n.nav-tabs .nav-link.active,\n.nav-tabs .nav-item.show .nav-link {\n    color: var(--bs-nav-tabs-link-active-color);\n    background-color: var(--bs-nav-tabs-link-active-bg);\n    border-color: var(--bs-nav-tabs-link-active-border-color);\n}\n\n.nav-tabs .dropdown-menu {\n    margin-top: calc(-1 * var(--bs-nav-tabs-border-width));\n    border-top-right-radius: 0;\n    border-top-left-radius: 0;\n}\n\n.nav-pills {\n    --bs-nav-pills-border-radius: 0.375rem;\n    --bs-nav-pills-link-active-color: #fff;\n    --bs-nav-pills-link-active-bg: #0d6efd;\n}\n\n.nav-pills .nav-link {\n    background: none;\n    border: 0;\n    border-radius: var(--bs-nav-pills-border-radius);\n}\n\n.nav-pills .nav-link:disabled {\n    color: var(--bs-nav-link-disabled-color);\n    background-color: transparent;\n    border-color: transparent;\n}\n\n.nav-pills .nav-link.active,\n.nav-pills .show > .nav-link {\n    color: var(--bs-nav-pills-link-active-color);\n    background-color: var(--bs-nav-pills-link-active-bg);\n}\n\n.nav-fill > .nav-link,\n.nav-fill .nav-item {\n    flex: 1 1 auto;\n    text-align: center;\n}\n\n.nav-justified > .nav-link,\n.nav-justified .nav-item {\n    flex-basis: 0;\n    flex-grow: 1;\n    text-align: center;\n}\n\n.nav-fill .nav-item .nav-link,\n.nav-justified .nav-item .nav-link {\n    width: 100%;\n}\n\n.tab-content > .tab-pane {\n    display: none;\n}\n\n.tab-content > .active {\n    display: block;\n}\n\n.navbar {\n    --bs-navbar-padding-x: 0;\n    --bs-navbar-padding-y: 0.5rem;\n    --bs-navbar-color: rgba(0, 0, 0, 0.55);\n    --bs-navbar-hover-color: rgba(0, 0, 0, 0.7);\n    --bs-navbar-disabled-color: rgba(0, 0, 0, 0.3);\n    --bs-navbar-active-color: rgba(0, 0, 0, 0.9);\n    --bs-navbar-brand-padding-y: 0.3125rem;\n    --bs-navbar-brand-margin-end: 1rem;\n    --bs-navbar-brand-font-size: 1.25rem;\n    --bs-navbar-brand-color: rgba(0, 0, 0, 0.9);\n    --bs-navbar-brand-hover-color: rgba(0, 0, 0, 0.9);\n    --bs-navbar-nav-link-padding-x: 0.5rem;\n    --bs-navbar-toggler-padding-y: 0.25rem;\n    --bs-navbar-toggler-padding-x: 0.75rem;\n    --bs-navbar-toggler-font-size: 1.25rem;\n    --bs-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%280, 0, 0, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e\");\n    --bs-navbar-toggler-border-color: rgba(0, 0, 0, 0.1);\n    --bs-navbar-toggler-border-radius: 0.375rem;\n    --bs-navbar-toggler-focus-width: 0.25rem;\n    --bs-navbar-toggler-transition: box-shadow 0.15s ease-in-out;\n    position: relative;\n    display: flex;\n    flex-wrap: wrap;\n    align-items: center;\n    justify-content: space-between;\n    padding: var(--bs-navbar-padding-y) var(--bs-navbar-padding-x);\n}\n\n.navbar > .container,\n.navbar > .container-fluid,\n.navbar > .container-sm,\n.navbar > .container-md,\n.navbar > .container-lg,\n.navbar > .container-xl,\n.navbar > .container-xxl {\n    display: flex;\n    flex-wrap: inherit;\n    align-items: center;\n    justify-content: space-between;\n}\n\n.navbar-brand {\n    padding-top: var(--bs-navbar-brand-padding-y);\n    padding-bottom: var(--bs-navbar-brand-padding-y);\n    margin-left: var(--bs-navbar-brand-margin-end);\n    font-size: var(--bs-navbar-brand-font-size);\n    color: var(--bs-navbar-brand-color);\n    text-decoration: none;\n    white-space: nowrap;\n}\n\n.navbar-brand:hover, .navbar-brand:focus {\n    color: var(--bs-navbar-brand-hover-color);\n}\n\n.navbar-nav {\n    --bs-nav-link-padding-x: 0;\n    --bs-nav-link-padding-y: 0.5rem;\n    --bs-nav-link-font-weight: ;\n    --bs-nav-link-color: var(--bs-navbar-color);\n    --bs-nav-link-hover-color: var(--bs-navbar-hover-color);\n    --bs-nav-link-disabled-color: var(--bs-navbar-disabled-color);\n    display: flex;\n    flex-direction: column;\n    padding-right: 0;\n    margin-bottom: 0;\n    list-style: none;\n}\n\n.navbar-nav .show > .nav-link,\n.navbar-nav .nav-link.active {\n    color: var(--bs-navbar-active-color);\n}\n\n.navbar-nav .dropdown-menu {\n    position: static;\n}\n\n.navbar-text {\n    padding-top: 0.5rem;\n    padding-bottom: 0.5rem;\n    color: var(--bs-navbar-color);\n}\n\n.navbar-text a,\n.navbar-text a:hover,\n.navbar-text a:focus {\n    color: var(--bs-navbar-active-color);\n}\n\n.navbar-collapse {\n    flex-basis: 100%;\n    flex-grow: 1;\n    align-items: center;\n}\n\n.navbar-toggler {\n    padding: var(--bs-navbar-toggler-padding-y) var(--bs-navbar-toggler-padding-x);\n    font-size: var(--bs-navbar-toggler-font-size);\n    line-height: 1;\n    color: var(--bs-navbar-color);\n    background-color: transparent;\n    border: var(--bs-border-width) solid var(--bs-navbar-toggler-border-color);\n    border-radius: var(--bs-navbar-toggler-border-radius);\n    transition: var(--bs-navbar-toggler-transition);\n}\n\n@media (prefers-reduced-motion: reduce) {\n    .navbar-toggler {\n        transition: none;\n    }\n}\n\n.navbar-toggler:hover {\n    text-decoration: none;\n}\n\n.navbar-toggler:focus {\n    text-decoration: none;\n    outline: 0;\n    box-shadow: 0 0 0 var(--bs-navbar-toggler-focus-width);\n}\n\n.navbar-toggler-icon {\n    display: inline-block;\n    width: 1.5em;\n    height: 1.5em;\n    vertical-align: middle;\n    background-image: var(--bs-navbar-toggler-icon-bg);\n    background-repeat: no-repeat;\n    background-position: center;\n    background-size: 100%;\n}\n\n.navbar-nav-scroll {\n    max-height: var(--bs-scroll-height, 75vh);\n    overflow-y: auto;\n}\n\n@media (min-width: 576px) {\n    .navbar-expand-sm {\n        flex-wrap: nowrap;\n        justify-content: flex-start;\n    }\n\n    .navbar-expand-sm .navbar-nav {\n        flex-direction: row;\n    }\n\n    .navbar-expand-sm .navbar-nav .dropdown-menu {\n        position: absolute;\n    }\n\n    .navbar-expand-sm .navbar-nav .nav-link {\n        padding-left: var(--bs-navbar-nav-link-padding-x);\n        padding-right: var(--bs-navbar-nav-link-padding-x);\n    }\n\n    .navbar-expand-sm .navbar-nav-scroll {\n        overflow: visible;\n    }\n\n    .navbar-expand-sm .navbar-collapse {\n        display: flex !important;\n        flex-basis: auto;\n    }\n\n    .navbar-expand-sm .navbar-toggler {\n        display: none;\n    }\n\n    .navbar-expand-sm .offcanvas {\n        position: static;\n        z-index: auto;\n        flex-grow: 1;\n        width: auto !important;\n        height: auto !important;\n        visibility: visible !important;\n        background-color: transparent !important;\n        border: 0 !important;\n        transform: none !important;\n        transition: none;\n    }\n\n    .navbar-expand-sm .offcanvas .offcanvas-header {\n        display: none;\n    }\n\n    .navbar-expand-sm .offcanvas .offcanvas-body {\n        display: flex;\n        flex-grow: 0;\n        padding: 0;\n        overflow-y: visible;\n    }\n}\n\n@media (min-width: 768px) {\n    .navbar-expand-md {\n        flex-wrap: nowrap;\n        justify-content: flex-start;\n    }\n\n    .navbar-expand-md .navbar-nav {\n        flex-direction: row;\n    }\n\n    .navbar-expand-md .navbar-nav .dropdown-menu {\n        position: absolute;\n    }\n\n    .navbar-expand-md .navbar-nav .nav-link {\n        padding-left: var(--bs-navbar-nav-link-padding-x);\n        padding-right: var(--bs-navbar-nav-link-padding-x);\n    }\n\n    .navbar-expand-md .navbar-nav-scroll {\n        overflow: visible;\n    }\n\n    .navbar-expand-md .navbar-collapse {\n        display: flex !important;\n        flex-basis: auto;\n    }\n\n    .navbar-expand-md .navbar-toggler {\n        display: none;\n    }\n\n    .navbar-expand-md .offcanvas {\n        position: static;\n        z-index: auto;\n        flex-grow: 1;\n        width: auto !important;\n        height: auto !important;\n        visibility: visible !important;\n        background-color: transparent !important;\n        border: 0 !important;\n        transform: none !important;\n        transition: none;\n    }\n\n    .navbar-expand-md .offcanvas .offcanvas-header {\n        display: none;\n    }\n\n    .navbar-expand-md .offcanvas .offcanvas-body {\n        display: flex;\n        flex-grow: 0;\n        padding: 0;\n        overflow-y: visible;\n    }\n}\n\n@media (min-width: 992px) {\n    .navbar-expand-lg {\n        flex-wrap: nowrap;\n        justify-content: flex-start;\n    }\n\n    .navbar-expand-lg .navbar-nav {\n        flex-direction: row;\n    }\n\n    .navbar-expand-lg .navbar-nav .dropdown-menu {\n        position: absolute;\n    }\n\n    .navbar-expand-lg .navbar-nav .nav-link {\n        padding-left: var(--bs-navbar-nav-link-padding-x);\n        padding-right: var(--bs-navbar-nav-link-padding-x);\n    }\n\n    .navbar-expand-lg .navbar-nav-scroll {\n        overflow: visible;\n    }\n\n    .navbar-expand-lg .navbar-collapse {\n        display: flex !important;\n        flex-basis: auto;\n    }\n\n    .navbar-expand-lg .navbar-toggler {\n        display: none;\n    }\n\n    .navbar-expand-lg .offcanvas {\n        position: static;\n        z-index: auto;\n        flex-grow: 1;\n        width: auto !important;\n        height: auto !important;\n        visibility: visible !important;\n        background-color: transparent !important;\n        border: 0 !important;\n        transform: none !important;\n        transition: none;\n    }\n\n    .navbar-expand-lg .offcanvas .offcanvas-header {\n        display: none;\n    }\n\n    .navbar-expand-lg .offcanvas .offcanvas-body {\n        display: flex;\n        flex-grow: 0;\n        padding: 0;\n        overflow-y: visible;\n    }\n}\n\n@media (min-width: 1200px) {\n    .navbar-expand-xl {\n        flex-wrap: nowrap;\n        justify-content: flex-start;\n    }\n\n    .navbar-expand-xl .navbar-nav {\n        flex-direction: row;\n    }\n\n    .navbar-expand-xl .navbar-nav .dropdown-menu {\n        position: absolute;\n    }\n\n    .navbar-expand-xl .navbar-nav .nav-link {\n        padding-left: var(--bs-navbar-nav-link-padding-x);\n        padding-right: var(--bs-navbar-nav-link-padding-x);\n    }\n\n    .navbar-expand-xl .navbar-nav-scroll {\n        overflow: visible;\n    }\n\n    .navbar-expand-xl .navbar-collapse {\n        display: flex !important;\n        flex-basis: auto;\n    }\n\n    .navbar-expand-xl .navbar-toggler {\n        display: none;\n    }\n\n    .navbar-expand-xl .offcanvas {\n        position: static;\n        z-index: auto;\n        flex-grow: 1;\n        width: auto !important;\n        height: auto !important;\n        visibility: visible !important;\n        background-color: transparent !important;\n        border: 0 !important;\n        transform: none !important;\n        transition: none;\n    }\n\n    .navbar-expand-xl .offcanvas .offcanvas-header {\n        display: none;\n    }\n\n    .navbar-expand-xl .offcanvas .offcanvas-body {\n        display: flex;\n        flex-grow: 0;\n        padding: 0;\n        overflow-y: visible;\n    }\n}\n\n@media (min-width: 1400px) {\n    .navbar-expand-xxl {\n        flex-wrap: nowrap;\n        justify-content: flex-start;\n    }\n\n    .navbar-expand-xxl .navbar-nav {\n        flex-direction: row;\n    }\n\n    .navbar-expand-xxl .navbar-nav .dropdown-menu {\n        position: absolute;\n    }\n\n    .navbar-expand-xxl .navbar-nav .nav-link {\n        padding-left: var(--bs-navbar-nav-link-padding-x);\n        padding-right: var(--bs-navbar-nav-link-padding-x);\n    }\n\n    .navbar-expand-xxl .navbar-nav-scroll {\n        overflow: visible;\n    }\n\n    .navbar-expand-xxl .navbar-collapse {\n        display: flex !important;\n        flex-basis: auto;\n    }\n\n    .navbar-expand-xxl .navbar-toggler {\n        display: none;\n    }\n\n    .navbar-expand-xxl .offcanvas {\n        position: static;\n        z-index: auto;\n        flex-grow: 1;\n        width: auto !important;\n        height: auto !important;\n        visibility: visible !important;\n        background-color: transparent !important;\n        border: 0 !important;\n        transform: none !important;\n        transition: none;\n    }\n\n    .navbar-expand-xxl .offcanvas .offcanvas-header {\n        display: none;\n    }\n\n    .navbar-expand-xxl .offcanvas .offcanvas-body {\n        display: flex;\n        flex-grow: 0;\n        padding: 0;\n        overflow-y: visible;\n    }\n}\n\n.navbar-expand {\n    flex-wrap: nowrap;\n    justify-content: flex-start;\n}\n\n.navbar-expand .navbar-nav {\n    flex-direction: row;\n}\n\n.navbar-expand .navbar-nav .dropdown-menu {\n    position: absolute;\n}\n\n.navbar-expand .navbar-nav .nav-link {\n    padding-left: var(--bs-navbar-nav-link-padding-x);\n    padding-right: var(--bs-navbar-nav-link-padding-x);\n}\n\n.navbar-expand .navbar-nav-scroll {\n    overflow: visible;\n}\n\n.navbar-expand .navbar-collapse {\n    display: flex !important;\n    flex-basis: auto;\n}\n\n.navbar-expand .navbar-toggler {\n    display: none;\n}\n\n.navbar-expand .offcanvas {\n    position: static;\n    z-index: auto;\n    flex-grow: 1;\n    width: auto !important;\n    height: auto !important;\n    visibility: visible !important;\n    background-color: transparent !important;\n    border: 0 !important;\n    transform: none !important;\n    transition: none;\n}\n\n.navbar-expand .offcanvas .offcanvas-header {\n    display: none;\n}\n\n.navbar-expand .offcanvas .offcanvas-body {\n    display: flex;\n    flex-grow: 0;\n    padding: 0;\n    overflow-y: visible;\n}\n\n.navbar-dark {\n    --bs-navbar-color: rgba(255, 255, 255, 0.55);\n    --bs-navbar-hover-color: rgba(255, 255, 255, 0.75);\n    --bs-navbar-disabled-color: rgba(255, 255, 255, 0.25);\n    --bs-navbar-active-color: #fff;\n    --bs-navbar-brand-color: #fff;\n    --bs-navbar-brand-hover-color: #fff;\n    --bs-navbar-toggler-border-color: rgba(255, 255, 255, 0.1);\n    --bs-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.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e\");\n}\n\n.card {\n    --bs-card-spacer-y: 1rem;\n    --bs-card-spacer-x: 1rem;\n    --bs-card-title-spacer-y: 0.5rem;\n    --bs-card-border-width: 1px;\n    --bs-card-border-color: var(--bs-border-color-translucent);\n    --bs-card-border-radius: 0.375rem;\n    --bs-card-box-shadow: ;\n    --bs-card-inner-border-radius: calc(0.375rem - 1px);\n    --bs-card-cap-padding-y: 0.5rem;\n    --bs-card-cap-padding-x: 1rem;\n    --bs-card-cap-bg: rgba(0, 0, 0, 0.03);\n    --bs-card-cap-color: ;\n    --bs-card-height: ;\n    --bs-card-color: ;\n    --bs-card-bg: #fff;\n    --bs-card-img-overlay-padding: 1rem;\n    --bs-card-group-margin: 0.75rem;\n    position: relative;\n    display: flex;\n    flex-direction: column;\n    min-width: 0;\n    height: var(--bs-card-height);\n    word-wrap: break-word;\n    background-color: var(--bs-card-bg);\n    background-clip: border-box;\n    border: var(--bs-card-border-width) solid var(--bs-card-border-color);\n    border-radius: var(--bs-card-border-radius);\n}\n\n.card > hr {\n    margin-left: 0;\n    margin-right: 0;\n}\n\n.card > .list-group {\n    border-top: inherit;\n    border-bottom: inherit;\n}\n\n.card > .list-group:first-child {\n    border-top-width: 0;\n    border-top-right-radius: var(--bs-card-inner-border-radius);\n    border-top-left-radius: var(--bs-card-inner-border-radius);\n}\n\n.card > .list-group:last-child {\n    border-bottom-width: 0;\n    border-bottom-left-radius: var(--bs-card-inner-border-radius);\n    border-bottom-right-radius: var(--bs-card-inner-border-radius);\n}\n\n.card > .card-header + .list-group,\n.card > .list-group + .card-footer {\n    border-top: 0;\n}\n\n.card-body {\n    flex: 1 1 auto;\n    padding: var(--bs-card-spacer-y) var(--bs-card-spacer-x);\n    color: var(--bs-card-color);\n}\n\n.card-title {\n    margin-bottom: var(--bs-card-title-spacer-y);\n}\n\n.card-subtitle {\n    margin-top: calc(-0.5 * var(--bs-card-title-spacer-y));\n    margin-bottom: 0;\n}\n\n.card-text:last-child {\n    margin-bottom: 0;\n}\n\n.card-link + .card-link {\n    margin-right: var(--bs-card-spacer-x);\n}\n\n.card-header {\n    padding: var(--bs-card-cap-padding-y) var(--bs-card-cap-padding-x);\n    margin-bottom: 0;\n    color: var(--bs-card-cap-color);\n    background-color: var(--bs-card-cap-bg);\n    border-bottom: var(--bs-card-border-width) solid var(--bs-card-border-color);\n}\n\n.card-header:first-child {\n    border-radius: var(--bs-card-inner-border-radius) var(--bs-card-inner-border-radius) 0 0;\n}\n\n.card-footer {\n    padding: var(--bs-card-cap-padding-y) var(--bs-card-cap-padding-x);\n    color: var(--bs-card-cap-color);\n    background-color: var(--bs-card-cap-bg);\n    border-top: var(--bs-card-border-width) solid var(--bs-card-border-color);\n}\n\n.card-footer:last-child {\n    border-radius: 0 0 var(--bs-card-inner-border-radius) var(--bs-card-inner-border-radius);\n}\n\n.card-header-tabs {\n    margin-left: calc(-0.5 * var(--bs-card-cap-padding-x));\n    margin-bottom: calc(-1 * var(--bs-card-cap-padding-y));\n    margin-right: calc(-0.5 * var(--bs-card-cap-padding-x));\n    border-bottom: 0;\n}\n\n.card-header-tabs .nav-link.active {\n    background-color: var(--bs-card-bg);\n    border-bottom-color: var(--bs-card-bg);\n}\n\n.card-header-pills {\n    margin-left: calc(-0.5 * var(--bs-card-cap-padding-x));\n    margin-right: calc(-0.5 * var(--bs-card-cap-padding-x));\n}\n\n.card-img-overlay {\n    position: absolute;\n    top: 0;\n    left: 0;\n    bottom: 0;\n    right: 0;\n    padding: var(--bs-card-img-overlay-padding);\n    border-radius: var(--bs-card-inner-border-radius);\n}\n\n.card-img,\n.card-img-top,\n.card-img-bottom {\n    width: 100%;\n}\n\n.card-img,\n.card-img-top {\n    border-top-right-radius: var(--bs-card-inner-border-radius);\n    border-top-left-radius: var(--bs-card-inner-border-radius);\n}\n\n.card-img,\n.card-img-bottom {\n    border-bottom-left-radius: var(--bs-card-inner-border-radius);\n    border-bottom-right-radius: var(--bs-card-inner-border-radius);\n}\n\n.card-group > .card {\n    margin-bottom: var(--bs-card-group-margin);\n}\n\n@media (min-width: 576px) {\n    .card-group {\n        display: flex;\n        flex-flow: row wrap;\n    }\n\n    .card-group > .card {\n        flex: 1 0 0%;\n        margin-bottom: 0;\n    }\n\n    .card-group > .card + .card {\n        margin-right: 0;\n        border-right: 0;\n    }\n\n    .card-group > .card:not(:last-child) {\n        border-top-left-radius: 0;\n        border-bottom-left-radius: 0;\n    }\n\n    .card-group > .card:not(:last-child) .card-img-top,\n    .card-group > .card:not(:last-child) .card-header {\n        border-top-left-radius: 0;\n    }\n\n    .card-group > .card:not(:last-child) .card-img-bottom,\n    .card-group > .card:not(:last-child) .card-footer {\n        border-bottom-left-radius: 0;\n    }\n\n    .card-group > .card:not(:first-child) {\n        border-top-right-radius: 0;\n        border-bottom-right-radius: 0;\n    }\n\n    .card-group > .card:not(:first-child) .card-img-top,\n    .card-group > .card:not(:first-child) .card-header {\n        border-top-right-radius: 0;\n    }\n\n    .card-group > .card:not(:first-child) .card-img-bottom,\n    .card-group > .card:not(:first-child) .card-footer {\n        border-bottom-right-radius: 0;\n    }\n}\n\n.accordion {\n    --bs-accordion-color: #212529;\n    --bs-accordion-bg: #fff;\n    --bs-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;\n    --bs-accordion-border-color: var(--bs-border-color);\n    --bs-accordion-border-width: 1px;\n    --bs-accordion-border-radius: 0.375rem;\n    --bs-accordion-inner-border-radius: calc(0.375rem - 1px);\n    --bs-accordion-btn-padding-x: 1.25rem;\n    --bs-accordion-btn-padding-y: 1rem;\n    --bs-accordion-btn-color: #212529;\n    --bs-accordion-btn-bg: var(--bs-accordion-bg);\n    --bs-accordion-btn-icon: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23212529'%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\");\n    --bs-accordion-btn-icon-width: 1.25rem;\n    --bs-accordion-btn-icon-transform: rotate(-180deg);\n    --bs-accordion-btn-icon-transition: transform 0.2s ease-in-out;\n    --bs-accordion-btn-active-icon: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%230c63e4'%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\");\n    --bs-accordion-btn-focus-border-color: #86b7fe;\n    --bs-accordion-btn-focus-box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n    --bs-accordion-body-padding-x: 1.25rem;\n    --bs-accordion-body-padding-y: 1rem;\n    --bs-accordion-active-color: #0c63e4;\n    --bs-accordion-active-bg: #e7f1ff;\n}\n\n.accordion-button {\n    position: relative;\n    display: flex;\n    align-items: center;\n    width: 100%;\n    padding: var(--bs-accordion-btn-padding-y) var(--bs-accordion-btn-padding-x);\n    font-size: 1rem;\n    color: var(--bs-accordion-btn-color);\n    text-align: right;\n    background-color: var(--bs-accordion-btn-bg);\n    border: 0;\n    border-radius: 0;\n    overflow-anchor: none;\n    transition: var(--bs-accordion-transition);\n}\n\n@media (prefers-reduced-motion: reduce) {\n    .accordion-button {\n        transition: none;\n    }\n}\n\n.accordion-button:not(.collapsed) {\n    color: var(--bs-accordion-active-color);\n    background-color: var(--bs-accordion-active-bg);\n    box-shadow: inset 0 calc(-1 * var(--bs-accordion-border-width)) 0 var(--bs-accordion-border-color);\n}\n\n.accordion-button:not(.collapsed)::after {\n    background-image: var(--bs-accordion-btn-active-icon);\n    transform: var(--bs-accordion-btn-icon-transform);\n}\n\n.accordion-button::after {\n    flex-shrink: 0;\n    width: var(--bs-accordion-btn-icon-width);\n    height: var(--bs-accordion-btn-icon-width);\n    margin-right: auto;\n    content: \"\";\n    background-image: var(--bs-accordion-btn-icon);\n    background-repeat: no-repeat;\n    background-size: var(--bs-accordion-btn-icon-width);\n    transition: var(--bs-accordion-btn-icon-transition);\n}\n\n@media (prefers-reduced-motion: reduce) {\n    .accordion-button::after {\n        transition: none;\n    }\n}\n\n.accordion-button:hover {\n    z-index: 2;\n}\n\n.accordion-button:focus {\n    z-index: 3;\n    border-color: var(--bs-accordion-btn-focus-border-color);\n    outline: 0;\n    box-shadow: var(--bs-accordion-btn-focus-box-shadow);\n}\n\n.accordion-header {\n    margin-bottom: 0;\n}\n\n.accordion-item {\n    color: var(--bs-accordion-color);\n    background-color: var(--bs-accordion-bg);\n    border: var(--bs-accordion-border-width) solid var(--bs-accordion-border-color);\n}\n\n.accordion-item:first-of-type {\n    border-top-right-radius: var(--bs-accordion-border-radius);\n    border-top-left-radius: var(--bs-accordion-border-radius);\n}\n\n.accordion-item:first-of-type .accordion-button {\n    border-top-right-radius: var(--bs-accordion-inner-border-radius);\n    border-top-left-radius: var(--bs-accordion-inner-border-radius);\n}\n\n.accordion-item:not(:first-of-type) {\n    border-top: 0;\n}\n\n.accordion-item:last-of-type {\n    border-bottom-left-radius: var(--bs-accordion-border-radius);\n    border-bottom-right-radius: var(--bs-accordion-border-radius);\n}\n\n.accordion-item:last-of-type .accordion-button.collapsed {\n    border-bottom-left-radius: var(--bs-accordion-inner-border-radius);\n    border-bottom-right-radius: var(--bs-accordion-inner-border-radius);\n}\n\n.accordion-item:last-of-type .accordion-collapse {\n    border-bottom-left-radius: var(--bs-accordion-border-radius);\n    border-bottom-right-radius: var(--bs-accordion-border-radius);\n}\n\n.accordion-body {\n    padding: var(--bs-accordion-body-padding-y) var(--bs-accordion-body-padding-x);\n}\n\n.accordion-flush .accordion-collapse {\n    border-width: 0;\n}\n\n.accordion-flush .accordion-item {\n    border-left: 0;\n    border-right: 0;\n    border-radius: 0;\n}\n\n.accordion-flush .accordion-item:first-child {\n    border-top: 0;\n}\n\n.accordion-flush .accordion-item:last-child {\n    border-bottom: 0;\n}\n\n.accordion-flush .accordion-item .accordion-button, .accordion-flush .accordion-item .accordion-button.collapsed {\n    border-radius: 0;\n}\n\n.breadcrumb {\n    --bs-breadcrumb-padding-x: 0;\n    --bs-breadcrumb-padding-y: 0;\n    --bs-breadcrumb-margin-bottom: 1rem;\n    --bs-breadcrumb-bg: ;\n    --bs-breadcrumb-border-radius: ;\n    --bs-breadcrumb-divider-color: #6c757d;\n    --bs-breadcrumb-item-padding-x: 0.5rem;\n    --bs-breadcrumb-item-active-color: #6c757d;\n    display: flex;\n    flex-wrap: wrap;\n    padding: var(--bs-breadcrumb-padding-y) var(--bs-breadcrumb-padding-x);\n    margin-bottom: var(--bs-breadcrumb-margin-bottom);\n    font-size: var(--bs-breadcrumb-font-size);\n    list-style: none;\n    background-color: var(--bs-breadcrumb-bg);\n    border-radius: var(--bs-breadcrumb-border-radius);\n}\n\n.breadcrumb-item + .breadcrumb-item {\n    padding-right: var(--bs-breadcrumb-item-padding-x);\n}\n\n.breadcrumb-item + .breadcrumb-item::before {\n    float: right;\n    padding-left: var(--bs-breadcrumb-item-padding-x);\n    color: var(--bs-breadcrumb-divider-color);\n    content: var(--bs-breadcrumb-divider, \"/\");\n}\n\n.breadcrumb-item.active {\n    color: var(--bs-breadcrumb-item-active-color);\n}\n\n.pagination {\n    --bs-pagination-padding-x: 0.75rem;\n    --bs-pagination-padding-y: 0.375rem;\n    --bs-pagination-font-size: 1rem;\n    --bs-pagination-color: var(--bs-link-color);\n    --bs-pagination-bg: #fff;\n    --bs-pagination-border-width: 1px;\n    --bs-pagination-border-color: #dee2e6;\n    --bs-pagination-border-radius: 0.375rem;\n    --bs-pagination-hover-color: var(--bs-link-hover-color);\n    --bs-pagination-hover-bg: #e9ecef;\n    --bs-pagination-hover-border-color: #dee2e6;\n    --bs-pagination-focus-color: var(--bs-link-hover-color);\n    --bs-pagination-focus-bg: #e9ecef;\n    --bs-pagination-focus-box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n    --bs-pagination-active-color: #fff;\n    --bs-pagination-active-bg: #0d6efd;\n    --bs-pagination-active-border-color: #0d6efd;\n    --bs-pagination-disabled-color: #6c757d;\n    --bs-pagination-disabled-bg: #fff;\n    --bs-pagination-disabled-border-color: #dee2e6;\n    display: flex;\n    padding-right: 0;\n    list-style: none;\n}\n\n.page-link {\n    position: relative;\n    display: block;\n    padding: var(--bs-pagination-padding-y) var(--bs-pagination-padding-x);\n    font-size: var(--bs-pagination-font-size);\n    color: var(--bs-pagination-color);\n    text-decoration: none;\n    background-color: var(--bs-pagination-bg);\n    border: var(--bs-pagination-border-width) solid var(--bs-pagination-border-color);\n    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;\n}\n\n@media (prefers-reduced-motion: reduce) {\n    .page-link {\n        transition: none;\n    }\n}\n\n.page-link:hover {\n    z-index: 2;\n    color: var(--bs-pagination-hover-color);\n    background-color: var(--bs-pagination-hover-bg);\n    border-color: var(--bs-pagination-hover-border-color);\n}\n\n.page-link:focus {\n    z-index: 3;\n    color: var(--bs-pagination-focus-color);\n    background-color: var(--bs-pagination-focus-bg);\n    outline: 0;\n    box-shadow: var(--bs-pagination-focus-box-shadow);\n}\n\n.page-link.active, .active > .page-link {\n    z-index: 3;\n    color: var(--bs-pagination-active-color);\n    background-color: var(--bs-pagination-active-bg);\n    border-color: var(--bs-pagination-active-border-color);\n}\n\n.page-link.disabled, .disabled > .page-link {\n    color: var(--bs-pagination-disabled-color);\n    pointer-events: none;\n    background-color: var(--bs-pagination-disabled-bg);\n    border-color: var(--bs-pagination-disabled-border-color);\n}\n\n.page-item:not(:first-child) .page-link {\n    margin-right: -1px;\n}\n\n.page-item:first-child .page-link {\n    border-top-right-radius: var(--bs-pagination-border-radius);\n    border-bottom-right-radius: var(--bs-pagination-border-radius);\n}\n\n.page-item:last-child .page-link {\n    border-top-left-radius: var(--bs-pagination-border-radius);\n    border-bottom-left-radius: var(--bs-pagination-border-radius);\n}\n\n.pagination-lg {\n    --bs-pagination-padding-x: 1.5rem;\n    --bs-pagination-padding-y: 0.75rem;\n    --bs-pagination-font-size: 1.25rem;\n    --bs-pagination-border-radius: 0.5rem;\n}\n\n.pagination-sm {\n    --bs-pagination-padding-x: 0.5rem;\n    --bs-pagination-padding-y: 0.25rem;\n    --bs-pagination-font-size: 0.875rem;\n    --bs-pagination-border-radius: 0.25rem;\n}\n\n.badge {\n    --bs-badge-padding-x: 0.65em;\n    --bs-badge-padding-y: 0.35em;\n    --bs-badge-font-size: 0.75em;\n    --bs-badge-font-weight: 700;\n    --bs-badge-color: #fff;\n    --bs-badge-border-radius: 0.375rem;\n    display: inline-block;\n    padding: var(--bs-badge-padding-y) var(--bs-badge-padding-x);\n    font-size: var(--bs-badge-font-size);\n    font-weight: var(--bs-badge-font-weight);\n    line-height: 1;\n    color: var(--bs-badge-color);\n    text-align: center;\n    white-space: nowrap;\n    vertical-align: baseline;\n    border-radius: var(--bs-badge-border-radius);\n}\n\n.badge:empty {\n    display: none;\n}\n\n.btn .badge {\n    position: relative;\n    top: -1px;\n}\n\n.alert {\n    --bs-alert-bg: transparent;\n    --bs-alert-padding-x: 1rem;\n    --bs-alert-padding-y: 1rem;\n    --bs-alert-margin-bottom: 1rem;\n    --bs-alert-color: inherit;\n    --bs-alert-border-color: transparent;\n    --bs-alert-border: 1px solid var(--bs-alert-border-color);\n    --bs-alert-border-radius: 0.375rem;\n    position: relative;\n    padding: var(--bs-alert-padding-y) var(--bs-alert-padding-x);\n    margin-bottom: var(--bs-alert-margin-bottom);\n    color: var(--bs-alert-color);\n    background-color: var(--bs-alert-bg);\n    border: var(--bs-alert-border);\n    border-radius: var(--bs-alert-border-radius);\n}\n\n.alert-heading {\n    color: inherit;\n}\n\n.alert-link {\n    font-weight: 700;\n}\n\n.alert-dismissible {\n    padding-left: 3rem;\n}\n\n.alert-dismissible .btn-close {\n    position: absolute;\n    top: 0;\n    left: 0;\n    z-index: 2;\n    padding: 1.25rem 1rem;\n}\n\n.alert-primary {\n    --bs-alert-color: #084298;\n    --bs-alert-bg: #cfe2ff;\n    --bs-alert-border-color: #b6d4fe;\n}\n\n.alert-primary .alert-link {\n    color: #06357a;\n}\n\n.alert-secondary {\n    --bs-alert-color: #41464b;\n    --bs-alert-bg: #e2e3e5;\n    --bs-alert-border-color: #d3d6d8;\n}\n\n.alert-secondary .alert-link {\n    color: #34383c;\n}\n\n.alert-success {\n    --bs-alert-color: #0f5132;\n    --bs-alert-bg: #d1e7dd;\n    --bs-alert-border-color: #badbcc;\n}\n\n.alert-success .alert-link {\n    color: #0c4128;\n}\n\n.alert-info {\n    --bs-alert-color: #055160;\n    --bs-alert-bg: #cff4fc;\n    --bs-alert-border-color: #b6effb;\n}\n\n.alert-info .alert-link {\n    color: #04414d;\n}\n\n.alert-warning {\n    --bs-alert-color: #664d03;\n    --bs-alert-bg: #fff3cd;\n    --bs-alert-border-color: #ffecb5;\n}\n\n.alert-warning .alert-link {\n    color: #523e02;\n}\n\n.alert-danger {\n    --bs-alert-color: #842029;\n    --bs-alert-bg: #f8d7da;\n    --bs-alert-border-color: #f5c2c7;\n}\n\n.alert-danger .alert-link {\n    color: #6a1a21;\n}\n\n.alert-light {\n    --bs-alert-color: #636464;\n    --bs-alert-bg: #fefefe;\n    --bs-alert-border-color: #fdfdfe;\n}\n\n.alert-light .alert-link {\n    color: #4f5050;\n}\n\n.alert-dark {\n    --bs-alert-color: #141619;\n    --bs-alert-bg: #d3d3d4;\n    --bs-alert-border-color: #bcbebf;\n}\n\n.alert-dark .alert-link {\n    color: #101214;\n}\n\n@keyframes progress-bar-stripes {\n    0% {\n        background-position-x: 1rem;\n    }\n}\n\n.progress {\n    --bs-progress-height: 1rem;\n    --bs-progress-font-size: 0.75rem;\n    --bs-progress-bg: #e9ecef;\n    --bs-progress-border-radius: 0.375rem;\n    --bs-progress-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.075);\n    --bs-progress-bar-color: #fff;\n    --bs-progress-bar-bg: #0d6efd;\n    --bs-progress-bar-transition: width 0.6s ease;\n    display: flex;\n    height: var(--bs-progress-height);\n    overflow: hidden;\n    font-size: var(--bs-progress-font-size);\n    background-color: var(--bs-progress-bg);\n    border-radius: var(--bs-progress-border-radius);\n}\n\n.progress-bar {\n    display: flex;\n    flex-direction: column;\n    justify-content: center;\n    overflow: hidden;\n    color: var(--bs-progress-bar-color);\n    text-align: center;\n    white-space: nowrap;\n    background-color: var(--bs-progress-bar-bg);\n    transition: var(--bs-progress-bar-transition);\n}\n\n@media (prefers-reduced-motion: reduce) {\n    .progress-bar {\n        transition: none;\n    }\n}\n\n.progress-bar-striped {\n    background-image: linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n    background-size: var(--bs-progress-height) var(--bs-progress-height);\n}\n\n.progress-bar-animated {\n    animation: 1s linear infinite progress-bar-stripes;\n}\n\n@media (prefers-reduced-motion: reduce) {\n    .progress-bar-animated {\n        animation: none;\n    }\n}\n\n.list-group {\n    --bs-list-group-color: #212529;\n    --bs-list-group-bg: #fff;\n    --bs-list-group-border-color: rgba(0, 0, 0, 0.125);\n    --bs-list-group-border-width: 1px;\n    --bs-list-group-border-radius: 0.375rem;\n    --bs-list-group-item-padding-x: 1rem;\n    --bs-list-group-item-padding-y: 0.5rem;\n    --bs-list-group-action-color: #495057;\n    --bs-list-group-action-hover-color: #495057;\n    --bs-list-group-action-hover-bg: #f8f9fa;\n    --bs-list-group-action-active-color: #212529;\n    --bs-list-group-action-active-bg: #e9ecef;\n    --bs-list-group-disabled-color: #6c757d;\n    --bs-list-group-disabled-bg: #fff;\n    --bs-list-group-active-color: #fff;\n    --bs-list-group-active-bg: #0d6efd;\n    --bs-list-group-active-border-color: #0d6efd;\n    display: flex;\n    flex-direction: column;\n    padding-right: 0;\n    margin-bottom: 0;\n    border-radius: var(--bs-list-group-border-radius);\n}\n\n.list-group-numbered {\n    list-style-type: none;\n    counter-reset: section;\n}\n\n.list-group-numbered > .list-group-item::before {\n    content: counters(section, \".\") \". \";\n    counter-increment: section;\n}\n\n.list-group-item-action {\n    width: 100%;\n    color: var(--bs-list-group-action-color);\n    text-align: inherit;\n}\n\n.list-group-item-action:hover, .list-group-item-action:focus {\n    z-index: 1;\n    color: var(--bs-list-group-action-hover-color);\n    text-decoration: none;\n    background-color: var(--bs-list-group-action-hover-bg);\n}\n\n.list-group-item-action:active {\n    color: var(--bs-list-group-action-active-color);\n    background-color: var(--bs-list-group-action-active-bg);\n}\n\n.list-group-item {\n    position: relative;\n    display: block;\n    padding: var(--bs-list-group-item-padding-y) var(--bs-list-group-item-padding-x);\n    color: var(--bs-list-group-color);\n    text-decoration: none;\n    background-color: var(--bs-list-group-bg);\n    border: var(--bs-list-group-border-width) solid var(--bs-list-group-border-color);\n}\n\n.list-group-item:first-child {\n    border-top-right-radius: inherit;\n    border-top-left-radius: inherit;\n}\n\n.list-group-item:last-child {\n    border-bottom-left-radius: inherit;\n    border-bottom-right-radius: inherit;\n}\n\n.list-group-item.disabled, .list-group-item:disabled {\n    color: var(--bs-list-group-disabled-color);\n    pointer-events: none;\n    background-color: var(--bs-list-group-disabled-bg);\n}\n\n.list-group-item.active {\n    z-index: 2;\n    color: var(--bs-list-group-active-color);\n    background-color: var(--bs-list-group-active-bg);\n    border-color: var(--bs-list-group-active-border-color);\n}\n\n.list-group-item + .list-group-item {\n    border-top-width: 0;\n}\n\n.list-group-item + .list-group-item.active {\n    margin-top: calc(-1 * var(--bs-list-group-border-width));\n    border-top-width: var(--bs-list-group-border-width);\n}\n\n.list-group-horizontal {\n    flex-direction: row;\n}\n\n.list-group-horizontal > .list-group-item:first-child:not(:last-child) {\n    border-bottom-right-radius: var(--bs-list-group-border-radius);\n    border-top-left-radius: 0;\n}\n\n.list-group-horizontal > .list-group-item:last-child:not(:first-child) {\n    border-top-left-radius: var(--bs-list-group-border-radius);\n    border-bottom-right-radius: 0;\n}\n\n.list-group-horizontal > .list-group-item.active {\n    margin-top: 0;\n}\n\n.list-group-horizontal > .list-group-item + .list-group-item {\n    border-top-width: var(--bs-list-group-border-width);\n    border-right-width: 0;\n}\n\n.list-group-horizontal > .list-group-item + .list-group-item.active {\n    margin-right: calc(-1 * var(--bs-list-group-border-width));\n    border-right-width: var(--bs-list-group-border-width);\n}\n\n@media (min-width: 576px) {\n    .list-group-horizontal-sm {\n        flex-direction: row;\n    }\n\n    .list-group-horizontal-sm > .list-group-item:first-child:not(:last-child) {\n        border-bottom-right-radius: var(--bs-list-group-border-radius);\n        border-top-left-radius: 0;\n    }\n\n    .list-group-horizontal-sm > .list-group-item:last-child:not(:first-child) {\n        border-top-left-radius: var(--bs-list-group-border-radius);\n        border-bottom-right-radius: 0;\n    }\n\n    .list-group-horizontal-sm > .list-group-item.active {\n        margin-top: 0;\n    }\n\n    .list-group-horizontal-sm > .list-group-item + .list-group-item {\n        border-top-width: var(--bs-list-group-border-width);\n        border-right-width: 0;\n    }\n\n    .list-group-horizontal-sm > .list-group-item + .list-group-item.active {\n        margin-right: calc(-1 * var(--bs-list-group-border-width));\n        border-right-width: var(--bs-list-group-border-width);\n    }\n}\n\n@media (min-width: 768px) {\n    .list-group-horizontal-md {\n        flex-direction: row;\n    }\n\n    .list-group-horizontal-md > .list-group-item:first-child:not(:last-child) {\n        border-bottom-right-radius: var(--bs-list-group-border-radius);\n        border-top-left-radius: 0;\n    }\n\n    .list-group-horizontal-md > .list-group-item:last-child:not(:first-child) {\n        border-top-left-radius: var(--bs-list-group-border-radius);\n        border-bottom-right-radius: 0;\n    }\n\n    .list-group-horizontal-md > .list-group-item.active {\n        margin-top: 0;\n    }\n\n    .list-group-horizontal-md > .list-group-item + .list-group-item {\n        border-top-width: var(--bs-list-group-border-width);\n        border-right-width: 0;\n    }\n\n    .list-group-horizontal-md > .list-group-item + .list-group-item.active {\n        margin-right: calc(-1 * var(--bs-list-group-border-width));\n        border-right-width: var(--bs-list-group-border-width);\n    }\n}\n\n@media (min-width: 992px) {\n    .list-group-horizontal-lg {\n        flex-direction: row;\n    }\n\n    .list-group-horizontal-lg > .list-group-item:first-child:not(:last-child) {\n        border-bottom-right-radius: var(--bs-list-group-border-radius);\n        border-top-left-radius: 0;\n    }\n\n    .list-group-horizontal-lg > .list-group-item:last-child:not(:first-child) {\n        border-top-left-radius: var(--bs-list-group-border-radius);\n        border-bottom-right-radius: 0;\n    }\n\n    .list-group-horizontal-lg > .list-group-item.active {\n        margin-top: 0;\n    }\n\n    .list-group-horizontal-lg > .list-group-item + .list-group-item {\n        border-top-width: var(--bs-list-group-border-width);\n        border-right-width: 0;\n    }\n\n    .list-group-horizontal-lg > .list-group-item + .list-group-item.active {\n        margin-right: calc(-1 * var(--bs-list-group-border-width));\n        border-right-width: var(--bs-list-group-border-width);\n    }\n}\n\n@media (min-width: 1200px) {\n    .list-group-horizontal-xl {\n        flex-direction: row;\n    }\n\n    .list-group-horizontal-xl > .list-group-item:first-child:not(:last-child) {\n        border-bottom-right-radius: var(--bs-list-group-border-radius);\n        border-top-left-radius: 0;\n    }\n\n    .list-group-horizontal-xl > .list-group-item:last-child:not(:first-child) {\n        border-top-left-radius: var(--bs-list-group-border-radius);\n        border-bottom-right-radius: 0;\n    }\n\n    .list-group-horizontal-xl > .list-group-item.active {\n        margin-top: 0;\n    }\n\n    .list-group-horizontal-xl > .list-group-item + .list-group-item {\n        border-top-width: var(--bs-list-group-border-width);\n        border-right-width: 0;\n    }\n\n    .list-group-horizontal-xl > .list-group-item + .list-group-item.active {\n        margin-right: calc(-1 * var(--bs-list-group-border-width));\n        border-right-width: var(--bs-list-group-border-width);\n    }\n}\n\n@media (min-width: 1400px) {\n    .list-group-horizontal-xxl {\n        flex-direction: row;\n    }\n\n    .list-group-horizontal-xxl > .list-group-item:first-child:not(:last-child) {\n        border-bottom-right-radius: var(--bs-list-group-border-radius);\n        border-top-left-radius: 0;\n    }\n\n    .list-group-horizontal-xxl > .list-group-item:last-child:not(:first-child) {\n        border-top-left-radius: var(--bs-list-group-border-radius);\n        border-bottom-right-radius: 0;\n    }\n\n    .list-group-horizontal-xxl > .list-group-item.active {\n        margin-top: 0;\n    }\n\n    .list-group-horizontal-xxl > .list-group-item + .list-group-item {\n        border-top-width: var(--bs-list-group-border-width);\n        border-right-width: 0;\n    }\n\n    .list-group-horizontal-xxl > .list-group-item + .list-group-item.active {\n        margin-right: calc(-1 * var(--bs-list-group-border-width));\n        border-right-width: var(--bs-list-group-border-width);\n    }\n}\n\n.list-group-flush {\n    border-radius: 0;\n}\n\n.list-group-flush > .list-group-item {\n    border-width: 0 0 var(--bs-list-group-border-width);\n}\n\n.list-group-flush > .list-group-item:last-child {\n    border-bottom-width: 0;\n}\n\n.list-group-item-primary {\n    color: #084298;\n    background-color: #cfe2ff;\n}\n\n.list-group-item-primary.list-group-item-action:hover, .list-group-item-primary.list-group-item-action:focus {\n    color: #084298;\n    background-color: #bacbe6;\n}\n\n.list-group-item-primary.list-group-item-action.active {\n    color: #fff;\n    background-color: #084298;\n    border-color: #084298;\n}\n\n.list-group-item-secondary {\n    color: #41464b;\n    background-color: #e2e3e5;\n}\n\n.list-group-item-secondary.list-group-item-action:hover, .list-group-item-secondary.list-group-item-action:focus {\n    color: #41464b;\n    background-color: #cbccce;\n}\n\n.list-group-item-secondary.list-group-item-action.active {\n    color: #fff;\n    background-color: #41464b;\n    border-color: #41464b;\n}\n\n.list-group-item-success {\n    color: #0f5132;\n    background-color: #d1e7dd;\n}\n\n.list-group-item-success.list-group-item-action:hover, .list-group-item-success.list-group-item-action:focus {\n    color: #0f5132;\n    background-color: #bcd0c7;\n}\n\n.list-group-item-success.list-group-item-action.active {\n    color: #fff;\n    background-color: #0f5132;\n    border-color: #0f5132;\n}\n\n.list-group-item-info {\n    color: #055160;\n    background-color: #cff4fc;\n}\n\n.list-group-item-info.list-group-item-action:hover, .list-group-item-info.list-group-item-action:focus {\n    color: #055160;\n    background-color: #badce3;\n}\n\n.list-group-item-info.list-group-item-action.active {\n    color: #fff;\n    background-color: #055160;\n    border-color: #055160;\n}\n\n.list-group-item-warning {\n    color: #664d03;\n    background-color: #fff3cd;\n}\n\n.list-group-item-warning.list-group-item-action:hover, .list-group-item-warning.list-group-item-action:focus {\n    color: #664d03;\n    background-color: #e6dbb9;\n}\n\n.list-group-item-warning.list-group-item-action.active {\n    color: #fff;\n    background-color: #664d03;\n    border-color: #664d03;\n}\n\n.list-group-item-danger {\n    color: #842029;\n    background-color: #f8d7da;\n}\n\n.list-group-item-danger.list-group-item-action:hover, .list-group-item-danger.list-group-item-action:focus {\n    color: #842029;\n    background-color: #dfc2c4;\n}\n\n.list-group-item-danger.list-group-item-action.active {\n    color: #fff;\n    background-color: #842029;\n    border-color: #842029;\n}\n\n.list-group-item-light {\n    color: #636464;\n    background-color: #fefefe;\n}\n\n.list-group-item-light.list-group-item-action:hover, .list-group-item-light.list-group-item-action:focus {\n    color: #636464;\n    background-color: #e5e5e5;\n}\n\n.list-group-item-light.list-group-item-action.active {\n    color: #fff;\n    background-color: #636464;\n    border-color: #636464;\n}\n\n.list-group-item-dark {\n    color: #141619;\n    background-color: #d3d3d4;\n}\n\n.list-group-item-dark.list-group-item-action:hover, .list-group-item-dark.list-group-item-action:focus {\n    color: #141619;\n    background-color: #bebebf;\n}\n\n.list-group-item-dark.list-group-item-action.active {\n    color: #fff;\n    background-color: #141619;\n    border-color: #141619;\n}\n\n.btn-close {\n    box-sizing: content-box;\n    width: 1em;\n    height: 1em;\n    padding: 0.25em 0.25em;\n    color: #000;\n    background: transparent url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23000'%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\") center/1em auto no-repeat;\n    border: 0;\n    border-radius: 0.375rem;\n    opacity: 0.5;\n}\n\n.btn-close:hover {\n    color: #000;\n    text-decoration: none;\n    opacity: 0.75;\n}\n\n.btn-close:focus {\n    outline: 0;\n    box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n    opacity: 1;\n}\n\n.btn-close:disabled, .btn-close.disabled {\n    pointer-events: none;\n    -webkit-user-select: none;\n    -moz-user-select: none;\n    user-select: none;\n    opacity: 0.25;\n}\n\n.btn-close-white {\n    filter: invert(1) grayscale(100%) brightness(200%);\n}\n\n.toast {\n    --bs-toast-zindex: 1090;\n    --bs-toast-padding-x: 0.75rem;\n    --bs-toast-padding-y: 0.5rem;\n    --bs-toast-spacing: 1.5rem;\n    --bs-toast-max-width: 350px;\n    --bs-toast-font-size: 0.875rem;\n    --bs-toast-color: ;\n    --bs-toast-bg: rgba(255, 255, 255, 0.85);\n    --bs-toast-border-width: 1px;\n    --bs-toast-border-color: var(--bs-border-color-translucent);\n    --bs-toast-border-radius: 0.375rem;\n    --bs-toast-box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15);\n    --bs-toast-header-color: #6c757d;\n    --bs-toast-header-bg: rgba(255, 255, 255, 0.85);\n    --bs-toast-header-border-color: rgba(0, 0, 0, 0.05);\n    width: var(--bs-toast-max-width);\n    max-width: 100%;\n    font-size: var(--bs-toast-font-size);\n    color: var(--bs-toast-color);\n    pointer-events: auto;\n    background-color: var(--bs-toast-bg);\n    background-clip: padding-box;\n    border: var(--bs-toast-border-width) solid var(--bs-toast-border-color);\n    box-shadow: var(--bs-toast-box-shadow);\n    border-radius: var(--bs-toast-border-radius);\n}\n\n.toast.showing {\n    opacity: 0;\n}\n\n.toast:not(.show) {\n    display: none;\n}\n\n.toast-container {\n    --bs-toast-zindex: 1090;\n    position: absolute;\n    z-index: var(--bs-toast-zindex);\n    width: -webkit-max-content;\n    width: -moz-max-content;\n    width: max-content;\n    max-width: 100%;\n    pointer-events: none;\n}\n\n.toast-container > :not(:last-child) {\n    margin-bottom: var(--bs-toast-spacing);\n}\n\n.toast-header {\n    display: flex;\n    align-items: center;\n    padding: var(--bs-toast-padding-y) var(--bs-toast-padding-x);\n    color: var(--bs-toast-header-color);\n    background-color: var(--bs-toast-header-bg);\n    background-clip: padding-box;\n    border-bottom: var(--bs-toast-border-width) solid var(--bs-toast-header-border-color);\n    border-top-right-radius: calc(var(--bs-toast-border-radius) - var(--bs-toast-border-width));\n    border-top-left-radius: calc(var(--bs-toast-border-radius) - var(--bs-toast-border-width));\n}\n\n.toast-header .btn-close {\n    margin-left: calc(-0.5 * var(--bs-toast-padding-x));\n    margin-right: var(--bs-toast-padding-x);\n}\n\n.toast-body {\n    padding: var(--bs-toast-padding-x);\n    word-wrap: break-word;\n}\n\n.modal {\n    --bs-modal-zindex: 1055;\n    --bs-modal-width: 500px;\n    --bs-modal-padding: 1rem;\n    --bs-modal-margin: 0.5rem;\n    --bs-modal-color: ;\n    --bs-modal-bg: #fff;\n    --bs-modal-border-color: var(--bs-border-color-translucent);\n    --bs-modal-border-width: 1px;\n    --bs-modal-border-radius: 0.5rem;\n    --bs-modal-box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075);\n    --bs-modal-inner-border-radius: calc(0.5rem - 1px);\n    --bs-modal-header-padding-x: 1rem;\n    --bs-modal-header-padding-y: 1rem;\n    --bs-modal-header-padding: 1rem 1rem;\n    --bs-modal-header-border-color: var(--bs-border-color);\n    --bs-modal-header-border-width: 1px;\n    --bs-modal-title-line-height: 1.5;\n    --bs-modal-footer-gap: 0.5rem;\n    --bs-modal-footer-bg: ;\n    --bs-modal-footer-border-color: var(--bs-border-color);\n    --bs-modal-footer-border-width: 1px;\n    position: fixed;\n    top: 0;\n    right: 0;\n    z-index: var(--bs-modal-zindex);\n    display: none;\n    width: 100%;\n    height: 100%;\n    overflow-x: hidden;\n    overflow-y: auto;\n    outline: 0;\n}\n\n.modal-dialog {\n    position: relative;\n    width: auto;\n    margin: var(--bs-modal-margin);\n    pointer-events: none;\n}\n\n.modal.fade .modal-dialog {\n    transition: transform 0.3s ease-out;\n    transform: translate(0, -50px);\n}\n\n@media (prefers-reduced-motion: reduce) {\n    .modal.fade .modal-dialog {\n        transition: none;\n    }\n}\n\n.modal.show .modal-dialog {\n    transform: none;\n}\n\n.modal.modal-static .modal-dialog {\n    transform: scale(1.02);\n}\n\n.modal-dialog-scrollable {\n    height: calc(100% - var(--bs-modal-margin) * 2);\n}\n\n.modal-dialog-scrollable .modal-content {\n    max-height: 100%;\n    overflow: hidden;\n}\n\n.modal-dialog-scrollable .modal-body {\n    overflow-y: auto;\n}\n\n.modal-dialog-centered {\n    display: flex;\n    align-items: center;\n    min-height: calc(100% - var(--bs-modal-margin) * 2);\n}\n\n.modal-content {\n    position: relative;\n    display: flex;\n    flex-direction: column;\n    width: 100%;\n    color: var(--bs-modal-color);\n    pointer-events: auto;\n    background-color: var(--bs-modal-bg);\n    background-clip: padding-box;\n    border: var(--bs-modal-border-width) solid var(--bs-modal-border-color);\n    border-radius: var(--bs-modal-border-radius);\n    outline: 0;\n}\n\n.modal-backdrop {\n    --bs-backdrop-zindex: 1050;\n    --bs-backdrop-bg: #000;\n    --bs-backdrop-opacity: 0.5;\n    position: fixed;\n    top: 0;\n    right: 0;\n    z-index: var(--bs-backdrop-zindex);\n    width: 100vw;\n    height: 100vh;\n    background-color: var(--bs-backdrop-bg);\n}\n\n.modal-backdrop.fade {\n    opacity: 0;\n}\n\n.modal-backdrop.show {\n    opacity: var(--bs-backdrop-opacity);\n}\n\n.modal-header {\n    display: flex;\n    flex-shrink: 0;\n    align-items: center;\n    justify-content: space-between;\n    padding: var(--bs-modal-header-padding);\n    border-bottom: var(--bs-modal-header-border-width) solid var(--bs-modal-header-border-color);\n    border-top-right-radius: var(--bs-modal-inner-border-radius);\n    border-top-left-radius: var(--bs-modal-inner-border-radius);\n}\n\n.modal-header .btn-close {\n    padding: calc(var(--bs-modal-header-padding-y) * 0.5) calc(var(--bs-modal-header-padding-x) * 0.5);\n    margin: calc(-0.5 * var(--bs-modal-header-padding-y)) auto calc(-0.5 * var(--bs-modal-header-padding-y)) calc(-0.5 * var(--bs-modal-header-padding-x));\n}\n\n.modal-title {\n    margin-bottom: 0;\n    line-height: var(--bs-modal-title-line-height);\n}\n\n.modal-body {\n    position: relative;\n    flex: 1 1 auto;\n    padding: var(--bs-modal-padding);\n}\n\n.modal-footer {\n    display: flex;\n    flex-shrink: 0;\n    flex-wrap: wrap;\n    align-items: center;\n    justify-content: flex-end;\n    padding: calc(var(--bs-modal-padding) - var(--bs-modal-footer-gap) * 0.5);\n    background-color: var(--bs-modal-footer-bg);\n    border-top: var(--bs-modal-footer-border-width) solid var(--bs-modal-footer-border-color);\n    border-bottom-left-radius: var(--bs-modal-inner-border-radius);\n    border-bottom-right-radius: var(--bs-modal-inner-border-radius);\n}\n\n.modal-footer > * {\n    margin: calc(var(--bs-modal-footer-gap) * 0.5);\n}\n\n@media (min-width: 576px) {\n    .modal {\n        --bs-modal-margin: 1.75rem;\n        --bs-modal-box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15);\n    }\n\n    .modal-dialog {\n        max-width: var(--bs-modal-width);\n        margin-left: auto;\n        margin-right: auto;\n    }\n\n    .modal-sm {\n        --bs-modal-width: 300px;\n    }\n}\n\n@media (min-width: 992px) {\n    .modal-lg,\n    .modal-xl {\n        --bs-modal-width: 800px;\n    }\n}\n\n@media (min-width: 1200px) {\n    .modal-xl {\n        --bs-modal-width: 1140px;\n    }\n}\n\n.modal-fullscreen {\n    width: 100vw;\n    max-width: none;\n    height: 100%;\n    margin: 0;\n}\n\n.modal-fullscreen .modal-content {\n    height: 100%;\n    border: 0;\n    border-radius: 0;\n}\n\n.modal-fullscreen .modal-header,\n.modal-fullscreen .modal-footer {\n    border-radius: 0;\n}\n\n.modal-fullscreen .modal-body {\n    overflow-y: auto;\n}\n\n@media (max-width: 575.98px) {\n    .modal-fullscreen-sm-down {\n        width: 100vw;\n        max-width: none;\n        height: 100%;\n        margin: 0;\n    }\n\n    .modal-fullscreen-sm-down .modal-content {\n        height: 100%;\n        border: 0;\n        border-radius: 0;\n    }\n\n    .modal-fullscreen-sm-down .modal-header,\n    .modal-fullscreen-sm-down .modal-footer {\n        border-radius: 0;\n    }\n\n    .modal-fullscreen-sm-down .modal-body {\n        overflow-y: auto;\n    }\n}\n\n@media (max-width: 767.98px) {\n    .modal-fullscreen-md-down {\n        width: 100vw;\n        max-width: none;\n        height: 100%;\n        margin: 0;\n    }\n\n    .modal-fullscreen-md-down .modal-content {\n        height: 100%;\n        border: 0;\n        border-radius: 0;\n    }\n\n    .modal-fullscreen-md-down .modal-header,\n    .modal-fullscreen-md-down .modal-footer {\n        border-radius: 0;\n    }\n\n    .modal-fullscreen-md-down .modal-body {\n        overflow-y: auto;\n    }\n}\n\n@media (max-width: 991.98px) {\n    .modal-fullscreen-lg-down {\n        width: 100vw;\n        max-width: none;\n        height: 100%;\n        margin: 0;\n    }\n\n    .modal-fullscreen-lg-down .modal-content {\n        height: 100%;\n        border: 0;\n        border-radius: 0;\n    }\n\n    .modal-fullscreen-lg-down .modal-header,\n    .modal-fullscreen-lg-down .modal-footer {\n        border-radius: 0;\n    }\n\n    .modal-fullscreen-lg-down .modal-body {\n        overflow-y: auto;\n    }\n}\n\n@media (max-width: 1199.98px) {\n    .modal-fullscreen-xl-down {\n        width: 100vw;\n        max-width: none;\n        height: 100%;\n        margin: 0;\n    }\n\n    .modal-fullscreen-xl-down .modal-content {\n        height: 100%;\n        border: 0;\n        border-radius: 0;\n    }\n\n    .modal-fullscreen-xl-down .modal-header,\n    .modal-fullscreen-xl-down .modal-footer {\n        border-radius: 0;\n    }\n\n    .modal-fullscreen-xl-down .modal-body {\n        overflow-y: auto;\n    }\n}\n\n@media (max-width: 1399.98px) {\n    .modal-fullscreen-xxl-down {\n        width: 100vw;\n        max-width: none;\n        height: 100%;\n        margin: 0;\n    }\n\n    .modal-fullscreen-xxl-down .modal-content {\n        height: 100%;\n        border: 0;\n        border-radius: 0;\n    }\n\n    .modal-fullscreen-xxl-down .modal-header,\n    .modal-fullscreen-xxl-down .modal-footer {\n        border-radius: 0;\n    }\n\n    .modal-fullscreen-xxl-down .modal-body {\n        overflow-y: auto;\n    }\n}\n\n.tooltip {\n    --bs-tooltip-zindex: 1080;\n    --bs-tooltip-max-width: 200px;\n    --bs-tooltip-padding-x: 0.5rem;\n    --bs-tooltip-padding-y: 0.25rem;\n    --bs-tooltip-margin: ;\n    --bs-tooltip-font-size: 0.875rem;\n    --bs-tooltip-color: #fff;\n    --bs-tooltip-bg: #000;\n    --bs-tooltip-border-radius: 0.375rem;\n    --bs-tooltip-opacity: 0.9;\n    --bs-tooltip-arrow-width: 0.8rem;\n    --bs-tooltip-arrow-height: 0.4rem;\n    z-index: var(--bs-tooltip-zindex);\n    display: block;\n    padding: var(--bs-tooltip-arrow-height);\n    margin: var(--bs-tooltip-margin);\n    font-family: var(--bs-font-sans-serif);\n    font-style: normal;\n    font-weight: 400;\n    line-height: 1.5;\n    text-align: right;\n    text-align: start;\n    text-decoration: none;\n    text-shadow: none;\n    text-transform: none;\n    letter-spacing: normal;\n    word-break: normal;\n    white-space: normal;\n    word-spacing: normal;\n    line-break: auto;\n    font-size: var(--bs-tooltip-font-size);\n    word-wrap: break-word;\n    opacity: 0;\n}\n\n.tooltip.show {\n    opacity: var(--bs-tooltip-opacity);\n}\n\n.tooltip .tooltip-arrow {\n    display: block;\n    width: var(--bs-tooltip-arrow-width);\n    height: var(--bs-tooltip-arrow-height);\n}\n\n.tooltip .tooltip-arrow::before {\n    position: absolute;\n    content: \"\";\n    border-color: transparent;\n    border-style: solid;\n}\n\n.bs-tooltip-top .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow {\n    bottom: 0;\n}\n\n.bs-tooltip-top .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow::before {\n    top: -1px;\n    border-width: var(--bs-tooltip-arrow-height) calc(var(--bs-tooltip-arrow-width) * 0.5) 0;\n    border-top-color: var(--bs-tooltip-bg);\n}\n\n.bs-tooltip-end .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow {\n    left: 0;\n    width: var(--bs-tooltip-arrow-height);\n    height: var(--bs-tooltip-arrow-width);\n}\n\n.bs-tooltip-end .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow::before {\n    right: -1px;\n    border-width: calc(var(--bs-tooltip-arrow-width) * 0.5) var(--bs-tooltip-arrow-height) calc(var(--bs-tooltip-arrow-width) * 0.5) 0;\n    border-right-color: var(--bs-tooltip-bg);\n}\n\n.bs-tooltip-bottom .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow {\n    top: 0;\n}\n\n.bs-tooltip-bottom .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow::before {\n    bottom: -1px;\n    border-width: 0 calc(var(--bs-tooltip-arrow-width) * 0.5) var(--bs-tooltip-arrow-height);\n    border-bottom-color: var(--bs-tooltip-bg);\n}\n\n.bs-tooltip-start .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow {\n    right: 0;\n    width: var(--bs-tooltip-arrow-height);\n    height: var(--bs-tooltip-arrow-width);\n}\n\n.bs-tooltip-start .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow::before {\n    left: -1px;\n    border-width: calc(var(--bs-tooltip-arrow-width) * 0.5) 0 calc(var(--bs-tooltip-arrow-width) * 0.5) var(--bs-tooltip-arrow-height);\n    border-left-color: var(--bs-tooltip-bg);\n}\n\n.tooltip-inner {\n    max-width: var(--bs-tooltip-max-width);\n    padding: var(--bs-tooltip-padding-y) var(--bs-tooltip-padding-x);\n    color: var(--bs-tooltip-color);\n    text-align: center;\n    background-color: var(--bs-tooltip-bg);\n    border-radius: var(--bs-tooltip-border-radius);\n}\n\n.popover {\n    --bs-popover-zindex: 1070;\n    --bs-popover-max-width: 276px;\n    --bs-popover-font-size: 0.875rem;\n    --bs-popover-bg: #fff;\n    --bs-popover-border-width: 1px;\n    --bs-popover-border-color: var(--bs-border-color-translucent);\n    --bs-popover-border-radius: 0.5rem;\n    --bs-popover-inner-border-radius: calc(0.5rem - 1px);\n    --bs-popover-box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15);\n    --bs-popover-header-padding-x: 1rem;\n    --bs-popover-header-padding-y: 0.5rem;\n    --bs-popover-header-font-size: 1rem;\n    --bs-popover-header-color: ;\n    --bs-popover-header-bg: #f0f0f0;\n    --bs-popover-body-padding-x: 1rem;\n    --bs-popover-body-padding-y: 1rem;\n    --bs-popover-body-color: #212529;\n    --bs-popover-arrow-width: 1rem;\n    --bs-popover-arrow-height: 0.5rem;\n    --bs-popover-arrow-border: var(--bs-popover-border-color);\n    z-index: var(--bs-popover-zindex);\n    display: block;\n    max-width: var(--bs-popover-max-width);\n    font-family: var(--bs-font-sans-serif);\n    font-style: normal;\n    font-weight: 400;\n    line-height: 1.5;\n    text-align: right;\n    text-align: start;\n    text-decoration: none;\n    text-shadow: none;\n    text-transform: none;\n    letter-spacing: normal;\n    word-break: normal;\n    white-space: normal;\n    word-spacing: normal;\n    line-break: auto;\n    font-size: var(--bs-popover-font-size);\n    word-wrap: break-word;\n    background-color: var(--bs-popover-bg);\n    background-clip: padding-box;\n    border: var(--bs-popover-border-width) solid var(--bs-popover-border-color);\n    border-radius: var(--bs-popover-border-radius);\n}\n\n.popover .popover-arrow {\n    display: block;\n    width: var(--bs-popover-arrow-width);\n    height: var(--bs-popover-arrow-height);\n}\n\n.popover .popover-arrow::before, .popover .popover-arrow::after {\n    position: absolute;\n    display: block;\n    content: \"\";\n    border-color: transparent;\n    border-style: solid;\n    border-width: 0;\n}\n\n.bs-popover-top > .popover-arrow, .bs-popover-auto[data-popper-placement^=top] > .popover-arrow {\n    bottom: calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width));\n}\n\n.bs-popover-top > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=top] > .popover-arrow::before, .bs-popover-top > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=top] > .popover-arrow::after {\n    border-width: var(--bs-popover-arrow-height) calc(var(--bs-popover-arrow-width) * 0.5) 0;\n}\n\n.bs-popover-top > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=top] > .popover-arrow::before {\n    bottom: 0;\n    border-top-color: var(--bs-popover-arrow-border);\n}\n\n.bs-popover-top > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=top] > .popover-arrow::after {\n    bottom: var(--bs-popover-border-width);\n    border-top-color: var(--bs-popover-bg);\n}\n\n.bs-popover-end > .popover-arrow, .bs-popover-auto[data-popper-placement^=right] > .popover-arrow {\n    left: calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width));\n    width: var(--bs-popover-arrow-height);\n    height: var(--bs-popover-arrow-width);\n}\n\n.bs-popover-end > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=right] > .popover-arrow::before, .bs-popover-end > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=right] > .popover-arrow::after {\n    border-width: calc(var(--bs-popover-arrow-width) * 0.5) var(--bs-popover-arrow-height) calc(var(--bs-popover-arrow-width) * 0.5) 0;\n}\n\n.bs-popover-end > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=right] > .popover-arrow::before {\n    left: 0;\n    border-right-color: var(--bs-popover-arrow-border);\n}\n\n.bs-popover-end > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=right] > .popover-arrow::after {\n    left: var(--bs-popover-border-width);\n    border-right-color: var(--bs-popover-bg);\n}\n\n.bs-popover-bottom > .popover-arrow, .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow {\n    top: calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width));\n}\n\n.bs-popover-bottom > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow::before, .bs-popover-bottom > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow::after {\n    border-width: 0 calc(var(--bs-popover-arrow-width) * 0.5) var(--bs-popover-arrow-height);\n}\n\n.bs-popover-bottom > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow::before {\n    top: 0;\n    border-bottom-color: var(--bs-popover-arrow-border);\n}\n\n.bs-popover-bottom > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow::after {\n    top: var(--bs-popover-border-width);\n    border-bottom-color: var(--bs-popover-bg);\n}\n\n.bs-popover-bottom .popover-header::before, .bs-popover-auto[data-popper-placement^=bottom] .popover-header::before {\n    position: absolute;\n    top: 0;\n    right: 50%;\n    display: block;\n    width: var(--bs-popover-arrow-width);\n    margin-right: calc(-0.5 * var(--bs-popover-arrow-width));\n    content: \"\";\n    border-bottom: var(--bs-popover-border-width) solid var(--bs-popover-header-bg);\n}\n\n.bs-popover-start > .popover-arrow, .bs-popover-auto[data-popper-placement^=left] > .popover-arrow {\n    right: calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width));\n    width: var(--bs-popover-arrow-height);\n    height: var(--bs-popover-arrow-width);\n}\n\n.bs-popover-start > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=left] > .popover-arrow::before, .bs-popover-start > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=left] > .popover-arrow::after {\n    border-width: calc(var(--bs-popover-arrow-width) * 0.5) 0 calc(var(--bs-popover-arrow-width) * 0.5) var(--bs-popover-arrow-height);\n}\n\n.bs-popover-start > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=left] > .popover-arrow::before {\n    right: 0;\n    border-left-color: var(--bs-popover-arrow-border);\n}\n\n.bs-popover-start > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=left] > .popover-arrow::after {\n    right: var(--bs-popover-border-width);\n    border-left-color: var(--bs-popover-bg);\n}\n\n.popover-header {\n    padding: var(--bs-popover-header-padding-y) var(--bs-popover-header-padding-x);\n    margin-bottom: 0;\n    font-size: var(--bs-popover-header-font-size);\n    color: var(--bs-popover-header-color);\n    background-color: var(--bs-popover-header-bg);\n    border-bottom: var(--bs-popover-border-width) solid var(--bs-popover-border-color);\n    border-top-right-radius: var(--bs-popover-inner-border-radius);\n    border-top-left-radius: var(--bs-popover-inner-border-radius);\n}\n\n.popover-header:empty {\n    display: none;\n}\n\n.popover-body {\n    padding: var(--bs-popover-body-padding-y) var(--bs-popover-body-padding-x);\n    color: var(--bs-popover-body-color);\n}\n\n.carousel {\n    position: relative;\n}\n\n.carousel.pointer-event {\n    touch-action: pan-y;\n}\n\n.carousel-inner {\n    position: relative;\n    width: 100%;\n    overflow: hidden;\n}\n\n.carousel-inner::after {\n    display: block;\n    clear: both;\n    content: \"\";\n}\n\n.carousel-item {\n    position: relative;\n    display: none;\n    float: right;\n    width: 100%;\n    margin-left: -100%;\n    -webkit-backface-visibility: hidden;\n    backface-visibility: hidden;\n    transition: transform 0.6s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n    .carousel-item {\n        transition: none;\n    }\n}\n\n.carousel-item.active,\n.carousel-item-next,\n.carousel-item-prev {\n    display: block;\n}\n\n.carousel-item-next:not(.carousel-item-start),\n.active.carousel-item-end {\n    transform: translateX(-100%);\n}\n\n.carousel-item-prev:not(.carousel-item-end),\n.active.carousel-item-start {\n    transform: translateX(100%);\n}\n\n.carousel-fade .carousel-item {\n    opacity: 0;\n    transition-property: opacity;\n    transform: none;\n}\n\n.carousel-fade .carousel-item.active,\n.carousel-fade .carousel-item-next.carousel-item-start,\n.carousel-fade .carousel-item-prev.carousel-item-end {\n    z-index: 1;\n    opacity: 1;\n}\n\n.carousel-fade .active.carousel-item-start,\n.carousel-fade .active.carousel-item-end {\n    z-index: 0;\n    opacity: 0;\n    transition: opacity 0s 0.6s;\n}\n\n@media (prefers-reduced-motion: reduce) {\n    .carousel-fade .active.carousel-item-start,\n    .carousel-fade .active.carousel-item-end {\n        transition: none;\n    }\n}\n\n.carousel-control-prev,\n.carousel-control-next {\n    position: absolute;\n    top: 0;\n    bottom: 0;\n    z-index: 1;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    width: 15%;\n    padding: 0;\n    color: #fff;\n    text-align: center;\n    background: none;\n    border: 0;\n    opacity: 0.5;\n    transition: opacity 0.15s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n    .carousel-control-prev,\n    .carousel-control-next {\n        transition: none;\n    }\n}\n\n.carousel-control-prev:hover, .carousel-control-prev:focus,\n.carousel-control-next:hover,\n.carousel-control-next:focus {\n    color: #fff;\n    text-decoration: none;\n    outline: 0;\n    opacity: 0.9;\n}\n\n.carousel-control-prev {\n    right: 0;\n}\n\n.carousel-control-next {\n    left: 0;\n}\n\n.carousel-control-prev-icon,\n.carousel-control-next-icon {\n    display: inline-block;\n    width: 2rem;\n    height: 2rem;\n    background-repeat: no-repeat;\n    background-position: 50%;\n    background-size: 100% 100%;\n}\n\n.carousel-control-next-icon {\n    background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0z'/%3e%3c/svg%3e\");\n}\n\n.carousel-control-prev-icon {\n    background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e\");\n}\n\n.carousel-indicators {\n    position: absolute;\n    left: 0;\n    bottom: 0;\n    right: 0;\n    z-index: 2;\n    display: flex;\n    justify-content: center;\n    padding: 0;\n    margin-left: 15%;\n    margin-bottom: 1rem;\n    margin-right: 15%;\n    list-style: none;\n}\n\n.carousel-indicators [data-bs-target] {\n    box-sizing: content-box;\n    flex: 0 1 auto;\n    width: 30px;\n    height: 3px;\n    padding: 0;\n    margin-left: 3px;\n    margin-right: 3px;\n    text-indent: -999px;\n    cursor: pointer;\n    background-color: #fff;\n    background-clip: padding-box;\n    border: 0;\n    border-top: 10px solid transparent;\n    border-bottom: 10px solid transparent;\n    opacity: 0.5;\n    transition: opacity 0.6s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n    .carousel-indicators [data-bs-target] {\n        transition: none;\n    }\n}\n\n.carousel-indicators .active {\n    opacity: 1;\n}\n\n.carousel-caption {\n    position: absolute;\n    left: 15%;\n    bottom: 1.25rem;\n    right: 15%;\n    padding-top: 1.25rem;\n    padding-bottom: 1.25rem;\n    color: #fff;\n    text-align: center;\n}\n\n.carousel-dark .carousel-control-next-icon,\n.carousel-dark .carousel-control-prev-icon {\n    filter: invert(1) grayscale(100);\n}\n\n.carousel-dark .carousel-indicators [data-bs-target] {\n    background-color: #000;\n}\n\n.carousel-dark .carousel-caption {\n    color: #000;\n}\n\n.spinner-grow,\n.spinner-border {\n    display: inline-block;\n    width: var(--bs-spinner-width);\n    height: var(--bs-spinner-height);\n    vertical-align: var(--bs-spinner-vertical-align);\n    border-radius: 50%;\n    animation: var(--bs-spinner-animation-speed) linear infinite var(--bs-spinner-animation-name);\n}\n\n@keyframes spinner-border {\n    to {\n        transform: rotate(360deg);\n    }\n}\n\n.spinner-border {\n    --bs-spinner-width: 2rem;\n    --bs-spinner-height: 2rem;\n    --bs-spinner-vertical-align: -0.125em;\n    --bs-spinner-border-width: 0.25em;\n    --bs-spinner-animation-speed: 0.75s;\n    --bs-spinner-animation-name: spinner-border;\n    border: var(--bs-spinner-border-width) solid currentcolor;\n    border-left-color: transparent;\n}\n\n.spinner-border-sm {\n    --bs-spinner-width: 1rem;\n    --bs-spinner-height: 1rem;\n    --bs-spinner-border-width: 0.2em;\n}\n\n@keyframes spinner-grow {\n    0% {\n        transform: scale(0);\n    }\n    50% {\n        opacity: 1;\n        transform: none;\n    }\n}\n\n.spinner-grow {\n    --bs-spinner-width: 2rem;\n    --bs-spinner-height: 2rem;\n    --bs-spinner-vertical-align: -0.125em;\n    --bs-spinner-animation-speed: 0.75s;\n    --bs-spinner-animation-name: spinner-grow;\n    background-color: currentcolor;\n    opacity: 0;\n}\n\n.spinner-grow-sm {\n    --bs-spinner-width: 1rem;\n    --bs-spinner-height: 1rem;\n}\n\n@media (prefers-reduced-motion: reduce) {\n    .spinner-border,\n    .spinner-grow {\n        --bs-spinner-animation-speed: 1.5s;\n    }\n}\n\n.offcanvas, .offcanvas-xxl, .offcanvas-xl, .offcanvas-lg, .offcanvas-md, .offcanvas-sm {\n    --bs-offcanvas-zindex: 1045;\n    --bs-offcanvas-width: 400px;\n    --bs-offcanvas-height: 30vh;\n    --bs-offcanvas-padding-x: 1rem;\n    --bs-offcanvas-padding-y: 1rem;\n    --bs-offcanvas-color: ;\n    --bs-offcanvas-bg: #fff;\n    --bs-offcanvas-border-width: 1px;\n    --bs-offcanvas-border-color: var(--bs-border-color-translucent);\n    --bs-offcanvas-box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075);\n}\n\n@media (max-width: 575.98px) {\n    .offcanvas-sm {\n        position: fixed;\n        bottom: 0;\n        z-index: var(--bs-offcanvas-zindex);\n        display: flex;\n        flex-direction: column;\n        max-width: 100%;\n        color: var(--bs-offcanvas-color);\n        visibility: hidden;\n        background-color: var(--bs-offcanvas-bg);\n        background-clip: padding-box;\n        outline: 0;\n        transition: transform 0.3s ease-in-out;\n    }\n}\n\n@media (max-width: 575.98px) and (prefers-reduced-motion: reduce) {\n    .offcanvas-sm {\n        transition: none;\n    }\n}\n\n@media (max-width: 575.98px) {\n    .offcanvas-sm.offcanvas-start {\n        top: 0;\n        right: 0;\n        width: var(--bs-offcanvas-width);\n        border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n        transform: translateX(100%);\n    }\n}\n\n@media (max-width: 575.98px) {\n    .offcanvas-sm.offcanvas-end {\n        top: 0;\n        left: 0;\n        width: var(--bs-offcanvas-width);\n        border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n        transform: translateX(-100%);\n    }\n}\n\n@media (max-width: 575.98px) {\n    .offcanvas-sm.offcanvas-top {\n        top: 0;\n        left: 0;\n        right: 0;\n        height: var(--bs-offcanvas-height);\n        max-height: 100%;\n        border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n        transform: translateY(-100%);\n    }\n}\n\n@media (max-width: 575.98px) {\n    .offcanvas-sm.offcanvas-bottom {\n        left: 0;\n        right: 0;\n        height: var(--bs-offcanvas-height);\n        max-height: 100%;\n        border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n        transform: translateY(100%);\n    }\n}\n\n@media (max-width: 575.98px) {\n    .offcanvas-sm.showing, .offcanvas-sm.show:not(.hiding) {\n        transform: none;\n    }\n}\n\n@media (max-width: 575.98px) {\n    .offcanvas-sm.showing, .offcanvas-sm.hiding, .offcanvas-sm.show {\n        visibility: visible;\n    }\n}\n\n@media (min-width: 576px) {\n    .offcanvas-sm {\n        --bs-offcanvas-height: auto;\n        --bs-offcanvas-border-width: 0;\n        background-color: transparent !important;\n    }\n\n    .offcanvas-sm .offcanvas-header {\n        display: none;\n    }\n\n    .offcanvas-sm .offcanvas-body {\n        display: flex;\n        flex-grow: 0;\n        padding: 0;\n        overflow-y: visible;\n        background-color: transparent !important;\n    }\n}\n\n@media (max-width: 767.98px) {\n    .offcanvas-md {\n        position: fixed;\n        bottom: 0;\n        z-index: var(--bs-offcanvas-zindex);\n        display: flex;\n        flex-direction: column;\n        max-width: 100%;\n        color: var(--bs-offcanvas-color);\n        visibility: hidden;\n        background-color: var(--bs-offcanvas-bg);\n        background-clip: padding-box;\n        outline: 0;\n        transition: transform 0.3s ease-in-out;\n    }\n}\n\n@media (max-width: 767.98px) and (prefers-reduced-motion: reduce) {\n    .offcanvas-md {\n        transition: none;\n    }\n}\n\n@media (max-width: 767.98px) {\n    .offcanvas-md.offcanvas-start {\n        top: 0;\n        right: 0;\n        width: var(--bs-offcanvas-width);\n        border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n        transform: translateX(100%);\n    }\n}\n\n@media (max-width: 767.98px) {\n    .offcanvas-md.offcanvas-end {\n        top: 0;\n        left: 0;\n        width: var(--bs-offcanvas-width);\n        border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n        transform: translateX(-100%);\n    }\n}\n\n@media (max-width: 767.98px) {\n    .offcanvas-md.offcanvas-top {\n        top: 0;\n        left: 0;\n        right: 0;\n        height: var(--bs-offcanvas-height);\n        max-height: 100%;\n        border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n        transform: translateY(-100%);\n    }\n}\n\n@media (max-width: 767.98px) {\n    .offcanvas-md.offcanvas-bottom {\n        left: 0;\n        right: 0;\n        height: var(--bs-offcanvas-height);\n        max-height: 100%;\n        border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n        transform: translateY(100%);\n    }\n}\n\n@media (max-width: 767.98px) {\n    .offcanvas-md.showing, .offcanvas-md.show:not(.hiding) {\n        transform: none;\n    }\n}\n\n@media (max-width: 767.98px) {\n    .offcanvas-md.showing, .offcanvas-md.hiding, .offcanvas-md.show {\n        visibility: visible;\n    }\n}\n\n@media (min-width: 768px) {\n    .offcanvas-md {\n        --bs-offcanvas-height: auto;\n        --bs-offcanvas-border-width: 0;\n        background-color: transparent !important;\n    }\n\n    .offcanvas-md .offcanvas-header {\n        display: none;\n    }\n\n    .offcanvas-md .offcanvas-body {\n        display: flex;\n        flex-grow: 0;\n        padding: 0;\n        overflow-y: visible;\n        background-color: transparent !important;\n    }\n}\n\n@media (max-width: 991.98px) {\n    .offcanvas-lg {\n        position: fixed;\n        bottom: 0;\n        z-index: var(--bs-offcanvas-zindex);\n        display: flex;\n        flex-direction: column;\n        max-width: 100%;\n        color: var(--bs-offcanvas-color);\n        visibility: hidden;\n        background-color: var(--bs-offcanvas-bg);\n        background-clip: padding-box;\n        outline: 0;\n        transition: transform 0.3s ease-in-out;\n    }\n}\n\n@media (max-width: 991.98px) and (prefers-reduced-motion: reduce) {\n    .offcanvas-lg {\n        transition: none;\n    }\n}\n\n@media (max-width: 991.98px) {\n    .offcanvas-lg.offcanvas-start {\n        top: 0;\n        right: 0;\n        width: var(--bs-offcanvas-width);\n        border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n        transform: translateX(100%);\n    }\n}\n\n@media (max-width: 991.98px) {\n    .offcanvas-lg.offcanvas-end {\n        top: 0;\n        left: 0;\n        width: var(--bs-offcanvas-width);\n        border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n        transform: translateX(-100%);\n    }\n}\n\n@media (max-width: 991.98px) {\n    .offcanvas-lg.offcanvas-top {\n        top: 0;\n        left: 0;\n        right: 0;\n        height: var(--bs-offcanvas-height);\n        max-height: 100%;\n        border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n        transform: translateY(-100%);\n    }\n}\n\n@media (max-width: 991.98px) {\n    .offcanvas-lg.offcanvas-bottom {\n        left: 0;\n        right: 0;\n        height: var(--bs-offcanvas-height);\n        max-height: 100%;\n        border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n        transform: translateY(100%);\n    }\n}\n\n@media (max-width: 991.98px) {\n    .offcanvas-lg.showing, .offcanvas-lg.show:not(.hiding) {\n        transform: none;\n    }\n}\n\n@media (max-width: 991.98px) {\n    .offcanvas-lg.showing, .offcanvas-lg.hiding, .offcanvas-lg.show {\n        visibility: visible;\n    }\n}\n\n@media (min-width: 992px) {\n    .offcanvas-lg {\n        --bs-offcanvas-height: auto;\n        --bs-offcanvas-border-width: 0;\n        background-color: transparent !important;\n    }\n\n    .offcanvas-lg .offcanvas-header {\n        display: none;\n    }\n\n    .offcanvas-lg .offcanvas-body {\n        display: flex;\n        flex-grow: 0;\n        padding: 0;\n        overflow-y: visible;\n        background-color: transparent !important;\n    }\n}\n\n@media (max-width: 1199.98px) {\n    .offcanvas-xl {\n        position: fixed;\n        bottom: 0;\n        z-index: var(--bs-offcanvas-zindex);\n        display: flex;\n        flex-direction: column;\n        max-width: 100%;\n        color: var(--bs-offcanvas-color);\n        visibility: hidden;\n        background-color: var(--bs-offcanvas-bg);\n        background-clip: padding-box;\n        outline: 0;\n        transition: transform 0.3s ease-in-out;\n    }\n}\n\n@media (max-width: 1199.98px) and (prefers-reduced-motion: reduce) {\n    .offcanvas-xl {\n        transition: none;\n    }\n}\n\n@media (max-width: 1199.98px) {\n    .offcanvas-xl.offcanvas-start {\n        top: 0;\n        right: 0;\n        width: var(--bs-offcanvas-width);\n        border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n        transform: translateX(100%);\n    }\n}\n\n@media (max-width: 1199.98px) {\n    .offcanvas-xl.offcanvas-end {\n        top: 0;\n        left: 0;\n        width: var(--bs-offcanvas-width);\n        border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n        transform: translateX(-100%);\n    }\n}\n\n@media (max-width: 1199.98px) {\n    .offcanvas-xl.offcanvas-top {\n        top: 0;\n        left: 0;\n        right: 0;\n        height: var(--bs-offcanvas-height);\n        max-height: 100%;\n        border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n        transform: translateY(-100%);\n    }\n}\n\n@media (max-width: 1199.98px) {\n    .offcanvas-xl.offcanvas-bottom {\n        left: 0;\n        right: 0;\n        height: var(--bs-offcanvas-height);\n        max-height: 100%;\n        border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n        transform: translateY(100%);\n    }\n}\n\n@media (max-width: 1199.98px) {\n    .offcanvas-xl.showing, .offcanvas-xl.show:not(.hiding) {\n        transform: none;\n    }\n}\n\n@media (max-width: 1199.98px) {\n    .offcanvas-xl.showing, .offcanvas-xl.hiding, .offcanvas-xl.show {\n        visibility: visible;\n    }\n}\n\n@media (min-width: 1200px) {\n    .offcanvas-xl {\n        --bs-offcanvas-height: auto;\n        --bs-offcanvas-border-width: 0;\n        background-color: transparent !important;\n    }\n\n    .offcanvas-xl .offcanvas-header {\n        display: none;\n    }\n\n    .offcanvas-xl .offcanvas-body {\n        display: flex;\n        flex-grow: 0;\n        padding: 0;\n        overflow-y: visible;\n        background-color: transparent !important;\n    }\n}\n\n@media (max-width: 1399.98px) {\n    .offcanvas-xxl {\n        position: fixed;\n        bottom: 0;\n        z-index: var(--bs-offcanvas-zindex);\n        display: flex;\n        flex-direction: column;\n        max-width: 100%;\n        color: var(--bs-offcanvas-color);\n        visibility: hidden;\n        background-color: var(--bs-offcanvas-bg);\n        background-clip: padding-box;\n        outline: 0;\n        transition: transform 0.3s ease-in-out;\n    }\n}\n\n@media (max-width: 1399.98px) and (prefers-reduced-motion: reduce) {\n    .offcanvas-xxl {\n        transition: none;\n    }\n}\n\n@media (max-width: 1399.98px) {\n    .offcanvas-xxl.offcanvas-start {\n        top: 0;\n        right: 0;\n        width: var(--bs-offcanvas-width);\n        border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n        transform: translateX(100%);\n    }\n}\n\n@media (max-width: 1399.98px) {\n    .offcanvas-xxl.offcanvas-end {\n        top: 0;\n        left: 0;\n        width: var(--bs-offcanvas-width);\n        border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n        transform: translateX(-100%);\n    }\n}\n\n@media (max-width: 1399.98px) {\n    .offcanvas-xxl.offcanvas-top {\n        top: 0;\n        left: 0;\n        right: 0;\n        height: var(--bs-offcanvas-height);\n        max-height: 100%;\n        border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n        transform: translateY(-100%);\n    }\n}\n\n@media (max-width: 1399.98px) {\n    .offcanvas-xxl.offcanvas-bottom {\n        left: 0;\n        right: 0;\n        height: var(--bs-offcanvas-height);\n        max-height: 100%;\n        border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n        transform: translateY(100%);\n    }\n}\n\n@media (max-width: 1399.98px) {\n    .offcanvas-xxl.showing, .offcanvas-xxl.show:not(.hiding) {\n        transform: none;\n    }\n}\n\n@media (max-width: 1399.98px) {\n    .offcanvas-xxl.showing, .offcanvas-xxl.hiding, .offcanvas-xxl.show {\n        visibility: visible;\n    }\n}\n\n@media (min-width: 1400px) {\n    .offcanvas-xxl {\n        --bs-offcanvas-height: auto;\n        --bs-offcanvas-border-width: 0;\n        background-color: transparent !important;\n    }\n\n    .offcanvas-xxl .offcanvas-header {\n        display: none;\n    }\n\n    .offcanvas-xxl .offcanvas-body {\n        display: flex;\n        flex-grow: 0;\n        padding: 0;\n        overflow-y: visible;\n        background-color: transparent !important;\n    }\n}\n\n.offcanvas {\n    position: fixed;\n    bottom: 0;\n    z-index: var(--bs-offcanvas-zindex);\n    display: flex;\n    flex-direction: column;\n    max-width: 100%;\n    color: var(--bs-offcanvas-color);\n    visibility: hidden;\n    background-color: var(--bs-offcanvas-bg);\n    background-clip: padding-box;\n    outline: 0;\n    transition: transform 0.3s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n    .offcanvas {\n        transition: none;\n    }\n}\n\n.offcanvas.offcanvas-start {\n    top: 0;\n    right: 0;\n    width: var(--bs-offcanvas-width);\n    border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n    transform: translateX(100%);\n}\n\n.offcanvas.offcanvas-end {\n    top: 0;\n    left: 0;\n    width: var(--bs-offcanvas-width);\n    border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n    transform: translateX(-100%);\n}\n\n.offcanvas.offcanvas-top {\n    top: 0;\n    left: 0;\n    right: 0;\n    height: var(--bs-offcanvas-height);\n    max-height: 100%;\n    border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n    transform: translateY(-100%);\n}\n\n.offcanvas.offcanvas-bottom {\n    left: 0;\n    right: 0;\n    height: var(--bs-offcanvas-height);\n    max-height: 100%;\n    border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n    transform: translateY(100%);\n}\n\n.offcanvas.showing, .offcanvas.show:not(.hiding) {\n    transform: none;\n}\n\n.offcanvas.showing, .offcanvas.hiding, .offcanvas.show {\n    visibility: visible;\n}\n\n.offcanvas-backdrop {\n    position: fixed;\n    top: 0;\n    right: 0;\n    z-index: 1040;\n    width: 100vw;\n    height: 100vh;\n    background-color: #000;\n}\n\n.offcanvas-backdrop.fade {\n    opacity: 0;\n}\n\n.offcanvas-backdrop.show {\n    opacity: 0.5;\n}\n\n.offcanvas-header {\n    display: flex;\n    align-items: center;\n    justify-content: space-between;\n    padding: var(--bs-offcanvas-padding-y) var(--bs-offcanvas-padding-x);\n}\n\n.offcanvas-header .btn-close {\n    padding: calc(var(--bs-offcanvas-padding-y) * 0.5) calc(var(--bs-offcanvas-padding-x) * 0.5);\n    margin-top: calc(-0.5 * var(--bs-offcanvas-padding-y));\n    margin-left: calc(-0.5 * var(--bs-offcanvas-padding-x));\n    margin-bottom: calc(-0.5 * var(--bs-offcanvas-padding-y));\n}\n\n.offcanvas-title {\n    margin-bottom: 0;\n    line-height: 1.5;\n}\n\n.offcanvas-body {\n    flex-grow: 1;\n    padding: var(--bs-offcanvas-padding-y) var(--bs-offcanvas-padding-x);\n    overflow-y: auto;\n}\n\n.placeholder {\n    display: inline-block;\n    min-height: 1em;\n    vertical-align: middle;\n    cursor: wait;\n    background-color: currentcolor;\n    opacity: 0.5;\n}\n\n.placeholder.btn::before {\n    display: inline-block;\n    content: \"\";\n}\n\n.placeholder-xs {\n    min-height: 0.6em;\n}\n\n.placeholder-sm {\n    min-height: 0.8em;\n}\n\n.placeholder-lg {\n    min-height: 1.2em;\n}\n\n.placeholder-glow .placeholder {\n    animation: placeholder-glow 2s ease-in-out infinite;\n}\n\n@keyframes placeholder-glow {\n    50% {\n        opacity: 0.2;\n    }\n}\n\n.placeholder-wave {\n    -webkit-mask-image: linear-gradient(130deg, #000 55%, rgba(0, 0, 0, 0.8) 75%, #000 95%);\n    mask-image: linear-gradient(130deg, #000 55%, rgba(0, 0, 0, 0.8) 75%, #000 95%);\n    -webkit-mask-size: 200% 100%;\n    mask-size: 200% 100%;\n    animation: placeholder-wave 2s linear infinite;\n}\n\n@keyframes placeholder-wave {\n    100% {\n        -webkit-mask-position: -200% 0%;\n        mask-position: -200% 0%;\n    }\n}\n\n.clearfix::after {\n    display: block;\n    clear: both;\n    content: \"\";\n}\n\n.text-bg-primary {\n    color: #fff !important;\n    background-color: RGBA(13, 110, 253, var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-secondary {\n    color: #fff !important;\n    background-color: RGBA(108, 117, 125, var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-success {\n    color: #fff !important;\n    background-color: RGBA(25, 135, 84, var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-info {\n    color: #000 !important;\n    background-color: RGBA(13, 202, 240, var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-warning {\n    color: #000 !important;\n    background-color: RGBA(255, 193, 7, var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-danger {\n    color: #fff !important;\n    background-color: RGBA(220, 53, 69, var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-light {\n    color: #000 !important;\n    background-color: RGBA(248, 249, 250, var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-dark {\n    color: #fff !important;\n    background-color: RGBA(33, 37, 41, var(--bs-bg-opacity, 1)) !important;\n}\n\n.link-primary {\n    color: #0d6efd !important;\n}\n\n.link-primary:hover, .link-primary:focus {\n    color: #0a58ca !important;\n}\n\n.link-secondary {\n    color: #6c757d !important;\n}\n\n.link-secondary:hover, .link-secondary:focus {\n    color: #565e64 !important;\n}\n\n.link-success {\n    color: #198754 !important;\n}\n\n.link-success:hover, .link-success:focus {\n    color: #146c43 !important;\n}\n\n.link-info {\n    color: #0dcaf0 !important;\n}\n\n.link-info:hover, .link-info:focus {\n    color: #3dd5f3 !important;\n}\n\n.link-warning {\n    color: #ffc107 !important;\n}\n\n.link-warning:hover, .link-warning:focus {\n    color: #ffcd39 !important;\n}\n\n.link-danger {\n    color: #dc3545 !important;\n}\n\n.link-danger:hover, .link-danger:focus {\n    color: #b02a37 !important;\n}\n\n.link-light {\n    color: #f8f9fa !important;\n}\n\n.link-light:hover, .link-light:focus {\n    color: #f9fafb !important;\n}\n\n.link-dark {\n    color: #212529 !important;\n}\n\n.link-dark:hover, .link-dark:focus {\n    color: #1a1e21 !important;\n}\n\n.ratio {\n    position: relative;\n    width: 100%;\n}\n\n.ratio::before {\n    display: block;\n    padding-top: var(--bs-aspect-ratio);\n    content: \"\";\n}\n\n.ratio > * {\n    position: absolute;\n    top: 0;\n    right: 0;\n    width: 100%;\n    height: 100%;\n}\n\n.ratio-1x1 {\n    --bs-aspect-ratio: 100%;\n}\n\n.ratio-4x3 {\n    --bs-aspect-ratio: 75%;\n}\n\n.ratio-16x9 {\n    --bs-aspect-ratio: 56.25%;\n}\n\n.ratio-21x9 {\n    --bs-aspect-ratio: 42.8571428571%;\n}\n\n.fixed-top {\n    position: fixed;\n    top: 0;\n    left: 0;\n    right: 0;\n    z-index: 1030;\n}\n\n.fixed-bottom {\n    position: fixed;\n    left: 0;\n    bottom: 0;\n    right: 0;\n    z-index: 1030;\n}\n\n.sticky-top {\n    position: -webkit-sticky;\n    position: sticky;\n    top: 0;\n    z-index: 1020;\n}\n\n.sticky-bottom {\n    position: -webkit-sticky;\n    position: sticky;\n    bottom: 0;\n    z-index: 1020;\n}\n\n@media (min-width: 576px) {\n    .sticky-sm-top {\n        position: -webkit-sticky;\n        position: sticky;\n        top: 0;\n        z-index: 1020;\n    }\n\n    .sticky-sm-bottom {\n        position: -webkit-sticky;\n        position: sticky;\n        bottom: 0;\n        z-index: 1020;\n    }\n}\n\n@media (min-width: 768px) {\n    .sticky-md-top {\n        position: -webkit-sticky;\n        position: sticky;\n        top: 0;\n        z-index: 1020;\n    }\n\n    .sticky-md-bottom {\n        position: -webkit-sticky;\n        position: sticky;\n        bottom: 0;\n        z-index: 1020;\n    }\n}\n\n@media (min-width: 992px) {\n    .sticky-lg-top {\n        position: -webkit-sticky;\n        position: sticky;\n        top: 0;\n        z-index: 1020;\n    }\n\n    .sticky-lg-bottom {\n        position: -webkit-sticky;\n        position: sticky;\n        bottom: 0;\n        z-index: 1020;\n    }\n}\n\n@media (min-width: 1200px) {\n    .sticky-xl-top {\n        position: -webkit-sticky;\n        position: sticky;\n        top: 0;\n        z-index: 1020;\n    }\n\n    .sticky-xl-bottom {\n        position: -webkit-sticky;\n        position: sticky;\n        bottom: 0;\n        z-index: 1020;\n    }\n}\n\n@media (min-width: 1400px) {\n    .sticky-xxl-top {\n        position: -webkit-sticky;\n        position: sticky;\n        top: 0;\n        z-index: 1020;\n    }\n\n    .sticky-xxl-bottom {\n        position: -webkit-sticky;\n        position: sticky;\n        bottom: 0;\n        z-index: 1020;\n    }\n}\n\n.hstack {\n    display: flex;\n    flex-direction: row;\n    align-items: center;\n    align-self: stretch;\n}\n\n.vstack {\n    display: flex;\n    flex: 1 1 auto;\n    flex-direction: column;\n    align-self: stretch;\n}\n\n.visually-hidden,\n.visually-hidden-focusable:not(:focus):not(:focus-within) {\n    position: absolute !important;\n    width: 1px !important;\n    height: 1px !important;\n    padding: 0 !important;\n    margin: -1px !important;\n    overflow: hidden !important;\n    clip: rect(0, 0, 0, 0) !important;\n    white-space: nowrap !important;\n    border: 0 !important;\n}\n\n.stretched-link::after {\n    position: absolute;\n    top: 0;\n    left: 0;\n    bottom: 0;\n    right: 0;\n    z-index: 1;\n    content: \"\";\n}\n\n.text-truncate {\n    overflow: hidden;\n    text-overflow: ellipsis;\n    white-space: nowrap;\n}\n\n.vr {\n    display: inline-block;\n    align-self: stretch;\n    width: 1px;\n    min-height: 1em;\n    background-color: currentcolor;\n    opacity: 0.25;\n}\n\n.align-baseline {\n    vertical-align: baseline !important;\n}\n\n.align-top {\n    vertical-align: top !important;\n}\n\n.align-middle {\n    vertical-align: middle !important;\n}\n\n.align-bottom {\n    vertical-align: bottom !important;\n}\n\n.align-text-bottom {\n    vertical-align: text-bottom !important;\n}\n\n.align-text-top {\n    vertical-align: text-top !important;\n}\n\n.float-start {\n    float: right !important;\n}\n\n.float-end {\n    float: left !important;\n}\n\n.float-none {\n    float: none !important;\n}\n\n.opacity-0 {\n    opacity: 0 !important;\n}\n\n.opacity-25 {\n    opacity: 0.25 !important;\n}\n\n.opacity-50 {\n    opacity: 0.5 !important;\n}\n\n.opacity-75 {\n    opacity: 0.75 !important;\n}\n\n.opacity-100 {\n    opacity: 1 !important;\n}\n\n.overflow-auto {\n    overflow: auto !important;\n}\n\n.overflow-hidden {\n    overflow: hidden !important;\n}\n\n.overflow-visible {\n    overflow: visible !important;\n}\n\n.overflow-scroll {\n    overflow: scroll !important;\n}\n\n.d-inline {\n    display: inline !important;\n}\n\n.d-inline-block {\n    display: inline-block !important;\n}\n\n.d-block {\n    display: block !important;\n}\n\n.d-grid {\n    display: grid !important;\n}\n\n.d-table {\n    display: table !important;\n}\n\n.d-table-row {\n    display: table-row !important;\n}\n\n.d-table-cell {\n    display: table-cell !important;\n}\n\n.d-flex {\n    display: flex !important;\n}\n\n.d-inline-flex {\n    display: inline-flex !important;\n}\n\n.d-none {\n    display: none !important;\n}\n\n.shadow {\n    box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15) !important;\n}\n\n.shadow-sm {\n    box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075) !important;\n}\n\n.shadow-lg {\n    box-shadow: 0 1rem 3rem rgba(0, 0, 0, 0.175) !important;\n}\n\n.shadow-none {\n    box-shadow: none !important;\n}\n\n.position-static {\n    position: static !important;\n}\n\n.position-relative {\n    position: relative !important;\n}\n\n.position-absolute {\n    position: absolute !important;\n}\n\n.position-fixed {\n    position: fixed !important;\n}\n\n.position-sticky {\n    position: -webkit-sticky !important;\n    position: sticky !important;\n}\n\n.top-0 {\n    top: 0 !important;\n}\n\n.top-50 {\n    top: 50% !important;\n}\n\n.top-100 {\n    top: 100% !important;\n}\n\n.bottom-0 {\n    bottom: 0 !important;\n}\n\n.bottom-50 {\n    bottom: 50% !important;\n}\n\n.bottom-100 {\n    bottom: 100% !important;\n}\n\n.start-0 {\n    right: 0 !important;\n}\n\n.start-50 {\n    right: 50% !important;\n}\n\n.start-100 {\n    right: 100% !important;\n}\n\n.end-0 {\n    left: 0 !important;\n}\n\n.end-50 {\n    left: 50% !important;\n}\n\n.end-100 {\n    left: 100% !important;\n}\n\n.translate-middle {\n    transform: translate(50%, -50%) !important;\n}\n\n.translate-middle-x {\n    transform: translateX(50%) !important;\n}\n\n.translate-middle-y {\n    transform: translateY(-50%) !important;\n}\n\n.border {\n    border: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important;\n}\n\n.border-0 {\n    border: 0 !important;\n}\n\n.border-top {\n    border-top: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important;\n}\n\n.border-top-0 {\n    border-top: 0 !important;\n}\n\n.border-end {\n    border-left: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important;\n}\n\n.border-end-0 {\n    border-left: 0 !important;\n}\n\n.border-bottom {\n    border-bottom: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important;\n}\n\n.border-bottom-0 {\n    border-bottom: 0 !important;\n}\n\n.border-start {\n    border-right: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important;\n}\n\n.border-start-0 {\n    border-right: 0 !important;\n}\n\n.border-primary {\n    --bs-border-opacity: 1;\n    border-color: rgba(var(--bs-primary-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-secondary {\n    --bs-border-opacity: 1;\n    border-color: rgba(var(--bs-secondary-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-success {\n    --bs-border-opacity: 1;\n    border-color: rgba(var(--bs-success-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-info {\n    --bs-border-opacity: 1;\n    border-color: rgba(var(--bs-info-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-warning {\n    --bs-border-opacity: 1;\n    border-color: rgba(var(--bs-warning-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-danger {\n    --bs-border-opacity: 1;\n    border-color: rgba(var(--bs-danger-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-light {\n    --bs-border-opacity: 1;\n    border-color: rgba(var(--bs-light-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-dark {\n    --bs-border-opacity: 1;\n    border-color: rgba(var(--bs-dark-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-white {\n    --bs-border-opacity: 1;\n    border-color: rgba(var(--bs-white-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-1 {\n    --bs-border-width: 1px;\n}\n\n.border-2 {\n    --bs-border-width: 2px;\n}\n\n.border-3 {\n    --bs-border-width: 3px;\n}\n\n.border-4 {\n    --bs-border-width: 4px;\n}\n\n.border-5 {\n    --bs-border-width: 5px;\n}\n\n.border-opacity-10 {\n    --bs-border-opacity: 0.1;\n}\n\n.border-opacity-25 {\n    --bs-border-opacity: 0.25;\n}\n\n.border-opacity-50 {\n    --bs-border-opacity: 0.5;\n}\n\n.border-opacity-75 {\n    --bs-border-opacity: 0.75;\n}\n\n.border-opacity-100 {\n    --bs-border-opacity: 1;\n}\n\n.w-25 {\n    width: 25% !important;\n}\n\n.w-50 {\n    width: 50% !important;\n}\n\n.w-75 {\n    width: 75% !important;\n}\n\n.w-100 {\n    width: 100% !important;\n}\n\n.w-auto {\n    width: auto !important;\n}\n\n.mw-100 {\n    max-width: 100% !important;\n}\n\n.vw-100 {\n    width: 100vw !important;\n}\n\n.min-vw-100 {\n    min-width: 100vw !important;\n}\n\n.h-25 {\n    height: 25% !important;\n}\n\n.h-50 {\n    height: 50% !important;\n}\n\n.h-75 {\n    height: 75% !important;\n}\n\n.h-100 {\n    height: 100% !important;\n}\n\n.h-auto {\n    height: auto !important;\n}\n\n.mh-100 {\n    max-height: 100% !important;\n}\n\n.vh-100 {\n    height: 100vh !important;\n}\n\n.min-vh-100 {\n    min-height: 100vh !important;\n}\n\n.flex-fill {\n    flex: 1 1 auto !important;\n}\n\n.flex-row {\n    flex-direction: row !important;\n}\n\n.flex-column {\n    flex-direction: column !important;\n}\n\n.flex-row-reverse {\n    flex-direction: row-reverse !important;\n}\n\n.flex-column-reverse {\n    flex-direction: column-reverse !important;\n}\n\n.flex-grow-0 {\n    flex-grow: 0 !important;\n}\n\n.flex-grow-1 {\n    flex-grow: 1 !important;\n}\n\n.flex-shrink-0 {\n    flex-shrink: 0 !important;\n}\n\n.flex-shrink-1 {\n    flex-shrink: 1 !important;\n}\n\n.flex-wrap {\n    flex-wrap: wrap !important;\n}\n\n.flex-nowrap {\n    flex-wrap: nowrap !important;\n}\n\n.flex-wrap-reverse {\n    flex-wrap: wrap-reverse !important;\n}\n\n.justify-content-start {\n    justify-content: flex-start !important;\n}\n\n.justify-content-end {\n    justify-content: flex-end !important;\n}\n\n.justify-content-center {\n    justify-content: center !important;\n}\n\n.justify-content-between {\n    justify-content: space-between !important;\n}\n\n.justify-content-around {\n    justify-content: space-around !important;\n}\n\n.justify-content-evenly {\n    justify-content: space-evenly !important;\n}\n\n.align-items-start {\n    align-items: flex-start !important;\n}\n\n.align-items-end {\n    align-items: flex-end !important;\n}\n\n.align-items-center {\n    align-items: center !important;\n}\n\n.align-items-baseline {\n    align-items: baseline !important;\n}\n\n.align-items-stretch {\n    align-items: stretch !important;\n}\n\n.align-content-start {\n    align-content: flex-start !important;\n}\n\n.align-content-end {\n    align-content: flex-end !important;\n}\n\n.align-content-center {\n    align-content: center !important;\n}\n\n.align-content-between {\n    align-content: space-between !important;\n}\n\n.align-content-around {\n    align-content: space-around !important;\n}\n\n.align-content-stretch {\n    align-content: stretch !important;\n}\n\n.align-self-auto {\n    align-self: auto !important;\n}\n\n.align-self-start {\n    align-self: flex-start !important;\n}\n\n.align-self-end {\n    align-self: flex-end !important;\n}\n\n.align-self-center {\n    align-self: center !important;\n}\n\n.align-self-baseline {\n    align-self: baseline !important;\n}\n\n.align-self-stretch {\n    align-self: stretch !important;\n}\n\n.order-first {\n    order: -1 !important;\n}\n\n.order-0 {\n    order: 0 !important;\n}\n\n.order-1 {\n    order: 1 !important;\n}\n\n.order-2 {\n    order: 2 !important;\n}\n\n.order-3 {\n    order: 3 !important;\n}\n\n.order-4 {\n    order: 4 !important;\n}\n\n.order-5 {\n    order: 5 !important;\n}\n\n.order-last {\n    order: 6 !important;\n}\n\n.m-0 {\n    margin: 0 !important;\n}\n\n.m-1 {\n    margin: 0.25rem !important;\n}\n\n.m-2 {\n    margin: 0.5rem !important;\n}\n\n.m-3 {\n    margin: 1rem !important;\n}\n\n.m-4 {\n    margin: 1.5rem !important;\n}\n\n.m-5 {\n    margin: 3rem !important;\n}\n\n.m-auto {\n    margin: auto !important;\n}\n\n.mx-0 {\n    margin-left: 0 !important;\n    margin-right: 0 !important;\n}\n\n.mx-1 {\n    margin-left: 0.25rem !important;\n    margin-right: 0.25rem !important;\n}\n\n.mx-2 {\n    margin-left: 0.5rem !important;\n    margin-right: 0.5rem !important;\n}\n\n.mx-3 {\n    margin-left: 1rem !important;\n    margin-right: 1rem !important;\n}\n\n.mx-4 {\n    margin-left: 1.5rem !important;\n    margin-right: 1.5rem !important;\n}\n\n.mx-5 {\n    margin-left: 3rem !important;\n    margin-right: 3rem !important;\n}\n\n.mx-auto {\n    margin-left: auto !important;\n    margin-right: auto !important;\n}\n\n.my-0 {\n    margin-top: 0 !important;\n    margin-bottom: 0 !important;\n}\n\n.my-1 {\n    margin-top: 0.25rem !important;\n    margin-bottom: 0.25rem !important;\n}\n\n.my-2 {\n    margin-top: 0.5rem !important;\n    margin-bottom: 0.5rem !important;\n}\n\n.my-3 {\n    margin-top: 1rem !important;\n    margin-bottom: 1rem !important;\n}\n\n.my-4 {\n    margin-top: 1.5rem !important;\n    margin-bottom: 1.5rem !important;\n}\n\n.my-5 {\n    margin-top: 3rem !important;\n    margin-bottom: 3rem !important;\n}\n\n.my-auto {\n    margin-top: auto !important;\n    margin-bottom: auto !important;\n}\n\n.mt-0 {\n    margin-top: 0 !important;\n}\n\n.mt-1 {\n    margin-top: 0.25rem !important;\n}\n\n.mt-2 {\n    margin-top: 0.5rem !important;\n}\n\n.mt-3 {\n    margin-top: 1rem !important;\n}\n\n.mt-4 {\n    margin-top: 1.5rem !important;\n}\n\n.mt-5 {\n    margin-top: 3rem !important;\n}\n\n.mt-auto {\n    margin-top: auto !important;\n}\n\n.me-0 {\n    margin-left: 0 !important;\n}\n\n.me-1 {\n    margin-left: 0.25rem !important;\n}\n\n.me-2 {\n    margin-left: 0.5rem !important;\n}\n\n.me-3 {\n    margin-left: 1rem !important;\n}\n\n.me-4 {\n    margin-left: 1.5rem !important;\n}\n\n.me-5 {\n    margin-left: 3rem !important;\n}\n\n.me-auto {\n    margin-left: auto !important;\n}\n\n.mb-0 {\n    margin-bottom: 0 !important;\n}\n\n.mb-1 {\n    margin-bottom: 0.25rem !important;\n}\n\n.mb-2 {\n    margin-bottom: 0.5rem !important;\n}\n\n.mb-3 {\n    margin-bottom: 1rem !important;\n}\n\n.mb-4 {\n    margin-bottom: 1.5rem !important;\n}\n\n.mb-5 {\n    margin-bottom: 3rem !important;\n}\n\n.mb-auto {\n    margin-bottom: auto !important;\n}\n\n.ms-0 {\n    margin-right: 0 !important;\n}\n\n.ms-1 {\n    margin-right: 0.25rem !important;\n}\n\n.ms-2 {\n    margin-right: 0.5rem !important;\n}\n\n.ms-3 {\n    margin-right: 1rem !important;\n}\n\n.ms-4 {\n    margin-right: 1.5rem !important;\n}\n\n.ms-5 {\n    margin-right: 3rem !important;\n}\n\n.ms-auto {\n    margin-right: auto !important;\n}\n\n.p-0 {\n    padding: 0 !important;\n}\n\n.p-1 {\n    padding: 0.25rem !important;\n}\n\n.p-2 {\n    padding: 0.5rem !important;\n}\n\n.p-3 {\n    padding: 1rem !important;\n}\n\n.p-4 {\n    padding: 1.5rem !important;\n}\n\n.p-5 {\n    padding: 3rem !important;\n}\n\n.px-0 {\n    padding-left: 0 !important;\n    padding-right: 0 !important;\n}\n\n.px-1 {\n    padding-left: 0.25rem !important;\n    padding-right: 0.25rem !important;\n}\n\n.px-2 {\n    padding-left: 0.5rem !important;\n    padding-right: 0.5rem !important;\n}\n\n.px-3 {\n    padding-left: 1rem !important;\n    padding-right: 1rem !important;\n}\n\n.px-4 {\n    padding-left: 1.5rem !important;\n    padding-right: 1.5rem !important;\n}\n\n.px-5 {\n    padding-left: 3rem !important;\n    padding-right: 3rem !important;\n}\n\n.py-0 {\n    padding-top: 0 !important;\n    padding-bottom: 0 !important;\n}\n\n.py-1 {\n    padding-top: 0.25rem !important;\n    padding-bottom: 0.25rem !important;\n}\n\n.py-2 {\n    padding-top: 0.5rem !important;\n    padding-bottom: 0.5rem !important;\n}\n\n.py-3 {\n    padding-top: 1rem !important;\n    padding-bottom: 1rem !important;\n}\n\n.py-4 {\n    padding-top: 1.5rem !important;\n    padding-bottom: 1.5rem !important;\n}\n\n.py-5 {\n    padding-top: 3rem !important;\n    padding-bottom: 3rem !important;\n}\n\n.pt-0 {\n    padding-top: 0 !important;\n}\n\n.pt-1 {\n    padding-top: 0.25rem !important;\n}\n\n.pt-2 {\n    padding-top: 0.5rem !important;\n}\n\n.pt-3 {\n    padding-top: 1rem !important;\n}\n\n.pt-4 {\n    padding-top: 1.5rem !important;\n}\n\n.pt-5 {\n    padding-top: 3rem !important;\n}\n\n.pe-0 {\n    padding-left: 0 !important;\n}\n\n.pe-1 {\n    padding-left: 0.25rem !important;\n}\n\n.pe-2 {\n    padding-left: 0.5rem !important;\n}\n\n.pe-3 {\n    padding-left: 1rem !important;\n}\n\n.pe-4 {\n    padding-left: 1.5rem !important;\n}\n\n.pe-5 {\n    padding-left: 3rem !important;\n}\n\n.pb-0 {\n    padding-bottom: 0 !important;\n}\n\n.pb-1 {\n    padding-bottom: 0.25rem !important;\n}\n\n.pb-2 {\n    padding-bottom: 0.5rem !important;\n}\n\n.pb-3 {\n    padding-bottom: 1rem !important;\n}\n\n.pb-4 {\n    padding-bottom: 1.5rem !important;\n}\n\n.pb-5 {\n    padding-bottom: 3rem !important;\n}\n\n.ps-0 {\n    padding-right: 0 !important;\n}\n\n.ps-1 {\n    padding-right: 0.25rem !important;\n}\n\n.ps-2 {\n    padding-right: 0.5rem !important;\n}\n\n.ps-3 {\n    padding-right: 1rem !important;\n}\n\n.ps-4 {\n    padding-right: 1.5rem !important;\n}\n\n.ps-5 {\n    padding-right: 3rem !important;\n}\n\n.gap-0 {\n    gap: 0 !important;\n}\n\n.gap-1 {\n    gap: 0.25rem !important;\n}\n\n.gap-2 {\n    gap: 0.5rem !important;\n}\n\n.gap-3 {\n    gap: 1rem !important;\n}\n\n.gap-4 {\n    gap: 1.5rem !important;\n}\n\n.gap-5 {\n    gap: 3rem !important;\n}\n\n.font-monospace {\n    font-family: var(--bs-font-monospace) !important;\n}\n\n.fs-1 {\n    font-size: calc(1.375rem + 1.5vw) !important;\n}\n\n.fs-2 {\n    font-size: calc(1.325rem + 0.9vw) !important;\n}\n\n.fs-3 {\n    font-size: calc(1.3rem + 0.6vw) !important;\n}\n\n.fs-4 {\n    font-size: calc(1.275rem + 0.3vw) !important;\n}\n\n.fs-5 {\n    font-size: 1.25rem !important;\n}\n\n.fs-6 {\n    font-size: 1rem !important;\n}\n\n.fst-italic {\n    font-style: italic !important;\n}\n\n.fst-normal {\n    font-style: normal !important;\n}\n\n.fw-light {\n    font-weight: 300 !important;\n}\n\n.fw-lighter {\n    font-weight: lighter !important;\n}\n\n.fw-normal {\n    font-weight: 400 !important;\n}\n\n.fw-bold {\n    font-weight: 700 !important;\n}\n\n.fw-semibold {\n    font-weight: 600 !important;\n}\n\n.fw-bolder {\n    font-weight: bolder !important;\n}\n\n.lh-1 {\n    line-height: 1 !important;\n}\n\n.lh-sm {\n    line-height: 1.25 !important;\n}\n\n.lh-base {\n    line-height: 1.5 !important;\n}\n\n.lh-lg {\n    line-height: 2 !important;\n}\n\n.text-start {\n    text-align: right !important;\n}\n\n.text-end {\n    text-align: left !important;\n}\n\n.text-center {\n    text-align: center !important;\n}\n\n.text-decoration-none {\n    text-decoration: none !important;\n}\n\n.text-decoration-underline {\n    text-decoration: underline !important;\n}\n\n.text-decoration-line-through {\n    text-decoration: line-through !important;\n}\n\n.text-lowercase {\n    text-transform: lowercase !important;\n}\n\n.text-uppercase {\n    text-transform: uppercase !important;\n}\n\n.text-capitalize {\n    text-transform: capitalize !important;\n}\n\n.text-wrap {\n    white-space: normal !important;\n}\n\n.text-nowrap {\n    white-space: nowrap !important;\n}\n\n.text-primary {\n    --bs-text-opacity: 1;\n    color: rgba(var(--bs-primary-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-secondary {\n    --bs-text-opacity: 1;\n    color: rgba(var(--bs-secondary-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-success {\n    --bs-text-opacity: 1;\n    color: rgba(var(--bs-success-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-info {\n    --bs-text-opacity: 1;\n    color: rgba(var(--bs-info-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-warning {\n    --bs-text-opacity: 1;\n    color: rgba(var(--bs-warning-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-danger {\n    --bs-text-opacity: 1;\n    color: rgba(var(--bs-danger-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-light {\n    --bs-text-opacity: 1;\n    color: rgba(var(--bs-light-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-dark {\n    --bs-text-opacity: 1;\n    color: rgba(var(--bs-dark-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-black {\n    --bs-text-opacity: 1;\n    color: rgba(var(--bs-black-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-white {\n    --bs-text-opacity: 1;\n    color: rgba(var(--bs-white-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-body {\n    --bs-text-opacity: 1;\n    color: rgba(var(--bs-body-color-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-muted {\n    --bs-text-opacity: 1;\n    color: #6c757d !important;\n}\n\n.text-black-50 {\n    --bs-text-opacity: 1;\n    color: rgba(0, 0, 0, 0.5) !important;\n}\n\n.text-white-50 {\n    --bs-text-opacity: 1;\n    color: rgba(255, 255, 255, 0.5) !important;\n}\n\n.text-reset {\n    --bs-text-opacity: 1;\n    color: inherit !important;\n}\n\n.text-opacity-25 {\n    --bs-text-opacity: 0.25;\n}\n\n.text-opacity-50 {\n    --bs-text-opacity: 0.5;\n}\n\n.text-opacity-75 {\n    --bs-text-opacity: 0.75;\n}\n\n.text-opacity-100 {\n    --bs-text-opacity: 1;\n}\n\n.bg-primary {\n    --bs-bg-opacity: 1;\n    background-color: rgba(var(--bs-primary-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-secondary {\n    --bs-bg-opacity: 1;\n    background-color: rgba(var(--bs-secondary-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-success {\n    --bs-bg-opacity: 1;\n    background-color: rgba(var(--bs-success-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-info {\n    --bs-bg-opacity: 1;\n    background-color: rgba(var(--bs-info-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-warning {\n    --bs-bg-opacity: 1;\n    background-color: rgba(var(--bs-warning-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-danger {\n    --bs-bg-opacity: 1;\n    background-color: rgba(var(--bs-danger-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-light {\n    --bs-bg-opacity: 1;\n    background-color: rgba(var(--bs-light-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-dark {\n    --bs-bg-opacity: 1;\n    background-color: rgba(var(--bs-dark-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-black {\n    --bs-bg-opacity: 1;\n    background-color: rgba(var(--bs-black-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-white {\n    --bs-bg-opacity: 1;\n    background-color: rgba(var(--bs-white-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-body {\n    --bs-bg-opacity: 1;\n    background-color: rgba(var(--bs-body-bg-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-transparent {\n    --bs-bg-opacity: 1;\n    background-color: transparent !important;\n}\n\n.bg-opacity-10 {\n    --bs-bg-opacity: 0.1;\n}\n\n.bg-opacity-25 {\n    --bs-bg-opacity: 0.25;\n}\n\n.bg-opacity-50 {\n    --bs-bg-opacity: 0.5;\n}\n\n.bg-opacity-75 {\n    --bs-bg-opacity: 0.75;\n}\n\n.bg-opacity-100 {\n    --bs-bg-opacity: 1;\n}\n\n.bg-gradient {\n    background-image: var(--bs-gradient) !important;\n}\n\n.user-select-all {\n    -webkit-user-select: all !important;\n    -moz-user-select: all !important;\n    user-select: all !important;\n}\n\n.user-select-auto {\n    -webkit-user-select: auto !important;\n    -moz-user-select: auto !important;\n    user-select: auto !important;\n}\n\n.user-select-none {\n    -webkit-user-select: none !important;\n    -moz-user-select: none !important;\n    user-select: none !important;\n}\n\n.pe-none {\n    pointer-events: none !important;\n}\n\n.pe-auto {\n    pointer-events: auto !important;\n}\n\n.rounded {\n    border-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-0 {\n    border-radius: 0 !important;\n}\n\n.rounded-1 {\n    border-radius: var(--bs-border-radius-sm) !important;\n}\n\n.rounded-2 {\n    border-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-3 {\n    border-radius: var(--bs-border-radius-lg) !important;\n}\n\n.rounded-4 {\n    border-radius: var(--bs-border-radius-xl) !important;\n}\n\n.rounded-5 {\n    border-radius: var(--bs-border-radius-2xl) !important;\n}\n\n.rounded-circle {\n    border-radius: 50% !important;\n}\n\n.rounded-pill {\n    border-radius: var(--bs-border-radius-pill) !important;\n}\n\n.rounded-top {\n    border-top-right-radius: var(--bs-border-radius) !important;\n    border-top-left-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-end {\n    border-top-left-radius: var(--bs-border-radius) !important;\n    border-bottom-left-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-bottom {\n    border-bottom-left-radius: var(--bs-border-radius) !important;\n    border-bottom-right-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-start {\n    border-bottom-right-radius: var(--bs-border-radius) !important;\n    border-top-right-radius: var(--bs-border-radius) !important;\n}\n\n.visible {\n    visibility: visible !important;\n}\n\n.invisible {\n    visibility: hidden !important;\n}\n\n@media (min-width: 576px) {\n    .float-sm-start {\n        float: right !important;\n    }\n\n    .float-sm-end {\n        float: left !important;\n    }\n\n    .float-sm-none {\n        float: none !important;\n    }\n\n    .d-sm-inline {\n        display: inline !important;\n    }\n\n    .d-sm-inline-block {\n        display: inline-block !important;\n    }\n\n    .d-sm-block {\n        display: block !important;\n    }\n\n    .d-sm-grid {\n        display: grid !important;\n    }\n\n    .d-sm-table {\n        display: table !important;\n    }\n\n    .d-sm-table-row {\n        display: table-row !important;\n    }\n\n    .d-sm-table-cell {\n        display: table-cell !important;\n    }\n\n    .d-sm-flex {\n        display: flex !important;\n    }\n\n    .d-sm-inline-flex {\n        display: inline-flex !important;\n    }\n\n    .d-sm-none {\n        display: none !important;\n    }\n\n    .flex-sm-fill {\n        flex: 1 1 auto !important;\n    }\n\n    .flex-sm-row {\n        flex-direction: row !important;\n    }\n\n    .flex-sm-column {\n        flex-direction: column !important;\n    }\n\n    .flex-sm-row-reverse {\n        flex-direction: row-reverse !important;\n    }\n\n    .flex-sm-column-reverse {\n        flex-direction: column-reverse !important;\n    }\n\n    .flex-sm-grow-0 {\n        flex-grow: 0 !important;\n    }\n\n    .flex-sm-grow-1 {\n        flex-grow: 1 !important;\n    }\n\n    .flex-sm-shrink-0 {\n        flex-shrink: 0 !important;\n    }\n\n    .flex-sm-shrink-1 {\n        flex-shrink: 1 !important;\n    }\n\n    .flex-sm-wrap {\n        flex-wrap: wrap !important;\n    }\n\n    .flex-sm-nowrap {\n        flex-wrap: nowrap !important;\n    }\n\n    .flex-sm-wrap-reverse {\n        flex-wrap: wrap-reverse !important;\n    }\n\n    .justify-content-sm-start {\n        justify-content: flex-start !important;\n    }\n\n    .justify-content-sm-end {\n        justify-content: flex-end !important;\n    }\n\n    .justify-content-sm-center {\n        justify-content: center !important;\n    }\n\n    .justify-content-sm-between {\n        justify-content: space-between !important;\n    }\n\n    .justify-content-sm-around {\n        justify-content: space-around !important;\n    }\n\n    .justify-content-sm-evenly {\n        justify-content: space-evenly !important;\n    }\n\n    .align-items-sm-start {\n        align-items: flex-start !important;\n    }\n\n    .align-items-sm-end {\n        align-items: flex-end !important;\n    }\n\n    .align-items-sm-center {\n        align-items: center !important;\n    }\n\n    .align-items-sm-baseline {\n        align-items: baseline !important;\n    }\n\n    .align-items-sm-stretch {\n        align-items: stretch !important;\n    }\n\n    .align-content-sm-start {\n        align-content: flex-start !important;\n    }\n\n    .align-content-sm-end {\n        align-content: flex-end !important;\n    }\n\n    .align-content-sm-center {\n        align-content: center !important;\n    }\n\n    .align-content-sm-between {\n        align-content: space-between !important;\n    }\n\n    .align-content-sm-around {\n        align-content: space-around !important;\n    }\n\n    .align-content-sm-stretch {\n        align-content: stretch !important;\n    }\n\n    .align-self-sm-auto {\n        align-self: auto !important;\n    }\n\n    .align-self-sm-start {\n        align-self: flex-start !important;\n    }\n\n    .align-self-sm-end {\n        align-self: flex-end !important;\n    }\n\n    .align-self-sm-center {\n        align-self: center !important;\n    }\n\n    .align-self-sm-baseline {\n        align-self: baseline !important;\n    }\n\n    .align-self-sm-stretch {\n        align-self: stretch !important;\n    }\n\n    .order-sm-first {\n        order: -1 !important;\n    }\n\n    .order-sm-0 {\n        order: 0 !important;\n    }\n\n    .order-sm-1 {\n        order: 1 !important;\n    }\n\n    .order-sm-2 {\n        order: 2 !important;\n    }\n\n    .order-sm-3 {\n        order: 3 !important;\n    }\n\n    .order-sm-4 {\n        order: 4 !important;\n    }\n\n    .order-sm-5 {\n        order: 5 !important;\n    }\n\n    .order-sm-last {\n        order: 6 !important;\n    }\n\n    .m-sm-0 {\n        margin: 0 !important;\n    }\n\n    .m-sm-1 {\n        margin: 0.25rem !important;\n    }\n\n    .m-sm-2 {\n        margin: 0.5rem !important;\n    }\n\n    .m-sm-3 {\n        margin: 1rem !important;\n    }\n\n    .m-sm-4 {\n        margin: 1.5rem !important;\n    }\n\n    .m-sm-5 {\n        margin: 3rem !important;\n    }\n\n    .m-sm-auto {\n        margin: auto !important;\n    }\n\n    .mx-sm-0 {\n        margin-left: 0 !important;\n        margin-right: 0 !important;\n    }\n\n    .mx-sm-1 {\n        margin-left: 0.25rem !important;\n        margin-right: 0.25rem !important;\n    }\n\n    .mx-sm-2 {\n        margin-left: 0.5rem !important;\n        margin-right: 0.5rem !important;\n    }\n\n    .mx-sm-3 {\n        margin-left: 1rem !important;\n        margin-right: 1rem !important;\n    }\n\n    .mx-sm-4 {\n        margin-left: 1.5rem !important;\n        margin-right: 1.5rem !important;\n    }\n\n    .mx-sm-5 {\n        margin-left: 3rem !important;\n        margin-right: 3rem !important;\n    }\n\n    .mx-sm-auto {\n        margin-left: auto !important;\n        margin-right: auto !important;\n    }\n\n    .my-sm-0 {\n        margin-top: 0 !important;\n        margin-bottom: 0 !important;\n    }\n\n    .my-sm-1 {\n        margin-top: 0.25rem !important;\n        margin-bottom: 0.25rem !important;\n    }\n\n    .my-sm-2 {\n        margin-top: 0.5rem !important;\n        margin-bottom: 0.5rem !important;\n    }\n\n    .my-sm-3 {\n        margin-top: 1rem !important;\n        margin-bottom: 1rem !important;\n    }\n\n    .my-sm-4 {\n        margin-top: 1.5rem !important;\n        margin-bottom: 1.5rem !important;\n    }\n\n    .my-sm-5 {\n        margin-top: 3rem !important;\n        margin-bottom: 3rem !important;\n    }\n\n    .my-sm-auto {\n        margin-top: auto !important;\n        margin-bottom: auto !important;\n    }\n\n    .mt-sm-0 {\n        margin-top: 0 !important;\n    }\n\n    .mt-sm-1 {\n        margin-top: 0.25rem !important;\n    }\n\n    .mt-sm-2 {\n        margin-top: 0.5rem !important;\n    }\n\n    .mt-sm-3 {\n        margin-top: 1rem !important;\n    }\n\n    .mt-sm-4 {\n        margin-top: 1.5rem !important;\n    }\n\n    .mt-sm-5 {\n        margin-top: 3rem !important;\n    }\n\n    .mt-sm-auto {\n        margin-top: auto !important;\n    }\n\n    .me-sm-0 {\n        margin-left: 0 !important;\n    }\n\n    .me-sm-1 {\n        margin-left: 0.25rem !important;\n    }\n\n    .me-sm-2 {\n        margin-left: 0.5rem !important;\n    }\n\n    .me-sm-3 {\n        margin-left: 1rem !important;\n    }\n\n    .me-sm-4 {\n        margin-left: 1.5rem !important;\n    }\n\n    .me-sm-5 {\n        margin-left: 3rem !important;\n    }\n\n    .me-sm-auto {\n        margin-left: auto !important;\n    }\n\n    .mb-sm-0 {\n        margin-bottom: 0 !important;\n    }\n\n    .mb-sm-1 {\n        margin-bottom: 0.25rem !important;\n    }\n\n    .mb-sm-2 {\n        margin-bottom: 0.5rem !important;\n    }\n\n    .mb-sm-3 {\n        margin-bottom: 1rem !important;\n    }\n\n    .mb-sm-4 {\n        margin-bottom: 1.5rem !important;\n    }\n\n    .mb-sm-5 {\n        margin-bottom: 3rem !important;\n    }\n\n    .mb-sm-auto {\n        margin-bottom: auto !important;\n    }\n\n    .ms-sm-0 {\n        margin-right: 0 !important;\n    }\n\n    .ms-sm-1 {\n        margin-right: 0.25rem !important;\n    }\n\n    .ms-sm-2 {\n        margin-right: 0.5rem !important;\n    }\n\n    .ms-sm-3 {\n        margin-right: 1rem !important;\n    }\n\n    .ms-sm-4 {\n        margin-right: 1.5rem !important;\n    }\n\n    .ms-sm-5 {\n        margin-right: 3rem !important;\n    }\n\n    .ms-sm-auto {\n        margin-right: auto !important;\n    }\n\n    .p-sm-0 {\n        padding: 0 !important;\n    }\n\n    .p-sm-1 {\n        padding: 0.25rem !important;\n    }\n\n    .p-sm-2 {\n        padding: 0.5rem !important;\n    }\n\n    .p-sm-3 {\n        padding: 1rem !important;\n    }\n\n    .p-sm-4 {\n        padding: 1.5rem !important;\n    }\n\n    .p-sm-5 {\n        padding: 3rem !important;\n    }\n\n    .px-sm-0 {\n        padding-left: 0 !important;\n        padding-right: 0 !important;\n    }\n\n    .px-sm-1 {\n        padding-left: 0.25rem !important;\n        padding-right: 0.25rem !important;\n    }\n\n    .px-sm-2 {\n        padding-left: 0.5rem !important;\n        padding-right: 0.5rem !important;\n    }\n\n    .px-sm-3 {\n        padding-left: 1rem !important;\n        padding-right: 1rem !important;\n    }\n\n    .px-sm-4 {\n        padding-left: 1.5rem !important;\n        padding-right: 1.5rem !important;\n    }\n\n    .px-sm-5 {\n        padding-left: 3rem !important;\n        padding-right: 3rem !important;\n    }\n\n    .py-sm-0 {\n        padding-top: 0 !important;\n        padding-bottom: 0 !important;\n    }\n\n    .py-sm-1 {\n        padding-top: 0.25rem !important;\n        padding-bottom: 0.25rem !important;\n    }\n\n    .py-sm-2 {\n        padding-top: 0.5rem !important;\n        padding-bottom: 0.5rem !important;\n    }\n\n    .py-sm-3 {\n        padding-top: 1rem !important;\n        padding-bottom: 1rem !important;\n    }\n\n    .py-sm-4 {\n        padding-top: 1.5rem !important;\n        padding-bottom: 1.5rem !important;\n    }\n\n    .py-sm-5 {\n        padding-top: 3rem !important;\n        padding-bottom: 3rem !important;\n    }\n\n    .pt-sm-0 {\n        padding-top: 0 !important;\n    }\n\n    .pt-sm-1 {\n        padding-top: 0.25rem !important;\n    }\n\n    .pt-sm-2 {\n        padding-top: 0.5rem !important;\n    }\n\n    .pt-sm-3 {\n        padding-top: 1rem !important;\n    }\n\n    .pt-sm-4 {\n        padding-top: 1.5rem !important;\n    }\n\n    .pt-sm-5 {\n        padding-top: 3rem !important;\n    }\n\n    .pe-sm-0 {\n        padding-left: 0 !important;\n    }\n\n    .pe-sm-1 {\n        padding-left: 0.25rem !important;\n    }\n\n    .pe-sm-2 {\n        padding-left: 0.5rem !important;\n    }\n\n    .pe-sm-3 {\n        padding-left: 1rem !important;\n    }\n\n    .pe-sm-4 {\n        padding-left: 1.5rem !important;\n    }\n\n    .pe-sm-5 {\n        padding-left: 3rem !important;\n    }\n\n    .pb-sm-0 {\n        padding-bottom: 0 !important;\n    }\n\n    .pb-sm-1 {\n        padding-bottom: 0.25rem !important;\n    }\n\n    .pb-sm-2 {\n        padding-bottom: 0.5rem !important;\n    }\n\n    .pb-sm-3 {\n        padding-bottom: 1rem !important;\n    }\n\n    .pb-sm-4 {\n        padding-bottom: 1.5rem !important;\n    }\n\n    .pb-sm-5 {\n        padding-bottom: 3rem !important;\n    }\n\n    .ps-sm-0 {\n        padding-right: 0 !important;\n    }\n\n    .ps-sm-1 {\n        padding-right: 0.25rem !important;\n    }\n\n    .ps-sm-2 {\n        padding-right: 0.5rem !important;\n    }\n\n    .ps-sm-3 {\n        padding-right: 1rem !important;\n    }\n\n    .ps-sm-4 {\n        padding-right: 1.5rem !important;\n    }\n\n    .ps-sm-5 {\n        padding-right: 3rem !important;\n    }\n\n    .gap-sm-0 {\n        gap: 0 !important;\n    }\n\n    .gap-sm-1 {\n        gap: 0.25rem !important;\n    }\n\n    .gap-sm-2 {\n        gap: 0.5rem !important;\n    }\n\n    .gap-sm-3 {\n        gap: 1rem !important;\n    }\n\n    .gap-sm-4 {\n        gap: 1.5rem !important;\n    }\n\n    .gap-sm-5 {\n        gap: 3rem !important;\n    }\n\n    .text-sm-start {\n        text-align: right !important;\n    }\n\n    .text-sm-end {\n        text-align: left !important;\n    }\n\n    .text-sm-center {\n        text-align: center !important;\n    }\n}\n\n@media (min-width: 768px) {\n    .float-md-start {\n        float: right !important;\n    }\n\n    .float-md-end {\n        float: left !important;\n    }\n\n    .float-md-none {\n        float: none !important;\n    }\n\n    .d-md-inline {\n        display: inline !important;\n    }\n\n    .d-md-inline-block {\n        display: inline-block !important;\n    }\n\n    .d-md-block {\n        display: block !important;\n    }\n\n    .d-md-grid {\n        display: grid !important;\n    }\n\n    .d-md-table {\n        display: table !important;\n    }\n\n    .d-md-table-row {\n        display: table-row !important;\n    }\n\n    .d-md-table-cell {\n        display: table-cell !important;\n    }\n\n    .d-md-flex {\n        display: flex !important;\n    }\n\n    .d-md-inline-flex {\n        display: inline-flex !important;\n    }\n\n    .d-md-none {\n        display: none !important;\n    }\n\n    .flex-md-fill {\n        flex: 1 1 auto !important;\n    }\n\n    .flex-md-row {\n        flex-direction: row !important;\n    }\n\n    .flex-md-column {\n        flex-direction: column !important;\n    }\n\n    .flex-md-row-reverse {\n        flex-direction: row-reverse !important;\n    }\n\n    .flex-md-column-reverse {\n        flex-direction: column-reverse !important;\n    }\n\n    .flex-md-grow-0 {\n        flex-grow: 0 !important;\n    }\n\n    .flex-md-grow-1 {\n        flex-grow: 1 !important;\n    }\n\n    .flex-md-shrink-0 {\n        flex-shrink: 0 !important;\n    }\n\n    .flex-md-shrink-1 {\n        flex-shrink: 1 !important;\n    }\n\n    .flex-md-wrap {\n        flex-wrap: wrap !important;\n    }\n\n    .flex-md-nowrap {\n        flex-wrap: nowrap !important;\n    }\n\n    .flex-md-wrap-reverse {\n        flex-wrap: wrap-reverse !important;\n    }\n\n    .justify-content-md-start {\n        justify-content: flex-start !important;\n    }\n\n    .justify-content-md-end {\n        justify-content: flex-end !important;\n    }\n\n    .justify-content-md-center {\n        justify-content: center !important;\n    }\n\n    .justify-content-md-between {\n        justify-content: space-between !important;\n    }\n\n    .justify-content-md-around {\n        justify-content: space-around !important;\n    }\n\n    .justify-content-md-evenly {\n        justify-content: space-evenly !important;\n    }\n\n    .align-items-md-start {\n        align-items: flex-start !important;\n    }\n\n    .align-items-md-end {\n        align-items: flex-end !important;\n    }\n\n    .align-items-md-center {\n        align-items: center !important;\n    }\n\n    .align-items-md-baseline {\n        align-items: baseline !important;\n    }\n\n    .align-items-md-stretch {\n        align-items: stretch !important;\n    }\n\n    .align-content-md-start {\n        align-content: flex-start !important;\n    }\n\n    .align-content-md-end {\n        align-content: flex-end !important;\n    }\n\n    .align-content-md-center {\n        align-content: center !important;\n    }\n\n    .align-content-md-between {\n        align-content: space-between !important;\n    }\n\n    .align-content-md-around {\n        align-content: space-around !important;\n    }\n\n    .align-content-md-stretch {\n        align-content: stretch !important;\n    }\n\n    .align-self-md-auto {\n        align-self: auto !important;\n    }\n\n    .align-self-md-start {\n        align-self: flex-start !important;\n    }\n\n    .align-self-md-end {\n        align-self: flex-end !important;\n    }\n\n    .align-self-md-center {\n        align-self: center !important;\n    }\n\n    .align-self-md-baseline {\n        align-self: baseline !important;\n    }\n\n    .align-self-md-stretch {\n        align-self: stretch !important;\n    }\n\n    .order-md-first {\n        order: -1 !important;\n    }\n\n    .order-md-0 {\n        order: 0 !important;\n    }\n\n    .order-md-1 {\n        order: 1 !important;\n    }\n\n    .order-md-2 {\n        order: 2 !important;\n    }\n\n    .order-md-3 {\n        order: 3 !important;\n    }\n\n    .order-md-4 {\n        order: 4 !important;\n    }\n\n    .order-md-5 {\n        order: 5 !important;\n    }\n\n    .order-md-last {\n        order: 6 !important;\n    }\n\n    .m-md-0 {\n        margin: 0 !important;\n    }\n\n    .m-md-1 {\n        margin: 0.25rem !important;\n    }\n\n    .m-md-2 {\n        margin: 0.5rem !important;\n    }\n\n    .m-md-3 {\n        margin: 1rem !important;\n    }\n\n    .m-md-4 {\n        margin: 1.5rem !important;\n    }\n\n    .m-md-5 {\n        margin: 3rem !important;\n    }\n\n    .m-md-auto {\n        margin: auto !important;\n    }\n\n    .mx-md-0 {\n        margin-left: 0 !important;\n        margin-right: 0 !important;\n    }\n\n    .mx-md-1 {\n        margin-left: 0.25rem !important;\n        margin-right: 0.25rem !important;\n    }\n\n    .mx-md-2 {\n        margin-left: 0.5rem !important;\n        margin-right: 0.5rem !important;\n    }\n\n    .mx-md-3 {\n        margin-left: 1rem !important;\n        margin-right: 1rem !important;\n    }\n\n    .mx-md-4 {\n        margin-left: 1.5rem !important;\n        margin-right: 1.5rem !important;\n    }\n\n    .mx-md-5 {\n        margin-left: 3rem !important;\n        margin-right: 3rem !important;\n    }\n\n    .mx-md-auto {\n        margin-left: auto !important;\n        margin-right: auto !important;\n    }\n\n    .my-md-0 {\n        margin-top: 0 !important;\n        margin-bottom: 0 !important;\n    }\n\n    .my-md-1 {\n        margin-top: 0.25rem !important;\n        margin-bottom: 0.25rem !important;\n    }\n\n    .my-md-2 {\n        margin-top: 0.5rem !important;\n        margin-bottom: 0.5rem !important;\n    }\n\n    .my-md-3 {\n        margin-top: 1rem !important;\n        margin-bottom: 1rem !important;\n    }\n\n    .my-md-4 {\n        margin-top: 1.5rem !important;\n        margin-bottom: 1.5rem !important;\n    }\n\n    .my-md-5 {\n        margin-top: 3rem !important;\n        margin-bottom: 3rem !important;\n    }\n\n    .my-md-auto {\n        margin-top: auto !important;\n        margin-bottom: auto !important;\n    }\n\n    .mt-md-0 {\n        margin-top: 0 !important;\n    }\n\n    .mt-md-1 {\n        margin-top: 0.25rem !important;\n    }\n\n    .mt-md-2 {\n        margin-top: 0.5rem !important;\n    }\n\n    .mt-md-3 {\n        margin-top: 1rem !important;\n    }\n\n    .mt-md-4 {\n        margin-top: 1.5rem !important;\n    }\n\n    .mt-md-5 {\n        margin-top: 3rem !important;\n    }\n\n    .mt-md-auto {\n        margin-top: auto !important;\n    }\n\n    .me-md-0 {\n        margin-left: 0 !important;\n    }\n\n    .me-md-1 {\n        margin-left: 0.25rem !important;\n    }\n\n    .me-md-2 {\n        margin-left: 0.5rem !important;\n    }\n\n    .me-md-3 {\n        margin-left: 1rem !important;\n    }\n\n    .me-md-4 {\n        margin-left: 1.5rem !important;\n    }\n\n    .me-md-5 {\n        margin-left: 3rem !important;\n    }\n\n    .me-md-auto {\n        margin-left: auto !important;\n    }\n\n    .mb-md-0 {\n        margin-bottom: 0 !important;\n    }\n\n    .mb-md-1 {\n        margin-bottom: 0.25rem !important;\n    }\n\n    .mb-md-2 {\n        margin-bottom: 0.5rem !important;\n    }\n\n    .mb-md-3 {\n        margin-bottom: 1rem !important;\n    }\n\n    .mb-md-4 {\n        margin-bottom: 1.5rem !important;\n    }\n\n    .mb-md-5 {\n        margin-bottom: 3rem !important;\n    }\n\n    .mb-md-auto {\n        margin-bottom: auto !important;\n    }\n\n    .ms-md-0 {\n        margin-right: 0 !important;\n    }\n\n    .ms-md-1 {\n        margin-right: 0.25rem !important;\n    }\n\n    .ms-md-2 {\n        margin-right: 0.5rem !important;\n    }\n\n    .ms-md-3 {\n        margin-right: 1rem !important;\n    }\n\n    .ms-md-4 {\n        margin-right: 1.5rem !important;\n    }\n\n    .ms-md-5 {\n        margin-right: 3rem !important;\n    }\n\n    .ms-md-auto {\n        margin-right: auto !important;\n    }\n\n    .p-md-0 {\n        padding: 0 !important;\n    }\n\n    .p-md-1 {\n        padding: 0.25rem !important;\n    }\n\n    .p-md-2 {\n        padding: 0.5rem !important;\n    }\n\n    .p-md-3 {\n        padding: 1rem !important;\n    }\n\n    .p-md-4 {\n        padding: 1.5rem !important;\n    }\n\n    .p-md-5 {\n        padding: 3rem !important;\n    }\n\n    .px-md-0 {\n        padding-left: 0 !important;\n        padding-right: 0 !important;\n    }\n\n    .px-md-1 {\n        padding-left: 0.25rem !important;\n        padding-right: 0.25rem !important;\n    }\n\n    .px-md-2 {\n        padding-left: 0.5rem !important;\n        padding-right: 0.5rem !important;\n    }\n\n    .px-md-3 {\n        padding-left: 1rem !important;\n        padding-right: 1rem !important;\n    }\n\n    .px-md-4 {\n        padding-left: 1.5rem !important;\n        padding-right: 1.5rem !important;\n    }\n\n    .px-md-5 {\n        padding-left: 3rem !important;\n        padding-right: 3rem !important;\n    }\n\n    .py-md-0 {\n        padding-top: 0 !important;\n        padding-bottom: 0 !important;\n    }\n\n    .py-md-1 {\n        padding-top: 0.25rem !important;\n        padding-bottom: 0.25rem !important;\n    }\n\n    .py-md-2 {\n        padding-top: 0.5rem !important;\n        padding-bottom: 0.5rem !important;\n    }\n\n    .py-md-3 {\n        padding-top: 1rem !important;\n        padding-bottom: 1rem !important;\n    }\n\n    .py-md-4 {\n        padding-top: 1.5rem !important;\n        padding-bottom: 1.5rem !important;\n    }\n\n    .py-md-5 {\n        padding-top: 3rem !important;\n        padding-bottom: 3rem !important;\n    }\n\n    .pt-md-0 {\n        padding-top: 0 !important;\n    }\n\n    .pt-md-1 {\n        padding-top: 0.25rem !important;\n    }\n\n    .pt-md-2 {\n        padding-top: 0.5rem !important;\n    }\n\n    .pt-md-3 {\n        padding-top: 1rem !important;\n    }\n\n    .pt-md-4 {\n        padding-top: 1.5rem !important;\n    }\n\n    .pt-md-5 {\n        padding-top: 3rem !important;\n    }\n\n    .pe-md-0 {\n        padding-left: 0 !important;\n    }\n\n    .pe-md-1 {\n        padding-left: 0.25rem !important;\n    }\n\n    .pe-md-2 {\n        padding-left: 0.5rem !important;\n    }\n\n    .pe-md-3 {\n        padding-left: 1rem !important;\n    }\n\n    .pe-md-4 {\n        padding-left: 1.5rem !important;\n    }\n\n    .pe-md-5 {\n        padding-left: 3rem !important;\n    }\n\n    .pb-md-0 {\n        padding-bottom: 0 !important;\n    }\n\n    .pb-md-1 {\n        padding-bottom: 0.25rem !important;\n    }\n\n    .pb-md-2 {\n        padding-bottom: 0.5rem !important;\n    }\n\n    .pb-md-3 {\n        padding-bottom: 1rem !important;\n    }\n\n    .pb-md-4 {\n        padding-bottom: 1.5rem !important;\n    }\n\n    .pb-md-5 {\n        padding-bottom: 3rem !important;\n    }\n\n    .ps-md-0 {\n        padding-right: 0 !important;\n    }\n\n    .ps-md-1 {\n        padding-right: 0.25rem !important;\n    }\n\n    .ps-md-2 {\n        padding-right: 0.5rem !important;\n    }\n\n    .ps-md-3 {\n        padding-right: 1rem !important;\n    }\n\n    .ps-md-4 {\n        padding-right: 1.5rem !important;\n    }\n\n    .ps-md-5 {\n        padding-right: 3rem !important;\n    }\n\n    .gap-md-0 {\n        gap: 0 !important;\n    }\n\n    .gap-md-1 {\n        gap: 0.25rem !important;\n    }\n\n    .gap-md-2 {\n        gap: 0.5rem !important;\n    }\n\n    .gap-md-3 {\n        gap: 1rem !important;\n    }\n\n    .gap-md-4 {\n        gap: 1.5rem !important;\n    }\n\n    .gap-md-5 {\n        gap: 3rem !important;\n    }\n\n    .text-md-start {\n        text-align: right !important;\n    }\n\n    .text-md-end {\n        text-align: left !important;\n    }\n\n    .text-md-center {\n        text-align: center !important;\n    }\n}\n\n@media (min-width: 992px) {\n    .float-lg-start {\n        float: right !important;\n    }\n\n    .float-lg-end {\n        float: left !important;\n    }\n\n    .float-lg-none {\n        float: none !important;\n    }\n\n    .d-lg-inline {\n        display: inline !important;\n    }\n\n    .d-lg-inline-block {\n        display: inline-block !important;\n    }\n\n    .d-lg-block {\n        display: block !important;\n    }\n\n    .d-lg-grid {\n        display: grid !important;\n    }\n\n    .d-lg-table {\n        display: table !important;\n    }\n\n    .d-lg-table-row {\n        display: table-row !important;\n    }\n\n    .d-lg-table-cell {\n        display: table-cell !important;\n    }\n\n    .d-lg-flex {\n        display: flex !important;\n    }\n\n    .d-lg-inline-flex {\n        display: inline-flex !important;\n    }\n\n    .d-lg-none {\n        display: none !important;\n    }\n\n    .flex-lg-fill {\n        flex: 1 1 auto !important;\n    }\n\n    .flex-lg-row {\n        flex-direction: row !important;\n    }\n\n    .flex-lg-column {\n        flex-direction: column !important;\n    }\n\n    .flex-lg-row-reverse {\n        flex-direction: row-reverse !important;\n    }\n\n    .flex-lg-column-reverse {\n        flex-direction: column-reverse !important;\n    }\n\n    .flex-lg-grow-0 {\n        flex-grow: 0 !important;\n    }\n\n    .flex-lg-grow-1 {\n        flex-grow: 1 !important;\n    }\n\n    .flex-lg-shrink-0 {\n        flex-shrink: 0 !important;\n    }\n\n    .flex-lg-shrink-1 {\n        flex-shrink: 1 !important;\n    }\n\n    .flex-lg-wrap {\n        flex-wrap: wrap !important;\n    }\n\n    .flex-lg-nowrap {\n        flex-wrap: nowrap !important;\n    }\n\n    .flex-lg-wrap-reverse {\n        flex-wrap: wrap-reverse !important;\n    }\n\n    .justify-content-lg-start {\n        justify-content: flex-start !important;\n    }\n\n    .justify-content-lg-end {\n        justify-content: flex-end !important;\n    }\n\n    .justify-content-lg-center {\n        justify-content: center !important;\n    }\n\n    .justify-content-lg-between {\n        justify-content: space-between !important;\n    }\n\n    .justify-content-lg-around {\n        justify-content: space-around !important;\n    }\n\n    .justify-content-lg-evenly {\n        justify-content: space-evenly !important;\n    }\n\n    .align-items-lg-start {\n        align-items: flex-start !important;\n    }\n\n    .align-items-lg-end {\n        align-items: flex-end !important;\n    }\n\n    .align-items-lg-center {\n        align-items: center !important;\n    }\n\n    .align-items-lg-baseline {\n        align-items: baseline !important;\n    }\n\n    .align-items-lg-stretch {\n        align-items: stretch !important;\n    }\n\n    .align-content-lg-start {\n        align-content: flex-start !important;\n    }\n\n    .align-content-lg-end {\n        align-content: flex-end !important;\n    }\n\n    .align-content-lg-center {\n        align-content: center !important;\n    }\n\n    .align-content-lg-between {\n        align-content: space-between !important;\n    }\n\n    .align-content-lg-around {\n        align-content: space-around !important;\n    }\n\n    .align-content-lg-stretch {\n        align-content: stretch !important;\n    }\n\n    .align-self-lg-auto {\n        align-self: auto !important;\n    }\n\n    .align-self-lg-start {\n        align-self: flex-start !important;\n    }\n\n    .align-self-lg-end {\n        align-self: flex-end !important;\n    }\n\n    .align-self-lg-center {\n        align-self: center !important;\n    }\n\n    .align-self-lg-baseline {\n        align-self: baseline !important;\n    }\n\n    .align-self-lg-stretch {\n        align-self: stretch !important;\n    }\n\n    .order-lg-first {\n        order: -1 !important;\n    }\n\n    .order-lg-0 {\n        order: 0 !important;\n    }\n\n    .order-lg-1 {\n        order: 1 !important;\n    }\n\n    .order-lg-2 {\n        order: 2 !important;\n    }\n\n    .order-lg-3 {\n        order: 3 !important;\n    }\n\n    .order-lg-4 {\n        order: 4 !important;\n    }\n\n    .order-lg-5 {\n        order: 5 !important;\n    }\n\n    .order-lg-last {\n        order: 6 !important;\n    }\n\n    .m-lg-0 {\n        margin: 0 !important;\n    }\n\n    .m-lg-1 {\n        margin: 0.25rem !important;\n    }\n\n    .m-lg-2 {\n        margin: 0.5rem !important;\n    }\n\n    .m-lg-3 {\n        margin: 1rem !important;\n    }\n\n    .m-lg-4 {\n        margin: 1.5rem !important;\n    }\n\n    .m-lg-5 {\n        margin: 3rem !important;\n    }\n\n    .m-lg-auto {\n        margin: auto !important;\n    }\n\n    .mx-lg-0 {\n        margin-left: 0 !important;\n        margin-right: 0 !important;\n    }\n\n    .mx-lg-1 {\n        margin-left: 0.25rem !important;\n        margin-right: 0.25rem !important;\n    }\n\n    .mx-lg-2 {\n        margin-left: 0.5rem !important;\n        margin-right: 0.5rem !important;\n    }\n\n    .mx-lg-3 {\n        margin-left: 1rem !important;\n        margin-right: 1rem !important;\n    }\n\n    .mx-lg-4 {\n        margin-left: 1.5rem !important;\n        margin-right: 1.5rem !important;\n    }\n\n    .mx-lg-5 {\n        margin-left: 3rem !important;\n        margin-right: 3rem !important;\n    }\n\n    .mx-lg-auto {\n        margin-left: auto !important;\n        margin-right: auto !important;\n    }\n\n    .my-lg-0 {\n        margin-top: 0 !important;\n        margin-bottom: 0 !important;\n    }\n\n    .my-lg-1 {\n        margin-top: 0.25rem !important;\n        margin-bottom: 0.25rem !important;\n    }\n\n    .my-lg-2 {\n        margin-top: 0.5rem !important;\n        margin-bottom: 0.5rem !important;\n    }\n\n    .my-lg-3 {\n        margin-top: 1rem !important;\n        margin-bottom: 1rem !important;\n    }\n\n    .my-lg-4 {\n        margin-top: 1.5rem !important;\n        margin-bottom: 1.5rem !important;\n    }\n\n    .my-lg-5 {\n        margin-top: 3rem !important;\n        margin-bottom: 3rem !important;\n    }\n\n    .my-lg-auto {\n        margin-top: auto !important;\n        margin-bottom: auto !important;\n    }\n\n    .mt-lg-0 {\n        margin-top: 0 !important;\n    }\n\n    .mt-lg-1 {\n        margin-top: 0.25rem !important;\n    }\n\n    .mt-lg-2 {\n        margin-top: 0.5rem !important;\n    }\n\n    .mt-lg-3 {\n        margin-top: 1rem !important;\n    }\n\n    .mt-lg-4 {\n        margin-top: 1.5rem !important;\n    }\n\n    .mt-lg-5 {\n        margin-top: 3rem !important;\n    }\n\n    .mt-lg-auto {\n        margin-top: auto !important;\n    }\n\n    .me-lg-0 {\n        margin-left: 0 !important;\n    }\n\n    .me-lg-1 {\n        margin-left: 0.25rem !important;\n    }\n\n    .me-lg-2 {\n        margin-left: 0.5rem !important;\n    }\n\n    .me-lg-3 {\n        margin-left: 1rem !important;\n    }\n\n    .me-lg-4 {\n        margin-left: 1.5rem !important;\n    }\n\n    .me-lg-5 {\n        margin-left: 3rem !important;\n    }\n\n    .me-lg-auto {\n        margin-left: auto !important;\n    }\n\n    .mb-lg-0 {\n        margin-bottom: 0 !important;\n    }\n\n    .mb-lg-1 {\n        margin-bottom: 0.25rem !important;\n    }\n\n    .mb-lg-2 {\n        margin-bottom: 0.5rem !important;\n    }\n\n    .mb-lg-3 {\n        margin-bottom: 1rem !important;\n    }\n\n    .mb-lg-4 {\n        margin-bottom: 1.5rem !important;\n    }\n\n    .mb-lg-5 {\n        margin-bottom: 3rem !important;\n    }\n\n    .mb-lg-auto {\n        margin-bottom: auto !important;\n    }\n\n    .ms-lg-0 {\n        margin-right: 0 !important;\n    }\n\n    .ms-lg-1 {\n        margin-right: 0.25rem !important;\n    }\n\n    .ms-lg-2 {\n        margin-right: 0.5rem !important;\n    }\n\n    .ms-lg-3 {\n        margin-right: 1rem !important;\n    }\n\n    .ms-lg-4 {\n        margin-right: 1.5rem !important;\n    }\n\n    .ms-lg-5 {\n        margin-right: 3rem !important;\n    }\n\n    .ms-lg-auto {\n        margin-right: auto !important;\n    }\n\n    .p-lg-0 {\n        padding: 0 !important;\n    }\n\n    .p-lg-1 {\n        padding: 0.25rem !important;\n    }\n\n    .p-lg-2 {\n        padding: 0.5rem !important;\n    }\n\n    .p-lg-3 {\n        padding: 1rem !important;\n    }\n\n    .p-lg-4 {\n        padding: 1.5rem !important;\n    }\n\n    .p-lg-5 {\n        padding: 3rem !important;\n    }\n\n    .px-lg-0 {\n        padding-left: 0 !important;\n        padding-right: 0 !important;\n    }\n\n    .px-lg-1 {\n        padding-left: 0.25rem !important;\n        padding-right: 0.25rem !important;\n    }\n\n    .px-lg-2 {\n        padding-left: 0.5rem !important;\n        padding-right: 0.5rem !important;\n    }\n\n    .px-lg-3 {\n        padding-left: 1rem !important;\n        padding-right: 1rem !important;\n    }\n\n    .px-lg-4 {\n        padding-left: 1.5rem !important;\n        padding-right: 1.5rem !important;\n    }\n\n    .px-lg-5 {\n        padding-left: 3rem !important;\n        padding-right: 3rem !important;\n    }\n\n    .py-lg-0 {\n        padding-top: 0 !important;\n        padding-bottom: 0 !important;\n    }\n\n    .py-lg-1 {\n        padding-top: 0.25rem !important;\n        padding-bottom: 0.25rem !important;\n    }\n\n    .py-lg-2 {\n        padding-top: 0.5rem !important;\n        padding-bottom: 0.5rem !important;\n    }\n\n    .py-lg-3 {\n        padding-top: 1rem !important;\n        padding-bottom: 1rem !important;\n    }\n\n    .py-lg-4 {\n        padding-top: 1.5rem !important;\n        padding-bottom: 1.5rem !important;\n    }\n\n    .py-lg-5 {\n        padding-top: 3rem !important;\n        padding-bottom: 3rem !important;\n    }\n\n    .pt-lg-0 {\n        padding-top: 0 !important;\n    }\n\n    .pt-lg-1 {\n        padding-top: 0.25rem !important;\n    }\n\n    .pt-lg-2 {\n        padding-top: 0.5rem !important;\n    }\n\n    .pt-lg-3 {\n        padding-top: 1rem !important;\n    }\n\n    .pt-lg-4 {\n        padding-top: 1.5rem !important;\n    }\n\n    .pt-lg-5 {\n        padding-top: 3rem !important;\n    }\n\n    .pe-lg-0 {\n        padding-left: 0 !important;\n    }\n\n    .pe-lg-1 {\n        padding-left: 0.25rem !important;\n    }\n\n    .pe-lg-2 {\n        padding-left: 0.5rem !important;\n    }\n\n    .pe-lg-3 {\n        padding-left: 1rem !important;\n    }\n\n    .pe-lg-4 {\n        padding-left: 1.5rem !important;\n    }\n\n    .pe-lg-5 {\n        padding-left: 3rem !important;\n    }\n\n    .pb-lg-0 {\n        padding-bottom: 0 !important;\n    }\n\n    .pb-lg-1 {\n        padding-bottom: 0.25rem !important;\n    }\n\n    .pb-lg-2 {\n        padding-bottom: 0.5rem !important;\n    }\n\n    .pb-lg-3 {\n        padding-bottom: 1rem !important;\n    }\n\n    .pb-lg-4 {\n        padding-bottom: 1.5rem !important;\n    }\n\n    .pb-lg-5 {\n        padding-bottom: 3rem !important;\n    }\n\n    .ps-lg-0 {\n        padding-right: 0 !important;\n    }\n\n    .ps-lg-1 {\n        padding-right: 0.25rem !important;\n    }\n\n    .ps-lg-2 {\n        padding-right: 0.5rem !important;\n    }\n\n    .ps-lg-3 {\n        padding-right: 1rem !important;\n    }\n\n    .ps-lg-4 {\n        padding-right: 1.5rem !important;\n    }\n\n    .ps-lg-5 {\n        padding-right: 3rem !important;\n    }\n\n    .gap-lg-0 {\n        gap: 0 !important;\n    }\n\n    .gap-lg-1 {\n        gap: 0.25rem !important;\n    }\n\n    .gap-lg-2 {\n        gap: 0.5rem !important;\n    }\n\n    .gap-lg-3 {\n        gap: 1rem !important;\n    }\n\n    .gap-lg-4 {\n        gap: 1.5rem !important;\n    }\n\n    .gap-lg-5 {\n        gap: 3rem !important;\n    }\n\n    .text-lg-start {\n        text-align: right !important;\n    }\n\n    .text-lg-end {\n        text-align: left !important;\n    }\n\n    .text-lg-center {\n        text-align: center !important;\n    }\n}\n\n@media (min-width: 1200px) {\n    .float-xl-start {\n        float: right !important;\n    }\n\n    .float-xl-end {\n        float: left !important;\n    }\n\n    .float-xl-none {\n        float: none !important;\n    }\n\n    .d-xl-inline {\n        display: inline !important;\n    }\n\n    .d-xl-inline-block {\n        display: inline-block !important;\n    }\n\n    .d-xl-block {\n        display: block !important;\n    }\n\n    .d-xl-grid {\n        display: grid !important;\n    }\n\n    .d-xl-table {\n        display: table !important;\n    }\n\n    .d-xl-table-row {\n        display: table-row !important;\n    }\n\n    .d-xl-table-cell {\n        display: table-cell !important;\n    }\n\n    .d-xl-flex {\n        display: flex !important;\n    }\n\n    .d-xl-inline-flex {\n        display: inline-flex !important;\n    }\n\n    .d-xl-none {\n        display: none !important;\n    }\n\n    .flex-xl-fill {\n        flex: 1 1 auto !important;\n    }\n\n    .flex-xl-row {\n        flex-direction: row !important;\n    }\n\n    .flex-xl-column {\n        flex-direction: column !important;\n    }\n\n    .flex-xl-row-reverse {\n        flex-direction: row-reverse !important;\n    }\n\n    .flex-xl-column-reverse {\n        flex-direction: column-reverse !important;\n    }\n\n    .flex-xl-grow-0 {\n        flex-grow: 0 !important;\n    }\n\n    .flex-xl-grow-1 {\n        flex-grow: 1 !important;\n    }\n\n    .flex-xl-shrink-0 {\n        flex-shrink: 0 !important;\n    }\n\n    .flex-xl-shrink-1 {\n        flex-shrink: 1 !important;\n    }\n\n    .flex-xl-wrap {\n        flex-wrap: wrap !important;\n    }\n\n    .flex-xl-nowrap {\n        flex-wrap: nowrap !important;\n    }\n\n    .flex-xl-wrap-reverse {\n        flex-wrap: wrap-reverse !important;\n    }\n\n    .justify-content-xl-start {\n        justify-content: flex-start !important;\n    }\n\n    .justify-content-xl-end {\n        justify-content: flex-end !important;\n    }\n\n    .justify-content-xl-center {\n        justify-content: center !important;\n    }\n\n    .justify-content-xl-between {\n        justify-content: space-between !important;\n    }\n\n    .justify-content-xl-around {\n        justify-content: space-around !important;\n    }\n\n    .justify-content-xl-evenly {\n        justify-content: space-evenly !important;\n    }\n\n    .align-items-xl-start {\n        align-items: flex-start !important;\n    }\n\n    .align-items-xl-end {\n        align-items: flex-end !important;\n    }\n\n    .align-items-xl-center {\n        align-items: center !important;\n    }\n\n    .align-items-xl-baseline {\n        align-items: baseline !important;\n    }\n\n    .align-items-xl-stretch {\n        align-items: stretch !important;\n    }\n\n    .align-content-xl-start {\n        align-content: flex-start !important;\n    }\n\n    .align-content-xl-end {\n        align-content: flex-end !important;\n    }\n\n    .align-content-xl-center {\n        align-content: center !important;\n    }\n\n    .align-content-xl-between {\n        align-content: space-between !important;\n    }\n\n    .align-content-xl-around {\n        align-content: space-around !important;\n    }\n\n    .align-content-xl-stretch {\n        align-content: stretch !important;\n    }\n\n    .align-self-xl-auto {\n        align-self: auto !important;\n    }\n\n    .align-self-xl-start {\n        align-self: flex-start !important;\n    }\n\n    .align-self-xl-end {\n        align-self: flex-end !important;\n    }\n\n    .align-self-xl-center {\n        align-self: center !important;\n    }\n\n    .align-self-xl-baseline {\n        align-self: baseline !important;\n    }\n\n    .align-self-xl-stretch {\n        align-self: stretch !important;\n    }\n\n    .order-xl-first {\n        order: -1 !important;\n    }\n\n    .order-xl-0 {\n        order: 0 !important;\n    }\n\n    .order-xl-1 {\n        order: 1 !important;\n    }\n\n    .order-xl-2 {\n        order: 2 !important;\n    }\n\n    .order-xl-3 {\n        order: 3 !important;\n    }\n\n    .order-xl-4 {\n        order: 4 !important;\n    }\n\n    .order-xl-5 {\n        order: 5 !important;\n    }\n\n    .order-xl-last {\n        order: 6 !important;\n    }\n\n    .m-xl-0 {\n        margin: 0 !important;\n    }\n\n    .m-xl-1 {\n        margin: 0.25rem !important;\n    }\n\n    .m-xl-2 {\n        margin: 0.5rem !important;\n    }\n\n    .m-xl-3 {\n        margin: 1rem !important;\n    }\n\n    .m-xl-4 {\n        margin: 1.5rem !important;\n    }\n\n    .m-xl-5 {\n        margin: 3rem !important;\n    }\n\n    .m-xl-auto {\n        margin: auto !important;\n    }\n\n    .mx-xl-0 {\n        margin-left: 0 !important;\n        margin-right: 0 !important;\n    }\n\n    .mx-xl-1 {\n        margin-left: 0.25rem !important;\n        margin-right: 0.25rem !important;\n    }\n\n    .mx-xl-2 {\n        margin-left: 0.5rem !important;\n        margin-right: 0.5rem !important;\n    }\n\n    .mx-xl-3 {\n        margin-left: 1rem !important;\n        margin-right: 1rem !important;\n    }\n\n    .mx-xl-4 {\n        margin-left: 1.5rem !important;\n        margin-right: 1.5rem !important;\n    }\n\n    .mx-xl-5 {\n        margin-left: 3rem !important;\n        margin-right: 3rem !important;\n    }\n\n    .mx-xl-auto {\n        margin-left: auto !important;\n        margin-right: auto !important;\n    }\n\n    .my-xl-0 {\n        margin-top: 0 !important;\n        margin-bottom: 0 !important;\n    }\n\n    .my-xl-1 {\n        margin-top: 0.25rem !important;\n        margin-bottom: 0.25rem !important;\n    }\n\n    .my-xl-2 {\n        margin-top: 0.5rem !important;\n        margin-bottom: 0.5rem !important;\n    }\n\n    .my-xl-3 {\n        margin-top: 1rem !important;\n        margin-bottom: 1rem !important;\n    }\n\n    .my-xl-4 {\n        margin-top: 1.5rem !important;\n        margin-bottom: 1.5rem !important;\n    }\n\n    .my-xl-5 {\n        margin-top: 3rem !important;\n        margin-bottom: 3rem !important;\n    }\n\n    .my-xl-auto {\n        margin-top: auto !important;\n        margin-bottom: auto !important;\n    }\n\n    .mt-xl-0 {\n        margin-top: 0 !important;\n    }\n\n    .mt-xl-1 {\n        margin-top: 0.25rem !important;\n    }\n\n    .mt-xl-2 {\n        margin-top: 0.5rem !important;\n    }\n\n    .mt-xl-3 {\n        margin-top: 1rem !important;\n    }\n\n    .mt-xl-4 {\n        margin-top: 1.5rem !important;\n    }\n\n    .mt-xl-5 {\n        margin-top: 3rem !important;\n    }\n\n    .mt-xl-auto {\n        margin-top: auto !important;\n    }\n\n    .me-xl-0 {\n        margin-left: 0 !important;\n    }\n\n    .me-xl-1 {\n        margin-left: 0.25rem !important;\n    }\n\n    .me-xl-2 {\n        margin-left: 0.5rem !important;\n    }\n\n    .me-xl-3 {\n        margin-left: 1rem !important;\n    }\n\n    .me-xl-4 {\n        margin-left: 1.5rem !important;\n    }\n\n    .me-xl-5 {\n        margin-left: 3rem !important;\n    }\n\n    .me-xl-auto {\n        margin-left: auto !important;\n    }\n\n    .mb-xl-0 {\n        margin-bottom: 0 !important;\n    }\n\n    .mb-xl-1 {\n        margin-bottom: 0.25rem !important;\n    }\n\n    .mb-xl-2 {\n        margin-bottom: 0.5rem !important;\n    }\n\n    .mb-xl-3 {\n        margin-bottom: 1rem !important;\n    }\n\n    .mb-xl-4 {\n        margin-bottom: 1.5rem !important;\n    }\n\n    .mb-xl-5 {\n        margin-bottom: 3rem !important;\n    }\n\n    .mb-xl-auto {\n        margin-bottom: auto !important;\n    }\n\n    .ms-xl-0 {\n        margin-right: 0 !important;\n    }\n\n    .ms-xl-1 {\n        margin-right: 0.25rem !important;\n    }\n\n    .ms-xl-2 {\n        margin-right: 0.5rem !important;\n    }\n\n    .ms-xl-3 {\n        margin-right: 1rem !important;\n    }\n\n    .ms-xl-4 {\n        margin-right: 1.5rem !important;\n    }\n\n    .ms-xl-5 {\n        margin-right: 3rem !important;\n    }\n\n    .ms-xl-auto {\n        margin-right: auto !important;\n    }\n\n    .p-xl-0 {\n        padding: 0 !important;\n    }\n\n    .p-xl-1 {\n        padding: 0.25rem !important;\n    }\n\n    .p-xl-2 {\n        padding: 0.5rem !important;\n    }\n\n    .p-xl-3 {\n        padding: 1rem !important;\n    }\n\n    .p-xl-4 {\n        padding: 1.5rem !important;\n    }\n\n    .p-xl-5 {\n        padding: 3rem !important;\n    }\n\n    .px-xl-0 {\n        padding-left: 0 !important;\n        padding-right: 0 !important;\n    }\n\n    .px-xl-1 {\n        padding-left: 0.25rem !important;\n        padding-right: 0.25rem !important;\n    }\n\n    .px-xl-2 {\n        padding-left: 0.5rem !important;\n        padding-right: 0.5rem !important;\n    }\n\n    .px-xl-3 {\n        padding-left: 1rem !important;\n        padding-right: 1rem !important;\n    }\n\n    .px-xl-4 {\n        padding-left: 1.5rem !important;\n        padding-right: 1.5rem !important;\n    }\n\n    .px-xl-5 {\n        padding-left: 3rem !important;\n        padding-right: 3rem !important;\n    }\n\n    .py-xl-0 {\n        padding-top: 0 !important;\n        padding-bottom: 0 !important;\n    }\n\n    .py-xl-1 {\n        padding-top: 0.25rem !important;\n        padding-bottom: 0.25rem !important;\n    }\n\n    .py-xl-2 {\n        padding-top: 0.5rem !important;\n        padding-bottom: 0.5rem !important;\n    }\n\n    .py-xl-3 {\n        padding-top: 1rem !important;\n        padding-bottom: 1rem !important;\n    }\n\n    .py-xl-4 {\n        padding-top: 1.5rem !important;\n        padding-bottom: 1.5rem !important;\n    }\n\n    .py-xl-5 {\n        padding-top: 3rem !important;\n        padding-bottom: 3rem !important;\n    }\n\n    .pt-xl-0 {\n        padding-top: 0 !important;\n    }\n\n    .pt-xl-1 {\n        padding-top: 0.25rem !important;\n    }\n\n    .pt-xl-2 {\n        padding-top: 0.5rem !important;\n    }\n\n    .pt-xl-3 {\n        padding-top: 1rem !important;\n    }\n\n    .pt-xl-4 {\n        padding-top: 1.5rem !important;\n    }\n\n    .pt-xl-5 {\n        padding-top: 3rem !important;\n    }\n\n    .pe-xl-0 {\n        padding-left: 0 !important;\n    }\n\n    .pe-xl-1 {\n        padding-left: 0.25rem !important;\n    }\n\n    .pe-xl-2 {\n        padding-left: 0.5rem !important;\n    }\n\n    .pe-xl-3 {\n        padding-left: 1rem !important;\n    }\n\n    .pe-xl-4 {\n        padding-left: 1.5rem !important;\n    }\n\n    .pe-xl-5 {\n        padding-left: 3rem !important;\n    }\n\n    .pb-xl-0 {\n        padding-bottom: 0 !important;\n    }\n\n    .pb-xl-1 {\n        padding-bottom: 0.25rem !important;\n    }\n\n    .pb-xl-2 {\n        padding-bottom: 0.5rem !important;\n    }\n\n    .pb-xl-3 {\n        padding-bottom: 1rem !important;\n    }\n\n    .pb-xl-4 {\n        padding-bottom: 1.5rem !important;\n    }\n\n    .pb-xl-5 {\n        padding-bottom: 3rem !important;\n    }\n\n    .ps-xl-0 {\n        padding-right: 0 !important;\n    }\n\n    .ps-xl-1 {\n        padding-right: 0.25rem !important;\n    }\n\n    .ps-xl-2 {\n        padding-right: 0.5rem !important;\n    }\n\n    .ps-xl-3 {\n        padding-right: 1rem !important;\n    }\n\n    .ps-xl-4 {\n        padding-right: 1.5rem !important;\n    }\n\n    .ps-xl-5 {\n        padding-right: 3rem !important;\n    }\n\n    .gap-xl-0 {\n        gap: 0 !important;\n    }\n\n    .gap-xl-1 {\n        gap: 0.25rem !important;\n    }\n\n    .gap-xl-2 {\n        gap: 0.5rem !important;\n    }\n\n    .gap-xl-3 {\n        gap: 1rem !important;\n    }\n\n    .gap-xl-4 {\n        gap: 1.5rem !important;\n    }\n\n    .gap-xl-5 {\n        gap: 3rem !important;\n    }\n\n    .text-xl-start {\n        text-align: right !important;\n    }\n\n    .text-xl-end {\n        text-align: left !important;\n    }\n\n    .text-xl-center {\n        text-align: center !important;\n    }\n}\n\n@media (min-width: 1400px) {\n    .float-xxl-start {\n        float: right !important;\n    }\n\n    .float-xxl-end {\n        float: left !important;\n    }\n\n    .float-xxl-none {\n        float: none !important;\n    }\n\n    .d-xxl-inline {\n        display: inline !important;\n    }\n\n    .d-xxl-inline-block {\n        display: inline-block !important;\n    }\n\n    .d-xxl-block {\n        display: block !important;\n    }\n\n    .d-xxl-grid {\n        display: grid !important;\n    }\n\n    .d-xxl-table {\n        display: table !important;\n    }\n\n    .d-xxl-table-row {\n        display: table-row !important;\n    }\n\n    .d-xxl-table-cell {\n        display: table-cell !important;\n    }\n\n    .d-xxl-flex {\n        display: flex !important;\n    }\n\n    .d-xxl-inline-flex {\n        display: inline-flex !important;\n    }\n\n    .d-xxl-none {\n        display: none !important;\n    }\n\n    .flex-xxl-fill {\n        flex: 1 1 auto !important;\n    }\n\n    .flex-xxl-row {\n        flex-direction: row !important;\n    }\n\n    .flex-xxl-column {\n        flex-direction: column !important;\n    }\n\n    .flex-xxl-row-reverse {\n        flex-direction: row-reverse !important;\n    }\n\n    .flex-xxl-column-reverse {\n        flex-direction: column-reverse !important;\n    }\n\n    .flex-xxl-grow-0 {\n        flex-grow: 0 !important;\n    }\n\n    .flex-xxl-grow-1 {\n        flex-grow: 1 !important;\n    }\n\n    .flex-xxl-shrink-0 {\n        flex-shrink: 0 !important;\n    }\n\n    .flex-xxl-shrink-1 {\n        flex-shrink: 1 !important;\n    }\n\n    .flex-xxl-wrap {\n        flex-wrap: wrap !important;\n    }\n\n    .flex-xxl-nowrap {\n        flex-wrap: nowrap !important;\n    }\n\n    .flex-xxl-wrap-reverse {\n        flex-wrap: wrap-reverse !important;\n    }\n\n    .justify-content-xxl-start {\n        justify-content: flex-start !important;\n    }\n\n    .justify-content-xxl-end {\n        justify-content: flex-end !important;\n    }\n\n    .justify-content-xxl-center {\n        justify-content: center !important;\n    }\n\n    .justify-content-xxl-between {\n        justify-content: space-between !important;\n    }\n\n    .justify-content-xxl-around {\n        justify-content: space-around !important;\n    }\n\n    .justify-content-xxl-evenly {\n        justify-content: space-evenly !important;\n    }\n\n    .align-items-xxl-start {\n        align-items: flex-start !important;\n    }\n\n    .align-items-xxl-end {\n        align-items: flex-end !important;\n    }\n\n    .align-items-xxl-center {\n        align-items: center !important;\n    }\n\n    .align-items-xxl-baseline {\n        align-items: baseline !important;\n    }\n\n    .align-items-xxl-stretch {\n        align-items: stretch !important;\n    }\n\n    .align-content-xxl-start {\n        align-content: flex-start !important;\n    }\n\n    .align-content-xxl-end {\n        align-content: flex-end !important;\n    }\n\n    .align-content-xxl-center {\n        align-content: center !important;\n    }\n\n    .align-content-xxl-between {\n        align-content: space-between !important;\n    }\n\n    .align-content-xxl-around {\n        align-content: space-around !important;\n    }\n\n    .align-content-xxl-stretch {\n        align-content: stretch !important;\n    }\n\n    .align-self-xxl-auto {\n        align-self: auto !important;\n    }\n\n    .align-self-xxl-start {\n        align-self: flex-start !important;\n    }\n\n    .align-self-xxl-end {\n        align-self: flex-end !important;\n    }\n\n    .align-self-xxl-center {\n        align-self: center !important;\n    }\n\n    .align-self-xxl-baseline {\n        align-self: baseline !important;\n    }\n\n    .align-self-xxl-stretch {\n        align-self: stretch !important;\n    }\n\n    .order-xxl-first {\n        order: -1 !important;\n    }\n\n    .order-xxl-0 {\n        order: 0 !important;\n    }\n\n    .order-xxl-1 {\n        order: 1 !important;\n    }\n\n    .order-xxl-2 {\n        order: 2 !important;\n    }\n\n    .order-xxl-3 {\n        order: 3 !important;\n    }\n\n    .order-xxl-4 {\n        order: 4 !important;\n    }\n\n    .order-xxl-5 {\n        order: 5 !important;\n    }\n\n    .order-xxl-last {\n        order: 6 !important;\n    }\n\n    .m-xxl-0 {\n        margin: 0 !important;\n    }\n\n    .m-xxl-1 {\n        margin: 0.25rem !important;\n    }\n\n    .m-xxl-2 {\n        margin: 0.5rem !important;\n    }\n\n    .m-xxl-3 {\n        margin: 1rem !important;\n    }\n\n    .m-xxl-4 {\n        margin: 1.5rem !important;\n    }\n\n    .m-xxl-5 {\n        margin: 3rem !important;\n    }\n\n    .m-xxl-auto {\n        margin: auto !important;\n    }\n\n    .mx-xxl-0 {\n        margin-left: 0 !important;\n        margin-right: 0 !important;\n    }\n\n    .mx-xxl-1 {\n        margin-left: 0.25rem !important;\n        margin-right: 0.25rem !important;\n    }\n\n    .mx-xxl-2 {\n        margin-left: 0.5rem !important;\n        margin-right: 0.5rem !important;\n    }\n\n    .mx-xxl-3 {\n        margin-left: 1rem !important;\n        margin-right: 1rem !important;\n    }\n\n    .mx-xxl-4 {\n        margin-left: 1.5rem !important;\n        margin-right: 1.5rem !important;\n    }\n\n    .mx-xxl-5 {\n        margin-left: 3rem !important;\n        margin-right: 3rem !important;\n    }\n\n    .mx-xxl-auto {\n        margin-left: auto !important;\n        margin-right: auto !important;\n    }\n\n    .my-xxl-0 {\n        margin-top: 0 !important;\n        margin-bottom: 0 !important;\n    }\n\n    .my-xxl-1 {\n        margin-top: 0.25rem !important;\n        margin-bottom: 0.25rem !important;\n    }\n\n    .my-xxl-2 {\n        margin-top: 0.5rem !important;\n        margin-bottom: 0.5rem !important;\n    }\n\n    .my-xxl-3 {\n        margin-top: 1rem !important;\n        margin-bottom: 1rem !important;\n    }\n\n    .my-xxl-4 {\n        margin-top: 1.5rem !important;\n        margin-bottom: 1.5rem !important;\n    }\n\n    .my-xxl-5 {\n        margin-top: 3rem !important;\n        margin-bottom: 3rem !important;\n    }\n\n    .my-xxl-auto {\n        margin-top: auto !important;\n        margin-bottom: auto !important;\n    }\n\n    .mt-xxl-0 {\n        margin-top: 0 !important;\n    }\n\n    .mt-xxl-1 {\n        margin-top: 0.25rem !important;\n    }\n\n    .mt-xxl-2 {\n        margin-top: 0.5rem !important;\n    }\n\n    .mt-xxl-3 {\n        margin-top: 1rem !important;\n    }\n\n    .mt-xxl-4 {\n        margin-top: 1.5rem !important;\n    }\n\n    .mt-xxl-5 {\n        margin-top: 3rem !important;\n    }\n\n    .mt-xxl-auto {\n        margin-top: auto !important;\n    }\n\n    .me-xxl-0 {\n        margin-left: 0 !important;\n    }\n\n    .me-xxl-1 {\n        margin-left: 0.25rem !important;\n    }\n\n    .me-xxl-2 {\n        margin-left: 0.5rem !important;\n    }\n\n    .me-xxl-3 {\n        margin-left: 1rem !important;\n    }\n\n    .me-xxl-4 {\n        margin-left: 1.5rem !important;\n    }\n\n    .me-xxl-5 {\n        margin-left: 3rem !important;\n    }\n\n    .me-xxl-auto {\n        margin-left: auto !important;\n    }\n\n    .mb-xxl-0 {\n        margin-bottom: 0 !important;\n    }\n\n    .mb-xxl-1 {\n        margin-bottom: 0.25rem !important;\n    }\n\n    .mb-xxl-2 {\n        margin-bottom: 0.5rem !important;\n    }\n\n    .mb-xxl-3 {\n        margin-bottom: 1rem !important;\n    }\n\n    .mb-xxl-4 {\n        margin-bottom: 1.5rem !important;\n    }\n\n    .mb-xxl-5 {\n        margin-bottom: 3rem !important;\n    }\n\n    .mb-xxl-auto {\n        margin-bottom: auto !important;\n    }\n\n    .ms-xxl-0 {\n        margin-right: 0 !important;\n    }\n\n    .ms-xxl-1 {\n        margin-right: 0.25rem !important;\n    }\n\n    .ms-xxl-2 {\n        margin-right: 0.5rem !important;\n    }\n\n    .ms-xxl-3 {\n        margin-right: 1rem !important;\n    }\n\n    .ms-xxl-4 {\n        margin-right: 1.5rem !important;\n    }\n\n    .ms-xxl-5 {\n        margin-right: 3rem !important;\n    }\n\n    .ms-xxl-auto {\n        margin-right: auto !important;\n    }\n\n    .p-xxl-0 {\n        padding: 0 !important;\n    }\n\n    .p-xxl-1 {\n        padding: 0.25rem !important;\n    }\n\n    .p-xxl-2 {\n        padding: 0.5rem !important;\n    }\n\n    .p-xxl-3 {\n        padding: 1rem !important;\n    }\n\n    .p-xxl-4 {\n        padding: 1.5rem !important;\n    }\n\n    .p-xxl-5 {\n        padding: 3rem !important;\n    }\n\n    .px-xxl-0 {\n        padding-left: 0 !important;\n        padding-right: 0 !important;\n    }\n\n    .px-xxl-1 {\n        padding-left: 0.25rem !important;\n        padding-right: 0.25rem !important;\n    }\n\n    .px-xxl-2 {\n        padding-left: 0.5rem !important;\n        padding-right: 0.5rem !important;\n    }\n\n    .px-xxl-3 {\n        padding-left: 1rem !important;\n        padding-right: 1rem !important;\n    }\n\n    .px-xxl-4 {\n        padding-left: 1.5rem !important;\n        padding-right: 1.5rem !important;\n    }\n\n    .px-xxl-5 {\n        padding-left: 3rem !important;\n        padding-right: 3rem !important;\n    }\n\n    .py-xxl-0 {\n        padding-top: 0 !important;\n        padding-bottom: 0 !important;\n    }\n\n    .py-xxl-1 {\n        padding-top: 0.25rem !important;\n        padding-bottom: 0.25rem !important;\n    }\n\n    .py-xxl-2 {\n        padding-top: 0.5rem !important;\n        padding-bottom: 0.5rem !important;\n    }\n\n    .py-xxl-3 {\n        padding-top: 1rem !important;\n        padding-bottom: 1rem !important;\n    }\n\n    .py-xxl-4 {\n        padding-top: 1.5rem !important;\n        padding-bottom: 1.5rem !important;\n    }\n\n    .py-xxl-5 {\n        padding-top: 3rem !important;\n        padding-bottom: 3rem !important;\n    }\n\n    .pt-xxl-0 {\n        padding-top: 0 !important;\n    }\n\n    .pt-xxl-1 {\n        padding-top: 0.25rem !important;\n    }\n\n    .pt-xxl-2 {\n        padding-top: 0.5rem !important;\n    }\n\n    .pt-xxl-3 {\n        padding-top: 1rem !important;\n    }\n\n    .pt-xxl-4 {\n        padding-top: 1.5rem !important;\n    }\n\n    .pt-xxl-5 {\n        padding-top: 3rem !important;\n    }\n\n    .pe-xxl-0 {\n        padding-left: 0 !important;\n    }\n\n    .pe-xxl-1 {\n        padding-left: 0.25rem !important;\n    }\n\n    .pe-xxl-2 {\n        padding-left: 0.5rem !important;\n    }\n\n    .pe-xxl-3 {\n        padding-left: 1rem !important;\n    }\n\n    .pe-xxl-4 {\n        padding-left: 1.5rem !important;\n    }\n\n    .pe-xxl-5 {\n        padding-left: 3rem !important;\n    }\n\n    .pb-xxl-0 {\n        padding-bottom: 0 !important;\n    }\n\n    .pb-xxl-1 {\n        padding-bottom: 0.25rem !important;\n    }\n\n    .pb-xxl-2 {\n        padding-bottom: 0.5rem !important;\n    }\n\n    .pb-xxl-3 {\n        padding-bottom: 1rem !important;\n    }\n\n    .pb-xxl-4 {\n        padding-bottom: 1.5rem !important;\n    }\n\n    .pb-xxl-5 {\n        padding-bottom: 3rem !important;\n    }\n\n    .ps-xxl-0 {\n        padding-right: 0 !important;\n    }\n\n    .ps-xxl-1 {\n        padding-right: 0.25rem !important;\n    }\n\n    .ps-xxl-2 {\n        padding-right: 0.5rem !important;\n    }\n\n    .ps-xxl-3 {\n        padding-right: 1rem !important;\n    }\n\n    .ps-xxl-4 {\n        padding-right: 1.5rem !important;\n    }\n\n    .ps-xxl-5 {\n        padding-right: 3rem !important;\n    }\n\n    .gap-xxl-0 {\n        gap: 0 !important;\n    }\n\n    .gap-xxl-1 {\n        gap: 0.25rem !important;\n    }\n\n    .gap-xxl-2 {\n        gap: 0.5rem !important;\n    }\n\n    .gap-xxl-3 {\n        gap: 1rem !important;\n    }\n\n    .gap-xxl-4 {\n        gap: 1.5rem !important;\n    }\n\n    .gap-xxl-5 {\n        gap: 3rem !important;\n    }\n\n    .text-xxl-start {\n        text-align: right !important;\n    }\n\n    .text-xxl-end {\n        text-align: left !important;\n    }\n\n    .text-xxl-center {\n        text-align: center !important;\n    }\n}\n\n@media (min-width: 1200px) {\n    .fs-1 {\n        font-size: 2.5rem !important;\n    }\n\n    .fs-2 {\n        font-size: 2rem !important;\n    }\n\n    .fs-3 {\n        font-size: 1.75rem !important;\n    }\n\n    .fs-4 {\n        font-size: 1.5rem !important;\n    }\n}\n\n@media print {\n    .d-print-inline {\n        display: inline !important;\n    }\n\n    .d-print-inline-block {\n        display: inline-block !important;\n    }\n\n    .d-print-block {\n        display: block !important;\n    }\n\n    .d-print-grid {\n        display: grid !important;\n    }\n\n    .d-print-table {\n        display: table !important;\n    }\n\n    .d-print-table-row {\n        display: table-row !important;\n    }\n\n    .d-print-table-cell {\n        display: table-cell !important;\n    }\n\n    .d-print-flex {\n        display: flex !important;\n    }\n\n    .d-print-inline-flex {\n        display: inline-flex !important;\n    }\n\n    .d-print-none {\n        display: none !important;\n    }\n}\n\n/*# sourceMappingURL=bootstrap.rtl.css.map */"
  },
  {
    "path": "src/main/resources/web/index.html",
    "content": "<!doctype html>\n<!--suppress JSUnusedGlobalSymbols, HtmlFormInputWithoutLabel, JSUnresolvedReference -->\n<html lang=\"en\" xmlns: xmlns:@vue>\n<head>\n    <meta charset=\"utf-8\">\n    <meta content=\"width=device-width,initial-scale=1\" name=\"viewport\">\n    <title>WebApp Hardware Bridge Web UI</title>\n    <link href=\"css/bootstrap.min.css\" rel=\"stylesheet\">\n</head>\n<body>\n<div @vue:mounted=\"mounted\" v-scope>\n    <div class=\"container\">\n        <header class=\"d-flex flex-wrap justify-content-center py-3 mb-4 border-bottom\">\n            <a class=\"d-flex align-items-center mb-3 mb-md-0 me-md-auto link-body-emphasis text-decoration-none\" href=\"#\">\n                <span class=\"fs-4\">WebApp Hardware Bridge Web UI</span>\n            </a>\n            <button @click=\"saveConfig\" class=\"btn btn-success ms-2\">Save</button>\n            <button @click=\"restartServer\" class=\"btn btn-warning ms-2\">Restart Server</button>\n        </header>\n    </div>\n    <div class=\"container\" v-if=\"config != null\">\n        <div class=\"row\">\n            <div class=\"mb-2 col-xl-4\">\n                <div class=\"card mb-2\">\n                    <div class=\"card-body\">\n                        <h5 class=\"card-title mb-3\">GUI</h5>\n\n                        <div class=\"form-group row mb-2\">\n                            <label class=\"col-sm-10\" for=\"gui-notification-enabled\">Enable notification</label>\n                            <div class=\"col-sm-2 text-end\">\n                                <input class=\"form-check-input\" id=\"gui-notification-enabled\" type=\"checkbox\" v-model=\"config.gui.notification.enabled\"/>\n                            </div>\n                        </div>\n                    </div>\n                </div>\n\n                <div class=\"card mb-2\">\n                    <div class=\"card-body\">\n                        <h5 class=\"card-title mb-3\">Web/WebSocket Server</h5>\n\n                        <div class=\"form-group row mb-2\">\n                            <label class=\"col-sm-4\" for=\"server-bind\">Bind</label>\n                            <div class=\"col-sm-8\">\n                                <input class=\"form-control form-control-sm\" id=\"server-bind\" type=\"text\" v-model=\"config.server.bind\"/>\n                            </div>\n                        </div>\n\n                        <div class=\"form-group row mb-2\">\n                            <label class=\"col-sm-4\" for=\"server-address\">Address</label>\n                            <div class=\"col-sm-8\">\n                                <input class=\"form-control form-control-sm\" id=\"server-address\" type=\"text\" v-model=\"config.server.address\"/>\n                            </div>\n                        </div>\n\n                        <div class=\"form-group row mb-2\">\n                            <label class=\"col-sm-4\" for=\"server-port\">Port</label>\n                            <div class=\"col-sm-8\">\n                                <input class=\"form-control form-control-sm\" id=\"server-port\" max=\"65535\" min=\"1024\" type=\"number\" v-model=\"config.server.port\"/>\n                            </div>\n                        </div>\n\n                        <div class=\"form-group row mb-2\">\n                            <label class=\"col-sm-10\" for=\"server-authentication-enabled\">Enable authentication</label>\n                            <div class=\"col-sm-2 text-end\">\n                                <input class=\"form-check-input\" id=\"server-authentication-enabled\" type=\"checkbox\" v-model=\"config.server.authentication.enabled\"/>\n                            </div>\n                        </div>\n\n                        <div class=\"card mb-2\" v-if=\"config.server.authentication.enabled\">\n                            <div class=\"card-body\"><h6 class=\"card-title mb-3\">Authentication</h6>\n                                <div class=\"form-group row mb-2\">\n                                    <label class=\"col-sm-4\" for=\"server-authentication-token\">Token</label>\n                                    <div class=\"col-sm-8\">\n                                        <input class=\"form-control form-control-sm\" id=\"server-authentication-token\" type=\"text\" v-model=\"config.server.authentication.token\"/>\n                                    </div>\n                                </div>\n                            </div>\n                        </div>\n\n                        <div class=\"form-group row mb-2\">\n                            <label class=\"col-sm-10\" for=\"server-tls-enabled\">Enable TLS</label>\n                            <div class=\"col-sm-2 text-end\">\n                                <input class=\"form-check-input\" id=\"server-tls-enabled\" type=\"checkbox\" v-model=\"config.server.tls.enabled\"/>\n                            </div>\n                        </div>\n\n                        <div class=\"card mb-2\" v-if=\"config.server.tls.enabled\">\n                            <div class=\"card-body\"><h6 class=\"card-title mb-3\">TLS</h6>\n                                <div class=\"form-group row mb-2\">\n                                    <label class=\"col-sm-4\" for=\"server-tls-self-signed\">Self Signed</label>\n                                    <div class=\"col-sm-8\">\n                                        <input class=\"form-check-input\" id=\"server-tls-self-signed\" type=\"checkbox\" v-model=\"config.server.tls.selfSigned\"/>\n                                    </div>\n                                </div>\n\n                                <div class=\"form-group row mb-2\">\n                                    <label class=\"col-sm-4\" for=\"server-tls-cert\">Cert</label>\n                                    <div class=\"col-sm-8\">\n                                        <input class=\"form-control form-control-sm\" id=\"server-tls-cert\" type=\"text\" v-model=\"config.server.tls.cert\"/>\n                                    </div>\n                                </div>\n\n                                <div class=\"form-group row mb-2\">\n                                    <label class=\"col-sm-4\" for=\"server-tls-key\">Key</label>\n                                    <div class=\"col-sm-8\">\n                                        <input class=\"form-control form-control-sm\" id=\"server-tls-key\" type=\"text\" v-model=\"config.server.tls.key\"/>\n                                    </div>\n                                </div>\n\n                                <div class=\"form-group row mb-2\">\n                                    <label class=\"col-sm-4\" for=\"server-tls-ca-bundle\">CA Bundle</label>\n                                    <div class=\"col-sm-8\">\n                                        <input class=\"form-control form-control-sm\" id=\"server-tls-ca-bundle\" type=\"text\" v-model=\"config.server.tls.caBundle\"/>\n                                    </div>\n                                </div>\n                            </div>\n                        </div>\n                    </div>\n                </div>\n\n                <div class=\"card\">\n                    <div class=\"card-body\">\n                        <h5 class=\"card-title mb-3\">Downloader</h5>\n\n                        <div class=\"form-group row mb-2\">\n                            <label class=\"col-sm-4\" for=\"downloader-path\">Path</label>\n                            <div class=\"col-sm-8\">\n                                <input class=\"form-control form-control-sm\" id=\"downloader-path\" type=\"text\" v-model=\"config.downloader.path\"/>\n                            </div>\n                        </div>\n\n                        <div class=\"form-group row mb-2\">\n                            <label class=\"col-sm-4\" for=\"downloader-timeout\">Timeout</label>\n                            <div class=\"col-sm-8\">\n                                <input class=\"form-control form-control-sm\" id=\"downloader-timeout\" type=\"number\" v-model=\"config.downloader.timeout\"/>\n                            </div>\n                        </div>\n\n                        <div class=\"form-group row mb-2\">\n                            <label class=\"col-sm-10\" for=\"downloader-ignore-tls-certificate-error\">Ignore TLS certificate error</label>\n                            <div class=\"col-sm-2 text-end\">\n                                <input class=\"form-check-input\" id=\"downloader-ignore-tls-certificate-error\" type=\"checkbox\" v-model=\"config.downloader.ignoreTLSCertificateError\"/>\n                            </div>\n                        </div>\n                    </div>\n                </div>\n            </div>\n\n\n            <div class=\"mb-2 col-xl-4\">\n                <div class=\"card\">\n                    <div class=\"card-body\">\n                        <h5 class=\"card-title mb-3\">\n                            Printers\n                            <button @click=\"addPrinter\" class=\"btn btn-sm btn-success float-end\">+</button>\n                        </h5>\n\n                        <div class=\"clearfix pb-3\"></div>\n\n                        <div class=\"form-group row mb-2\">\n                            <label class=\"col-sm-10\" for=\"printer-enabled\">Enabled</label>\n                            <div class=\"col-sm-2 text-end\">\n                                <input class=\"form-check-input\" id=\"printer-enabled\" type=\"checkbox\" v-model=\"config.printer.enabled\"/>\n                            </div>\n                        </div>\n\n                        <div class=\"form-group row mb-2\">\n                            <label class=\"col-sm-10\" for=\"printer-auto-add-unknown-type\">Auto add unknown type</label>\n                            <div class=\"col-sm-2 text-end\">\n                                <input class=\"form-check-input\" id=\"printer-auto-add-unknown-type\" type=\"checkbox\" v-model=\"config.printer.autoAddUnknownType\"/>\n                            </div>\n                        </div>\n\n                        <div class=\"form-group row mb-2\">\n                            <label class=\"col-sm-10\" for=\"printer-fallback-to-default\">Fallback to default printer if none matched</label>\n                            <div class=\"col-sm-2 text-end\">\n                                <input class=\"form-check-input\" id=\"printer-fallback-to-default\" type=\"checkbox\" v-model=\"config.printer.fallbackToDefault\"/>\n                            </div>\n                        </div>\n\n                        <div class=\"card mb-2\" v-for=\"(printer, index) in config.printer.mappings\">\n                            <div class=\"card-body\">\n                                <h5 class=\"card-title mb-3\">\n                                    Printer {{ index + 1 }} <span v-if=\"printer.type\">({{ printer.type }})</span>\n                                    <button @click=\"removePrinter(index)\" class=\"btn btn-sm btn-danger float-end\">-</button>\n                                </h5>\n\n                                <div class=\"form-group row mb-2\">\n                                    <label class=\"col-sm-4\">Type</label>\n                                    <div class=\"col-sm-8\">\n                                        <input class=\"form-control form-control-sm\" type=\"text\" v-model=\"printer.type\"/>\n                                    </div>\n                                </div>\n\n                                <div class=\"form-group row mb-2\">\n                                    <label class=\"col-sm-4\">Printer Name</label>\n                                    <div class=\"col-sm-8\">\n                                        <select class=\"form-control form-control-sm\" type=\"text\" v-model=\"printer.name\">\n                                            <option :value=\"printerSelection.name\" v-for=\"printerSelection in printers\">{{ printerSelection.name }}</option>\n                                        </select>\n                                    </div>\n                                </div>\n\n                                <div class=\"form-group row mb-2\">\n                                    <label class=\"col-sm-10\">Auto rotate</label>\n                                    <div class=\"col-sm-2 text-end\">\n                                        <input class=\"form-check-input\" type=\"checkbox\" v-model=\"printer.autoRotate\"/>\n                                    </div>\n                                </div>\n\n                                <div class=\"form-group row mb-2\">\n                                    <label class=\"col-sm-10\">Reset imageable area</label>\n                                    <div class=\"col-sm-2 text-end\">\n                                        <input class=\"form-check-input\" type=\"checkbox\" v-model=\"printer.resetImageableArea\"/>\n                                    </div>\n                                </div>\n\n                                <div class=\"form-group row mb-2\">\n                                    <label class=\"col-sm-4\">Force DPI</label>\n                                    <div class=\"col-sm-8\">\n                                        <input class=\"form-control form-control-sm\" type=\"number\" v-model=\"printer.forceDPI\"/>\n                                    </div>\n                                </div>\n                            </div>\n                        </div>\n                    </div>\n                </div>\n            </div>\n\n            <div class=\"mb-2 col-xl-4\">\n                <div class=\"card\">\n                    <div class=\"card-body\">\n                        <h5 class=\"card-title mb-3\">\n                            Serials\n                            <button @click=\"addSerial\" class=\"btn btn-sm btn-success float-end\">+</button>\n                        </h5>\n\n                        <div class=\"clearfix pb-3\"></div>\n\n                        <div class=\"form-group row mb-2\">\n                            <label class=\"col-sm-10\" for=\"printer-enabled\">Enabled</label>\n                            <div class=\"col-sm-2 text-end\">\n                                <input class=\"form-check-input\" id=\"serial-enabled\" type=\"checkbox\" v-model=\"config.serial.enabled\"/>\n                            </div>\n                        </div>\n\n                        <div class=\"card mb-2\" v-for=\"(serial, index) in config.serial.mappings\">\n                            <div class=\"card-body\">\n                                <h5 class=\"card-title mb-3\">\n                                    Serial {{ index + 1 }} <span v-if=\"serial.type\">({{ serial.type }})</span>\n                                    <button @click=\"removeSerial(index)\" class=\"btn btn-sm btn-danger float-end\">-</button>\n                                </h5>\n\n                                <div class=\"form-group row mb-2\">\n                                    <label class=\"col-sm-4\">Type</label>\n                                    <div class=\"col-sm-8\">\n                                        <input class=\"form-control form-control-sm\" type=\"text\" v-model=\"serial.type\"/>\n                                    </div>\n                                </div>\n\n                                <div class=\"form-group row mb-2\">\n                                    <label class=\"col-sm-4\">Serial Port</label>\n                                    <div class=\"col-sm-8\">\n                                        <select class=\"form-control form-control-sm\" type=\"text\" v-model=\"serial.name\">\n                                            <option :value=\"serial.name\" v-for=\"serial in serials\">{{ serial.name }}</option>\n                                        </select>\n                                    </div>\n                                </div>\n\n                                <div class=\"form-group row mb-2\">\n                                    <label class=\"col-sm-4\">Baud Rate</label>\n                                    <div class=\"col-sm-8\">\n                                        <input class=\"form-control form-control-sm\" type=\"number\" v-model=\"serial.baudRate\"/>\n                                    </div>\n                                </div>\n\n                                <div class=\"form-group row mb-2\">\n                                    <label class=\"col-sm-4\">Data Bits</label>\n                                    <div class=\"col-sm-8\">\n                                        <input class=\"form-control form-control-sm\" type=\"number\" v-model=\"serial.numDataBits\"/>\n                                    </div>\n                                </div>\n\n                                <div class=\"form-group row mb-2\">\n                                    <label class=\"col-sm-4\">Stop Bits</label>\n                                    <div class=\"col-sm-8\">\n                                        <input class=\"form-control form-control-sm\" type=\"number\" v-model=\"serial.numStopBits\"/>\n                                    </div>\n                                </div>\n\n                                <div class=\"form-group row mb-2\">\n                                    <label class=\"col-sm-4\">Parity</label>\n                                    <div class=\"col-sm-8\">\n                                        <input class=\"form-control form-control-sm\" type=\"number\" v-model=\"serial.parity\"/>\n                                    </div>\n                                </div>\n\n                                <div class=\"form-group row mb-2\">\n                                    <label class=\"col-sm-4\">Read Charset</label>\n                                    <div class=\"col-sm-8\">\n                                        <select class=\"form-control form-control-sm\" type=\"text\" v-model=\"serial.readCharset\">\n                                            <option :value=\"charset\" v-for=\"charset in ['UTF-8', 'US-ASCII', 'BINARY']\">{{ charset }}</option>\n                                        </select>\n                                    </div>\n                                </div>\n\n                                <div class=\"form-group row mb-2\">\n                                    <label class=\"col-sm-10\">Read Multi-bytes</label>\n                                    <div class=\"col-sm-2 text-end\">\n                                        <input class=\"form-check-input\" type=\"checkbox\" v-model=\"serial.readMultipleBytes\"/>\n                                    </div>\n                                </div>\n                            </div>\n                        </div>\n                    </div>\n                </div>\n            </div>\n        </div>\n    </div>\n</div>\n<script src=\"js/bootstrap.bundle.min.js\"></script>\n<script src=\"js/axios.min.js\"></script>\n<script type=\"module\">import { createApp } from './js/petite-vue.js'\n\ncreateApp({\n    config: null,\n    printers: [],\n    serials: [],\n\n    loadConfig() {\n        return axios.get('/config.json')\n            .then(response => this.config = response.data)\n    },\n    saveConfig() {\n        return axios.put('/config.json', this.config)\n            .then(response => this.config = response.data)\n    },\n    addPrinter() {\n        this.config.printer.mappings.push({type: '', name: ''})\n    },\n    removePrinter(index) {\n        this.config.printer.mappings.splice(index, 1)\n    },\n    addSerial() {\n        this.config.serial.mappings.push({type: '', name: ''})\n    },\n    removeSerial(index) {\n        this.config.serial.mappings.splice(index, 1)\n    },\n    loadPrinters() {\n        return axios.get('/system/printers.json')\n            .then(response => this.printers = response.data)\n    },\n    loadSerials() {\n        return axios.get('/system/serials.json')\n            .then(response => this.serials = response.data)\n    },\n    restartServer() {\n        return axios.post('/system/restart.json', this.config)\n    },\n    mounted() {\n        Promise.all([this.loadPrinters(), this.loadSerials()]).then(() => {\n            this.loadConfig()\n        })\n    }\n}).mount()</script>\n</body>\n</html>"
  },
  {
    "path": "src/main/resources/web/js/bootstrap.bundle.js",
    "content": "/*!\n  * Bootstrap v5.2.3 (https://getbootstrap.com/)\n  * Copyright 2011-2022 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)\n  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n  */\n(function (global, factory) {\n    typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n        typeof define === 'function' && define.amd ? define(factory) :\n            (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.bootstrap = factory());\n})(this, (function () {\n    'use strict';\n\n    /**\n     * --------------------------------------------------------------------------\n     * Bootstrap (v5.2.3): util/index.js\n     * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n     * --------------------------------------------------------------------------\n     */\n    const MAX_UID = 1000000;\n    const MILLISECONDS_MULTIPLIER = 1000;\n    const TRANSITION_END = 'transitionend'; // Shout-out Angus Croll (https://goo.gl/pxwQGp)\n\n    const toType = object => {\n        if (object === null || object === undefined) {\n            return `${object}`;\n        }\n\n        return Object.prototype.toString.call(object).match(/\\s([a-z]+)/i)[1].toLowerCase();\n    };\n    /**\n     * Public Util API\n     */\n\n\n    const getUID = prefix => {\n        do {\n            prefix += Math.floor(Math.random() * MAX_UID);\n        } while (document.getElementById(prefix));\n\n        return prefix;\n    };\n\n    const getSelector = element => {\n        let selector = element.getAttribute('data-bs-target');\n\n        if (!selector || selector === '#') {\n            let hrefAttribute = element.getAttribute('href'); // The only valid content that could double as a selector are IDs or classes,\n            // so everything starting with `#` or `.`. If a \"real\" URL is used as the selector,\n            // `document.querySelector` will rightfully complain it is invalid.\n            // See https://github.com/twbs/bootstrap/issues/32273\n\n            if (!hrefAttribute || !hrefAttribute.includes('#') && !hrefAttribute.startsWith('.')) {\n                return null;\n            } // Just in case some CMS puts out a full URL with the anchor appended\n\n\n            if (hrefAttribute.includes('#') && !hrefAttribute.startsWith('#')) {\n                hrefAttribute = `#${hrefAttribute.split('#')[1]}`;\n            }\n\n            selector = hrefAttribute && hrefAttribute !== '#' ? hrefAttribute.trim() : null;\n        }\n\n        return selector;\n    };\n\n    const getSelectorFromElement = element => {\n        const selector = getSelector(element);\n\n        if (selector) {\n            return document.querySelector(selector) ? selector : null;\n        }\n\n        return null;\n    };\n\n    const getElementFromSelector = element => {\n        const selector = getSelector(element);\n        return selector ? document.querySelector(selector) : null;\n    };\n\n    const getTransitionDurationFromElement = element => {\n        if (!element) {\n            return 0;\n        } // Get transition-duration of the element\n\n\n        let {\n            transitionDuration,\n            transitionDelay\n        } = window.getComputedStyle(element);\n        const floatTransitionDuration = Number.parseFloat(transitionDuration);\n        const floatTransitionDelay = Number.parseFloat(transitionDelay); // Return 0 if element or transition duration is not found\n\n        if (!floatTransitionDuration && !floatTransitionDelay) {\n            return 0;\n        } // If multiple durations are defined, take the first\n\n\n        transitionDuration = transitionDuration.split(',')[0];\n        transitionDelay = transitionDelay.split(',')[0];\n        return (Number.parseFloat(transitionDuration) + Number.parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER;\n    };\n\n    const triggerTransitionEnd = element => {\n        element.dispatchEvent(new Event(TRANSITION_END));\n    };\n\n    const isElement$1 = object => {\n        if (!object || typeof object !== 'object') {\n            return false;\n        }\n\n        if (typeof object.jquery !== 'undefined') {\n            object = object[0];\n        }\n\n        return typeof object.nodeType !== 'undefined';\n    };\n\n    const getElement = object => {\n        // it's a jQuery object or a node element\n        if (isElement$1(object)) {\n            return object.jquery ? object[0] : object;\n        }\n\n        if (typeof object === 'string' && object.length > 0) {\n            return document.querySelector(object);\n        }\n\n        return null;\n    };\n\n    const isVisible = element => {\n        if (!isElement$1(element) || element.getClientRects().length === 0) {\n            return false;\n        }\n\n        const elementIsVisible = getComputedStyle(element).getPropertyValue('visibility') === 'visible'; // Handle `details` element as its content may falsie appear visible when it is closed\n\n        const closedDetails = element.closest('details:not([open])');\n\n        if (!closedDetails) {\n            return elementIsVisible;\n        }\n\n        if (closedDetails !== element) {\n            const summary = element.closest('summary');\n\n            if (summary && summary.parentNode !== closedDetails) {\n                return false;\n            }\n\n            if (summary === null) {\n                return false;\n            }\n        }\n\n        return elementIsVisible;\n    };\n\n    const isDisabled = element => {\n        if (!element || element.nodeType !== Node.ELEMENT_NODE) {\n            return true;\n        }\n\n        if (element.classList.contains('disabled')) {\n            return true;\n        }\n\n        if (typeof element.disabled !== 'undefined') {\n            return element.disabled;\n        }\n\n        return element.hasAttribute('disabled') && element.getAttribute('disabled') !== 'false';\n    };\n\n    const findShadowRoot = element => {\n        if (!document.documentElement.attachShadow) {\n            return null;\n        } // Can find the shadow root otherwise it'll return the document\n\n\n        if (typeof element.getRootNode === 'function') {\n            const root = element.getRootNode();\n            return root instanceof ShadowRoot ? root : null;\n        }\n\n        if (element instanceof ShadowRoot) {\n            return element;\n        } // when we don't find a shadow root\n\n\n        if (!element.parentNode) {\n            return null;\n        }\n\n        return findShadowRoot(element.parentNode);\n    };\n\n    const noop = () => {\n    };\n    /**\n     * Trick to restart an element's animation\n     *\n     * @param {HTMLElement} element\n     * @return void\n     *\n     * @see https://www.charistheo.io/blog/2021/02/restart-a-css-animation-with-javascript/#restarting-a-css-animation\n     */\n\n\n    const reflow = element => {\n        element.offsetHeight; // eslint-disable-line no-unused-expressions\n    };\n\n    const getjQuery = () => {\n        if (window.jQuery && !document.body.hasAttribute('data-bs-no-jquery')) {\n            return window.jQuery;\n        }\n\n        return null;\n    };\n\n    const DOMContentLoadedCallbacks = [];\n\n    const onDOMContentLoaded = callback => {\n        if (document.readyState === 'loading') {\n            // add listener on the first call when the document is in loading state\n            if (!DOMContentLoadedCallbacks.length) {\n                document.addEventListener('DOMContentLoaded', () => {\n                    for (const callback of DOMContentLoadedCallbacks) {\n                        callback();\n                    }\n                });\n            }\n\n            DOMContentLoadedCallbacks.push(callback);\n        } else {\n            callback();\n        }\n    };\n\n    const isRTL = () => document.documentElement.dir === 'rtl';\n\n    const defineJQueryPlugin = plugin => {\n        onDOMContentLoaded(() => {\n            const $ = getjQuery();\n            /* istanbul ignore if */\n\n            if ($) {\n                const name = plugin.NAME;\n                const JQUERY_NO_CONFLICT = $.fn[name];\n                $.fn[name] = plugin.jQueryInterface;\n                $.fn[name].Constructor = plugin;\n\n                $.fn[name].noConflict = () => {\n                    $.fn[name] = JQUERY_NO_CONFLICT;\n                    return plugin.jQueryInterface;\n                };\n            }\n        });\n    };\n\n    const execute = callback => {\n        if (typeof callback === 'function') {\n            callback();\n        }\n    };\n\n    const executeAfterTransition = (callback, transitionElement, waitForTransition = true) => {\n        if (!waitForTransition) {\n            execute(callback);\n            return;\n        }\n\n        const durationPadding = 5;\n        const emulatedDuration = getTransitionDurationFromElement(transitionElement) + durationPadding;\n        let called = false;\n\n        const handler = ({\n                             target\n                         }) => {\n            if (target !== transitionElement) {\n                return;\n            }\n\n            called = true;\n            transitionElement.removeEventListener(TRANSITION_END, handler);\n            execute(callback);\n        };\n\n        transitionElement.addEventListener(TRANSITION_END, handler);\n        setTimeout(() => {\n            if (!called) {\n                triggerTransitionEnd(transitionElement);\n            }\n        }, emulatedDuration);\n    };\n    /**\n     * Return the previous/next element of a list.\n     *\n     * @param {array} list    The list of elements\n     * @param activeElement   The active element\n     * @param shouldGetNext   Choose to get next or previous element\n     * @param isCycleAllowed\n     * @return {Element|elem} The proper element\n     */\n\n\n    const getNextActiveElement = (list, activeElement, shouldGetNext, isCycleAllowed) => {\n        const listLength = list.length;\n        let index = list.indexOf(activeElement); // if the element does not exist in the list return an element\n        // depending on the direction and if cycle is allowed\n\n        if (index === -1) {\n            return !shouldGetNext && isCycleAllowed ? list[listLength - 1] : list[0];\n        }\n\n        index += shouldGetNext ? 1 : -1;\n\n        if (isCycleAllowed) {\n            index = (index + listLength) % listLength;\n        }\n\n        return list[Math.max(0, Math.min(index, listLength - 1))];\n    };\n\n    /**\n     * --------------------------------------------------------------------------\n     * Bootstrap (v5.2.3): dom/event-handler.js\n     * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n     * --------------------------------------------------------------------------\n     */\n    /**\n     * Constants\n     */\n\n    const namespaceRegex = /[^.]*(?=\\..*)\\.|.*/;\n    const stripNameRegex = /\\..*/;\n    const stripUidRegex = /::\\d+$/;\n    const eventRegistry = {}; // Events storage\n\n    let uidEvent = 1;\n    const customEvents = {\n        mouseenter: 'mouseover',\n        mouseleave: 'mouseout'\n    };\n    const nativeEvents = new Set(['click', 'dblclick', 'mouseup', 'mousedown', 'contextmenu', 'mousewheel', 'DOMMouseScroll', 'mouseover', 'mouseout', 'mousemove', 'selectstart', 'selectend', 'keydown', 'keypress', 'keyup', 'orientationchange', 'touchstart', 'touchmove', 'touchend', 'touchcancel', 'pointerdown', 'pointermove', 'pointerup', 'pointerleave', 'pointercancel', 'gesturestart', 'gesturechange', 'gestureend', 'focus', 'blur', 'change', 'reset', 'select', 'submit', 'focusin', 'focusout', 'load', 'unload', 'beforeunload', 'resize', 'move', 'DOMContentLoaded', 'readystatechange', 'error', 'abort', 'scroll']);\n\n    /**\n     * Private methods\n     */\n\n    function makeEventUid(element, uid) {\n        return uid && `${uid}::${uidEvent++}` || element.uidEvent || uidEvent++;\n    }\n\n    function getElementEvents(element) {\n        const uid = makeEventUid(element);\n        element.uidEvent = uid;\n        eventRegistry[uid] = eventRegistry[uid] || {};\n        return eventRegistry[uid];\n    }\n\n    function bootstrapHandler(element, fn) {\n        return function handler(event) {\n            hydrateObj(event, {\n                delegateTarget: element\n            });\n\n            if (handler.oneOff) {\n                EventHandler.off(element, event.type, fn);\n            }\n\n            return fn.apply(element, [event]);\n        };\n    }\n\n    function bootstrapDelegationHandler(element, selector, fn) {\n        return function handler(event) {\n            const domElements = element.querySelectorAll(selector);\n\n            for (let {\n                target\n            } = event; target && target !== this; target = target.parentNode) {\n                for (const domElement of domElements) {\n                    if (domElement !== target) {\n                        continue;\n                    }\n\n                    hydrateObj(event, {\n                        delegateTarget: target\n                    });\n\n                    if (handler.oneOff) {\n                        EventHandler.off(element, event.type, selector, fn);\n                    }\n\n                    return fn.apply(target, [event]);\n                }\n            }\n        };\n    }\n\n    function findHandler(events, callable, delegationSelector = null) {\n        return Object.values(events).find(event => event.callable === callable && event.delegationSelector === delegationSelector);\n    }\n\n    function normalizeParameters(originalTypeEvent, handler, delegationFunction) {\n        const isDelegated = typeof handler === 'string'; // todo: tooltip passes `false` instead of selector, so we need to check\n\n        const callable = isDelegated ? delegationFunction : handler || delegationFunction;\n        let typeEvent = getTypeEvent(originalTypeEvent);\n\n        if (!nativeEvents.has(typeEvent)) {\n            typeEvent = originalTypeEvent;\n        }\n\n        return [isDelegated, callable, typeEvent];\n    }\n\n    function addHandler(element, originalTypeEvent, handler, delegationFunction, oneOff) {\n        if (typeof originalTypeEvent !== 'string' || !element) {\n            return;\n        }\n\n        let [isDelegated, callable, typeEvent] = normalizeParameters(originalTypeEvent, handler, delegationFunction); // in case of mouseenter or mouseleave wrap the handler within a function that checks for its DOM position\n        // this prevents the handler from being dispatched the same way as mouseover or mouseout does\n\n        if (originalTypeEvent in customEvents) {\n            const wrapFunction = fn => {\n                return function (event) {\n                    if (!event.relatedTarget || event.relatedTarget !== event.delegateTarget && !event.delegateTarget.contains(event.relatedTarget)) {\n                        return fn.call(this, event);\n                    }\n                };\n            };\n\n            callable = wrapFunction(callable);\n        }\n\n        const events = getElementEvents(element);\n        const handlers = events[typeEvent] || (events[typeEvent] = {});\n        const previousFunction = findHandler(handlers, callable, isDelegated ? handler : null);\n\n        if (previousFunction) {\n            previousFunction.oneOff = previousFunction.oneOff && oneOff;\n            return;\n        }\n\n        const uid = makeEventUid(callable, originalTypeEvent.replace(namespaceRegex, ''));\n        const fn = isDelegated ? bootstrapDelegationHandler(element, handler, callable) : bootstrapHandler(element, callable);\n        fn.delegationSelector = isDelegated ? handler : null;\n        fn.callable = callable;\n        fn.oneOff = oneOff;\n        fn.uidEvent = uid;\n        handlers[uid] = fn;\n        element.addEventListener(typeEvent, fn, isDelegated);\n    }\n\n    function removeHandler(element, events, typeEvent, handler, delegationSelector) {\n        const fn = findHandler(events[typeEvent], handler, delegationSelector);\n\n        if (!fn) {\n            return;\n        }\n\n        element.removeEventListener(typeEvent, fn, Boolean(delegationSelector));\n        delete events[typeEvent][fn.uidEvent];\n    }\n\n    function removeNamespacedHandlers(element, events, typeEvent, namespace) {\n        const storeElementEvent = events[typeEvent] || {};\n\n        for (const handlerKey of Object.keys(storeElementEvent)) {\n            if (handlerKey.includes(namespace)) {\n                const event = storeElementEvent[handlerKey];\n                removeHandler(element, events, typeEvent, event.callable, event.delegationSelector);\n            }\n        }\n    }\n\n    function getTypeEvent(event) {\n        // allow to get the native events from namespaced events ('click.bs.button' --> 'click')\n        event = event.replace(stripNameRegex, '');\n        return customEvents[event] || event;\n    }\n\n    const EventHandler = {\n        on(element, event, handler, delegationFunction) {\n            addHandler(element, event, handler, delegationFunction, false);\n        },\n\n        one(element, event, handler, delegationFunction) {\n            addHandler(element, event, handler, delegationFunction, true);\n        },\n\n        off(element, originalTypeEvent, handler, delegationFunction) {\n            if (typeof originalTypeEvent !== 'string' || !element) {\n                return;\n            }\n\n            const [isDelegated, callable, typeEvent] = normalizeParameters(originalTypeEvent, handler, delegationFunction);\n            const inNamespace = typeEvent !== originalTypeEvent;\n            const events = getElementEvents(element);\n            const storeElementEvent = events[typeEvent] || {};\n            const isNamespace = originalTypeEvent.startsWith('.');\n\n            if (typeof callable !== 'undefined') {\n                // Simplest case: handler is passed, remove that listener ONLY.\n                if (!Object.keys(storeElementEvent).length) {\n                    return;\n                }\n\n                removeHandler(element, events, typeEvent, callable, isDelegated ? handler : null);\n                return;\n            }\n\n            if (isNamespace) {\n                for (const elementEvent of Object.keys(events)) {\n                    removeNamespacedHandlers(element, events, elementEvent, originalTypeEvent.slice(1));\n                }\n            }\n\n            for (const keyHandlers of Object.keys(storeElementEvent)) {\n                const handlerKey = keyHandlers.replace(stripUidRegex, '');\n\n                if (!inNamespace || originalTypeEvent.includes(handlerKey)) {\n                    const event = storeElementEvent[keyHandlers];\n                    removeHandler(element, events, typeEvent, event.callable, event.delegationSelector);\n                }\n            }\n        },\n\n        trigger(element, event, args) {\n            if (typeof event !== 'string' || !element) {\n                return null;\n            }\n\n            const $ = getjQuery();\n            const typeEvent = getTypeEvent(event);\n            const inNamespace = event !== typeEvent;\n            let jQueryEvent = null;\n            let bubbles = true;\n            let nativeDispatch = true;\n            let defaultPrevented = false;\n\n            if (inNamespace && $) {\n                jQueryEvent = $.Event(event, args);\n                $(element).trigger(jQueryEvent);\n                bubbles = !jQueryEvent.isPropagationStopped();\n                nativeDispatch = !jQueryEvent.isImmediatePropagationStopped();\n                defaultPrevented = jQueryEvent.isDefaultPrevented();\n            }\n\n            let evt = new Event(event, {\n                bubbles,\n                cancelable: true\n            });\n            evt = hydrateObj(evt, args);\n\n            if (defaultPrevented) {\n                evt.preventDefault();\n            }\n\n            if (nativeDispatch) {\n                element.dispatchEvent(evt);\n            }\n\n            if (evt.defaultPrevented && jQueryEvent) {\n                jQueryEvent.preventDefault();\n            }\n\n            return evt;\n        }\n\n    };\n\n    function hydrateObj(obj, meta) {\n        for (const [key, value] of Object.entries(meta || {})) {\n            try {\n                obj[key] = value;\n            } catch (_unused) {\n                Object.defineProperty(obj, key, {\n                    configurable: true,\n\n                    get() {\n                        return value;\n                    }\n\n                });\n            }\n        }\n\n        return obj;\n    }\n\n    /**\n     * --------------------------------------------------------------------------\n     * Bootstrap (v5.2.3): dom/data.js\n     * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n     * --------------------------------------------------------------------------\n     */\n\n    /**\n     * Constants\n     */\n    const elementMap = new Map();\n    const Data = {\n        set(element, key, instance) {\n            if (!elementMap.has(element)) {\n                elementMap.set(element, new Map());\n            }\n\n            const instanceMap = elementMap.get(element); // make it clear we only want one instance per element\n            // can be removed later when multiple key/instances are fine to be used\n\n            if (!instanceMap.has(key) && instanceMap.size !== 0) {\n                // eslint-disable-next-line no-console\n                console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(instanceMap.keys())[0]}.`);\n                return;\n            }\n\n            instanceMap.set(key, instance);\n        },\n\n        get(element, key) {\n            if (elementMap.has(element)) {\n                return elementMap.get(element).get(key) || null;\n            }\n\n            return null;\n        },\n\n        remove(element, key) {\n            if (!elementMap.has(element)) {\n                return;\n            }\n\n            const instanceMap = elementMap.get(element);\n            instanceMap.delete(key); // free up element references if there are no instances left for an element\n\n            if (instanceMap.size === 0) {\n                elementMap.delete(element);\n            }\n        }\n\n    };\n\n    /**\n     * --------------------------------------------------------------------------\n     * Bootstrap (v5.2.3): dom/manipulator.js\n     * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n     * --------------------------------------------------------------------------\n     */\n    function normalizeData(value) {\n        if (value === 'true') {\n            return true;\n        }\n\n        if (value === 'false') {\n            return false;\n        }\n\n        if (value === Number(value).toString()) {\n            return Number(value);\n        }\n\n        if (value === '' || value === 'null') {\n            return null;\n        }\n\n        if (typeof value !== 'string') {\n            return value;\n        }\n\n        try {\n            return JSON.parse(decodeURIComponent(value));\n        } catch (_unused) {\n            return value;\n        }\n    }\n\n    function normalizeDataKey(key) {\n        return key.replace(/[A-Z]/g, chr => `-${chr.toLowerCase()}`);\n    }\n\n    const Manipulator = {\n        setDataAttribute(element, key, value) {\n            element.setAttribute(`data-bs-${normalizeDataKey(key)}`, value);\n        },\n\n        removeDataAttribute(element, key) {\n            element.removeAttribute(`data-bs-${normalizeDataKey(key)}`);\n        },\n\n        getDataAttributes(element) {\n            if (!element) {\n                return {};\n            }\n\n            const attributes = {};\n            const bsKeys = Object.keys(element.dataset).filter(key => key.startsWith('bs') && !key.startsWith('bsConfig'));\n\n            for (const key of bsKeys) {\n                let pureKey = key.replace(/^bs/, '');\n                pureKey = pureKey.charAt(0).toLowerCase() + pureKey.slice(1, pureKey.length);\n                attributes[pureKey] = normalizeData(element.dataset[key]);\n            }\n\n            return attributes;\n        },\n\n        getDataAttribute(element, key) {\n            return normalizeData(element.getAttribute(`data-bs-${normalizeDataKey(key)}`));\n        }\n\n    };\n\n    /**\n     * --------------------------------------------------------------------------\n     * Bootstrap (v5.2.3): util/config.js\n     * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n     * --------------------------------------------------------------------------\n     */\n    /**\n     * Class definition\n     */\n\n    class Config {\n        // Getters\n        static get Default() {\n            return {};\n        }\n\n        static get DefaultType() {\n            return {};\n        }\n\n        static get NAME() {\n            throw new Error('You have to implement the static method \"NAME\", for each component!');\n        }\n\n        _getConfig(config) {\n            config = this._mergeConfigObj(config);\n            config = this._configAfterMerge(config);\n\n            this._typeCheckConfig(config);\n\n            return config;\n        }\n\n        _configAfterMerge(config) {\n            return config;\n        }\n\n        _mergeConfigObj(config, element) {\n            const jsonConfig = isElement$1(element) ? Manipulator.getDataAttribute(element, 'config') : {}; // try to parse\n\n            return {\n                ...this.constructor.Default,\n                ...(typeof jsonConfig === 'object' ? jsonConfig : {}),\n                ...(isElement$1(element) ? Manipulator.getDataAttributes(element) : {}),\n                ...(typeof config === 'object' ? config : {})\n            };\n        }\n\n        _typeCheckConfig(config, configTypes = this.constructor.DefaultType) {\n            for (const property of Object.keys(configTypes)) {\n                const expectedTypes = configTypes[property];\n                const value = config[property];\n                const valueType = isElement$1(value) ? 'element' : toType(value);\n\n                if (!new RegExp(expectedTypes).test(valueType)) {\n                    throw new TypeError(`${this.constructor.NAME.toUpperCase()}: Option \"${property}\" provided type \"${valueType}\" but expected type \"${expectedTypes}\".`);\n                }\n            }\n        }\n\n    }\n\n    /**\n     * --------------------------------------------------------------------------\n     * Bootstrap (v5.2.3): base-component.js\n     * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n     * --------------------------------------------------------------------------\n     */\n    /**\n     * Constants\n     */\n\n    const VERSION = '5.2.3';\n\n    /**\n     * Class definition\n     */\n\n    class BaseComponent extends Config {\n        constructor(element, config) {\n            super();\n            element = getElement(element);\n\n            if (!element) {\n                return;\n            }\n\n            this._element = element;\n            this._config = this._getConfig(config);\n            Data.set(this._element, this.constructor.DATA_KEY, this);\n        } // Public\n\n        static get VERSION() {\n            return VERSION;\n        }\n\n        static get DATA_KEY() {\n            return `bs.${this.NAME}`;\n        }\n\n        static get EVENT_KEY() {\n            return `.${this.DATA_KEY}`;\n        }\n\n        static getInstance(element) {\n            return Data.get(getElement(element), this.DATA_KEY);\n        }\n\n        static getOrCreateInstance(element, config = {}) {\n            return this.getInstance(element) || new this(element, typeof config === 'object' ? config : null);\n        }\n\n        static eventName(name) {\n            return `${name}${this.EVENT_KEY}`;\n        }\n\n        dispose() {\n            Data.remove(this._element, this.constructor.DATA_KEY);\n            EventHandler.off(this._element, this.constructor.EVENT_KEY);\n\n            for (const propertyName of Object.getOwnPropertyNames(this)) {\n                this[propertyName] = null;\n            }\n        }\n\n        _queueCallback(callback, element, isAnimated = true) {\n            executeAfterTransition(callback, element, isAnimated);\n        }\n\n        _getConfig(config) {\n            config = this._mergeConfigObj(config, this._element);\n            config = this._configAfterMerge(config);\n\n            this._typeCheckConfig(config);\n\n            return config;\n        } // Static\n\n    }\n\n    /**\n     * --------------------------------------------------------------------------\n     * Bootstrap (v5.2.3): util/component-functions.js\n     * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n     * --------------------------------------------------------------------------\n     */\n\n    const enableDismissTrigger = (component, method = 'hide') => {\n        const clickEvent = `click.dismiss${component.EVENT_KEY}`;\n        const name = component.NAME;\n        EventHandler.on(document, clickEvent, `[data-bs-dismiss=\"${name}\"]`, function (event) {\n            if (['A', 'AREA'].includes(this.tagName)) {\n                event.preventDefault();\n            }\n\n            if (isDisabled(this)) {\n                return;\n            }\n\n            const target = getElementFromSelector(this) || this.closest(`.${name}`);\n            const instance = component.getOrCreateInstance(target); // Method argument is left, for Alert and only, as it doesn't implement the 'hide' method\n\n            instance[method]();\n        });\n    };\n\n    /**\n     * --------------------------------------------------------------------------\n     * Bootstrap (v5.2.3): alert.js\n     * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n     * --------------------------------------------------------------------------\n     */\n    /**\n     * Constants\n     */\n\n    const NAME$f = 'alert';\n    const DATA_KEY$a = 'bs.alert';\n    const EVENT_KEY$b = `.${DATA_KEY$a}`;\n    const EVENT_CLOSE = `close${EVENT_KEY$b}`;\n    const EVENT_CLOSED = `closed${EVENT_KEY$b}`;\n    const CLASS_NAME_FADE$5 = 'fade';\n    const CLASS_NAME_SHOW$8 = 'show';\n\n    /**\n     * Class definition\n     */\n\n    class Alert extends BaseComponent {\n        // Getters\n        static get NAME() {\n            return NAME$f;\n        } // Public\n\n        static jQueryInterface(config) {\n            return this.each(function () {\n                const data = Alert.getOrCreateInstance(this);\n\n                if (typeof config !== 'string') {\n                    return;\n                }\n\n                if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n                    throw new TypeError(`No method named \"${config}\"`);\n                }\n\n                data[config](this);\n            });\n        }\n\n        close() {\n            const closeEvent = EventHandler.trigger(this._element, EVENT_CLOSE);\n\n            if (closeEvent.defaultPrevented) {\n                return;\n            }\n\n            this._element.classList.remove(CLASS_NAME_SHOW$8);\n\n            const isAnimated = this._element.classList.contains(CLASS_NAME_FADE$5);\n\n            this._queueCallback(() => this._destroyElement(), this._element, isAnimated);\n        } // Private\n\n        _destroyElement() {\n            this._element.remove();\n\n            EventHandler.trigger(this._element, EVENT_CLOSED);\n            this.dispose();\n        } // Static\n\n    }\n\n    /**\n     * Data API implementation\n     */\n\n\n    enableDismissTrigger(Alert, 'close');\n    /**\n     * jQuery\n     */\n\n    defineJQueryPlugin(Alert);\n\n    /**\n     * --------------------------------------------------------------------------\n     * Bootstrap (v5.2.3): button.js\n     * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n     * --------------------------------------------------------------------------\n     */\n    /**\n     * Constants\n     */\n\n    const NAME$e = 'button';\n    const DATA_KEY$9 = 'bs.button';\n    const EVENT_KEY$a = `.${DATA_KEY$9}`;\n    const DATA_API_KEY$6 = '.data-api';\n    const CLASS_NAME_ACTIVE$3 = 'active';\n    const SELECTOR_DATA_TOGGLE$5 = '[data-bs-toggle=\"button\"]';\n    const EVENT_CLICK_DATA_API$6 = `click${EVENT_KEY$a}${DATA_API_KEY$6}`;\n\n    /**\n     * Class definition\n     */\n\n    class Button extends BaseComponent {\n        // Getters\n        static get NAME() {\n            return NAME$e;\n        } // Public\n\n        static jQueryInterface(config) {\n            return this.each(function () {\n                const data = Button.getOrCreateInstance(this);\n\n                if (config === 'toggle') {\n                    data[config]();\n                }\n            });\n        }\n\n        toggle() {\n            // Toggle class and sync the `aria-pressed` attribute with the return value of the `.toggle()` method\n            this._element.setAttribute('aria-pressed', this._element.classList.toggle(CLASS_NAME_ACTIVE$3));\n        } // Static\n\n    }\n\n    /**\n     * Data API implementation\n     */\n\n\n    EventHandler.on(document, EVENT_CLICK_DATA_API$6, SELECTOR_DATA_TOGGLE$5, event => {\n        event.preventDefault();\n        const button = event.target.closest(SELECTOR_DATA_TOGGLE$5);\n        const data = Button.getOrCreateInstance(button);\n        data.toggle();\n    });\n    /**\n     * jQuery\n     */\n\n    defineJQueryPlugin(Button);\n\n    /**\n     * --------------------------------------------------------------------------\n     * Bootstrap (v5.2.3): dom/selector-engine.js\n     * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n     * --------------------------------------------------------------------------\n     */\n    /**\n     * Constants\n     */\n\n    const SelectorEngine = {\n        find(selector, element = document.documentElement) {\n            return [].concat(...Element.prototype.querySelectorAll.call(element, selector));\n        },\n\n        findOne(selector, element = document.documentElement) {\n            return Element.prototype.querySelector.call(element, selector);\n        },\n\n        children(element, selector) {\n            return [].concat(...element.children).filter(child => child.matches(selector));\n        },\n\n        parents(element, selector) {\n            const parents = [];\n            let ancestor = element.parentNode.closest(selector);\n\n            while (ancestor) {\n                parents.push(ancestor);\n                ancestor = ancestor.parentNode.closest(selector);\n            }\n\n            return parents;\n        },\n\n        prev(element, selector) {\n            let previous = element.previousElementSibling;\n\n            while (previous) {\n                if (previous.matches(selector)) {\n                    return [previous];\n                }\n\n                previous = previous.previousElementSibling;\n            }\n\n            return [];\n        },\n\n        // TODO: this is now unused; remove later along with prev()\n        next(element, selector) {\n            let next = element.nextElementSibling;\n\n            while (next) {\n                if (next.matches(selector)) {\n                    return [next];\n                }\n\n                next = next.nextElementSibling;\n            }\n\n            return [];\n        },\n\n        focusableChildren(element) {\n            const focusables = ['a', 'button', 'input', 'textarea', 'select', 'details', '[tabindex]', '[contenteditable=\"true\"]'].map(selector => `${selector}:not([tabindex^=\"-\"])`).join(',');\n            return this.find(focusables, element).filter(el => !isDisabled(el) && isVisible(el));\n        }\n\n    };\n\n    /**\n     * --------------------------------------------------------------------------\n     * Bootstrap (v5.2.3): util/swipe.js\n     * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n     * --------------------------------------------------------------------------\n     */\n    /**\n     * Constants\n     */\n\n    const NAME$d = 'swipe';\n    const EVENT_KEY$9 = '.bs.swipe';\n    const EVENT_TOUCHSTART = `touchstart${EVENT_KEY$9}`;\n    const EVENT_TOUCHMOVE = `touchmove${EVENT_KEY$9}`;\n    const EVENT_TOUCHEND = `touchend${EVENT_KEY$9}`;\n    const EVENT_POINTERDOWN = `pointerdown${EVENT_KEY$9}`;\n    const EVENT_POINTERUP = `pointerup${EVENT_KEY$9}`;\n    const POINTER_TYPE_TOUCH = 'touch';\n    const POINTER_TYPE_PEN = 'pen';\n    const CLASS_NAME_POINTER_EVENT = 'pointer-event';\n    const SWIPE_THRESHOLD = 40;\n    const Default$c = {\n        endCallback: null,\n        leftCallback: null,\n        rightCallback: null\n    };\n    const DefaultType$c = {\n        endCallback: '(function|null)',\n        leftCallback: '(function|null)',\n        rightCallback: '(function|null)'\n    };\n\n    /**\n     * Class definition\n     */\n\n    class Swipe extends Config {\n        constructor(element, config) {\n            super();\n            this._element = element;\n\n            if (!element || !Swipe.isSupported()) {\n                return;\n            }\n\n            this._config = this._getConfig(config);\n            this._deltaX = 0;\n            this._supportPointerEvents = Boolean(window.PointerEvent);\n\n            this._initEvents();\n        } // Getters\n\n\n        static get Default() {\n            return Default$c;\n        }\n\n        static get DefaultType() {\n            return DefaultType$c;\n        }\n\n        static get NAME() {\n            return NAME$d;\n        } // Public\n\n        static isSupported() {\n            return 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0;\n        }\n\n        dispose() {\n            EventHandler.off(this._element, EVENT_KEY$9);\n        } // Private\n\n        _start(event) {\n            if (!this._supportPointerEvents) {\n                this._deltaX = event.touches[0].clientX;\n                return;\n            }\n\n            if (this._eventIsPointerPenTouch(event)) {\n                this._deltaX = event.clientX;\n            }\n        }\n\n        _end(event) {\n            if (this._eventIsPointerPenTouch(event)) {\n                this._deltaX = event.clientX - this._deltaX;\n            }\n\n            this._handleSwipe();\n\n            execute(this._config.endCallback);\n        }\n\n        _move(event) {\n            this._deltaX = event.touches && event.touches.length > 1 ? 0 : event.touches[0].clientX - this._deltaX;\n        }\n\n        _handleSwipe() {\n            const absDeltaX = Math.abs(this._deltaX);\n\n            if (absDeltaX <= SWIPE_THRESHOLD) {\n                return;\n            }\n\n            const direction = absDeltaX / this._deltaX;\n            this._deltaX = 0;\n\n            if (!direction) {\n                return;\n            }\n\n            execute(direction > 0 ? this._config.rightCallback : this._config.leftCallback);\n        }\n\n        _initEvents() {\n            if (this._supportPointerEvents) {\n                EventHandler.on(this._element, EVENT_POINTERDOWN, event => this._start(event));\n                EventHandler.on(this._element, EVENT_POINTERUP, event => this._end(event));\n\n                this._element.classList.add(CLASS_NAME_POINTER_EVENT);\n            } else {\n                EventHandler.on(this._element, EVENT_TOUCHSTART, event => this._start(event));\n                EventHandler.on(this._element, EVENT_TOUCHMOVE, event => this._move(event));\n                EventHandler.on(this._element, EVENT_TOUCHEND, event => this._end(event));\n            }\n        }\n\n        _eventIsPointerPenTouch(event) {\n            return this._supportPointerEvents && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH);\n        } // Static\n\n    }\n\n    /**\n     * --------------------------------------------------------------------------\n     * Bootstrap (v5.2.3): carousel.js\n     * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n     * --------------------------------------------------------------------------\n     */\n    /**\n     * Constants\n     */\n\n    const NAME$c = 'carousel';\n    const DATA_KEY$8 = 'bs.carousel';\n    const EVENT_KEY$8 = `.${DATA_KEY$8}`;\n    const DATA_API_KEY$5 = '.data-api';\n    const ARROW_LEFT_KEY$1 = 'ArrowLeft';\n    const ARROW_RIGHT_KEY$1 = 'ArrowRight';\n    const TOUCHEVENT_COMPAT_WAIT = 500; // Time for mouse compat events to fire after touch\n\n    const ORDER_NEXT = 'next';\n    const ORDER_PREV = 'prev';\n    const DIRECTION_LEFT = 'left';\n    const DIRECTION_RIGHT = 'right';\n    const EVENT_SLIDE = `slide${EVENT_KEY$8}`;\n    const EVENT_SLID = `slid${EVENT_KEY$8}`;\n    const EVENT_KEYDOWN$1 = `keydown${EVENT_KEY$8}`;\n    const EVENT_MOUSEENTER$1 = `mouseenter${EVENT_KEY$8}`;\n    const EVENT_MOUSELEAVE$1 = `mouseleave${EVENT_KEY$8}`;\n    const EVENT_DRAG_START = `dragstart${EVENT_KEY$8}`;\n    const EVENT_LOAD_DATA_API$3 = `load${EVENT_KEY$8}${DATA_API_KEY$5}`;\n    const EVENT_CLICK_DATA_API$5 = `click${EVENT_KEY$8}${DATA_API_KEY$5}`;\n    const CLASS_NAME_CAROUSEL = 'carousel';\n    const CLASS_NAME_ACTIVE$2 = 'active';\n    const CLASS_NAME_SLIDE = 'slide';\n    const CLASS_NAME_END = 'carousel-item-end';\n    const CLASS_NAME_START = 'carousel-item-start';\n    const CLASS_NAME_NEXT = 'carousel-item-next';\n    const CLASS_NAME_PREV = 'carousel-item-prev';\n    const SELECTOR_ACTIVE = '.active';\n    const SELECTOR_ITEM = '.carousel-item';\n    const SELECTOR_ACTIVE_ITEM = SELECTOR_ACTIVE + SELECTOR_ITEM;\n    const SELECTOR_ITEM_IMG = '.carousel-item img';\n    const SELECTOR_INDICATORS = '.carousel-indicators';\n    const SELECTOR_DATA_SLIDE = '[data-bs-slide], [data-bs-slide-to]';\n    const SELECTOR_DATA_RIDE = '[data-bs-ride=\"carousel\"]';\n    const KEY_TO_DIRECTION = {\n        [ARROW_LEFT_KEY$1]: DIRECTION_RIGHT,\n        [ARROW_RIGHT_KEY$1]: DIRECTION_LEFT\n    };\n    const Default$b = {\n        interval: 5000,\n        keyboard: true,\n        pause: 'hover',\n        ride: false,\n        touch: true,\n        wrap: true\n    };\n    const DefaultType$b = {\n        interval: '(number|boolean)',\n        // TODO:v6 remove boolean support\n        keyboard: 'boolean',\n        pause: '(string|boolean)',\n        ride: '(boolean|string)',\n        touch: 'boolean',\n        wrap: 'boolean'\n    };\n\n    /**\n     * Class definition\n     */\n\n    class Carousel extends BaseComponent {\n        constructor(element, config) {\n            super(element, config);\n            this._interval = null;\n            this._activeElement = null;\n            this._isSliding = false;\n            this.touchTimeout = null;\n            this._swipeHelper = null;\n            this._indicatorsElement = SelectorEngine.findOne(SELECTOR_INDICATORS, this._element);\n\n            this._addEventListeners();\n\n            if (this._config.ride === CLASS_NAME_CAROUSEL) {\n                this.cycle();\n            }\n        } // Getters\n\n\n        static get Default() {\n            return Default$b;\n        }\n\n        static get DefaultType() {\n            return DefaultType$b;\n        }\n\n        static get NAME() {\n            return NAME$c;\n        } // Public\n\n        static jQueryInterface(config) {\n            return this.each(function () {\n                const data = Carousel.getOrCreateInstance(this, config);\n\n                if (typeof config === 'number') {\n                    data.to(config);\n                    return;\n                }\n\n                if (typeof config === 'string') {\n                    if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n                        throw new TypeError(`No method named \"${config}\"`);\n                    }\n\n                    data[config]();\n                }\n            });\n        }\n\n        next() {\n            this._slide(ORDER_NEXT);\n        }\n\n        nextWhenVisible() {\n            // FIXME TODO use `document.visibilityState`\n            // Don't call next when the page isn't visible\n            // or the carousel or its parent isn't visible\n            if (!document.hidden && isVisible(this._element)) {\n                this.next();\n            }\n        }\n\n        prev() {\n            this._slide(ORDER_PREV);\n        }\n\n        pause() {\n            if (this._isSliding) {\n                triggerTransitionEnd(this._element);\n            }\n\n            this._clearInterval();\n        }\n\n        cycle() {\n            this._clearInterval();\n\n            this._updateInterval();\n\n            this._interval = setInterval(() => this.nextWhenVisible(), this._config.interval);\n        }\n\n        _maybeEnableCycle() {\n            if (!this._config.ride) {\n                return;\n            }\n\n            if (this._isSliding) {\n                EventHandler.one(this._element, EVENT_SLID, () => this.cycle());\n                return;\n            }\n\n            this.cycle();\n        }\n\n        to(index) {\n            const items = this._getItems();\n\n            if (index > items.length - 1 || index < 0) {\n                return;\n            }\n\n            if (this._isSliding) {\n                EventHandler.one(this._element, EVENT_SLID, () => this.to(index));\n                return;\n            }\n\n            const activeIndex = this._getItemIndex(this._getActive());\n\n            if (activeIndex === index) {\n                return;\n            }\n\n            const order = index > activeIndex ? ORDER_NEXT : ORDER_PREV;\n\n            this._slide(order, items[index]);\n        }\n\n        dispose() {\n            if (this._swipeHelper) {\n                this._swipeHelper.dispose();\n            }\n\n            super.dispose();\n        } // Private\n\n        _configAfterMerge(config) {\n            config.defaultInterval = config.interval;\n            return config;\n        }\n\n        _addEventListeners() {\n            if (this._config.keyboard) {\n                EventHandler.on(this._element, EVENT_KEYDOWN$1, event => this._keydown(event));\n            }\n\n            if (this._config.pause === 'hover') {\n                EventHandler.on(this._element, EVENT_MOUSEENTER$1, () => this.pause());\n                EventHandler.on(this._element, EVENT_MOUSELEAVE$1, () => this._maybeEnableCycle());\n            }\n\n            if (this._config.touch && Swipe.isSupported()) {\n                this._addTouchEventListeners();\n            }\n        }\n\n        _addTouchEventListeners() {\n            for (const img of SelectorEngine.find(SELECTOR_ITEM_IMG, this._element)) {\n                EventHandler.on(img, EVENT_DRAG_START, event => event.preventDefault());\n            }\n\n            const endCallBack = () => {\n                if (this._config.pause !== 'hover') {\n                    return;\n                } // If it's a touch-enabled device, mouseenter/leave are fired as\n                // part of the mouse compatibility events on first tap - the carousel\n                // would stop cycling until user tapped out of it;\n                // here, we listen for touchend, explicitly pause the carousel\n                // (as if it's the second time we tap on it, mouseenter compat event\n                // is NOT fired) and after a timeout (to allow for mouse compatibility\n                // events to fire) we explicitly restart cycling\n\n\n                this.pause();\n\n                if (this.touchTimeout) {\n                    clearTimeout(this.touchTimeout);\n                }\n\n                this.touchTimeout = setTimeout(() => this._maybeEnableCycle(), TOUCHEVENT_COMPAT_WAIT + this._config.interval);\n            };\n\n            const swipeConfig = {\n                leftCallback: () => this._slide(this._directionToOrder(DIRECTION_LEFT)),\n                rightCallback: () => this._slide(this._directionToOrder(DIRECTION_RIGHT)),\n                endCallback: endCallBack\n            };\n            this._swipeHelper = new Swipe(this._element, swipeConfig);\n        }\n\n        _keydown(event) {\n            if (/input|textarea/i.test(event.target.tagName)) {\n                return;\n            }\n\n            const direction = KEY_TO_DIRECTION[event.key];\n\n            if (direction) {\n                event.preventDefault();\n\n                this._slide(this._directionToOrder(direction));\n            }\n        }\n\n        _getItemIndex(element) {\n            return this._getItems().indexOf(element);\n        }\n\n        _setActiveIndicatorElement(index) {\n            if (!this._indicatorsElement) {\n                return;\n            }\n\n            const activeIndicator = SelectorEngine.findOne(SELECTOR_ACTIVE, this._indicatorsElement);\n            activeIndicator.classList.remove(CLASS_NAME_ACTIVE$2);\n            activeIndicator.removeAttribute('aria-current');\n            const newActiveIndicator = SelectorEngine.findOne(`[data-bs-slide-to=\"${index}\"]`, this._indicatorsElement);\n\n            if (newActiveIndicator) {\n                newActiveIndicator.classList.add(CLASS_NAME_ACTIVE$2);\n                newActiveIndicator.setAttribute('aria-current', 'true');\n            }\n        }\n\n        _updateInterval() {\n            const element = this._activeElement || this._getActive();\n\n            if (!element) {\n                return;\n            }\n\n            const elementInterval = Number.parseInt(element.getAttribute('data-bs-interval'), 10);\n            this._config.interval = elementInterval || this._config.defaultInterval;\n        }\n\n        _slide(order, element = null) {\n            if (this._isSliding) {\n                return;\n            }\n\n            const activeElement = this._getActive();\n\n            const isNext = order === ORDER_NEXT;\n            const nextElement = element || getNextActiveElement(this._getItems(), activeElement, isNext, this._config.wrap);\n\n            if (nextElement === activeElement) {\n                return;\n            }\n\n            const nextElementIndex = this._getItemIndex(nextElement);\n\n            const triggerEvent = eventName => {\n                return EventHandler.trigger(this._element, eventName, {\n                    relatedTarget: nextElement,\n                    direction: this._orderToDirection(order),\n                    from: this._getItemIndex(activeElement),\n                    to: nextElementIndex\n                });\n            };\n\n            const slideEvent = triggerEvent(EVENT_SLIDE);\n\n            if (slideEvent.defaultPrevented) {\n                return;\n            }\n\n            if (!activeElement || !nextElement) {\n                // Some weirdness is happening, so we bail\n                // todo: change tests that use empty divs to avoid this check\n                return;\n            }\n\n            const isCycling = Boolean(this._interval);\n            this.pause();\n            this._isSliding = true;\n\n            this._setActiveIndicatorElement(nextElementIndex);\n\n            this._activeElement = nextElement;\n            const directionalClassName = isNext ? CLASS_NAME_START : CLASS_NAME_END;\n            const orderClassName = isNext ? CLASS_NAME_NEXT : CLASS_NAME_PREV;\n            nextElement.classList.add(orderClassName);\n            reflow(nextElement);\n            activeElement.classList.add(directionalClassName);\n            nextElement.classList.add(directionalClassName);\n\n            const completeCallBack = () => {\n                nextElement.classList.remove(directionalClassName, orderClassName);\n                nextElement.classList.add(CLASS_NAME_ACTIVE$2);\n                activeElement.classList.remove(CLASS_NAME_ACTIVE$2, orderClassName, directionalClassName);\n                this._isSliding = false;\n                triggerEvent(EVENT_SLID);\n            };\n\n            this._queueCallback(completeCallBack, activeElement, this._isAnimated());\n\n            if (isCycling) {\n                this.cycle();\n            }\n        }\n\n        _isAnimated() {\n            return this._element.classList.contains(CLASS_NAME_SLIDE);\n        }\n\n        _getActive() {\n            return SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);\n        }\n\n        _getItems() {\n            return SelectorEngine.find(SELECTOR_ITEM, this._element);\n        }\n\n        _clearInterval() {\n            if (this._interval) {\n                clearInterval(this._interval);\n                this._interval = null;\n            }\n        }\n\n        _directionToOrder(direction) {\n            if (isRTL()) {\n                return direction === DIRECTION_LEFT ? ORDER_PREV : ORDER_NEXT;\n            }\n\n            return direction === DIRECTION_LEFT ? ORDER_NEXT : ORDER_PREV;\n        }\n\n        _orderToDirection(order) {\n            if (isRTL()) {\n                return order === ORDER_PREV ? DIRECTION_LEFT : DIRECTION_RIGHT;\n            }\n\n            return order === ORDER_PREV ? DIRECTION_RIGHT : DIRECTION_LEFT;\n        } // Static\n\n    }\n\n    /**\n     * Data API implementation\n     */\n\n\n    EventHandler.on(document, EVENT_CLICK_DATA_API$5, SELECTOR_DATA_SLIDE, function (event) {\n        const target = getElementFromSelector(this);\n\n        if (!target || !target.classList.contains(CLASS_NAME_CAROUSEL)) {\n            return;\n        }\n\n        event.preventDefault();\n        const carousel = Carousel.getOrCreateInstance(target);\n        const slideIndex = this.getAttribute('data-bs-slide-to');\n\n        if (slideIndex) {\n            carousel.to(slideIndex);\n\n            carousel._maybeEnableCycle();\n\n            return;\n        }\n\n        if (Manipulator.getDataAttribute(this, 'slide') === 'next') {\n            carousel.next();\n\n            carousel._maybeEnableCycle();\n\n            return;\n        }\n\n        carousel.prev();\n\n        carousel._maybeEnableCycle();\n    });\n    EventHandler.on(window, EVENT_LOAD_DATA_API$3, () => {\n        const carousels = SelectorEngine.find(SELECTOR_DATA_RIDE);\n\n        for (const carousel of carousels) {\n            Carousel.getOrCreateInstance(carousel);\n        }\n    });\n    /**\n     * jQuery\n     */\n\n    defineJQueryPlugin(Carousel);\n\n    /**\n     * --------------------------------------------------------------------------\n     * Bootstrap (v5.2.3): collapse.js\n     * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n     * --------------------------------------------------------------------------\n     */\n    /**\n     * Constants\n     */\n\n    const NAME$b = 'collapse';\n    const DATA_KEY$7 = 'bs.collapse';\n    const EVENT_KEY$7 = `.${DATA_KEY$7}`;\n    const DATA_API_KEY$4 = '.data-api';\n    const EVENT_SHOW$6 = `show${EVENT_KEY$7}`;\n    const EVENT_SHOWN$6 = `shown${EVENT_KEY$7}`;\n    const EVENT_HIDE$6 = `hide${EVENT_KEY$7}`;\n    const EVENT_HIDDEN$6 = `hidden${EVENT_KEY$7}`;\n    const EVENT_CLICK_DATA_API$4 = `click${EVENT_KEY$7}${DATA_API_KEY$4}`;\n    const CLASS_NAME_SHOW$7 = 'show';\n    const CLASS_NAME_COLLAPSE = 'collapse';\n    const CLASS_NAME_COLLAPSING = 'collapsing';\n    const CLASS_NAME_COLLAPSED = 'collapsed';\n    const CLASS_NAME_DEEPER_CHILDREN = `:scope .${CLASS_NAME_COLLAPSE} .${CLASS_NAME_COLLAPSE}`;\n    const CLASS_NAME_HORIZONTAL = 'collapse-horizontal';\n    const WIDTH = 'width';\n    const HEIGHT = 'height';\n    const SELECTOR_ACTIVES = '.collapse.show, .collapse.collapsing';\n    const SELECTOR_DATA_TOGGLE$4 = '[data-bs-toggle=\"collapse\"]';\n    const Default$a = {\n        parent: null,\n        toggle: true\n    };\n    const DefaultType$a = {\n        parent: '(null|element)',\n        toggle: 'boolean'\n    };\n\n    /**\n     * Class definition\n     */\n\n    class Collapse extends BaseComponent {\n        constructor(element, config) {\n            super(element, config);\n            this._isTransitioning = false;\n            this._triggerArray = [];\n            const toggleList = SelectorEngine.find(SELECTOR_DATA_TOGGLE$4);\n\n            for (const elem of toggleList) {\n                const selector = getSelectorFromElement(elem);\n                const filterElement = SelectorEngine.find(selector).filter(foundElement => foundElement === this._element);\n\n                if (selector !== null && filterElement.length) {\n                    this._triggerArray.push(elem);\n                }\n            }\n\n            this._initializeChildren();\n\n            if (!this._config.parent) {\n                this._addAriaAndCollapsedClass(this._triggerArray, this._isShown());\n            }\n\n            if (this._config.toggle) {\n                this.toggle();\n            }\n        } // Getters\n\n\n        static get Default() {\n            return Default$a;\n        }\n\n        static get DefaultType() {\n            return DefaultType$a;\n        }\n\n        static get NAME() {\n            return NAME$b;\n        } // Public\n\n        static jQueryInterface(config) {\n            const _config = {};\n\n            if (typeof config === 'string' && /show|hide/.test(config)) {\n                _config.toggle = false;\n            }\n\n            return this.each(function () {\n                const data = Collapse.getOrCreateInstance(this, _config);\n\n                if (typeof config === 'string') {\n                    if (typeof data[config] === 'undefined') {\n                        throw new TypeError(`No method named \"${config}\"`);\n                    }\n\n                    data[config]();\n                }\n            });\n        }\n\n        toggle() {\n            if (this._isShown()) {\n                this.hide();\n            } else {\n                this.show();\n            }\n        }\n\n        show() {\n            if (this._isTransitioning || this._isShown()) {\n                return;\n            }\n\n            let activeChildren = []; // find active children\n\n            if (this._config.parent) {\n                activeChildren = this._getFirstLevelChildren(SELECTOR_ACTIVES).filter(element => element !== this._element).map(element => Collapse.getOrCreateInstance(element, {\n                    toggle: false\n                }));\n            }\n\n            if (activeChildren.length && activeChildren[0]._isTransitioning) {\n                return;\n            }\n\n            const startEvent = EventHandler.trigger(this._element, EVENT_SHOW$6);\n\n            if (startEvent.defaultPrevented) {\n                return;\n            }\n\n            for (const activeInstance of activeChildren) {\n                activeInstance.hide();\n            }\n\n            const dimension = this._getDimension();\n\n            this._element.classList.remove(CLASS_NAME_COLLAPSE);\n\n            this._element.classList.add(CLASS_NAME_COLLAPSING);\n\n            this._element.style[dimension] = 0;\n\n            this._addAriaAndCollapsedClass(this._triggerArray, true);\n\n            this._isTransitioning = true;\n\n            const complete = () => {\n                this._isTransitioning = false;\n\n                this._element.classList.remove(CLASS_NAME_COLLAPSING);\n\n                this._element.classList.add(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$7);\n\n                this._element.style[dimension] = '';\n                EventHandler.trigger(this._element, EVENT_SHOWN$6);\n            };\n\n            const capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1);\n            const scrollSize = `scroll${capitalizedDimension}`;\n\n            this._queueCallback(complete, this._element, true);\n\n            this._element.style[dimension] = `${this._element[scrollSize]}px`;\n        }\n\n        hide() {\n            if (this._isTransitioning || !this._isShown()) {\n                return;\n            }\n\n            const startEvent = EventHandler.trigger(this._element, EVENT_HIDE$6);\n\n            if (startEvent.defaultPrevented) {\n                return;\n            }\n\n            const dimension = this._getDimension();\n\n            this._element.style[dimension] = `${this._element.getBoundingClientRect()[dimension]}px`;\n            reflow(this._element);\n\n            this._element.classList.add(CLASS_NAME_COLLAPSING);\n\n            this._element.classList.remove(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$7);\n\n            for (const trigger of this._triggerArray) {\n                const element = getElementFromSelector(trigger);\n\n                if (element && !this._isShown(element)) {\n                    this._addAriaAndCollapsedClass([trigger], false);\n                }\n            }\n\n            this._isTransitioning = true;\n\n            const complete = () => {\n                this._isTransitioning = false;\n\n                this._element.classList.remove(CLASS_NAME_COLLAPSING);\n\n                this._element.classList.add(CLASS_NAME_COLLAPSE);\n\n                EventHandler.trigger(this._element, EVENT_HIDDEN$6);\n            };\n\n            this._element.style[dimension] = '';\n\n            this._queueCallback(complete, this._element, true);\n        }\n\n        _isShown(element = this._element) {\n            return element.classList.contains(CLASS_NAME_SHOW$7);\n        } // Private\n\n        _configAfterMerge(config) {\n            config.toggle = Boolean(config.toggle); // Coerce string values\n\n            config.parent = getElement(config.parent);\n            return config;\n        }\n\n        _getDimension() {\n            return this._element.classList.contains(CLASS_NAME_HORIZONTAL) ? WIDTH : HEIGHT;\n        }\n\n        _initializeChildren() {\n            if (!this._config.parent) {\n                return;\n            }\n\n            const children = this._getFirstLevelChildren(SELECTOR_DATA_TOGGLE$4);\n\n            for (const element of children) {\n                const selected = getElementFromSelector(element);\n\n                if (selected) {\n                    this._addAriaAndCollapsedClass([element], this._isShown(selected));\n                }\n            }\n        }\n\n        _getFirstLevelChildren(selector) {\n            const children = SelectorEngine.find(CLASS_NAME_DEEPER_CHILDREN, this._config.parent); // remove children if greater depth\n\n            return SelectorEngine.find(selector, this._config.parent).filter(element => !children.includes(element));\n        }\n\n        _addAriaAndCollapsedClass(triggerArray, isOpen) {\n            if (!triggerArray.length) {\n                return;\n            }\n\n            for (const element of triggerArray) {\n                element.classList.toggle(CLASS_NAME_COLLAPSED, !isOpen);\n                element.setAttribute('aria-expanded', isOpen);\n            }\n        } // Static\n\n    }\n\n    /**\n     * Data API implementation\n     */\n\n\n    EventHandler.on(document, EVENT_CLICK_DATA_API$4, SELECTOR_DATA_TOGGLE$4, function (event) {\n        // preventDefault only for <a> elements (which change the URL) not inside the collapsible element\n        if (event.target.tagName === 'A' || event.delegateTarget && event.delegateTarget.tagName === 'A') {\n            event.preventDefault();\n        }\n\n        const selector = getSelectorFromElement(this);\n        const selectorElements = SelectorEngine.find(selector);\n\n        for (const element of selectorElements) {\n            Collapse.getOrCreateInstance(element, {\n                toggle: false\n            }).toggle();\n        }\n    });\n    /**\n     * jQuery\n     */\n\n    defineJQueryPlugin(Collapse);\n\n    var top = 'top';\n    var bottom = 'bottom';\n    var right = 'right';\n    var left = 'left';\n    var auto = 'auto';\n    var basePlacements = [top, bottom, right, left];\n    var start = 'start';\n    var end = 'end';\n    var clippingParents = 'clippingParents';\n    var viewport = 'viewport';\n    var popper = 'popper';\n    var reference = 'reference';\n    var variationPlacements = /*#__PURE__*/basePlacements.reduce(function (acc, placement) {\n        return acc.concat([placement + \"-\" + start, placement + \"-\" + end]);\n    }, []);\n    var placements = /*#__PURE__*/[].concat(basePlacements, [auto]).reduce(function (acc, placement) {\n        return acc.concat([placement, placement + \"-\" + start, placement + \"-\" + end]);\n    }, []); // modifiers that need to read the DOM\n\n    var beforeRead = 'beforeRead';\n    var read = 'read';\n    var afterRead = 'afterRead'; // pure-logic modifiers\n\n    var beforeMain = 'beforeMain';\n    var main = 'main';\n    var afterMain = 'afterMain'; // modifier with the purpose to write to the DOM (or write into a framework state)\n\n    var beforeWrite = 'beforeWrite';\n    var write = 'write';\n    var afterWrite = 'afterWrite';\n    var modifierPhases = [beforeRead, read, afterRead, beforeMain, main, afterMain, beforeWrite, write, afterWrite];\n\n    function getNodeName(element) {\n        return element ? (element.nodeName || '').toLowerCase() : null;\n    }\n\n    function getWindow(node) {\n        if (node == null) {\n            return window;\n        }\n\n        if (node.toString() !== '[object Window]') {\n            var ownerDocument = node.ownerDocument;\n            return ownerDocument ? ownerDocument.defaultView || window : window;\n        }\n\n        return node;\n    }\n\n    function isElement(node) {\n        var OwnElement = getWindow(node).Element;\n        return node instanceof OwnElement || node instanceof Element;\n    }\n\n    function isHTMLElement(node) {\n        var OwnElement = getWindow(node).HTMLElement;\n        return node instanceof OwnElement || node instanceof HTMLElement;\n    }\n\n    function isShadowRoot(node) {\n        // IE 11 has no ShadowRoot\n        if (typeof ShadowRoot === 'undefined') {\n            return false;\n        }\n\n        var OwnElement = getWindow(node).ShadowRoot;\n        return node instanceof OwnElement || node instanceof ShadowRoot;\n    }\n\n    // and applies them to the HTMLElements such as popper and arrow\n\n    function applyStyles(_ref) {\n        var state = _ref.state;\n        Object.keys(state.elements).forEach(function (name) {\n            var style = state.styles[name] || {};\n            var attributes = state.attributes[name] || {};\n            var element = state.elements[name]; // arrow is optional + virtual elements\n\n            if (!isHTMLElement(element) || !getNodeName(element)) {\n                return;\n            } // Flow doesn't support to extend this property, but it's the most\n            // effective way to apply styles to an HTMLElement\n            // $FlowFixMe[cannot-write]\n\n\n            Object.assign(element.style, style);\n            Object.keys(attributes).forEach(function (name) {\n                var value = attributes[name];\n\n                if (value === false) {\n                    element.removeAttribute(name);\n                } else {\n                    element.setAttribute(name, value === true ? '' : value);\n                }\n            });\n        });\n    }\n\n    function effect$2(_ref2) {\n        var state = _ref2.state;\n        var initialStyles = {\n            popper: {\n                position: state.options.strategy,\n                left: '0',\n                top: '0',\n                margin: '0'\n            },\n            arrow: {\n                position: 'absolute'\n            },\n            reference: {}\n        };\n        Object.assign(state.elements.popper.style, initialStyles.popper);\n        state.styles = initialStyles;\n\n        if (state.elements.arrow) {\n            Object.assign(state.elements.arrow.style, initialStyles.arrow);\n        }\n\n        return function () {\n            Object.keys(state.elements).forEach(function (name) {\n                var element = state.elements[name];\n                var attributes = state.attributes[name] || {};\n                var styleProperties = Object.keys(state.styles.hasOwnProperty(name) ? state.styles[name] : initialStyles[name]); // Set all values to an empty string to unset them\n\n                var style = styleProperties.reduce(function (style, property) {\n                    style[property] = '';\n                    return style;\n                }, {}); // arrow is optional + virtual elements\n\n                if (!isHTMLElement(element) || !getNodeName(element)) {\n                    return;\n                }\n\n                Object.assign(element.style, style);\n                Object.keys(attributes).forEach(function (attribute) {\n                    element.removeAttribute(attribute);\n                });\n            });\n        };\n    } // eslint-disable-next-line import/no-unused-modules\n\n\n    const applyStyles$1 = {\n        name: 'applyStyles',\n        enabled: true,\n        phase: 'write',\n        fn: applyStyles,\n        effect: effect$2,\n        requires: ['computeStyles']\n    };\n\n    function getBasePlacement(placement) {\n        return placement.split('-')[0];\n    }\n\n    var max = Math.max;\n    var min = Math.min;\n    var round = Math.round;\n\n    function getUAString() {\n        var uaData = navigator.userAgentData;\n\n        if (uaData != null && uaData.brands) {\n            return uaData.brands.map(function (item) {\n                return item.brand + \"/\" + item.version;\n            }).join(' ');\n        }\n\n        return navigator.userAgent;\n    }\n\n    function isLayoutViewport() {\n        return !/^((?!chrome|android).)*safari/i.test(getUAString());\n    }\n\n    function getBoundingClientRect(element, includeScale, isFixedStrategy) {\n        if (includeScale === void 0) {\n            includeScale = false;\n        }\n\n        if (isFixedStrategy === void 0) {\n            isFixedStrategy = false;\n        }\n\n        var clientRect = element.getBoundingClientRect();\n        var scaleX = 1;\n        var scaleY = 1;\n\n        if (includeScale && isHTMLElement(element)) {\n            scaleX = element.offsetWidth > 0 ? round(clientRect.width) / element.offsetWidth || 1 : 1;\n            scaleY = element.offsetHeight > 0 ? round(clientRect.height) / element.offsetHeight || 1 : 1;\n        }\n\n        var _ref = isElement(element) ? getWindow(element) : window,\n            visualViewport = _ref.visualViewport;\n\n        var addVisualOffsets = !isLayoutViewport() && isFixedStrategy;\n        var x = (clientRect.left + (addVisualOffsets && visualViewport ? visualViewport.offsetLeft : 0)) / scaleX;\n        var y = (clientRect.top + (addVisualOffsets && visualViewport ? visualViewport.offsetTop : 0)) / scaleY;\n        var width = clientRect.width / scaleX;\n        var height = clientRect.height / scaleY;\n        return {\n            width: width,\n            height: height,\n            top: y,\n            right: x + width,\n            bottom: y + height,\n            left: x,\n            x: x,\n            y: y\n        };\n    }\n\n    // means it doesn't take into account transforms.\n\n    function getLayoutRect(element) {\n        var clientRect = getBoundingClientRect(element); // Use the clientRect sizes if it's not been transformed.\n        // Fixes https://github.com/popperjs/popper-core/issues/1223\n\n        var width = element.offsetWidth;\n        var height = element.offsetHeight;\n\n        if (Math.abs(clientRect.width - width) <= 1) {\n            width = clientRect.width;\n        }\n\n        if (Math.abs(clientRect.height - height) <= 1) {\n            height = clientRect.height;\n        }\n\n        return {\n            x: element.offsetLeft,\n            y: element.offsetTop,\n            width: width,\n            height: height\n        };\n    }\n\n    function contains(parent, child) {\n        var rootNode = child.getRootNode && child.getRootNode(); // First, attempt with faster native method\n\n        if (parent.contains(child)) {\n            return true;\n        } // then fallback to custom implementation with Shadow DOM support\n        else if (rootNode && isShadowRoot(rootNode)) {\n            var next = child;\n\n            do {\n                if (next && parent.isSameNode(next)) {\n                    return true;\n                } // $FlowFixMe[prop-missing]: need a better way to handle this...\n\n\n                next = next.parentNode || next.host;\n            } while (next);\n        } // Give up, the result is false\n\n\n        return false;\n    }\n\n    function getComputedStyle$1(element) {\n        return getWindow(element).getComputedStyle(element);\n    }\n\n    function isTableElement(element) {\n        return ['table', 'td', 'th'].indexOf(getNodeName(element)) >= 0;\n    }\n\n    function getDocumentElement(element) {\n        // $FlowFixMe[incompatible-return]: assume body is always available\n        return ((isElement(element) ? element.ownerDocument : // $FlowFixMe[prop-missing]\n            element.document) || window.document).documentElement;\n    }\n\n    function getParentNode(element) {\n        if (getNodeName(element) === 'html') {\n            return element;\n        }\n\n        return (// this is a quicker (but less type safe) way to save quite some bytes from the bundle\n            // $FlowFixMe[incompatible-return]\n            // $FlowFixMe[prop-missing]\n            element.assignedSlot || // step into the shadow DOM of the parent of a slotted node\n            element.parentNode || ( // DOM Element detected\n                isShadowRoot(element) ? element.host : null) || // ShadowRoot detected\n            // $FlowFixMe[incompatible-call]: HTMLElement is a Node\n            getDocumentElement(element) // fallback\n\n        );\n    }\n\n    function getTrueOffsetParent(element) {\n        if (!isHTMLElement(element) || // https://github.com/popperjs/popper-core/issues/837\n            getComputedStyle$1(element).position === 'fixed') {\n            return null;\n        }\n\n        return element.offsetParent;\n    } // `.offsetParent` reports `null` for fixed elements, while absolute elements\n    // return the containing block\n\n\n    function getContainingBlock(element) {\n        var isFirefox = /firefox/i.test(getUAString());\n        var isIE = /Trident/i.test(getUAString());\n\n        if (isIE && isHTMLElement(element)) {\n            // In IE 9, 10 and 11 fixed elements containing block is always established by the viewport\n            var elementCss = getComputedStyle$1(element);\n\n            if (elementCss.position === 'fixed') {\n                return null;\n            }\n        }\n\n        var currentNode = getParentNode(element);\n\n        if (isShadowRoot(currentNode)) {\n            currentNode = currentNode.host;\n        }\n\n        while (isHTMLElement(currentNode) && ['html', 'body'].indexOf(getNodeName(currentNode)) < 0) {\n            var css = getComputedStyle$1(currentNode); // This is non-exhaustive but covers the most common CSS properties that\n            // create a containing block.\n            // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n\n            if (css.transform !== 'none' || css.perspective !== 'none' || css.contain === 'paint' || ['transform', 'perspective'].indexOf(css.willChange) !== -1 || isFirefox && css.willChange === 'filter' || isFirefox && css.filter && css.filter !== 'none') {\n                return currentNode;\n            } else {\n                currentNode = currentNode.parentNode;\n            }\n        }\n\n        return null;\n    } // Gets the closest ancestor positioned element. Handles some edge cases,\n    // such as table ancestors and cross browser bugs.\n\n\n    function getOffsetParent(element) {\n        var window = getWindow(element);\n        var offsetParent = getTrueOffsetParent(element);\n\n        while (offsetParent && isTableElement(offsetParent) && getComputedStyle$1(offsetParent).position === 'static') {\n            offsetParent = getTrueOffsetParent(offsetParent);\n        }\n\n        if (offsetParent && (getNodeName(offsetParent) === 'html' || getNodeName(offsetParent) === 'body' && getComputedStyle$1(offsetParent).position === 'static')) {\n            return window;\n        }\n\n        return offsetParent || getContainingBlock(element) || window;\n    }\n\n    function getMainAxisFromPlacement(placement) {\n        return ['top', 'bottom'].indexOf(placement) >= 0 ? 'x' : 'y';\n    }\n\n    function within(min$1, value, max$1) {\n        return max(min$1, min(value, max$1));\n    }\n\n    function withinMaxClamp(min, value, max) {\n        var v = within(min, value, max);\n        return v > max ? max : v;\n    }\n\n    function getFreshSideObject() {\n        return {\n            top: 0,\n            right: 0,\n            bottom: 0,\n            left: 0\n        };\n    }\n\n    function mergePaddingObject(paddingObject) {\n        return Object.assign({}, getFreshSideObject(), paddingObject);\n    }\n\n    function expandToHashMap(value, keys) {\n        return keys.reduce(function (hashMap, key) {\n            hashMap[key] = value;\n            return hashMap;\n        }, {});\n    }\n\n    var toPaddingObject = function toPaddingObject(padding, state) {\n        padding = typeof padding === 'function' ? padding(Object.assign({}, state.rects, {\n            placement: state.placement\n        })) : padding;\n        return mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));\n    };\n\n    function arrow(_ref) {\n        var _state$modifiersData$;\n\n        var state = _ref.state,\n            name = _ref.name,\n            options = _ref.options;\n        var arrowElement = state.elements.arrow;\n        var popperOffsets = state.modifiersData.popperOffsets;\n        var basePlacement = getBasePlacement(state.placement);\n        var axis = getMainAxisFromPlacement(basePlacement);\n        var isVertical = [left, right].indexOf(basePlacement) >= 0;\n        var len = isVertical ? 'height' : 'width';\n\n        if (!arrowElement || !popperOffsets) {\n            return;\n        }\n\n        var paddingObject = toPaddingObject(options.padding, state);\n        var arrowRect = getLayoutRect(arrowElement);\n        var minProp = axis === 'y' ? top : left;\n        var maxProp = axis === 'y' ? bottom : right;\n        var endDiff = state.rects.reference[len] + state.rects.reference[axis] - popperOffsets[axis] - state.rects.popper[len];\n        var startDiff = popperOffsets[axis] - state.rects.reference[axis];\n        var arrowOffsetParent = getOffsetParent(arrowElement);\n        var clientSize = arrowOffsetParent ? axis === 'y' ? arrowOffsetParent.clientHeight || 0 : arrowOffsetParent.clientWidth || 0 : 0;\n        var centerToReference = endDiff / 2 - startDiff / 2; // Make sure the arrow doesn't overflow the popper if the center point is\n        // outside of the popper bounds\n\n        var min = paddingObject[minProp];\n        var max = clientSize - arrowRect[len] - paddingObject[maxProp];\n        var center = clientSize / 2 - arrowRect[len] / 2 + centerToReference;\n        var offset = within(min, center, max); // Prevents breaking syntax highlighting...\n\n        var axisProp = axis;\n        state.modifiersData[name] = (_state$modifiersData$ = {}, _state$modifiersData$[axisProp] = offset, _state$modifiersData$.centerOffset = offset - center, _state$modifiersData$);\n    }\n\n    function effect$1(_ref2) {\n        var state = _ref2.state,\n            options = _ref2.options;\n        var _options$element = options.element,\n            arrowElement = _options$element === void 0 ? '[data-popper-arrow]' : _options$element;\n\n        if (arrowElement == null) {\n            return;\n        } // CSS selector\n\n\n        if (typeof arrowElement === 'string') {\n            arrowElement = state.elements.popper.querySelector(arrowElement);\n\n            if (!arrowElement) {\n                return;\n            }\n        }\n\n        if (!contains(state.elements.popper, arrowElement)) {\n\n            return;\n        }\n\n        state.elements.arrow = arrowElement;\n    } // eslint-disable-next-line import/no-unused-modules\n\n\n    const arrow$1 = {\n        name: 'arrow',\n        enabled: true,\n        phase: 'main',\n        fn: arrow,\n        effect: effect$1,\n        requires: ['popperOffsets'],\n        requiresIfExists: ['preventOverflow']\n    };\n\n    function getVariation(placement) {\n        return placement.split('-')[1];\n    }\n\n    var unsetSides = {\n        top: 'auto',\n        right: 'auto',\n        bottom: 'auto',\n        left: 'auto'\n    }; // Round the offsets to the nearest suitable subpixel based on the DPR.\n    // Zooming can change the DPR, but it seems to report a value that will\n    // cleanly divide the values into the appropriate subpixels.\n\n    function roundOffsetsByDPR(_ref) {\n        var x = _ref.x,\n            y = _ref.y;\n        var win = window;\n        var dpr = win.devicePixelRatio || 1;\n        return {\n            x: round(x * dpr) / dpr || 0,\n            y: round(y * dpr) / dpr || 0\n        };\n    }\n\n    function mapToStyles(_ref2) {\n        var _Object$assign2;\n\n        var popper = _ref2.popper,\n            popperRect = _ref2.popperRect,\n            placement = _ref2.placement,\n            variation = _ref2.variation,\n            offsets = _ref2.offsets,\n            position = _ref2.position,\n            gpuAcceleration = _ref2.gpuAcceleration,\n            adaptive = _ref2.adaptive,\n            roundOffsets = _ref2.roundOffsets,\n            isFixed = _ref2.isFixed;\n        var _offsets$x = offsets.x,\n            x = _offsets$x === void 0 ? 0 : _offsets$x,\n            _offsets$y = offsets.y,\n            y = _offsets$y === void 0 ? 0 : _offsets$y;\n\n        var _ref3 = typeof roundOffsets === 'function' ? roundOffsets({\n            x: x,\n            y: y\n        }) : {\n            x: x,\n            y: y\n        };\n\n        x = _ref3.x;\n        y = _ref3.y;\n        var hasX = offsets.hasOwnProperty('x');\n        var hasY = offsets.hasOwnProperty('y');\n        var sideX = left;\n        var sideY = top;\n        var win = window;\n\n        if (adaptive) {\n            var offsetParent = getOffsetParent(popper);\n            var heightProp = 'clientHeight';\n            var widthProp = 'clientWidth';\n\n            if (offsetParent === getWindow(popper)) {\n                offsetParent = getDocumentElement(popper);\n\n                if (getComputedStyle$1(offsetParent).position !== 'static' && position === 'absolute') {\n                    heightProp = 'scrollHeight';\n                    widthProp = 'scrollWidth';\n                }\n            } // $FlowFixMe[incompatible-cast]: force type refinement, we compare offsetParent with window above, but Flow doesn't detect it\n\n\n            offsetParent = offsetParent;\n\n            if (placement === top || (placement === left || placement === right) && variation === end) {\n                sideY = bottom;\n                var offsetY = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.height : // $FlowFixMe[prop-missing]\n                    offsetParent[heightProp];\n                y -= offsetY - popperRect.height;\n                y *= gpuAcceleration ? 1 : -1;\n            }\n\n            if (placement === left || (placement === top || placement === bottom) && variation === end) {\n                sideX = right;\n                var offsetX = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.width : // $FlowFixMe[prop-missing]\n                    offsetParent[widthProp];\n                x -= offsetX - popperRect.width;\n                x *= gpuAcceleration ? 1 : -1;\n            }\n        }\n\n        var commonStyles = Object.assign({\n            position: position\n        }, adaptive && unsetSides);\n\n        var _ref4 = roundOffsets === true ? roundOffsetsByDPR({\n            x: x,\n            y: y\n        }) : {\n            x: x,\n            y: y\n        };\n\n        x = _ref4.x;\n        y = _ref4.y;\n\n        if (gpuAcceleration) {\n            var _Object$assign;\n\n            return Object.assign({}, commonStyles, (_Object$assign = {}, _Object$assign[sideY] = hasY ? '0' : '', _Object$assign[sideX] = hasX ? '0' : '', _Object$assign.transform = (win.devicePixelRatio || 1) <= 1 ? \"translate(\" + x + \"px, \" + y + \"px)\" : \"translate3d(\" + x + \"px, \" + y + \"px, 0)\", _Object$assign));\n        }\n\n        return Object.assign({}, commonStyles, (_Object$assign2 = {}, _Object$assign2[sideY] = hasY ? y + \"px\" : '', _Object$assign2[sideX] = hasX ? x + \"px\" : '', _Object$assign2.transform = '', _Object$assign2));\n    }\n\n    function computeStyles(_ref5) {\n        var state = _ref5.state,\n            options = _ref5.options;\n        var _options$gpuAccelerat = options.gpuAcceleration,\n            gpuAcceleration = _options$gpuAccelerat === void 0 ? true : _options$gpuAccelerat,\n            _options$adaptive = options.adaptive,\n            adaptive = _options$adaptive === void 0 ? true : _options$adaptive,\n            _options$roundOffsets = options.roundOffsets,\n            roundOffsets = _options$roundOffsets === void 0 ? true : _options$roundOffsets;\n\n        var commonStyles = {\n            placement: getBasePlacement(state.placement),\n            variation: getVariation(state.placement),\n            popper: state.elements.popper,\n            popperRect: state.rects.popper,\n            gpuAcceleration: gpuAcceleration,\n            isFixed: state.options.strategy === 'fixed'\n        };\n\n        if (state.modifiersData.popperOffsets != null) {\n            state.styles.popper = Object.assign({}, state.styles.popper, mapToStyles(Object.assign({}, commonStyles, {\n                offsets: state.modifiersData.popperOffsets,\n                position: state.options.strategy,\n                adaptive: adaptive,\n                roundOffsets: roundOffsets\n            })));\n        }\n\n        if (state.modifiersData.arrow != null) {\n            state.styles.arrow = Object.assign({}, state.styles.arrow, mapToStyles(Object.assign({}, commonStyles, {\n                offsets: state.modifiersData.arrow,\n                position: 'absolute',\n                adaptive: false,\n                roundOffsets: roundOffsets\n            })));\n        }\n\n        state.attributes.popper = Object.assign({}, state.attributes.popper, {\n            'data-popper-placement': state.placement\n        });\n    } // eslint-disable-next-line import/no-unused-modules\n\n\n    const computeStyles$1 = {\n        name: 'computeStyles',\n        enabled: true,\n        phase: 'beforeWrite',\n        fn: computeStyles,\n        data: {}\n    };\n\n    var passive = {\n        passive: true\n    };\n\n    function effect(_ref) {\n        var state = _ref.state,\n            instance = _ref.instance,\n            options = _ref.options;\n        var _options$scroll = options.scroll,\n            scroll = _options$scroll === void 0 ? true : _options$scroll,\n            _options$resize = options.resize,\n            resize = _options$resize === void 0 ? true : _options$resize;\n        var window = getWindow(state.elements.popper);\n        var scrollParents = [].concat(state.scrollParents.reference, state.scrollParents.popper);\n\n        if (scroll) {\n            scrollParents.forEach(function (scrollParent) {\n                scrollParent.addEventListener('scroll', instance.update, passive);\n            });\n        }\n\n        if (resize) {\n            window.addEventListener('resize', instance.update, passive);\n        }\n\n        return function () {\n            if (scroll) {\n                scrollParents.forEach(function (scrollParent) {\n                    scrollParent.removeEventListener('scroll', instance.update, passive);\n                });\n            }\n\n            if (resize) {\n                window.removeEventListener('resize', instance.update, passive);\n            }\n        };\n    } // eslint-disable-next-line import/no-unused-modules\n\n\n    const eventListeners = {\n        name: 'eventListeners',\n        enabled: true,\n        phase: 'write',\n        fn: function fn() {\n        },\n        effect: effect,\n        data: {}\n    };\n\n    var hash$1 = {\n        left: 'right',\n        right: 'left',\n        bottom: 'top',\n        top: 'bottom'\n    };\n\n    function getOppositePlacement(placement) {\n        return placement.replace(/left|right|bottom|top/g, function (matched) {\n            return hash$1[matched];\n        });\n    }\n\n    var hash = {\n        start: 'end',\n        end: 'start'\n    };\n\n    function getOppositeVariationPlacement(placement) {\n        return placement.replace(/start|end/g, function (matched) {\n            return hash[matched];\n        });\n    }\n\n    function getWindowScroll(node) {\n        var win = getWindow(node);\n        var scrollLeft = win.pageXOffset;\n        var scrollTop = win.pageYOffset;\n        return {\n            scrollLeft: scrollLeft,\n            scrollTop: scrollTop\n        };\n    }\n\n    function getWindowScrollBarX(element) {\n        // If <html> has a CSS width greater than the viewport, then this will be\n        // incorrect for RTL.\n        // Popper 1 is broken in this case and never had a bug report so let's assume\n        // it's not an issue. I don't think anyone ever specifies width on <html>\n        // anyway.\n        // Browsers where the left scrollbar doesn't cause an issue report `0` for\n        // this (e.g. Edge 2019, IE11, Safari)\n        return getBoundingClientRect(getDocumentElement(element)).left + getWindowScroll(element).scrollLeft;\n    }\n\n    function getViewportRect(element, strategy) {\n        var win = getWindow(element);\n        var html = getDocumentElement(element);\n        var visualViewport = win.visualViewport;\n        var width = html.clientWidth;\n        var height = html.clientHeight;\n        var x = 0;\n        var y = 0;\n\n        if (visualViewport) {\n            width = visualViewport.width;\n            height = visualViewport.height;\n            var layoutViewport = isLayoutViewport();\n\n            if (layoutViewport || !layoutViewport && strategy === 'fixed') {\n                x = visualViewport.offsetLeft;\n                y = visualViewport.offsetTop;\n            }\n        }\n\n        return {\n            width: width,\n            height: height,\n            x: x + getWindowScrollBarX(element),\n            y: y\n        };\n    }\n\n    // of the `<html>` and `<body>` rect bounds if horizontally scrollable\n\n    function getDocumentRect(element) {\n        var _element$ownerDocumen;\n\n        var html = getDocumentElement(element);\n        var winScroll = getWindowScroll(element);\n        var body = (_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body;\n        var width = max(html.scrollWidth, html.clientWidth, body ? body.scrollWidth : 0, body ? body.clientWidth : 0);\n        var height = max(html.scrollHeight, html.clientHeight, body ? body.scrollHeight : 0, body ? body.clientHeight : 0);\n        var x = -winScroll.scrollLeft + getWindowScrollBarX(element);\n        var y = -winScroll.scrollTop;\n\n        if (getComputedStyle$1(body || html).direction === 'rtl') {\n            x += max(html.clientWidth, body ? body.clientWidth : 0) - width;\n        }\n\n        return {\n            width: width,\n            height: height,\n            x: x,\n            y: y\n        };\n    }\n\n    function isScrollParent(element) {\n        // Firefox wants us to check `-x` and `-y` variations as well\n        var _getComputedStyle = getComputedStyle$1(element),\n            overflow = _getComputedStyle.overflow,\n            overflowX = _getComputedStyle.overflowX,\n            overflowY = _getComputedStyle.overflowY;\n\n        return /auto|scroll|overlay|hidden/.test(overflow + overflowY + overflowX);\n    }\n\n    function getScrollParent(node) {\n        if (['html', 'body', '#document'].indexOf(getNodeName(node)) >= 0) {\n            // $FlowFixMe[incompatible-return]: assume body is always available\n            return node.ownerDocument.body;\n        }\n\n        if (isHTMLElement(node) && isScrollParent(node)) {\n            return node;\n        }\n\n        return getScrollParent(getParentNode(node));\n    }\n\n    /*\n  given a DOM element, return the list of all scroll parents, up the list of ancesors\n  until we get to the top window object. This list is what we attach scroll listeners\n  to, because if any of these parent elements scroll, we'll need to re-calculate the\n  reference element's position.\n  */\n\n    function listScrollParents(element, list) {\n        var _element$ownerDocumen;\n\n        if (list === void 0) {\n            list = [];\n        }\n\n        var scrollParent = getScrollParent(element);\n        var isBody = scrollParent === ((_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body);\n        var win = getWindow(scrollParent);\n        var target = isBody ? [win].concat(win.visualViewport || [], isScrollParent(scrollParent) ? scrollParent : []) : scrollParent;\n        var updatedList = list.concat(target);\n        return isBody ? updatedList : // $FlowFixMe[incompatible-call]: isBody tells us target will be an HTMLElement here\n            updatedList.concat(listScrollParents(getParentNode(target)));\n    }\n\n    function rectToClientRect(rect) {\n        return Object.assign({}, rect, {\n            left: rect.x,\n            top: rect.y,\n            right: rect.x + rect.width,\n            bottom: rect.y + rect.height\n        });\n    }\n\n    function getInnerBoundingClientRect(element, strategy) {\n        var rect = getBoundingClientRect(element, false, strategy === 'fixed');\n        rect.top = rect.top + element.clientTop;\n        rect.left = rect.left + element.clientLeft;\n        rect.bottom = rect.top + element.clientHeight;\n        rect.right = rect.left + element.clientWidth;\n        rect.width = element.clientWidth;\n        rect.height = element.clientHeight;\n        rect.x = rect.left;\n        rect.y = rect.top;\n        return rect;\n    }\n\n    function getClientRectFromMixedType(element, clippingParent, strategy) {\n        return clippingParent === viewport ? rectToClientRect(getViewportRect(element, strategy)) : isElement(clippingParent) ? getInnerBoundingClientRect(clippingParent, strategy) : rectToClientRect(getDocumentRect(getDocumentElement(element)));\n    } // A \"clipping parent\" is an overflowable container with the characteristic of\n    // clipping (or hiding) overflowing elements with a position different from\n    // `initial`\n\n\n    function getClippingParents(element) {\n        var clippingParents = listScrollParents(getParentNode(element));\n        var canEscapeClipping = ['absolute', 'fixed'].indexOf(getComputedStyle$1(element).position) >= 0;\n        var clipperElement = canEscapeClipping && isHTMLElement(element) ? getOffsetParent(element) : element;\n\n        if (!isElement(clipperElement)) {\n            return [];\n        } // $FlowFixMe[incompatible-return]: https://github.com/facebook/flow/issues/1414\n\n\n        return clippingParents.filter(function (clippingParent) {\n            return isElement(clippingParent) && contains(clippingParent, clipperElement) && getNodeName(clippingParent) !== 'body';\n        });\n    } // Gets the maximum area that the element is visible in due to any number of\n    // clipping parents\n\n\n    function getClippingRect(element, boundary, rootBoundary, strategy) {\n        var mainClippingParents = boundary === 'clippingParents' ? getClippingParents(element) : [].concat(boundary);\n        var clippingParents = [].concat(mainClippingParents, [rootBoundary]);\n        var firstClippingParent = clippingParents[0];\n        var clippingRect = clippingParents.reduce(function (accRect, clippingParent) {\n            var rect = getClientRectFromMixedType(element, clippingParent, strategy);\n            accRect.top = max(rect.top, accRect.top);\n            accRect.right = min(rect.right, accRect.right);\n            accRect.bottom = min(rect.bottom, accRect.bottom);\n            accRect.left = max(rect.left, accRect.left);\n            return accRect;\n        }, getClientRectFromMixedType(element, firstClippingParent, strategy));\n        clippingRect.width = clippingRect.right - clippingRect.left;\n        clippingRect.height = clippingRect.bottom - clippingRect.top;\n        clippingRect.x = clippingRect.left;\n        clippingRect.y = clippingRect.top;\n        return clippingRect;\n    }\n\n    function computeOffsets(_ref) {\n        var reference = _ref.reference,\n            element = _ref.element,\n            placement = _ref.placement;\n        var basePlacement = placement ? getBasePlacement(placement) : null;\n        var variation = placement ? getVariation(placement) : null;\n        var commonX = reference.x + reference.width / 2 - element.width / 2;\n        var commonY = reference.y + reference.height / 2 - element.height / 2;\n        var offsets;\n\n        switch (basePlacement) {\n            case top:\n                offsets = {\n                    x: commonX,\n                    y: reference.y - element.height\n                };\n                break;\n\n            case bottom:\n                offsets = {\n                    x: commonX,\n                    y: reference.y + reference.height\n                };\n                break;\n\n            case right:\n                offsets = {\n                    x: reference.x + reference.width,\n                    y: commonY\n                };\n                break;\n\n            case left:\n                offsets = {\n                    x: reference.x - element.width,\n                    y: commonY\n                };\n                break;\n\n            default:\n                offsets = {\n                    x: reference.x,\n                    y: reference.y\n                };\n        }\n\n        var mainAxis = basePlacement ? getMainAxisFromPlacement(basePlacement) : null;\n\n        if (mainAxis != null) {\n            var len = mainAxis === 'y' ? 'height' : 'width';\n\n            switch (variation) {\n                case start:\n                    offsets[mainAxis] = offsets[mainAxis] - (reference[len] / 2 - element[len] / 2);\n                    break;\n\n                case end:\n                    offsets[mainAxis] = offsets[mainAxis] + (reference[len] / 2 - element[len] / 2);\n                    break;\n            }\n        }\n\n        return offsets;\n    }\n\n    function detectOverflow(state, options) {\n        if (options === void 0) {\n            options = {};\n        }\n\n        var _options = options,\n            _options$placement = _options.placement,\n            placement = _options$placement === void 0 ? state.placement : _options$placement,\n            _options$strategy = _options.strategy,\n            strategy = _options$strategy === void 0 ? state.strategy : _options$strategy,\n            _options$boundary = _options.boundary,\n            boundary = _options$boundary === void 0 ? clippingParents : _options$boundary,\n            _options$rootBoundary = _options.rootBoundary,\n            rootBoundary = _options$rootBoundary === void 0 ? viewport : _options$rootBoundary,\n            _options$elementConte = _options.elementContext,\n            elementContext = _options$elementConte === void 0 ? popper : _options$elementConte,\n            _options$altBoundary = _options.altBoundary,\n            altBoundary = _options$altBoundary === void 0 ? false : _options$altBoundary,\n            _options$padding = _options.padding,\n            padding = _options$padding === void 0 ? 0 : _options$padding;\n        var paddingObject = mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));\n        var altContext = elementContext === popper ? reference : popper;\n        var popperRect = state.rects.popper;\n        var element = state.elements[altBoundary ? altContext : elementContext];\n        var clippingClientRect = getClippingRect(isElement(element) ? element : element.contextElement || getDocumentElement(state.elements.popper), boundary, rootBoundary, strategy);\n        var referenceClientRect = getBoundingClientRect(state.elements.reference);\n        var popperOffsets = computeOffsets({\n            reference: referenceClientRect,\n            element: popperRect,\n            strategy: 'absolute',\n            placement: placement\n        });\n        var popperClientRect = rectToClientRect(Object.assign({}, popperRect, popperOffsets));\n        var elementClientRect = elementContext === popper ? popperClientRect : referenceClientRect; // positive = overflowing the clipping rect\n        // 0 or negative = within the clipping rect\n\n        var overflowOffsets = {\n            top: clippingClientRect.top - elementClientRect.top + paddingObject.top,\n            bottom: elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom,\n            left: clippingClientRect.left - elementClientRect.left + paddingObject.left,\n            right: elementClientRect.right - clippingClientRect.right + paddingObject.right\n        };\n        var offsetData = state.modifiersData.offset; // Offsets can be applied only to the popper element\n\n        if (elementContext === popper && offsetData) {\n            var offset = offsetData[placement];\n            Object.keys(overflowOffsets).forEach(function (key) {\n                var multiply = [right, bottom].indexOf(key) >= 0 ? 1 : -1;\n                var axis = [top, bottom].indexOf(key) >= 0 ? 'y' : 'x';\n                overflowOffsets[key] += offset[axis] * multiply;\n            });\n        }\n\n        return overflowOffsets;\n    }\n\n    function computeAutoPlacement(state, options) {\n        if (options === void 0) {\n            options = {};\n        }\n\n        var _options = options,\n            placement = _options.placement,\n            boundary = _options.boundary,\n            rootBoundary = _options.rootBoundary,\n            padding = _options.padding,\n            flipVariations = _options.flipVariations,\n            _options$allowedAutoP = _options.allowedAutoPlacements,\n            allowedAutoPlacements = _options$allowedAutoP === void 0 ? placements : _options$allowedAutoP;\n        var variation = getVariation(placement);\n        var placements$1 = variation ? flipVariations ? variationPlacements : variationPlacements.filter(function (placement) {\n            return getVariation(placement) === variation;\n        }) : basePlacements;\n        var allowedPlacements = placements$1.filter(function (placement) {\n            return allowedAutoPlacements.indexOf(placement) >= 0;\n        });\n\n        if (allowedPlacements.length === 0) {\n            allowedPlacements = placements$1;\n        } // $FlowFixMe[incompatible-type]: Flow seems to have problems with two array unions...\n\n\n        var overflows = allowedPlacements.reduce(function (acc, placement) {\n            acc[placement] = detectOverflow(state, {\n                placement: placement,\n                boundary: boundary,\n                rootBoundary: rootBoundary,\n                padding: padding\n            })[getBasePlacement(placement)];\n            return acc;\n        }, {});\n        return Object.keys(overflows).sort(function (a, b) {\n            return overflows[a] - overflows[b];\n        });\n    }\n\n    function getExpandedFallbackPlacements(placement) {\n        if (getBasePlacement(placement) === auto) {\n            return [];\n        }\n\n        var oppositePlacement = getOppositePlacement(placement);\n        return [getOppositeVariationPlacement(placement), oppositePlacement, getOppositeVariationPlacement(oppositePlacement)];\n    }\n\n    function flip(_ref) {\n        var state = _ref.state,\n            options = _ref.options,\n            name = _ref.name;\n\n        if (state.modifiersData[name]._skip) {\n            return;\n        }\n\n        var _options$mainAxis = options.mainAxis,\n            checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n            _options$altAxis = options.altAxis,\n            checkAltAxis = _options$altAxis === void 0 ? true : _options$altAxis,\n            specifiedFallbackPlacements = options.fallbackPlacements,\n            padding = options.padding,\n            boundary = options.boundary,\n            rootBoundary = options.rootBoundary,\n            altBoundary = options.altBoundary,\n            _options$flipVariatio = options.flipVariations,\n            flipVariations = _options$flipVariatio === void 0 ? true : _options$flipVariatio,\n            allowedAutoPlacements = options.allowedAutoPlacements;\n        var preferredPlacement = state.options.placement;\n        var basePlacement = getBasePlacement(preferredPlacement);\n        var isBasePlacement = basePlacement === preferredPlacement;\n        var fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipVariations ? [getOppositePlacement(preferredPlacement)] : getExpandedFallbackPlacements(preferredPlacement));\n        var placements = [preferredPlacement].concat(fallbackPlacements).reduce(function (acc, placement) {\n            return acc.concat(getBasePlacement(placement) === auto ? computeAutoPlacement(state, {\n                placement: placement,\n                boundary: boundary,\n                rootBoundary: rootBoundary,\n                padding: padding,\n                flipVariations: flipVariations,\n                allowedAutoPlacements: allowedAutoPlacements\n            }) : placement);\n        }, []);\n        var referenceRect = state.rects.reference;\n        var popperRect = state.rects.popper;\n        var checksMap = new Map();\n        var makeFallbackChecks = true;\n        var firstFittingPlacement = placements[0];\n\n        for (var i = 0; i < placements.length; i++) {\n            var placement = placements[i];\n\n            var _basePlacement = getBasePlacement(placement);\n\n            var isStartVariation = getVariation(placement) === start;\n            var isVertical = [top, bottom].indexOf(_basePlacement) >= 0;\n            var len = isVertical ? 'width' : 'height';\n            var overflow = detectOverflow(state, {\n                placement: placement,\n                boundary: boundary,\n                rootBoundary: rootBoundary,\n                altBoundary: altBoundary,\n                padding: padding\n            });\n            var mainVariationSide = isVertical ? isStartVariation ? right : left : isStartVariation ? bottom : top;\n\n            if (referenceRect[len] > popperRect[len]) {\n                mainVariationSide = getOppositePlacement(mainVariationSide);\n            }\n\n            var altVariationSide = getOppositePlacement(mainVariationSide);\n            var checks = [];\n\n            if (checkMainAxis) {\n                checks.push(overflow[_basePlacement] <= 0);\n            }\n\n            if (checkAltAxis) {\n                checks.push(overflow[mainVariationSide] <= 0, overflow[altVariationSide] <= 0);\n            }\n\n            if (checks.every(function (check) {\n                return check;\n            })) {\n                firstFittingPlacement = placement;\n                makeFallbackChecks = false;\n                break;\n            }\n\n            checksMap.set(placement, checks);\n        }\n\n        if (makeFallbackChecks) {\n            // `2` may be desired in some cases – research later\n            var numberOfChecks = flipVariations ? 3 : 1;\n\n            var _loop = function _loop(_i) {\n                var fittingPlacement = placements.find(function (placement) {\n                    var checks = checksMap.get(placement);\n\n                    if (checks) {\n                        return checks.slice(0, _i).every(function (check) {\n                            return check;\n                        });\n                    }\n                });\n\n                if (fittingPlacement) {\n                    firstFittingPlacement = fittingPlacement;\n                    return \"break\";\n                }\n            };\n\n            for (var _i = numberOfChecks; _i > 0; _i--) {\n                var _ret = _loop(_i);\n\n                if (_ret === \"break\") break;\n            }\n        }\n\n        if (state.placement !== firstFittingPlacement) {\n            state.modifiersData[name]._skip = true;\n            state.placement = firstFittingPlacement;\n            state.reset = true;\n        }\n    } // eslint-disable-next-line import/no-unused-modules\n\n\n    const flip$1 = {\n        name: 'flip',\n        enabled: true,\n        phase: 'main',\n        fn: flip,\n        requiresIfExists: ['offset'],\n        data: {\n            _skip: false\n        }\n    };\n\n    function getSideOffsets(overflow, rect, preventedOffsets) {\n        if (preventedOffsets === void 0) {\n            preventedOffsets = {\n                x: 0,\n                y: 0\n            };\n        }\n\n        return {\n            top: overflow.top - rect.height - preventedOffsets.y,\n            right: overflow.right - rect.width + preventedOffsets.x,\n            bottom: overflow.bottom - rect.height + preventedOffsets.y,\n            left: overflow.left - rect.width - preventedOffsets.x\n        };\n    }\n\n    function isAnySideFullyClipped(overflow) {\n        return [top, right, bottom, left].some(function (side) {\n            return overflow[side] >= 0;\n        });\n    }\n\n    function hide(_ref) {\n        var state = _ref.state,\n            name = _ref.name;\n        var referenceRect = state.rects.reference;\n        var popperRect = state.rects.popper;\n        var preventedOffsets = state.modifiersData.preventOverflow;\n        var referenceOverflow = detectOverflow(state, {\n            elementContext: 'reference'\n        });\n        var popperAltOverflow = detectOverflow(state, {\n            altBoundary: true\n        });\n        var referenceClippingOffsets = getSideOffsets(referenceOverflow, referenceRect);\n        var popperEscapeOffsets = getSideOffsets(popperAltOverflow, popperRect, preventedOffsets);\n        var isReferenceHidden = isAnySideFullyClipped(referenceClippingOffsets);\n        var hasPopperEscaped = isAnySideFullyClipped(popperEscapeOffsets);\n        state.modifiersData[name] = {\n            referenceClippingOffsets: referenceClippingOffsets,\n            popperEscapeOffsets: popperEscapeOffsets,\n            isReferenceHidden: isReferenceHidden,\n            hasPopperEscaped: hasPopperEscaped\n        };\n        state.attributes.popper = Object.assign({}, state.attributes.popper, {\n            'data-popper-reference-hidden': isReferenceHidden,\n            'data-popper-escaped': hasPopperEscaped\n        });\n    } // eslint-disable-next-line import/no-unused-modules\n\n\n    const hide$1 = {\n        name: 'hide',\n        enabled: true,\n        phase: 'main',\n        requiresIfExists: ['preventOverflow'],\n        fn: hide\n    };\n\n    function distanceAndSkiddingToXY(placement, rects, offset) {\n        var basePlacement = getBasePlacement(placement);\n        var invertDistance = [left, top].indexOf(basePlacement) >= 0 ? -1 : 1;\n\n        var _ref = typeof offset === 'function' ? offset(Object.assign({}, rects, {\n                placement: placement\n            })) : offset,\n            skidding = _ref[0],\n            distance = _ref[1];\n\n        skidding = skidding || 0;\n        distance = (distance || 0) * invertDistance;\n        return [left, right].indexOf(basePlacement) >= 0 ? {\n            x: distance,\n            y: skidding\n        } : {\n            x: skidding,\n            y: distance\n        };\n    }\n\n    function offset(_ref2) {\n        var state = _ref2.state,\n            options = _ref2.options,\n            name = _ref2.name;\n        var _options$offset = options.offset,\n            offset = _options$offset === void 0 ? [0, 0] : _options$offset;\n        var data = placements.reduce(function (acc, placement) {\n            acc[placement] = distanceAndSkiddingToXY(placement, state.rects, offset);\n            return acc;\n        }, {});\n        var _data$state$placement = data[state.placement],\n            x = _data$state$placement.x,\n            y = _data$state$placement.y;\n\n        if (state.modifiersData.popperOffsets != null) {\n            state.modifiersData.popperOffsets.x += x;\n            state.modifiersData.popperOffsets.y += y;\n        }\n\n        state.modifiersData[name] = data;\n    } // eslint-disable-next-line import/no-unused-modules\n\n\n    const offset$1 = {\n        name: 'offset',\n        enabled: true,\n        phase: 'main',\n        requires: ['popperOffsets'],\n        fn: offset\n    };\n\n    function popperOffsets(_ref) {\n        var state = _ref.state,\n            name = _ref.name;\n        // Offsets are the actual position the popper needs to have to be\n        // properly positioned near its reference element\n        // This is the most basic placement, and will be adjusted by\n        // the modifiers in the next step\n        state.modifiersData[name] = computeOffsets({\n            reference: state.rects.reference,\n            element: state.rects.popper,\n            strategy: 'absolute',\n            placement: state.placement\n        });\n    } // eslint-disable-next-line import/no-unused-modules\n\n\n    const popperOffsets$1 = {\n        name: 'popperOffsets',\n        enabled: true,\n        phase: 'read',\n        fn: popperOffsets,\n        data: {}\n    };\n\n    function getAltAxis(axis) {\n        return axis === 'x' ? 'y' : 'x';\n    }\n\n    function preventOverflow(_ref) {\n        var state = _ref.state,\n            options = _ref.options,\n            name = _ref.name;\n        var _options$mainAxis = options.mainAxis,\n            checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n            _options$altAxis = options.altAxis,\n            checkAltAxis = _options$altAxis === void 0 ? false : _options$altAxis,\n            boundary = options.boundary,\n            rootBoundary = options.rootBoundary,\n            altBoundary = options.altBoundary,\n            padding = options.padding,\n            _options$tether = options.tether,\n            tether = _options$tether === void 0 ? true : _options$tether,\n            _options$tetherOffset = options.tetherOffset,\n            tetherOffset = _options$tetherOffset === void 0 ? 0 : _options$tetherOffset;\n        var overflow = detectOverflow(state, {\n            boundary: boundary,\n            rootBoundary: rootBoundary,\n            padding: padding,\n            altBoundary: altBoundary\n        });\n        var basePlacement = getBasePlacement(state.placement);\n        var variation = getVariation(state.placement);\n        var isBasePlacement = !variation;\n        var mainAxis = getMainAxisFromPlacement(basePlacement);\n        var altAxis = getAltAxis(mainAxis);\n        var popperOffsets = state.modifiersData.popperOffsets;\n        var referenceRect = state.rects.reference;\n        var popperRect = state.rects.popper;\n        var tetherOffsetValue = typeof tetherOffset === 'function' ? tetherOffset(Object.assign({}, state.rects, {\n            placement: state.placement\n        })) : tetherOffset;\n        var normalizedTetherOffsetValue = typeof tetherOffsetValue === 'number' ? {\n            mainAxis: tetherOffsetValue,\n            altAxis: tetherOffsetValue\n        } : Object.assign({\n            mainAxis: 0,\n            altAxis: 0\n        }, tetherOffsetValue);\n        var offsetModifierState = state.modifiersData.offset ? state.modifiersData.offset[state.placement] : null;\n        var data = {\n            x: 0,\n            y: 0\n        };\n\n        if (!popperOffsets) {\n            return;\n        }\n\n        if (checkMainAxis) {\n            var _offsetModifierState$;\n\n            var mainSide = mainAxis === 'y' ? top : left;\n            var altSide = mainAxis === 'y' ? bottom : right;\n            var len = mainAxis === 'y' ? 'height' : 'width';\n            var offset = popperOffsets[mainAxis];\n            var min$1 = offset + overflow[mainSide];\n            var max$1 = offset - overflow[altSide];\n            var additive = tether ? -popperRect[len] / 2 : 0;\n            var minLen = variation === start ? referenceRect[len] : popperRect[len];\n            var maxLen = variation === start ? -popperRect[len] : -referenceRect[len]; // We need to include the arrow in the calculation so the arrow doesn't go\n            // outside the reference bounds\n\n            var arrowElement = state.elements.arrow;\n            var arrowRect = tether && arrowElement ? getLayoutRect(arrowElement) : {\n                width: 0,\n                height: 0\n            };\n            var arrowPaddingObject = state.modifiersData['arrow#persistent'] ? state.modifiersData['arrow#persistent'].padding : getFreshSideObject();\n            var arrowPaddingMin = arrowPaddingObject[mainSide];\n            var arrowPaddingMax = arrowPaddingObject[altSide]; // If the reference length is smaller than the arrow length, we don't want\n            // to include its full size in the calculation. If the reference is small\n            // and near the edge of a boundary, the popper can overflow even if the\n            // reference is not overflowing as well (e.g. virtual elements with no\n            // width or height)\n\n            var arrowLen = within(0, referenceRect[len], arrowRect[len]);\n            var minOffset = isBasePlacement ? referenceRect[len] / 2 - additive - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis : minLen - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis;\n            var maxOffset = isBasePlacement ? -referenceRect[len] / 2 + additive + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis : maxLen + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis;\n            var arrowOffsetParent = state.elements.arrow && getOffsetParent(state.elements.arrow);\n            var clientOffset = arrowOffsetParent ? mainAxis === 'y' ? arrowOffsetParent.clientTop || 0 : arrowOffsetParent.clientLeft || 0 : 0;\n            var offsetModifierValue = (_offsetModifierState$ = offsetModifierState == null ? void 0 : offsetModifierState[mainAxis]) != null ? _offsetModifierState$ : 0;\n            var tetherMin = offset + minOffset - offsetModifierValue - clientOffset;\n            var tetherMax = offset + maxOffset - offsetModifierValue;\n            var preventedOffset = within(tether ? min(min$1, tetherMin) : min$1, offset, tether ? max(max$1, tetherMax) : max$1);\n            popperOffsets[mainAxis] = preventedOffset;\n            data[mainAxis] = preventedOffset - offset;\n        }\n\n        if (checkAltAxis) {\n            var _offsetModifierState$2;\n\n            var _mainSide = mainAxis === 'x' ? top : left;\n\n            var _altSide = mainAxis === 'x' ? bottom : right;\n\n            var _offset = popperOffsets[altAxis];\n\n            var _len = altAxis === 'y' ? 'height' : 'width';\n\n            var _min = _offset + overflow[_mainSide];\n\n            var _max = _offset - overflow[_altSide];\n\n            var isOriginSide = [top, left].indexOf(basePlacement) !== -1;\n\n            var _offsetModifierValue = (_offsetModifierState$2 = offsetModifierState == null ? void 0 : offsetModifierState[altAxis]) != null ? _offsetModifierState$2 : 0;\n\n            var _tetherMin = isOriginSide ? _min : _offset - referenceRect[_len] - popperRect[_len] - _offsetModifierValue + normalizedTetherOffsetValue.altAxis;\n\n            var _tetherMax = isOriginSide ? _offset + referenceRect[_len] + popperRect[_len] - _offsetModifierValue - normalizedTetherOffsetValue.altAxis : _max;\n\n            var _preventedOffset = tether && isOriginSide ? withinMaxClamp(_tetherMin, _offset, _tetherMax) : within(tether ? _tetherMin : _min, _offset, tether ? _tetherMax : _max);\n\n            popperOffsets[altAxis] = _preventedOffset;\n            data[altAxis] = _preventedOffset - _offset;\n        }\n\n        state.modifiersData[name] = data;\n    } // eslint-disable-next-line import/no-unused-modules\n\n\n    const preventOverflow$1 = {\n        name: 'preventOverflow',\n        enabled: true,\n        phase: 'main',\n        fn: preventOverflow,\n        requiresIfExists: ['offset']\n    };\n\n    function getHTMLElementScroll(element) {\n        return {\n            scrollLeft: element.scrollLeft,\n            scrollTop: element.scrollTop\n        };\n    }\n\n    function getNodeScroll(node) {\n        if (node === getWindow(node) || !isHTMLElement(node)) {\n            return getWindowScroll(node);\n        } else {\n            return getHTMLElementScroll(node);\n        }\n    }\n\n    function isElementScaled(element) {\n        var rect = element.getBoundingClientRect();\n        var scaleX = round(rect.width) / element.offsetWidth || 1;\n        var scaleY = round(rect.height) / element.offsetHeight || 1;\n        return scaleX !== 1 || scaleY !== 1;\n    } // Returns the composite rect of an element relative to its offsetParent.\n    // Composite means it takes into account transforms as well as layout.\n\n\n    function getCompositeRect(elementOrVirtualElement, offsetParent, isFixed) {\n        if (isFixed === void 0) {\n            isFixed = false;\n        }\n\n        var isOffsetParentAnElement = isHTMLElement(offsetParent);\n        var offsetParentIsScaled = isHTMLElement(offsetParent) && isElementScaled(offsetParent);\n        var documentElement = getDocumentElement(offsetParent);\n        var rect = getBoundingClientRect(elementOrVirtualElement, offsetParentIsScaled, isFixed);\n        var scroll = {\n            scrollLeft: 0,\n            scrollTop: 0\n        };\n        var offsets = {\n            x: 0,\n            y: 0\n        };\n\n        if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\n            if (getNodeName(offsetParent) !== 'body' || // https://github.com/popperjs/popper-core/issues/1078\n                isScrollParent(documentElement)) {\n                scroll = getNodeScroll(offsetParent);\n            }\n\n            if (isHTMLElement(offsetParent)) {\n                offsets = getBoundingClientRect(offsetParent, true);\n                offsets.x += offsetParent.clientLeft;\n                offsets.y += offsetParent.clientTop;\n            } else if (documentElement) {\n                offsets.x = getWindowScrollBarX(documentElement);\n            }\n        }\n\n        return {\n            x: rect.left + scroll.scrollLeft - offsets.x,\n            y: rect.top + scroll.scrollTop - offsets.y,\n            width: rect.width,\n            height: rect.height\n        };\n    }\n\n    function order(modifiers) {\n        var map = new Map();\n        var visited = new Set();\n        var result = [];\n        modifiers.forEach(function (modifier) {\n            map.set(modifier.name, modifier);\n        }); // On visiting object, check for its dependencies and visit them recursively\n\n        function sort(modifier) {\n            visited.add(modifier.name);\n            var requires = [].concat(modifier.requires || [], modifier.requiresIfExists || []);\n            requires.forEach(function (dep) {\n                if (!visited.has(dep)) {\n                    var depModifier = map.get(dep);\n\n                    if (depModifier) {\n                        sort(depModifier);\n                    }\n                }\n            });\n            result.push(modifier);\n        }\n\n        modifiers.forEach(function (modifier) {\n            if (!visited.has(modifier.name)) {\n                // check for visited object\n                sort(modifier);\n            }\n        });\n        return result;\n    }\n\n    function orderModifiers(modifiers) {\n        // order based on dependencies\n        var orderedModifiers = order(modifiers); // order based on phase\n\n        return modifierPhases.reduce(function (acc, phase) {\n            return acc.concat(orderedModifiers.filter(function (modifier) {\n                return modifier.phase === phase;\n            }));\n        }, []);\n    }\n\n    function debounce(fn) {\n        var pending;\n        return function () {\n            if (!pending) {\n                pending = new Promise(function (resolve) {\n                    Promise.resolve().then(function () {\n                        pending = undefined;\n                        resolve(fn());\n                    });\n                });\n            }\n\n            return pending;\n        };\n    }\n\n    function mergeByName(modifiers) {\n        var merged = modifiers.reduce(function (merged, current) {\n            var existing = merged[current.name];\n            merged[current.name] = existing ? Object.assign({}, existing, current, {\n                options: Object.assign({}, existing.options, current.options),\n                data: Object.assign({}, existing.data, current.data)\n            }) : current;\n            return merged;\n        }, {}); // IE11 does not support Object.values\n\n        return Object.keys(merged).map(function (key) {\n            return merged[key];\n        });\n    }\n\n    var DEFAULT_OPTIONS = {\n        placement: 'bottom',\n        modifiers: [],\n        strategy: 'absolute'\n    };\n\n    function areValidElements() {\n        for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n            args[_key] = arguments[_key];\n        }\n\n        return !args.some(function (element) {\n            return !(element && typeof element.getBoundingClientRect === 'function');\n        });\n    }\n\n    function popperGenerator(generatorOptions) {\n        if (generatorOptions === void 0) {\n            generatorOptions = {};\n        }\n\n        var _generatorOptions = generatorOptions,\n            _generatorOptions$def = _generatorOptions.defaultModifiers,\n            defaultModifiers = _generatorOptions$def === void 0 ? [] : _generatorOptions$def,\n            _generatorOptions$def2 = _generatorOptions.defaultOptions,\n            defaultOptions = _generatorOptions$def2 === void 0 ? DEFAULT_OPTIONS : _generatorOptions$def2;\n        return function createPopper(reference, popper, options) {\n            if (options === void 0) {\n                options = defaultOptions;\n            }\n\n            var state = {\n                placement: 'bottom',\n                orderedModifiers: [],\n                options: Object.assign({}, DEFAULT_OPTIONS, defaultOptions),\n                modifiersData: {},\n                elements: {\n                    reference: reference,\n                    popper: popper\n                },\n                attributes: {},\n                styles: {}\n            };\n            var effectCleanupFns = [];\n            var isDestroyed = false;\n            var instance = {\n                state: state,\n                setOptions: function setOptions(setOptionsAction) {\n                    var options = typeof setOptionsAction === 'function' ? setOptionsAction(state.options) : setOptionsAction;\n                    cleanupModifierEffects();\n                    state.options = Object.assign({}, defaultOptions, state.options, options);\n                    state.scrollParents = {\n                        reference: isElement(reference) ? listScrollParents(reference) : reference.contextElement ? listScrollParents(reference.contextElement) : [],\n                        popper: listScrollParents(popper)\n                    }; // Orders the modifiers based on their dependencies and `phase`\n                    // properties\n\n                    var orderedModifiers = orderModifiers(mergeByName([].concat(defaultModifiers, state.options.modifiers))); // Strip out disabled modifiers\n\n                    state.orderedModifiers = orderedModifiers.filter(function (m) {\n                        return m.enabled;\n                    }); // Validate the provided modifiers so that the consumer will get warned\n\n                    runModifierEffects();\n                    return instance.update();\n                },\n                // Sync update – it will always be executed, even if not necessary. This\n                // is useful for low frequency updates where sync behavior simplifies the\n                // logic.\n                // For high frequency updates (e.g. `resize` and `scroll` events), always\n                // prefer the async Popper#update method\n                forceUpdate: function forceUpdate() {\n                    if (isDestroyed) {\n                        return;\n                    }\n\n                    var _state$elements = state.elements,\n                        reference = _state$elements.reference,\n                        popper = _state$elements.popper; // Don't proceed if `reference` or `popper` are not valid elements\n                    // anymore\n\n                    if (!areValidElements(reference, popper)) {\n\n                        return;\n                    } // Store the reference and popper rects to be read by modifiers\n\n\n                    state.rects = {\n                        reference: getCompositeRect(reference, getOffsetParent(popper), state.options.strategy === 'fixed'),\n                        popper: getLayoutRect(popper)\n                    }; // Modifiers have the ability to reset the current update cycle. The\n                    // most common use case for this is the `flip` modifier changing the\n                    // placement, which then needs to re-run all the modifiers, because the\n                    // logic was previously ran for the previous placement and is therefore\n                    // stale/incorrect\n\n                    state.reset = false;\n                    state.placement = state.options.placement; // On each update cycle, the `modifiersData` property for each modifier\n                    // is filled with the initial data specified by the modifier. This means\n                    // it doesn't persist and is fresh on each update.\n                    // To ensure persistent data, use `${name}#persistent`\n\n                    state.orderedModifiers.forEach(function (modifier) {\n                        return state.modifiersData[modifier.name] = Object.assign({}, modifier.data);\n                    });\n\n                    for (var index = 0; index < state.orderedModifiers.length; index++) {\n\n                        if (state.reset === true) {\n                            state.reset = false;\n                            index = -1;\n                            continue;\n                        }\n\n                        var _state$orderedModifie = state.orderedModifiers[index],\n                            fn = _state$orderedModifie.fn,\n                            _state$orderedModifie2 = _state$orderedModifie.options,\n                            _options = _state$orderedModifie2 === void 0 ? {} : _state$orderedModifie2,\n                            name = _state$orderedModifie.name;\n\n                        if (typeof fn === 'function') {\n                            state = fn({\n                                state: state,\n                                options: _options,\n                                name: name,\n                                instance: instance\n                            }) || state;\n                        }\n                    }\n                },\n                // Async and optimistically optimized update – it will not be executed if\n                // not necessary (debounced to run at most once-per-tick)\n                update: debounce(function () {\n                    return new Promise(function (resolve) {\n                        instance.forceUpdate();\n                        resolve(state);\n                    });\n                }),\n                destroy: function destroy() {\n                    cleanupModifierEffects();\n                    isDestroyed = true;\n                }\n            };\n\n            if (!areValidElements(reference, popper)) {\n\n                return instance;\n            }\n\n            instance.setOptions(options).then(function (state) {\n                if (!isDestroyed && options.onFirstUpdate) {\n                    options.onFirstUpdate(state);\n                }\n            }); // Modifiers have the ability to execute arbitrary code before the first\n            // update cycle runs. They will be executed in the same order as the update\n            // cycle. This is useful when a modifier adds some persistent data that\n            // other modifiers need to use, but the modifier is run after the dependent\n            // one.\n\n            function runModifierEffects() {\n                state.orderedModifiers.forEach(function (_ref3) {\n                    var name = _ref3.name,\n                        _ref3$options = _ref3.options,\n                        options = _ref3$options === void 0 ? {} : _ref3$options,\n                        effect = _ref3.effect;\n\n                    if (typeof effect === 'function') {\n                        var cleanupFn = effect({\n                            state: state,\n                            name: name,\n                            instance: instance,\n                            options: options\n                        });\n\n                        var noopFn = function noopFn() {\n                        };\n\n                        effectCleanupFns.push(cleanupFn || noopFn);\n                    }\n                });\n            }\n\n            function cleanupModifierEffects() {\n                effectCleanupFns.forEach(function (fn) {\n                    return fn();\n                });\n                effectCleanupFns = [];\n            }\n\n            return instance;\n        };\n    }\n\n    var createPopper$2 = /*#__PURE__*/popperGenerator(); // eslint-disable-next-line import/no-unused-modules\n\n    var defaultModifiers$1 = [eventListeners, popperOffsets$1, computeStyles$1, applyStyles$1];\n    var createPopper$1 = /*#__PURE__*/popperGenerator({\n        defaultModifiers: defaultModifiers$1\n    }); // eslint-disable-next-line import/no-unused-modules\n\n    var defaultModifiers = [eventListeners, popperOffsets$1, computeStyles$1, applyStyles$1, offset$1, flip$1, preventOverflow$1, arrow$1, hide$1];\n    var createPopper = /*#__PURE__*/popperGenerator({\n        defaultModifiers: defaultModifiers\n    }); // eslint-disable-next-line import/no-unused-modules\n\n    const Popper = /*#__PURE__*/Object.freeze(/*#__PURE__*/Object.defineProperty({\n        __proto__: null,\n        popperGenerator,\n        detectOverflow,\n        createPopperBase: createPopper$2,\n        createPopper,\n        createPopperLite: createPopper$1,\n        top,\n        bottom,\n        right,\n        left,\n        auto,\n        basePlacements,\n        start,\n        end,\n        clippingParents,\n        viewport,\n        popper,\n        reference,\n        variationPlacements,\n        placements,\n        beforeRead,\n        read,\n        afterRead,\n        beforeMain,\n        main,\n        afterMain,\n        beforeWrite,\n        write,\n        afterWrite,\n        modifierPhases,\n        applyStyles: applyStyles$1,\n        arrow: arrow$1,\n        computeStyles: computeStyles$1,\n        eventListeners,\n        flip: flip$1,\n        hide: hide$1,\n        offset: offset$1,\n        popperOffsets: popperOffsets$1,\n        preventOverflow: preventOverflow$1\n    }, Symbol.toStringTag, {value: 'Module'}));\n\n    /**\n     * --------------------------------------------------------------------------\n     * Bootstrap (v5.2.3): dropdown.js\n     * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n     * --------------------------------------------------------------------------\n     */\n    /**\n     * Constants\n     */\n\n    const NAME$a = 'dropdown';\n    const DATA_KEY$6 = 'bs.dropdown';\n    const EVENT_KEY$6 = `.${DATA_KEY$6}`;\n    const DATA_API_KEY$3 = '.data-api';\n    const ESCAPE_KEY$2 = 'Escape';\n    const TAB_KEY$1 = 'Tab';\n    const ARROW_UP_KEY$1 = 'ArrowUp';\n    const ARROW_DOWN_KEY$1 = 'ArrowDown';\n    const RIGHT_MOUSE_BUTTON = 2; // MouseEvent.button value for the secondary button, usually the right button\n\n    const EVENT_HIDE$5 = `hide${EVENT_KEY$6}`;\n    const EVENT_HIDDEN$5 = `hidden${EVENT_KEY$6}`;\n    const EVENT_SHOW$5 = `show${EVENT_KEY$6}`;\n    const EVENT_SHOWN$5 = `shown${EVENT_KEY$6}`;\n    const EVENT_CLICK_DATA_API$3 = `click${EVENT_KEY$6}${DATA_API_KEY$3}`;\n    const EVENT_KEYDOWN_DATA_API = `keydown${EVENT_KEY$6}${DATA_API_KEY$3}`;\n    const EVENT_KEYUP_DATA_API = `keyup${EVENT_KEY$6}${DATA_API_KEY$3}`;\n    const CLASS_NAME_SHOW$6 = 'show';\n    const CLASS_NAME_DROPUP = 'dropup';\n    const CLASS_NAME_DROPEND = 'dropend';\n    const CLASS_NAME_DROPSTART = 'dropstart';\n    const CLASS_NAME_DROPUP_CENTER = 'dropup-center';\n    const CLASS_NAME_DROPDOWN_CENTER = 'dropdown-center';\n    const SELECTOR_DATA_TOGGLE$3 = '[data-bs-toggle=\"dropdown\"]:not(.disabled):not(:disabled)';\n    const SELECTOR_DATA_TOGGLE_SHOWN = `${SELECTOR_DATA_TOGGLE$3}.${CLASS_NAME_SHOW$6}`;\n    const SELECTOR_MENU = '.dropdown-menu';\n    const SELECTOR_NAVBAR = '.navbar';\n    const SELECTOR_NAVBAR_NAV = '.navbar-nav';\n    const SELECTOR_VISIBLE_ITEMS = '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)';\n    const PLACEMENT_TOP = isRTL() ? 'top-end' : 'top-start';\n    const PLACEMENT_TOPEND = isRTL() ? 'top-start' : 'top-end';\n    const PLACEMENT_BOTTOM = isRTL() ? 'bottom-end' : 'bottom-start';\n    const PLACEMENT_BOTTOMEND = isRTL() ? 'bottom-start' : 'bottom-end';\n    const PLACEMENT_RIGHT = isRTL() ? 'left-start' : 'right-start';\n    const PLACEMENT_LEFT = isRTL() ? 'right-start' : 'left-start';\n    const PLACEMENT_TOPCENTER = 'top';\n    const PLACEMENT_BOTTOMCENTER = 'bottom';\n    const Default$9 = {\n        autoClose: true,\n        boundary: 'clippingParents',\n        display: 'dynamic',\n        offset: [0, 2],\n        popperConfig: null,\n        reference: 'toggle'\n    };\n    const DefaultType$9 = {\n        autoClose: '(boolean|string)',\n        boundary: '(string|element)',\n        display: 'string',\n        offset: '(array|string|function)',\n        popperConfig: '(null|object|function)',\n        reference: '(string|element|object)'\n    };\n\n    /**\n     * Class definition\n     */\n\n    class Dropdown extends BaseComponent {\n        constructor(element, config) {\n            super(element, config);\n            this._popper = null;\n            this._parent = this._element.parentNode; // dropdown wrapper\n            // todo: v6 revert #37011 & change markup https://getbootstrap.com/docs/5.2/forms/input-group/\n\n            this._menu = SelectorEngine.next(this._element, SELECTOR_MENU)[0] || SelectorEngine.prev(this._element, SELECTOR_MENU)[0] || SelectorEngine.findOne(SELECTOR_MENU, this._parent);\n            this._inNavbar = this._detectNavbar();\n        } // Getters\n\n\n        static get Default() {\n            return Default$9;\n        }\n\n        static get DefaultType() {\n            return DefaultType$9;\n        }\n\n        static get NAME() {\n            return NAME$a;\n        } // Public\n\n        static jQueryInterface(config) {\n            return this.each(function () {\n                const data = Dropdown.getOrCreateInstance(this, config);\n\n                if (typeof config !== 'string') {\n                    return;\n                }\n\n                if (typeof data[config] === 'undefined') {\n                    throw new TypeError(`No method named \"${config}\"`);\n                }\n\n                data[config]();\n            });\n        }\n\n        static clearMenus(event) {\n            if (event.button === RIGHT_MOUSE_BUTTON || event.type === 'keyup' && event.key !== TAB_KEY$1) {\n                return;\n            }\n\n            const openToggles = SelectorEngine.find(SELECTOR_DATA_TOGGLE_SHOWN);\n\n            for (const toggle of openToggles) {\n                const context = Dropdown.getInstance(toggle);\n\n                if (!context || context._config.autoClose === false) {\n                    continue;\n                }\n\n                const composedPath = event.composedPath();\n                const isMenuTarget = composedPath.includes(context._menu);\n\n                if (composedPath.includes(context._element) || context._config.autoClose === 'inside' && !isMenuTarget || context._config.autoClose === 'outside' && isMenuTarget) {\n                    continue;\n                } // Tab navigation through the dropdown menu or events from contained inputs shouldn't close the menu\n\n\n                if (context._menu.contains(event.target) && (event.type === 'keyup' && event.key === TAB_KEY$1 || /input|select|option|textarea|form/i.test(event.target.tagName))) {\n                    continue;\n                }\n\n                const relatedTarget = {\n                    relatedTarget: context._element\n                };\n\n                if (event.type === 'click') {\n                    relatedTarget.clickEvent = event;\n                }\n\n                context._completeHide(relatedTarget);\n            }\n        }\n\n        static dataApiKeydownHandler(event) {\n            // If not an UP | DOWN | ESCAPE key => not a dropdown command\n            // If input/textarea && if key is other than ESCAPE => not a dropdown command\n            const isInput = /input|textarea/i.test(event.target.tagName);\n            const isEscapeEvent = event.key === ESCAPE_KEY$2;\n            const isUpOrDownEvent = [ARROW_UP_KEY$1, ARROW_DOWN_KEY$1].includes(event.key);\n\n            if (!isUpOrDownEvent && !isEscapeEvent) {\n                return;\n            }\n\n            if (isInput && !isEscapeEvent) {\n                return;\n            }\n\n            event.preventDefault(); // todo: v6 revert #37011 & change markup https://getbootstrap.com/docs/5.2/forms/input-group/\n\n            const getToggleButton = this.matches(SELECTOR_DATA_TOGGLE$3) ? this : SelectorEngine.prev(this, SELECTOR_DATA_TOGGLE$3)[0] || SelectorEngine.next(this, SELECTOR_DATA_TOGGLE$3)[0] || SelectorEngine.findOne(SELECTOR_DATA_TOGGLE$3, event.delegateTarget.parentNode);\n            const instance = Dropdown.getOrCreateInstance(getToggleButton);\n\n            if (isUpOrDownEvent) {\n                event.stopPropagation();\n                instance.show();\n\n                instance._selectMenuItem(event);\n\n                return;\n            }\n\n            if (instance._isShown()) {\n                // else is escape and we check if it is shown\n                event.stopPropagation();\n                instance.hide();\n                getToggleButton.focus();\n            }\n        }\n\n        toggle() {\n            return this._isShown() ? this.hide() : this.show();\n        }\n\n        show() {\n            if (isDisabled(this._element) || this._isShown()) {\n                return;\n            }\n\n            const relatedTarget = {\n                relatedTarget: this._element\n            };\n            const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$5, relatedTarget);\n\n            if (showEvent.defaultPrevented) {\n                return;\n            }\n\n            this._createPopper(); // If this is a touch-enabled device we add extra\n            // empty mouseover listeners to the body's immediate children;\n            // only needed because of broken event delegation on iOS\n            // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n\n\n            if ('ontouchstart' in document.documentElement && !this._parent.closest(SELECTOR_NAVBAR_NAV)) {\n                for (const element of [].concat(...document.body.children)) {\n                    EventHandler.on(element, 'mouseover', noop);\n                }\n            }\n\n            this._element.focus();\n\n            this._element.setAttribute('aria-expanded', true);\n\n            this._menu.classList.add(CLASS_NAME_SHOW$6);\n\n            this._element.classList.add(CLASS_NAME_SHOW$6);\n\n            EventHandler.trigger(this._element, EVENT_SHOWN$5, relatedTarget);\n        }\n\n        hide() {\n            if (isDisabled(this._element) || !this._isShown()) {\n                return;\n            }\n\n            const relatedTarget = {\n                relatedTarget: this._element\n            };\n\n            this._completeHide(relatedTarget);\n        }\n\n        dispose() {\n            if (this._popper) {\n                this._popper.destroy();\n            }\n\n            super.dispose();\n        }\n\n        update() {\n            this._inNavbar = this._detectNavbar();\n\n            if (this._popper) {\n                this._popper.update();\n            }\n        } // Private\n\n        _completeHide(relatedTarget) {\n            const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$5, relatedTarget);\n\n            if (hideEvent.defaultPrevented) {\n                return;\n            } // If this is a touch-enabled device we remove the extra\n            // empty mouseover listeners we added for iOS support\n\n\n            if ('ontouchstart' in document.documentElement) {\n                for (const element of [].concat(...document.body.children)) {\n                    EventHandler.off(element, 'mouseover', noop);\n                }\n            }\n\n            if (this._popper) {\n                this._popper.destroy();\n            }\n\n            this._menu.classList.remove(CLASS_NAME_SHOW$6);\n\n            this._element.classList.remove(CLASS_NAME_SHOW$6);\n\n            this._element.setAttribute('aria-expanded', 'false');\n\n            Manipulator.removeDataAttribute(this._menu, 'popper');\n            EventHandler.trigger(this._element, EVENT_HIDDEN$5, relatedTarget);\n        }\n\n        _getConfig(config) {\n            config = super._getConfig(config);\n\n            if (typeof config.reference === 'object' && !isElement$1(config.reference) && typeof config.reference.getBoundingClientRect !== 'function') {\n                // Popper virtual elements require a getBoundingClientRect method\n                throw new TypeError(`${NAME$a.toUpperCase()}: Option \"reference\" provided type \"object\" without a required \"getBoundingClientRect\" method.`);\n            }\n\n            return config;\n        }\n\n        _createPopper() {\n            if (typeof Popper === 'undefined') {\n                throw new TypeError('Bootstrap\\'s dropdowns require Popper (https://popper.js.org)');\n            }\n\n            let referenceElement = this._element;\n\n            if (this._config.reference === 'parent') {\n                referenceElement = this._parent;\n            } else if (isElement$1(this._config.reference)) {\n                referenceElement = getElement(this._config.reference);\n            } else if (typeof this._config.reference === 'object') {\n                referenceElement = this._config.reference;\n            }\n\n            const popperConfig = this._getPopperConfig();\n\n            this._popper = createPopper(referenceElement, this._menu, popperConfig);\n        }\n\n        _isShown() {\n            return this._menu.classList.contains(CLASS_NAME_SHOW$6);\n        }\n\n        _getPlacement() {\n            const parentDropdown = this._parent;\n\n            if (parentDropdown.classList.contains(CLASS_NAME_DROPEND)) {\n                return PLACEMENT_RIGHT;\n            }\n\n            if (parentDropdown.classList.contains(CLASS_NAME_DROPSTART)) {\n                return PLACEMENT_LEFT;\n            }\n\n            if (parentDropdown.classList.contains(CLASS_NAME_DROPUP_CENTER)) {\n                return PLACEMENT_TOPCENTER;\n            }\n\n            if (parentDropdown.classList.contains(CLASS_NAME_DROPDOWN_CENTER)) {\n                return PLACEMENT_BOTTOMCENTER;\n            } // We need to trim the value because custom properties can also include spaces\n\n\n            const isEnd = getComputedStyle(this._menu).getPropertyValue('--bs-position').trim() === 'end';\n\n            if (parentDropdown.classList.contains(CLASS_NAME_DROPUP)) {\n                return isEnd ? PLACEMENT_TOPEND : PLACEMENT_TOP;\n            }\n\n            return isEnd ? PLACEMENT_BOTTOMEND : PLACEMENT_BOTTOM;\n        }\n\n        _detectNavbar() {\n            return this._element.closest(SELECTOR_NAVBAR) !== null;\n        }\n\n        _getOffset() {\n            const {\n                offset\n            } = this._config;\n\n            if (typeof offset === 'string') {\n                return offset.split(',').map(value => Number.parseInt(value, 10));\n            }\n\n            if (typeof offset === 'function') {\n                return popperData => offset(popperData, this._element);\n            }\n\n            return offset;\n        }\n\n        _getPopperConfig() {\n            const defaultBsPopperConfig = {\n                placement: this._getPlacement(),\n                modifiers: [{\n                    name: 'preventOverflow',\n                    options: {\n                        boundary: this._config.boundary\n                    }\n                }, {\n                    name: 'offset',\n                    options: {\n                        offset: this._getOffset()\n                    }\n                }]\n            }; // Disable Popper if we have a static display or Dropdown is in Navbar\n\n            if (this._inNavbar || this._config.display === 'static') {\n                Manipulator.setDataAttribute(this._menu, 'popper', 'static'); // todo:v6 remove\n\n                defaultBsPopperConfig.modifiers = [{\n                    name: 'applyStyles',\n                    enabled: false\n                }];\n            }\n\n            return {\n                ...defaultBsPopperConfig,\n                ...(typeof this._config.popperConfig === 'function' ? this._config.popperConfig(defaultBsPopperConfig) : this._config.popperConfig)\n            };\n        }\n\n        _selectMenuItem({\n                            key,\n                            target\n                        }) {\n            const items = SelectorEngine.find(SELECTOR_VISIBLE_ITEMS, this._menu).filter(element => isVisible(element));\n\n            if (!items.length) {\n                return;\n            } // if target isn't included in items (e.g. when expanding the dropdown)\n            // allow cycling to get the last item in case key equals ARROW_UP_KEY\n\n\n            getNextActiveElement(items, target, key === ARROW_DOWN_KEY$1, !items.includes(target)).focus();\n        } // Static\n\n    }\n\n    /**\n     * Data API implementation\n     */\n\n\n    EventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE$3, Dropdown.dataApiKeydownHandler);\n    EventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown.dataApiKeydownHandler);\n    EventHandler.on(document, EVENT_CLICK_DATA_API$3, Dropdown.clearMenus);\n    EventHandler.on(document, EVENT_KEYUP_DATA_API, Dropdown.clearMenus);\n    EventHandler.on(document, EVENT_CLICK_DATA_API$3, SELECTOR_DATA_TOGGLE$3, function (event) {\n        event.preventDefault();\n        Dropdown.getOrCreateInstance(this).toggle();\n    });\n    /**\n     * jQuery\n     */\n\n    defineJQueryPlugin(Dropdown);\n\n    /**\n     * --------------------------------------------------------------------------\n     * Bootstrap (v5.2.3): util/scrollBar.js\n     * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n     * --------------------------------------------------------------------------\n     */\n    /**\n     * Constants\n     */\n\n    const SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top';\n    const SELECTOR_STICKY_CONTENT = '.sticky-top';\n    const PROPERTY_PADDING = 'padding-right';\n    const PROPERTY_MARGIN = 'margin-right';\n\n    /**\n     * Class definition\n     */\n\n    class ScrollBarHelper {\n        constructor() {\n            this._element = document.body;\n        } // Public\n\n\n        getWidth() {\n            // https://developer.mozilla.org/en-US/docs/Web/API/Window/innerWidth#usage_notes\n            const documentWidth = document.documentElement.clientWidth;\n            return Math.abs(window.innerWidth - documentWidth);\n        }\n\n        hide() {\n            const width = this.getWidth();\n\n            this._disableOverFlow(); // give padding to element to balance the hidden scrollbar width\n\n\n            this._setElementAttributes(this._element, PROPERTY_PADDING, calculatedValue => calculatedValue + width); // trick: We adjust positive paddingRight and negative marginRight to sticky-top elements to keep showing fullwidth\n\n\n            this._setElementAttributes(SELECTOR_FIXED_CONTENT, PROPERTY_PADDING, calculatedValue => calculatedValue + width);\n\n            this._setElementAttributes(SELECTOR_STICKY_CONTENT, PROPERTY_MARGIN, calculatedValue => calculatedValue - width);\n        }\n\n        reset() {\n            this._resetElementAttributes(this._element, 'overflow');\n\n            this._resetElementAttributes(this._element, PROPERTY_PADDING);\n\n            this._resetElementAttributes(SELECTOR_FIXED_CONTENT, PROPERTY_PADDING);\n\n            this._resetElementAttributes(SELECTOR_STICKY_CONTENT, PROPERTY_MARGIN);\n        }\n\n        isOverflowing() {\n            return this.getWidth() > 0;\n        } // Private\n\n\n        _disableOverFlow() {\n            this._saveInitialAttribute(this._element, 'overflow');\n\n            this._element.style.overflow = 'hidden';\n        }\n\n        _setElementAttributes(selector, styleProperty, callback) {\n            const scrollbarWidth = this.getWidth();\n\n            const manipulationCallBack = element => {\n                if (element !== this._element && window.innerWidth > element.clientWidth + scrollbarWidth) {\n                    return;\n                }\n\n                this._saveInitialAttribute(element, styleProperty);\n\n                const calculatedValue = window.getComputedStyle(element).getPropertyValue(styleProperty);\n                element.style.setProperty(styleProperty, `${callback(Number.parseFloat(calculatedValue))}px`);\n            };\n\n            this._applyManipulationCallback(selector, manipulationCallBack);\n        }\n\n        _saveInitialAttribute(element, styleProperty) {\n            const actualValue = element.style.getPropertyValue(styleProperty);\n\n            if (actualValue) {\n                Manipulator.setDataAttribute(element, styleProperty, actualValue);\n            }\n        }\n\n        _resetElementAttributes(selector, styleProperty) {\n            const manipulationCallBack = element => {\n                const value = Manipulator.getDataAttribute(element, styleProperty); // We only want to remove the property if the value is `null`; the value can also be zero\n\n                if (value === null) {\n                    element.style.removeProperty(styleProperty);\n                    return;\n                }\n\n                Manipulator.removeDataAttribute(element, styleProperty);\n                element.style.setProperty(styleProperty, value);\n            };\n\n            this._applyManipulationCallback(selector, manipulationCallBack);\n        }\n\n        _applyManipulationCallback(selector, callBack) {\n            if (isElement$1(selector)) {\n                callBack(selector);\n                return;\n            }\n\n            for (const sel of SelectorEngine.find(selector, this._element)) {\n                callBack(sel);\n            }\n        }\n\n    }\n\n    /**\n     * --------------------------------------------------------------------------\n     * Bootstrap (v5.2.3): util/backdrop.js\n     * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n     * --------------------------------------------------------------------------\n     */\n    /**\n     * Constants\n     */\n\n    const NAME$9 = 'backdrop';\n    const CLASS_NAME_FADE$4 = 'fade';\n    const CLASS_NAME_SHOW$5 = 'show';\n    const EVENT_MOUSEDOWN = `mousedown.bs.${NAME$9}`;\n    const Default$8 = {\n        className: 'modal-backdrop',\n        clickCallback: null,\n        isAnimated: false,\n        isVisible: true,\n        // if false, we use the backdrop helper without adding any element to the dom\n        rootElement: 'body' // give the choice to place backdrop under different elements\n\n    };\n    const DefaultType$8 = {\n        className: 'string',\n        clickCallback: '(function|null)',\n        isAnimated: 'boolean',\n        isVisible: 'boolean',\n        rootElement: '(element|string)'\n    };\n\n    /**\n     * Class definition\n     */\n\n    class Backdrop extends Config {\n        constructor(config) {\n            super();\n            this._config = this._getConfig(config);\n            this._isAppended = false;\n            this._element = null;\n        } // Getters\n\n\n        static get Default() {\n            return Default$8;\n        }\n\n        static get DefaultType() {\n            return DefaultType$8;\n        }\n\n        static get NAME() {\n            return NAME$9;\n        } // Public\n\n\n        show(callback) {\n            if (!this._config.isVisible) {\n                execute(callback);\n                return;\n            }\n\n            this._append();\n\n            const element = this._getElement();\n\n            if (this._config.isAnimated) {\n                reflow(element);\n            }\n\n            element.classList.add(CLASS_NAME_SHOW$5);\n\n            this._emulateAnimation(() => {\n                execute(callback);\n            });\n        }\n\n        hide(callback) {\n            if (!this._config.isVisible) {\n                execute(callback);\n                return;\n            }\n\n            this._getElement().classList.remove(CLASS_NAME_SHOW$5);\n\n            this._emulateAnimation(() => {\n                this.dispose();\n                execute(callback);\n            });\n        }\n\n        dispose() {\n            if (!this._isAppended) {\n                return;\n            }\n\n            EventHandler.off(this._element, EVENT_MOUSEDOWN);\n\n            this._element.remove();\n\n            this._isAppended = false;\n        } // Private\n\n\n        _getElement() {\n            if (!this._element) {\n                const backdrop = document.createElement('div');\n                backdrop.className = this._config.className;\n\n                if (this._config.isAnimated) {\n                    backdrop.classList.add(CLASS_NAME_FADE$4);\n                }\n\n                this._element = backdrop;\n            }\n\n            return this._element;\n        }\n\n        _configAfterMerge(config) {\n            // use getElement() with the default \"body\" to get a fresh Element on each instantiation\n            config.rootElement = getElement(config.rootElement);\n            return config;\n        }\n\n        _append() {\n            if (this._isAppended) {\n                return;\n            }\n\n            const element = this._getElement();\n\n            this._config.rootElement.append(element);\n\n            EventHandler.on(element, EVENT_MOUSEDOWN, () => {\n                execute(this._config.clickCallback);\n            });\n            this._isAppended = true;\n        }\n\n        _emulateAnimation(callback) {\n            executeAfterTransition(callback, this._getElement(), this._config.isAnimated);\n        }\n\n    }\n\n    /**\n     * --------------------------------------------------------------------------\n     * Bootstrap (v5.2.3): util/focustrap.js\n     * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n     * --------------------------------------------------------------------------\n     */\n    /**\n     * Constants\n     */\n\n    const NAME$8 = 'focustrap';\n    const DATA_KEY$5 = 'bs.focustrap';\n    const EVENT_KEY$5 = `.${DATA_KEY$5}`;\n    const EVENT_FOCUSIN$2 = `focusin${EVENT_KEY$5}`;\n    const EVENT_KEYDOWN_TAB = `keydown.tab${EVENT_KEY$5}`;\n    const TAB_KEY = 'Tab';\n    const TAB_NAV_FORWARD = 'forward';\n    const TAB_NAV_BACKWARD = 'backward';\n    const Default$7 = {\n        autofocus: true,\n        trapElement: null // The element to trap focus inside of\n\n    };\n    const DefaultType$7 = {\n        autofocus: 'boolean',\n        trapElement: 'element'\n    };\n\n    /**\n     * Class definition\n     */\n\n    class FocusTrap extends Config {\n        constructor(config) {\n            super();\n            this._config = this._getConfig(config);\n            this._isActive = false;\n            this._lastTabNavDirection = null;\n        } // Getters\n\n\n        static get Default() {\n            return Default$7;\n        }\n\n        static get DefaultType() {\n            return DefaultType$7;\n        }\n\n        static get NAME() {\n            return NAME$8;\n        } // Public\n\n\n        activate() {\n            if (this._isActive) {\n                return;\n            }\n\n            if (this._config.autofocus) {\n                this._config.trapElement.focus();\n            }\n\n            EventHandler.off(document, EVENT_KEY$5); // guard against infinite focus loop\n\n            EventHandler.on(document, EVENT_FOCUSIN$2, event => this._handleFocusin(event));\n            EventHandler.on(document, EVENT_KEYDOWN_TAB, event => this._handleKeydown(event));\n            this._isActive = true;\n        }\n\n        deactivate() {\n            if (!this._isActive) {\n                return;\n            }\n\n            this._isActive = false;\n            EventHandler.off(document, EVENT_KEY$5);\n        } // Private\n\n\n        _handleFocusin(event) {\n            const {\n                trapElement\n            } = this._config;\n\n            if (event.target === document || event.target === trapElement || trapElement.contains(event.target)) {\n                return;\n            }\n\n            const elements = SelectorEngine.focusableChildren(trapElement);\n\n            if (elements.length === 0) {\n                trapElement.focus();\n            } else if (this._lastTabNavDirection === TAB_NAV_BACKWARD) {\n                elements[elements.length - 1].focus();\n            } else {\n                elements[0].focus();\n            }\n        }\n\n        _handleKeydown(event) {\n            if (event.key !== TAB_KEY) {\n                return;\n            }\n\n            this._lastTabNavDirection = event.shiftKey ? TAB_NAV_BACKWARD : TAB_NAV_FORWARD;\n        }\n\n    }\n\n    /**\n     * --------------------------------------------------------------------------\n     * Bootstrap (v5.2.3): modal.js\n     * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n     * --------------------------------------------------------------------------\n     */\n    /**\n     * Constants\n     */\n\n    const NAME$7 = 'modal';\n    const DATA_KEY$4 = 'bs.modal';\n    const EVENT_KEY$4 = `.${DATA_KEY$4}`;\n    const DATA_API_KEY$2 = '.data-api';\n    const ESCAPE_KEY$1 = 'Escape';\n    const EVENT_HIDE$4 = `hide${EVENT_KEY$4}`;\n    const EVENT_HIDE_PREVENTED$1 = `hidePrevented${EVENT_KEY$4}`;\n    const EVENT_HIDDEN$4 = `hidden${EVENT_KEY$4}`;\n    const EVENT_SHOW$4 = `show${EVENT_KEY$4}`;\n    const EVENT_SHOWN$4 = `shown${EVENT_KEY$4}`;\n    const EVENT_RESIZE$1 = `resize${EVENT_KEY$4}`;\n    const EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY$4}`;\n    const EVENT_MOUSEDOWN_DISMISS = `mousedown.dismiss${EVENT_KEY$4}`;\n    const EVENT_KEYDOWN_DISMISS$1 = `keydown.dismiss${EVENT_KEY$4}`;\n    const EVENT_CLICK_DATA_API$2 = `click${EVENT_KEY$4}${DATA_API_KEY$2}`;\n    const CLASS_NAME_OPEN = 'modal-open';\n    const CLASS_NAME_FADE$3 = 'fade';\n    const CLASS_NAME_SHOW$4 = 'show';\n    const CLASS_NAME_STATIC = 'modal-static';\n    const OPEN_SELECTOR$1 = '.modal.show';\n    const SELECTOR_DIALOG = '.modal-dialog';\n    const SELECTOR_MODAL_BODY = '.modal-body';\n    const SELECTOR_DATA_TOGGLE$2 = '[data-bs-toggle=\"modal\"]';\n    const Default$6 = {\n        backdrop: true,\n        focus: true,\n        keyboard: true\n    };\n    const DefaultType$6 = {\n        backdrop: '(boolean|string)',\n        focus: 'boolean',\n        keyboard: 'boolean'\n    };\n\n    /**\n     * Class definition\n     */\n\n    class Modal extends BaseComponent {\n        constructor(element, config) {\n            super(element, config);\n            this._dialog = SelectorEngine.findOne(SELECTOR_DIALOG, this._element);\n            this._backdrop = this._initializeBackDrop();\n            this._focustrap = this._initializeFocusTrap();\n            this._isShown = false;\n            this._isTransitioning = false;\n            this._scrollBar = new ScrollBarHelper();\n\n            this._addEventListeners();\n        } // Getters\n\n\n        static get Default() {\n            return Default$6;\n        }\n\n        static get DefaultType() {\n            return DefaultType$6;\n        }\n\n        static get NAME() {\n            return NAME$7;\n        } // Public\n\n        static jQueryInterface(config, relatedTarget) {\n            return this.each(function () {\n                const data = Modal.getOrCreateInstance(this, config);\n\n                if (typeof config !== 'string') {\n                    return;\n                }\n\n                if (typeof data[config] === 'undefined') {\n                    throw new TypeError(`No method named \"${config}\"`);\n                }\n\n                data[config](relatedTarget);\n            });\n        }\n\n        toggle(relatedTarget) {\n            return this._isShown ? this.hide() : this.show(relatedTarget);\n        }\n\n        show(relatedTarget) {\n            if (this._isShown || this._isTransitioning) {\n                return;\n            }\n\n            const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$4, {\n                relatedTarget\n            });\n\n            if (showEvent.defaultPrevented) {\n                return;\n            }\n\n            this._isShown = true;\n            this._isTransitioning = true;\n\n            this._scrollBar.hide();\n\n            document.body.classList.add(CLASS_NAME_OPEN);\n\n            this._adjustDialog();\n\n            this._backdrop.show(() => this._showElement(relatedTarget));\n        }\n\n        hide() {\n            if (!this._isShown || this._isTransitioning) {\n                return;\n            }\n\n            const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$4);\n\n            if (hideEvent.defaultPrevented) {\n                return;\n            }\n\n            this._isShown = false;\n            this._isTransitioning = true;\n\n            this._focustrap.deactivate();\n\n            this._element.classList.remove(CLASS_NAME_SHOW$4);\n\n            this._queueCallback(() => this._hideModal(), this._element, this._isAnimated());\n        }\n\n        dispose() {\n            for (const htmlElement of [window, this._dialog]) {\n                EventHandler.off(htmlElement, EVENT_KEY$4);\n            }\n\n            this._backdrop.dispose();\n\n            this._focustrap.deactivate();\n\n            super.dispose();\n        }\n\n        handleUpdate() {\n            this._adjustDialog();\n        } // Private\n\n        _initializeBackDrop() {\n            return new Backdrop({\n                isVisible: Boolean(this._config.backdrop),\n                // 'static' option will be translated to true, and booleans will keep their value,\n                isAnimated: this._isAnimated()\n            });\n        }\n\n        _initializeFocusTrap() {\n            return new FocusTrap({\n                trapElement: this._element\n            });\n        }\n\n        _showElement(relatedTarget) {\n            // try to append dynamic modal\n            if (!document.body.contains(this._element)) {\n                document.body.append(this._element);\n            }\n\n            this._element.style.display = 'block';\n\n            this._element.removeAttribute('aria-hidden');\n\n            this._element.setAttribute('aria-modal', true);\n\n            this._element.setAttribute('role', 'dialog');\n\n            this._element.scrollTop = 0;\n            const modalBody = SelectorEngine.findOne(SELECTOR_MODAL_BODY, this._dialog);\n\n            if (modalBody) {\n                modalBody.scrollTop = 0;\n            }\n\n            reflow(this._element);\n\n            this._element.classList.add(CLASS_NAME_SHOW$4);\n\n            const transitionComplete = () => {\n                if (this._config.focus) {\n                    this._focustrap.activate();\n                }\n\n                this._isTransitioning = false;\n                EventHandler.trigger(this._element, EVENT_SHOWN$4, {\n                    relatedTarget\n                });\n            };\n\n            this._queueCallback(transitionComplete, this._dialog, this._isAnimated());\n        }\n\n        _addEventListeners() {\n            EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS$1, event => {\n                if (event.key !== ESCAPE_KEY$1) {\n                    return;\n                }\n\n                if (this._config.keyboard) {\n                    event.preventDefault();\n                    this.hide();\n                    return;\n                }\n\n                this._triggerBackdropTransition();\n            });\n            EventHandler.on(window, EVENT_RESIZE$1, () => {\n                if (this._isShown && !this._isTransitioning) {\n                    this._adjustDialog();\n                }\n            });\n            EventHandler.on(this._element, EVENT_MOUSEDOWN_DISMISS, event => {\n                // a bad trick to segregate clicks that may start inside dialog but end outside, and avoid listen to scrollbar clicks\n                EventHandler.one(this._element, EVENT_CLICK_DISMISS, event2 => {\n                    if (this._element !== event.target || this._element !== event2.target) {\n                        return;\n                    }\n\n                    if (this._config.backdrop === 'static') {\n                        this._triggerBackdropTransition();\n\n                        return;\n                    }\n\n                    if (this._config.backdrop) {\n                        this.hide();\n                    }\n                });\n            });\n        }\n\n        _hideModal() {\n            this._element.style.display = 'none';\n\n            this._element.setAttribute('aria-hidden', true);\n\n            this._element.removeAttribute('aria-modal');\n\n            this._element.removeAttribute('role');\n\n            this._isTransitioning = false;\n\n            this._backdrop.hide(() => {\n                document.body.classList.remove(CLASS_NAME_OPEN);\n\n                this._resetAdjustments();\n\n                this._scrollBar.reset();\n\n                EventHandler.trigger(this._element, EVENT_HIDDEN$4);\n            });\n        }\n\n        _isAnimated() {\n            return this._element.classList.contains(CLASS_NAME_FADE$3);\n        }\n\n        _triggerBackdropTransition() {\n            const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED$1);\n\n            if (hideEvent.defaultPrevented) {\n                return;\n            }\n\n            const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;\n            const initialOverflowY = this._element.style.overflowY; // return if the following background transition hasn't yet completed\n\n            if (initialOverflowY === 'hidden' || this._element.classList.contains(CLASS_NAME_STATIC)) {\n                return;\n            }\n\n            if (!isModalOverflowing) {\n                this._element.style.overflowY = 'hidden';\n            }\n\n            this._element.classList.add(CLASS_NAME_STATIC);\n\n            this._queueCallback(() => {\n                this._element.classList.remove(CLASS_NAME_STATIC);\n\n                this._queueCallback(() => {\n                    this._element.style.overflowY = initialOverflowY;\n                }, this._dialog);\n            }, this._dialog);\n\n            this._element.focus();\n        }\n\n        /**\n         * The following methods are used to handle overflowing modals\n         */\n\n\n        _adjustDialog() {\n            const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;\n\n            const scrollbarWidth = this._scrollBar.getWidth();\n\n            const isBodyOverflowing = scrollbarWidth > 0;\n\n            if (isBodyOverflowing && !isModalOverflowing) {\n                const property = isRTL() ? 'paddingLeft' : 'paddingRight';\n                this._element.style[property] = `${scrollbarWidth}px`;\n            }\n\n            if (!isBodyOverflowing && isModalOverflowing) {\n                const property = isRTL() ? 'paddingRight' : 'paddingLeft';\n                this._element.style[property] = `${scrollbarWidth}px`;\n            }\n        }\n\n        _resetAdjustments() {\n            this._element.style.paddingLeft = '';\n            this._element.style.paddingRight = '';\n        } // Static\n\n    }\n\n    /**\n     * Data API implementation\n     */\n\n\n    EventHandler.on(document, EVENT_CLICK_DATA_API$2, SELECTOR_DATA_TOGGLE$2, function (event) {\n        const target = getElementFromSelector(this);\n\n        if (['A', 'AREA'].includes(this.tagName)) {\n            event.preventDefault();\n        }\n\n        EventHandler.one(target, EVENT_SHOW$4, showEvent => {\n            if (showEvent.defaultPrevented) {\n                // only register focus restorer if modal will actually get shown\n                return;\n            }\n\n            EventHandler.one(target, EVENT_HIDDEN$4, () => {\n                if (isVisible(this)) {\n                    this.focus();\n                }\n            });\n        }); // avoid conflict when clicking modal toggler while another one is open\n\n        const alreadyOpen = SelectorEngine.findOne(OPEN_SELECTOR$1);\n\n        if (alreadyOpen) {\n            Modal.getInstance(alreadyOpen).hide();\n        }\n\n        const data = Modal.getOrCreateInstance(target);\n        data.toggle(this);\n    });\n    enableDismissTrigger(Modal);\n    /**\n     * jQuery\n     */\n\n    defineJQueryPlugin(Modal);\n\n    /**\n     * --------------------------------------------------------------------------\n     * Bootstrap (v5.2.3): offcanvas.js\n     * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n     * --------------------------------------------------------------------------\n     */\n    /**\n     * Constants\n     */\n\n    const NAME$6 = 'offcanvas';\n    const DATA_KEY$3 = 'bs.offcanvas';\n    const EVENT_KEY$3 = `.${DATA_KEY$3}`;\n    const DATA_API_KEY$1 = '.data-api';\n    const EVENT_LOAD_DATA_API$2 = `load${EVENT_KEY$3}${DATA_API_KEY$1}`;\n    const ESCAPE_KEY = 'Escape';\n    const CLASS_NAME_SHOW$3 = 'show';\n    const CLASS_NAME_SHOWING$1 = 'showing';\n    const CLASS_NAME_HIDING = 'hiding';\n    const CLASS_NAME_BACKDROP = 'offcanvas-backdrop';\n    const OPEN_SELECTOR = '.offcanvas.show';\n    const EVENT_SHOW$3 = `show${EVENT_KEY$3}`;\n    const EVENT_SHOWN$3 = `shown${EVENT_KEY$3}`;\n    const EVENT_HIDE$3 = `hide${EVENT_KEY$3}`;\n    const EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY$3}`;\n    const EVENT_HIDDEN$3 = `hidden${EVENT_KEY$3}`;\n    const EVENT_RESIZE = `resize${EVENT_KEY$3}`;\n    const EVENT_CLICK_DATA_API$1 = `click${EVENT_KEY$3}${DATA_API_KEY$1}`;\n    const EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY$3}`;\n    const SELECTOR_DATA_TOGGLE$1 = '[data-bs-toggle=\"offcanvas\"]';\n    const Default$5 = {\n        backdrop: true,\n        keyboard: true,\n        scroll: false\n    };\n    const DefaultType$5 = {\n        backdrop: '(boolean|string)',\n        keyboard: 'boolean',\n        scroll: 'boolean'\n    };\n\n    /**\n     * Class definition\n     */\n\n    class Offcanvas extends BaseComponent {\n        constructor(element, config) {\n            super(element, config);\n            this._isShown = false;\n            this._backdrop = this._initializeBackDrop();\n            this._focustrap = this._initializeFocusTrap();\n\n            this._addEventListeners();\n        } // Getters\n\n\n        static get Default() {\n            return Default$5;\n        }\n\n        static get DefaultType() {\n            return DefaultType$5;\n        }\n\n        static get NAME() {\n            return NAME$6;\n        } // Public\n\n        static jQueryInterface(config) {\n            return this.each(function () {\n                const data = Offcanvas.getOrCreateInstance(this, config);\n\n                if (typeof config !== 'string') {\n                    return;\n                }\n\n                if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n                    throw new TypeError(`No method named \"${config}\"`);\n                }\n\n                data[config](this);\n            });\n        }\n\n        toggle(relatedTarget) {\n            return this._isShown ? this.hide() : this.show(relatedTarget);\n        }\n\n        show(relatedTarget) {\n            if (this._isShown) {\n                return;\n            }\n\n            const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$3, {\n                relatedTarget\n            });\n\n            if (showEvent.defaultPrevented) {\n                return;\n            }\n\n            this._isShown = true;\n\n            this._backdrop.show();\n\n            if (!this._config.scroll) {\n                new ScrollBarHelper().hide();\n            }\n\n            this._element.setAttribute('aria-modal', true);\n\n            this._element.setAttribute('role', 'dialog');\n\n            this._element.classList.add(CLASS_NAME_SHOWING$1);\n\n            const completeCallBack = () => {\n                if (!this._config.scroll || this._config.backdrop) {\n                    this._focustrap.activate();\n                }\n\n                this._element.classList.add(CLASS_NAME_SHOW$3);\n\n                this._element.classList.remove(CLASS_NAME_SHOWING$1);\n\n                EventHandler.trigger(this._element, EVENT_SHOWN$3, {\n                    relatedTarget\n                });\n            };\n\n            this._queueCallback(completeCallBack, this._element, true);\n        }\n\n        hide() {\n            if (!this._isShown) {\n                return;\n            }\n\n            const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$3);\n\n            if (hideEvent.defaultPrevented) {\n                return;\n            }\n\n            this._focustrap.deactivate();\n\n            this._element.blur();\n\n            this._isShown = false;\n\n            this._element.classList.add(CLASS_NAME_HIDING);\n\n            this._backdrop.hide();\n\n            const completeCallback = () => {\n                this._element.classList.remove(CLASS_NAME_SHOW$3, CLASS_NAME_HIDING);\n\n                this._element.removeAttribute('aria-modal');\n\n                this._element.removeAttribute('role');\n\n                if (!this._config.scroll) {\n                    new ScrollBarHelper().reset();\n                }\n\n                EventHandler.trigger(this._element, EVENT_HIDDEN$3);\n            };\n\n            this._queueCallback(completeCallback, this._element, true);\n        }\n\n        dispose() {\n            this._backdrop.dispose();\n\n            this._focustrap.deactivate();\n\n            super.dispose();\n        } // Private\n\n        _initializeBackDrop() {\n            const clickCallback = () => {\n                if (this._config.backdrop === 'static') {\n                    EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED);\n                    return;\n                }\n\n                this.hide();\n            }; // 'static' option will be translated to true, and booleans will keep their value\n\n\n            const isVisible = Boolean(this._config.backdrop);\n            return new Backdrop({\n                className: CLASS_NAME_BACKDROP,\n                isVisible,\n                isAnimated: true,\n                rootElement: this._element.parentNode,\n                clickCallback: isVisible ? clickCallback : null\n            });\n        }\n\n        _initializeFocusTrap() {\n            return new FocusTrap({\n                trapElement: this._element\n            });\n        }\n\n        _addEventListeners() {\n            EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, event => {\n                if (event.key !== ESCAPE_KEY) {\n                    return;\n                }\n\n                if (!this._config.keyboard) {\n                    EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED);\n                    return;\n                }\n\n                this.hide();\n            });\n        } // Static\n\n    }\n\n    /**\n     * Data API implementation\n     */\n\n\n    EventHandler.on(document, EVENT_CLICK_DATA_API$1, SELECTOR_DATA_TOGGLE$1, function (event) {\n        const target = getElementFromSelector(this);\n\n        if (['A', 'AREA'].includes(this.tagName)) {\n            event.preventDefault();\n        }\n\n        if (isDisabled(this)) {\n            return;\n        }\n\n        EventHandler.one(target, EVENT_HIDDEN$3, () => {\n            // focus on trigger when it is closed\n            if (isVisible(this)) {\n                this.focus();\n            }\n        }); // avoid conflict when clicking a toggler of an offcanvas, while another is open\n\n        const alreadyOpen = SelectorEngine.findOne(OPEN_SELECTOR);\n\n        if (alreadyOpen && alreadyOpen !== target) {\n            Offcanvas.getInstance(alreadyOpen).hide();\n        }\n\n        const data = Offcanvas.getOrCreateInstance(target);\n        data.toggle(this);\n    });\n    EventHandler.on(window, EVENT_LOAD_DATA_API$2, () => {\n        for (const selector of SelectorEngine.find(OPEN_SELECTOR)) {\n            Offcanvas.getOrCreateInstance(selector).show();\n        }\n    });\n    EventHandler.on(window, EVENT_RESIZE, () => {\n        for (const element of SelectorEngine.find('[aria-modal][class*=show][class*=offcanvas-]')) {\n            if (getComputedStyle(element).position !== 'fixed') {\n                Offcanvas.getOrCreateInstance(element).hide();\n            }\n        }\n    });\n    enableDismissTrigger(Offcanvas);\n    /**\n     * jQuery\n     */\n\n    defineJQueryPlugin(Offcanvas);\n\n    /**\n     * --------------------------------------------------------------------------\n     * Bootstrap (v5.2.3): util/sanitizer.js\n     * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n     * --------------------------------------------------------------------------\n     */\n    const uriAttributes = new Set(['background', 'cite', 'href', 'itemtype', 'longdesc', 'poster', 'src', 'xlink:href']);\n    const ARIA_ATTRIBUTE_PATTERN = /^aria-[\\w-]*$/i;\n    /**\n     * A pattern that recognizes a commonly useful subset of URLs that are safe.\n     *\n     * Shout-out to Angular https://github.com/angular/angular/blob/12.2.x/packages/core/src/sanitization/url_sanitizer.ts\n     */\n\n    const SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file|sms):|[^#&/:?]*(?:[#/?]|$))/i;\n    /**\n     * A pattern that matches safe data URLs. Only matches image, video and audio types.\n     *\n     * Shout-out to Angular https://github.com/angular/angular/blob/12.2.x/packages/core/src/sanitization/url_sanitizer.ts\n     */\n\n    const DATA_URL_PATTERN = /^data:(?:image\\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\\/(?:mpeg|mp4|ogg|webm)|audio\\/(?:mp3|oga|ogg|opus));base64,[\\d+/a-z]+=*$/i;\n\n    const allowedAttribute = (attribute, allowedAttributeList) => {\n        const attributeName = attribute.nodeName.toLowerCase();\n\n        if (allowedAttributeList.includes(attributeName)) {\n            if (uriAttributes.has(attributeName)) {\n                return Boolean(SAFE_URL_PATTERN.test(attribute.nodeValue) || DATA_URL_PATTERN.test(attribute.nodeValue));\n            }\n\n            return true;\n        } // Check if a regular expression validates the attribute.\n\n\n        return allowedAttributeList.filter(attributeRegex => attributeRegex instanceof RegExp).some(regex => regex.test(attributeName));\n    };\n\n    const DefaultAllowlist = {\n        // Global attributes allowed on any supplied element below.\n        '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],\n        a: ['target', 'href', 'title', 'rel'],\n        area: [],\n        b: [],\n        br: [],\n        col: [],\n        code: [],\n        div: [],\n        em: [],\n        hr: [],\n        h1: [],\n        h2: [],\n        h3: [],\n        h4: [],\n        h5: [],\n        h6: [],\n        i: [],\n        img: ['src', 'srcset', 'alt', 'title', 'width', 'height'],\n        li: [],\n        ol: [],\n        p: [],\n        pre: [],\n        s: [],\n        small: [],\n        span: [],\n        sub: [],\n        sup: [],\n        strong: [],\n        u: [],\n        ul: []\n    };\n\n    function sanitizeHtml(unsafeHtml, allowList, sanitizeFunction) {\n        if (!unsafeHtml.length) {\n            return unsafeHtml;\n        }\n\n        if (sanitizeFunction && typeof sanitizeFunction === 'function') {\n            return sanitizeFunction(unsafeHtml);\n        }\n\n        const domParser = new window.DOMParser();\n        const createdDocument = domParser.parseFromString(unsafeHtml, 'text/html');\n        const elements = [].concat(...createdDocument.body.querySelectorAll('*'));\n\n        for (const element of elements) {\n            const elementName = element.nodeName.toLowerCase();\n\n            if (!Object.keys(allowList).includes(elementName)) {\n                element.remove();\n                continue;\n            }\n\n            const attributeList = [].concat(...element.attributes);\n            const allowedAttributes = [].concat(allowList['*'] || [], allowList[elementName] || []);\n\n            for (const attribute of attributeList) {\n                if (!allowedAttribute(attribute, allowedAttributes)) {\n                    element.removeAttribute(attribute.nodeName);\n                }\n            }\n        }\n\n        return createdDocument.body.innerHTML;\n    }\n\n    /**\n     * --------------------------------------------------------------------------\n     * Bootstrap (v5.2.3): util/template-factory.js\n     * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n     * --------------------------------------------------------------------------\n     */\n    /**\n     * Constants\n     */\n\n    const NAME$5 = 'TemplateFactory';\n    const Default$4 = {\n        allowList: DefaultAllowlist,\n        content: {},\n        // { selector : text ,  selector2 : text2 , }\n        extraClass: '',\n        html: false,\n        sanitize: true,\n        sanitizeFn: null,\n        template: '<div></div>'\n    };\n    const DefaultType$4 = {\n        allowList: 'object',\n        content: 'object',\n        extraClass: '(string|function)',\n        html: 'boolean',\n        sanitize: 'boolean',\n        sanitizeFn: '(null|function)',\n        template: 'string'\n    };\n    const DefaultContentType = {\n        entry: '(string|element|function|null)',\n        selector: '(string|element)'\n    };\n\n    /**\n     * Class definition\n     */\n\n    class TemplateFactory extends Config {\n        constructor(config) {\n            super();\n            this._config = this._getConfig(config);\n        } // Getters\n\n\n        static get Default() {\n            return Default$4;\n        }\n\n        static get DefaultType() {\n            return DefaultType$4;\n        }\n\n        static get NAME() {\n            return NAME$5;\n        } // Public\n\n\n        getContent() {\n            return Object.values(this._config.content).map(config => this._resolvePossibleFunction(config)).filter(Boolean);\n        }\n\n        hasContent() {\n            return this.getContent().length > 0;\n        }\n\n        changeContent(content) {\n            this._checkContent(content);\n\n            this._config.content = {\n                ...this._config.content,\n                ...content\n            };\n            return this;\n        }\n\n        toHtml() {\n            const templateWrapper = document.createElement('div');\n            templateWrapper.innerHTML = this._maybeSanitize(this._config.template);\n\n            for (const [selector, text] of Object.entries(this._config.content)) {\n                this._setContent(templateWrapper, text, selector);\n            }\n\n            const template = templateWrapper.children[0];\n\n            const extraClass = this._resolvePossibleFunction(this._config.extraClass);\n\n            if (extraClass) {\n                template.classList.add(...extraClass.split(' '));\n            }\n\n            return template;\n        } // Private\n\n\n        _typeCheckConfig(config) {\n            super._typeCheckConfig(config);\n\n            this._checkContent(config.content);\n        }\n\n        _checkContent(arg) {\n            for (const [selector, content] of Object.entries(arg)) {\n                super._typeCheckConfig({\n                    selector,\n                    entry: content\n                }, DefaultContentType);\n            }\n        }\n\n        _setContent(template, content, selector) {\n            const templateElement = SelectorEngine.findOne(selector, template);\n\n            if (!templateElement) {\n                return;\n            }\n\n            content = this._resolvePossibleFunction(content);\n\n            if (!content) {\n                templateElement.remove();\n                return;\n            }\n\n            if (isElement$1(content)) {\n                this._putElementInTemplate(getElement(content), templateElement);\n\n                return;\n            }\n\n            if (this._config.html) {\n                templateElement.innerHTML = this._maybeSanitize(content);\n                return;\n            }\n\n            templateElement.textContent = content;\n        }\n\n        _maybeSanitize(arg) {\n            return this._config.sanitize ? sanitizeHtml(arg, this._config.allowList, this._config.sanitizeFn) : arg;\n        }\n\n        _resolvePossibleFunction(arg) {\n            return typeof arg === 'function' ? arg(this) : arg;\n        }\n\n        _putElementInTemplate(element, templateElement) {\n            if (this._config.html) {\n                templateElement.innerHTML = '';\n                templateElement.append(element);\n                return;\n            }\n\n            templateElement.textContent = element.textContent;\n        }\n\n    }\n\n    /**\n     * --------------------------------------------------------------------------\n     * Bootstrap (v5.2.3): tooltip.js\n     * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n     * --------------------------------------------------------------------------\n     */\n    /**\n     * Constants\n     */\n\n    const NAME$4 = 'tooltip';\n    const DISALLOWED_ATTRIBUTES = new Set(['sanitize', 'allowList', 'sanitizeFn']);\n    const CLASS_NAME_FADE$2 = 'fade';\n    const CLASS_NAME_MODAL = 'modal';\n    const CLASS_NAME_SHOW$2 = 'show';\n    const SELECTOR_TOOLTIP_INNER = '.tooltip-inner';\n    const SELECTOR_MODAL = `.${CLASS_NAME_MODAL}`;\n    const EVENT_MODAL_HIDE = 'hide.bs.modal';\n    const TRIGGER_HOVER = 'hover';\n    const TRIGGER_FOCUS = 'focus';\n    const TRIGGER_CLICK = 'click';\n    const TRIGGER_MANUAL = 'manual';\n    const EVENT_HIDE$2 = 'hide';\n    const EVENT_HIDDEN$2 = 'hidden';\n    const EVENT_SHOW$2 = 'show';\n    const EVENT_SHOWN$2 = 'shown';\n    const EVENT_INSERTED = 'inserted';\n    const EVENT_CLICK$1 = 'click';\n    const EVENT_FOCUSIN$1 = 'focusin';\n    const EVENT_FOCUSOUT$1 = 'focusout';\n    const EVENT_MOUSEENTER = 'mouseenter';\n    const EVENT_MOUSELEAVE = 'mouseleave';\n    const AttachmentMap = {\n        AUTO: 'auto',\n        TOP: 'top',\n        RIGHT: isRTL() ? 'left' : 'right',\n        BOTTOM: 'bottom',\n        LEFT: isRTL() ? 'right' : 'left'\n    };\n    const Default$3 = {\n        allowList: DefaultAllowlist,\n        animation: true,\n        boundary: 'clippingParents',\n        container: false,\n        customClass: '',\n        delay: 0,\n        fallbackPlacements: ['top', 'right', 'bottom', 'left'],\n        html: false,\n        offset: [0, 0],\n        placement: 'top',\n        popperConfig: null,\n        sanitize: true,\n        sanitizeFn: null,\n        selector: false,\n        template: '<div class=\"tooltip\" role=\"tooltip\">' + '<div class=\"tooltip-arrow\"></div>' + '<div class=\"tooltip-inner\"></div>' + '</div>',\n        title: '',\n        trigger: 'hover focus'\n    };\n    const DefaultType$3 = {\n        allowList: 'object',\n        animation: 'boolean',\n        boundary: '(string|element)',\n        container: '(string|element|boolean)',\n        customClass: '(string|function)',\n        delay: '(number|object)',\n        fallbackPlacements: 'array',\n        html: 'boolean',\n        offset: '(array|string|function)',\n        placement: '(string|function)',\n        popperConfig: '(null|object|function)',\n        sanitize: 'boolean',\n        sanitizeFn: '(null|function)',\n        selector: '(string|boolean)',\n        template: 'string',\n        title: '(string|element|function)',\n        trigger: 'string'\n    };\n\n    /**\n     * Class definition\n     */\n\n    class Tooltip extends BaseComponent {\n        constructor(element, config) {\n            if (typeof Popper === 'undefined') {\n                throw new TypeError('Bootstrap\\'s tooltips require Popper (https://popper.js.org)');\n            }\n\n            super(element, config); // Private\n\n            this._isEnabled = true;\n            this._timeout = 0;\n            this._isHovered = null;\n            this._activeTrigger = {};\n            this._popper = null;\n            this._templateFactory = null;\n            this._newContent = null; // Protected\n\n            this.tip = null;\n\n            this._setListeners();\n\n            if (!this._config.selector) {\n                this._fixTitle();\n            }\n        } // Getters\n\n\n        static get Default() {\n            return Default$3;\n        }\n\n        static get DefaultType() {\n            return DefaultType$3;\n        }\n\n        static get NAME() {\n            return NAME$4;\n        } // Public\n\n        static jQueryInterface(config) {\n            return this.each(function () {\n                const data = Tooltip.getOrCreateInstance(this, config);\n\n                if (typeof config !== 'string') {\n                    return;\n                }\n\n                if (typeof data[config] === 'undefined') {\n                    throw new TypeError(`No method named \"${config}\"`);\n                }\n\n                data[config]();\n            });\n        }\n\n        enable() {\n            this._isEnabled = true;\n        }\n\n        disable() {\n            this._isEnabled = false;\n        }\n\n        toggleEnabled() {\n            this._isEnabled = !this._isEnabled;\n        }\n\n        toggle() {\n            if (!this._isEnabled) {\n                return;\n            }\n\n            this._activeTrigger.click = !this._activeTrigger.click;\n\n            if (this._isShown()) {\n                this._leave();\n\n                return;\n            }\n\n            this._enter();\n        }\n\n        dispose() {\n            clearTimeout(this._timeout);\n            EventHandler.off(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE, this._hideModalHandler);\n\n            if (this._element.getAttribute('data-bs-original-title')) {\n                this._element.setAttribute('title', this._element.getAttribute('data-bs-original-title'));\n            }\n\n            this._disposePopper();\n\n            super.dispose();\n        }\n\n        show() {\n            if (this._element.style.display === 'none') {\n                throw new Error('Please use show on visible elements');\n            }\n\n            if (!(this._isWithContent() && this._isEnabled)) {\n                return;\n            }\n\n            const showEvent = EventHandler.trigger(this._element, this.constructor.eventName(EVENT_SHOW$2));\n            const shadowRoot = findShadowRoot(this._element);\n\n            const isInTheDom = (shadowRoot || this._element.ownerDocument.documentElement).contains(this._element);\n\n            if (showEvent.defaultPrevented || !isInTheDom) {\n                return;\n            } // todo v6 remove this OR make it optional\n\n\n            this._disposePopper();\n\n            const tip = this._getTipElement();\n\n            this._element.setAttribute('aria-describedby', tip.getAttribute('id'));\n\n            const {\n                container\n            } = this._config;\n\n            if (!this._element.ownerDocument.documentElement.contains(this.tip)) {\n                container.append(tip);\n                EventHandler.trigger(this._element, this.constructor.eventName(EVENT_INSERTED));\n            }\n\n            this._popper = this._createPopper(tip);\n            tip.classList.add(CLASS_NAME_SHOW$2); // If this is a touch-enabled device we add extra\n            // empty mouseover listeners to the body's immediate children;\n            // only needed because of broken event delegation on iOS\n            // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n\n            if ('ontouchstart' in document.documentElement) {\n                for (const element of [].concat(...document.body.children)) {\n                    EventHandler.on(element, 'mouseover', noop);\n                }\n            }\n\n            const complete = () => {\n                EventHandler.trigger(this._element, this.constructor.eventName(EVENT_SHOWN$2));\n\n                if (this._isHovered === false) {\n                    this._leave();\n                }\n\n                this._isHovered = false;\n            };\n\n            this._queueCallback(complete, this.tip, this._isAnimated());\n        }\n\n        hide() {\n            if (!this._isShown()) {\n                return;\n            }\n\n            const hideEvent = EventHandler.trigger(this._element, this.constructor.eventName(EVENT_HIDE$2));\n\n            if (hideEvent.defaultPrevented) {\n                return;\n            }\n\n            const tip = this._getTipElement();\n\n            tip.classList.remove(CLASS_NAME_SHOW$2); // If this is a touch-enabled device we remove the extra\n            // empty mouseover listeners we added for iOS support\n\n            if ('ontouchstart' in document.documentElement) {\n                for (const element of [].concat(...document.body.children)) {\n                    EventHandler.off(element, 'mouseover', noop);\n                }\n            }\n\n            this._activeTrigger[TRIGGER_CLICK] = false;\n            this._activeTrigger[TRIGGER_FOCUS] = false;\n            this._activeTrigger[TRIGGER_HOVER] = false;\n            this._isHovered = null; // it is a trick to support manual triggering\n\n            const complete = () => {\n                if (this._isWithActiveTrigger()) {\n                    return;\n                }\n\n                if (!this._isHovered) {\n                    this._disposePopper();\n                }\n\n                this._element.removeAttribute('aria-describedby');\n\n                EventHandler.trigger(this._element, this.constructor.eventName(EVENT_HIDDEN$2));\n            };\n\n            this._queueCallback(complete, this.tip, this._isAnimated());\n        }\n\n        update() {\n            if (this._popper) {\n                this._popper.update();\n            }\n        } // Protected\n\n        _isWithContent() {\n            return Boolean(this._getTitle());\n        }\n\n        _getTipElement() {\n            if (!this.tip) {\n                this.tip = this._createTipElement(this._newContent || this._getContentForTemplate());\n            }\n\n            return this.tip;\n        }\n\n        _createTipElement(content) {\n            const tip = this._getTemplateFactory(content).toHtml(); // todo: remove this check on v6\n\n\n            if (!tip) {\n                return null;\n            }\n\n            tip.classList.remove(CLASS_NAME_FADE$2, CLASS_NAME_SHOW$2); // todo: on v6 the following can be achieved with CSS only\n\n            tip.classList.add(`bs-${this.constructor.NAME}-auto`);\n            const tipId = getUID(this.constructor.NAME).toString();\n            tip.setAttribute('id', tipId);\n\n            if (this._isAnimated()) {\n                tip.classList.add(CLASS_NAME_FADE$2);\n            }\n\n            return tip;\n        }\n\n        setContent(content) {\n            this._newContent = content;\n\n            if (this._isShown()) {\n                this._disposePopper();\n\n                this.show();\n            }\n        }\n\n        _getTemplateFactory(content) {\n            if (this._templateFactory) {\n                this._templateFactory.changeContent(content);\n            } else {\n                this._templateFactory = new TemplateFactory({\n                    ...this._config,\n                    // the `content` var has to be after `this._config`\n                    // to override config.content in case of popover\n                    content,\n                    extraClass: this._resolvePossibleFunction(this._config.customClass)\n                });\n            }\n\n            return this._templateFactory;\n        }\n\n        _getContentForTemplate() {\n            return {\n                [SELECTOR_TOOLTIP_INNER]: this._getTitle()\n            };\n        }\n\n        _getTitle() {\n            return this._resolvePossibleFunction(this._config.title) || this._element.getAttribute('data-bs-original-title');\n        } // Private\n\n        _initializeOnDelegatedTarget(event) {\n            return this.constructor.getOrCreateInstance(event.delegateTarget, this._getDelegateConfig());\n        }\n\n        _isAnimated() {\n            return this._config.animation || this.tip && this.tip.classList.contains(CLASS_NAME_FADE$2);\n        }\n\n        _isShown() {\n            return this.tip && this.tip.classList.contains(CLASS_NAME_SHOW$2);\n        }\n\n        _createPopper(tip) {\n            const placement = typeof this._config.placement === 'function' ? this._config.placement.call(this, tip, this._element) : this._config.placement;\n            const attachment = AttachmentMap[placement.toUpperCase()];\n            return createPopper(this._element, tip, this._getPopperConfig(attachment));\n        }\n\n        _getOffset() {\n            const {\n                offset\n            } = this._config;\n\n            if (typeof offset === 'string') {\n                return offset.split(',').map(value => Number.parseInt(value, 10));\n            }\n\n            if (typeof offset === 'function') {\n                return popperData => offset(popperData, this._element);\n            }\n\n            return offset;\n        }\n\n        _resolvePossibleFunction(arg) {\n            return typeof arg === 'function' ? arg.call(this._element) : arg;\n        }\n\n        _getPopperConfig(attachment) {\n            const defaultBsPopperConfig = {\n                placement: attachment,\n                modifiers: [{\n                    name: 'flip',\n                    options: {\n                        fallbackPlacements: this._config.fallbackPlacements\n                    }\n                }, {\n                    name: 'offset',\n                    options: {\n                        offset: this._getOffset()\n                    }\n                }, {\n                    name: 'preventOverflow',\n                    options: {\n                        boundary: this._config.boundary\n                    }\n                }, {\n                    name: 'arrow',\n                    options: {\n                        element: `.${this.constructor.NAME}-arrow`\n                    }\n                }, {\n                    name: 'preSetPlacement',\n                    enabled: true,\n                    phase: 'beforeMain',\n                    fn: data => {\n                        // Pre-set Popper's placement attribute in order to read the arrow sizes properly.\n                        // Otherwise, Popper mixes up the width and height dimensions since the initial arrow style is for top placement\n                        this._getTipElement().setAttribute('data-popper-placement', data.state.placement);\n                    }\n                }]\n            };\n            return {\n                ...defaultBsPopperConfig,\n                ...(typeof this._config.popperConfig === 'function' ? this._config.popperConfig(defaultBsPopperConfig) : this._config.popperConfig)\n            };\n        }\n\n        _setListeners() {\n            const triggers = this._config.trigger.split(' ');\n\n            for (const trigger of triggers) {\n                if (trigger === 'click') {\n                    EventHandler.on(this._element, this.constructor.eventName(EVENT_CLICK$1), this._config.selector, event => {\n                        const context = this._initializeOnDelegatedTarget(event);\n\n                        context.toggle();\n                    });\n                } else if (trigger !== TRIGGER_MANUAL) {\n                    const eventIn = trigger === TRIGGER_HOVER ? this.constructor.eventName(EVENT_MOUSEENTER) : this.constructor.eventName(EVENT_FOCUSIN$1);\n                    const eventOut = trigger === TRIGGER_HOVER ? this.constructor.eventName(EVENT_MOUSELEAVE) : this.constructor.eventName(EVENT_FOCUSOUT$1);\n                    EventHandler.on(this._element, eventIn, this._config.selector, event => {\n                        const context = this._initializeOnDelegatedTarget(event);\n\n                        context._activeTrigger[event.type === 'focusin' ? TRIGGER_FOCUS : TRIGGER_HOVER] = true;\n\n                        context._enter();\n                    });\n                    EventHandler.on(this._element, eventOut, this._config.selector, event => {\n                        const context = this._initializeOnDelegatedTarget(event);\n\n                        context._activeTrigger[event.type === 'focusout' ? TRIGGER_FOCUS : TRIGGER_HOVER] = context._element.contains(event.relatedTarget);\n\n                        context._leave();\n                    });\n                }\n            }\n\n            this._hideModalHandler = () => {\n                if (this._element) {\n                    this.hide();\n                }\n            };\n\n            EventHandler.on(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE, this._hideModalHandler);\n        }\n\n        _fixTitle() {\n            const title = this._element.getAttribute('title');\n\n            if (!title) {\n                return;\n            }\n\n            if (!this._element.getAttribute('aria-label') && !this._element.textContent.trim()) {\n                this._element.setAttribute('aria-label', title);\n            }\n\n            this._element.setAttribute('data-bs-original-title', title); // DO NOT USE IT. Is only for backwards compatibility\n\n\n            this._element.removeAttribute('title');\n        }\n\n        _enter() {\n            if (this._isShown() || this._isHovered) {\n                this._isHovered = true;\n                return;\n            }\n\n            this._isHovered = true;\n\n            this._setTimeout(() => {\n                if (this._isHovered) {\n                    this.show();\n                }\n            }, this._config.delay.show);\n        }\n\n        _leave() {\n            if (this._isWithActiveTrigger()) {\n                return;\n            }\n\n            this._isHovered = false;\n\n            this._setTimeout(() => {\n                if (!this._isHovered) {\n                    this.hide();\n                }\n            }, this._config.delay.hide);\n        }\n\n        _setTimeout(handler, timeout) {\n            clearTimeout(this._timeout);\n            this._timeout = setTimeout(handler, timeout);\n        }\n\n        _isWithActiveTrigger() {\n            return Object.values(this._activeTrigger).includes(true);\n        }\n\n        _getConfig(config) {\n            const dataAttributes = Manipulator.getDataAttributes(this._element);\n\n            for (const dataAttribute of Object.keys(dataAttributes)) {\n                if (DISALLOWED_ATTRIBUTES.has(dataAttribute)) {\n                    delete dataAttributes[dataAttribute];\n                }\n            }\n\n            config = {\n                ...dataAttributes,\n                ...(typeof config === 'object' && config ? config : {})\n            };\n            config = this._mergeConfigObj(config);\n            config = this._configAfterMerge(config);\n\n            this._typeCheckConfig(config);\n\n            return config;\n        }\n\n        _configAfterMerge(config) {\n            config.container = config.container === false ? document.body : getElement(config.container);\n\n            if (typeof config.delay === 'number') {\n                config.delay = {\n                    show: config.delay,\n                    hide: config.delay\n                };\n            }\n\n            if (typeof config.title === 'number') {\n                config.title = config.title.toString();\n            }\n\n            if (typeof config.content === 'number') {\n                config.content = config.content.toString();\n            }\n\n            return config;\n        }\n\n        _getDelegateConfig() {\n            const config = {};\n\n            for (const key in this._config) {\n                if (this.constructor.Default[key] !== this._config[key]) {\n                    config[key] = this._config[key];\n                }\n            }\n\n            config.selector = false;\n            config.trigger = 'manual'; // In the future can be replaced with:\n            // const keysWithDifferentValues = Object.entries(this._config).filter(entry => this.constructor.Default[entry[0]] !== this._config[entry[0]])\n            // `Object.fromEntries(keysWithDifferentValues)`\n\n            return config;\n        }\n\n        _disposePopper() {\n            if (this._popper) {\n                this._popper.destroy();\n\n                this._popper = null;\n            }\n\n            if (this.tip) {\n                this.tip.remove();\n                this.tip = null;\n            }\n        } // Static\n\n    }\n\n    /**\n     * jQuery\n     */\n\n\n    defineJQueryPlugin(Tooltip);\n\n    /**\n     * --------------------------------------------------------------------------\n     * Bootstrap (v5.2.3): popover.js\n     * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n     * --------------------------------------------------------------------------\n     */\n    /**\n     * Constants\n     */\n\n    const NAME$3 = 'popover';\n    const SELECTOR_TITLE = '.popover-header';\n    const SELECTOR_CONTENT = '.popover-body';\n    const Default$2 = {\n        ...Tooltip.Default,\n        content: '',\n        offset: [0, 8],\n        placement: 'right',\n        template: '<div class=\"popover\" role=\"tooltip\">' + '<div class=\"popover-arrow\"></div>' + '<h3 class=\"popover-header\"></h3>' + '<div class=\"popover-body\"></div>' + '</div>',\n        trigger: 'click'\n    };\n    const DefaultType$2 = {\n        ...Tooltip.DefaultType,\n        content: '(null|string|element|function)'\n    };\n\n    /**\n     * Class definition\n     */\n\n    class Popover extends Tooltip {\n        // Getters\n        static get Default() {\n            return Default$2;\n        }\n\n        static get DefaultType() {\n            return DefaultType$2;\n        }\n\n        static get NAME() {\n            return NAME$3;\n        } // Overrides\n\n        static jQueryInterface(config) {\n            return this.each(function () {\n                const data = Popover.getOrCreateInstance(this, config);\n\n                if (typeof config !== 'string') {\n                    return;\n                }\n\n                if (typeof data[config] === 'undefined') {\n                    throw new TypeError(`No method named \"${config}\"`);\n                }\n\n                data[config]();\n            });\n        }\n\n        _isWithContent() {\n            return this._getTitle() || this._getContent();\n        } // Private\n\n        _getContentForTemplate() {\n            return {\n                [SELECTOR_TITLE]: this._getTitle(),\n                [SELECTOR_CONTENT]: this._getContent()\n            };\n        }\n\n        _getContent() {\n            return this._resolvePossibleFunction(this._config.content);\n        } // Static\n\n    }\n\n    /**\n     * jQuery\n     */\n\n\n    defineJQueryPlugin(Popover);\n\n    /**\n     * --------------------------------------------------------------------------\n     * Bootstrap (v5.2.3): scrollspy.js\n     * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n     * --------------------------------------------------------------------------\n     */\n    /**\n     * Constants\n     */\n\n    const NAME$2 = 'scrollspy';\n    const DATA_KEY$2 = 'bs.scrollspy';\n    const EVENT_KEY$2 = `.${DATA_KEY$2}`;\n    const DATA_API_KEY = '.data-api';\n    const EVENT_ACTIVATE = `activate${EVENT_KEY$2}`;\n    const EVENT_CLICK = `click${EVENT_KEY$2}`;\n    const EVENT_LOAD_DATA_API$1 = `load${EVENT_KEY$2}${DATA_API_KEY}`;\n    const CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item';\n    const CLASS_NAME_ACTIVE$1 = 'active';\n    const SELECTOR_DATA_SPY = '[data-bs-spy=\"scroll\"]';\n    const SELECTOR_TARGET_LINKS = '[href]';\n    const SELECTOR_NAV_LIST_GROUP = '.nav, .list-group';\n    const SELECTOR_NAV_LINKS = '.nav-link';\n    const SELECTOR_NAV_ITEMS = '.nav-item';\n    const SELECTOR_LIST_ITEMS = '.list-group-item';\n    const SELECTOR_LINK_ITEMS = `${SELECTOR_NAV_LINKS}, ${SELECTOR_NAV_ITEMS} > ${SELECTOR_NAV_LINKS}, ${SELECTOR_LIST_ITEMS}`;\n    const SELECTOR_DROPDOWN = '.dropdown';\n    const SELECTOR_DROPDOWN_TOGGLE$1 = '.dropdown-toggle';\n    const Default$1 = {\n        offset: null,\n        // TODO: v6 @deprecated, keep it for backwards compatibility reasons\n        rootMargin: '0px 0px -25%',\n        smoothScroll: false,\n        target: null,\n        threshold: [0.1, 0.5, 1]\n    };\n    const DefaultType$1 = {\n        offset: '(number|null)',\n        // TODO v6 @deprecated, keep it for backwards compatibility reasons\n        rootMargin: 'string',\n        smoothScroll: 'boolean',\n        target: 'element',\n        threshold: 'array'\n    };\n\n    /**\n     * Class definition\n     */\n\n    class ScrollSpy extends BaseComponent {\n        constructor(element, config) {\n            super(element, config); // this._element is the observablesContainer and config.target the menu links wrapper\n\n            this._targetLinks = new Map();\n            this._observableSections = new Map();\n            this._rootElement = getComputedStyle(this._element).overflowY === 'visible' ? null : this._element;\n            this._activeTarget = null;\n            this._observer = null;\n            this._previousScrollData = {\n                visibleEntryTop: 0,\n                parentScrollTop: 0\n            };\n            this.refresh(); // initialize\n        } // Getters\n\n\n        static get Default() {\n            return Default$1;\n        }\n\n        static get DefaultType() {\n            return DefaultType$1;\n        }\n\n        static get NAME() {\n            return NAME$2;\n        } // Public\n\n        static jQueryInterface(config) {\n            return this.each(function () {\n                const data = ScrollSpy.getOrCreateInstance(this, config);\n\n                if (typeof config !== 'string') {\n                    return;\n                }\n\n                if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n                    throw new TypeError(`No method named \"${config}\"`);\n                }\n\n                data[config]();\n            });\n        }\n\n        refresh() {\n            this._initializeTargetsAndObservables();\n\n            this._maybeEnableSmoothScroll();\n\n            if (this._observer) {\n                this._observer.disconnect();\n            } else {\n                this._observer = this._getNewObserver();\n            }\n\n            for (const section of this._observableSections.values()) {\n                this._observer.observe(section);\n            }\n        }\n\n        dispose() {\n            this._observer.disconnect();\n\n            super.dispose();\n        } // Private\n\n        _configAfterMerge(config) {\n            // TODO: on v6 target should be given explicitly & remove the {target: 'ss-target'} case\n            config.target = getElement(config.target) || document.body; // TODO: v6 Only for backwards compatibility reasons. Use rootMargin only\n\n            config.rootMargin = config.offset ? `${config.offset}px 0px -30%` : config.rootMargin;\n\n            if (typeof config.threshold === 'string') {\n                config.threshold = config.threshold.split(',').map(value => Number.parseFloat(value));\n            }\n\n            return config;\n        }\n\n        _maybeEnableSmoothScroll() {\n            if (!this._config.smoothScroll) {\n                return;\n            } // unregister any previous listeners\n\n\n            EventHandler.off(this._config.target, EVENT_CLICK);\n            EventHandler.on(this._config.target, EVENT_CLICK, SELECTOR_TARGET_LINKS, event => {\n                const observableSection = this._observableSections.get(event.target.hash);\n\n                if (observableSection) {\n                    event.preventDefault();\n                    const root = this._rootElement || window;\n                    const height = observableSection.offsetTop - this._element.offsetTop;\n\n                    if (root.scrollTo) {\n                        root.scrollTo({\n                            top: height,\n                            behavior: 'smooth'\n                        });\n                        return;\n                    } // Chrome 60 doesn't support `scrollTo`\n\n\n                    root.scrollTop = height;\n                }\n            });\n        }\n\n        _getNewObserver() {\n            const options = {\n                root: this._rootElement,\n                threshold: this._config.threshold,\n                rootMargin: this._config.rootMargin\n            };\n            return new IntersectionObserver(entries => this._observerCallback(entries), options);\n        } // The logic of selection\n\n        _observerCallback(entries) {\n            const targetElement = entry => this._targetLinks.get(`#${entry.target.id}`);\n\n            const activate = entry => {\n                this._previousScrollData.visibleEntryTop = entry.target.offsetTop;\n\n                this._process(targetElement(entry));\n            };\n\n            const parentScrollTop = (this._rootElement || document.documentElement).scrollTop;\n            const userScrollsDown = parentScrollTop >= this._previousScrollData.parentScrollTop;\n            this._previousScrollData.parentScrollTop = parentScrollTop;\n\n            for (const entry of entries) {\n                if (!entry.isIntersecting) {\n                    this._activeTarget = null;\n\n                    this._clearActiveClass(targetElement(entry));\n\n                    continue;\n                }\n\n                const entryIsLowerThanPrevious = entry.target.offsetTop >= this._previousScrollData.visibleEntryTop; // if we are scrolling down, pick the bigger offsetTop\n\n                if (userScrollsDown && entryIsLowerThanPrevious) {\n                    activate(entry); // if parent isn't scrolled, let's keep the first visible item, breaking the iteration\n\n                    if (!parentScrollTop) {\n                        return;\n                    }\n\n                    continue;\n                } // if we are scrolling up, pick the smallest offsetTop\n\n\n                if (!userScrollsDown && !entryIsLowerThanPrevious) {\n                    activate(entry);\n                }\n            }\n        }\n\n        _initializeTargetsAndObservables() {\n            this._targetLinks = new Map();\n            this._observableSections = new Map();\n            const targetLinks = SelectorEngine.find(SELECTOR_TARGET_LINKS, this._config.target);\n\n            for (const anchor of targetLinks) {\n                // ensure that the anchor has an id and is not disabled\n                if (!anchor.hash || isDisabled(anchor)) {\n                    continue;\n                }\n\n                const observableSection = SelectorEngine.findOne(anchor.hash, this._element); // ensure that the observableSection exists & is visible\n\n                if (isVisible(observableSection)) {\n                    this._targetLinks.set(anchor.hash, anchor);\n\n                    this._observableSections.set(anchor.hash, observableSection);\n                }\n            }\n        }\n\n        _process(target) {\n            if (this._activeTarget === target) {\n                return;\n            }\n\n            this._clearActiveClass(this._config.target);\n\n            this._activeTarget = target;\n            target.classList.add(CLASS_NAME_ACTIVE$1);\n\n            this._activateParents(target);\n\n            EventHandler.trigger(this._element, EVENT_ACTIVATE, {\n                relatedTarget: target\n            });\n        }\n\n        _activateParents(target) {\n            // Activate dropdown parents\n            if (target.classList.contains(CLASS_NAME_DROPDOWN_ITEM)) {\n                SelectorEngine.findOne(SELECTOR_DROPDOWN_TOGGLE$1, target.closest(SELECTOR_DROPDOWN)).classList.add(CLASS_NAME_ACTIVE$1);\n                return;\n            }\n\n            for (const listGroup of SelectorEngine.parents(target, SELECTOR_NAV_LIST_GROUP)) {\n                // Set triggered links parents as active\n                // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor\n                for (const item of SelectorEngine.prev(listGroup, SELECTOR_LINK_ITEMS)) {\n                    item.classList.add(CLASS_NAME_ACTIVE$1);\n                }\n            }\n        }\n\n        _clearActiveClass(parent) {\n            parent.classList.remove(CLASS_NAME_ACTIVE$1);\n            const activeNodes = SelectorEngine.find(`${SELECTOR_TARGET_LINKS}.${CLASS_NAME_ACTIVE$1}`, parent);\n\n            for (const node of activeNodes) {\n                node.classList.remove(CLASS_NAME_ACTIVE$1);\n            }\n        } // Static\n\n    }\n\n    /**\n     * Data API implementation\n     */\n\n\n    EventHandler.on(window, EVENT_LOAD_DATA_API$1, () => {\n        for (const spy of SelectorEngine.find(SELECTOR_DATA_SPY)) {\n            ScrollSpy.getOrCreateInstance(spy);\n        }\n    });\n    /**\n     * jQuery\n     */\n\n    defineJQueryPlugin(ScrollSpy);\n\n    /**\n     * --------------------------------------------------------------------------\n     * Bootstrap (v5.2.3): tab.js\n     * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n     * --------------------------------------------------------------------------\n     */\n    /**\n     * Constants\n     */\n\n    const NAME$1 = 'tab';\n    const DATA_KEY$1 = 'bs.tab';\n    const EVENT_KEY$1 = `.${DATA_KEY$1}`;\n    const EVENT_HIDE$1 = `hide${EVENT_KEY$1}`;\n    const EVENT_HIDDEN$1 = `hidden${EVENT_KEY$1}`;\n    const EVENT_SHOW$1 = `show${EVENT_KEY$1}`;\n    const EVENT_SHOWN$1 = `shown${EVENT_KEY$1}`;\n    const EVENT_CLICK_DATA_API = `click${EVENT_KEY$1}`;\n    const EVENT_KEYDOWN = `keydown${EVENT_KEY$1}`;\n    const EVENT_LOAD_DATA_API = `load${EVENT_KEY$1}`;\n    const ARROW_LEFT_KEY = 'ArrowLeft';\n    const ARROW_RIGHT_KEY = 'ArrowRight';\n    const ARROW_UP_KEY = 'ArrowUp';\n    const ARROW_DOWN_KEY = 'ArrowDown';\n    const CLASS_NAME_ACTIVE = 'active';\n    const CLASS_NAME_FADE$1 = 'fade';\n    const CLASS_NAME_SHOW$1 = 'show';\n    const CLASS_DROPDOWN = 'dropdown';\n    const SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle';\n    const SELECTOR_DROPDOWN_MENU = '.dropdown-menu';\n    const NOT_SELECTOR_DROPDOWN_TOGGLE = ':not(.dropdown-toggle)';\n    const SELECTOR_TAB_PANEL = '.list-group, .nav, [role=\"tablist\"]';\n    const SELECTOR_OUTER = '.nav-item, .list-group-item';\n    const SELECTOR_INNER = `.nav-link${NOT_SELECTOR_DROPDOWN_TOGGLE}, .list-group-item${NOT_SELECTOR_DROPDOWN_TOGGLE}, [role=\"tab\"]${NOT_SELECTOR_DROPDOWN_TOGGLE}`;\n    const SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"tab\"], [data-bs-toggle=\"pill\"], [data-bs-toggle=\"list\"]'; // todo:v6: could be only `tab`\n\n    const SELECTOR_INNER_ELEM = `${SELECTOR_INNER}, ${SELECTOR_DATA_TOGGLE}`;\n    const SELECTOR_DATA_TOGGLE_ACTIVE = `.${CLASS_NAME_ACTIVE}[data-bs-toggle=\"tab\"], .${CLASS_NAME_ACTIVE}[data-bs-toggle=\"pill\"], .${CLASS_NAME_ACTIVE}[data-bs-toggle=\"list\"]`;\n\n    /**\n     * Class definition\n     */\n\n    class Tab extends BaseComponent {\n        constructor(element) {\n            super(element);\n            this._parent = this._element.closest(SELECTOR_TAB_PANEL);\n\n            if (!this._parent) {\n                return; // todo: should Throw exception on v6\n                // throw new TypeError(`${element.outerHTML} has not a valid parent ${SELECTOR_INNER_ELEM}`)\n            } // Set up initial aria attributes\n\n\n            this._setInitialAttributes(this._parent, this._getChildren());\n\n            EventHandler.on(this._element, EVENT_KEYDOWN, event => this._keydown(event));\n        } // Getters\n\n\n        static get NAME() {\n            return NAME$1;\n        } // Public\n\n        static jQueryInterface(config) {\n            return this.each(function () {\n                const data = Tab.getOrCreateInstance(this);\n\n                if (typeof config !== 'string') {\n                    return;\n                }\n\n                if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n                    throw new TypeError(`No method named \"${config}\"`);\n                }\n\n                data[config]();\n            });\n        }\n\n        show() {\n            // Shows this elem and deactivate the active sibling if exists\n            const innerElem = this._element;\n\n            if (this._elemIsActive(innerElem)) {\n                return;\n            } // Search for active tab on same parent to deactivate it\n\n\n            const active = this._getActiveElem();\n\n            const hideEvent = active ? EventHandler.trigger(active, EVENT_HIDE$1, {\n                relatedTarget: innerElem\n            }) : null;\n            const showEvent = EventHandler.trigger(innerElem, EVENT_SHOW$1, {\n                relatedTarget: active\n            });\n\n            if (showEvent.defaultPrevented || hideEvent && hideEvent.defaultPrevented) {\n                return;\n            }\n\n            this._deactivate(active, innerElem);\n\n            this._activate(innerElem, active);\n        } // Private\n\n        _activate(element, relatedElem) {\n            if (!element) {\n                return;\n            }\n\n            element.classList.add(CLASS_NAME_ACTIVE);\n\n            this._activate(getElementFromSelector(element)); // Search and activate/show the proper section\n\n\n            const complete = () => {\n                if (element.getAttribute('role') !== 'tab') {\n                    element.classList.add(CLASS_NAME_SHOW$1);\n                    return;\n                }\n\n                element.removeAttribute('tabindex');\n                element.setAttribute('aria-selected', true);\n\n                this._toggleDropDown(element, true);\n\n                EventHandler.trigger(element, EVENT_SHOWN$1, {\n                    relatedTarget: relatedElem\n                });\n            };\n\n            this._queueCallback(complete, element, element.classList.contains(CLASS_NAME_FADE$1));\n        }\n\n        _deactivate(element, relatedElem) {\n            if (!element) {\n                return;\n            }\n\n            element.classList.remove(CLASS_NAME_ACTIVE);\n            element.blur();\n\n            this._deactivate(getElementFromSelector(element)); // Search and deactivate the shown section too\n\n\n            const complete = () => {\n                if (element.getAttribute('role') !== 'tab') {\n                    element.classList.remove(CLASS_NAME_SHOW$1);\n                    return;\n                }\n\n                element.setAttribute('aria-selected', false);\n                element.setAttribute('tabindex', '-1');\n\n                this._toggleDropDown(element, false);\n\n                EventHandler.trigger(element, EVENT_HIDDEN$1, {\n                    relatedTarget: relatedElem\n                });\n            };\n\n            this._queueCallback(complete, element, element.classList.contains(CLASS_NAME_FADE$1));\n        }\n\n        _keydown(event) {\n            if (![ARROW_LEFT_KEY, ARROW_RIGHT_KEY, ARROW_UP_KEY, ARROW_DOWN_KEY].includes(event.key)) {\n                return;\n            }\n\n            event.stopPropagation(); // stopPropagation/preventDefault both added to support up/down keys without scrolling the page\n\n            event.preventDefault();\n            const isNext = [ARROW_RIGHT_KEY, ARROW_DOWN_KEY].includes(event.key);\n            const nextActiveElement = getNextActiveElement(this._getChildren().filter(element => !isDisabled(element)), event.target, isNext, true);\n\n            if (nextActiveElement) {\n                nextActiveElement.focus({\n                    preventScroll: true\n                });\n                Tab.getOrCreateInstance(nextActiveElement).show();\n            }\n        }\n\n        _getChildren() {\n            // collection of inner elements\n            return SelectorEngine.find(SELECTOR_INNER_ELEM, this._parent);\n        }\n\n        _getActiveElem() {\n            return this._getChildren().find(child => this._elemIsActive(child)) || null;\n        }\n\n        _setInitialAttributes(parent, children) {\n            this._setAttributeIfNotExists(parent, 'role', 'tablist');\n\n            for (const child of children) {\n                this._setInitialAttributesOnChild(child);\n            }\n        }\n\n        _setInitialAttributesOnChild(child) {\n            child = this._getInnerElement(child);\n\n            const isActive = this._elemIsActive(child);\n\n            const outerElem = this._getOuterElement(child);\n\n            child.setAttribute('aria-selected', isActive);\n\n            if (outerElem !== child) {\n                this._setAttributeIfNotExists(outerElem, 'role', 'presentation');\n            }\n\n            if (!isActive) {\n                child.setAttribute('tabindex', '-1');\n            }\n\n            this._setAttributeIfNotExists(child, 'role', 'tab'); // set attributes to the related panel too\n\n\n            this._setInitialAttributesOnTargetPanel(child);\n        }\n\n        _setInitialAttributesOnTargetPanel(child) {\n            const target = getElementFromSelector(child);\n\n            if (!target) {\n                return;\n            }\n\n            this._setAttributeIfNotExists(target, 'role', 'tabpanel');\n\n            if (child.id) {\n                this._setAttributeIfNotExists(target, 'aria-labelledby', `#${child.id}`);\n            }\n        }\n\n        _toggleDropDown(element, open) {\n            const outerElem = this._getOuterElement(element);\n\n            if (!outerElem.classList.contains(CLASS_DROPDOWN)) {\n                return;\n            }\n\n            const toggle = (selector, className) => {\n                const element = SelectorEngine.findOne(selector, outerElem);\n\n                if (element) {\n                    element.classList.toggle(className, open);\n                }\n            };\n\n            toggle(SELECTOR_DROPDOWN_TOGGLE, CLASS_NAME_ACTIVE);\n            toggle(SELECTOR_DROPDOWN_MENU, CLASS_NAME_SHOW$1);\n            outerElem.setAttribute('aria-expanded', open);\n        }\n\n        _setAttributeIfNotExists(element, attribute, value) {\n            if (!element.hasAttribute(attribute)) {\n                element.setAttribute(attribute, value);\n            }\n        }\n\n        _elemIsActive(elem) {\n            return elem.classList.contains(CLASS_NAME_ACTIVE);\n        } // Try to get the inner element (usually the .nav-link)\n\n        _getInnerElement(elem) {\n            return elem.matches(SELECTOR_INNER_ELEM) ? elem : SelectorEngine.findOne(SELECTOR_INNER_ELEM, elem);\n        } // Try to get the outer element (usually the .nav-item)\n\n        _getOuterElement(elem) {\n            return elem.closest(SELECTOR_OUTER) || elem;\n        } // Static\n\n    }\n\n    /**\n     * Data API implementation\n     */\n\n\n    EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n        if (['A', 'AREA'].includes(this.tagName)) {\n            event.preventDefault();\n        }\n\n        if (isDisabled(this)) {\n            return;\n        }\n\n        Tab.getOrCreateInstance(this).show();\n    });\n    /**\n     * Initialize on focus\n     */\n\n    EventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n        for (const element of SelectorEngine.find(SELECTOR_DATA_TOGGLE_ACTIVE)) {\n            Tab.getOrCreateInstance(element);\n        }\n    });\n    /**\n     * jQuery\n     */\n\n    defineJQueryPlugin(Tab);\n\n    /**\n     * --------------------------------------------------------------------------\n     * Bootstrap (v5.2.3): toast.js\n     * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n     * --------------------------------------------------------------------------\n     */\n    /**\n     * Constants\n     */\n\n    const NAME = 'toast';\n    const DATA_KEY = 'bs.toast';\n    const EVENT_KEY = `.${DATA_KEY}`;\n    const EVENT_MOUSEOVER = `mouseover${EVENT_KEY}`;\n    const EVENT_MOUSEOUT = `mouseout${EVENT_KEY}`;\n    const EVENT_FOCUSIN = `focusin${EVENT_KEY}`;\n    const EVENT_FOCUSOUT = `focusout${EVENT_KEY}`;\n    const EVENT_HIDE = `hide${EVENT_KEY}`;\n    const EVENT_HIDDEN = `hidden${EVENT_KEY}`;\n    const EVENT_SHOW = `show${EVENT_KEY}`;\n    const EVENT_SHOWN = `shown${EVENT_KEY}`;\n    const CLASS_NAME_FADE = 'fade';\n    const CLASS_NAME_HIDE = 'hide'; // @deprecated - kept here only for backwards compatibility\n\n    const CLASS_NAME_SHOW = 'show';\n    const CLASS_NAME_SHOWING = 'showing';\n    const DefaultType = {\n        animation: 'boolean',\n        autohide: 'boolean',\n        delay: 'number'\n    };\n    const Default = {\n        animation: true,\n        autohide: true,\n        delay: 5000\n    };\n\n    /**\n     * Class definition\n     */\n\n    class Toast extends BaseComponent {\n        constructor(element, config) {\n            super(element, config);\n            this._timeout = null;\n            this._hasMouseInteraction = false;\n            this._hasKeyboardInteraction = false;\n\n            this._setListeners();\n        } // Getters\n\n\n        static get Default() {\n            return Default;\n        }\n\n        static get DefaultType() {\n            return DefaultType;\n        }\n\n        static get NAME() {\n            return NAME;\n        } // Public\n\n        static jQueryInterface(config) {\n            return this.each(function () {\n                const data = Toast.getOrCreateInstance(this, config);\n\n                if (typeof config === 'string') {\n                    if (typeof data[config] === 'undefined') {\n                        throw new TypeError(`No method named \"${config}\"`);\n                    }\n\n                    data[config](this);\n                }\n            });\n        }\n\n        show() {\n            const showEvent = EventHandler.trigger(this._element, EVENT_SHOW);\n\n            if (showEvent.defaultPrevented) {\n                return;\n            }\n\n            this._clearTimeout();\n\n            if (this._config.animation) {\n                this._element.classList.add(CLASS_NAME_FADE);\n            }\n\n            const complete = () => {\n                this._element.classList.remove(CLASS_NAME_SHOWING);\n\n                EventHandler.trigger(this._element, EVENT_SHOWN);\n\n                this._maybeScheduleHide();\n            };\n\n            this._element.classList.remove(CLASS_NAME_HIDE); // @deprecated\n\n\n            reflow(this._element);\n\n            this._element.classList.add(CLASS_NAME_SHOW, CLASS_NAME_SHOWING);\n\n            this._queueCallback(complete, this._element, this._config.animation);\n        }\n\n        hide() {\n            if (!this.isShown()) {\n                return;\n            }\n\n            const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE);\n\n            if (hideEvent.defaultPrevented) {\n                return;\n            }\n\n            const complete = () => {\n                this._element.classList.add(CLASS_NAME_HIDE); // @deprecated\n\n\n                this._element.classList.remove(CLASS_NAME_SHOWING, CLASS_NAME_SHOW);\n\n                EventHandler.trigger(this._element, EVENT_HIDDEN);\n            };\n\n            this._element.classList.add(CLASS_NAME_SHOWING);\n\n            this._queueCallback(complete, this._element, this._config.animation);\n        }\n\n        dispose() {\n            this._clearTimeout();\n\n            if (this.isShown()) {\n                this._element.classList.remove(CLASS_NAME_SHOW);\n            }\n\n            super.dispose();\n        }\n\n        isShown() {\n            return this._element.classList.contains(CLASS_NAME_SHOW);\n        } // Private\n\n        _maybeScheduleHide() {\n            if (!this._config.autohide) {\n                return;\n            }\n\n            if (this._hasMouseInteraction || this._hasKeyboardInteraction) {\n                return;\n            }\n\n            this._timeout = setTimeout(() => {\n                this.hide();\n            }, this._config.delay);\n        }\n\n        _onInteraction(event, isInteracting) {\n            switch (event.type) {\n                case 'mouseover':\n                case 'mouseout': {\n                    this._hasMouseInteraction = isInteracting;\n                    break;\n                }\n\n                case 'focusin':\n                case 'focusout': {\n                    this._hasKeyboardInteraction = isInteracting;\n                    break;\n                }\n            }\n\n            if (isInteracting) {\n                this._clearTimeout();\n\n                return;\n            }\n\n            const nextElement = event.relatedTarget;\n\n            if (this._element === nextElement || this._element.contains(nextElement)) {\n                return;\n            }\n\n            this._maybeScheduleHide();\n        }\n\n        _setListeners() {\n            EventHandler.on(this._element, EVENT_MOUSEOVER, event => this._onInteraction(event, true));\n            EventHandler.on(this._element, EVENT_MOUSEOUT, event => this._onInteraction(event, false));\n            EventHandler.on(this._element, EVENT_FOCUSIN, event => this._onInteraction(event, true));\n            EventHandler.on(this._element, EVENT_FOCUSOUT, event => this._onInteraction(event, false));\n        }\n\n        _clearTimeout() {\n            clearTimeout(this._timeout);\n            this._timeout = null;\n        } // Static\n\n    }\n\n    /**\n     * Data API implementation\n     */\n\n\n    enableDismissTrigger(Toast);\n    /**\n     * jQuery\n     */\n\n    defineJQueryPlugin(Toast);\n\n    /**\n     * --------------------------------------------------------------------------\n     * Bootstrap (v5.2.3): index.umd.js\n     * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n     * --------------------------------------------------------------------------\n     */\n    const index_umd = {\n        Alert,\n        Button,\n        Carousel,\n        Collapse,\n        Dropdown,\n        Modal,\n        Offcanvas,\n        Popover,\n        ScrollSpy,\n        Tab,\n        Toast,\n        Tooltip\n    };\n\n    return index_umd;\n\n}));\n//# sourceMappingURL=bootstrap.bundle.js.map\n"
  },
  {
    "path": "src/main/resources/web/js/bootstrap.esm.js",
    "content": "/*!\n  * Bootstrap v5.2.3 (https://getbootstrap.com/)\n  * Copyright 2011-2022 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)\n  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n  */\nimport * as Popper from '@popperjs/core';\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.3): util/index.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\nconst MAX_UID = 1000000;\nconst MILLISECONDS_MULTIPLIER = 1000;\nconst TRANSITION_END = 'transitionend'; // Shout-out Angus Croll (https://goo.gl/pxwQGp)\n\nconst toType = object => {\n    if (object === null || object === undefined) {\n        return `${object}`;\n    }\n\n    return Object.prototype.toString.call(object).match(/\\s([a-z]+)/i)[1].toLowerCase();\n};\n/**\n * Public Util API\n */\n\n\nconst getUID = prefix => {\n    do {\n        prefix += Math.floor(Math.random() * MAX_UID);\n    } while (document.getElementById(prefix));\n\n    return prefix;\n};\n\nconst getSelector = element => {\n    let selector = element.getAttribute('data-bs-target');\n\n    if (!selector || selector === '#') {\n        let hrefAttribute = element.getAttribute('href'); // The only valid content that could double as a selector are IDs or classes,\n        // so everything starting with `#` or `.`. If a \"real\" URL is used as the selector,\n        // `document.querySelector` will rightfully complain it is invalid.\n        // See https://github.com/twbs/bootstrap/issues/32273\n\n        if (!hrefAttribute || !hrefAttribute.includes('#') && !hrefAttribute.startsWith('.')) {\n            return null;\n        } // Just in case some CMS puts out a full URL with the anchor appended\n\n\n        if (hrefAttribute.includes('#') && !hrefAttribute.startsWith('#')) {\n            hrefAttribute = `#${hrefAttribute.split('#')[1]}`;\n        }\n\n        selector = hrefAttribute && hrefAttribute !== '#' ? hrefAttribute.trim() : null;\n    }\n\n    return selector;\n};\n\nconst getSelectorFromElement = element => {\n    const selector = getSelector(element);\n\n    if (selector) {\n        return document.querySelector(selector) ? selector : null;\n    }\n\n    return null;\n};\n\nconst getElementFromSelector = element => {\n    const selector = getSelector(element);\n    return selector ? document.querySelector(selector) : null;\n};\n\nconst getTransitionDurationFromElement = element => {\n    if (!element) {\n        return 0;\n    } // Get transition-duration of the element\n\n\n    let {\n        transitionDuration,\n        transitionDelay\n    } = window.getComputedStyle(element);\n    const floatTransitionDuration = Number.parseFloat(transitionDuration);\n    const floatTransitionDelay = Number.parseFloat(transitionDelay); // Return 0 if element or transition duration is not found\n\n    if (!floatTransitionDuration && !floatTransitionDelay) {\n        return 0;\n    } // If multiple durations are defined, take the first\n\n\n    transitionDuration = transitionDuration.split(',')[0];\n    transitionDelay = transitionDelay.split(',')[0];\n    return (Number.parseFloat(transitionDuration) + Number.parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER;\n};\n\nconst triggerTransitionEnd = element => {\n    element.dispatchEvent(new Event(TRANSITION_END));\n};\n\nconst isElement = object => {\n    if (!object || typeof object !== 'object') {\n        return false;\n    }\n\n    if (typeof object.jquery !== 'undefined') {\n        object = object[0];\n    }\n\n    return typeof object.nodeType !== 'undefined';\n};\n\nconst getElement = object => {\n    // it's a jQuery object or a node element\n    if (isElement(object)) {\n        return object.jquery ? object[0] : object;\n    }\n\n    if (typeof object === 'string' && object.length > 0) {\n        return document.querySelector(object);\n    }\n\n    return null;\n};\n\nconst isVisible = element => {\n    if (!isElement(element) || element.getClientRects().length === 0) {\n        return false;\n    }\n\n    const elementIsVisible = getComputedStyle(element).getPropertyValue('visibility') === 'visible'; // Handle `details` element as its content may falsie appear visible when it is closed\n\n    const closedDetails = element.closest('details:not([open])');\n\n    if (!closedDetails) {\n        return elementIsVisible;\n    }\n\n    if (closedDetails !== element) {\n        const summary = element.closest('summary');\n\n        if (summary && summary.parentNode !== closedDetails) {\n            return false;\n        }\n\n        if (summary === null) {\n            return false;\n        }\n    }\n\n    return elementIsVisible;\n};\n\nconst isDisabled = element => {\n    if (!element || element.nodeType !== Node.ELEMENT_NODE) {\n        return true;\n    }\n\n    if (element.classList.contains('disabled')) {\n        return true;\n    }\n\n    if (typeof element.disabled !== 'undefined') {\n        return element.disabled;\n    }\n\n    return element.hasAttribute('disabled') && element.getAttribute('disabled') !== 'false';\n};\n\nconst findShadowRoot = element => {\n    if (!document.documentElement.attachShadow) {\n        return null;\n    } // Can find the shadow root otherwise it'll return the document\n\n\n    if (typeof element.getRootNode === 'function') {\n        const root = element.getRootNode();\n        return root instanceof ShadowRoot ? root : null;\n    }\n\n    if (element instanceof ShadowRoot) {\n        return element;\n    } // when we don't find a shadow root\n\n\n    if (!element.parentNode) {\n        return null;\n    }\n\n    return findShadowRoot(element.parentNode);\n};\n\nconst noop = () => {\n};\n/**\n * Trick to restart an element's animation\n *\n * @param {HTMLElement} element\n * @return void\n *\n * @see https://www.charistheo.io/blog/2021/02/restart-a-css-animation-with-javascript/#restarting-a-css-animation\n */\n\n\nconst reflow = element => {\n    element.offsetHeight; // eslint-disable-line no-unused-expressions\n};\n\nconst getjQuery = () => {\n    if (window.jQuery && !document.body.hasAttribute('data-bs-no-jquery')) {\n        return window.jQuery;\n    }\n\n    return null;\n};\n\nconst DOMContentLoadedCallbacks = [];\n\nconst onDOMContentLoaded = callback => {\n    if (document.readyState === 'loading') {\n        // add listener on the first call when the document is in loading state\n        if (!DOMContentLoadedCallbacks.length) {\n            document.addEventListener('DOMContentLoaded', () => {\n                for (const callback of DOMContentLoadedCallbacks) {\n                    callback();\n                }\n            });\n        }\n\n        DOMContentLoadedCallbacks.push(callback);\n    } else {\n        callback();\n    }\n};\n\nconst isRTL = () => document.documentElement.dir === 'rtl';\n\nconst defineJQueryPlugin = plugin => {\n    onDOMContentLoaded(() => {\n        const $ = getjQuery();\n        /* istanbul ignore if */\n\n        if ($) {\n            const name = plugin.NAME;\n            const JQUERY_NO_CONFLICT = $.fn[name];\n            $.fn[name] = plugin.jQueryInterface;\n            $.fn[name].Constructor = plugin;\n\n            $.fn[name].noConflict = () => {\n                $.fn[name] = JQUERY_NO_CONFLICT;\n                return plugin.jQueryInterface;\n            };\n        }\n    });\n};\n\nconst execute = callback => {\n    if (typeof callback === 'function') {\n        callback();\n    }\n};\n\nconst executeAfterTransition = (callback, transitionElement, waitForTransition = true) => {\n    if (!waitForTransition) {\n        execute(callback);\n        return;\n    }\n\n    const durationPadding = 5;\n    const emulatedDuration = getTransitionDurationFromElement(transitionElement) + durationPadding;\n    let called = false;\n\n    const handler = ({\n                         target\n                     }) => {\n        if (target !== transitionElement) {\n            return;\n        }\n\n        called = true;\n        transitionElement.removeEventListener(TRANSITION_END, handler);\n        execute(callback);\n    };\n\n    transitionElement.addEventListener(TRANSITION_END, handler);\n    setTimeout(() => {\n        if (!called) {\n            triggerTransitionEnd(transitionElement);\n        }\n    }, emulatedDuration);\n};\n/**\n * Return the previous/next element of a list.\n *\n * @param {array} list    The list of elements\n * @param activeElement   The active element\n * @param shouldGetNext   Choose to get next or previous element\n * @param isCycleAllowed\n * @return {Element|elem} The proper element\n */\n\n\nconst getNextActiveElement = (list, activeElement, shouldGetNext, isCycleAllowed) => {\n    const listLength = list.length;\n    let index = list.indexOf(activeElement); // if the element does not exist in the list return an element\n    // depending on the direction and if cycle is allowed\n\n    if (index === -1) {\n        return !shouldGetNext && isCycleAllowed ? list[listLength - 1] : list[0];\n    }\n\n    index += shouldGetNext ? 1 : -1;\n\n    if (isCycleAllowed) {\n        index = (index + listLength) % listLength;\n    }\n\n    return list[Math.max(0, Math.min(index, listLength - 1))];\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.3): dom/event-handler.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * Constants\n */\n\nconst namespaceRegex = /[^.]*(?=\\..*)\\.|.*/;\nconst stripNameRegex = /\\..*/;\nconst stripUidRegex = /::\\d+$/;\nconst eventRegistry = {}; // Events storage\n\nlet uidEvent = 1;\nconst customEvents = {\n    mouseenter: 'mouseover',\n    mouseleave: 'mouseout'\n};\nconst nativeEvents = new Set(['click', 'dblclick', 'mouseup', 'mousedown', 'contextmenu', 'mousewheel', 'DOMMouseScroll', 'mouseover', 'mouseout', 'mousemove', 'selectstart', 'selectend', 'keydown', 'keypress', 'keyup', 'orientationchange', 'touchstart', 'touchmove', 'touchend', 'touchcancel', 'pointerdown', 'pointermove', 'pointerup', 'pointerleave', 'pointercancel', 'gesturestart', 'gesturechange', 'gestureend', 'focus', 'blur', 'change', 'reset', 'select', 'submit', 'focusin', 'focusout', 'load', 'unload', 'beforeunload', 'resize', 'move', 'DOMContentLoaded', 'readystatechange', 'error', 'abort', 'scroll']);\n\n/**\n * Private methods\n */\n\nfunction makeEventUid(element, uid) {\n    return uid && `${uid}::${uidEvent++}` || element.uidEvent || uidEvent++;\n}\n\nfunction getElementEvents(element) {\n    const uid = makeEventUid(element);\n    element.uidEvent = uid;\n    eventRegistry[uid] = eventRegistry[uid] || {};\n    return eventRegistry[uid];\n}\n\nfunction bootstrapHandler(element, fn) {\n    return function handler(event) {\n        hydrateObj(event, {\n            delegateTarget: element\n        });\n\n        if (handler.oneOff) {\n            EventHandler.off(element, event.type, fn);\n        }\n\n        return fn.apply(element, [event]);\n    };\n}\n\nfunction bootstrapDelegationHandler(element, selector, fn) {\n    return function handler(event) {\n        const domElements = element.querySelectorAll(selector);\n\n        for (let {\n            target\n        } = event; target && target !== this; target = target.parentNode) {\n            for (const domElement of domElements) {\n                if (domElement !== target) {\n                    continue;\n                }\n\n                hydrateObj(event, {\n                    delegateTarget: target\n                });\n\n                if (handler.oneOff) {\n                    EventHandler.off(element, event.type, selector, fn);\n                }\n\n                return fn.apply(target, [event]);\n            }\n        }\n    };\n}\n\nfunction findHandler(events, callable, delegationSelector = null) {\n    return Object.values(events).find(event => event.callable === callable && event.delegationSelector === delegationSelector);\n}\n\nfunction normalizeParameters(originalTypeEvent, handler, delegationFunction) {\n    const isDelegated = typeof handler === 'string'; // todo: tooltip passes `false` instead of selector, so we need to check\n\n    const callable = isDelegated ? delegationFunction : handler || delegationFunction;\n    let typeEvent = getTypeEvent(originalTypeEvent);\n\n    if (!nativeEvents.has(typeEvent)) {\n        typeEvent = originalTypeEvent;\n    }\n\n    return [isDelegated, callable, typeEvent];\n}\n\nfunction addHandler(element, originalTypeEvent, handler, delegationFunction, oneOff) {\n    if (typeof originalTypeEvent !== 'string' || !element) {\n        return;\n    }\n\n    let [isDelegated, callable, typeEvent] = normalizeParameters(originalTypeEvent, handler, delegationFunction); // in case of mouseenter or mouseleave wrap the handler within a function that checks for its DOM position\n    // this prevents the handler from being dispatched the same way as mouseover or mouseout does\n\n    if (originalTypeEvent in customEvents) {\n        const wrapFunction = fn => {\n            return function (event) {\n                if (!event.relatedTarget || event.relatedTarget !== event.delegateTarget && !event.delegateTarget.contains(event.relatedTarget)) {\n                    return fn.call(this, event);\n                }\n            };\n        };\n\n        callable = wrapFunction(callable);\n    }\n\n    const events = getElementEvents(element);\n    const handlers = events[typeEvent] || (events[typeEvent] = {});\n    const previousFunction = findHandler(handlers, callable, isDelegated ? handler : null);\n\n    if (previousFunction) {\n        previousFunction.oneOff = previousFunction.oneOff && oneOff;\n        return;\n    }\n\n    const uid = makeEventUid(callable, originalTypeEvent.replace(namespaceRegex, ''));\n    const fn = isDelegated ? bootstrapDelegationHandler(element, handler, callable) : bootstrapHandler(element, callable);\n    fn.delegationSelector = isDelegated ? handler : null;\n    fn.callable = callable;\n    fn.oneOff = oneOff;\n    fn.uidEvent = uid;\n    handlers[uid] = fn;\n    element.addEventListener(typeEvent, fn, isDelegated);\n}\n\nfunction removeHandler(element, events, typeEvent, handler, delegationSelector) {\n    const fn = findHandler(events[typeEvent], handler, delegationSelector);\n\n    if (!fn) {\n        return;\n    }\n\n    element.removeEventListener(typeEvent, fn, Boolean(delegationSelector));\n    delete events[typeEvent][fn.uidEvent];\n}\n\nfunction removeNamespacedHandlers(element, events, typeEvent, namespace) {\n    const storeElementEvent = events[typeEvent] || {};\n\n    for (const handlerKey of Object.keys(storeElementEvent)) {\n        if (handlerKey.includes(namespace)) {\n            const event = storeElementEvent[handlerKey];\n            removeHandler(element, events, typeEvent, event.callable, event.delegationSelector);\n        }\n    }\n}\n\nfunction getTypeEvent(event) {\n    // allow to get the native events from namespaced events ('click.bs.button' --> 'click')\n    event = event.replace(stripNameRegex, '');\n    return customEvents[event] || event;\n}\n\nconst EventHandler = {\n    on(element, event, handler, delegationFunction) {\n        addHandler(element, event, handler, delegationFunction, false);\n    },\n\n    one(element, event, handler, delegationFunction) {\n        addHandler(element, event, handler, delegationFunction, true);\n    },\n\n    off(element, originalTypeEvent, handler, delegationFunction) {\n        if (typeof originalTypeEvent !== 'string' || !element) {\n            return;\n        }\n\n        const [isDelegated, callable, typeEvent] = normalizeParameters(originalTypeEvent, handler, delegationFunction);\n        const inNamespace = typeEvent !== originalTypeEvent;\n        const events = getElementEvents(element);\n        const storeElementEvent = events[typeEvent] || {};\n        const isNamespace = originalTypeEvent.startsWith('.');\n\n        if (typeof callable !== 'undefined') {\n            // Simplest case: handler is passed, remove that listener ONLY.\n            if (!Object.keys(storeElementEvent).length) {\n                return;\n            }\n\n            removeHandler(element, events, typeEvent, callable, isDelegated ? handler : null);\n            return;\n        }\n\n        if (isNamespace) {\n            for (const elementEvent of Object.keys(events)) {\n                removeNamespacedHandlers(element, events, elementEvent, originalTypeEvent.slice(1));\n            }\n        }\n\n        for (const keyHandlers of Object.keys(storeElementEvent)) {\n            const handlerKey = keyHandlers.replace(stripUidRegex, '');\n\n            if (!inNamespace || originalTypeEvent.includes(handlerKey)) {\n                const event = storeElementEvent[keyHandlers];\n                removeHandler(element, events, typeEvent, event.callable, event.delegationSelector);\n            }\n        }\n    },\n\n    trigger(element, event, args) {\n        if (typeof event !== 'string' || !element) {\n            return null;\n        }\n\n        const $ = getjQuery();\n        const typeEvent = getTypeEvent(event);\n        const inNamespace = event !== typeEvent;\n        let jQueryEvent = null;\n        let bubbles = true;\n        let nativeDispatch = true;\n        let defaultPrevented = false;\n\n        if (inNamespace && $) {\n            jQueryEvent = $.Event(event, args);\n            $(element).trigger(jQueryEvent);\n            bubbles = !jQueryEvent.isPropagationStopped();\n            nativeDispatch = !jQueryEvent.isImmediatePropagationStopped();\n            defaultPrevented = jQueryEvent.isDefaultPrevented();\n        }\n\n        let evt = new Event(event, {\n            bubbles,\n            cancelable: true\n        });\n        evt = hydrateObj(evt, args);\n\n        if (defaultPrevented) {\n            evt.preventDefault();\n        }\n\n        if (nativeDispatch) {\n            element.dispatchEvent(evt);\n        }\n\n        if (evt.defaultPrevented && jQueryEvent) {\n            jQueryEvent.preventDefault();\n        }\n\n        return evt;\n    }\n\n};\n\nfunction hydrateObj(obj, meta) {\n    for (const [key, value] of Object.entries(meta || {})) {\n        try {\n            obj[key] = value;\n        } catch (_unused) {\n            Object.defineProperty(obj, key, {\n                configurable: true,\n\n                get() {\n                    return value;\n                }\n\n            });\n        }\n    }\n\n    return obj;\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.3): dom/data.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n/**\n * Constants\n */\nconst elementMap = new Map();\nconst Data = {\n    set(element, key, instance) {\n        if (!elementMap.has(element)) {\n            elementMap.set(element, new Map());\n        }\n\n        const instanceMap = elementMap.get(element); // make it clear we only want one instance per element\n        // can be removed later when multiple key/instances are fine to be used\n\n        if (!instanceMap.has(key) && instanceMap.size !== 0) {\n            // eslint-disable-next-line no-console\n            console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(instanceMap.keys())[0]}.`);\n            return;\n        }\n\n        instanceMap.set(key, instance);\n    },\n\n    get(element, key) {\n        if (elementMap.has(element)) {\n            return elementMap.get(element).get(key) || null;\n        }\n\n        return null;\n    },\n\n    remove(element, key) {\n        if (!elementMap.has(element)) {\n            return;\n        }\n\n        const instanceMap = elementMap.get(element);\n        instanceMap.delete(key); // free up element references if there are no instances left for an element\n\n        if (instanceMap.size === 0) {\n            elementMap.delete(element);\n        }\n    }\n\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.3): dom/manipulator.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\nfunction normalizeData(value) {\n    if (value === 'true') {\n        return true;\n    }\n\n    if (value === 'false') {\n        return false;\n    }\n\n    if (value === Number(value).toString()) {\n        return Number(value);\n    }\n\n    if (value === '' || value === 'null') {\n        return null;\n    }\n\n    if (typeof value !== 'string') {\n        return value;\n    }\n\n    try {\n        return JSON.parse(decodeURIComponent(value));\n    } catch (_unused) {\n        return value;\n    }\n}\n\nfunction normalizeDataKey(key) {\n    return key.replace(/[A-Z]/g, chr => `-${chr.toLowerCase()}`);\n}\n\nconst Manipulator = {\n    setDataAttribute(element, key, value) {\n        element.setAttribute(`data-bs-${normalizeDataKey(key)}`, value);\n    },\n\n    removeDataAttribute(element, key) {\n        element.removeAttribute(`data-bs-${normalizeDataKey(key)}`);\n    },\n\n    getDataAttributes(element) {\n        if (!element) {\n            return {};\n        }\n\n        const attributes = {};\n        const bsKeys = Object.keys(element.dataset).filter(key => key.startsWith('bs') && !key.startsWith('bsConfig'));\n\n        for (const key of bsKeys) {\n            let pureKey = key.replace(/^bs/, '');\n            pureKey = pureKey.charAt(0).toLowerCase() + pureKey.slice(1, pureKey.length);\n            attributes[pureKey] = normalizeData(element.dataset[key]);\n        }\n\n        return attributes;\n    },\n\n    getDataAttribute(element, key) {\n        return normalizeData(element.getAttribute(`data-bs-${normalizeDataKey(key)}`));\n    }\n\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.3): util/config.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * Class definition\n */\n\nclass Config {\n    // Getters\n    static get Default() {\n        return {};\n    }\n\n    static get DefaultType() {\n        return {};\n    }\n\n    static get NAME() {\n        throw new Error('You have to implement the static method \"NAME\", for each component!');\n    }\n\n    _getConfig(config) {\n        config = this._mergeConfigObj(config);\n        config = this._configAfterMerge(config);\n\n        this._typeCheckConfig(config);\n\n        return config;\n    }\n\n    _configAfterMerge(config) {\n        return config;\n    }\n\n    _mergeConfigObj(config, element) {\n        const jsonConfig = isElement(element) ? Manipulator.getDataAttribute(element, 'config') : {}; // try to parse\n\n        return {\n            ...this.constructor.Default,\n            ...(typeof jsonConfig === 'object' ? jsonConfig : {}),\n            ...(isElement(element) ? Manipulator.getDataAttributes(element) : {}),\n            ...(typeof config === 'object' ? config : {})\n        };\n    }\n\n    _typeCheckConfig(config, configTypes = this.constructor.DefaultType) {\n        for (const property of Object.keys(configTypes)) {\n            const expectedTypes = configTypes[property];\n            const value = config[property];\n            const valueType = isElement(value) ? 'element' : toType(value);\n\n            if (!new RegExp(expectedTypes).test(valueType)) {\n                throw new TypeError(`${this.constructor.NAME.toUpperCase()}: Option \"${property}\" provided type \"${valueType}\" but expected type \"${expectedTypes}\".`);\n            }\n        }\n    }\n\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.3): base-component.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * Constants\n */\n\nconst VERSION = '5.2.3';\n\n/**\n * Class definition\n */\n\nclass BaseComponent extends Config {\n    constructor(element, config) {\n        super();\n        element = getElement(element);\n\n        if (!element) {\n            return;\n        }\n\n        this._element = element;\n        this._config = this._getConfig(config);\n        Data.set(this._element, this.constructor.DATA_KEY, this);\n    } // Public\n\n    static get VERSION() {\n        return VERSION;\n    }\n\n    static get DATA_KEY() {\n        return `bs.${this.NAME}`;\n    }\n\n    static get EVENT_KEY() {\n        return `.${this.DATA_KEY}`;\n    }\n\n    static getInstance(element) {\n        return Data.get(getElement(element), this.DATA_KEY);\n    }\n\n    static getOrCreateInstance(element, config = {}) {\n        return this.getInstance(element) || new this(element, typeof config === 'object' ? config : null);\n    }\n\n    static eventName(name) {\n        return `${name}${this.EVENT_KEY}`;\n    }\n\n    dispose() {\n        Data.remove(this._element, this.constructor.DATA_KEY);\n        EventHandler.off(this._element, this.constructor.EVENT_KEY);\n\n        for (const propertyName of Object.getOwnPropertyNames(this)) {\n            this[propertyName] = null;\n        }\n    }\n\n    _queueCallback(callback, element, isAnimated = true) {\n        executeAfterTransition(callback, element, isAnimated);\n    }\n\n    _getConfig(config) {\n        config = this._mergeConfigObj(config, this._element);\n        config = this._configAfterMerge(config);\n\n        this._typeCheckConfig(config);\n\n        return config;\n    } // Static\n\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.3): util/component-functions.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst enableDismissTrigger = (component, method = 'hide') => {\n    const clickEvent = `click.dismiss${component.EVENT_KEY}`;\n    const name = component.NAME;\n    EventHandler.on(document, clickEvent, `[data-bs-dismiss=\"${name}\"]`, function (event) {\n        if (['A', 'AREA'].includes(this.tagName)) {\n            event.preventDefault();\n        }\n\n        if (isDisabled(this)) {\n            return;\n        }\n\n        const target = getElementFromSelector(this) || this.closest(`.${name}`);\n        const instance = component.getOrCreateInstance(target); // Method argument is left, for Alert and only, as it doesn't implement the 'hide' method\n\n        instance[method]();\n    });\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.3): alert.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * Constants\n */\n\nconst NAME$f = 'alert';\nconst DATA_KEY$a = 'bs.alert';\nconst EVENT_KEY$b = `.${DATA_KEY$a}`;\nconst EVENT_CLOSE = `close${EVENT_KEY$b}`;\nconst EVENT_CLOSED = `closed${EVENT_KEY$b}`;\nconst CLASS_NAME_FADE$5 = 'fade';\nconst CLASS_NAME_SHOW$8 = 'show';\n\n/**\n * Class definition\n */\n\nclass Alert extends BaseComponent {\n    // Getters\n    static get NAME() {\n        return NAME$f;\n    } // Public\n\n    static jQueryInterface(config) {\n        return this.each(function () {\n            const data = Alert.getOrCreateInstance(this);\n\n            if (typeof config !== 'string') {\n                return;\n            }\n\n            if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n                throw new TypeError(`No method named \"${config}\"`);\n            }\n\n            data[config](this);\n        });\n    }\n\n    close() {\n        const closeEvent = EventHandler.trigger(this._element, EVENT_CLOSE);\n\n        if (closeEvent.defaultPrevented) {\n            return;\n        }\n\n        this._element.classList.remove(CLASS_NAME_SHOW$8);\n\n        const isAnimated = this._element.classList.contains(CLASS_NAME_FADE$5);\n\n        this._queueCallback(() => this._destroyElement(), this._element, isAnimated);\n    } // Private\n\n    _destroyElement() {\n        this._element.remove();\n\n        EventHandler.trigger(this._element, EVENT_CLOSED);\n        this.dispose();\n    } // Static\n\n}\n\n/**\n * Data API implementation\n */\n\n\nenableDismissTrigger(Alert, 'close');\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Alert);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.3): button.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * Constants\n */\n\nconst NAME$e = 'button';\nconst DATA_KEY$9 = 'bs.button';\nconst EVENT_KEY$a = `.${DATA_KEY$9}`;\nconst DATA_API_KEY$6 = '.data-api';\nconst CLASS_NAME_ACTIVE$3 = 'active';\nconst SELECTOR_DATA_TOGGLE$5 = '[data-bs-toggle=\"button\"]';\nconst EVENT_CLICK_DATA_API$6 = `click${EVENT_KEY$a}${DATA_API_KEY$6}`;\n\n/**\n * Class definition\n */\n\nclass Button extends BaseComponent {\n    // Getters\n    static get NAME() {\n        return NAME$e;\n    } // Public\n\n    static jQueryInterface(config) {\n        return this.each(function () {\n            const data = Button.getOrCreateInstance(this);\n\n            if (config === 'toggle') {\n                data[config]();\n            }\n        });\n    }\n\n    toggle() {\n        // Toggle class and sync the `aria-pressed` attribute with the return value of the `.toggle()` method\n        this._element.setAttribute('aria-pressed', this._element.classList.toggle(CLASS_NAME_ACTIVE$3));\n    } // Static\n\n}\n\n/**\n * Data API implementation\n */\n\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$6, SELECTOR_DATA_TOGGLE$5, event => {\n    event.preventDefault();\n    const button = event.target.closest(SELECTOR_DATA_TOGGLE$5);\n    const data = Button.getOrCreateInstance(button);\n    data.toggle();\n});\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Button);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.3): dom/selector-engine.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * Constants\n */\n\nconst SelectorEngine = {\n    find(selector, element = document.documentElement) {\n        return [].concat(...Element.prototype.querySelectorAll.call(element, selector));\n    },\n\n    findOne(selector, element = document.documentElement) {\n        return Element.prototype.querySelector.call(element, selector);\n    },\n\n    children(element, selector) {\n        return [].concat(...element.children).filter(child => child.matches(selector));\n    },\n\n    parents(element, selector) {\n        const parents = [];\n        let ancestor = element.parentNode.closest(selector);\n\n        while (ancestor) {\n            parents.push(ancestor);\n            ancestor = ancestor.parentNode.closest(selector);\n        }\n\n        return parents;\n    },\n\n    prev(element, selector) {\n        let previous = element.previousElementSibling;\n\n        while (previous) {\n            if (previous.matches(selector)) {\n                return [previous];\n            }\n\n            previous = previous.previousElementSibling;\n        }\n\n        return [];\n    },\n\n    // TODO: this is now unused; remove later along with prev()\n    next(element, selector) {\n        let next = element.nextElementSibling;\n\n        while (next) {\n            if (next.matches(selector)) {\n                return [next];\n            }\n\n            next = next.nextElementSibling;\n        }\n\n        return [];\n    },\n\n    focusableChildren(element) {\n        const focusables = ['a', 'button', 'input', 'textarea', 'select', 'details', '[tabindex]', '[contenteditable=\"true\"]'].map(selector => `${selector}:not([tabindex^=\"-\"])`).join(',');\n        return this.find(focusables, element).filter(el => !isDisabled(el) && isVisible(el));\n    }\n\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.3): util/swipe.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * Constants\n */\n\nconst NAME$d = 'swipe';\nconst EVENT_KEY$9 = '.bs.swipe';\nconst EVENT_TOUCHSTART = `touchstart${EVENT_KEY$9}`;\nconst EVENT_TOUCHMOVE = `touchmove${EVENT_KEY$9}`;\nconst EVENT_TOUCHEND = `touchend${EVENT_KEY$9}`;\nconst EVENT_POINTERDOWN = `pointerdown${EVENT_KEY$9}`;\nconst EVENT_POINTERUP = `pointerup${EVENT_KEY$9}`;\nconst POINTER_TYPE_TOUCH = 'touch';\nconst POINTER_TYPE_PEN = 'pen';\nconst CLASS_NAME_POINTER_EVENT = 'pointer-event';\nconst SWIPE_THRESHOLD = 40;\nconst Default$c = {\n    endCallback: null,\n    leftCallback: null,\n    rightCallback: null\n};\nconst DefaultType$c = {\n    endCallback: '(function|null)',\n    leftCallback: '(function|null)',\n    rightCallback: '(function|null)'\n};\n\n/**\n * Class definition\n */\n\nclass Swipe extends Config {\n    constructor(element, config) {\n        super();\n        this._element = element;\n\n        if (!element || !Swipe.isSupported()) {\n            return;\n        }\n\n        this._config = this._getConfig(config);\n        this._deltaX = 0;\n        this._supportPointerEvents = Boolean(window.PointerEvent);\n\n        this._initEvents();\n    } // Getters\n\n\n    static get Default() {\n        return Default$c;\n    }\n\n    static get DefaultType() {\n        return DefaultType$c;\n    }\n\n    static get NAME() {\n        return NAME$d;\n    } // Public\n\n    static isSupported() {\n        return 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0;\n    }\n\n    dispose() {\n        EventHandler.off(this._element, EVENT_KEY$9);\n    } // Private\n\n    _start(event) {\n        if (!this._supportPointerEvents) {\n            this._deltaX = event.touches[0].clientX;\n            return;\n        }\n\n        if (this._eventIsPointerPenTouch(event)) {\n            this._deltaX = event.clientX;\n        }\n    }\n\n    _end(event) {\n        if (this._eventIsPointerPenTouch(event)) {\n            this._deltaX = event.clientX - this._deltaX;\n        }\n\n        this._handleSwipe();\n\n        execute(this._config.endCallback);\n    }\n\n    _move(event) {\n        this._deltaX = event.touches && event.touches.length > 1 ? 0 : event.touches[0].clientX - this._deltaX;\n    }\n\n    _handleSwipe() {\n        const absDeltaX = Math.abs(this._deltaX);\n\n        if (absDeltaX <= SWIPE_THRESHOLD) {\n            return;\n        }\n\n        const direction = absDeltaX / this._deltaX;\n        this._deltaX = 0;\n\n        if (!direction) {\n            return;\n        }\n\n        execute(direction > 0 ? this._config.rightCallback : this._config.leftCallback);\n    }\n\n    _initEvents() {\n        if (this._supportPointerEvents) {\n            EventHandler.on(this._element, EVENT_POINTERDOWN, event => this._start(event));\n            EventHandler.on(this._element, EVENT_POINTERUP, event => this._end(event));\n\n            this._element.classList.add(CLASS_NAME_POINTER_EVENT);\n        } else {\n            EventHandler.on(this._element, EVENT_TOUCHSTART, event => this._start(event));\n            EventHandler.on(this._element, EVENT_TOUCHMOVE, event => this._move(event));\n            EventHandler.on(this._element, EVENT_TOUCHEND, event => this._end(event));\n        }\n    }\n\n    _eventIsPointerPenTouch(event) {\n        return this._supportPointerEvents && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH);\n    } // Static\n\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.3): carousel.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * Constants\n */\n\nconst NAME$c = 'carousel';\nconst DATA_KEY$8 = 'bs.carousel';\nconst EVENT_KEY$8 = `.${DATA_KEY$8}`;\nconst DATA_API_KEY$5 = '.data-api';\nconst ARROW_LEFT_KEY$1 = 'ArrowLeft';\nconst ARROW_RIGHT_KEY$1 = 'ArrowRight';\nconst TOUCHEVENT_COMPAT_WAIT = 500; // Time for mouse compat events to fire after touch\n\nconst ORDER_NEXT = 'next';\nconst ORDER_PREV = 'prev';\nconst DIRECTION_LEFT = 'left';\nconst DIRECTION_RIGHT = 'right';\nconst EVENT_SLIDE = `slide${EVENT_KEY$8}`;\nconst EVENT_SLID = `slid${EVENT_KEY$8}`;\nconst EVENT_KEYDOWN$1 = `keydown${EVENT_KEY$8}`;\nconst EVENT_MOUSEENTER$1 = `mouseenter${EVENT_KEY$8}`;\nconst EVENT_MOUSELEAVE$1 = `mouseleave${EVENT_KEY$8}`;\nconst EVENT_DRAG_START = `dragstart${EVENT_KEY$8}`;\nconst EVENT_LOAD_DATA_API$3 = `load${EVENT_KEY$8}${DATA_API_KEY$5}`;\nconst EVENT_CLICK_DATA_API$5 = `click${EVENT_KEY$8}${DATA_API_KEY$5}`;\nconst CLASS_NAME_CAROUSEL = 'carousel';\nconst CLASS_NAME_ACTIVE$2 = 'active';\nconst CLASS_NAME_SLIDE = 'slide';\nconst CLASS_NAME_END = 'carousel-item-end';\nconst CLASS_NAME_START = 'carousel-item-start';\nconst CLASS_NAME_NEXT = 'carousel-item-next';\nconst CLASS_NAME_PREV = 'carousel-item-prev';\nconst SELECTOR_ACTIVE = '.active';\nconst SELECTOR_ITEM = '.carousel-item';\nconst SELECTOR_ACTIVE_ITEM = SELECTOR_ACTIVE + SELECTOR_ITEM;\nconst SELECTOR_ITEM_IMG = '.carousel-item img';\nconst SELECTOR_INDICATORS = '.carousel-indicators';\nconst SELECTOR_DATA_SLIDE = '[data-bs-slide], [data-bs-slide-to]';\nconst SELECTOR_DATA_RIDE = '[data-bs-ride=\"carousel\"]';\nconst KEY_TO_DIRECTION = {\n    [ARROW_LEFT_KEY$1]: DIRECTION_RIGHT,\n    [ARROW_RIGHT_KEY$1]: DIRECTION_LEFT\n};\nconst Default$b = {\n    interval: 5000,\n    keyboard: true,\n    pause: 'hover',\n    ride: false,\n    touch: true,\n    wrap: true\n};\nconst DefaultType$b = {\n    interval: '(number|boolean)',\n    // TODO:v6 remove boolean support\n    keyboard: 'boolean',\n    pause: '(string|boolean)',\n    ride: '(boolean|string)',\n    touch: 'boolean',\n    wrap: 'boolean'\n};\n\n/**\n * Class definition\n */\n\nclass Carousel extends BaseComponent {\n    constructor(element, config) {\n        super(element, config);\n        this._interval = null;\n        this._activeElement = null;\n        this._isSliding = false;\n        this.touchTimeout = null;\n        this._swipeHelper = null;\n        this._indicatorsElement = SelectorEngine.findOne(SELECTOR_INDICATORS, this._element);\n\n        this._addEventListeners();\n\n        if (this._config.ride === CLASS_NAME_CAROUSEL) {\n            this.cycle();\n        }\n    } // Getters\n\n\n    static get Default() {\n        return Default$b;\n    }\n\n    static get DefaultType() {\n        return DefaultType$b;\n    }\n\n    static get NAME() {\n        return NAME$c;\n    } // Public\n\n    static jQueryInterface(config) {\n        return this.each(function () {\n            const data = Carousel.getOrCreateInstance(this, config);\n\n            if (typeof config === 'number') {\n                data.to(config);\n                return;\n            }\n\n            if (typeof config === 'string') {\n                if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n                    throw new TypeError(`No method named \"${config}\"`);\n                }\n\n                data[config]();\n            }\n        });\n    }\n\n    next() {\n        this._slide(ORDER_NEXT);\n    }\n\n    nextWhenVisible() {\n        // FIXME TODO use `document.visibilityState`\n        // Don't call next when the page isn't visible\n        // or the carousel or its parent isn't visible\n        if (!document.hidden && isVisible(this._element)) {\n            this.next();\n        }\n    }\n\n    prev() {\n        this._slide(ORDER_PREV);\n    }\n\n    pause() {\n        if (this._isSliding) {\n            triggerTransitionEnd(this._element);\n        }\n\n        this._clearInterval();\n    }\n\n    cycle() {\n        this._clearInterval();\n\n        this._updateInterval();\n\n        this._interval = setInterval(() => this.nextWhenVisible(), this._config.interval);\n    }\n\n    _maybeEnableCycle() {\n        if (!this._config.ride) {\n            return;\n        }\n\n        if (this._isSliding) {\n            EventHandler.one(this._element, EVENT_SLID, () => this.cycle());\n            return;\n        }\n\n        this.cycle();\n    }\n\n    to(index) {\n        const items = this._getItems();\n\n        if (index > items.length - 1 || index < 0) {\n            return;\n        }\n\n        if (this._isSliding) {\n            EventHandler.one(this._element, EVENT_SLID, () => this.to(index));\n            return;\n        }\n\n        const activeIndex = this._getItemIndex(this._getActive());\n\n        if (activeIndex === index) {\n            return;\n        }\n\n        const order = index > activeIndex ? ORDER_NEXT : ORDER_PREV;\n\n        this._slide(order, items[index]);\n    }\n\n    dispose() {\n        if (this._swipeHelper) {\n            this._swipeHelper.dispose();\n        }\n\n        super.dispose();\n    } // Private\n\n    _configAfterMerge(config) {\n        config.defaultInterval = config.interval;\n        return config;\n    }\n\n    _addEventListeners() {\n        if (this._config.keyboard) {\n            EventHandler.on(this._element, EVENT_KEYDOWN$1, event => this._keydown(event));\n        }\n\n        if (this._config.pause === 'hover') {\n            EventHandler.on(this._element, EVENT_MOUSEENTER$1, () => this.pause());\n            EventHandler.on(this._element, EVENT_MOUSELEAVE$1, () => this._maybeEnableCycle());\n        }\n\n        if (this._config.touch && Swipe.isSupported()) {\n            this._addTouchEventListeners();\n        }\n    }\n\n    _addTouchEventListeners() {\n        for (const img of SelectorEngine.find(SELECTOR_ITEM_IMG, this._element)) {\n            EventHandler.on(img, EVENT_DRAG_START, event => event.preventDefault());\n        }\n\n        const endCallBack = () => {\n            if (this._config.pause !== 'hover') {\n                return;\n            } // If it's a touch-enabled device, mouseenter/leave are fired as\n            // part of the mouse compatibility events on first tap - the carousel\n            // would stop cycling until user tapped out of it;\n            // here, we listen for touchend, explicitly pause the carousel\n            // (as if it's the second time we tap on it, mouseenter compat event\n            // is NOT fired) and after a timeout (to allow for mouse compatibility\n            // events to fire) we explicitly restart cycling\n\n\n            this.pause();\n\n            if (this.touchTimeout) {\n                clearTimeout(this.touchTimeout);\n            }\n\n            this.touchTimeout = setTimeout(() => this._maybeEnableCycle(), TOUCHEVENT_COMPAT_WAIT + this._config.interval);\n        };\n\n        const swipeConfig = {\n            leftCallback: () => this._slide(this._directionToOrder(DIRECTION_LEFT)),\n            rightCallback: () => this._slide(this._directionToOrder(DIRECTION_RIGHT)),\n            endCallback: endCallBack\n        };\n        this._swipeHelper = new Swipe(this._element, swipeConfig);\n    }\n\n    _keydown(event) {\n        if (/input|textarea/i.test(event.target.tagName)) {\n            return;\n        }\n\n        const direction = KEY_TO_DIRECTION[event.key];\n\n        if (direction) {\n            event.preventDefault();\n\n            this._slide(this._directionToOrder(direction));\n        }\n    }\n\n    _getItemIndex(element) {\n        return this._getItems().indexOf(element);\n    }\n\n    _setActiveIndicatorElement(index) {\n        if (!this._indicatorsElement) {\n            return;\n        }\n\n        const activeIndicator = SelectorEngine.findOne(SELECTOR_ACTIVE, this._indicatorsElement);\n        activeIndicator.classList.remove(CLASS_NAME_ACTIVE$2);\n        activeIndicator.removeAttribute('aria-current');\n        const newActiveIndicator = SelectorEngine.findOne(`[data-bs-slide-to=\"${index}\"]`, this._indicatorsElement);\n\n        if (newActiveIndicator) {\n            newActiveIndicator.classList.add(CLASS_NAME_ACTIVE$2);\n            newActiveIndicator.setAttribute('aria-current', 'true');\n        }\n    }\n\n    _updateInterval() {\n        const element = this._activeElement || this._getActive();\n\n        if (!element) {\n            return;\n        }\n\n        const elementInterval = Number.parseInt(element.getAttribute('data-bs-interval'), 10);\n        this._config.interval = elementInterval || this._config.defaultInterval;\n    }\n\n    _slide(order, element = null) {\n        if (this._isSliding) {\n            return;\n        }\n\n        const activeElement = this._getActive();\n\n        const isNext = order === ORDER_NEXT;\n        const nextElement = element || getNextActiveElement(this._getItems(), activeElement, isNext, this._config.wrap);\n\n        if (nextElement === activeElement) {\n            return;\n        }\n\n        const nextElementIndex = this._getItemIndex(nextElement);\n\n        const triggerEvent = eventName => {\n            return EventHandler.trigger(this._element, eventName, {\n                relatedTarget: nextElement,\n                direction: this._orderToDirection(order),\n                from: this._getItemIndex(activeElement),\n                to: nextElementIndex\n            });\n        };\n\n        const slideEvent = triggerEvent(EVENT_SLIDE);\n\n        if (slideEvent.defaultPrevented) {\n            return;\n        }\n\n        if (!activeElement || !nextElement) {\n            // Some weirdness is happening, so we bail\n            // todo: change tests that use empty divs to avoid this check\n            return;\n        }\n\n        const isCycling = Boolean(this._interval);\n        this.pause();\n        this._isSliding = true;\n\n        this._setActiveIndicatorElement(nextElementIndex);\n\n        this._activeElement = nextElement;\n        const directionalClassName = isNext ? CLASS_NAME_START : CLASS_NAME_END;\n        const orderClassName = isNext ? CLASS_NAME_NEXT : CLASS_NAME_PREV;\n        nextElement.classList.add(orderClassName);\n        reflow(nextElement);\n        activeElement.classList.add(directionalClassName);\n        nextElement.classList.add(directionalClassName);\n\n        const completeCallBack = () => {\n            nextElement.classList.remove(directionalClassName, orderClassName);\n            nextElement.classList.add(CLASS_NAME_ACTIVE$2);\n            activeElement.classList.remove(CLASS_NAME_ACTIVE$2, orderClassName, directionalClassName);\n            this._isSliding = false;\n            triggerEvent(EVENT_SLID);\n        };\n\n        this._queueCallback(completeCallBack, activeElement, this._isAnimated());\n\n        if (isCycling) {\n            this.cycle();\n        }\n    }\n\n    _isAnimated() {\n        return this._element.classList.contains(CLASS_NAME_SLIDE);\n    }\n\n    _getActive() {\n        return SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);\n    }\n\n    _getItems() {\n        return SelectorEngine.find(SELECTOR_ITEM, this._element);\n    }\n\n    _clearInterval() {\n        if (this._interval) {\n            clearInterval(this._interval);\n            this._interval = null;\n        }\n    }\n\n    _directionToOrder(direction) {\n        if (isRTL()) {\n            return direction === DIRECTION_LEFT ? ORDER_PREV : ORDER_NEXT;\n        }\n\n        return direction === DIRECTION_LEFT ? ORDER_NEXT : ORDER_PREV;\n    }\n\n    _orderToDirection(order) {\n        if (isRTL()) {\n            return order === ORDER_PREV ? DIRECTION_LEFT : DIRECTION_RIGHT;\n        }\n\n        return order === ORDER_PREV ? DIRECTION_RIGHT : DIRECTION_LEFT;\n    } // Static\n\n}\n\n/**\n * Data API implementation\n */\n\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$5, SELECTOR_DATA_SLIDE, function (event) {\n    const target = getElementFromSelector(this);\n\n    if (!target || !target.classList.contains(CLASS_NAME_CAROUSEL)) {\n        return;\n    }\n\n    event.preventDefault();\n    const carousel = Carousel.getOrCreateInstance(target);\n    const slideIndex = this.getAttribute('data-bs-slide-to');\n\n    if (slideIndex) {\n        carousel.to(slideIndex);\n\n        carousel._maybeEnableCycle();\n\n        return;\n    }\n\n    if (Manipulator.getDataAttribute(this, 'slide') === 'next') {\n        carousel.next();\n\n        carousel._maybeEnableCycle();\n\n        return;\n    }\n\n    carousel.prev();\n\n    carousel._maybeEnableCycle();\n});\nEventHandler.on(window, EVENT_LOAD_DATA_API$3, () => {\n    const carousels = SelectorEngine.find(SELECTOR_DATA_RIDE);\n\n    for (const carousel of carousels) {\n        Carousel.getOrCreateInstance(carousel);\n    }\n});\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Carousel);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.3): collapse.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * Constants\n */\n\nconst NAME$b = 'collapse';\nconst DATA_KEY$7 = 'bs.collapse';\nconst EVENT_KEY$7 = `.${DATA_KEY$7}`;\nconst DATA_API_KEY$4 = '.data-api';\nconst EVENT_SHOW$6 = `show${EVENT_KEY$7}`;\nconst EVENT_SHOWN$6 = `shown${EVENT_KEY$7}`;\nconst EVENT_HIDE$6 = `hide${EVENT_KEY$7}`;\nconst EVENT_HIDDEN$6 = `hidden${EVENT_KEY$7}`;\nconst EVENT_CLICK_DATA_API$4 = `click${EVENT_KEY$7}${DATA_API_KEY$4}`;\nconst CLASS_NAME_SHOW$7 = 'show';\nconst CLASS_NAME_COLLAPSE = 'collapse';\nconst CLASS_NAME_COLLAPSING = 'collapsing';\nconst CLASS_NAME_COLLAPSED = 'collapsed';\nconst CLASS_NAME_DEEPER_CHILDREN = `:scope .${CLASS_NAME_COLLAPSE} .${CLASS_NAME_COLLAPSE}`;\nconst CLASS_NAME_HORIZONTAL = 'collapse-horizontal';\nconst WIDTH = 'width';\nconst HEIGHT = 'height';\nconst SELECTOR_ACTIVES = '.collapse.show, .collapse.collapsing';\nconst SELECTOR_DATA_TOGGLE$4 = '[data-bs-toggle=\"collapse\"]';\nconst Default$a = {\n    parent: null,\n    toggle: true\n};\nconst DefaultType$a = {\n    parent: '(null|element)',\n    toggle: 'boolean'\n};\n\n/**\n * Class definition\n */\n\nclass Collapse extends BaseComponent {\n    constructor(element, config) {\n        super(element, config);\n        this._isTransitioning = false;\n        this._triggerArray = [];\n        const toggleList = SelectorEngine.find(SELECTOR_DATA_TOGGLE$4);\n\n        for (const elem of toggleList) {\n            const selector = getSelectorFromElement(elem);\n            const filterElement = SelectorEngine.find(selector).filter(foundElement => foundElement === this._element);\n\n            if (selector !== null && filterElement.length) {\n                this._triggerArray.push(elem);\n            }\n        }\n\n        this._initializeChildren();\n\n        if (!this._config.parent) {\n            this._addAriaAndCollapsedClass(this._triggerArray, this._isShown());\n        }\n\n        if (this._config.toggle) {\n            this.toggle();\n        }\n    } // Getters\n\n\n    static get Default() {\n        return Default$a;\n    }\n\n    static get DefaultType() {\n        return DefaultType$a;\n    }\n\n    static get NAME() {\n        return NAME$b;\n    } // Public\n\n    static jQueryInterface(config) {\n        const _config = {};\n\n        if (typeof config === 'string' && /show|hide/.test(config)) {\n            _config.toggle = false;\n        }\n\n        return this.each(function () {\n            const data = Collapse.getOrCreateInstance(this, _config);\n\n            if (typeof config === 'string') {\n                if (typeof data[config] === 'undefined') {\n                    throw new TypeError(`No method named \"${config}\"`);\n                }\n\n                data[config]();\n            }\n        });\n    }\n\n    toggle() {\n        if (this._isShown()) {\n            this.hide();\n        } else {\n            this.show();\n        }\n    }\n\n    show() {\n        if (this._isTransitioning || this._isShown()) {\n            return;\n        }\n\n        let activeChildren = []; // find active children\n\n        if (this._config.parent) {\n            activeChildren = this._getFirstLevelChildren(SELECTOR_ACTIVES).filter(element => element !== this._element).map(element => Collapse.getOrCreateInstance(element, {\n                toggle: false\n            }));\n        }\n\n        if (activeChildren.length && activeChildren[0]._isTransitioning) {\n            return;\n        }\n\n        const startEvent = EventHandler.trigger(this._element, EVENT_SHOW$6);\n\n        if (startEvent.defaultPrevented) {\n            return;\n        }\n\n        for (const activeInstance of activeChildren) {\n            activeInstance.hide();\n        }\n\n        const dimension = this._getDimension();\n\n        this._element.classList.remove(CLASS_NAME_COLLAPSE);\n\n        this._element.classList.add(CLASS_NAME_COLLAPSING);\n\n        this._element.style[dimension] = 0;\n\n        this._addAriaAndCollapsedClass(this._triggerArray, true);\n\n        this._isTransitioning = true;\n\n        const complete = () => {\n            this._isTransitioning = false;\n\n            this._element.classList.remove(CLASS_NAME_COLLAPSING);\n\n            this._element.classList.add(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$7);\n\n            this._element.style[dimension] = '';\n            EventHandler.trigger(this._element, EVENT_SHOWN$6);\n        };\n\n        const capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1);\n        const scrollSize = `scroll${capitalizedDimension}`;\n\n        this._queueCallback(complete, this._element, true);\n\n        this._element.style[dimension] = `${this._element[scrollSize]}px`;\n    }\n\n    hide() {\n        if (this._isTransitioning || !this._isShown()) {\n            return;\n        }\n\n        const startEvent = EventHandler.trigger(this._element, EVENT_HIDE$6);\n\n        if (startEvent.defaultPrevented) {\n            return;\n        }\n\n        const dimension = this._getDimension();\n\n        this._element.style[dimension] = `${this._element.getBoundingClientRect()[dimension]}px`;\n        reflow(this._element);\n\n        this._element.classList.add(CLASS_NAME_COLLAPSING);\n\n        this._element.classList.remove(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$7);\n\n        for (const trigger of this._triggerArray) {\n            const element = getElementFromSelector(trigger);\n\n            if (element && !this._isShown(element)) {\n                this._addAriaAndCollapsedClass([trigger], false);\n            }\n        }\n\n        this._isTransitioning = true;\n\n        const complete = () => {\n            this._isTransitioning = false;\n\n            this._element.classList.remove(CLASS_NAME_COLLAPSING);\n\n            this._element.classList.add(CLASS_NAME_COLLAPSE);\n\n            EventHandler.trigger(this._element, EVENT_HIDDEN$6);\n        };\n\n        this._element.style[dimension] = '';\n\n        this._queueCallback(complete, this._element, true);\n    }\n\n    _isShown(element = this._element) {\n        return element.classList.contains(CLASS_NAME_SHOW$7);\n    } // Private\n\n    _configAfterMerge(config) {\n        config.toggle = Boolean(config.toggle); // Coerce string values\n\n        config.parent = getElement(config.parent);\n        return config;\n    }\n\n    _getDimension() {\n        return this._element.classList.contains(CLASS_NAME_HORIZONTAL) ? WIDTH : HEIGHT;\n    }\n\n    _initializeChildren() {\n        if (!this._config.parent) {\n            return;\n        }\n\n        const children = this._getFirstLevelChildren(SELECTOR_DATA_TOGGLE$4);\n\n        for (const element of children) {\n            const selected = getElementFromSelector(element);\n\n            if (selected) {\n                this._addAriaAndCollapsedClass([element], this._isShown(selected));\n            }\n        }\n    }\n\n    _getFirstLevelChildren(selector) {\n        const children = SelectorEngine.find(CLASS_NAME_DEEPER_CHILDREN, this._config.parent); // remove children if greater depth\n\n        return SelectorEngine.find(selector, this._config.parent).filter(element => !children.includes(element));\n    }\n\n    _addAriaAndCollapsedClass(triggerArray, isOpen) {\n        if (!triggerArray.length) {\n            return;\n        }\n\n        for (const element of triggerArray) {\n            element.classList.toggle(CLASS_NAME_COLLAPSED, !isOpen);\n            element.setAttribute('aria-expanded', isOpen);\n        }\n    } // Static\n\n}\n\n/**\n * Data API implementation\n */\n\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$4, SELECTOR_DATA_TOGGLE$4, function (event) {\n    // preventDefault only for <a> elements (which change the URL) not inside the collapsible element\n    if (event.target.tagName === 'A' || event.delegateTarget && event.delegateTarget.tagName === 'A') {\n        event.preventDefault();\n    }\n\n    const selector = getSelectorFromElement(this);\n    const selectorElements = SelectorEngine.find(selector);\n\n    for (const element of selectorElements) {\n        Collapse.getOrCreateInstance(element, {\n            toggle: false\n        }).toggle();\n    }\n});\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Collapse);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.3): dropdown.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * Constants\n */\n\nconst NAME$a = 'dropdown';\nconst DATA_KEY$6 = 'bs.dropdown';\nconst EVENT_KEY$6 = `.${DATA_KEY$6}`;\nconst DATA_API_KEY$3 = '.data-api';\nconst ESCAPE_KEY$2 = 'Escape';\nconst TAB_KEY$1 = 'Tab';\nconst ARROW_UP_KEY$1 = 'ArrowUp';\nconst ARROW_DOWN_KEY$1 = 'ArrowDown';\nconst RIGHT_MOUSE_BUTTON = 2; // MouseEvent.button value for the secondary button, usually the right button\n\nconst EVENT_HIDE$5 = `hide${EVENT_KEY$6}`;\nconst EVENT_HIDDEN$5 = `hidden${EVENT_KEY$6}`;\nconst EVENT_SHOW$5 = `show${EVENT_KEY$6}`;\nconst EVENT_SHOWN$5 = `shown${EVENT_KEY$6}`;\nconst EVENT_CLICK_DATA_API$3 = `click${EVENT_KEY$6}${DATA_API_KEY$3}`;\nconst EVENT_KEYDOWN_DATA_API = `keydown${EVENT_KEY$6}${DATA_API_KEY$3}`;\nconst EVENT_KEYUP_DATA_API = `keyup${EVENT_KEY$6}${DATA_API_KEY$3}`;\nconst CLASS_NAME_SHOW$6 = 'show';\nconst CLASS_NAME_DROPUP = 'dropup';\nconst CLASS_NAME_DROPEND = 'dropend';\nconst CLASS_NAME_DROPSTART = 'dropstart';\nconst CLASS_NAME_DROPUP_CENTER = 'dropup-center';\nconst CLASS_NAME_DROPDOWN_CENTER = 'dropdown-center';\nconst SELECTOR_DATA_TOGGLE$3 = '[data-bs-toggle=\"dropdown\"]:not(.disabled):not(:disabled)';\nconst SELECTOR_DATA_TOGGLE_SHOWN = `${SELECTOR_DATA_TOGGLE$3}.${CLASS_NAME_SHOW$6}`;\nconst SELECTOR_MENU = '.dropdown-menu';\nconst SELECTOR_NAVBAR = '.navbar';\nconst SELECTOR_NAVBAR_NAV = '.navbar-nav';\nconst SELECTOR_VISIBLE_ITEMS = '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)';\nconst PLACEMENT_TOP = isRTL() ? 'top-end' : 'top-start';\nconst PLACEMENT_TOPEND = isRTL() ? 'top-start' : 'top-end';\nconst PLACEMENT_BOTTOM = isRTL() ? 'bottom-end' : 'bottom-start';\nconst PLACEMENT_BOTTOMEND = isRTL() ? 'bottom-start' : 'bottom-end';\nconst PLACEMENT_RIGHT = isRTL() ? 'left-start' : 'right-start';\nconst PLACEMENT_LEFT = isRTL() ? 'right-start' : 'left-start';\nconst PLACEMENT_TOPCENTER = 'top';\nconst PLACEMENT_BOTTOMCENTER = 'bottom';\nconst Default$9 = {\n    autoClose: true,\n    boundary: 'clippingParents',\n    display: 'dynamic',\n    offset: [0, 2],\n    popperConfig: null,\n    reference: 'toggle'\n};\nconst DefaultType$9 = {\n    autoClose: '(boolean|string)',\n    boundary: '(string|element)',\n    display: 'string',\n    offset: '(array|string|function)',\n    popperConfig: '(null|object|function)',\n    reference: '(string|element|object)'\n};\n\n/**\n * Class definition\n */\n\nclass Dropdown extends BaseComponent {\n    constructor(element, config) {\n        super(element, config);\n        this._popper = null;\n        this._parent = this._element.parentNode; // dropdown wrapper\n        // todo: v6 revert #37011 & change markup https://getbootstrap.com/docs/5.2/forms/input-group/\n\n        this._menu = SelectorEngine.next(this._element, SELECTOR_MENU)[0] || SelectorEngine.prev(this._element, SELECTOR_MENU)[0] || SelectorEngine.findOne(SELECTOR_MENU, this._parent);\n        this._inNavbar = this._detectNavbar();\n    } // Getters\n\n\n    static get Default() {\n        return Default$9;\n    }\n\n    static get DefaultType() {\n        return DefaultType$9;\n    }\n\n    static get NAME() {\n        return NAME$a;\n    } // Public\n\n    static jQueryInterface(config) {\n        return this.each(function () {\n            const data = Dropdown.getOrCreateInstance(this, config);\n\n            if (typeof config !== 'string') {\n                return;\n            }\n\n            if (typeof data[config] === 'undefined') {\n                throw new TypeError(`No method named \"${config}\"`);\n            }\n\n            data[config]();\n        });\n    }\n\n    static clearMenus(event) {\n        if (event.button === RIGHT_MOUSE_BUTTON || event.type === 'keyup' && event.key !== TAB_KEY$1) {\n            return;\n        }\n\n        const openToggles = SelectorEngine.find(SELECTOR_DATA_TOGGLE_SHOWN);\n\n        for (const toggle of openToggles) {\n            const context = Dropdown.getInstance(toggle);\n\n            if (!context || context._config.autoClose === false) {\n                continue;\n            }\n\n            const composedPath = event.composedPath();\n            const isMenuTarget = composedPath.includes(context._menu);\n\n            if (composedPath.includes(context._element) || context._config.autoClose === 'inside' && !isMenuTarget || context._config.autoClose === 'outside' && isMenuTarget) {\n                continue;\n            } // Tab navigation through the dropdown menu or events from contained inputs shouldn't close the menu\n\n\n            if (context._menu.contains(event.target) && (event.type === 'keyup' && event.key === TAB_KEY$1 || /input|select|option|textarea|form/i.test(event.target.tagName))) {\n                continue;\n            }\n\n            const relatedTarget = {\n                relatedTarget: context._element\n            };\n\n            if (event.type === 'click') {\n                relatedTarget.clickEvent = event;\n            }\n\n            context._completeHide(relatedTarget);\n        }\n    }\n\n    static dataApiKeydownHandler(event) {\n        // If not an UP | DOWN | ESCAPE key => not a dropdown command\n        // If input/textarea && if key is other than ESCAPE => not a dropdown command\n        const isInput = /input|textarea/i.test(event.target.tagName);\n        const isEscapeEvent = event.key === ESCAPE_KEY$2;\n        const isUpOrDownEvent = [ARROW_UP_KEY$1, ARROW_DOWN_KEY$1].includes(event.key);\n\n        if (!isUpOrDownEvent && !isEscapeEvent) {\n            return;\n        }\n\n        if (isInput && !isEscapeEvent) {\n            return;\n        }\n\n        event.preventDefault(); // todo: v6 revert #37011 & change markup https://getbootstrap.com/docs/5.2/forms/input-group/\n\n        const getToggleButton = this.matches(SELECTOR_DATA_TOGGLE$3) ? this : SelectorEngine.prev(this, SELECTOR_DATA_TOGGLE$3)[0] || SelectorEngine.next(this, SELECTOR_DATA_TOGGLE$3)[0] || SelectorEngine.findOne(SELECTOR_DATA_TOGGLE$3, event.delegateTarget.parentNode);\n        const instance = Dropdown.getOrCreateInstance(getToggleButton);\n\n        if (isUpOrDownEvent) {\n            event.stopPropagation();\n            instance.show();\n\n            instance._selectMenuItem(event);\n\n            return;\n        }\n\n        if (instance._isShown()) {\n            // else is escape and we check if it is shown\n            event.stopPropagation();\n            instance.hide();\n            getToggleButton.focus();\n        }\n    }\n\n    toggle() {\n        return this._isShown() ? this.hide() : this.show();\n    }\n\n    show() {\n        if (isDisabled(this._element) || this._isShown()) {\n            return;\n        }\n\n        const relatedTarget = {\n            relatedTarget: this._element\n        };\n        const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$5, relatedTarget);\n\n        if (showEvent.defaultPrevented) {\n            return;\n        }\n\n        this._createPopper(); // If this is a touch-enabled device we add extra\n        // empty mouseover listeners to the body's immediate children;\n        // only needed because of broken event delegation on iOS\n        // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n\n\n        if ('ontouchstart' in document.documentElement && !this._parent.closest(SELECTOR_NAVBAR_NAV)) {\n            for (const element of [].concat(...document.body.children)) {\n                EventHandler.on(element, 'mouseover', noop);\n            }\n        }\n\n        this._element.focus();\n\n        this._element.setAttribute('aria-expanded', true);\n\n        this._menu.classList.add(CLASS_NAME_SHOW$6);\n\n        this._element.classList.add(CLASS_NAME_SHOW$6);\n\n        EventHandler.trigger(this._element, EVENT_SHOWN$5, relatedTarget);\n    }\n\n    hide() {\n        if (isDisabled(this._element) || !this._isShown()) {\n            return;\n        }\n\n        const relatedTarget = {\n            relatedTarget: this._element\n        };\n\n        this._completeHide(relatedTarget);\n    }\n\n    dispose() {\n        if (this._popper) {\n            this._popper.destroy();\n        }\n\n        super.dispose();\n    }\n\n    update() {\n        this._inNavbar = this._detectNavbar();\n\n        if (this._popper) {\n            this._popper.update();\n        }\n    } // Private\n\n    _completeHide(relatedTarget) {\n        const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$5, relatedTarget);\n\n        if (hideEvent.defaultPrevented) {\n            return;\n        } // If this is a touch-enabled device we remove the extra\n        // empty mouseover listeners we added for iOS support\n\n\n        if ('ontouchstart' in document.documentElement) {\n            for (const element of [].concat(...document.body.children)) {\n                EventHandler.off(element, 'mouseover', noop);\n            }\n        }\n\n        if (this._popper) {\n            this._popper.destroy();\n        }\n\n        this._menu.classList.remove(CLASS_NAME_SHOW$6);\n\n        this._element.classList.remove(CLASS_NAME_SHOW$6);\n\n        this._element.setAttribute('aria-expanded', 'false');\n\n        Manipulator.removeDataAttribute(this._menu, 'popper');\n        EventHandler.trigger(this._element, EVENT_HIDDEN$5, relatedTarget);\n    }\n\n    _getConfig(config) {\n        config = super._getConfig(config);\n\n        if (typeof config.reference === 'object' && !isElement(config.reference) && typeof config.reference.getBoundingClientRect !== 'function') {\n            // Popper virtual elements require a getBoundingClientRect method\n            throw new TypeError(`${NAME$a.toUpperCase()}: Option \"reference\" provided type \"object\" without a required \"getBoundingClientRect\" method.`);\n        }\n\n        return config;\n    }\n\n    _createPopper() {\n        if (typeof Popper === 'undefined') {\n            throw new TypeError('Bootstrap\\'s dropdowns require Popper (https://popper.js.org)');\n        }\n\n        let referenceElement = this._element;\n\n        if (this._config.reference === 'parent') {\n            referenceElement = this._parent;\n        } else if (isElement(this._config.reference)) {\n            referenceElement = getElement(this._config.reference);\n        } else if (typeof this._config.reference === 'object') {\n            referenceElement = this._config.reference;\n        }\n\n        const popperConfig = this._getPopperConfig();\n\n        this._popper = Popper.createPopper(referenceElement, this._menu, popperConfig);\n    }\n\n    _isShown() {\n        return this._menu.classList.contains(CLASS_NAME_SHOW$6);\n    }\n\n    _getPlacement() {\n        const parentDropdown = this._parent;\n\n        if (parentDropdown.classList.contains(CLASS_NAME_DROPEND)) {\n            return PLACEMENT_RIGHT;\n        }\n\n        if (parentDropdown.classList.contains(CLASS_NAME_DROPSTART)) {\n            return PLACEMENT_LEFT;\n        }\n\n        if (parentDropdown.classList.contains(CLASS_NAME_DROPUP_CENTER)) {\n            return PLACEMENT_TOPCENTER;\n        }\n\n        if (parentDropdown.classList.contains(CLASS_NAME_DROPDOWN_CENTER)) {\n            return PLACEMENT_BOTTOMCENTER;\n        } // We need to trim the value because custom properties can also include spaces\n\n\n        const isEnd = getComputedStyle(this._menu).getPropertyValue('--bs-position').trim() === 'end';\n\n        if (parentDropdown.classList.contains(CLASS_NAME_DROPUP)) {\n            return isEnd ? PLACEMENT_TOPEND : PLACEMENT_TOP;\n        }\n\n        return isEnd ? PLACEMENT_BOTTOMEND : PLACEMENT_BOTTOM;\n    }\n\n    _detectNavbar() {\n        return this._element.closest(SELECTOR_NAVBAR) !== null;\n    }\n\n    _getOffset() {\n        const {\n            offset\n        } = this._config;\n\n        if (typeof offset === 'string') {\n            return offset.split(',').map(value => Number.parseInt(value, 10));\n        }\n\n        if (typeof offset === 'function') {\n            return popperData => offset(popperData, this._element);\n        }\n\n        return offset;\n    }\n\n    _getPopperConfig() {\n        const defaultBsPopperConfig = {\n            placement: this._getPlacement(),\n            modifiers: [{\n                name: 'preventOverflow',\n                options: {\n                    boundary: this._config.boundary\n                }\n            }, {\n                name: 'offset',\n                options: {\n                    offset: this._getOffset()\n                }\n            }]\n        }; // Disable Popper if we have a static display or Dropdown is in Navbar\n\n        if (this._inNavbar || this._config.display === 'static') {\n            Manipulator.setDataAttribute(this._menu, 'popper', 'static'); // todo:v6 remove\n\n            defaultBsPopperConfig.modifiers = [{\n                name: 'applyStyles',\n                enabled: false\n            }];\n        }\n\n        return {\n            ...defaultBsPopperConfig,\n            ...(typeof this._config.popperConfig === 'function' ? this._config.popperConfig(defaultBsPopperConfig) : this._config.popperConfig)\n        };\n    }\n\n    _selectMenuItem({\n                        key,\n                        target\n                    }) {\n        const items = SelectorEngine.find(SELECTOR_VISIBLE_ITEMS, this._menu).filter(element => isVisible(element));\n\n        if (!items.length) {\n            return;\n        } // if target isn't included in items (e.g. when expanding the dropdown)\n        // allow cycling to get the last item in case key equals ARROW_UP_KEY\n\n\n        getNextActiveElement(items, target, key === ARROW_DOWN_KEY$1, !items.includes(target)).focus();\n    } // Static\n\n}\n\n/**\n * Data API implementation\n */\n\n\nEventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE$3, Dropdown.dataApiKeydownHandler);\nEventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown.dataApiKeydownHandler);\nEventHandler.on(document, EVENT_CLICK_DATA_API$3, Dropdown.clearMenus);\nEventHandler.on(document, EVENT_KEYUP_DATA_API, Dropdown.clearMenus);\nEventHandler.on(document, EVENT_CLICK_DATA_API$3, SELECTOR_DATA_TOGGLE$3, function (event) {\n    event.preventDefault();\n    Dropdown.getOrCreateInstance(this).toggle();\n});\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Dropdown);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.3): util/scrollBar.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * Constants\n */\n\nconst SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top';\nconst SELECTOR_STICKY_CONTENT = '.sticky-top';\nconst PROPERTY_PADDING = 'padding-right';\nconst PROPERTY_MARGIN = 'margin-right';\n\n/**\n * Class definition\n */\n\nclass ScrollBarHelper {\n    constructor() {\n        this._element = document.body;\n    } // Public\n\n\n    getWidth() {\n        // https://developer.mozilla.org/en-US/docs/Web/API/Window/innerWidth#usage_notes\n        const documentWidth = document.documentElement.clientWidth;\n        return Math.abs(window.innerWidth - documentWidth);\n    }\n\n    hide() {\n        const width = this.getWidth();\n\n        this._disableOverFlow(); // give padding to element to balance the hidden scrollbar width\n\n\n        this._setElementAttributes(this._element, PROPERTY_PADDING, calculatedValue => calculatedValue + width); // trick: We adjust positive paddingRight and negative marginRight to sticky-top elements to keep showing fullwidth\n\n\n        this._setElementAttributes(SELECTOR_FIXED_CONTENT, PROPERTY_PADDING, calculatedValue => calculatedValue + width);\n\n        this._setElementAttributes(SELECTOR_STICKY_CONTENT, PROPERTY_MARGIN, calculatedValue => calculatedValue - width);\n    }\n\n    reset() {\n        this._resetElementAttributes(this._element, 'overflow');\n\n        this._resetElementAttributes(this._element, PROPERTY_PADDING);\n\n        this._resetElementAttributes(SELECTOR_FIXED_CONTENT, PROPERTY_PADDING);\n\n        this._resetElementAttributes(SELECTOR_STICKY_CONTENT, PROPERTY_MARGIN);\n    }\n\n    isOverflowing() {\n        return this.getWidth() > 0;\n    } // Private\n\n\n    _disableOverFlow() {\n        this._saveInitialAttribute(this._element, 'overflow');\n\n        this._element.style.overflow = 'hidden';\n    }\n\n    _setElementAttributes(selector, styleProperty, callback) {\n        const scrollbarWidth = this.getWidth();\n\n        const manipulationCallBack = element => {\n            if (element !== this._element && window.innerWidth > element.clientWidth + scrollbarWidth) {\n                return;\n            }\n\n            this._saveInitialAttribute(element, styleProperty);\n\n            const calculatedValue = window.getComputedStyle(element).getPropertyValue(styleProperty);\n            element.style.setProperty(styleProperty, `${callback(Number.parseFloat(calculatedValue))}px`);\n        };\n\n        this._applyManipulationCallback(selector, manipulationCallBack);\n    }\n\n    _saveInitialAttribute(element, styleProperty) {\n        const actualValue = element.style.getPropertyValue(styleProperty);\n\n        if (actualValue) {\n            Manipulator.setDataAttribute(element, styleProperty, actualValue);\n        }\n    }\n\n    _resetElementAttributes(selector, styleProperty) {\n        const manipulationCallBack = element => {\n            const value = Manipulator.getDataAttribute(element, styleProperty); // We only want to remove the property if the value is `null`; the value can also be zero\n\n            if (value === null) {\n                element.style.removeProperty(styleProperty);\n                return;\n            }\n\n            Manipulator.removeDataAttribute(element, styleProperty);\n            element.style.setProperty(styleProperty, value);\n        };\n\n        this._applyManipulationCallback(selector, manipulationCallBack);\n    }\n\n    _applyManipulationCallback(selector, callBack) {\n        if (isElement(selector)) {\n            callBack(selector);\n            return;\n        }\n\n        for (const sel of SelectorEngine.find(selector, this._element)) {\n            callBack(sel);\n        }\n    }\n\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.3): util/backdrop.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * Constants\n */\n\nconst NAME$9 = 'backdrop';\nconst CLASS_NAME_FADE$4 = 'fade';\nconst CLASS_NAME_SHOW$5 = 'show';\nconst EVENT_MOUSEDOWN = `mousedown.bs.${NAME$9}`;\nconst Default$8 = {\n    className: 'modal-backdrop',\n    clickCallback: null,\n    isAnimated: false,\n    isVisible: true,\n    // if false, we use the backdrop helper without adding any element to the dom\n    rootElement: 'body' // give the choice to place backdrop under different elements\n\n};\nconst DefaultType$8 = {\n    className: 'string',\n    clickCallback: '(function|null)',\n    isAnimated: 'boolean',\n    isVisible: 'boolean',\n    rootElement: '(element|string)'\n};\n\n/**\n * Class definition\n */\n\nclass Backdrop extends Config {\n    constructor(config) {\n        super();\n        this._config = this._getConfig(config);\n        this._isAppended = false;\n        this._element = null;\n    } // Getters\n\n\n    static get Default() {\n        return Default$8;\n    }\n\n    static get DefaultType() {\n        return DefaultType$8;\n    }\n\n    static get NAME() {\n        return NAME$9;\n    } // Public\n\n\n    show(callback) {\n        if (!this._config.isVisible) {\n            execute(callback);\n            return;\n        }\n\n        this._append();\n\n        const element = this._getElement();\n\n        if (this._config.isAnimated) {\n            reflow(element);\n        }\n\n        element.classList.add(CLASS_NAME_SHOW$5);\n\n        this._emulateAnimation(() => {\n            execute(callback);\n        });\n    }\n\n    hide(callback) {\n        if (!this._config.isVisible) {\n            execute(callback);\n            return;\n        }\n\n        this._getElement().classList.remove(CLASS_NAME_SHOW$5);\n\n        this._emulateAnimation(() => {\n            this.dispose();\n            execute(callback);\n        });\n    }\n\n    dispose() {\n        if (!this._isAppended) {\n            return;\n        }\n\n        EventHandler.off(this._element, EVENT_MOUSEDOWN);\n\n        this._element.remove();\n\n        this._isAppended = false;\n    } // Private\n\n\n    _getElement() {\n        if (!this._element) {\n            const backdrop = document.createElement('div');\n            backdrop.className = this._config.className;\n\n            if (this._config.isAnimated) {\n                backdrop.classList.add(CLASS_NAME_FADE$4);\n            }\n\n            this._element = backdrop;\n        }\n\n        return this._element;\n    }\n\n    _configAfterMerge(config) {\n        // use getElement() with the default \"body\" to get a fresh Element on each instantiation\n        config.rootElement = getElement(config.rootElement);\n        return config;\n    }\n\n    _append() {\n        if (this._isAppended) {\n            return;\n        }\n\n        const element = this._getElement();\n\n        this._config.rootElement.append(element);\n\n        EventHandler.on(element, EVENT_MOUSEDOWN, () => {\n            execute(this._config.clickCallback);\n        });\n        this._isAppended = true;\n    }\n\n    _emulateAnimation(callback) {\n        executeAfterTransition(callback, this._getElement(), this._config.isAnimated);\n    }\n\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.3): util/focustrap.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * Constants\n */\n\nconst NAME$8 = 'focustrap';\nconst DATA_KEY$5 = 'bs.focustrap';\nconst EVENT_KEY$5 = `.${DATA_KEY$5}`;\nconst EVENT_FOCUSIN$2 = `focusin${EVENT_KEY$5}`;\nconst EVENT_KEYDOWN_TAB = `keydown.tab${EVENT_KEY$5}`;\nconst TAB_KEY = 'Tab';\nconst TAB_NAV_FORWARD = 'forward';\nconst TAB_NAV_BACKWARD = 'backward';\nconst Default$7 = {\n    autofocus: true,\n    trapElement: null // The element to trap focus inside of\n\n};\nconst DefaultType$7 = {\n    autofocus: 'boolean',\n    trapElement: 'element'\n};\n\n/**\n * Class definition\n */\n\nclass FocusTrap extends Config {\n    constructor(config) {\n        super();\n        this._config = this._getConfig(config);\n        this._isActive = false;\n        this._lastTabNavDirection = null;\n    } // Getters\n\n\n    static get Default() {\n        return Default$7;\n    }\n\n    static get DefaultType() {\n        return DefaultType$7;\n    }\n\n    static get NAME() {\n        return NAME$8;\n    } // Public\n\n\n    activate() {\n        if (this._isActive) {\n            return;\n        }\n\n        if (this._config.autofocus) {\n            this._config.trapElement.focus();\n        }\n\n        EventHandler.off(document, EVENT_KEY$5); // guard against infinite focus loop\n\n        EventHandler.on(document, EVENT_FOCUSIN$2, event => this._handleFocusin(event));\n        EventHandler.on(document, EVENT_KEYDOWN_TAB, event => this._handleKeydown(event));\n        this._isActive = true;\n    }\n\n    deactivate() {\n        if (!this._isActive) {\n            return;\n        }\n\n        this._isActive = false;\n        EventHandler.off(document, EVENT_KEY$5);\n    } // Private\n\n\n    _handleFocusin(event) {\n        const {\n            trapElement\n        } = this._config;\n\n        if (event.target === document || event.target === trapElement || trapElement.contains(event.target)) {\n            return;\n        }\n\n        const elements = SelectorEngine.focusableChildren(trapElement);\n\n        if (elements.length === 0) {\n            trapElement.focus();\n        } else if (this._lastTabNavDirection === TAB_NAV_BACKWARD) {\n            elements[elements.length - 1].focus();\n        } else {\n            elements[0].focus();\n        }\n    }\n\n    _handleKeydown(event) {\n        if (event.key !== TAB_KEY) {\n            return;\n        }\n\n        this._lastTabNavDirection = event.shiftKey ? TAB_NAV_BACKWARD : TAB_NAV_FORWARD;\n    }\n\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.3): modal.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * Constants\n */\n\nconst NAME$7 = 'modal';\nconst DATA_KEY$4 = 'bs.modal';\nconst EVENT_KEY$4 = `.${DATA_KEY$4}`;\nconst DATA_API_KEY$2 = '.data-api';\nconst ESCAPE_KEY$1 = 'Escape';\nconst EVENT_HIDE$4 = `hide${EVENT_KEY$4}`;\nconst EVENT_HIDE_PREVENTED$1 = `hidePrevented${EVENT_KEY$4}`;\nconst EVENT_HIDDEN$4 = `hidden${EVENT_KEY$4}`;\nconst EVENT_SHOW$4 = `show${EVENT_KEY$4}`;\nconst EVENT_SHOWN$4 = `shown${EVENT_KEY$4}`;\nconst EVENT_RESIZE$1 = `resize${EVENT_KEY$4}`;\nconst EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY$4}`;\nconst EVENT_MOUSEDOWN_DISMISS = `mousedown.dismiss${EVENT_KEY$4}`;\nconst EVENT_KEYDOWN_DISMISS$1 = `keydown.dismiss${EVENT_KEY$4}`;\nconst EVENT_CLICK_DATA_API$2 = `click${EVENT_KEY$4}${DATA_API_KEY$2}`;\nconst CLASS_NAME_OPEN = 'modal-open';\nconst CLASS_NAME_FADE$3 = 'fade';\nconst CLASS_NAME_SHOW$4 = 'show';\nconst CLASS_NAME_STATIC = 'modal-static';\nconst OPEN_SELECTOR$1 = '.modal.show';\nconst SELECTOR_DIALOG = '.modal-dialog';\nconst SELECTOR_MODAL_BODY = '.modal-body';\nconst SELECTOR_DATA_TOGGLE$2 = '[data-bs-toggle=\"modal\"]';\nconst Default$6 = {\n    backdrop: true,\n    focus: true,\n    keyboard: true\n};\nconst DefaultType$6 = {\n    backdrop: '(boolean|string)',\n    focus: 'boolean',\n    keyboard: 'boolean'\n};\n\n/**\n * Class definition\n */\n\nclass Modal extends BaseComponent {\n    constructor(element, config) {\n        super(element, config);\n        this._dialog = SelectorEngine.findOne(SELECTOR_DIALOG, this._element);\n        this._backdrop = this._initializeBackDrop();\n        this._focustrap = this._initializeFocusTrap();\n        this._isShown = false;\n        this._isTransitioning = false;\n        this._scrollBar = new ScrollBarHelper();\n\n        this._addEventListeners();\n    } // Getters\n\n\n    static get Default() {\n        return Default$6;\n    }\n\n    static get DefaultType() {\n        return DefaultType$6;\n    }\n\n    static get NAME() {\n        return NAME$7;\n    } // Public\n\n    static jQueryInterface(config, relatedTarget) {\n        return this.each(function () {\n            const data = Modal.getOrCreateInstance(this, config);\n\n            if (typeof config !== 'string') {\n                return;\n            }\n\n            if (typeof data[config] === 'undefined') {\n                throw new TypeError(`No method named \"${config}\"`);\n            }\n\n            data[config](relatedTarget);\n        });\n    }\n\n    toggle(relatedTarget) {\n        return this._isShown ? this.hide() : this.show(relatedTarget);\n    }\n\n    show(relatedTarget) {\n        if (this._isShown || this._isTransitioning) {\n            return;\n        }\n\n        const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$4, {\n            relatedTarget\n        });\n\n        if (showEvent.defaultPrevented) {\n            return;\n        }\n\n        this._isShown = true;\n        this._isTransitioning = true;\n\n        this._scrollBar.hide();\n\n        document.body.classList.add(CLASS_NAME_OPEN);\n\n        this._adjustDialog();\n\n        this._backdrop.show(() => this._showElement(relatedTarget));\n    }\n\n    hide() {\n        if (!this._isShown || this._isTransitioning) {\n            return;\n        }\n\n        const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$4);\n\n        if (hideEvent.defaultPrevented) {\n            return;\n        }\n\n        this._isShown = false;\n        this._isTransitioning = true;\n\n        this._focustrap.deactivate();\n\n        this._element.classList.remove(CLASS_NAME_SHOW$4);\n\n        this._queueCallback(() => this._hideModal(), this._element, this._isAnimated());\n    }\n\n    dispose() {\n        for (const htmlElement of [window, this._dialog]) {\n            EventHandler.off(htmlElement, EVENT_KEY$4);\n        }\n\n        this._backdrop.dispose();\n\n        this._focustrap.deactivate();\n\n        super.dispose();\n    }\n\n    handleUpdate() {\n        this._adjustDialog();\n    } // Private\n\n    _initializeBackDrop() {\n        return new Backdrop({\n            isVisible: Boolean(this._config.backdrop),\n            // 'static' option will be translated to true, and booleans will keep their value,\n            isAnimated: this._isAnimated()\n        });\n    }\n\n    _initializeFocusTrap() {\n        return new FocusTrap({\n            trapElement: this._element\n        });\n    }\n\n    _showElement(relatedTarget) {\n        // try to append dynamic modal\n        if (!document.body.contains(this._element)) {\n            document.body.append(this._element);\n        }\n\n        this._element.style.display = 'block';\n\n        this._element.removeAttribute('aria-hidden');\n\n        this._element.setAttribute('aria-modal', true);\n\n        this._element.setAttribute('role', 'dialog');\n\n        this._element.scrollTop = 0;\n        const modalBody = SelectorEngine.findOne(SELECTOR_MODAL_BODY, this._dialog);\n\n        if (modalBody) {\n            modalBody.scrollTop = 0;\n        }\n\n        reflow(this._element);\n\n        this._element.classList.add(CLASS_NAME_SHOW$4);\n\n        const transitionComplete = () => {\n            if (this._config.focus) {\n                this._focustrap.activate();\n            }\n\n            this._isTransitioning = false;\n            EventHandler.trigger(this._element, EVENT_SHOWN$4, {\n                relatedTarget\n            });\n        };\n\n        this._queueCallback(transitionComplete, this._dialog, this._isAnimated());\n    }\n\n    _addEventListeners() {\n        EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS$1, event => {\n            if (event.key !== ESCAPE_KEY$1) {\n                return;\n            }\n\n            if (this._config.keyboard) {\n                event.preventDefault();\n                this.hide();\n                return;\n            }\n\n            this._triggerBackdropTransition();\n        });\n        EventHandler.on(window, EVENT_RESIZE$1, () => {\n            if (this._isShown && !this._isTransitioning) {\n                this._adjustDialog();\n            }\n        });\n        EventHandler.on(this._element, EVENT_MOUSEDOWN_DISMISS, event => {\n            // a bad trick to segregate clicks that may start inside dialog but end outside, and avoid listen to scrollbar clicks\n            EventHandler.one(this._element, EVENT_CLICK_DISMISS, event2 => {\n                if (this._element !== event.target || this._element !== event2.target) {\n                    return;\n                }\n\n                if (this._config.backdrop === 'static') {\n                    this._triggerBackdropTransition();\n\n                    return;\n                }\n\n                if (this._config.backdrop) {\n                    this.hide();\n                }\n            });\n        });\n    }\n\n    _hideModal() {\n        this._element.style.display = 'none';\n\n        this._element.setAttribute('aria-hidden', true);\n\n        this._element.removeAttribute('aria-modal');\n\n        this._element.removeAttribute('role');\n\n        this._isTransitioning = false;\n\n        this._backdrop.hide(() => {\n            document.body.classList.remove(CLASS_NAME_OPEN);\n\n            this._resetAdjustments();\n\n            this._scrollBar.reset();\n\n            EventHandler.trigger(this._element, EVENT_HIDDEN$4);\n        });\n    }\n\n    _isAnimated() {\n        return this._element.classList.contains(CLASS_NAME_FADE$3);\n    }\n\n    _triggerBackdropTransition() {\n        const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED$1);\n\n        if (hideEvent.defaultPrevented) {\n            return;\n        }\n\n        const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;\n        const initialOverflowY = this._element.style.overflowY; // return if the following background transition hasn't yet completed\n\n        if (initialOverflowY === 'hidden' || this._element.classList.contains(CLASS_NAME_STATIC)) {\n            return;\n        }\n\n        if (!isModalOverflowing) {\n            this._element.style.overflowY = 'hidden';\n        }\n\n        this._element.classList.add(CLASS_NAME_STATIC);\n\n        this._queueCallback(() => {\n            this._element.classList.remove(CLASS_NAME_STATIC);\n\n            this._queueCallback(() => {\n                this._element.style.overflowY = initialOverflowY;\n            }, this._dialog);\n        }, this._dialog);\n\n        this._element.focus();\n    }\n\n    /**\n     * The following methods are used to handle overflowing modals\n     */\n\n\n    _adjustDialog() {\n        const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;\n\n        const scrollbarWidth = this._scrollBar.getWidth();\n\n        const isBodyOverflowing = scrollbarWidth > 0;\n\n        if (isBodyOverflowing && !isModalOverflowing) {\n            const property = isRTL() ? 'paddingLeft' : 'paddingRight';\n            this._element.style[property] = `${scrollbarWidth}px`;\n        }\n\n        if (!isBodyOverflowing && isModalOverflowing) {\n            const property = isRTL() ? 'paddingRight' : 'paddingLeft';\n            this._element.style[property] = `${scrollbarWidth}px`;\n        }\n    }\n\n    _resetAdjustments() {\n        this._element.style.paddingLeft = '';\n        this._element.style.paddingRight = '';\n    } // Static\n\n}\n\n/**\n * Data API implementation\n */\n\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$2, SELECTOR_DATA_TOGGLE$2, function (event) {\n    const target = getElementFromSelector(this);\n\n    if (['A', 'AREA'].includes(this.tagName)) {\n        event.preventDefault();\n    }\n\n    EventHandler.one(target, EVENT_SHOW$4, showEvent => {\n        if (showEvent.defaultPrevented) {\n            // only register focus restorer if modal will actually get shown\n            return;\n        }\n\n        EventHandler.one(target, EVENT_HIDDEN$4, () => {\n            if (isVisible(this)) {\n                this.focus();\n            }\n        });\n    }); // avoid conflict when clicking modal toggler while another one is open\n\n    const alreadyOpen = SelectorEngine.findOne(OPEN_SELECTOR$1);\n\n    if (alreadyOpen) {\n        Modal.getInstance(alreadyOpen).hide();\n    }\n\n    const data = Modal.getOrCreateInstance(target);\n    data.toggle(this);\n});\nenableDismissTrigger(Modal);\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Modal);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.3): offcanvas.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * Constants\n */\n\nconst NAME$6 = 'offcanvas';\nconst DATA_KEY$3 = 'bs.offcanvas';\nconst EVENT_KEY$3 = `.${DATA_KEY$3}`;\nconst DATA_API_KEY$1 = '.data-api';\nconst EVENT_LOAD_DATA_API$2 = `load${EVENT_KEY$3}${DATA_API_KEY$1}`;\nconst ESCAPE_KEY = 'Escape';\nconst CLASS_NAME_SHOW$3 = 'show';\nconst CLASS_NAME_SHOWING$1 = 'showing';\nconst CLASS_NAME_HIDING = 'hiding';\nconst CLASS_NAME_BACKDROP = 'offcanvas-backdrop';\nconst OPEN_SELECTOR = '.offcanvas.show';\nconst EVENT_SHOW$3 = `show${EVENT_KEY$3}`;\nconst EVENT_SHOWN$3 = `shown${EVENT_KEY$3}`;\nconst EVENT_HIDE$3 = `hide${EVENT_KEY$3}`;\nconst EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY$3}`;\nconst EVENT_HIDDEN$3 = `hidden${EVENT_KEY$3}`;\nconst EVENT_RESIZE = `resize${EVENT_KEY$3}`;\nconst EVENT_CLICK_DATA_API$1 = `click${EVENT_KEY$3}${DATA_API_KEY$1}`;\nconst EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY$3}`;\nconst SELECTOR_DATA_TOGGLE$1 = '[data-bs-toggle=\"offcanvas\"]';\nconst Default$5 = {\n    backdrop: true,\n    keyboard: true,\n    scroll: false\n};\nconst DefaultType$5 = {\n    backdrop: '(boolean|string)',\n    keyboard: 'boolean',\n    scroll: 'boolean'\n};\n\n/**\n * Class definition\n */\n\nclass Offcanvas extends BaseComponent {\n    constructor(element, config) {\n        super(element, config);\n        this._isShown = false;\n        this._backdrop = this._initializeBackDrop();\n        this._focustrap = this._initializeFocusTrap();\n\n        this._addEventListeners();\n    } // Getters\n\n\n    static get Default() {\n        return Default$5;\n    }\n\n    static get DefaultType() {\n        return DefaultType$5;\n    }\n\n    static get NAME() {\n        return NAME$6;\n    } // Public\n\n    static jQueryInterface(config) {\n        return this.each(function () {\n            const data = Offcanvas.getOrCreateInstance(this, config);\n\n            if (typeof config !== 'string') {\n                return;\n            }\n\n            if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n                throw new TypeError(`No method named \"${config}\"`);\n            }\n\n            data[config](this);\n        });\n    }\n\n    toggle(relatedTarget) {\n        return this._isShown ? this.hide() : this.show(relatedTarget);\n    }\n\n    show(relatedTarget) {\n        if (this._isShown) {\n            return;\n        }\n\n        const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$3, {\n            relatedTarget\n        });\n\n        if (showEvent.defaultPrevented) {\n            return;\n        }\n\n        this._isShown = true;\n\n        this._backdrop.show();\n\n        if (!this._config.scroll) {\n            new ScrollBarHelper().hide();\n        }\n\n        this._element.setAttribute('aria-modal', true);\n\n        this._element.setAttribute('role', 'dialog');\n\n        this._element.classList.add(CLASS_NAME_SHOWING$1);\n\n        const completeCallBack = () => {\n            if (!this._config.scroll || this._config.backdrop) {\n                this._focustrap.activate();\n            }\n\n            this._element.classList.add(CLASS_NAME_SHOW$3);\n\n            this._element.classList.remove(CLASS_NAME_SHOWING$1);\n\n            EventHandler.trigger(this._element, EVENT_SHOWN$3, {\n                relatedTarget\n            });\n        };\n\n        this._queueCallback(completeCallBack, this._element, true);\n    }\n\n    hide() {\n        if (!this._isShown) {\n            return;\n        }\n\n        const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$3);\n\n        if (hideEvent.defaultPrevented) {\n            return;\n        }\n\n        this._focustrap.deactivate();\n\n        this._element.blur();\n\n        this._isShown = false;\n\n        this._element.classList.add(CLASS_NAME_HIDING);\n\n        this._backdrop.hide();\n\n        const completeCallback = () => {\n            this._element.classList.remove(CLASS_NAME_SHOW$3, CLASS_NAME_HIDING);\n\n            this._element.removeAttribute('aria-modal');\n\n            this._element.removeAttribute('role');\n\n            if (!this._config.scroll) {\n                new ScrollBarHelper().reset();\n            }\n\n            EventHandler.trigger(this._element, EVENT_HIDDEN$3);\n        };\n\n        this._queueCallback(completeCallback, this._element, true);\n    }\n\n    dispose() {\n        this._backdrop.dispose();\n\n        this._focustrap.deactivate();\n\n        super.dispose();\n    } // Private\n\n    _initializeBackDrop() {\n        const clickCallback = () => {\n            if (this._config.backdrop === 'static') {\n                EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED);\n                return;\n            }\n\n            this.hide();\n        }; // 'static' option will be translated to true, and booleans will keep their value\n\n\n        const isVisible = Boolean(this._config.backdrop);\n        return new Backdrop({\n            className: CLASS_NAME_BACKDROP,\n            isVisible,\n            isAnimated: true,\n            rootElement: this._element.parentNode,\n            clickCallback: isVisible ? clickCallback : null\n        });\n    }\n\n    _initializeFocusTrap() {\n        return new FocusTrap({\n            trapElement: this._element\n        });\n    }\n\n    _addEventListeners() {\n        EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, event => {\n            if (event.key !== ESCAPE_KEY) {\n                return;\n            }\n\n            if (!this._config.keyboard) {\n                EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED);\n                return;\n            }\n\n            this.hide();\n        });\n    } // Static\n\n}\n\n/**\n * Data API implementation\n */\n\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$1, SELECTOR_DATA_TOGGLE$1, function (event) {\n    const target = getElementFromSelector(this);\n\n    if (['A', 'AREA'].includes(this.tagName)) {\n        event.preventDefault();\n    }\n\n    if (isDisabled(this)) {\n        return;\n    }\n\n    EventHandler.one(target, EVENT_HIDDEN$3, () => {\n        // focus on trigger when it is closed\n        if (isVisible(this)) {\n            this.focus();\n        }\n    }); // avoid conflict when clicking a toggler of an offcanvas, while another is open\n\n    const alreadyOpen = SelectorEngine.findOne(OPEN_SELECTOR);\n\n    if (alreadyOpen && alreadyOpen !== target) {\n        Offcanvas.getInstance(alreadyOpen).hide();\n    }\n\n    const data = Offcanvas.getOrCreateInstance(target);\n    data.toggle(this);\n});\nEventHandler.on(window, EVENT_LOAD_DATA_API$2, () => {\n    for (const selector of SelectorEngine.find(OPEN_SELECTOR)) {\n        Offcanvas.getOrCreateInstance(selector).show();\n    }\n});\nEventHandler.on(window, EVENT_RESIZE, () => {\n    for (const element of SelectorEngine.find('[aria-modal][class*=show][class*=offcanvas-]')) {\n        if (getComputedStyle(element).position !== 'fixed') {\n            Offcanvas.getOrCreateInstance(element).hide();\n        }\n    }\n});\nenableDismissTrigger(Offcanvas);\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Offcanvas);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.3): util/sanitizer.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\nconst uriAttributes = new Set(['background', 'cite', 'href', 'itemtype', 'longdesc', 'poster', 'src', 'xlink:href']);\nconst ARIA_ATTRIBUTE_PATTERN = /^aria-[\\w-]*$/i;\n/**\n * A pattern that recognizes a commonly useful subset of URLs that are safe.\n *\n * Shout-out to Angular https://github.com/angular/angular/blob/12.2.x/packages/core/src/sanitization/url_sanitizer.ts\n */\n\nconst SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file|sms):|[^#&/:?]*(?:[#/?]|$))/i;\n/**\n * A pattern that matches safe data URLs. Only matches image, video and audio types.\n *\n * Shout-out to Angular https://github.com/angular/angular/blob/12.2.x/packages/core/src/sanitization/url_sanitizer.ts\n */\n\nconst DATA_URL_PATTERN = /^data:(?:image\\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\\/(?:mpeg|mp4|ogg|webm)|audio\\/(?:mp3|oga|ogg|opus));base64,[\\d+/a-z]+=*$/i;\n\nconst allowedAttribute = (attribute, allowedAttributeList) => {\n    const attributeName = attribute.nodeName.toLowerCase();\n\n    if (allowedAttributeList.includes(attributeName)) {\n        if (uriAttributes.has(attributeName)) {\n            return Boolean(SAFE_URL_PATTERN.test(attribute.nodeValue) || DATA_URL_PATTERN.test(attribute.nodeValue));\n        }\n\n        return true;\n    } // Check if a regular expression validates the attribute.\n\n\n    return allowedAttributeList.filter(attributeRegex => attributeRegex instanceof RegExp).some(regex => regex.test(attributeName));\n};\n\nconst DefaultAllowlist = {\n    // Global attributes allowed on any supplied element below.\n    '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],\n    a: ['target', 'href', 'title', 'rel'],\n    area: [],\n    b: [],\n    br: [],\n    col: [],\n    code: [],\n    div: [],\n    em: [],\n    hr: [],\n    h1: [],\n    h2: [],\n    h3: [],\n    h4: [],\n    h5: [],\n    h6: [],\n    i: [],\n    img: ['src', 'srcset', 'alt', 'title', 'width', 'height'],\n    li: [],\n    ol: [],\n    p: [],\n    pre: [],\n    s: [],\n    small: [],\n    span: [],\n    sub: [],\n    sup: [],\n    strong: [],\n    u: [],\n    ul: []\n};\n\nfunction sanitizeHtml(unsafeHtml, allowList, sanitizeFunction) {\n    if (!unsafeHtml.length) {\n        return unsafeHtml;\n    }\n\n    if (sanitizeFunction && typeof sanitizeFunction === 'function') {\n        return sanitizeFunction(unsafeHtml);\n    }\n\n    const domParser = new window.DOMParser();\n    const createdDocument = domParser.parseFromString(unsafeHtml, 'text/html');\n    const elements = [].concat(...createdDocument.body.querySelectorAll('*'));\n\n    for (const element of elements) {\n        const elementName = element.nodeName.toLowerCase();\n\n        if (!Object.keys(allowList).includes(elementName)) {\n            element.remove();\n            continue;\n        }\n\n        const attributeList = [].concat(...element.attributes);\n        const allowedAttributes = [].concat(allowList['*'] || [], allowList[elementName] || []);\n\n        for (const attribute of attributeList) {\n            if (!allowedAttribute(attribute, allowedAttributes)) {\n                element.removeAttribute(attribute.nodeName);\n            }\n        }\n    }\n\n    return createdDocument.body.innerHTML;\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.3): util/template-factory.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * Constants\n */\n\nconst NAME$5 = 'TemplateFactory';\nconst Default$4 = {\n    allowList: DefaultAllowlist,\n    content: {},\n    // { selector : text ,  selector2 : text2 , }\n    extraClass: '',\n    html: false,\n    sanitize: true,\n    sanitizeFn: null,\n    template: '<div></div>'\n};\nconst DefaultType$4 = {\n    allowList: 'object',\n    content: 'object',\n    extraClass: '(string|function)',\n    html: 'boolean',\n    sanitize: 'boolean',\n    sanitizeFn: '(null|function)',\n    template: 'string'\n};\nconst DefaultContentType = {\n    entry: '(string|element|function|null)',\n    selector: '(string|element)'\n};\n\n/**\n * Class definition\n */\n\nclass TemplateFactory extends Config {\n    constructor(config) {\n        super();\n        this._config = this._getConfig(config);\n    } // Getters\n\n\n    static get Default() {\n        return Default$4;\n    }\n\n    static get DefaultType() {\n        return DefaultType$4;\n    }\n\n    static get NAME() {\n        return NAME$5;\n    } // Public\n\n\n    getContent() {\n        return Object.values(this._config.content).map(config => this._resolvePossibleFunction(config)).filter(Boolean);\n    }\n\n    hasContent() {\n        return this.getContent().length > 0;\n    }\n\n    changeContent(content) {\n        this._checkContent(content);\n\n        this._config.content = {\n            ...this._config.content,\n            ...content\n        };\n        return this;\n    }\n\n    toHtml() {\n        const templateWrapper = document.createElement('div');\n        templateWrapper.innerHTML = this._maybeSanitize(this._config.template);\n\n        for (const [selector, text] of Object.entries(this._config.content)) {\n            this._setContent(templateWrapper, text, selector);\n        }\n\n        const template = templateWrapper.children[0];\n\n        const extraClass = this._resolvePossibleFunction(this._config.extraClass);\n\n        if (extraClass) {\n            template.classList.add(...extraClass.split(' '));\n        }\n\n        return template;\n    } // Private\n\n\n    _typeCheckConfig(config) {\n        super._typeCheckConfig(config);\n\n        this._checkContent(config.content);\n    }\n\n    _checkContent(arg) {\n        for (const [selector, content] of Object.entries(arg)) {\n            super._typeCheckConfig({\n                selector,\n                entry: content\n            }, DefaultContentType);\n        }\n    }\n\n    _setContent(template, content, selector) {\n        const templateElement = SelectorEngine.findOne(selector, template);\n\n        if (!templateElement) {\n            return;\n        }\n\n        content = this._resolvePossibleFunction(content);\n\n        if (!content) {\n            templateElement.remove();\n            return;\n        }\n\n        if (isElement(content)) {\n            this._putElementInTemplate(getElement(content), templateElement);\n\n            return;\n        }\n\n        if (this._config.html) {\n            templateElement.innerHTML = this._maybeSanitize(content);\n            return;\n        }\n\n        templateElement.textContent = content;\n    }\n\n    _maybeSanitize(arg) {\n        return this._config.sanitize ? sanitizeHtml(arg, this._config.allowList, this._config.sanitizeFn) : arg;\n    }\n\n    _resolvePossibleFunction(arg) {\n        return typeof arg === 'function' ? arg(this) : arg;\n    }\n\n    _putElementInTemplate(element, templateElement) {\n        if (this._config.html) {\n            templateElement.innerHTML = '';\n            templateElement.append(element);\n            return;\n        }\n\n        templateElement.textContent = element.textContent;\n    }\n\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.3): tooltip.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * Constants\n */\n\nconst NAME$4 = 'tooltip';\nconst DISALLOWED_ATTRIBUTES = new Set(['sanitize', 'allowList', 'sanitizeFn']);\nconst CLASS_NAME_FADE$2 = 'fade';\nconst CLASS_NAME_MODAL = 'modal';\nconst CLASS_NAME_SHOW$2 = 'show';\nconst SELECTOR_TOOLTIP_INNER = '.tooltip-inner';\nconst SELECTOR_MODAL = `.${CLASS_NAME_MODAL}`;\nconst EVENT_MODAL_HIDE = 'hide.bs.modal';\nconst TRIGGER_HOVER = 'hover';\nconst TRIGGER_FOCUS = 'focus';\nconst TRIGGER_CLICK = 'click';\nconst TRIGGER_MANUAL = 'manual';\nconst EVENT_HIDE$2 = 'hide';\nconst EVENT_HIDDEN$2 = 'hidden';\nconst EVENT_SHOW$2 = 'show';\nconst EVENT_SHOWN$2 = 'shown';\nconst EVENT_INSERTED = 'inserted';\nconst EVENT_CLICK$1 = 'click';\nconst EVENT_FOCUSIN$1 = 'focusin';\nconst EVENT_FOCUSOUT$1 = 'focusout';\nconst EVENT_MOUSEENTER = 'mouseenter';\nconst EVENT_MOUSELEAVE = 'mouseleave';\nconst AttachmentMap = {\n    AUTO: 'auto',\n    TOP: 'top',\n    RIGHT: isRTL() ? 'left' : 'right',\n    BOTTOM: 'bottom',\n    LEFT: isRTL() ? 'right' : 'left'\n};\nconst Default$3 = {\n    allowList: DefaultAllowlist,\n    animation: true,\n    boundary: 'clippingParents',\n    container: false,\n    customClass: '',\n    delay: 0,\n    fallbackPlacements: ['top', 'right', 'bottom', 'left'],\n    html: false,\n    offset: [0, 0],\n    placement: 'top',\n    popperConfig: null,\n    sanitize: true,\n    sanitizeFn: null,\n    selector: false,\n    template: '<div class=\"tooltip\" role=\"tooltip\">' + '<div class=\"tooltip-arrow\"></div>' + '<div class=\"tooltip-inner\"></div>' + '</div>',\n    title: '',\n    trigger: 'hover focus'\n};\nconst DefaultType$3 = {\n    allowList: 'object',\n    animation: 'boolean',\n    boundary: '(string|element)',\n    container: '(string|element|boolean)',\n    customClass: '(string|function)',\n    delay: '(number|object)',\n    fallbackPlacements: 'array',\n    html: 'boolean',\n    offset: '(array|string|function)',\n    placement: '(string|function)',\n    popperConfig: '(null|object|function)',\n    sanitize: 'boolean',\n    sanitizeFn: '(null|function)',\n    selector: '(string|boolean)',\n    template: 'string',\n    title: '(string|element|function)',\n    trigger: 'string'\n};\n\n/**\n * Class definition\n */\n\nclass Tooltip extends BaseComponent {\n    constructor(element, config) {\n        if (typeof Popper === 'undefined') {\n            throw new TypeError('Bootstrap\\'s tooltips require Popper (https://popper.js.org)');\n        }\n\n        super(element, config); // Private\n\n        this._isEnabled = true;\n        this._timeout = 0;\n        this._isHovered = null;\n        this._activeTrigger = {};\n        this._popper = null;\n        this._templateFactory = null;\n        this._newContent = null; // Protected\n\n        this.tip = null;\n\n        this._setListeners();\n\n        if (!this._config.selector) {\n            this._fixTitle();\n        }\n    } // Getters\n\n\n    static get Default() {\n        return Default$3;\n    }\n\n    static get DefaultType() {\n        return DefaultType$3;\n    }\n\n    static get NAME() {\n        return NAME$4;\n    } // Public\n\n    static jQueryInterface(config) {\n        return this.each(function () {\n            const data = Tooltip.getOrCreateInstance(this, config);\n\n            if (typeof config !== 'string') {\n                return;\n            }\n\n            if (typeof data[config] === 'undefined') {\n                throw new TypeError(`No method named \"${config}\"`);\n            }\n\n            data[config]();\n        });\n    }\n\n    enable() {\n        this._isEnabled = true;\n    }\n\n    disable() {\n        this._isEnabled = false;\n    }\n\n    toggleEnabled() {\n        this._isEnabled = !this._isEnabled;\n    }\n\n    toggle() {\n        if (!this._isEnabled) {\n            return;\n        }\n\n        this._activeTrigger.click = !this._activeTrigger.click;\n\n        if (this._isShown()) {\n            this._leave();\n\n            return;\n        }\n\n        this._enter();\n    }\n\n    dispose() {\n        clearTimeout(this._timeout);\n        EventHandler.off(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE, this._hideModalHandler);\n\n        if (this._element.getAttribute('data-bs-original-title')) {\n            this._element.setAttribute('title', this._element.getAttribute('data-bs-original-title'));\n        }\n\n        this._disposePopper();\n\n        super.dispose();\n    }\n\n    show() {\n        if (this._element.style.display === 'none') {\n            throw new Error('Please use show on visible elements');\n        }\n\n        if (!(this._isWithContent() && this._isEnabled)) {\n            return;\n        }\n\n        const showEvent = EventHandler.trigger(this._element, this.constructor.eventName(EVENT_SHOW$2));\n        const shadowRoot = findShadowRoot(this._element);\n\n        const isInTheDom = (shadowRoot || this._element.ownerDocument.documentElement).contains(this._element);\n\n        if (showEvent.defaultPrevented || !isInTheDom) {\n            return;\n        } // todo v6 remove this OR make it optional\n\n\n        this._disposePopper();\n\n        const tip = this._getTipElement();\n\n        this._element.setAttribute('aria-describedby', tip.getAttribute('id'));\n\n        const {\n            container\n        } = this._config;\n\n        if (!this._element.ownerDocument.documentElement.contains(this.tip)) {\n            container.append(tip);\n            EventHandler.trigger(this._element, this.constructor.eventName(EVENT_INSERTED));\n        }\n\n        this._popper = this._createPopper(tip);\n        tip.classList.add(CLASS_NAME_SHOW$2); // If this is a touch-enabled device we add extra\n        // empty mouseover listeners to the body's immediate children;\n        // only needed because of broken event delegation on iOS\n        // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n\n        if ('ontouchstart' in document.documentElement) {\n            for (const element of [].concat(...document.body.children)) {\n                EventHandler.on(element, 'mouseover', noop);\n            }\n        }\n\n        const complete = () => {\n            EventHandler.trigger(this._element, this.constructor.eventName(EVENT_SHOWN$2));\n\n            if (this._isHovered === false) {\n                this._leave();\n            }\n\n            this._isHovered = false;\n        };\n\n        this._queueCallback(complete, this.tip, this._isAnimated());\n    }\n\n    hide() {\n        if (!this._isShown()) {\n            return;\n        }\n\n        const hideEvent = EventHandler.trigger(this._element, this.constructor.eventName(EVENT_HIDE$2));\n\n        if (hideEvent.defaultPrevented) {\n            return;\n        }\n\n        const tip = this._getTipElement();\n\n        tip.classList.remove(CLASS_NAME_SHOW$2); // If this is a touch-enabled device we remove the extra\n        // empty mouseover listeners we added for iOS support\n\n        if ('ontouchstart' in document.documentElement) {\n            for (const element of [].concat(...document.body.children)) {\n                EventHandler.off(element, 'mouseover', noop);\n            }\n        }\n\n        this._activeTrigger[TRIGGER_CLICK] = false;\n        this._activeTrigger[TRIGGER_FOCUS] = false;\n        this._activeTrigger[TRIGGER_HOVER] = false;\n        this._isHovered = null; // it is a trick to support manual triggering\n\n        const complete = () => {\n            if (this._isWithActiveTrigger()) {\n                return;\n            }\n\n            if (!this._isHovered) {\n                this._disposePopper();\n            }\n\n            this._element.removeAttribute('aria-describedby');\n\n            EventHandler.trigger(this._element, this.constructor.eventName(EVENT_HIDDEN$2));\n        };\n\n        this._queueCallback(complete, this.tip, this._isAnimated());\n    }\n\n    update() {\n        if (this._popper) {\n            this._popper.update();\n        }\n    } // Protected\n\n    _isWithContent() {\n        return Boolean(this._getTitle());\n    }\n\n    _getTipElement() {\n        if (!this.tip) {\n            this.tip = this._createTipElement(this._newContent || this._getContentForTemplate());\n        }\n\n        return this.tip;\n    }\n\n    _createTipElement(content) {\n        const tip = this._getTemplateFactory(content).toHtml(); // todo: remove this check on v6\n\n\n        if (!tip) {\n            return null;\n        }\n\n        tip.classList.remove(CLASS_NAME_FADE$2, CLASS_NAME_SHOW$2); // todo: on v6 the following can be achieved with CSS only\n\n        tip.classList.add(`bs-${this.constructor.NAME}-auto`);\n        const tipId = getUID(this.constructor.NAME).toString();\n        tip.setAttribute('id', tipId);\n\n        if (this._isAnimated()) {\n            tip.classList.add(CLASS_NAME_FADE$2);\n        }\n\n        return tip;\n    }\n\n    setContent(content) {\n        this._newContent = content;\n\n        if (this._isShown()) {\n            this._disposePopper();\n\n            this.show();\n        }\n    }\n\n    _getTemplateFactory(content) {\n        if (this._templateFactory) {\n            this._templateFactory.changeContent(content);\n        } else {\n            this._templateFactory = new TemplateFactory({\n                ...this._config,\n                // the `content` var has to be after `this._config`\n                // to override config.content in case of popover\n                content,\n                extraClass: this._resolvePossibleFunction(this._config.customClass)\n            });\n        }\n\n        return this._templateFactory;\n    }\n\n    _getContentForTemplate() {\n        return {\n            [SELECTOR_TOOLTIP_INNER]: this._getTitle()\n        };\n    }\n\n    _getTitle() {\n        return this._resolvePossibleFunction(this._config.title) || this._element.getAttribute('data-bs-original-title');\n    } // Private\n\n    _initializeOnDelegatedTarget(event) {\n        return this.constructor.getOrCreateInstance(event.delegateTarget, this._getDelegateConfig());\n    }\n\n    _isAnimated() {\n        return this._config.animation || this.tip && this.tip.classList.contains(CLASS_NAME_FADE$2);\n    }\n\n    _isShown() {\n        return this.tip && this.tip.classList.contains(CLASS_NAME_SHOW$2);\n    }\n\n    _createPopper(tip) {\n        const placement = typeof this._config.placement === 'function' ? this._config.placement.call(this, tip, this._element) : this._config.placement;\n        const attachment = AttachmentMap[placement.toUpperCase()];\n        return Popper.createPopper(this._element, tip, this._getPopperConfig(attachment));\n    }\n\n    _getOffset() {\n        const {\n            offset\n        } = this._config;\n\n        if (typeof offset === 'string') {\n            return offset.split(',').map(value => Number.parseInt(value, 10));\n        }\n\n        if (typeof offset === 'function') {\n            return popperData => offset(popperData, this._element);\n        }\n\n        return offset;\n    }\n\n    _resolvePossibleFunction(arg) {\n        return typeof arg === 'function' ? arg.call(this._element) : arg;\n    }\n\n    _getPopperConfig(attachment) {\n        const defaultBsPopperConfig = {\n            placement: attachment,\n            modifiers: [{\n                name: 'flip',\n                options: {\n                    fallbackPlacements: this._config.fallbackPlacements\n                }\n            }, {\n                name: 'offset',\n                options: {\n                    offset: this._getOffset()\n                }\n            }, {\n                name: 'preventOverflow',\n                options: {\n                    boundary: this._config.boundary\n                }\n            }, {\n                name: 'arrow',\n                options: {\n                    element: `.${this.constructor.NAME}-arrow`\n                }\n            }, {\n                name: 'preSetPlacement',\n                enabled: true,\n                phase: 'beforeMain',\n                fn: data => {\n                    // Pre-set Popper's placement attribute in order to read the arrow sizes properly.\n                    // Otherwise, Popper mixes up the width and height dimensions since the initial arrow style is for top placement\n                    this._getTipElement().setAttribute('data-popper-placement', data.state.placement);\n                }\n            }]\n        };\n        return {\n            ...defaultBsPopperConfig,\n            ...(typeof this._config.popperConfig === 'function' ? this._config.popperConfig(defaultBsPopperConfig) : this._config.popperConfig)\n        };\n    }\n\n    _setListeners() {\n        const triggers = this._config.trigger.split(' ');\n\n        for (const trigger of triggers) {\n            if (trigger === 'click') {\n                EventHandler.on(this._element, this.constructor.eventName(EVENT_CLICK$1), this._config.selector, event => {\n                    const context = this._initializeOnDelegatedTarget(event);\n\n                    context.toggle();\n                });\n            } else if (trigger !== TRIGGER_MANUAL) {\n                const eventIn = trigger === TRIGGER_HOVER ? this.constructor.eventName(EVENT_MOUSEENTER) : this.constructor.eventName(EVENT_FOCUSIN$1);\n                const eventOut = trigger === TRIGGER_HOVER ? this.constructor.eventName(EVENT_MOUSELEAVE) : this.constructor.eventName(EVENT_FOCUSOUT$1);\n                EventHandler.on(this._element, eventIn, this._config.selector, event => {\n                    const context = this._initializeOnDelegatedTarget(event);\n\n                    context._activeTrigger[event.type === 'focusin' ? TRIGGER_FOCUS : TRIGGER_HOVER] = true;\n\n                    context._enter();\n                });\n                EventHandler.on(this._element, eventOut, this._config.selector, event => {\n                    const context = this._initializeOnDelegatedTarget(event);\n\n                    context._activeTrigger[event.type === 'focusout' ? TRIGGER_FOCUS : TRIGGER_HOVER] = context._element.contains(event.relatedTarget);\n\n                    context._leave();\n                });\n            }\n        }\n\n        this._hideModalHandler = () => {\n            if (this._element) {\n                this.hide();\n            }\n        };\n\n        EventHandler.on(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE, this._hideModalHandler);\n    }\n\n    _fixTitle() {\n        const title = this._element.getAttribute('title');\n\n        if (!title) {\n            return;\n        }\n\n        if (!this._element.getAttribute('aria-label') && !this._element.textContent.trim()) {\n            this._element.setAttribute('aria-label', title);\n        }\n\n        this._element.setAttribute('data-bs-original-title', title); // DO NOT USE IT. Is only for backwards compatibility\n\n\n        this._element.removeAttribute('title');\n    }\n\n    _enter() {\n        if (this._isShown() || this._isHovered) {\n            this._isHovered = true;\n            return;\n        }\n\n        this._isHovered = true;\n\n        this._setTimeout(() => {\n            if (this._isHovered) {\n                this.show();\n            }\n        }, this._config.delay.show);\n    }\n\n    _leave() {\n        if (this._isWithActiveTrigger()) {\n            return;\n        }\n\n        this._isHovered = false;\n\n        this._setTimeout(() => {\n            if (!this._isHovered) {\n                this.hide();\n            }\n        }, this._config.delay.hide);\n    }\n\n    _setTimeout(handler, timeout) {\n        clearTimeout(this._timeout);\n        this._timeout = setTimeout(handler, timeout);\n    }\n\n    _isWithActiveTrigger() {\n        return Object.values(this._activeTrigger).includes(true);\n    }\n\n    _getConfig(config) {\n        const dataAttributes = Manipulator.getDataAttributes(this._element);\n\n        for (const dataAttribute of Object.keys(dataAttributes)) {\n            if (DISALLOWED_ATTRIBUTES.has(dataAttribute)) {\n                delete dataAttributes[dataAttribute];\n            }\n        }\n\n        config = {\n            ...dataAttributes,\n            ...(typeof config === 'object' && config ? config : {})\n        };\n        config = this._mergeConfigObj(config);\n        config = this._configAfterMerge(config);\n\n        this._typeCheckConfig(config);\n\n        return config;\n    }\n\n    _configAfterMerge(config) {\n        config.container = config.container === false ? document.body : getElement(config.container);\n\n        if (typeof config.delay === 'number') {\n            config.delay = {\n                show: config.delay,\n                hide: config.delay\n            };\n        }\n\n        if (typeof config.title === 'number') {\n            config.title = config.title.toString();\n        }\n\n        if (typeof config.content === 'number') {\n            config.content = config.content.toString();\n        }\n\n        return config;\n    }\n\n    _getDelegateConfig() {\n        const config = {};\n\n        for (const key in this._config) {\n            if (this.constructor.Default[key] !== this._config[key]) {\n                config[key] = this._config[key];\n            }\n        }\n\n        config.selector = false;\n        config.trigger = 'manual'; // In the future can be replaced with:\n        // const keysWithDifferentValues = Object.entries(this._config).filter(entry => this.constructor.Default[entry[0]] !== this._config[entry[0]])\n        // `Object.fromEntries(keysWithDifferentValues)`\n\n        return config;\n    }\n\n    _disposePopper() {\n        if (this._popper) {\n            this._popper.destroy();\n\n            this._popper = null;\n        }\n\n        if (this.tip) {\n            this.tip.remove();\n            this.tip = null;\n        }\n    } // Static\n\n}\n\n/**\n * jQuery\n */\n\n\ndefineJQueryPlugin(Tooltip);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.3): popover.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * Constants\n */\n\nconst NAME$3 = 'popover';\nconst SELECTOR_TITLE = '.popover-header';\nconst SELECTOR_CONTENT = '.popover-body';\nconst Default$2 = {\n    ...Tooltip.Default,\n    content: '',\n    offset: [0, 8],\n    placement: 'right',\n    template: '<div class=\"popover\" role=\"tooltip\">' + '<div class=\"popover-arrow\"></div>' + '<h3 class=\"popover-header\"></h3>' + '<div class=\"popover-body\"></div>' + '</div>',\n    trigger: 'click'\n};\nconst DefaultType$2 = {\n    ...Tooltip.DefaultType,\n    content: '(null|string|element|function)'\n};\n\n/**\n * Class definition\n */\n\nclass Popover extends Tooltip {\n    // Getters\n    static get Default() {\n        return Default$2;\n    }\n\n    static get DefaultType() {\n        return DefaultType$2;\n    }\n\n    static get NAME() {\n        return NAME$3;\n    } // Overrides\n\n    static jQueryInterface(config) {\n        return this.each(function () {\n            const data = Popover.getOrCreateInstance(this, config);\n\n            if (typeof config !== 'string') {\n                return;\n            }\n\n            if (typeof data[config] === 'undefined') {\n                throw new TypeError(`No method named \"${config}\"`);\n            }\n\n            data[config]();\n        });\n    }\n\n    _isWithContent() {\n        return this._getTitle() || this._getContent();\n    } // Private\n\n    _getContentForTemplate() {\n        return {\n            [SELECTOR_TITLE]: this._getTitle(),\n            [SELECTOR_CONTENT]: this._getContent()\n        };\n    }\n\n    _getContent() {\n        return this._resolvePossibleFunction(this._config.content);\n    } // Static\n\n}\n\n/**\n * jQuery\n */\n\n\ndefineJQueryPlugin(Popover);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.3): scrollspy.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * Constants\n */\n\nconst NAME$2 = 'scrollspy';\nconst DATA_KEY$2 = 'bs.scrollspy';\nconst EVENT_KEY$2 = `.${DATA_KEY$2}`;\nconst DATA_API_KEY = '.data-api';\nconst EVENT_ACTIVATE = `activate${EVENT_KEY$2}`;\nconst EVENT_CLICK = `click${EVENT_KEY$2}`;\nconst EVENT_LOAD_DATA_API$1 = `load${EVENT_KEY$2}${DATA_API_KEY}`;\nconst CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item';\nconst CLASS_NAME_ACTIVE$1 = 'active';\nconst SELECTOR_DATA_SPY = '[data-bs-spy=\"scroll\"]';\nconst SELECTOR_TARGET_LINKS = '[href]';\nconst SELECTOR_NAV_LIST_GROUP = '.nav, .list-group';\nconst SELECTOR_NAV_LINKS = '.nav-link';\nconst SELECTOR_NAV_ITEMS = '.nav-item';\nconst SELECTOR_LIST_ITEMS = '.list-group-item';\nconst SELECTOR_LINK_ITEMS = `${SELECTOR_NAV_LINKS}, ${SELECTOR_NAV_ITEMS} > ${SELECTOR_NAV_LINKS}, ${SELECTOR_LIST_ITEMS}`;\nconst SELECTOR_DROPDOWN = '.dropdown';\nconst SELECTOR_DROPDOWN_TOGGLE$1 = '.dropdown-toggle';\nconst Default$1 = {\n    offset: null,\n    // TODO: v6 @deprecated, keep it for backwards compatibility reasons\n    rootMargin: '0px 0px -25%',\n    smoothScroll: false,\n    target: null,\n    threshold: [0.1, 0.5, 1]\n};\nconst DefaultType$1 = {\n    offset: '(number|null)',\n    // TODO v6 @deprecated, keep it for backwards compatibility reasons\n    rootMargin: 'string',\n    smoothScroll: 'boolean',\n    target: 'element',\n    threshold: 'array'\n};\n\n/**\n * Class definition\n */\n\nclass ScrollSpy extends BaseComponent {\n    constructor(element, config) {\n        super(element, config); // this._element is the observablesContainer and config.target the menu links wrapper\n\n        this._targetLinks = new Map();\n        this._observableSections = new Map();\n        this._rootElement = getComputedStyle(this._element).overflowY === 'visible' ? null : this._element;\n        this._activeTarget = null;\n        this._observer = null;\n        this._previousScrollData = {\n            visibleEntryTop: 0,\n            parentScrollTop: 0\n        };\n        this.refresh(); // initialize\n    } // Getters\n\n\n    static get Default() {\n        return Default$1;\n    }\n\n    static get DefaultType() {\n        return DefaultType$1;\n    }\n\n    static get NAME() {\n        return NAME$2;\n    } // Public\n\n    static jQueryInterface(config) {\n        return this.each(function () {\n            const data = ScrollSpy.getOrCreateInstance(this, config);\n\n            if (typeof config !== 'string') {\n                return;\n            }\n\n            if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n                throw new TypeError(`No method named \"${config}\"`);\n            }\n\n            data[config]();\n        });\n    }\n\n    refresh() {\n        this._initializeTargetsAndObservables();\n\n        this._maybeEnableSmoothScroll();\n\n        if (this._observer) {\n            this._observer.disconnect();\n        } else {\n            this._observer = this._getNewObserver();\n        }\n\n        for (const section of this._observableSections.values()) {\n            this._observer.observe(section);\n        }\n    }\n\n    dispose() {\n        this._observer.disconnect();\n\n        super.dispose();\n    } // Private\n\n    _configAfterMerge(config) {\n        // TODO: on v6 target should be given explicitly & remove the {target: 'ss-target'} case\n        config.target = getElement(config.target) || document.body; // TODO: v6 Only for backwards compatibility reasons. Use rootMargin only\n\n        config.rootMargin = config.offset ? `${config.offset}px 0px -30%` : config.rootMargin;\n\n        if (typeof config.threshold === 'string') {\n            config.threshold = config.threshold.split(',').map(value => Number.parseFloat(value));\n        }\n\n        return config;\n    }\n\n    _maybeEnableSmoothScroll() {\n        if (!this._config.smoothScroll) {\n            return;\n        } // unregister any previous listeners\n\n\n        EventHandler.off(this._config.target, EVENT_CLICK);\n        EventHandler.on(this._config.target, EVENT_CLICK, SELECTOR_TARGET_LINKS, event => {\n            const observableSection = this._observableSections.get(event.target.hash);\n\n            if (observableSection) {\n                event.preventDefault();\n                const root = this._rootElement || window;\n                const height = observableSection.offsetTop - this._element.offsetTop;\n\n                if (root.scrollTo) {\n                    root.scrollTo({\n                        top: height,\n                        behavior: 'smooth'\n                    });\n                    return;\n                } // Chrome 60 doesn't support `scrollTo`\n\n\n                root.scrollTop = height;\n            }\n        });\n    }\n\n    _getNewObserver() {\n        const options = {\n            root: this._rootElement,\n            threshold: this._config.threshold,\n            rootMargin: this._config.rootMargin\n        };\n        return new IntersectionObserver(entries => this._observerCallback(entries), options);\n    } // The logic of selection\n\n    _observerCallback(entries) {\n        const targetElement = entry => this._targetLinks.get(`#${entry.target.id}`);\n\n        const activate = entry => {\n            this._previousScrollData.visibleEntryTop = entry.target.offsetTop;\n\n            this._process(targetElement(entry));\n        };\n\n        const parentScrollTop = (this._rootElement || document.documentElement).scrollTop;\n        const userScrollsDown = parentScrollTop >= this._previousScrollData.parentScrollTop;\n        this._previousScrollData.parentScrollTop = parentScrollTop;\n\n        for (const entry of entries) {\n            if (!entry.isIntersecting) {\n                this._activeTarget = null;\n\n                this._clearActiveClass(targetElement(entry));\n\n                continue;\n            }\n\n            const entryIsLowerThanPrevious = entry.target.offsetTop >= this._previousScrollData.visibleEntryTop; // if we are scrolling down, pick the bigger offsetTop\n\n            if (userScrollsDown && entryIsLowerThanPrevious) {\n                activate(entry); // if parent isn't scrolled, let's keep the first visible item, breaking the iteration\n\n                if (!parentScrollTop) {\n                    return;\n                }\n\n                continue;\n            } // if we are scrolling up, pick the smallest offsetTop\n\n\n            if (!userScrollsDown && !entryIsLowerThanPrevious) {\n                activate(entry);\n            }\n        }\n    }\n\n    _initializeTargetsAndObservables() {\n        this._targetLinks = new Map();\n        this._observableSections = new Map();\n        const targetLinks = SelectorEngine.find(SELECTOR_TARGET_LINKS, this._config.target);\n\n        for (const anchor of targetLinks) {\n            // ensure that the anchor has an id and is not disabled\n            if (!anchor.hash || isDisabled(anchor)) {\n                continue;\n            }\n\n            const observableSection = SelectorEngine.findOne(anchor.hash, this._element); // ensure that the observableSection exists & is visible\n\n            if (isVisible(observableSection)) {\n                this._targetLinks.set(anchor.hash, anchor);\n\n                this._observableSections.set(anchor.hash, observableSection);\n            }\n        }\n    }\n\n    _process(target) {\n        if (this._activeTarget === target) {\n            return;\n        }\n\n        this._clearActiveClass(this._config.target);\n\n        this._activeTarget = target;\n        target.classList.add(CLASS_NAME_ACTIVE$1);\n\n        this._activateParents(target);\n\n        EventHandler.trigger(this._element, EVENT_ACTIVATE, {\n            relatedTarget: target\n        });\n    }\n\n    _activateParents(target) {\n        // Activate dropdown parents\n        if (target.classList.contains(CLASS_NAME_DROPDOWN_ITEM)) {\n            SelectorEngine.findOne(SELECTOR_DROPDOWN_TOGGLE$1, target.closest(SELECTOR_DROPDOWN)).classList.add(CLASS_NAME_ACTIVE$1);\n            return;\n        }\n\n        for (const listGroup of SelectorEngine.parents(target, SELECTOR_NAV_LIST_GROUP)) {\n            // Set triggered links parents as active\n            // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor\n            for (const item of SelectorEngine.prev(listGroup, SELECTOR_LINK_ITEMS)) {\n                item.classList.add(CLASS_NAME_ACTIVE$1);\n            }\n        }\n    }\n\n    _clearActiveClass(parent) {\n        parent.classList.remove(CLASS_NAME_ACTIVE$1);\n        const activeNodes = SelectorEngine.find(`${SELECTOR_TARGET_LINKS}.${CLASS_NAME_ACTIVE$1}`, parent);\n\n        for (const node of activeNodes) {\n            node.classList.remove(CLASS_NAME_ACTIVE$1);\n        }\n    } // Static\n\n}\n\n/**\n * Data API implementation\n */\n\n\nEventHandler.on(window, EVENT_LOAD_DATA_API$1, () => {\n    for (const spy of SelectorEngine.find(SELECTOR_DATA_SPY)) {\n        ScrollSpy.getOrCreateInstance(spy);\n    }\n});\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(ScrollSpy);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.3): tab.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * Constants\n */\n\nconst NAME$1 = 'tab';\nconst DATA_KEY$1 = 'bs.tab';\nconst EVENT_KEY$1 = `.${DATA_KEY$1}`;\nconst EVENT_HIDE$1 = `hide${EVENT_KEY$1}`;\nconst EVENT_HIDDEN$1 = `hidden${EVENT_KEY$1}`;\nconst EVENT_SHOW$1 = `show${EVENT_KEY$1}`;\nconst EVENT_SHOWN$1 = `shown${EVENT_KEY$1}`;\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY$1}`;\nconst EVENT_KEYDOWN = `keydown${EVENT_KEY$1}`;\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY$1}`;\nconst ARROW_LEFT_KEY = 'ArrowLeft';\nconst ARROW_RIGHT_KEY = 'ArrowRight';\nconst ARROW_UP_KEY = 'ArrowUp';\nconst ARROW_DOWN_KEY = 'ArrowDown';\nconst CLASS_NAME_ACTIVE = 'active';\nconst CLASS_NAME_FADE$1 = 'fade';\nconst CLASS_NAME_SHOW$1 = 'show';\nconst CLASS_DROPDOWN = 'dropdown';\nconst SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle';\nconst SELECTOR_DROPDOWN_MENU = '.dropdown-menu';\nconst NOT_SELECTOR_DROPDOWN_TOGGLE = ':not(.dropdown-toggle)';\nconst SELECTOR_TAB_PANEL = '.list-group, .nav, [role=\"tablist\"]';\nconst SELECTOR_OUTER = '.nav-item, .list-group-item';\nconst SELECTOR_INNER = `.nav-link${NOT_SELECTOR_DROPDOWN_TOGGLE}, .list-group-item${NOT_SELECTOR_DROPDOWN_TOGGLE}, [role=\"tab\"]${NOT_SELECTOR_DROPDOWN_TOGGLE}`;\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"tab\"], [data-bs-toggle=\"pill\"], [data-bs-toggle=\"list\"]'; // todo:v6: could be only `tab`\n\nconst SELECTOR_INNER_ELEM = `${SELECTOR_INNER}, ${SELECTOR_DATA_TOGGLE}`;\nconst SELECTOR_DATA_TOGGLE_ACTIVE = `.${CLASS_NAME_ACTIVE}[data-bs-toggle=\"tab\"], .${CLASS_NAME_ACTIVE}[data-bs-toggle=\"pill\"], .${CLASS_NAME_ACTIVE}[data-bs-toggle=\"list\"]`;\n\n/**\n * Class definition\n */\n\nclass Tab extends BaseComponent {\n    constructor(element) {\n        super(element);\n        this._parent = this._element.closest(SELECTOR_TAB_PANEL);\n\n        if (!this._parent) {\n            return; // todo: should Throw exception on v6\n            // throw new TypeError(`${element.outerHTML} has not a valid parent ${SELECTOR_INNER_ELEM}`)\n        } // Set up initial aria attributes\n\n\n        this._setInitialAttributes(this._parent, this._getChildren());\n\n        EventHandler.on(this._element, EVENT_KEYDOWN, event => this._keydown(event));\n    } // Getters\n\n\n    static get NAME() {\n        return NAME$1;\n    } // Public\n\n    static jQueryInterface(config) {\n        return this.each(function () {\n            const data = Tab.getOrCreateInstance(this);\n\n            if (typeof config !== 'string') {\n                return;\n            }\n\n            if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n                throw new TypeError(`No method named \"${config}\"`);\n            }\n\n            data[config]();\n        });\n    }\n\n    show() {\n        // Shows this elem and deactivate the active sibling if exists\n        const innerElem = this._element;\n\n        if (this._elemIsActive(innerElem)) {\n            return;\n        } // Search for active tab on same parent to deactivate it\n\n\n        const active = this._getActiveElem();\n\n        const hideEvent = active ? EventHandler.trigger(active, EVENT_HIDE$1, {\n            relatedTarget: innerElem\n        }) : null;\n        const showEvent = EventHandler.trigger(innerElem, EVENT_SHOW$1, {\n            relatedTarget: active\n        });\n\n        if (showEvent.defaultPrevented || hideEvent && hideEvent.defaultPrevented) {\n            return;\n        }\n\n        this._deactivate(active, innerElem);\n\n        this._activate(innerElem, active);\n    } // Private\n\n    _activate(element, relatedElem) {\n        if (!element) {\n            return;\n        }\n\n        element.classList.add(CLASS_NAME_ACTIVE);\n\n        this._activate(getElementFromSelector(element)); // Search and activate/show the proper section\n\n\n        const complete = () => {\n            if (element.getAttribute('role') !== 'tab') {\n                element.classList.add(CLASS_NAME_SHOW$1);\n                return;\n            }\n\n            element.removeAttribute('tabindex');\n            element.setAttribute('aria-selected', true);\n\n            this._toggleDropDown(element, true);\n\n            EventHandler.trigger(element, EVENT_SHOWN$1, {\n                relatedTarget: relatedElem\n            });\n        };\n\n        this._queueCallback(complete, element, element.classList.contains(CLASS_NAME_FADE$1));\n    }\n\n    _deactivate(element, relatedElem) {\n        if (!element) {\n            return;\n        }\n\n        element.classList.remove(CLASS_NAME_ACTIVE);\n        element.blur();\n\n        this._deactivate(getElementFromSelector(element)); // Search and deactivate the shown section too\n\n\n        const complete = () => {\n            if (element.getAttribute('role') !== 'tab') {\n                element.classList.remove(CLASS_NAME_SHOW$1);\n                return;\n            }\n\n            element.setAttribute('aria-selected', false);\n            element.setAttribute('tabindex', '-1');\n\n            this._toggleDropDown(element, false);\n\n            EventHandler.trigger(element, EVENT_HIDDEN$1, {\n                relatedTarget: relatedElem\n            });\n        };\n\n        this._queueCallback(complete, element, element.classList.contains(CLASS_NAME_FADE$1));\n    }\n\n    _keydown(event) {\n        if (![ARROW_LEFT_KEY, ARROW_RIGHT_KEY, ARROW_UP_KEY, ARROW_DOWN_KEY].includes(event.key)) {\n            return;\n        }\n\n        event.stopPropagation(); // stopPropagation/preventDefault both added to support up/down keys without scrolling the page\n\n        event.preventDefault();\n        const isNext = [ARROW_RIGHT_KEY, ARROW_DOWN_KEY].includes(event.key);\n        const nextActiveElement = getNextActiveElement(this._getChildren().filter(element => !isDisabled(element)), event.target, isNext, true);\n\n        if (nextActiveElement) {\n            nextActiveElement.focus({\n                preventScroll: true\n            });\n            Tab.getOrCreateInstance(nextActiveElement).show();\n        }\n    }\n\n    _getChildren() {\n        // collection of inner elements\n        return SelectorEngine.find(SELECTOR_INNER_ELEM, this._parent);\n    }\n\n    _getActiveElem() {\n        return this._getChildren().find(child => this._elemIsActive(child)) || null;\n    }\n\n    _setInitialAttributes(parent, children) {\n        this._setAttributeIfNotExists(parent, 'role', 'tablist');\n\n        for (const child of children) {\n            this._setInitialAttributesOnChild(child);\n        }\n    }\n\n    _setInitialAttributesOnChild(child) {\n        child = this._getInnerElement(child);\n\n        const isActive = this._elemIsActive(child);\n\n        const outerElem = this._getOuterElement(child);\n\n        child.setAttribute('aria-selected', isActive);\n\n        if (outerElem !== child) {\n            this._setAttributeIfNotExists(outerElem, 'role', 'presentation');\n        }\n\n        if (!isActive) {\n            child.setAttribute('tabindex', '-1');\n        }\n\n        this._setAttributeIfNotExists(child, 'role', 'tab'); // set attributes to the related panel too\n\n\n        this._setInitialAttributesOnTargetPanel(child);\n    }\n\n    _setInitialAttributesOnTargetPanel(child) {\n        const target = getElementFromSelector(child);\n\n        if (!target) {\n            return;\n        }\n\n        this._setAttributeIfNotExists(target, 'role', 'tabpanel');\n\n        if (child.id) {\n            this._setAttributeIfNotExists(target, 'aria-labelledby', `#${child.id}`);\n        }\n    }\n\n    _toggleDropDown(element, open) {\n        const outerElem = this._getOuterElement(element);\n\n        if (!outerElem.classList.contains(CLASS_DROPDOWN)) {\n            return;\n        }\n\n        const toggle = (selector, className) => {\n            const element = SelectorEngine.findOne(selector, outerElem);\n\n            if (element) {\n                element.classList.toggle(className, open);\n            }\n        };\n\n        toggle(SELECTOR_DROPDOWN_TOGGLE, CLASS_NAME_ACTIVE);\n        toggle(SELECTOR_DROPDOWN_MENU, CLASS_NAME_SHOW$1);\n        outerElem.setAttribute('aria-expanded', open);\n    }\n\n    _setAttributeIfNotExists(element, attribute, value) {\n        if (!element.hasAttribute(attribute)) {\n            element.setAttribute(attribute, value);\n        }\n    }\n\n    _elemIsActive(elem) {\n        return elem.classList.contains(CLASS_NAME_ACTIVE);\n    } // Try to get the inner element (usually the .nav-link)\n\n    _getInnerElement(elem) {\n        return elem.matches(SELECTOR_INNER_ELEM) ? elem : SelectorEngine.findOne(SELECTOR_INNER_ELEM, elem);\n    } // Try to get the outer element (usually the .nav-item)\n\n    _getOuterElement(elem) {\n        return elem.closest(SELECTOR_OUTER) || elem;\n    } // Static\n\n}\n\n/**\n * Data API implementation\n */\n\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n    if (['A', 'AREA'].includes(this.tagName)) {\n        event.preventDefault();\n    }\n\n    if (isDisabled(this)) {\n        return;\n    }\n\n    Tab.getOrCreateInstance(this).show();\n});\n/**\n * Initialize on focus\n */\n\nEventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n    for (const element of SelectorEngine.find(SELECTOR_DATA_TOGGLE_ACTIVE)) {\n        Tab.getOrCreateInstance(element);\n    }\n});\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Tab);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.3): toast.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * Constants\n */\n\nconst NAME = 'toast';\nconst DATA_KEY = 'bs.toast';\nconst EVENT_KEY = `.${DATA_KEY}`;\nconst EVENT_MOUSEOVER = `mouseover${EVENT_KEY}`;\nconst EVENT_MOUSEOUT = `mouseout${EVENT_KEY}`;\nconst EVENT_FOCUSIN = `focusin${EVENT_KEY}`;\nconst EVENT_FOCUSOUT = `focusout${EVENT_KEY}`;\nconst EVENT_HIDE = `hide${EVENT_KEY}`;\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`;\nconst EVENT_SHOW = `show${EVENT_KEY}`;\nconst EVENT_SHOWN = `shown${EVENT_KEY}`;\nconst CLASS_NAME_FADE = 'fade';\nconst CLASS_NAME_HIDE = 'hide'; // @deprecated - kept here only for backwards compatibility\n\nconst CLASS_NAME_SHOW = 'show';\nconst CLASS_NAME_SHOWING = 'showing';\nconst DefaultType = {\n    animation: 'boolean',\n    autohide: 'boolean',\n    delay: 'number'\n};\nconst Default = {\n    animation: true,\n    autohide: true,\n    delay: 5000\n};\n\n/**\n * Class definition\n */\n\nclass Toast extends BaseComponent {\n    constructor(element, config) {\n        super(element, config);\n        this._timeout = null;\n        this._hasMouseInteraction = false;\n        this._hasKeyboardInteraction = false;\n\n        this._setListeners();\n    } // Getters\n\n\n    static get Default() {\n        return Default;\n    }\n\n    static get DefaultType() {\n        return DefaultType;\n    }\n\n    static get NAME() {\n        return NAME;\n    } // Public\n\n    static jQueryInterface(config) {\n        return this.each(function () {\n            const data = Toast.getOrCreateInstance(this, config);\n\n            if (typeof config === 'string') {\n                if (typeof data[config] === 'undefined') {\n                    throw new TypeError(`No method named \"${config}\"`);\n                }\n\n                data[config](this);\n            }\n        });\n    }\n\n    show() {\n        const showEvent = EventHandler.trigger(this._element, EVENT_SHOW);\n\n        if (showEvent.defaultPrevented) {\n            return;\n        }\n\n        this._clearTimeout();\n\n        if (this._config.animation) {\n            this._element.classList.add(CLASS_NAME_FADE);\n        }\n\n        const complete = () => {\n            this._element.classList.remove(CLASS_NAME_SHOWING);\n\n            EventHandler.trigger(this._element, EVENT_SHOWN);\n\n            this._maybeScheduleHide();\n        };\n\n        this._element.classList.remove(CLASS_NAME_HIDE); // @deprecated\n\n\n        reflow(this._element);\n\n        this._element.classList.add(CLASS_NAME_SHOW, CLASS_NAME_SHOWING);\n\n        this._queueCallback(complete, this._element, this._config.animation);\n    }\n\n    hide() {\n        if (!this.isShown()) {\n            return;\n        }\n\n        const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE);\n\n        if (hideEvent.defaultPrevented) {\n            return;\n        }\n\n        const complete = () => {\n            this._element.classList.add(CLASS_NAME_HIDE); // @deprecated\n\n\n            this._element.classList.remove(CLASS_NAME_SHOWING, CLASS_NAME_SHOW);\n\n            EventHandler.trigger(this._element, EVENT_HIDDEN);\n        };\n\n        this._element.classList.add(CLASS_NAME_SHOWING);\n\n        this._queueCallback(complete, this._element, this._config.animation);\n    }\n\n    dispose() {\n        this._clearTimeout();\n\n        if (this.isShown()) {\n            this._element.classList.remove(CLASS_NAME_SHOW);\n        }\n\n        super.dispose();\n    }\n\n    isShown() {\n        return this._element.classList.contains(CLASS_NAME_SHOW);\n    } // Private\n\n    _maybeScheduleHide() {\n        if (!this._config.autohide) {\n            return;\n        }\n\n        if (this._hasMouseInteraction || this._hasKeyboardInteraction) {\n            return;\n        }\n\n        this._timeout = setTimeout(() => {\n            this.hide();\n        }, this._config.delay);\n    }\n\n    _onInteraction(event, isInteracting) {\n        switch (event.type) {\n            case 'mouseover':\n            case 'mouseout': {\n                this._hasMouseInteraction = isInteracting;\n                break;\n            }\n\n            case 'focusin':\n            case 'focusout': {\n                this._hasKeyboardInteraction = isInteracting;\n                break;\n            }\n        }\n\n        if (isInteracting) {\n            this._clearTimeout();\n\n            return;\n        }\n\n        const nextElement = event.relatedTarget;\n\n        if (this._element === nextElement || this._element.contains(nextElement)) {\n            return;\n        }\n\n        this._maybeScheduleHide();\n    }\n\n    _setListeners() {\n        EventHandler.on(this._element, EVENT_MOUSEOVER, event => this._onInteraction(event, true));\n        EventHandler.on(this._element, EVENT_MOUSEOUT, event => this._onInteraction(event, false));\n        EventHandler.on(this._element, EVENT_FOCUSIN, event => this._onInteraction(event, true));\n        EventHandler.on(this._element, EVENT_FOCUSOUT, event => this._onInteraction(event, false));\n    }\n\n    _clearTimeout() {\n        clearTimeout(this._timeout);\n        this._timeout = null;\n    } // Static\n\n}\n\n/**\n * Data API implementation\n */\n\n\nenableDismissTrigger(Toast);\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Toast);\n\nexport {Alert, Button, Carousel, Collapse, Dropdown, Modal, Offcanvas, Popover, ScrollSpy, Tab, Toast, Tooltip};\n//# sourceMappingURL=bootstrap.esm.js.map\n"
  },
  {
    "path": "src/main/resources/web/js/bootstrap.js",
    "content": "/*!\n  * Bootstrap v5.2.3 (https://getbootstrap.com/)\n  * Copyright 2011-2022 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)\n  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n  */\n(function (global, factory) {\n    typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('@popperjs/core')) :\n        typeof define === 'function' && define.amd ? define(['@popperjs/core'], factory) :\n            (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.bootstrap = factory(global.Popper));\n})(this, (function (Popper) {\n    'use strict';\n\n    function _interopNamespace(e) {\n        if (e && e.__esModule) return e;\n        const n = Object.create(null, {[Symbol.toStringTag]: {value: 'Module'}});\n        if (e) {\n            for (const k in e) {\n                if (k !== 'default') {\n                    const d = Object.getOwnPropertyDescriptor(e, k);\n                    Object.defineProperty(n, k, d.get ? d : {\n                        enumerable: true,\n                        get: () => e[k]\n                    });\n                }\n            }\n        }\n        n.default = e;\n        return Object.freeze(n);\n    }\n\n    const Popper__namespace = /*#__PURE__*/_interopNamespace(Popper);\n\n    /**\n     * --------------------------------------------------------------------------\n     * Bootstrap (v5.2.3): util/index.js\n     * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n     * --------------------------------------------------------------------------\n     */\n    const MAX_UID = 1000000;\n    const MILLISECONDS_MULTIPLIER = 1000;\n    const TRANSITION_END = 'transitionend'; // Shout-out Angus Croll (https://goo.gl/pxwQGp)\n\n    const toType = object => {\n        if (object === null || object === undefined) {\n            return `${object}`;\n        }\n\n        return Object.prototype.toString.call(object).match(/\\s([a-z]+)/i)[1].toLowerCase();\n    };\n    /**\n     * Public Util API\n     */\n\n\n    const getUID = prefix => {\n        do {\n            prefix += Math.floor(Math.random() * MAX_UID);\n        } while (document.getElementById(prefix));\n\n        return prefix;\n    };\n\n    const getSelector = element => {\n        let selector = element.getAttribute('data-bs-target');\n\n        if (!selector || selector === '#') {\n            let hrefAttribute = element.getAttribute('href'); // The only valid content that could double as a selector are IDs or classes,\n            // so everything starting with `#` or `.`. If a \"real\" URL is used as the selector,\n            // `document.querySelector` will rightfully complain it is invalid.\n            // See https://github.com/twbs/bootstrap/issues/32273\n\n            if (!hrefAttribute || !hrefAttribute.includes('#') && !hrefAttribute.startsWith('.')) {\n                return null;\n            } // Just in case some CMS puts out a full URL with the anchor appended\n\n\n            if (hrefAttribute.includes('#') && !hrefAttribute.startsWith('#')) {\n                hrefAttribute = `#${hrefAttribute.split('#')[1]}`;\n            }\n\n            selector = hrefAttribute && hrefAttribute !== '#' ? hrefAttribute.trim() : null;\n        }\n\n        return selector;\n    };\n\n    const getSelectorFromElement = element => {\n        const selector = getSelector(element);\n\n        if (selector) {\n            return document.querySelector(selector) ? selector : null;\n        }\n\n        return null;\n    };\n\n    const getElementFromSelector = element => {\n        const selector = getSelector(element);\n        return selector ? document.querySelector(selector) : null;\n    };\n\n    const getTransitionDurationFromElement = element => {\n        if (!element) {\n            return 0;\n        } // Get transition-duration of the element\n\n\n        let {\n            transitionDuration,\n            transitionDelay\n        } = window.getComputedStyle(element);\n        const floatTransitionDuration = Number.parseFloat(transitionDuration);\n        const floatTransitionDelay = Number.parseFloat(transitionDelay); // Return 0 if element or transition duration is not found\n\n        if (!floatTransitionDuration && !floatTransitionDelay) {\n            return 0;\n        } // If multiple durations are defined, take the first\n\n\n        transitionDuration = transitionDuration.split(',')[0];\n        transitionDelay = transitionDelay.split(',')[0];\n        return (Number.parseFloat(transitionDuration) + Number.parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER;\n    };\n\n    const triggerTransitionEnd = element => {\n        element.dispatchEvent(new Event(TRANSITION_END));\n    };\n\n    const isElement = object => {\n        if (!object || typeof object !== 'object') {\n            return false;\n        }\n\n        if (typeof object.jquery !== 'undefined') {\n            object = object[0];\n        }\n\n        return typeof object.nodeType !== 'undefined';\n    };\n\n    const getElement = object => {\n        // it's a jQuery object or a node element\n        if (isElement(object)) {\n            return object.jquery ? object[0] : object;\n        }\n\n        if (typeof object === 'string' && object.length > 0) {\n            return document.querySelector(object);\n        }\n\n        return null;\n    };\n\n    const isVisible = element => {\n        if (!isElement(element) || element.getClientRects().length === 0) {\n            return false;\n        }\n\n        const elementIsVisible = getComputedStyle(element).getPropertyValue('visibility') === 'visible'; // Handle `details` element as its content may falsie appear visible when it is closed\n\n        const closedDetails = element.closest('details:not([open])');\n\n        if (!closedDetails) {\n            return elementIsVisible;\n        }\n\n        if (closedDetails !== element) {\n            const summary = element.closest('summary');\n\n            if (summary && summary.parentNode !== closedDetails) {\n                return false;\n            }\n\n            if (summary === null) {\n                return false;\n            }\n        }\n\n        return elementIsVisible;\n    };\n\n    const isDisabled = element => {\n        if (!element || element.nodeType !== Node.ELEMENT_NODE) {\n            return true;\n        }\n\n        if (element.classList.contains('disabled')) {\n            return true;\n        }\n\n        if (typeof element.disabled !== 'undefined') {\n            return element.disabled;\n        }\n\n        return element.hasAttribute('disabled') && element.getAttribute('disabled') !== 'false';\n    };\n\n    const findShadowRoot = element => {\n        if (!document.documentElement.attachShadow) {\n            return null;\n        } // Can find the shadow root otherwise it'll return the document\n\n\n        if (typeof element.getRootNode === 'function') {\n            const root = element.getRootNode();\n            return root instanceof ShadowRoot ? root : null;\n        }\n\n        if (element instanceof ShadowRoot) {\n            return element;\n        } // when we don't find a shadow root\n\n\n        if (!element.parentNode) {\n            return null;\n        }\n\n        return findShadowRoot(element.parentNode);\n    };\n\n    const noop = () => {\n    };\n    /**\n     * Trick to restart an element's animation\n     *\n     * @param {HTMLElement} element\n     * @return void\n     *\n     * @see https://www.charistheo.io/blog/2021/02/restart-a-css-animation-with-javascript/#restarting-a-css-animation\n     */\n\n\n    const reflow = element => {\n        element.offsetHeight; // eslint-disable-line no-unused-expressions\n    };\n\n    const getjQuery = () => {\n        if (window.jQuery && !document.body.hasAttribute('data-bs-no-jquery')) {\n            return window.jQuery;\n        }\n\n        return null;\n    };\n\n    const DOMContentLoadedCallbacks = [];\n\n    const onDOMContentLoaded = callback => {\n        if (document.readyState === 'loading') {\n            // add listener on the first call when the document is in loading state\n            if (!DOMContentLoadedCallbacks.length) {\n                document.addEventListener('DOMContentLoaded', () => {\n                    for (const callback of DOMContentLoadedCallbacks) {\n                        callback();\n                    }\n                });\n            }\n\n            DOMContentLoadedCallbacks.push(callback);\n        } else {\n            callback();\n        }\n    };\n\n    const isRTL = () => document.documentElement.dir === 'rtl';\n\n    const defineJQueryPlugin = plugin => {\n        onDOMContentLoaded(() => {\n            const $ = getjQuery();\n            /* istanbul ignore if */\n\n            if ($) {\n                const name = plugin.NAME;\n                const JQUERY_NO_CONFLICT = $.fn[name];\n                $.fn[name] = plugin.jQueryInterface;\n                $.fn[name].Constructor = plugin;\n\n                $.fn[name].noConflict = () => {\n                    $.fn[name] = JQUERY_NO_CONFLICT;\n                    return plugin.jQueryInterface;\n                };\n            }\n        });\n    };\n\n    const execute = callback => {\n        if (typeof callback === 'function') {\n            callback();\n        }\n    };\n\n    const executeAfterTransition = (callback, transitionElement, waitForTransition = true) => {\n        if (!waitForTransition) {\n            execute(callback);\n            return;\n        }\n\n        const durationPadding = 5;\n        const emulatedDuration = getTransitionDurationFromElement(transitionElement) + durationPadding;\n        let called = false;\n\n        const handler = ({\n                             target\n                         }) => {\n            if (target !== transitionElement) {\n                return;\n            }\n\n            called = true;\n            transitionElement.removeEventListener(TRANSITION_END, handler);\n            execute(callback);\n        };\n\n        transitionElement.addEventListener(TRANSITION_END, handler);\n        setTimeout(() => {\n            if (!called) {\n                triggerTransitionEnd(transitionElement);\n            }\n        }, emulatedDuration);\n    };\n    /**\n     * Return the previous/next element of a list.\n     *\n     * @param {array} list    The list of elements\n     * @param activeElement   The active element\n     * @param shouldGetNext   Choose to get next or previous element\n     * @param isCycleAllowed\n     * @return {Element|elem} The proper element\n     */\n\n\n    const getNextActiveElement = (list, activeElement, shouldGetNext, isCycleAllowed) => {\n        const listLength = list.length;\n        let index = list.indexOf(activeElement); // if the element does not exist in the list return an element\n        // depending on the direction and if cycle is allowed\n\n        if (index === -1) {\n            return !shouldGetNext && isCycleAllowed ? list[listLength - 1] : list[0];\n        }\n\n        index += shouldGetNext ? 1 : -1;\n\n        if (isCycleAllowed) {\n            index = (index + listLength) % listLength;\n        }\n\n        return list[Math.max(0, Math.min(index, listLength - 1))];\n    };\n\n    /**\n     * --------------------------------------------------------------------------\n     * Bootstrap (v5.2.3): dom/event-handler.js\n     * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n     * --------------------------------------------------------------------------\n     */\n    /**\n     * Constants\n     */\n\n    const namespaceRegex = /[^.]*(?=\\..*)\\.|.*/;\n    const stripNameRegex = /\\..*/;\n    const stripUidRegex = /::\\d+$/;\n    const eventRegistry = {}; // Events storage\n\n    let uidEvent = 1;\n    const customEvents = {\n        mouseenter: 'mouseover',\n        mouseleave: 'mouseout'\n    };\n    const nativeEvents = new Set(['click', 'dblclick', 'mouseup', 'mousedown', 'contextmenu', 'mousewheel', 'DOMMouseScroll', 'mouseover', 'mouseout', 'mousemove', 'selectstart', 'selectend', 'keydown', 'keypress', 'keyup', 'orientationchange', 'touchstart', 'touchmove', 'touchend', 'touchcancel', 'pointerdown', 'pointermove', 'pointerup', 'pointerleave', 'pointercancel', 'gesturestart', 'gesturechange', 'gestureend', 'focus', 'blur', 'change', 'reset', 'select', 'submit', 'focusin', 'focusout', 'load', 'unload', 'beforeunload', 'resize', 'move', 'DOMContentLoaded', 'readystatechange', 'error', 'abort', 'scroll']);\n\n    /**\n     * Private methods\n     */\n\n    function makeEventUid(element, uid) {\n        return uid && `${uid}::${uidEvent++}` || element.uidEvent || uidEvent++;\n    }\n\n    function getElementEvents(element) {\n        const uid = makeEventUid(element);\n        element.uidEvent = uid;\n        eventRegistry[uid] = eventRegistry[uid] || {};\n        return eventRegistry[uid];\n    }\n\n    function bootstrapHandler(element, fn) {\n        return function handler(event) {\n            hydrateObj(event, {\n                delegateTarget: element\n            });\n\n            if (handler.oneOff) {\n                EventHandler.off(element, event.type, fn);\n            }\n\n            return fn.apply(element, [event]);\n        };\n    }\n\n    function bootstrapDelegationHandler(element, selector, fn) {\n        return function handler(event) {\n            const domElements = element.querySelectorAll(selector);\n\n            for (let {\n                target\n            } = event; target && target !== this; target = target.parentNode) {\n                for (const domElement of domElements) {\n                    if (domElement !== target) {\n                        continue;\n                    }\n\n                    hydrateObj(event, {\n                        delegateTarget: target\n                    });\n\n                    if (handler.oneOff) {\n                        EventHandler.off(element, event.type, selector, fn);\n                    }\n\n                    return fn.apply(target, [event]);\n                }\n            }\n        };\n    }\n\n    function findHandler(events, callable, delegationSelector = null) {\n        return Object.values(events).find(event => event.callable === callable && event.delegationSelector === delegationSelector);\n    }\n\n    function normalizeParameters(originalTypeEvent, handler, delegationFunction) {\n        const isDelegated = typeof handler === 'string'; // todo: tooltip passes `false` instead of selector, so we need to check\n\n        const callable = isDelegated ? delegationFunction : handler || delegationFunction;\n        let typeEvent = getTypeEvent(originalTypeEvent);\n\n        if (!nativeEvents.has(typeEvent)) {\n            typeEvent = originalTypeEvent;\n        }\n\n        return [isDelegated, callable, typeEvent];\n    }\n\n    function addHandler(element, originalTypeEvent, handler, delegationFunction, oneOff) {\n        if (typeof originalTypeEvent !== 'string' || !element) {\n            return;\n        }\n\n        let [isDelegated, callable, typeEvent] = normalizeParameters(originalTypeEvent, handler, delegationFunction); // in case of mouseenter or mouseleave wrap the handler within a function that checks for its DOM position\n        // this prevents the handler from being dispatched the same way as mouseover or mouseout does\n\n        if (originalTypeEvent in customEvents) {\n            const wrapFunction = fn => {\n                return function (event) {\n                    if (!event.relatedTarget || event.relatedTarget !== event.delegateTarget && !event.delegateTarget.contains(event.relatedTarget)) {\n                        return fn.call(this, event);\n                    }\n                };\n            };\n\n            callable = wrapFunction(callable);\n        }\n\n        const events = getElementEvents(element);\n        const handlers = events[typeEvent] || (events[typeEvent] = {});\n        const previousFunction = findHandler(handlers, callable, isDelegated ? handler : null);\n\n        if (previousFunction) {\n            previousFunction.oneOff = previousFunction.oneOff && oneOff;\n            return;\n        }\n\n        const uid = makeEventUid(callable, originalTypeEvent.replace(namespaceRegex, ''));\n        const fn = isDelegated ? bootstrapDelegationHandler(element, handler, callable) : bootstrapHandler(element, callable);\n        fn.delegationSelector = isDelegated ? handler : null;\n        fn.callable = callable;\n        fn.oneOff = oneOff;\n        fn.uidEvent = uid;\n        handlers[uid] = fn;\n        element.addEventListener(typeEvent, fn, isDelegated);\n    }\n\n    function removeHandler(element, events, typeEvent, handler, delegationSelector) {\n        const fn = findHandler(events[typeEvent], handler, delegationSelector);\n\n        if (!fn) {\n            return;\n        }\n\n        element.removeEventListener(typeEvent, fn, Boolean(delegationSelector));\n        delete events[typeEvent][fn.uidEvent];\n    }\n\n    function removeNamespacedHandlers(element, events, typeEvent, namespace) {\n        const storeElementEvent = events[typeEvent] || {};\n\n        for (const handlerKey of Object.keys(storeElementEvent)) {\n            if (handlerKey.includes(namespace)) {\n                const event = storeElementEvent[handlerKey];\n                removeHandler(element, events, typeEvent, event.callable, event.delegationSelector);\n            }\n        }\n    }\n\n    function getTypeEvent(event) {\n        // allow to get the native events from namespaced events ('click.bs.button' --> 'click')\n        event = event.replace(stripNameRegex, '');\n        return customEvents[event] || event;\n    }\n\n    const EventHandler = {\n        on(element, event, handler, delegationFunction) {\n            addHandler(element, event, handler, delegationFunction, false);\n        },\n\n        one(element, event, handler, delegationFunction) {\n            addHandler(element, event, handler, delegationFunction, true);\n        },\n\n        off(element, originalTypeEvent, handler, delegationFunction) {\n            if (typeof originalTypeEvent !== 'string' || !element) {\n                return;\n            }\n\n            const [isDelegated, callable, typeEvent] = normalizeParameters(originalTypeEvent, handler, delegationFunction);\n            const inNamespace = typeEvent !== originalTypeEvent;\n            const events = getElementEvents(element);\n            const storeElementEvent = events[typeEvent] || {};\n            const isNamespace = originalTypeEvent.startsWith('.');\n\n            if (typeof callable !== 'undefined') {\n                // Simplest case: handler is passed, remove that listener ONLY.\n                if (!Object.keys(storeElementEvent).length) {\n                    return;\n                }\n\n                removeHandler(element, events, typeEvent, callable, isDelegated ? handler : null);\n                return;\n            }\n\n            if (isNamespace) {\n                for (const elementEvent of Object.keys(events)) {\n                    removeNamespacedHandlers(element, events, elementEvent, originalTypeEvent.slice(1));\n                }\n            }\n\n            for (const keyHandlers of Object.keys(storeElementEvent)) {\n                const handlerKey = keyHandlers.replace(stripUidRegex, '');\n\n                if (!inNamespace || originalTypeEvent.includes(handlerKey)) {\n                    const event = storeElementEvent[keyHandlers];\n                    removeHandler(element, events, typeEvent, event.callable, event.delegationSelector);\n                }\n            }\n        },\n\n        trigger(element, event, args) {\n            if (typeof event !== 'string' || !element) {\n                return null;\n            }\n\n            const $ = getjQuery();\n            const typeEvent = getTypeEvent(event);\n            const inNamespace = event !== typeEvent;\n            let jQueryEvent = null;\n            let bubbles = true;\n            let nativeDispatch = true;\n            let defaultPrevented = false;\n\n            if (inNamespace && $) {\n                jQueryEvent = $.Event(event, args);\n                $(element).trigger(jQueryEvent);\n                bubbles = !jQueryEvent.isPropagationStopped();\n                nativeDispatch = !jQueryEvent.isImmediatePropagationStopped();\n                defaultPrevented = jQueryEvent.isDefaultPrevented();\n            }\n\n            let evt = new Event(event, {\n                bubbles,\n                cancelable: true\n            });\n            evt = hydrateObj(evt, args);\n\n            if (defaultPrevented) {\n                evt.preventDefault();\n            }\n\n            if (nativeDispatch) {\n                element.dispatchEvent(evt);\n            }\n\n            if (evt.defaultPrevented && jQueryEvent) {\n                jQueryEvent.preventDefault();\n            }\n\n            return evt;\n        }\n\n    };\n\n    function hydrateObj(obj, meta) {\n        for (const [key, value] of Object.entries(meta || {})) {\n            try {\n                obj[key] = value;\n            } catch (_unused) {\n                Object.defineProperty(obj, key, {\n                    configurable: true,\n\n                    get() {\n                        return value;\n                    }\n\n                });\n            }\n        }\n\n        return obj;\n    }\n\n    /**\n     * --------------------------------------------------------------------------\n     * Bootstrap (v5.2.3): dom/data.js\n     * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n     * --------------------------------------------------------------------------\n     */\n\n    /**\n     * Constants\n     */\n    const elementMap = new Map();\n    const Data = {\n        set(element, key, instance) {\n            if (!elementMap.has(element)) {\n                elementMap.set(element, new Map());\n            }\n\n            const instanceMap = elementMap.get(element); // make it clear we only want one instance per element\n            // can be removed later when multiple key/instances are fine to be used\n\n            if (!instanceMap.has(key) && instanceMap.size !== 0) {\n                // eslint-disable-next-line no-console\n                console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(instanceMap.keys())[0]}.`);\n                return;\n            }\n\n            instanceMap.set(key, instance);\n        },\n\n        get(element, key) {\n            if (elementMap.has(element)) {\n                return elementMap.get(element).get(key) || null;\n            }\n\n            return null;\n        },\n\n        remove(element, key) {\n            if (!elementMap.has(element)) {\n                return;\n            }\n\n            const instanceMap = elementMap.get(element);\n            instanceMap.delete(key); // free up element references if there are no instances left for an element\n\n            if (instanceMap.size === 0) {\n                elementMap.delete(element);\n            }\n        }\n\n    };\n\n    /**\n     * --------------------------------------------------------------------------\n     * Bootstrap (v5.2.3): dom/manipulator.js\n     * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n     * --------------------------------------------------------------------------\n     */\n    function normalizeData(value) {\n        if (value === 'true') {\n            return true;\n        }\n\n        if (value === 'false') {\n            return false;\n        }\n\n        if (value === Number(value).toString()) {\n            return Number(value);\n        }\n\n        if (value === '' || value === 'null') {\n            return null;\n        }\n\n        if (typeof value !== 'string') {\n            return value;\n        }\n\n        try {\n            return JSON.parse(decodeURIComponent(value));\n        } catch (_unused) {\n            return value;\n        }\n    }\n\n    function normalizeDataKey(key) {\n        return key.replace(/[A-Z]/g, chr => `-${chr.toLowerCase()}`);\n    }\n\n    const Manipulator = {\n        setDataAttribute(element, key, value) {\n            element.setAttribute(`data-bs-${normalizeDataKey(key)}`, value);\n        },\n\n        removeDataAttribute(element, key) {\n            element.removeAttribute(`data-bs-${normalizeDataKey(key)}`);\n        },\n\n        getDataAttributes(element) {\n            if (!element) {\n                return {};\n            }\n\n            const attributes = {};\n            const bsKeys = Object.keys(element.dataset).filter(key => key.startsWith('bs') && !key.startsWith('bsConfig'));\n\n            for (const key of bsKeys) {\n                let pureKey = key.replace(/^bs/, '');\n                pureKey = pureKey.charAt(0).toLowerCase() + pureKey.slice(1, pureKey.length);\n                attributes[pureKey] = normalizeData(element.dataset[key]);\n            }\n\n            return attributes;\n        },\n\n        getDataAttribute(element, key) {\n            return normalizeData(element.getAttribute(`data-bs-${normalizeDataKey(key)}`));\n        }\n\n    };\n\n    /**\n     * --------------------------------------------------------------------------\n     * Bootstrap (v5.2.3): util/config.js\n     * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n     * --------------------------------------------------------------------------\n     */\n    /**\n     * Class definition\n     */\n\n    class Config {\n        // Getters\n        static get Default() {\n            return {};\n        }\n\n        static get DefaultType() {\n            return {};\n        }\n\n        static get NAME() {\n            throw new Error('You have to implement the static method \"NAME\", for each component!');\n        }\n\n        _getConfig(config) {\n            config = this._mergeConfigObj(config);\n            config = this._configAfterMerge(config);\n\n            this._typeCheckConfig(config);\n\n            return config;\n        }\n\n        _configAfterMerge(config) {\n            return config;\n        }\n\n        _mergeConfigObj(config, element) {\n            const jsonConfig = isElement(element) ? Manipulator.getDataAttribute(element, 'config') : {}; // try to parse\n\n            return {\n                ...this.constructor.Default,\n                ...(typeof jsonConfig === 'object' ? jsonConfig : {}),\n                ...(isElement(element) ? Manipulator.getDataAttributes(element) : {}),\n                ...(typeof config === 'object' ? config : {})\n            };\n        }\n\n        _typeCheckConfig(config, configTypes = this.constructor.DefaultType) {\n            for (const property of Object.keys(configTypes)) {\n                const expectedTypes = configTypes[property];\n                const value = config[property];\n                const valueType = isElement(value) ? 'element' : toType(value);\n\n                if (!new RegExp(expectedTypes).test(valueType)) {\n                    throw new TypeError(`${this.constructor.NAME.toUpperCase()}: Option \"${property}\" provided type \"${valueType}\" but expected type \"${expectedTypes}\".`);\n                }\n            }\n        }\n\n    }\n\n    /**\n     * --------------------------------------------------------------------------\n     * Bootstrap (v5.2.3): base-component.js\n     * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n     * --------------------------------------------------------------------------\n     */\n    /**\n     * Constants\n     */\n\n    const VERSION = '5.2.3';\n\n    /**\n     * Class definition\n     */\n\n    class BaseComponent extends Config {\n        constructor(element, config) {\n            super();\n            element = getElement(element);\n\n            if (!element) {\n                return;\n            }\n\n            this._element = element;\n            this._config = this._getConfig(config);\n            Data.set(this._element, this.constructor.DATA_KEY, this);\n        } // Public\n\n        static get VERSION() {\n            return VERSION;\n        }\n\n        static get DATA_KEY() {\n            return `bs.${this.NAME}`;\n        }\n\n        static get EVENT_KEY() {\n            return `.${this.DATA_KEY}`;\n        }\n\n        static getInstance(element) {\n            return Data.get(getElement(element), this.DATA_KEY);\n        }\n\n        static getOrCreateInstance(element, config = {}) {\n            return this.getInstance(element) || new this(element, typeof config === 'object' ? config : null);\n        }\n\n        static eventName(name) {\n            return `${name}${this.EVENT_KEY}`;\n        }\n\n        dispose() {\n            Data.remove(this._element, this.constructor.DATA_KEY);\n            EventHandler.off(this._element, this.constructor.EVENT_KEY);\n\n            for (const propertyName of Object.getOwnPropertyNames(this)) {\n                this[propertyName] = null;\n            }\n        }\n\n        _queueCallback(callback, element, isAnimated = true) {\n            executeAfterTransition(callback, element, isAnimated);\n        }\n\n        _getConfig(config) {\n            config = this._mergeConfigObj(config, this._element);\n            config = this._configAfterMerge(config);\n\n            this._typeCheckConfig(config);\n\n            return config;\n        } // Static\n\n    }\n\n    /**\n     * --------------------------------------------------------------------------\n     * Bootstrap (v5.2.3): util/component-functions.js\n     * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n     * --------------------------------------------------------------------------\n     */\n\n    const enableDismissTrigger = (component, method = 'hide') => {\n        const clickEvent = `click.dismiss${component.EVENT_KEY}`;\n        const name = component.NAME;\n        EventHandler.on(document, clickEvent, `[data-bs-dismiss=\"${name}\"]`, function (event) {\n            if (['A', 'AREA'].includes(this.tagName)) {\n                event.preventDefault();\n            }\n\n            if (isDisabled(this)) {\n                return;\n            }\n\n            const target = getElementFromSelector(this) || this.closest(`.${name}`);\n            const instance = component.getOrCreateInstance(target); // Method argument is left, for Alert and only, as it doesn't implement the 'hide' method\n\n            instance[method]();\n        });\n    };\n\n    /**\n     * --------------------------------------------------------------------------\n     * Bootstrap (v5.2.3): alert.js\n     * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n     * --------------------------------------------------------------------------\n     */\n    /**\n     * Constants\n     */\n\n    const NAME$f = 'alert';\n    const DATA_KEY$a = 'bs.alert';\n    const EVENT_KEY$b = `.${DATA_KEY$a}`;\n    const EVENT_CLOSE = `close${EVENT_KEY$b}`;\n    const EVENT_CLOSED = `closed${EVENT_KEY$b}`;\n    const CLASS_NAME_FADE$5 = 'fade';\n    const CLASS_NAME_SHOW$8 = 'show';\n\n    /**\n     * Class definition\n     */\n\n    class Alert extends BaseComponent {\n        // Getters\n        static get NAME() {\n            return NAME$f;\n        } // Public\n\n        static jQueryInterface(config) {\n            return this.each(function () {\n                const data = Alert.getOrCreateInstance(this);\n\n                if (typeof config !== 'string') {\n                    return;\n                }\n\n                if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n                    throw new TypeError(`No method named \"${config}\"`);\n                }\n\n                data[config](this);\n            });\n        }\n\n        close() {\n            const closeEvent = EventHandler.trigger(this._element, EVENT_CLOSE);\n\n            if (closeEvent.defaultPrevented) {\n                return;\n            }\n\n            this._element.classList.remove(CLASS_NAME_SHOW$8);\n\n            const isAnimated = this._element.classList.contains(CLASS_NAME_FADE$5);\n\n            this._queueCallback(() => this._destroyElement(), this._element, isAnimated);\n        } // Private\n\n        _destroyElement() {\n            this._element.remove();\n\n            EventHandler.trigger(this._element, EVENT_CLOSED);\n            this.dispose();\n        } // Static\n\n    }\n\n    /**\n     * Data API implementation\n     */\n\n\n    enableDismissTrigger(Alert, 'close');\n    /**\n     * jQuery\n     */\n\n    defineJQueryPlugin(Alert);\n\n    /**\n     * --------------------------------------------------------------------------\n     * Bootstrap (v5.2.3): button.js\n     * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n     * --------------------------------------------------------------------------\n     */\n    /**\n     * Constants\n     */\n\n    const NAME$e = 'button';\n    const DATA_KEY$9 = 'bs.button';\n    const EVENT_KEY$a = `.${DATA_KEY$9}`;\n    const DATA_API_KEY$6 = '.data-api';\n    const CLASS_NAME_ACTIVE$3 = 'active';\n    const SELECTOR_DATA_TOGGLE$5 = '[data-bs-toggle=\"button\"]';\n    const EVENT_CLICK_DATA_API$6 = `click${EVENT_KEY$a}${DATA_API_KEY$6}`;\n\n    /**\n     * Class definition\n     */\n\n    class Button extends BaseComponent {\n        // Getters\n        static get NAME() {\n            return NAME$e;\n        } // Public\n\n        static jQueryInterface(config) {\n            return this.each(function () {\n                const data = Button.getOrCreateInstance(this);\n\n                if (config === 'toggle') {\n                    data[config]();\n                }\n            });\n        }\n\n        toggle() {\n            // Toggle class and sync the `aria-pressed` attribute with the return value of the `.toggle()` method\n            this._element.setAttribute('aria-pressed', this._element.classList.toggle(CLASS_NAME_ACTIVE$3));\n        } // Static\n\n    }\n\n    /**\n     * Data API implementation\n     */\n\n\n    EventHandler.on(document, EVENT_CLICK_DATA_API$6, SELECTOR_DATA_TOGGLE$5, event => {\n        event.preventDefault();\n        const button = event.target.closest(SELECTOR_DATA_TOGGLE$5);\n        const data = Button.getOrCreateInstance(button);\n        data.toggle();\n    });\n    /**\n     * jQuery\n     */\n\n    defineJQueryPlugin(Button);\n\n    /**\n     * --------------------------------------------------------------------------\n     * Bootstrap (v5.2.3): dom/selector-engine.js\n     * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n     * --------------------------------------------------------------------------\n     */\n    /**\n     * Constants\n     */\n\n    const SelectorEngine = {\n        find(selector, element = document.documentElement) {\n            return [].concat(...Element.prototype.querySelectorAll.call(element, selector));\n        },\n\n        findOne(selector, element = document.documentElement) {\n            return Element.prototype.querySelector.call(element, selector);\n        },\n\n        children(element, selector) {\n            return [].concat(...element.children).filter(child => child.matches(selector));\n        },\n\n        parents(element, selector) {\n            const parents = [];\n            let ancestor = element.parentNode.closest(selector);\n\n            while (ancestor) {\n                parents.push(ancestor);\n                ancestor = ancestor.parentNode.closest(selector);\n            }\n\n            return parents;\n        },\n\n        prev(element, selector) {\n            let previous = element.previousElementSibling;\n\n            while (previous) {\n                if (previous.matches(selector)) {\n                    return [previous];\n                }\n\n                previous = previous.previousElementSibling;\n            }\n\n            return [];\n        },\n\n        // TODO: this is now unused; remove later along with prev()\n        next(element, selector) {\n            let next = element.nextElementSibling;\n\n            while (next) {\n                if (next.matches(selector)) {\n                    return [next];\n                }\n\n                next = next.nextElementSibling;\n            }\n\n            return [];\n        },\n\n        focusableChildren(element) {\n            const focusables = ['a', 'button', 'input', 'textarea', 'select', 'details', '[tabindex]', '[contenteditable=\"true\"]'].map(selector => `${selector}:not([tabindex^=\"-\"])`).join(',');\n            return this.find(focusables, element).filter(el => !isDisabled(el) && isVisible(el));\n        }\n\n    };\n\n    /**\n     * --------------------------------------------------------------------------\n     * Bootstrap (v5.2.3): util/swipe.js\n     * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n     * --------------------------------------------------------------------------\n     */\n    /**\n     * Constants\n     */\n\n    const NAME$d = 'swipe';\n    const EVENT_KEY$9 = '.bs.swipe';\n    const EVENT_TOUCHSTART = `touchstart${EVENT_KEY$9}`;\n    const EVENT_TOUCHMOVE = `touchmove${EVENT_KEY$9}`;\n    const EVENT_TOUCHEND = `touchend${EVENT_KEY$9}`;\n    const EVENT_POINTERDOWN = `pointerdown${EVENT_KEY$9}`;\n    const EVENT_POINTERUP = `pointerup${EVENT_KEY$9}`;\n    const POINTER_TYPE_TOUCH = 'touch';\n    const POINTER_TYPE_PEN = 'pen';\n    const CLASS_NAME_POINTER_EVENT = 'pointer-event';\n    const SWIPE_THRESHOLD = 40;\n    const Default$c = {\n        endCallback: null,\n        leftCallback: null,\n        rightCallback: null\n    };\n    const DefaultType$c = {\n        endCallback: '(function|null)',\n        leftCallback: '(function|null)',\n        rightCallback: '(function|null)'\n    };\n\n    /**\n     * Class definition\n     */\n\n    class Swipe extends Config {\n        constructor(element, config) {\n            super();\n            this._element = element;\n\n            if (!element || !Swipe.isSupported()) {\n                return;\n            }\n\n            this._config = this._getConfig(config);\n            this._deltaX = 0;\n            this._supportPointerEvents = Boolean(window.PointerEvent);\n\n            this._initEvents();\n        } // Getters\n\n\n        static get Default() {\n            return Default$c;\n        }\n\n        static get DefaultType() {\n            return DefaultType$c;\n        }\n\n        static get NAME() {\n            return NAME$d;\n        } // Public\n\n        static isSupported() {\n            return 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0;\n        }\n\n        dispose() {\n            EventHandler.off(this._element, EVENT_KEY$9);\n        } // Private\n\n        _start(event) {\n            if (!this._supportPointerEvents) {\n                this._deltaX = event.touches[0].clientX;\n                return;\n            }\n\n            if (this._eventIsPointerPenTouch(event)) {\n                this._deltaX = event.clientX;\n            }\n        }\n\n        _end(event) {\n            if (this._eventIsPointerPenTouch(event)) {\n                this._deltaX = event.clientX - this._deltaX;\n            }\n\n            this._handleSwipe();\n\n            execute(this._config.endCallback);\n        }\n\n        _move(event) {\n            this._deltaX = event.touches && event.touches.length > 1 ? 0 : event.touches[0].clientX - this._deltaX;\n        }\n\n        _handleSwipe() {\n            const absDeltaX = Math.abs(this._deltaX);\n\n            if (absDeltaX <= SWIPE_THRESHOLD) {\n                return;\n            }\n\n            const direction = absDeltaX / this._deltaX;\n            this._deltaX = 0;\n\n            if (!direction) {\n                return;\n            }\n\n            execute(direction > 0 ? this._config.rightCallback : this._config.leftCallback);\n        }\n\n        _initEvents() {\n            if (this._supportPointerEvents) {\n                EventHandler.on(this._element, EVENT_POINTERDOWN, event => this._start(event));\n                EventHandler.on(this._element, EVENT_POINTERUP, event => this._end(event));\n\n                this._element.classList.add(CLASS_NAME_POINTER_EVENT);\n            } else {\n                EventHandler.on(this._element, EVENT_TOUCHSTART, event => this._start(event));\n                EventHandler.on(this._element, EVENT_TOUCHMOVE, event => this._move(event));\n                EventHandler.on(this._element, EVENT_TOUCHEND, event => this._end(event));\n            }\n        }\n\n        _eventIsPointerPenTouch(event) {\n            return this._supportPointerEvents && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH);\n        } // Static\n\n    }\n\n    /**\n     * --------------------------------------------------------------------------\n     * Bootstrap (v5.2.3): carousel.js\n     * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n     * --------------------------------------------------------------------------\n     */\n    /**\n     * Constants\n     */\n\n    const NAME$c = 'carousel';\n    const DATA_KEY$8 = 'bs.carousel';\n    const EVENT_KEY$8 = `.${DATA_KEY$8}`;\n    const DATA_API_KEY$5 = '.data-api';\n    const ARROW_LEFT_KEY$1 = 'ArrowLeft';\n    const ARROW_RIGHT_KEY$1 = 'ArrowRight';\n    const TOUCHEVENT_COMPAT_WAIT = 500; // Time for mouse compat events to fire after touch\n\n    const ORDER_NEXT = 'next';\n    const ORDER_PREV = 'prev';\n    const DIRECTION_LEFT = 'left';\n    const DIRECTION_RIGHT = 'right';\n    const EVENT_SLIDE = `slide${EVENT_KEY$8}`;\n    const EVENT_SLID = `slid${EVENT_KEY$8}`;\n    const EVENT_KEYDOWN$1 = `keydown${EVENT_KEY$8}`;\n    const EVENT_MOUSEENTER$1 = `mouseenter${EVENT_KEY$8}`;\n    const EVENT_MOUSELEAVE$1 = `mouseleave${EVENT_KEY$8}`;\n    const EVENT_DRAG_START = `dragstart${EVENT_KEY$8}`;\n    const EVENT_LOAD_DATA_API$3 = `load${EVENT_KEY$8}${DATA_API_KEY$5}`;\n    const EVENT_CLICK_DATA_API$5 = `click${EVENT_KEY$8}${DATA_API_KEY$5}`;\n    const CLASS_NAME_CAROUSEL = 'carousel';\n    const CLASS_NAME_ACTIVE$2 = 'active';\n    const CLASS_NAME_SLIDE = 'slide';\n    const CLASS_NAME_END = 'carousel-item-end';\n    const CLASS_NAME_START = 'carousel-item-start';\n    const CLASS_NAME_NEXT = 'carousel-item-next';\n    const CLASS_NAME_PREV = 'carousel-item-prev';\n    const SELECTOR_ACTIVE = '.active';\n    const SELECTOR_ITEM = '.carousel-item';\n    const SELECTOR_ACTIVE_ITEM = SELECTOR_ACTIVE + SELECTOR_ITEM;\n    const SELECTOR_ITEM_IMG = '.carousel-item img';\n    const SELECTOR_INDICATORS = '.carousel-indicators';\n    const SELECTOR_DATA_SLIDE = '[data-bs-slide], [data-bs-slide-to]';\n    const SELECTOR_DATA_RIDE = '[data-bs-ride=\"carousel\"]';\n    const KEY_TO_DIRECTION = {\n        [ARROW_LEFT_KEY$1]: DIRECTION_RIGHT,\n        [ARROW_RIGHT_KEY$1]: DIRECTION_LEFT\n    };\n    const Default$b = {\n        interval: 5000,\n        keyboard: true,\n        pause: 'hover',\n        ride: false,\n        touch: true,\n        wrap: true\n    };\n    const DefaultType$b = {\n        interval: '(number|boolean)',\n        // TODO:v6 remove boolean support\n        keyboard: 'boolean',\n        pause: '(string|boolean)',\n        ride: '(boolean|string)',\n        touch: 'boolean',\n        wrap: 'boolean'\n    };\n\n    /**\n     * Class definition\n     */\n\n    class Carousel extends BaseComponent {\n        constructor(element, config) {\n            super(element, config);\n            this._interval = null;\n            this._activeElement = null;\n            this._isSliding = false;\n            this.touchTimeout = null;\n            this._swipeHelper = null;\n            this._indicatorsElement = SelectorEngine.findOne(SELECTOR_INDICATORS, this._element);\n\n            this._addEventListeners();\n\n            if (this._config.ride === CLASS_NAME_CAROUSEL) {\n                this.cycle();\n            }\n        } // Getters\n\n\n        static get Default() {\n            return Default$b;\n        }\n\n        static get DefaultType() {\n            return DefaultType$b;\n        }\n\n        static get NAME() {\n            return NAME$c;\n        } // Public\n\n        static jQueryInterface(config) {\n            return this.each(function () {\n                const data = Carousel.getOrCreateInstance(this, config);\n\n                if (typeof config === 'number') {\n                    data.to(config);\n                    return;\n                }\n\n                if (typeof config === 'string') {\n                    if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n                        throw new TypeError(`No method named \"${config}\"`);\n                    }\n\n                    data[config]();\n                }\n            });\n        }\n\n        next() {\n            this._slide(ORDER_NEXT);\n        }\n\n        nextWhenVisible() {\n            // FIXME TODO use `document.visibilityState`\n            // Don't call next when the page isn't visible\n            // or the carousel or its parent isn't visible\n            if (!document.hidden && isVisible(this._element)) {\n                this.next();\n            }\n        }\n\n        prev() {\n            this._slide(ORDER_PREV);\n        }\n\n        pause() {\n            if (this._isSliding) {\n                triggerTransitionEnd(this._element);\n            }\n\n            this._clearInterval();\n        }\n\n        cycle() {\n            this._clearInterval();\n\n            this._updateInterval();\n\n            this._interval = setInterval(() => this.nextWhenVisible(), this._config.interval);\n        }\n\n        _maybeEnableCycle() {\n            if (!this._config.ride) {\n                return;\n            }\n\n            if (this._isSliding) {\n                EventHandler.one(this._element, EVENT_SLID, () => this.cycle());\n                return;\n            }\n\n            this.cycle();\n        }\n\n        to(index) {\n            const items = this._getItems();\n\n            if (index > items.length - 1 || index < 0) {\n                return;\n            }\n\n            if (this._isSliding) {\n                EventHandler.one(this._element, EVENT_SLID, () => this.to(index));\n                return;\n            }\n\n            const activeIndex = this._getItemIndex(this._getActive());\n\n            if (activeIndex === index) {\n                return;\n            }\n\n            const order = index > activeIndex ? ORDER_NEXT : ORDER_PREV;\n\n            this._slide(order, items[index]);\n        }\n\n        dispose() {\n            if (this._swipeHelper) {\n                this._swipeHelper.dispose();\n            }\n\n            super.dispose();\n        } // Private\n\n        _configAfterMerge(config) {\n            config.defaultInterval = config.interval;\n            return config;\n        }\n\n        _addEventListeners() {\n            if (this._config.keyboard) {\n                EventHandler.on(this._element, EVENT_KEYDOWN$1, event => this._keydown(event));\n            }\n\n            if (this._config.pause === 'hover') {\n                EventHandler.on(this._element, EVENT_MOUSEENTER$1, () => this.pause());\n                EventHandler.on(this._element, EVENT_MOUSELEAVE$1, () => this._maybeEnableCycle());\n            }\n\n            if (this._config.touch && Swipe.isSupported()) {\n                this._addTouchEventListeners();\n            }\n        }\n\n        _addTouchEventListeners() {\n            for (const img of SelectorEngine.find(SELECTOR_ITEM_IMG, this._element)) {\n                EventHandler.on(img, EVENT_DRAG_START, event => event.preventDefault());\n            }\n\n            const endCallBack = () => {\n                if (this._config.pause !== 'hover') {\n                    return;\n                } // If it's a touch-enabled device, mouseenter/leave are fired as\n                // part of the mouse compatibility events on first tap - the carousel\n                // would stop cycling until user tapped out of it;\n                // here, we listen for touchend, explicitly pause the carousel\n                // (as if it's the second time we tap on it, mouseenter compat event\n                // is NOT fired) and after a timeout (to allow for mouse compatibility\n                // events to fire) we explicitly restart cycling\n\n\n                this.pause();\n\n                if (this.touchTimeout) {\n                    clearTimeout(this.touchTimeout);\n                }\n\n                this.touchTimeout = setTimeout(() => this._maybeEnableCycle(), TOUCHEVENT_COMPAT_WAIT + this._config.interval);\n            };\n\n            const swipeConfig = {\n                leftCallback: () => this._slide(this._directionToOrder(DIRECTION_LEFT)),\n                rightCallback: () => this._slide(this._directionToOrder(DIRECTION_RIGHT)),\n                endCallback: endCallBack\n            };\n            this._swipeHelper = new Swipe(this._element, swipeConfig);\n        }\n\n        _keydown(event) {\n            if (/input|textarea/i.test(event.target.tagName)) {\n                return;\n            }\n\n            const direction = KEY_TO_DIRECTION[event.key];\n\n            if (direction) {\n                event.preventDefault();\n\n                this._slide(this._directionToOrder(direction));\n            }\n        }\n\n        _getItemIndex(element) {\n            return this._getItems().indexOf(element);\n        }\n\n        _setActiveIndicatorElement(index) {\n            if (!this._indicatorsElement) {\n                return;\n            }\n\n            const activeIndicator = SelectorEngine.findOne(SELECTOR_ACTIVE, this._indicatorsElement);\n            activeIndicator.classList.remove(CLASS_NAME_ACTIVE$2);\n            activeIndicator.removeAttribute('aria-current');\n            const newActiveIndicator = SelectorEngine.findOne(`[data-bs-slide-to=\"${index}\"]`, this._indicatorsElement);\n\n            if (newActiveIndicator) {\n                newActiveIndicator.classList.add(CLASS_NAME_ACTIVE$2);\n                newActiveIndicator.setAttribute('aria-current', 'true');\n            }\n        }\n\n        _updateInterval() {\n            const element = this._activeElement || this._getActive();\n\n            if (!element) {\n                return;\n            }\n\n            const elementInterval = Number.parseInt(element.getAttribute('data-bs-interval'), 10);\n            this._config.interval = elementInterval || this._config.defaultInterval;\n        }\n\n        _slide(order, element = null) {\n            if (this._isSliding) {\n                return;\n            }\n\n            const activeElement = this._getActive();\n\n            const isNext = order === ORDER_NEXT;\n            const nextElement = element || getNextActiveElement(this._getItems(), activeElement, isNext, this._config.wrap);\n\n            if (nextElement === activeElement) {\n                return;\n            }\n\n            const nextElementIndex = this._getItemIndex(nextElement);\n\n            const triggerEvent = eventName => {\n                return EventHandler.trigger(this._element, eventName, {\n                    relatedTarget: nextElement,\n                    direction: this._orderToDirection(order),\n                    from: this._getItemIndex(activeElement),\n                    to: nextElementIndex\n                });\n            };\n\n            const slideEvent = triggerEvent(EVENT_SLIDE);\n\n            if (slideEvent.defaultPrevented) {\n                return;\n            }\n\n            if (!activeElement || !nextElement) {\n                // Some weirdness is happening, so we bail\n                // todo: change tests that use empty divs to avoid this check\n                return;\n            }\n\n            const isCycling = Boolean(this._interval);\n            this.pause();\n            this._isSliding = true;\n\n            this._setActiveIndicatorElement(nextElementIndex);\n\n            this._activeElement = nextElement;\n            const directionalClassName = isNext ? CLASS_NAME_START : CLASS_NAME_END;\n            const orderClassName = isNext ? CLASS_NAME_NEXT : CLASS_NAME_PREV;\n            nextElement.classList.add(orderClassName);\n            reflow(nextElement);\n            activeElement.classList.add(directionalClassName);\n            nextElement.classList.add(directionalClassName);\n\n            const completeCallBack = () => {\n                nextElement.classList.remove(directionalClassName, orderClassName);\n                nextElement.classList.add(CLASS_NAME_ACTIVE$2);\n                activeElement.classList.remove(CLASS_NAME_ACTIVE$2, orderClassName, directionalClassName);\n                this._isSliding = false;\n                triggerEvent(EVENT_SLID);\n            };\n\n            this._queueCallback(completeCallBack, activeElement, this._isAnimated());\n\n            if (isCycling) {\n                this.cycle();\n            }\n        }\n\n        _isAnimated() {\n            return this._element.classList.contains(CLASS_NAME_SLIDE);\n        }\n\n        _getActive() {\n            return SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);\n        }\n\n        _getItems() {\n            return SelectorEngine.find(SELECTOR_ITEM, this._element);\n        }\n\n        _clearInterval() {\n            if (this._interval) {\n                clearInterval(this._interval);\n                this._interval = null;\n            }\n        }\n\n        _directionToOrder(direction) {\n            if (isRTL()) {\n                return direction === DIRECTION_LEFT ? ORDER_PREV : ORDER_NEXT;\n            }\n\n            return direction === DIRECTION_LEFT ? ORDER_NEXT : ORDER_PREV;\n        }\n\n        _orderToDirection(order) {\n            if (isRTL()) {\n                return order === ORDER_PREV ? DIRECTION_LEFT : DIRECTION_RIGHT;\n            }\n\n            return order === ORDER_PREV ? DIRECTION_RIGHT : DIRECTION_LEFT;\n        } // Static\n\n    }\n\n    /**\n     * Data API implementation\n     */\n\n\n    EventHandler.on(document, EVENT_CLICK_DATA_API$5, SELECTOR_DATA_SLIDE, function (event) {\n        const target = getElementFromSelector(this);\n\n        if (!target || !target.classList.contains(CLASS_NAME_CAROUSEL)) {\n            return;\n        }\n\n        event.preventDefault();\n        const carousel = Carousel.getOrCreateInstance(target);\n        const slideIndex = this.getAttribute('data-bs-slide-to');\n\n        if (slideIndex) {\n            carousel.to(slideIndex);\n\n            carousel._maybeEnableCycle();\n\n            return;\n        }\n\n        if (Manipulator.getDataAttribute(this, 'slide') === 'next') {\n            carousel.next();\n\n            carousel._maybeEnableCycle();\n\n            return;\n        }\n\n        carousel.prev();\n\n        carousel._maybeEnableCycle();\n    });\n    EventHandler.on(window, EVENT_LOAD_DATA_API$3, () => {\n        const carousels = SelectorEngine.find(SELECTOR_DATA_RIDE);\n\n        for (const carousel of carousels) {\n            Carousel.getOrCreateInstance(carousel);\n        }\n    });\n    /**\n     * jQuery\n     */\n\n    defineJQueryPlugin(Carousel);\n\n    /**\n     * --------------------------------------------------------------------------\n     * Bootstrap (v5.2.3): collapse.js\n     * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n     * --------------------------------------------------------------------------\n     */\n    /**\n     * Constants\n     */\n\n    const NAME$b = 'collapse';\n    const DATA_KEY$7 = 'bs.collapse';\n    const EVENT_KEY$7 = `.${DATA_KEY$7}`;\n    const DATA_API_KEY$4 = '.data-api';\n    const EVENT_SHOW$6 = `show${EVENT_KEY$7}`;\n    const EVENT_SHOWN$6 = `shown${EVENT_KEY$7}`;\n    const EVENT_HIDE$6 = `hide${EVENT_KEY$7}`;\n    const EVENT_HIDDEN$6 = `hidden${EVENT_KEY$7}`;\n    const EVENT_CLICK_DATA_API$4 = `click${EVENT_KEY$7}${DATA_API_KEY$4}`;\n    const CLASS_NAME_SHOW$7 = 'show';\n    const CLASS_NAME_COLLAPSE = 'collapse';\n    const CLASS_NAME_COLLAPSING = 'collapsing';\n    const CLASS_NAME_COLLAPSED = 'collapsed';\n    const CLASS_NAME_DEEPER_CHILDREN = `:scope .${CLASS_NAME_COLLAPSE} .${CLASS_NAME_COLLAPSE}`;\n    const CLASS_NAME_HORIZONTAL = 'collapse-horizontal';\n    const WIDTH = 'width';\n    const HEIGHT = 'height';\n    const SELECTOR_ACTIVES = '.collapse.show, .collapse.collapsing';\n    const SELECTOR_DATA_TOGGLE$4 = '[data-bs-toggle=\"collapse\"]';\n    const Default$a = {\n        parent: null,\n        toggle: true\n    };\n    const DefaultType$a = {\n        parent: '(null|element)',\n        toggle: 'boolean'\n    };\n\n    /**\n     * Class definition\n     */\n\n    class Collapse extends BaseComponent {\n        constructor(element, config) {\n            super(element, config);\n            this._isTransitioning = false;\n            this._triggerArray = [];\n            const toggleList = SelectorEngine.find(SELECTOR_DATA_TOGGLE$4);\n\n            for (const elem of toggleList) {\n                const selector = getSelectorFromElement(elem);\n                const filterElement = SelectorEngine.find(selector).filter(foundElement => foundElement === this._element);\n\n                if (selector !== null && filterElement.length) {\n                    this._triggerArray.push(elem);\n                }\n            }\n\n            this._initializeChildren();\n\n            if (!this._config.parent) {\n                this._addAriaAndCollapsedClass(this._triggerArray, this._isShown());\n            }\n\n            if (this._config.toggle) {\n                this.toggle();\n            }\n        } // Getters\n\n\n        static get Default() {\n            return Default$a;\n        }\n\n        static get DefaultType() {\n            return DefaultType$a;\n        }\n\n        static get NAME() {\n            return NAME$b;\n        } // Public\n\n        static jQueryInterface(config) {\n            const _config = {};\n\n            if (typeof config === 'string' && /show|hide/.test(config)) {\n                _config.toggle = false;\n            }\n\n            return this.each(function () {\n                const data = Collapse.getOrCreateInstance(this, _config);\n\n                if (typeof config === 'string') {\n                    if (typeof data[config] === 'undefined') {\n                        throw new TypeError(`No method named \"${config}\"`);\n                    }\n\n                    data[config]();\n                }\n            });\n        }\n\n        toggle() {\n            if (this._isShown()) {\n                this.hide();\n            } else {\n                this.show();\n            }\n        }\n\n        show() {\n            if (this._isTransitioning || this._isShown()) {\n                return;\n            }\n\n            let activeChildren = []; // find active children\n\n            if (this._config.parent) {\n                activeChildren = this._getFirstLevelChildren(SELECTOR_ACTIVES).filter(element => element !== this._element).map(element => Collapse.getOrCreateInstance(element, {\n                    toggle: false\n                }));\n            }\n\n            if (activeChildren.length && activeChildren[0]._isTransitioning) {\n                return;\n            }\n\n            const startEvent = EventHandler.trigger(this._element, EVENT_SHOW$6);\n\n            if (startEvent.defaultPrevented) {\n                return;\n            }\n\n            for (const activeInstance of activeChildren) {\n                activeInstance.hide();\n            }\n\n            const dimension = this._getDimension();\n\n            this._element.classList.remove(CLASS_NAME_COLLAPSE);\n\n            this._element.classList.add(CLASS_NAME_COLLAPSING);\n\n            this._element.style[dimension] = 0;\n\n            this._addAriaAndCollapsedClass(this._triggerArray, true);\n\n            this._isTransitioning = true;\n\n            const complete = () => {\n                this._isTransitioning = false;\n\n                this._element.classList.remove(CLASS_NAME_COLLAPSING);\n\n                this._element.classList.add(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$7);\n\n                this._element.style[dimension] = '';\n                EventHandler.trigger(this._element, EVENT_SHOWN$6);\n            };\n\n            const capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1);\n            const scrollSize = `scroll${capitalizedDimension}`;\n\n            this._queueCallback(complete, this._element, true);\n\n            this._element.style[dimension] = `${this._element[scrollSize]}px`;\n        }\n\n        hide() {\n            if (this._isTransitioning || !this._isShown()) {\n                return;\n            }\n\n            const startEvent = EventHandler.trigger(this._element, EVENT_HIDE$6);\n\n            if (startEvent.defaultPrevented) {\n                return;\n            }\n\n            const dimension = this._getDimension();\n\n            this._element.style[dimension] = `${this._element.getBoundingClientRect()[dimension]}px`;\n            reflow(this._element);\n\n            this._element.classList.add(CLASS_NAME_COLLAPSING);\n\n            this._element.classList.remove(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$7);\n\n            for (const trigger of this._triggerArray) {\n                const element = getElementFromSelector(trigger);\n\n                if (element && !this._isShown(element)) {\n                    this._addAriaAndCollapsedClass([trigger], false);\n                }\n            }\n\n            this._isTransitioning = true;\n\n            const complete = () => {\n                this._isTransitioning = false;\n\n                this._element.classList.remove(CLASS_NAME_COLLAPSING);\n\n                this._element.classList.add(CLASS_NAME_COLLAPSE);\n\n                EventHandler.trigger(this._element, EVENT_HIDDEN$6);\n            };\n\n            this._element.style[dimension] = '';\n\n            this._queueCallback(complete, this._element, true);\n        }\n\n        _isShown(element = this._element) {\n            return element.classList.contains(CLASS_NAME_SHOW$7);\n        } // Private\n\n        _configAfterMerge(config) {\n            config.toggle = Boolean(config.toggle); // Coerce string values\n\n            config.parent = getElement(config.parent);\n            return config;\n        }\n\n        _getDimension() {\n            return this._element.classList.contains(CLASS_NAME_HORIZONTAL) ? WIDTH : HEIGHT;\n        }\n\n        _initializeChildren() {\n            if (!this._config.parent) {\n                return;\n            }\n\n            const children = this._getFirstLevelChildren(SELECTOR_DATA_TOGGLE$4);\n\n            for (const element of children) {\n                const selected = getElementFromSelector(element);\n\n                if (selected) {\n                    this._addAriaAndCollapsedClass([element], this._isShown(selected));\n                }\n            }\n        }\n\n        _getFirstLevelChildren(selector) {\n            const children = SelectorEngine.find(CLASS_NAME_DEEPER_CHILDREN, this._config.parent); // remove children if greater depth\n\n            return SelectorEngine.find(selector, this._config.parent).filter(element => !children.includes(element));\n        }\n\n        _addAriaAndCollapsedClass(triggerArray, isOpen) {\n            if (!triggerArray.length) {\n                return;\n            }\n\n            for (const element of triggerArray) {\n                element.classList.toggle(CLASS_NAME_COLLAPSED, !isOpen);\n                element.setAttribute('aria-expanded', isOpen);\n            }\n        } // Static\n\n    }\n\n    /**\n     * Data API implementation\n     */\n\n\n    EventHandler.on(document, EVENT_CLICK_DATA_API$4, SELECTOR_DATA_TOGGLE$4, function (event) {\n        // preventDefault only for <a> elements (which change the URL) not inside the collapsible element\n        if (event.target.tagName === 'A' || event.delegateTarget && event.delegateTarget.tagName === 'A') {\n            event.preventDefault();\n        }\n\n        const selector = getSelectorFromElement(this);\n        const selectorElements = SelectorEngine.find(selector);\n\n        for (const element of selectorElements) {\n            Collapse.getOrCreateInstance(element, {\n                toggle: false\n            }).toggle();\n        }\n    });\n    /**\n     * jQuery\n     */\n\n    defineJQueryPlugin(Collapse);\n\n    /**\n     * --------------------------------------------------------------------------\n     * Bootstrap (v5.2.3): dropdown.js\n     * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n     * --------------------------------------------------------------------------\n     */\n    /**\n     * Constants\n     */\n\n    const NAME$a = 'dropdown';\n    const DATA_KEY$6 = 'bs.dropdown';\n    const EVENT_KEY$6 = `.${DATA_KEY$6}`;\n    const DATA_API_KEY$3 = '.data-api';\n    const ESCAPE_KEY$2 = 'Escape';\n    const TAB_KEY$1 = 'Tab';\n    const ARROW_UP_KEY$1 = 'ArrowUp';\n    const ARROW_DOWN_KEY$1 = 'ArrowDown';\n    const RIGHT_MOUSE_BUTTON = 2; // MouseEvent.button value for the secondary button, usually the right button\n\n    const EVENT_HIDE$5 = `hide${EVENT_KEY$6}`;\n    const EVENT_HIDDEN$5 = `hidden${EVENT_KEY$6}`;\n    const EVENT_SHOW$5 = `show${EVENT_KEY$6}`;\n    const EVENT_SHOWN$5 = `shown${EVENT_KEY$6}`;\n    const EVENT_CLICK_DATA_API$3 = `click${EVENT_KEY$6}${DATA_API_KEY$3}`;\n    const EVENT_KEYDOWN_DATA_API = `keydown${EVENT_KEY$6}${DATA_API_KEY$3}`;\n    const EVENT_KEYUP_DATA_API = `keyup${EVENT_KEY$6}${DATA_API_KEY$3}`;\n    const CLASS_NAME_SHOW$6 = 'show';\n    const CLASS_NAME_DROPUP = 'dropup';\n    const CLASS_NAME_DROPEND = 'dropend';\n    const CLASS_NAME_DROPSTART = 'dropstart';\n    const CLASS_NAME_DROPUP_CENTER = 'dropup-center';\n    const CLASS_NAME_DROPDOWN_CENTER = 'dropdown-center';\n    const SELECTOR_DATA_TOGGLE$3 = '[data-bs-toggle=\"dropdown\"]:not(.disabled):not(:disabled)';\n    const SELECTOR_DATA_TOGGLE_SHOWN = `${SELECTOR_DATA_TOGGLE$3}.${CLASS_NAME_SHOW$6}`;\n    const SELECTOR_MENU = '.dropdown-menu';\n    const SELECTOR_NAVBAR = '.navbar';\n    const SELECTOR_NAVBAR_NAV = '.navbar-nav';\n    const SELECTOR_VISIBLE_ITEMS = '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)';\n    const PLACEMENT_TOP = isRTL() ? 'top-end' : 'top-start';\n    const PLACEMENT_TOPEND = isRTL() ? 'top-start' : 'top-end';\n    const PLACEMENT_BOTTOM = isRTL() ? 'bottom-end' : 'bottom-start';\n    const PLACEMENT_BOTTOMEND = isRTL() ? 'bottom-start' : 'bottom-end';\n    const PLACEMENT_RIGHT = isRTL() ? 'left-start' : 'right-start';\n    const PLACEMENT_LEFT = isRTL() ? 'right-start' : 'left-start';\n    const PLACEMENT_TOPCENTER = 'top';\n    const PLACEMENT_BOTTOMCENTER = 'bottom';\n    const Default$9 = {\n        autoClose: true,\n        boundary: 'clippingParents',\n        display: 'dynamic',\n        offset: [0, 2],\n        popperConfig: null,\n        reference: 'toggle'\n    };\n    const DefaultType$9 = {\n        autoClose: '(boolean|string)',\n        boundary: '(string|element)',\n        display: 'string',\n        offset: '(array|string|function)',\n        popperConfig: '(null|object|function)',\n        reference: '(string|element|object)'\n    };\n\n    /**\n     * Class definition\n     */\n\n    class Dropdown extends BaseComponent {\n        constructor(element, config) {\n            super(element, config);\n            this._popper = null;\n            this._parent = this._element.parentNode; // dropdown wrapper\n            // todo: v6 revert #37011 & change markup https://getbootstrap.com/docs/5.2/forms/input-group/\n\n            this._menu = SelectorEngine.next(this._element, SELECTOR_MENU)[0] || SelectorEngine.prev(this._element, SELECTOR_MENU)[0] || SelectorEngine.findOne(SELECTOR_MENU, this._parent);\n            this._inNavbar = this._detectNavbar();\n        } // Getters\n\n\n        static get Default() {\n            return Default$9;\n        }\n\n        static get DefaultType() {\n            return DefaultType$9;\n        }\n\n        static get NAME() {\n            return NAME$a;\n        } // Public\n\n        static jQueryInterface(config) {\n            return this.each(function () {\n                const data = Dropdown.getOrCreateInstance(this, config);\n\n                if (typeof config !== 'string') {\n                    return;\n                }\n\n                if (typeof data[config] === 'undefined') {\n                    throw new TypeError(`No method named \"${config}\"`);\n                }\n\n                data[config]();\n            });\n        }\n\n        static clearMenus(event) {\n            if (event.button === RIGHT_MOUSE_BUTTON || event.type === 'keyup' && event.key !== TAB_KEY$1) {\n                return;\n            }\n\n            const openToggles = SelectorEngine.find(SELECTOR_DATA_TOGGLE_SHOWN);\n\n            for (const toggle of openToggles) {\n                const context = Dropdown.getInstance(toggle);\n\n                if (!context || context._config.autoClose === false) {\n                    continue;\n                }\n\n                const composedPath = event.composedPath();\n                const isMenuTarget = composedPath.includes(context._menu);\n\n                if (composedPath.includes(context._element) || context._config.autoClose === 'inside' && !isMenuTarget || context._config.autoClose === 'outside' && isMenuTarget) {\n                    continue;\n                } // Tab navigation through the dropdown menu or events from contained inputs shouldn't close the menu\n\n\n                if (context._menu.contains(event.target) && (event.type === 'keyup' && event.key === TAB_KEY$1 || /input|select|option|textarea|form/i.test(event.target.tagName))) {\n                    continue;\n                }\n\n                const relatedTarget = {\n                    relatedTarget: context._element\n                };\n\n                if (event.type === 'click') {\n                    relatedTarget.clickEvent = event;\n                }\n\n                context._completeHide(relatedTarget);\n            }\n        }\n\n        static dataApiKeydownHandler(event) {\n            // If not an UP | DOWN | ESCAPE key => not a dropdown command\n            // If input/textarea && if key is other than ESCAPE => not a dropdown command\n            const isInput = /input|textarea/i.test(event.target.tagName);\n            const isEscapeEvent = event.key === ESCAPE_KEY$2;\n            const isUpOrDownEvent = [ARROW_UP_KEY$1, ARROW_DOWN_KEY$1].includes(event.key);\n\n            if (!isUpOrDownEvent && !isEscapeEvent) {\n                return;\n            }\n\n            if (isInput && !isEscapeEvent) {\n                return;\n            }\n\n            event.preventDefault(); // todo: v6 revert #37011 & change markup https://getbootstrap.com/docs/5.2/forms/input-group/\n\n            const getToggleButton = this.matches(SELECTOR_DATA_TOGGLE$3) ? this : SelectorEngine.prev(this, SELECTOR_DATA_TOGGLE$3)[0] || SelectorEngine.next(this, SELECTOR_DATA_TOGGLE$3)[0] || SelectorEngine.findOne(SELECTOR_DATA_TOGGLE$3, event.delegateTarget.parentNode);\n            const instance = Dropdown.getOrCreateInstance(getToggleButton);\n\n            if (isUpOrDownEvent) {\n                event.stopPropagation();\n                instance.show();\n\n                instance._selectMenuItem(event);\n\n                return;\n            }\n\n            if (instance._isShown()) {\n                // else is escape and we check if it is shown\n                event.stopPropagation();\n                instance.hide();\n                getToggleButton.focus();\n            }\n        }\n\n        toggle() {\n            return this._isShown() ? this.hide() : this.show();\n        }\n\n        show() {\n            if (isDisabled(this._element) || this._isShown()) {\n                return;\n            }\n\n            const relatedTarget = {\n                relatedTarget: this._element\n            };\n            const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$5, relatedTarget);\n\n            if (showEvent.defaultPrevented) {\n                return;\n            }\n\n            this._createPopper(); // If this is a touch-enabled device we add extra\n            // empty mouseover listeners to the body's immediate children;\n            // only needed because of broken event delegation on iOS\n            // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n\n\n            if ('ontouchstart' in document.documentElement && !this._parent.closest(SELECTOR_NAVBAR_NAV)) {\n                for (const element of [].concat(...document.body.children)) {\n                    EventHandler.on(element, 'mouseover', noop);\n                }\n            }\n\n            this._element.focus();\n\n            this._element.setAttribute('aria-expanded', true);\n\n            this._menu.classList.add(CLASS_NAME_SHOW$6);\n\n            this._element.classList.add(CLASS_NAME_SHOW$6);\n\n            EventHandler.trigger(this._element, EVENT_SHOWN$5, relatedTarget);\n        }\n\n        hide() {\n            if (isDisabled(this._element) || !this._isShown()) {\n                return;\n            }\n\n            const relatedTarget = {\n                relatedTarget: this._element\n            };\n\n            this._completeHide(relatedTarget);\n        }\n\n        dispose() {\n            if (this._popper) {\n                this._popper.destroy();\n            }\n\n            super.dispose();\n        }\n\n        update() {\n            this._inNavbar = this._detectNavbar();\n\n            if (this._popper) {\n                this._popper.update();\n            }\n        } // Private\n\n        _completeHide(relatedTarget) {\n            const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$5, relatedTarget);\n\n            if (hideEvent.defaultPrevented) {\n                return;\n            } // If this is a touch-enabled device we remove the extra\n            // empty mouseover listeners we added for iOS support\n\n\n            if ('ontouchstart' in document.documentElement) {\n                for (const element of [].concat(...document.body.children)) {\n                    EventHandler.off(element, 'mouseover', noop);\n                }\n            }\n\n            if (this._popper) {\n                this._popper.destroy();\n            }\n\n            this._menu.classList.remove(CLASS_NAME_SHOW$6);\n\n            this._element.classList.remove(CLASS_NAME_SHOW$6);\n\n            this._element.setAttribute('aria-expanded', 'false');\n\n            Manipulator.removeDataAttribute(this._menu, 'popper');\n            EventHandler.trigger(this._element, EVENT_HIDDEN$5, relatedTarget);\n        }\n\n        _getConfig(config) {\n            config = super._getConfig(config);\n\n            if (typeof config.reference === 'object' && !isElement(config.reference) && typeof config.reference.getBoundingClientRect !== 'function') {\n                // Popper virtual elements require a getBoundingClientRect method\n                throw new TypeError(`${NAME$a.toUpperCase()}: Option \"reference\" provided type \"object\" without a required \"getBoundingClientRect\" method.`);\n            }\n\n            return config;\n        }\n\n        _createPopper() {\n            if (typeof Popper__namespace === 'undefined') {\n                throw new TypeError('Bootstrap\\'s dropdowns require Popper (https://popper.js.org)');\n            }\n\n            let referenceElement = this._element;\n\n            if (this._config.reference === 'parent') {\n                referenceElement = this._parent;\n            } else if (isElement(this._config.reference)) {\n                referenceElement = getElement(this._config.reference);\n            } else if (typeof this._config.reference === 'object') {\n                referenceElement = this._config.reference;\n            }\n\n            const popperConfig = this._getPopperConfig();\n\n            this._popper = Popper__namespace.createPopper(referenceElement, this._menu, popperConfig);\n        }\n\n        _isShown() {\n            return this._menu.classList.contains(CLASS_NAME_SHOW$6);\n        }\n\n        _getPlacement() {\n            const parentDropdown = this._parent;\n\n            if (parentDropdown.classList.contains(CLASS_NAME_DROPEND)) {\n                return PLACEMENT_RIGHT;\n            }\n\n            if (parentDropdown.classList.contains(CLASS_NAME_DROPSTART)) {\n                return PLACEMENT_LEFT;\n            }\n\n            if (parentDropdown.classList.contains(CLASS_NAME_DROPUP_CENTER)) {\n                return PLACEMENT_TOPCENTER;\n            }\n\n            if (parentDropdown.classList.contains(CLASS_NAME_DROPDOWN_CENTER)) {\n                return PLACEMENT_BOTTOMCENTER;\n            } // We need to trim the value because custom properties can also include spaces\n\n\n            const isEnd = getComputedStyle(this._menu).getPropertyValue('--bs-position').trim() === 'end';\n\n            if (parentDropdown.classList.contains(CLASS_NAME_DROPUP)) {\n                return isEnd ? PLACEMENT_TOPEND : PLACEMENT_TOP;\n            }\n\n            return isEnd ? PLACEMENT_BOTTOMEND : PLACEMENT_BOTTOM;\n        }\n\n        _detectNavbar() {\n            return this._element.closest(SELECTOR_NAVBAR) !== null;\n        }\n\n        _getOffset() {\n            const {\n                offset\n            } = this._config;\n\n            if (typeof offset === 'string') {\n                return offset.split(',').map(value => Number.parseInt(value, 10));\n            }\n\n            if (typeof offset === 'function') {\n                return popperData => offset(popperData, this._element);\n            }\n\n            return offset;\n        }\n\n        _getPopperConfig() {\n            const defaultBsPopperConfig = {\n                placement: this._getPlacement(),\n                modifiers: [{\n                    name: 'preventOverflow',\n                    options: {\n                        boundary: this._config.boundary\n                    }\n                }, {\n                    name: 'offset',\n                    options: {\n                        offset: this._getOffset()\n                    }\n                }]\n            }; // Disable Popper if we have a static display or Dropdown is in Navbar\n\n            if (this._inNavbar || this._config.display === 'static') {\n                Manipulator.setDataAttribute(this._menu, 'popper', 'static'); // todo:v6 remove\n\n                defaultBsPopperConfig.modifiers = [{\n                    name: 'applyStyles',\n                    enabled: false\n                }];\n            }\n\n            return {\n                ...defaultBsPopperConfig,\n                ...(typeof this._config.popperConfig === 'function' ? this._config.popperConfig(defaultBsPopperConfig) : this._config.popperConfig)\n            };\n        }\n\n        _selectMenuItem({\n                            key,\n                            target\n                        }) {\n            const items = SelectorEngine.find(SELECTOR_VISIBLE_ITEMS, this._menu).filter(element => isVisible(element));\n\n            if (!items.length) {\n                return;\n            } // if target isn't included in items (e.g. when expanding the dropdown)\n            // allow cycling to get the last item in case key equals ARROW_UP_KEY\n\n\n            getNextActiveElement(items, target, key === ARROW_DOWN_KEY$1, !items.includes(target)).focus();\n        } // Static\n\n    }\n\n    /**\n     * Data API implementation\n     */\n\n\n    EventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE$3, Dropdown.dataApiKeydownHandler);\n    EventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown.dataApiKeydownHandler);\n    EventHandler.on(document, EVENT_CLICK_DATA_API$3, Dropdown.clearMenus);\n    EventHandler.on(document, EVENT_KEYUP_DATA_API, Dropdown.clearMenus);\n    EventHandler.on(document, EVENT_CLICK_DATA_API$3, SELECTOR_DATA_TOGGLE$3, function (event) {\n        event.preventDefault();\n        Dropdown.getOrCreateInstance(this).toggle();\n    });\n    /**\n     * jQuery\n     */\n\n    defineJQueryPlugin(Dropdown);\n\n    /**\n     * --------------------------------------------------------------------------\n     * Bootstrap (v5.2.3): util/scrollBar.js\n     * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n     * --------------------------------------------------------------------------\n     */\n    /**\n     * Constants\n     */\n\n    const SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top';\n    const SELECTOR_STICKY_CONTENT = '.sticky-top';\n    const PROPERTY_PADDING = 'padding-right';\n    const PROPERTY_MARGIN = 'margin-right';\n\n    /**\n     * Class definition\n     */\n\n    class ScrollBarHelper {\n        constructor() {\n            this._element = document.body;\n        } // Public\n\n\n        getWidth() {\n            // https://developer.mozilla.org/en-US/docs/Web/API/Window/innerWidth#usage_notes\n            const documentWidth = document.documentElement.clientWidth;\n            return Math.abs(window.innerWidth - documentWidth);\n        }\n\n        hide() {\n            const width = this.getWidth();\n\n            this._disableOverFlow(); // give padding to element to balance the hidden scrollbar width\n\n\n            this._setElementAttributes(this._element, PROPERTY_PADDING, calculatedValue => calculatedValue + width); // trick: We adjust positive paddingRight and negative marginRight to sticky-top elements to keep showing fullwidth\n\n\n            this._setElementAttributes(SELECTOR_FIXED_CONTENT, PROPERTY_PADDING, calculatedValue => calculatedValue + width);\n\n            this._setElementAttributes(SELECTOR_STICKY_CONTENT, PROPERTY_MARGIN, calculatedValue => calculatedValue - width);\n        }\n\n        reset() {\n            this._resetElementAttributes(this._element, 'overflow');\n\n            this._resetElementAttributes(this._element, PROPERTY_PADDING);\n\n            this._resetElementAttributes(SELECTOR_FIXED_CONTENT, PROPERTY_PADDING);\n\n            this._resetElementAttributes(SELECTOR_STICKY_CONTENT, PROPERTY_MARGIN);\n        }\n\n        isOverflowing() {\n            return this.getWidth() > 0;\n        } // Private\n\n\n        _disableOverFlow() {\n            this._saveInitialAttribute(this._element, 'overflow');\n\n            this._element.style.overflow = 'hidden';\n        }\n\n        _setElementAttributes(selector, styleProperty, callback) {\n            const scrollbarWidth = this.getWidth();\n\n            const manipulationCallBack = element => {\n                if (element !== this._element && window.innerWidth > element.clientWidth + scrollbarWidth) {\n                    return;\n                }\n\n                this._saveInitialAttribute(element, styleProperty);\n\n                const calculatedValue = window.getComputedStyle(element).getPropertyValue(styleProperty);\n                element.style.setProperty(styleProperty, `${callback(Number.parseFloat(calculatedValue))}px`);\n            };\n\n            this._applyManipulationCallback(selector, manipulationCallBack);\n        }\n\n        _saveInitialAttribute(element, styleProperty) {\n            const actualValue = element.style.getPropertyValue(styleProperty);\n\n            if (actualValue) {\n                Manipulator.setDataAttribute(element, styleProperty, actualValue);\n            }\n        }\n\n        _resetElementAttributes(selector, styleProperty) {\n            const manipulationCallBack = element => {\n                const value = Manipulator.getDataAttribute(element, styleProperty); // We only want to remove the property if the value is `null`; the value can also be zero\n\n                if (value === null) {\n                    element.style.removeProperty(styleProperty);\n                    return;\n                }\n\n                Manipulator.removeDataAttribute(element, styleProperty);\n                element.style.setProperty(styleProperty, value);\n            };\n\n            this._applyManipulationCallback(selector, manipulationCallBack);\n        }\n\n        _applyManipulationCallback(selector, callBack) {\n            if (isElement(selector)) {\n                callBack(selector);\n                return;\n            }\n\n            for (const sel of SelectorEngine.find(selector, this._element)) {\n                callBack(sel);\n            }\n        }\n\n    }\n\n    /**\n     * --------------------------------------------------------------------------\n     * Bootstrap (v5.2.3): util/backdrop.js\n     * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n     * --------------------------------------------------------------------------\n     */\n    /**\n     * Constants\n     */\n\n    const NAME$9 = 'backdrop';\n    const CLASS_NAME_FADE$4 = 'fade';\n    const CLASS_NAME_SHOW$5 = 'show';\n    const EVENT_MOUSEDOWN = `mousedown.bs.${NAME$9}`;\n    const Default$8 = {\n        className: 'modal-backdrop',\n        clickCallback: null,\n        isAnimated: false,\n        isVisible: true,\n        // if false, we use the backdrop helper without adding any element to the dom\n        rootElement: 'body' // give the choice to place backdrop under different elements\n\n    };\n    const DefaultType$8 = {\n        className: 'string',\n        clickCallback: '(function|null)',\n        isAnimated: 'boolean',\n        isVisible: 'boolean',\n        rootElement: '(element|string)'\n    };\n\n    /**\n     * Class definition\n     */\n\n    class Backdrop extends Config {\n        constructor(config) {\n            super();\n            this._config = this._getConfig(config);\n            this._isAppended = false;\n            this._element = null;\n        } // Getters\n\n\n        static get Default() {\n            return Default$8;\n        }\n\n        static get DefaultType() {\n            return DefaultType$8;\n        }\n\n        static get NAME() {\n            return NAME$9;\n        } // Public\n\n\n        show(callback) {\n            if (!this._config.isVisible) {\n                execute(callback);\n                return;\n            }\n\n            this._append();\n\n            const element = this._getElement();\n\n            if (this._config.isAnimated) {\n                reflow(element);\n            }\n\n            element.classList.add(CLASS_NAME_SHOW$5);\n\n            this._emulateAnimation(() => {\n                execute(callback);\n            });\n        }\n\n        hide(callback) {\n            if (!this._config.isVisible) {\n                execute(callback);\n                return;\n            }\n\n            this._getElement().classList.remove(CLASS_NAME_SHOW$5);\n\n            this._emulateAnimation(() => {\n                this.dispose();\n                execute(callback);\n            });\n        }\n\n        dispose() {\n            if (!this._isAppended) {\n                return;\n            }\n\n            EventHandler.off(this._element, EVENT_MOUSEDOWN);\n\n            this._element.remove();\n\n            this._isAppended = false;\n        } // Private\n\n\n        _getElement() {\n            if (!this._element) {\n                const backdrop = document.createElement('div');\n                backdrop.className = this._config.className;\n\n                if (this._config.isAnimated) {\n                    backdrop.classList.add(CLASS_NAME_FADE$4);\n                }\n\n                this._element = backdrop;\n            }\n\n            return this._element;\n        }\n\n        _configAfterMerge(config) {\n            // use getElement() with the default \"body\" to get a fresh Element on each instantiation\n            config.rootElement = getElement(config.rootElement);\n            return config;\n        }\n\n        _append() {\n            if (this._isAppended) {\n                return;\n            }\n\n            const element = this._getElement();\n\n            this._config.rootElement.append(element);\n\n            EventHandler.on(element, EVENT_MOUSEDOWN, () => {\n                execute(this._config.clickCallback);\n            });\n            this._isAppended = true;\n        }\n\n        _emulateAnimation(callback) {\n            executeAfterTransition(callback, this._getElement(), this._config.isAnimated);\n        }\n\n    }\n\n    /**\n     * --------------------------------------------------------------------------\n     * Bootstrap (v5.2.3): util/focustrap.js\n     * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n     * --------------------------------------------------------------------------\n     */\n    /**\n     * Constants\n     */\n\n    const NAME$8 = 'focustrap';\n    const DATA_KEY$5 = 'bs.focustrap';\n    const EVENT_KEY$5 = `.${DATA_KEY$5}`;\n    const EVENT_FOCUSIN$2 = `focusin${EVENT_KEY$5}`;\n    const EVENT_KEYDOWN_TAB = `keydown.tab${EVENT_KEY$5}`;\n    const TAB_KEY = 'Tab';\n    const TAB_NAV_FORWARD = 'forward';\n    const TAB_NAV_BACKWARD = 'backward';\n    const Default$7 = {\n        autofocus: true,\n        trapElement: null // The element to trap focus inside of\n\n    };\n    const DefaultType$7 = {\n        autofocus: 'boolean',\n        trapElement: 'element'\n    };\n\n    /**\n     * Class definition\n     */\n\n    class FocusTrap extends Config {\n        constructor(config) {\n            super();\n            this._config = this._getConfig(config);\n            this._isActive = false;\n            this._lastTabNavDirection = null;\n        } // Getters\n\n\n        static get Default() {\n            return Default$7;\n        }\n\n        static get DefaultType() {\n            return DefaultType$7;\n        }\n\n        static get NAME() {\n            return NAME$8;\n        } // Public\n\n\n        activate() {\n            if (this._isActive) {\n                return;\n            }\n\n            if (this._config.autofocus) {\n                this._config.trapElement.focus();\n            }\n\n            EventHandler.off(document, EVENT_KEY$5); // guard against infinite focus loop\n\n            EventHandler.on(document, EVENT_FOCUSIN$2, event => this._handleFocusin(event));\n            EventHandler.on(document, EVENT_KEYDOWN_TAB, event => this._handleKeydown(event));\n            this._isActive = true;\n        }\n\n        deactivate() {\n            if (!this._isActive) {\n                return;\n            }\n\n            this._isActive = false;\n            EventHandler.off(document, EVENT_KEY$5);\n        } // Private\n\n\n        _handleFocusin(event) {\n            const {\n                trapElement\n            } = this._config;\n\n            if (event.target === document || event.target === trapElement || trapElement.contains(event.target)) {\n                return;\n            }\n\n            const elements = SelectorEngine.focusableChildren(trapElement);\n\n            if (elements.length === 0) {\n                trapElement.focus();\n            } else if (this._lastTabNavDirection === TAB_NAV_BACKWARD) {\n                elements[elements.length - 1].focus();\n            } else {\n                elements[0].focus();\n            }\n        }\n\n        _handleKeydown(event) {\n            if (event.key !== TAB_KEY) {\n                return;\n            }\n\n            this._lastTabNavDirection = event.shiftKey ? TAB_NAV_BACKWARD : TAB_NAV_FORWARD;\n        }\n\n    }\n\n    /**\n     * --------------------------------------------------------------------------\n     * Bootstrap (v5.2.3): modal.js\n     * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n     * --------------------------------------------------------------------------\n     */\n    /**\n     * Constants\n     */\n\n    const NAME$7 = 'modal';\n    const DATA_KEY$4 = 'bs.modal';\n    const EVENT_KEY$4 = `.${DATA_KEY$4}`;\n    const DATA_API_KEY$2 = '.data-api';\n    const ESCAPE_KEY$1 = 'Escape';\n    const EVENT_HIDE$4 = `hide${EVENT_KEY$4}`;\n    const EVENT_HIDE_PREVENTED$1 = `hidePrevented${EVENT_KEY$4}`;\n    const EVENT_HIDDEN$4 = `hidden${EVENT_KEY$4}`;\n    const EVENT_SHOW$4 = `show${EVENT_KEY$4}`;\n    const EVENT_SHOWN$4 = `shown${EVENT_KEY$4}`;\n    const EVENT_RESIZE$1 = `resize${EVENT_KEY$4}`;\n    const EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY$4}`;\n    const EVENT_MOUSEDOWN_DISMISS = `mousedown.dismiss${EVENT_KEY$4}`;\n    const EVENT_KEYDOWN_DISMISS$1 = `keydown.dismiss${EVENT_KEY$4}`;\n    const EVENT_CLICK_DATA_API$2 = `click${EVENT_KEY$4}${DATA_API_KEY$2}`;\n    const CLASS_NAME_OPEN = 'modal-open';\n    const CLASS_NAME_FADE$3 = 'fade';\n    const CLASS_NAME_SHOW$4 = 'show';\n    const CLASS_NAME_STATIC = 'modal-static';\n    const OPEN_SELECTOR$1 = '.modal.show';\n    const SELECTOR_DIALOG = '.modal-dialog';\n    const SELECTOR_MODAL_BODY = '.modal-body';\n    const SELECTOR_DATA_TOGGLE$2 = '[data-bs-toggle=\"modal\"]';\n    const Default$6 = {\n        backdrop: true,\n        focus: true,\n        keyboard: true\n    };\n    const DefaultType$6 = {\n        backdrop: '(boolean|string)',\n        focus: 'boolean',\n        keyboard: 'boolean'\n    };\n\n    /**\n     * Class definition\n     */\n\n    class Modal extends BaseComponent {\n        constructor(element, config) {\n            super(element, config);\n            this._dialog = SelectorEngine.findOne(SELECTOR_DIALOG, this._element);\n            this._backdrop = this._initializeBackDrop();\n            this._focustrap = this._initializeFocusTrap();\n            this._isShown = false;\n            this._isTransitioning = false;\n            this._scrollBar = new ScrollBarHelper();\n\n            this._addEventListeners();\n        } // Getters\n\n\n        static get Default() {\n            return Default$6;\n        }\n\n        static get DefaultType() {\n            return DefaultType$6;\n        }\n\n        static get NAME() {\n            return NAME$7;\n        } // Public\n\n        static jQueryInterface(config, relatedTarget) {\n            return this.each(function () {\n                const data = Modal.getOrCreateInstance(this, config);\n\n                if (typeof config !== 'string') {\n                    return;\n                }\n\n                if (typeof data[config] === 'undefined') {\n                    throw new TypeError(`No method named \"${config}\"`);\n                }\n\n                data[config](relatedTarget);\n            });\n        }\n\n        toggle(relatedTarget) {\n            return this._isShown ? this.hide() : this.show(relatedTarget);\n        }\n\n        show(relatedTarget) {\n            if (this._isShown || this._isTransitioning) {\n                return;\n            }\n\n            const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$4, {\n                relatedTarget\n            });\n\n            if (showEvent.defaultPrevented) {\n                return;\n            }\n\n            this._isShown = true;\n            this._isTransitioning = true;\n\n            this._scrollBar.hide();\n\n            document.body.classList.add(CLASS_NAME_OPEN);\n\n            this._adjustDialog();\n\n            this._backdrop.show(() => this._showElement(relatedTarget));\n        }\n\n        hide() {\n            if (!this._isShown || this._isTransitioning) {\n                return;\n            }\n\n            const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$4);\n\n            if (hideEvent.defaultPrevented) {\n                return;\n            }\n\n            this._isShown = false;\n            this._isTransitioning = true;\n\n            this._focustrap.deactivate();\n\n            this._element.classList.remove(CLASS_NAME_SHOW$4);\n\n            this._queueCallback(() => this._hideModal(), this._element, this._isAnimated());\n        }\n\n        dispose() {\n            for (const htmlElement of [window, this._dialog]) {\n                EventHandler.off(htmlElement, EVENT_KEY$4);\n            }\n\n            this._backdrop.dispose();\n\n            this._focustrap.deactivate();\n\n            super.dispose();\n        }\n\n        handleUpdate() {\n            this._adjustDialog();\n        } // Private\n\n        _initializeBackDrop() {\n            return new Backdrop({\n                isVisible: Boolean(this._config.backdrop),\n                // 'static' option will be translated to true, and booleans will keep their value,\n                isAnimated: this._isAnimated()\n            });\n        }\n\n        _initializeFocusTrap() {\n            return new FocusTrap({\n                trapElement: this._element\n            });\n        }\n\n        _showElement(relatedTarget) {\n            // try to append dynamic modal\n            if (!document.body.contains(this._element)) {\n                document.body.append(this._element);\n            }\n\n            this._element.style.display = 'block';\n\n            this._element.removeAttribute('aria-hidden');\n\n            this._element.setAttribute('aria-modal', true);\n\n            this._element.setAttribute('role', 'dialog');\n\n            this._element.scrollTop = 0;\n            const modalBody = SelectorEngine.findOne(SELECTOR_MODAL_BODY, this._dialog);\n\n            if (modalBody) {\n                modalBody.scrollTop = 0;\n            }\n\n            reflow(this._element);\n\n            this._element.classList.add(CLASS_NAME_SHOW$4);\n\n            const transitionComplete = () => {\n                if (this._config.focus) {\n                    this._focustrap.activate();\n                }\n\n                this._isTransitioning = false;\n                EventHandler.trigger(this._element, EVENT_SHOWN$4, {\n                    relatedTarget\n                });\n            };\n\n            this._queueCallback(transitionComplete, this._dialog, this._isAnimated());\n        }\n\n        _addEventListeners() {\n            EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS$1, event => {\n                if (event.key !== ESCAPE_KEY$1) {\n                    return;\n                }\n\n                if (this._config.keyboard) {\n                    event.preventDefault();\n                    this.hide();\n                    return;\n                }\n\n                this._triggerBackdropTransition();\n            });\n            EventHandler.on(window, EVENT_RESIZE$1, () => {\n                if (this._isShown && !this._isTransitioning) {\n                    this._adjustDialog();\n                }\n            });\n            EventHandler.on(this._element, EVENT_MOUSEDOWN_DISMISS, event => {\n                // a bad trick to segregate clicks that may start inside dialog but end outside, and avoid listen to scrollbar clicks\n                EventHandler.one(this._element, EVENT_CLICK_DISMISS, event2 => {\n                    if (this._element !== event.target || this._element !== event2.target) {\n                        return;\n                    }\n\n                    if (this._config.backdrop === 'static') {\n                        this._triggerBackdropTransition();\n\n                        return;\n                    }\n\n                    if (this._config.backdrop) {\n                        this.hide();\n                    }\n                });\n            });\n        }\n\n        _hideModal() {\n            this._element.style.display = 'none';\n\n            this._element.setAttribute('aria-hidden', true);\n\n            this._element.removeAttribute('aria-modal');\n\n            this._element.removeAttribute('role');\n\n            this._isTransitioning = false;\n\n            this._backdrop.hide(() => {\n                document.body.classList.remove(CLASS_NAME_OPEN);\n\n                this._resetAdjustments();\n\n                this._scrollBar.reset();\n\n                EventHandler.trigger(this._element, EVENT_HIDDEN$4);\n            });\n        }\n\n        _isAnimated() {\n            return this._element.classList.contains(CLASS_NAME_FADE$3);\n        }\n\n        _triggerBackdropTransition() {\n            const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED$1);\n\n            if (hideEvent.defaultPrevented) {\n                return;\n            }\n\n            const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;\n            const initialOverflowY = this._element.style.overflowY; // return if the following background transition hasn't yet completed\n\n            if (initialOverflowY === 'hidden' || this._element.classList.contains(CLASS_NAME_STATIC)) {\n                return;\n            }\n\n            if (!isModalOverflowing) {\n                this._element.style.overflowY = 'hidden';\n            }\n\n            this._element.classList.add(CLASS_NAME_STATIC);\n\n            this._queueCallback(() => {\n                this._element.classList.remove(CLASS_NAME_STATIC);\n\n                this._queueCallback(() => {\n                    this._element.style.overflowY = initialOverflowY;\n                }, this._dialog);\n            }, this._dialog);\n\n            this._element.focus();\n        }\n\n        /**\n         * The following methods are used to handle overflowing modals\n         */\n\n\n        _adjustDialog() {\n            const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;\n\n            const scrollbarWidth = this._scrollBar.getWidth();\n\n            const isBodyOverflowing = scrollbarWidth > 0;\n\n            if (isBodyOverflowing && !isModalOverflowing) {\n                const property = isRTL() ? 'paddingLeft' : 'paddingRight';\n                this._element.style[property] = `${scrollbarWidth}px`;\n            }\n\n            if (!isBodyOverflowing && isModalOverflowing) {\n                const property = isRTL() ? 'paddingRight' : 'paddingLeft';\n                this._element.style[property] = `${scrollbarWidth}px`;\n            }\n        }\n\n        _resetAdjustments() {\n            this._element.style.paddingLeft = '';\n            this._element.style.paddingRight = '';\n        } // Static\n\n    }\n\n    /**\n     * Data API implementation\n     */\n\n\n    EventHandler.on(document, EVENT_CLICK_DATA_API$2, SELECTOR_DATA_TOGGLE$2, function (event) {\n        const target = getElementFromSelector(this);\n\n        if (['A', 'AREA'].includes(this.tagName)) {\n            event.preventDefault();\n        }\n\n        EventHandler.one(target, EVENT_SHOW$4, showEvent => {\n            if (showEvent.defaultPrevented) {\n                // only register focus restorer if modal will actually get shown\n                return;\n            }\n\n            EventHandler.one(target, EVENT_HIDDEN$4, () => {\n                if (isVisible(this)) {\n                    this.focus();\n                }\n            });\n        }); // avoid conflict when clicking modal toggler while another one is open\n\n        const alreadyOpen = SelectorEngine.findOne(OPEN_SELECTOR$1);\n\n        if (alreadyOpen) {\n            Modal.getInstance(alreadyOpen).hide();\n        }\n\n        const data = Modal.getOrCreateInstance(target);\n        data.toggle(this);\n    });\n    enableDismissTrigger(Modal);\n    /**\n     * jQuery\n     */\n\n    defineJQueryPlugin(Modal);\n\n    /**\n     * --------------------------------------------------------------------------\n     * Bootstrap (v5.2.3): offcanvas.js\n     * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n     * --------------------------------------------------------------------------\n     */\n    /**\n     * Constants\n     */\n\n    const NAME$6 = 'offcanvas';\n    const DATA_KEY$3 = 'bs.offcanvas';\n    const EVENT_KEY$3 = `.${DATA_KEY$3}`;\n    const DATA_API_KEY$1 = '.data-api';\n    const EVENT_LOAD_DATA_API$2 = `load${EVENT_KEY$3}${DATA_API_KEY$1}`;\n    const ESCAPE_KEY = 'Escape';\n    const CLASS_NAME_SHOW$3 = 'show';\n    const CLASS_NAME_SHOWING$1 = 'showing';\n    const CLASS_NAME_HIDING = 'hiding';\n    const CLASS_NAME_BACKDROP = 'offcanvas-backdrop';\n    const OPEN_SELECTOR = '.offcanvas.show';\n    const EVENT_SHOW$3 = `show${EVENT_KEY$3}`;\n    const EVENT_SHOWN$3 = `shown${EVENT_KEY$3}`;\n    const EVENT_HIDE$3 = `hide${EVENT_KEY$3}`;\n    const EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY$3}`;\n    const EVENT_HIDDEN$3 = `hidden${EVENT_KEY$3}`;\n    const EVENT_RESIZE = `resize${EVENT_KEY$3}`;\n    const EVENT_CLICK_DATA_API$1 = `click${EVENT_KEY$3}${DATA_API_KEY$1}`;\n    const EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY$3}`;\n    const SELECTOR_DATA_TOGGLE$1 = '[data-bs-toggle=\"offcanvas\"]';\n    const Default$5 = {\n        backdrop: true,\n        keyboard: true,\n        scroll: false\n    };\n    const DefaultType$5 = {\n        backdrop: '(boolean|string)',\n        keyboard: 'boolean',\n        scroll: 'boolean'\n    };\n\n    /**\n     * Class definition\n     */\n\n    class Offcanvas extends BaseComponent {\n        constructor(element, config) {\n            super(element, config);\n            this._isShown = false;\n            this._backdrop = this._initializeBackDrop();\n            this._focustrap = this._initializeFocusTrap();\n\n            this._addEventListeners();\n        } // Getters\n\n\n        static get Default() {\n            return Default$5;\n        }\n\n        static get DefaultType() {\n            return DefaultType$5;\n        }\n\n        static get NAME() {\n            return NAME$6;\n        } // Public\n\n        static jQueryInterface(config) {\n            return this.each(function () {\n                const data = Offcanvas.getOrCreateInstance(this, config);\n\n                if (typeof config !== 'string') {\n                    return;\n                }\n\n                if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n                    throw new TypeError(`No method named \"${config}\"`);\n                }\n\n                data[config](this);\n            });\n        }\n\n        toggle(relatedTarget) {\n            return this._isShown ? this.hide() : this.show(relatedTarget);\n        }\n\n        show(relatedTarget) {\n            if (this._isShown) {\n                return;\n            }\n\n            const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$3, {\n                relatedTarget\n            });\n\n            if (showEvent.defaultPrevented) {\n                return;\n            }\n\n            this._isShown = true;\n\n            this._backdrop.show();\n\n            if (!this._config.scroll) {\n                new ScrollBarHelper().hide();\n            }\n\n            this._element.setAttribute('aria-modal', true);\n\n            this._element.setAttribute('role', 'dialog');\n\n            this._element.classList.add(CLASS_NAME_SHOWING$1);\n\n            const completeCallBack = () => {\n                if (!this._config.scroll || this._config.backdrop) {\n                    this._focustrap.activate();\n                }\n\n                this._element.classList.add(CLASS_NAME_SHOW$3);\n\n                this._element.classList.remove(CLASS_NAME_SHOWING$1);\n\n                EventHandler.trigger(this._element, EVENT_SHOWN$3, {\n                    relatedTarget\n                });\n            };\n\n            this._queueCallback(completeCallBack, this._element, true);\n        }\n\n        hide() {\n            if (!this._isShown) {\n                return;\n            }\n\n            const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$3);\n\n            if (hideEvent.defaultPrevented) {\n                return;\n            }\n\n            this._focustrap.deactivate();\n\n            this._element.blur();\n\n            this._isShown = false;\n\n            this._element.classList.add(CLASS_NAME_HIDING);\n\n            this._backdrop.hide();\n\n            const completeCallback = () => {\n                this._element.classList.remove(CLASS_NAME_SHOW$3, CLASS_NAME_HIDING);\n\n                this._element.removeAttribute('aria-modal');\n\n                this._element.removeAttribute('role');\n\n                if (!this._config.scroll) {\n                    new ScrollBarHelper().reset();\n                }\n\n                EventHandler.trigger(this._element, EVENT_HIDDEN$3);\n            };\n\n            this._queueCallback(completeCallback, this._element, true);\n        }\n\n        dispose() {\n            this._backdrop.dispose();\n\n            this._focustrap.deactivate();\n\n            super.dispose();\n        } // Private\n\n        _initializeBackDrop() {\n            const clickCallback = () => {\n                if (this._config.backdrop === 'static') {\n                    EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED);\n                    return;\n                }\n\n                this.hide();\n            }; // 'static' option will be translated to true, and booleans will keep their value\n\n\n            const isVisible = Boolean(this._config.backdrop);\n            return new Backdrop({\n                className: CLASS_NAME_BACKDROP,\n                isVisible,\n                isAnimated: true,\n                rootElement: this._element.parentNode,\n                clickCallback: isVisible ? clickCallback : null\n            });\n        }\n\n        _initializeFocusTrap() {\n            return new FocusTrap({\n                trapElement: this._element\n            });\n        }\n\n        _addEventListeners() {\n            EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, event => {\n                if (event.key !== ESCAPE_KEY) {\n                    return;\n                }\n\n                if (!this._config.keyboard) {\n                    EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED);\n                    return;\n                }\n\n                this.hide();\n            });\n        } // Static\n\n    }\n\n    /**\n     * Data API implementation\n     */\n\n\n    EventHandler.on(document, EVENT_CLICK_DATA_API$1, SELECTOR_DATA_TOGGLE$1, function (event) {\n        const target = getElementFromSelector(this);\n\n        if (['A', 'AREA'].includes(this.tagName)) {\n            event.preventDefault();\n        }\n\n        if (isDisabled(this)) {\n            return;\n        }\n\n        EventHandler.one(target, EVENT_HIDDEN$3, () => {\n            // focus on trigger when it is closed\n            if (isVisible(this)) {\n                this.focus();\n            }\n        }); // avoid conflict when clicking a toggler of an offcanvas, while another is open\n\n        const alreadyOpen = SelectorEngine.findOne(OPEN_SELECTOR);\n\n        if (alreadyOpen && alreadyOpen !== target) {\n            Offcanvas.getInstance(alreadyOpen).hide();\n        }\n\n        const data = Offcanvas.getOrCreateInstance(target);\n        data.toggle(this);\n    });\n    EventHandler.on(window, EVENT_LOAD_DATA_API$2, () => {\n        for (const selector of SelectorEngine.find(OPEN_SELECTOR)) {\n            Offcanvas.getOrCreateInstance(selector).show();\n        }\n    });\n    EventHandler.on(window, EVENT_RESIZE, () => {\n        for (const element of SelectorEngine.find('[aria-modal][class*=show][class*=offcanvas-]')) {\n            if (getComputedStyle(element).position !== 'fixed') {\n                Offcanvas.getOrCreateInstance(element).hide();\n            }\n        }\n    });\n    enableDismissTrigger(Offcanvas);\n    /**\n     * jQuery\n     */\n\n    defineJQueryPlugin(Offcanvas);\n\n    /**\n     * --------------------------------------------------------------------------\n     * Bootstrap (v5.2.3): util/sanitizer.js\n     * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n     * --------------------------------------------------------------------------\n     */\n    const uriAttributes = new Set(['background', 'cite', 'href', 'itemtype', 'longdesc', 'poster', 'src', 'xlink:href']);\n    const ARIA_ATTRIBUTE_PATTERN = /^aria-[\\w-]*$/i;\n    /**\n     * A pattern that recognizes a commonly useful subset of URLs that are safe.\n     *\n     * Shout-out to Angular https://github.com/angular/angular/blob/12.2.x/packages/core/src/sanitization/url_sanitizer.ts\n     */\n\n    const SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file|sms):|[^#&/:?]*(?:[#/?]|$))/i;\n    /**\n     * A pattern that matches safe data URLs. Only matches image, video and audio types.\n     *\n     * Shout-out to Angular https://github.com/angular/angular/blob/12.2.x/packages/core/src/sanitization/url_sanitizer.ts\n     */\n\n    const DATA_URL_PATTERN = /^data:(?:image\\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\\/(?:mpeg|mp4|ogg|webm)|audio\\/(?:mp3|oga|ogg|opus));base64,[\\d+/a-z]+=*$/i;\n\n    const allowedAttribute = (attribute, allowedAttributeList) => {\n        const attributeName = attribute.nodeName.toLowerCase();\n\n        if (allowedAttributeList.includes(attributeName)) {\n            if (uriAttributes.has(attributeName)) {\n                return Boolean(SAFE_URL_PATTERN.test(attribute.nodeValue) || DATA_URL_PATTERN.test(attribute.nodeValue));\n            }\n\n            return true;\n        } // Check if a regular expression validates the attribute.\n\n\n        return allowedAttributeList.filter(attributeRegex => attributeRegex instanceof RegExp).some(regex => regex.test(attributeName));\n    };\n\n    const DefaultAllowlist = {\n        // Global attributes allowed on any supplied element below.\n        '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],\n        a: ['target', 'href', 'title', 'rel'],\n        area: [],\n        b: [],\n        br: [],\n        col: [],\n        code: [],\n        div: [],\n        em: [],\n        hr: [],\n        h1: [],\n        h2: [],\n        h3: [],\n        h4: [],\n        h5: [],\n        h6: [],\n        i: [],\n        img: ['src', 'srcset', 'alt', 'title', 'width', 'height'],\n        li: [],\n        ol: [],\n        p: [],\n        pre: [],\n        s: [],\n        small: [],\n        span: [],\n        sub: [],\n        sup: [],\n        strong: [],\n        u: [],\n        ul: []\n    };\n\n    function sanitizeHtml(unsafeHtml, allowList, sanitizeFunction) {\n        if (!unsafeHtml.length) {\n            return unsafeHtml;\n        }\n\n        if (sanitizeFunction && typeof sanitizeFunction === 'function') {\n            return sanitizeFunction(unsafeHtml);\n        }\n\n        const domParser = new window.DOMParser();\n        const createdDocument = domParser.parseFromString(unsafeHtml, 'text/html');\n        const elements = [].concat(...createdDocument.body.querySelectorAll('*'));\n\n        for (const element of elements) {\n            const elementName = element.nodeName.toLowerCase();\n\n            if (!Object.keys(allowList).includes(elementName)) {\n                element.remove();\n                continue;\n            }\n\n            const attributeList = [].concat(...element.attributes);\n            const allowedAttributes = [].concat(allowList['*'] || [], allowList[elementName] || []);\n\n            for (const attribute of attributeList) {\n                if (!allowedAttribute(attribute, allowedAttributes)) {\n                    element.removeAttribute(attribute.nodeName);\n                }\n            }\n        }\n\n        return createdDocument.body.innerHTML;\n    }\n\n    /**\n     * --------------------------------------------------------------------------\n     * Bootstrap (v5.2.3): util/template-factory.js\n     * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n     * --------------------------------------------------------------------------\n     */\n    /**\n     * Constants\n     */\n\n    const NAME$5 = 'TemplateFactory';\n    const Default$4 = {\n        allowList: DefaultAllowlist,\n        content: {},\n        // { selector : text ,  selector2 : text2 , }\n        extraClass: '',\n        html: false,\n        sanitize: true,\n        sanitizeFn: null,\n        template: '<div></div>'\n    };\n    const DefaultType$4 = {\n        allowList: 'object',\n        content: 'object',\n        extraClass: '(string|function)',\n        html: 'boolean',\n        sanitize: 'boolean',\n        sanitizeFn: '(null|function)',\n        template: 'string'\n    };\n    const DefaultContentType = {\n        entry: '(string|element|function|null)',\n        selector: '(string|element)'\n    };\n\n    /**\n     * Class definition\n     */\n\n    class TemplateFactory extends Config {\n        constructor(config) {\n            super();\n            this._config = this._getConfig(config);\n        } // Getters\n\n\n        static get Default() {\n            return Default$4;\n        }\n\n        static get DefaultType() {\n            return DefaultType$4;\n        }\n\n        static get NAME() {\n            return NAME$5;\n        } // Public\n\n\n        getContent() {\n            return Object.values(this._config.content).map(config => this._resolvePossibleFunction(config)).filter(Boolean);\n        }\n\n        hasContent() {\n            return this.getContent().length > 0;\n        }\n\n        changeContent(content) {\n            this._checkContent(content);\n\n            this._config.content = {\n                ...this._config.content,\n                ...content\n            };\n            return this;\n        }\n\n        toHtml() {\n            const templateWrapper = document.createElement('div');\n            templateWrapper.innerHTML = this._maybeSanitize(this._config.template);\n\n            for (const [selector, text] of Object.entries(this._config.content)) {\n                this._setContent(templateWrapper, text, selector);\n            }\n\n            const template = templateWrapper.children[0];\n\n            const extraClass = this._resolvePossibleFunction(this._config.extraClass);\n\n            if (extraClass) {\n                template.classList.add(...extraClass.split(' '));\n            }\n\n            return template;\n        } // Private\n\n\n        _typeCheckConfig(config) {\n            super._typeCheckConfig(config);\n\n            this._checkContent(config.content);\n        }\n\n        _checkContent(arg) {\n            for (const [selector, content] of Object.entries(arg)) {\n                super._typeCheckConfig({\n                    selector,\n                    entry: content\n                }, DefaultContentType);\n            }\n        }\n\n        _setContent(template, content, selector) {\n            const templateElement = SelectorEngine.findOne(selector, template);\n\n            if (!templateElement) {\n                return;\n            }\n\n            content = this._resolvePossibleFunction(content);\n\n            if (!content) {\n                templateElement.remove();\n                return;\n            }\n\n            if (isElement(content)) {\n                this._putElementInTemplate(getElement(content), templateElement);\n\n                return;\n            }\n\n            if (this._config.html) {\n                templateElement.innerHTML = this._maybeSanitize(content);\n                return;\n            }\n\n            templateElement.textContent = content;\n        }\n\n        _maybeSanitize(arg) {\n            return this._config.sanitize ? sanitizeHtml(arg, this._config.allowList, this._config.sanitizeFn) : arg;\n        }\n\n        _resolvePossibleFunction(arg) {\n            return typeof arg === 'function' ? arg(this) : arg;\n        }\n\n        _putElementInTemplate(element, templateElement) {\n            if (this._config.html) {\n                templateElement.innerHTML = '';\n                templateElement.append(element);\n                return;\n            }\n\n            templateElement.textContent = element.textContent;\n        }\n\n    }\n\n    /**\n     * --------------------------------------------------------------------------\n     * Bootstrap (v5.2.3): tooltip.js\n     * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n     * --------------------------------------------------------------------------\n     */\n    /**\n     * Constants\n     */\n\n    const NAME$4 = 'tooltip';\n    const DISALLOWED_ATTRIBUTES = new Set(['sanitize', 'allowList', 'sanitizeFn']);\n    const CLASS_NAME_FADE$2 = 'fade';\n    const CLASS_NAME_MODAL = 'modal';\n    const CLASS_NAME_SHOW$2 = 'show';\n    const SELECTOR_TOOLTIP_INNER = '.tooltip-inner';\n    const SELECTOR_MODAL = `.${CLASS_NAME_MODAL}`;\n    const EVENT_MODAL_HIDE = 'hide.bs.modal';\n    const TRIGGER_HOVER = 'hover';\n    const TRIGGER_FOCUS = 'focus';\n    const TRIGGER_CLICK = 'click';\n    const TRIGGER_MANUAL = 'manual';\n    const EVENT_HIDE$2 = 'hide';\n    const EVENT_HIDDEN$2 = 'hidden';\n    const EVENT_SHOW$2 = 'show';\n    const EVENT_SHOWN$2 = 'shown';\n    const EVENT_INSERTED = 'inserted';\n    const EVENT_CLICK$1 = 'click';\n    const EVENT_FOCUSIN$1 = 'focusin';\n    const EVENT_FOCUSOUT$1 = 'focusout';\n    const EVENT_MOUSEENTER = 'mouseenter';\n    const EVENT_MOUSELEAVE = 'mouseleave';\n    const AttachmentMap = {\n        AUTO: 'auto',\n        TOP: 'top',\n        RIGHT: isRTL() ? 'left' : 'right',\n        BOTTOM: 'bottom',\n        LEFT: isRTL() ? 'right' : 'left'\n    };\n    const Default$3 = {\n        allowList: DefaultAllowlist,\n        animation: true,\n        boundary: 'clippingParents',\n        container: false,\n        customClass: '',\n        delay: 0,\n        fallbackPlacements: ['top', 'right', 'bottom', 'left'],\n        html: false,\n        offset: [0, 0],\n        placement: 'top',\n        popperConfig: null,\n        sanitize: true,\n        sanitizeFn: null,\n        selector: false,\n        template: '<div class=\"tooltip\" role=\"tooltip\">' + '<div class=\"tooltip-arrow\"></div>' + '<div class=\"tooltip-inner\"></div>' + '</div>',\n        title: '',\n        trigger: 'hover focus'\n    };\n    const DefaultType$3 = {\n        allowList: 'object',\n        animation: 'boolean',\n        boundary: '(string|element)',\n        container: '(string|element|boolean)',\n        customClass: '(string|function)',\n        delay: '(number|object)',\n        fallbackPlacements: 'array',\n        html: 'boolean',\n        offset: '(array|string|function)',\n        placement: '(string|function)',\n        popperConfig: '(null|object|function)',\n        sanitize: 'boolean',\n        sanitizeFn: '(null|function)',\n        selector: '(string|boolean)',\n        template: 'string',\n        title: '(string|element|function)',\n        trigger: 'string'\n    };\n\n    /**\n     * Class definition\n     */\n\n    class Tooltip extends BaseComponent {\n        constructor(element, config) {\n            if (typeof Popper__namespace === 'undefined') {\n                throw new TypeError('Bootstrap\\'s tooltips require Popper (https://popper.js.org)');\n            }\n\n            super(element, config); // Private\n\n            this._isEnabled = true;\n            this._timeout = 0;\n            this._isHovered = null;\n            this._activeTrigger = {};\n            this._popper = null;\n            this._templateFactory = null;\n            this._newContent = null; // Protected\n\n            this.tip = null;\n\n            this._setListeners();\n\n            if (!this._config.selector) {\n                this._fixTitle();\n            }\n        } // Getters\n\n\n        static get Default() {\n            return Default$3;\n        }\n\n        static get DefaultType() {\n            return DefaultType$3;\n        }\n\n        static get NAME() {\n            return NAME$4;\n        } // Public\n\n        static jQueryInterface(config) {\n            return this.each(function () {\n                const data = Tooltip.getOrCreateInstance(this, config);\n\n                if (typeof config !== 'string') {\n                    return;\n                }\n\n                if (typeof data[config] === 'undefined') {\n                    throw new TypeError(`No method named \"${config}\"`);\n                }\n\n                data[config]();\n            });\n        }\n\n        enable() {\n            this._isEnabled = true;\n        }\n\n        disable() {\n            this._isEnabled = false;\n        }\n\n        toggleEnabled() {\n            this._isEnabled = !this._isEnabled;\n        }\n\n        toggle() {\n            if (!this._isEnabled) {\n                return;\n            }\n\n            this._activeTrigger.click = !this._activeTrigger.click;\n\n            if (this._isShown()) {\n                this._leave();\n\n                return;\n            }\n\n            this._enter();\n        }\n\n        dispose() {\n            clearTimeout(this._timeout);\n            EventHandler.off(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE, this._hideModalHandler);\n\n            if (this._element.getAttribute('data-bs-original-title')) {\n                this._element.setAttribute('title', this._element.getAttribute('data-bs-original-title'));\n            }\n\n            this._disposePopper();\n\n            super.dispose();\n        }\n\n        show() {\n            if (this._element.style.display === 'none') {\n                throw new Error('Please use show on visible elements');\n            }\n\n            if (!(this._isWithContent() && this._isEnabled)) {\n                return;\n            }\n\n            const showEvent = EventHandler.trigger(this._element, this.constructor.eventName(EVENT_SHOW$2));\n            const shadowRoot = findShadowRoot(this._element);\n\n            const isInTheDom = (shadowRoot || this._element.ownerDocument.documentElement).contains(this._element);\n\n            if (showEvent.defaultPrevented || !isInTheDom) {\n                return;\n            } // todo v6 remove this OR make it optional\n\n\n            this._disposePopper();\n\n            const tip = this._getTipElement();\n\n            this._element.setAttribute('aria-describedby', tip.getAttribute('id'));\n\n            const {\n                container\n            } = this._config;\n\n            if (!this._element.ownerDocument.documentElement.contains(this.tip)) {\n                container.append(tip);\n                EventHandler.trigger(this._element, this.constructor.eventName(EVENT_INSERTED));\n            }\n\n            this._popper = this._createPopper(tip);\n            tip.classList.add(CLASS_NAME_SHOW$2); // If this is a touch-enabled device we add extra\n            // empty mouseover listeners to the body's immediate children;\n            // only needed because of broken event delegation on iOS\n            // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n\n            if ('ontouchstart' in document.documentElement) {\n                for (const element of [].concat(...document.body.children)) {\n                    EventHandler.on(element, 'mouseover', noop);\n                }\n            }\n\n            const complete = () => {\n                EventHandler.trigger(this._element, this.constructor.eventName(EVENT_SHOWN$2));\n\n                if (this._isHovered === false) {\n                    this._leave();\n                }\n\n                this._isHovered = false;\n            };\n\n            this._queueCallback(complete, this.tip, this._isAnimated());\n        }\n\n        hide() {\n            if (!this._isShown()) {\n                return;\n            }\n\n            const hideEvent = EventHandler.trigger(this._element, this.constructor.eventName(EVENT_HIDE$2));\n\n            if (hideEvent.defaultPrevented) {\n                return;\n            }\n\n            const tip = this._getTipElement();\n\n            tip.classList.remove(CLASS_NAME_SHOW$2); // If this is a touch-enabled device we remove the extra\n            // empty mouseover listeners we added for iOS support\n\n            if ('ontouchstart' in document.documentElement) {\n                for (const element of [].concat(...document.body.children)) {\n                    EventHandler.off(element, 'mouseover', noop);\n                }\n            }\n\n            this._activeTrigger[TRIGGER_CLICK] = false;\n            this._activeTrigger[TRIGGER_FOCUS] = false;\n            this._activeTrigger[TRIGGER_HOVER] = false;\n            this._isHovered = null; // it is a trick to support manual triggering\n\n            const complete = () => {\n                if (this._isWithActiveTrigger()) {\n                    return;\n                }\n\n                if (!this._isHovered) {\n                    this._disposePopper();\n                }\n\n                this._element.removeAttribute('aria-describedby');\n\n                EventHandler.trigger(this._element, this.constructor.eventName(EVENT_HIDDEN$2));\n            };\n\n            this._queueCallback(complete, this.tip, this._isAnimated());\n        }\n\n        update() {\n            if (this._popper) {\n                this._popper.update();\n            }\n        } // Protected\n\n        _isWithContent() {\n            return Boolean(this._getTitle());\n        }\n\n        _getTipElement() {\n            if (!this.tip) {\n                this.tip = this._createTipElement(this._newContent || this._getContentForTemplate());\n            }\n\n            return this.tip;\n        }\n\n        _createTipElement(content) {\n            const tip = this._getTemplateFactory(content).toHtml(); // todo: remove this check on v6\n\n\n            if (!tip) {\n                return null;\n            }\n\n            tip.classList.remove(CLASS_NAME_FADE$2, CLASS_NAME_SHOW$2); // todo: on v6 the following can be achieved with CSS only\n\n            tip.classList.add(`bs-${this.constructor.NAME}-auto`);\n            const tipId = getUID(this.constructor.NAME).toString();\n            tip.setAttribute('id', tipId);\n\n            if (this._isAnimated()) {\n                tip.classList.add(CLASS_NAME_FADE$2);\n            }\n\n            return tip;\n        }\n\n        setContent(content) {\n            this._newContent = content;\n\n            if (this._isShown()) {\n                this._disposePopper();\n\n                this.show();\n            }\n        }\n\n        _getTemplateFactory(content) {\n            if (this._templateFactory) {\n                this._templateFactory.changeContent(content);\n            } else {\n                this._templateFactory = new TemplateFactory({\n                    ...this._config,\n                    // the `content` var has to be after `this._config`\n                    // to override config.content in case of popover\n                    content,\n                    extraClass: this._resolvePossibleFunction(this._config.customClass)\n                });\n            }\n\n            return this._templateFactory;\n        }\n\n        _getContentForTemplate() {\n            return {\n                [SELECTOR_TOOLTIP_INNER]: this._getTitle()\n            };\n        }\n\n        _getTitle() {\n            return this._resolvePossibleFunction(this._config.title) || this._element.getAttribute('data-bs-original-title');\n        } // Private\n\n        _initializeOnDelegatedTarget(event) {\n            return this.constructor.getOrCreateInstance(event.delegateTarget, this._getDelegateConfig());\n        }\n\n        _isAnimated() {\n            return this._config.animation || this.tip && this.tip.classList.contains(CLASS_NAME_FADE$2);\n        }\n\n        _isShown() {\n            return this.tip && this.tip.classList.contains(CLASS_NAME_SHOW$2);\n        }\n\n        _createPopper(tip) {\n            const placement = typeof this._config.placement === 'function' ? this._config.placement.call(this, tip, this._element) : this._config.placement;\n            const attachment = AttachmentMap[placement.toUpperCase()];\n            return Popper__namespace.createPopper(this._element, tip, this._getPopperConfig(attachment));\n        }\n\n        _getOffset() {\n            const {\n                offset\n            } = this._config;\n\n            if (typeof offset === 'string') {\n                return offset.split(',').map(value => Number.parseInt(value, 10));\n            }\n\n            if (typeof offset === 'function') {\n                return popperData => offset(popperData, this._element);\n            }\n\n            return offset;\n        }\n\n        _resolvePossibleFunction(arg) {\n            return typeof arg === 'function' ? arg.call(this._element) : arg;\n        }\n\n        _getPopperConfig(attachment) {\n            const defaultBsPopperConfig = {\n                placement: attachment,\n                modifiers: [{\n                    name: 'flip',\n                    options: {\n                        fallbackPlacements: this._config.fallbackPlacements\n                    }\n                }, {\n                    name: 'offset',\n                    options: {\n                        offset: this._getOffset()\n                    }\n                }, {\n                    name: 'preventOverflow',\n                    options: {\n                        boundary: this._config.boundary\n                    }\n                }, {\n                    name: 'arrow',\n                    options: {\n                        element: `.${this.constructor.NAME}-arrow`\n                    }\n                }, {\n                    name: 'preSetPlacement',\n                    enabled: true,\n                    phase: 'beforeMain',\n                    fn: data => {\n                        // Pre-set Popper's placement attribute in order to read the arrow sizes properly.\n                        // Otherwise, Popper mixes up the width and height dimensions since the initial arrow style is for top placement\n                        this._getTipElement().setAttribute('data-popper-placement', data.state.placement);\n                    }\n                }]\n            };\n            return {\n                ...defaultBsPopperConfig,\n                ...(typeof this._config.popperConfig === 'function' ? this._config.popperConfig(defaultBsPopperConfig) : this._config.popperConfig)\n            };\n        }\n\n        _setListeners() {\n            const triggers = this._config.trigger.split(' ');\n\n            for (const trigger of triggers) {\n                if (trigger === 'click') {\n                    EventHandler.on(this._element, this.constructor.eventName(EVENT_CLICK$1), this._config.selector, event => {\n                        const context = this._initializeOnDelegatedTarget(event);\n\n                        context.toggle();\n                    });\n                } else if (trigger !== TRIGGER_MANUAL) {\n                    const eventIn = trigger === TRIGGER_HOVER ? this.constructor.eventName(EVENT_MOUSEENTER) : this.constructor.eventName(EVENT_FOCUSIN$1);\n                    const eventOut = trigger === TRIGGER_HOVER ? this.constructor.eventName(EVENT_MOUSELEAVE) : this.constructor.eventName(EVENT_FOCUSOUT$1);\n                    EventHandler.on(this._element, eventIn, this._config.selector, event => {\n                        const context = this._initializeOnDelegatedTarget(event);\n\n                        context._activeTrigger[event.type === 'focusin' ? TRIGGER_FOCUS : TRIGGER_HOVER] = true;\n\n                        context._enter();\n                    });\n                    EventHandler.on(this._element, eventOut, this._config.selector, event => {\n                        const context = this._initializeOnDelegatedTarget(event);\n\n                        context._activeTrigger[event.type === 'focusout' ? TRIGGER_FOCUS : TRIGGER_HOVER] = context._element.contains(event.relatedTarget);\n\n                        context._leave();\n                    });\n                }\n            }\n\n            this._hideModalHandler = () => {\n                if (this._element) {\n                    this.hide();\n                }\n            };\n\n            EventHandler.on(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE, this._hideModalHandler);\n        }\n\n        _fixTitle() {\n            const title = this._element.getAttribute('title');\n\n            if (!title) {\n                return;\n            }\n\n            if (!this._element.getAttribute('aria-label') && !this._element.textContent.trim()) {\n                this._element.setAttribute('aria-label', title);\n            }\n\n            this._element.setAttribute('data-bs-original-title', title); // DO NOT USE IT. Is only for backwards compatibility\n\n\n            this._element.removeAttribute('title');\n        }\n\n        _enter() {\n            if (this._isShown() || this._isHovered) {\n                this._isHovered = true;\n                return;\n            }\n\n            this._isHovered = true;\n\n            this._setTimeout(() => {\n                if (this._isHovered) {\n                    this.show();\n                }\n            }, this._config.delay.show);\n        }\n\n        _leave() {\n            if (this._isWithActiveTrigger()) {\n                return;\n            }\n\n            this._isHovered = false;\n\n            this._setTimeout(() => {\n                if (!this._isHovered) {\n                    this.hide();\n                }\n            }, this._config.delay.hide);\n        }\n\n        _setTimeout(handler, timeout) {\n            clearTimeout(this._timeout);\n            this._timeout = setTimeout(handler, timeout);\n        }\n\n        _isWithActiveTrigger() {\n            return Object.values(this._activeTrigger).includes(true);\n        }\n\n        _getConfig(config) {\n            const dataAttributes = Manipulator.getDataAttributes(this._element);\n\n            for (const dataAttribute of Object.keys(dataAttributes)) {\n                if (DISALLOWED_ATTRIBUTES.has(dataAttribute)) {\n                    delete dataAttributes[dataAttribute];\n                }\n            }\n\n            config = {\n                ...dataAttributes,\n                ...(typeof config === 'object' && config ? config : {})\n            };\n            config = this._mergeConfigObj(config);\n            config = this._configAfterMerge(config);\n\n            this._typeCheckConfig(config);\n\n            return config;\n        }\n\n        _configAfterMerge(config) {\n            config.container = config.container === false ? document.body : getElement(config.container);\n\n            if (typeof config.delay === 'number') {\n                config.delay = {\n                    show: config.delay,\n                    hide: config.delay\n                };\n            }\n\n            if (typeof config.title === 'number') {\n                config.title = config.title.toString();\n            }\n\n            if (typeof config.content === 'number') {\n                config.content = config.content.toString();\n            }\n\n            return config;\n        }\n\n        _getDelegateConfig() {\n            const config = {};\n\n            for (const key in this._config) {\n                if (this.constructor.Default[key] !== this._config[key]) {\n                    config[key] = this._config[key];\n                }\n            }\n\n            config.selector = false;\n            config.trigger = 'manual'; // In the future can be replaced with:\n            // const keysWithDifferentValues = Object.entries(this._config).filter(entry => this.constructor.Default[entry[0]] !== this._config[entry[0]])\n            // `Object.fromEntries(keysWithDifferentValues)`\n\n            return config;\n        }\n\n        _disposePopper() {\n            if (this._popper) {\n                this._popper.destroy();\n\n                this._popper = null;\n            }\n\n            if (this.tip) {\n                this.tip.remove();\n                this.tip = null;\n            }\n        } // Static\n\n    }\n\n    /**\n     * jQuery\n     */\n\n\n    defineJQueryPlugin(Tooltip);\n\n    /**\n     * --------------------------------------------------------------------------\n     * Bootstrap (v5.2.3): popover.js\n     * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n     * --------------------------------------------------------------------------\n     */\n    /**\n     * Constants\n     */\n\n    const NAME$3 = 'popover';\n    const SELECTOR_TITLE = '.popover-header';\n    const SELECTOR_CONTENT = '.popover-body';\n    const Default$2 = {\n        ...Tooltip.Default,\n        content: '',\n        offset: [0, 8],\n        placement: 'right',\n        template: '<div class=\"popover\" role=\"tooltip\">' + '<div class=\"popover-arrow\"></div>' + '<h3 class=\"popover-header\"></h3>' + '<div class=\"popover-body\"></div>' + '</div>',\n        trigger: 'click'\n    };\n    const DefaultType$2 = {\n        ...Tooltip.DefaultType,\n        content: '(null|string|element|function)'\n    };\n\n    /**\n     * Class definition\n     */\n\n    class Popover extends Tooltip {\n        // Getters\n        static get Default() {\n            return Default$2;\n        }\n\n        static get DefaultType() {\n            return DefaultType$2;\n        }\n\n        static get NAME() {\n            return NAME$3;\n        } // Overrides\n\n        static jQueryInterface(config) {\n            return this.each(function () {\n                const data = Popover.getOrCreateInstance(this, config);\n\n                if (typeof config !== 'string') {\n                    return;\n                }\n\n                if (typeof data[config] === 'undefined') {\n                    throw new TypeError(`No method named \"${config}\"`);\n                }\n\n                data[config]();\n            });\n        }\n\n        _isWithContent() {\n            return this._getTitle() || this._getContent();\n        } // Private\n\n        _getContentForTemplate() {\n            return {\n                [SELECTOR_TITLE]: this._getTitle(),\n                [SELECTOR_CONTENT]: this._getContent()\n            };\n        }\n\n        _getContent() {\n            return this._resolvePossibleFunction(this._config.content);\n        } // Static\n\n    }\n\n    /**\n     * jQuery\n     */\n\n\n    defineJQueryPlugin(Popover);\n\n    /**\n     * --------------------------------------------------------------------------\n     * Bootstrap (v5.2.3): scrollspy.js\n     * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n     * --------------------------------------------------------------------------\n     */\n    /**\n     * Constants\n     */\n\n    const NAME$2 = 'scrollspy';\n    const DATA_KEY$2 = 'bs.scrollspy';\n    const EVENT_KEY$2 = `.${DATA_KEY$2}`;\n    const DATA_API_KEY = '.data-api';\n    const EVENT_ACTIVATE = `activate${EVENT_KEY$2}`;\n    const EVENT_CLICK = `click${EVENT_KEY$2}`;\n    const EVENT_LOAD_DATA_API$1 = `load${EVENT_KEY$2}${DATA_API_KEY}`;\n    const CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item';\n    const CLASS_NAME_ACTIVE$1 = 'active';\n    const SELECTOR_DATA_SPY = '[data-bs-spy=\"scroll\"]';\n    const SELECTOR_TARGET_LINKS = '[href]';\n    const SELECTOR_NAV_LIST_GROUP = '.nav, .list-group';\n    const SELECTOR_NAV_LINKS = '.nav-link';\n    const SELECTOR_NAV_ITEMS = '.nav-item';\n    const SELECTOR_LIST_ITEMS = '.list-group-item';\n    const SELECTOR_LINK_ITEMS = `${SELECTOR_NAV_LINKS}, ${SELECTOR_NAV_ITEMS} > ${SELECTOR_NAV_LINKS}, ${SELECTOR_LIST_ITEMS}`;\n    const SELECTOR_DROPDOWN = '.dropdown';\n    const SELECTOR_DROPDOWN_TOGGLE$1 = '.dropdown-toggle';\n    const Default$1 = {\n        offset: null,\n        // TODO: v6 @deprecated, keep it for backwards compatibility reasons\n        rootMargin: '0px 0px -25%',\n        smoothScroll: false,\n        target: null,\n        threshold: [0.1, 0.5, 1]\n    };\n    const DefaultType$1 = {\n        offset: '(number|null)',\n        // TODO v6 @deprecated, keep it for backwards compatibility reasons\n        rootMargin: 'string',\n        smoothScroll: 'boolean',\n        target: 'element',\n        threshold: 'array'\n    };\n\n    /**\n     * Class definition\n     */\n\n    class ScrollSpy extends BaseComponent {\n        constructor(element, config) {\n            super(element, config); // this._element is the observablesContainer and config.target the menu links wrapper\n\n            this._targetLinks = new Map();\n            this._observableSections = new Map();\n            this._rootElement = getComputedStyle(this._element).overflowY === 'visible' ? null : this._element;\n            this._activeTarget = null;\n            this._observer = null;\n            this._previousScrollData = {\n                visibleEntryTop: 0,\n                parentScrollTop: 0\n            };\n            this.refresh(); // initialize\n        } // Getters\n\n\n        static get Default() {\n            return Default$1;\n        }\n\n        static get DefaultType() {\n            return DefaultType$1;\n        }\n\n        static get NAME() {\n            return NAME$2;\n        } // Public\n\n        static jQueryInterface(config) {\n            return this.each(function () {\n                const data = ScrollSpy.getOrCreateInstance(this, config);\n\n                if (typeof config !== 'string') {\n                    return;\n                }\n\n                if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n                    throw new TypeError(`No method named \"${config}\"`);\n                }\n\n                data[config]();\n            });\n        }\n\n        refresh() {\n            this._initializeTargetsAndObservables();\n\n            this._maybeEnableSmoothScroll();\n\n            if (this._observer) {\n                this._observer.disconnect();\n            } else {\n                this._observer = this._getNewObserver();\n            }\n\n            for (const section of this._observableSections.values()) {\n                this._observer.observe(section);\n            }\n        }\n\n        dispose() {\n            this._observer.disconnect();\n\n            super.dispose();\n        } // Private\n\n        _configAfterMerge(config) {\n            // TODO: on v6 target should be given explicitly & remove the {target: 'ss-target'} case\n            config.target = getElement(config.target) || document.body; // TODO: v6 Only for backwards compatibility reasons. Use rootMargin only\n\n            config.rootMargin = config.offset ? `${config.offset}px 0px -30%` : config.rootMargin;\n\n            if (typeof config.threshold === 'string') {\n                config.threshold = config.threshold.split(',').map(value => Number.parseFloat(value));\n            }\n\n            return config;\n        }\n\n        _maybeEnableSmoothScroll() {\n            if (!this._config.smoothScroll) {\n                return;\n            } // unregister any previous listeners\n\n\n            EventHandler.off(this._config.target, EVENT_CLICK);\n            EventHandler.on(this._config.target, EVENT_CLICK, SELECTOR_TARGET_LINKS, event => {\n                const observableSection = this._observableSections.get(event.target.hash);\n\n                if (observableSection) {\n                    event.preventDefault();\n                    const root = this._rootElement || window;\n                    const height = observableSection.offsetTop - this._element.offsetTop;\n\n                    if (root.scrollTo) {\n                        root.scrollTo({\n                            top: height,\n                            behavior: 'smooth'\n                        });\n                        return;\n                    } // Chrome 60 doesn't support `scrollTo`\n\n\n                    root.scrollTop = height;\n                }\n            });\n        }\n\n        _getNewObserver() {\n            const options = {\n                root: this._rootElement,\n                threshold: this._config.threshold,\n                rootMargin: this._config.rootMargin\n            };\n            return new IntersectionObserver(entries => this._observerCallback(entries), options);\n        } // The logic of selection\n\n        _observerCallback(entries) {\n            const targetElement = entry => this._targetLinks.get(`#${entry.target.id}`);\n\n            const activate = entry => {\n                this._previousScrollData.visibleEntryTop = entry.target.offsetTop;\n\n                this._process(targetElement(entry));\n            };\n\n            const parentScrollTop = (this._rootElement || document.documentElement).scrollTop;\n            const userScrollsDown = parentScrollTop >= this._previousScrollData.parentScrollTop;\n            this._previousScrollData.parentScrollTop = parentScrollTop;\n\n            for (const entry of entries) {\n                if (!entry.isIntersecting) {\n                    this._activeTarget = null;\n\n                    this._clearActiveClass(targetElement(entry));\n\n                    continue;\n                }\n\n                const entryIsLowerThanPrevious = entry.target.offsetTop >= this._previousScrollData.visibleEntryTop; // if we are scrolling down, pick the bigger offsetTop\n\n                if (userScrollsDown && entryIsLowerThanPrevious) {\n                    activate(entry); // if parent isn't scrolled, let's keep the first visible item, breaking the iteration\n\n                    if (!parentScrollTop) {\n                        return;\n                    }\n\n                    continue;\n                } // if we are scrolling up, pick the smallest offsetTop\n\n\n                if (!userScrollsDown && !entryIsLowerThanPrevious) {\n                    activate(entry);\n                }\n            }\n        }\n\n        _initializeTargetsAndObservables() {\n            this._targetLinks = new Map();\n            this._observableSections = new Map();\n            const targetLinks = SelectorEngine.find(SELECTOR_TARGET_LINKS, this._config.target);\n\n            for (const anchor of targetLinks) {\n                // ensure that the anchor has an id and is not disabled\n                if (!anchor.hash || isDisabled(anchor)) {\n                    continue;\n                }\n\n                const observableSection = SelectorEngine.findOne(anchor.hash, this._element); // ensure that the observableSection exists & is visible\n\n                if (isVisible(observableSection)) {\n                    this._targetLinks.set(anchor.hash, anchor);\n\n                    this._observableSections.set(anchor.hash, observableSection);\n                }\n            }\n        }\n\n        _process(target) {\n            if (this._activeTarget === target) {\n                return;\n            }\n\n            this._clearActiveClass(this._config.target);\n\n            this._activeTarget = target;\n            target.classList.add(CLASS_NAME_ACTIVE$1);\n\n            this._activateParents(target);\n\n            EventHandler.trigger(this._element, EVENT_ACTIVATE, {\n                relatedTarget: target\n            });\n        }\n\n        _activateParents(target) {\n            // Activate dropdown parents\n            if (target.classList.contains(CLASS_NAME_DROPDOWN_ITEM)) {\n                SelectorEngine.findOne(SELECTOR_DROPDOWN_TOGGLE$1, target.closest(SELECTOR_DROPDOWN)).classList.add(CLASS_NAME_ACTIVE$1);\n                return;\n            }\n\n            for (const listGroup of SelectorEngine.parents(target, SELECTOR_NAV_LIST_GROUP)) {\n                // Set triggered links parents as active\n                // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor\n                for (const item of SelectorEngine.prev(listGroup, SELECTOR_LINK_ITEMS)) {\n                    item.classList.add(CLASS_NAME_ACTIVE$1);\n                }\n            }\n        }\n\n        _clearActiveClass(parent) {\n            parent.classList.remove(CLASS_NAME_ACTIVE$1);\n            const activeNodes = SelectorEngine.find(`${SELECTOR_TARGET_LINKS}.${CLASS_NAME_ACTIVE$1}`, parent);\n\n            for (const node of activeNodes) {\n                node.classList.remove(CLASS_NAME_ACTIVE$1);\n            }\n        } // Static\n\n    }\n\n    /**\n     * Data API implementation\n     */\n\n\n    EventHandler.on(window, EVENT_LOAD_DATA_API$1, () => {\n        for (const spy of SelectorEngine.find(SELECTOR_DATA_SPY)) {\n            ScrollSpy.getOrCreateInstance(spy);\n        }\n    });\n    /**\n     * jQuery\n     */\n\n    defineJQueryPlugin(ScrollSpy);\n\n    /**\n     * --------------------------------------------------------------------------\n     * Bootstrap (v5.2.3): tab.js\n     * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n     * --------------------------------------------------------------------------\n     */\n    /**\n     * Constants\n     */\n\n    const NAME$1 = 'tab';\n    const DATA_KEY$1 = 'bs.tab';\n    const EVENT_KEY$1 = `.${DATA_KEY$1}`;\n    const EVENT_HIDE$1 = `hide${EVENT_KEY$1}`;\n    const EVENT_HIDDEN$1 = `hidden${EVENT_KEY$1}`;\n    const EVENT_SHOW$1 = `show${EVENT_KEY$1}`;\n    const EVENT_SHOWN$1 = `shown${EVENT_KEY$1}`;\n    const EVENT_CLICK_DATA_API = `click${EVENT_KEY$1}`;\n    const EVENT_KEYDOWN = `keydown${EVENT_KEY$1}`;\n    const EVENT_LOAD_DATA_API = `load${EVENT_KEY$1}`;\n    const ARROW_LEFT_KEY = 'ArrowLeft';\n    const ARROW_RIGHT_KEY = 'ArrowRight';\n    const ARROW_UP_KEY = 'ArrowUp';\n    const ARROW_DOWN_KEY = 'ArrowDown';\n    const CLASS_NAME_ACTIVE = 'active';\n    const CLASS_NAME_FADE$1 = 'fade';\n    const CLASS_NAME_SHOW$1 = 'show';\n    const CLASS_DROPDOWN = 'dropdown';\n    const SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle';\n    const SELECTOR_DROPDOWN_MENU = '.dropdown-menu';\n    const NOT_SELECTOR_DROPDOWN_TOGGLE = ':not(.dropdown-toggle)';\n    const SELECTOR_TAB_PANEL = '.list-group, .nav, [role=\"tablist\"]';\n    const SELECTOR_OUTER = '.nav-item, .list-group-item';\n    const SELECTOR_INNER = `.nav-link${NOT_SELECTOR_DROPDOWN_TOGGLE}, .list-group-item${NOT_SELECTOR_DROPDOWN_TOGGLE}, [role=\"tab\"]${NOT_SELECTOR_DROPDOWN_TOGGLE}`;\n    const SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"tab\"], [data-bs-toggle=\"pill\"], [data-bs-toggle=\"list\"]'; // todo:v6: could be only `tab`\n\n    const SELECTOR_INNER_ELEM = `${SELECTOR_INNER}, ${SELECTOR_DATA_TOGGLE}`;\n    const SELECTOR_DATA_TOGGLE_ACTIVE = `.${CLASS_NAME_ACTIVE}[data-bs-toggle=\"tab\"], .${CLASS_NAME_ACTIVE}[data-bs-toggle=\"pill\"], .${CLASS_NAME_ACTIVE}[data-bs-toggle=\"list\"]`;\n\n    /**\n     * Class definition\n     */\n\n    class Tab extends BaseComponent {\n        constructor(element) {\n            super(element);\n            this._parent = this._element.closest(SELECTOR_TAB_PANEL);\n\n            if (!this._parent) {\n                return; // todo: should Throw exception on v6\n                // throw new TypeError(`${element.outerHTML} has not a valid parent ${SELECTOR_INNER_ELEM}`)\n            } // Set up initial aria attributes\n\n\n            this._setInitialAttributes(this._parent, this._getChildren());\n\n            EventHandler.on(this._element, EVENT_KEYDOWN, event => this._keydown(event));\n        } // Getters\n\n\n        static get NAME() {\n            return NAME$1;\n        } // Public\n\n        static jQueryInterface(config) {\n            return this.each(function () {\n                const data = Tab.getOrCreateInstance(this);\n\n                if (typeof config !== 'string') {\n                    return;\n                }\n\n                if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n                    throw new TypeError(`No method named \"${config}\"`);\n                }\n\n                data[config]();\n            });\n        }\n\n        show() {\n            // Shows this elem and deactivate the active sibling if exists\n            const innerElem = this._element;\n\n            if (this._elemIsActive(innerElem)) {\n                return;\n            } // Search for active tab on same parent to deactivate it\n\n\n            const active = this._getActiveElem();\n\n            const hideEvent = active ? EventHandler.trigger(active, EVENT_HIDE$1, {\n                relatedTarget: innerElem\n            }) : null;\n            const showEvent = EventHandler.trigger(innerElem, EVENT_SHOW$1, {\n                relatedTarget: active\n            });\n\n            if (showEvent.defaultPrevented || hideEvent && hideEvent.defaultPrevented) {\n                return;\n            }\n\n            this._deactivate(active, innerElem);\n\n            this._activate(innerElem, active);\n        } // Private\n\n        _activate(element, relatedElem) {\n            if (!element) {\n                return;\n            }\n\n            element.classList.add(CLASS_NAME_ACTIVE);\n\n            this._activate(getElementFromSelector(element)); // Search and activate/show the proper section\n\n\n            const complete = () => {\n                if (element.getAttribute('role') !== 'tab') {\n                    element.classList.add(CLASS_NAME_SHOW$1);\n                    return;\n                }\n\n                element.removeAttribute('tabindex');\n                element.setAttribute('aria-selected', true);\n\n                this._toggleDropDown(element, true);\n\n                EventHandler.trigger(element, EVENT_SHOWN$1, {\n                    relatedTarget: relatedElem\n                });\n            };\n\n            this._queueCallback(complete, element, element.classList.contains(CLASS_NAME_FADE$1));\n        }\n\n        _deactivate(element, relatedElem) {\n            if (!element) {\n                return;\n            }\n\n            element.classList.remove(CLASS_NAME_ACTIVE);\n            element.blur();\n\n            this._deactivate(getElementFromSelector(element)); // Search and deactivate the shown section too\n\n\n            const complete = () => {\n                if (element.getAttribute('role') !== 'tab') {\n                    element.classList.remove(CLASS_NAME_SHOW$1);\n                    return;\n                }\n\n                element.setAttribute('aria-selected', false);\n                element.setAttribute('tabindex', '-1');\n\n                this._toggleDropDown(element, false);\n\n                EventHandler.trigger(element, EVENT_HIDDEN$1, {\n                    relatedTarget: relatedElem\n                });\n            };\n\n            this._queueCallback(complete, element, element.classList.contains(CLASS_NAME_FADE$1));\n        }\n\n        _keydown(event) {\n            if (![ARROW_LEFT_KEY, ARROW_RIGHT_KEY, ARROW_UP_KEY, ARROW_DOWN_KEY].includes(event.key)) {\n                return;\n            }\n\n            event.stopPropagation(); // stopPropagation/preventDefault both added to support up/down keys without scrolling the page\n\n            event.preventDefault();\n            const isNext = [ARROW_RIGHT_KEY, ARROW_DOWN_KEY].includes(event.key);\n            const nextActiveElement = getNextActiveElement(this._getChildren().filter(element => !isDisabled(element)), event.target, isNext, true);\n\n            if (nextActiveElement) {\n                nextActiveElement.focus({\n                    preventScroll: true\n                });\n                Tab.getOrCreateInstance(nextActiveElement).show();\n            }\n        }\n\n        _getChildren() {\n            // collection of inner elements\n            return SelectorEngine.find(SELECTOR_INNER_ELEM, this._parent);\n        }\n\n        _getActiveElem() {\n            return this._getChildren().find(child => this._elemIsActive(child)) || null;\n        }\n\n        _setInitialAttributes(parent, children) {\n            this._setAttributeIfNotExists(parent, 'role', 'tablist');\n\n            for (const child of children) {\n                this._setInitialAttributesOnChild(child);\n            }\n        }\n\n        _setInitialAttributesOnChild(child) {\n            child = this._getInnerElement(child);\n\n            const isActive = this._elemIsActive(child);\n\n            const outerElem = this._getOuterElement(child);\n\n            child.setAttribute('aria-selected', isActive);\n\n            if (outerElem !== child) {\n                this._setAttributeIfNotExists(outerElem, 'role', 'presentation');\n            }\n\n            if (!isActive) {\n                child.setAttribute('tabindex', '-1');\n            }\n\n            this._setAttributeIfNotExists(child, 'role', 'tab'); // set attributes to the related panel too\n\n\n            this._setInitialAttributesOnTargetPanel(child);\n        }\n\n        _setInitialAttributesOnTargetPanel(child) {\n            const target = getElementFromSelector(child);\n\n            if (!target) {\n                return;\n            }\n\n            this._setAttributeIfNotExists(target, 'role', 'tabpanel');\n\n            if (child.id) {\n                this._setAttributeIfNotExists(target, 'aria-labelledby', `#${child.id}`);\n            }\n        }\n\n        _toggleDropDown(element, open) {\n            const outerElem = this._getOuterElement(element);\n\n            if (!outerElem.classList.contains(CLASS_DROPDOWN)) {\n                return;\n            }\n\n            const toggle = (selector, className) => {\n                const element = SelectorEngine.findOne(selector, outerElem);\n\n                if (element) {\n                    element.classList.toggle(className, open);\n                }\n            };\n\n            toggle(SELECTOR_DROPDOWN_TOGGLE, CLASS_NAME_ACTIVE);\n            toggle(SELECTOR_DROPDOWN_MENU, CLASS_NAME_SHOW$1);\n            outerElem.setAttribute('aria-expanded', open);\n        }\n\n        _setAttributeIfNotExists(element, attribute, value) {\n            if (!element.hasAttribute(attribute)) {\n                element.setAttribute(attribute, value);\n            }\n        }\n\n        _elemIsActive(elem) {\n            return elem.classList.contains(CLASS_NAME_ACTIVE);\n        } // Try to get the inner element (usually the .nav-link)\n\n        _getInnerElement(elem) {\n            return elem.matches(SELECTOR_INNER_ELEM) ? elem : SelectorEngine.findOne(SELECTOR_INNER_ELEM, elem);\n        } // Try to get the outer element (usually the .nav-item)\n\n        _getOuterElement(elem) {\n            return elem.closest(SELECTOR_OUTER) || elem;\n        } // Static\n\n    }\n\n    /**\n     * Data API implementation\n     */\n\n\n    EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n        if (['A', 'AREA'].includes(this.tagName)) {\n            event.preventDefault();\n        }\n\n        if (isDisabled(this)) {\n            return;\n        }\n\n        Tab.getOrCreateInstance(this).show();\n    });\n    /**\n     * Initialize on focus\n     */\n\n    EventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n        for (const element of SelectorEngine.find(SELECTOR_DATA_TOGGLE_ACTIVE)) {\n            Tab.getOrCreateInstance(element);\n        }\n    });\n    /**\n     * jQuery\n     */\n\n    defineJQueryPlugin(Tab);\n\n    /**\n     * --------------------------------------------------------------------------\n     * Bootstrap (v5.2.3): toast.js\n     * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n     * --------------------------------------------------------------------------\n     */\n    /**\n     * Constants\n     */\n\n    const NAME = 'toast';\n    const DATA_KEY = 'bs.toast';\n    const EVENT_KEY = `.${DATA_KEY}`;\n    const EVENT_MOUSEOVER = `mouseover${EVENT_KEY}`;\n    const EVENT_MOUSEOUT = `mouseout${EVENT_KEY}`;\n    const EVENT_FOCUSIN = `focusin${EVENT_KEY}`;\n    const EVENT_FOCUSOUT = `focusout${EVENT_KEY}`;\n    const EVENT_HIDE = `hide${EVENT_KEY}`;\n    const EVENT_HIDDEN = `hidden${EVENT_KEY}`;\n    const EVENT_SHOW = `show${EVENT_KEY}`;\n    const EVENT_SHOWN = `shown${EVENT_KEY}`;\n    const CLASS_NAME_FADE = 'fade';\n    const CLASS_NAME_HIDE = 'hide'; // @deprecated - kept here only for backwards compatibility\n\n    const CLASS_NAME_SHOW = 'show';\n    const CLASS_NAME_SHOWING = 'showing';\n    const DefaultType = {\n        animation: 'boolean',\n        autohide: 'boolean',\n        delay: 'number'\n    };\n    const Default = {\n        animation: true,\n        autohide: true,\n        delay: 5000\n    };\n\n    /**\n     * Class definition\n     */\n\n    class Toast extends BaseComponent {\n        constructor(element, config) {\n            super(element, config);\n            this._timeout = null;\n            this._hasMouseInteraction = false;\n            this._hasKeyboardInteraction = false;\n\n            this._setListeners();\n        } // Getters\n\n\n        static get Default() {\n            return Default;\n        }\n\n        static get DefaultType() {\n            return DefaultType;\n        }\n\n        static get NAME() {\n            return NAME;\n        } // Public\n\n        static jQueryInterface(config) {\n            return this.each(function () {\n                const data = Toast.getOrCreateInstance(this, config);\n\n                if (typeof config === 'string') {\n                    if (typeof data[config] === 'undefined') {\n                        throw new TypeError(`No method named \"${config}\"`);\n                    }\n\n                    data[config](this);\n                }\n            });\n        }\n\n        show() {\n            const showEvent = EventHandler.trigger(this._element, EVENT_SHOW);\n\n            if (showEvent.defaultPrevented) {\n                return;\n            }\n\n            this._clearTimeout();\n\n            if (this._config.animation) {\n                this._element.classList.add(CLASS_NAME_FADE);\n            }\n\n            const complete = () => {\n                this._element.classList.remove(CLASS_NAME_SHOWING);\n\n                EventHandler.trigger(this._element, EVENT_SHOWN);\n\n                this._maybeScheduleHide();\n            };\n\n            this._element.classList.remove(CLASS_NAME_HIDE); // @deprecated\n\n\n            reflow(this._element);\n\n            this._element.classList.add(CLASS_NAME_SHOW, CLASS_NAME_SHOWING);\n\n            this._queueCallback(complete, this._element, this._config.animation);\n        }\n\n        hide() {\n            if (!this.isShown()) {\n                return;\n            }\n\n            const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE);\n\n            if (hideEvent.defaultPrevented) {\n                return;\n            }\n\n            const complete = () => {\n                this._element.classList.add(CLASS_NAME_HIDE); // @deprecated\n\n\n                this._element.classList.remove(CLASS_NAME_SHOWING, CLASS_NAME_SHOW);\n\n                EventHandler.trigger(this._element, EVENT_HIDDEN);\n            };\n\n            this._element.classList.add(CLASS_NAME_SHOWING);\n\n            this._queueCallback(complete, this._element, this._config.animation);\n        }\n\n        dispose() {\n            this._clearTimeout();\n\n            if (this.isShown()) {\n                this._element.classList.remove(CLASS_NAME_SHOW);\n            }\n\n            super.dispose();\n        }\n\n        isShown() {\n            return this._element.classList.contains(CLASS_NAME_SHOW);\n        } // Private\n\n        _maybeScheduleHide() {\n            if (!this._config.autohide) {\n                return;\n            }\n\n            if (this._hasMouseInteraction || this._hasKeyboardInteraction) {\n                return;\n            }\n\n            this._timeout = setTimeout(() => {\n                this.hide();\n            }, this._config.delay);\n        }\n\n        _onInteraction(event, isInteracting) {\n            switch (event.type) {\n                case 'mouseover':\n                case 'mouseout': {\n                    this._hasMouseInteraction = isInteracting;\n                    break;\n                }\n\n                case 'focusin':\n                case 'focusout': {\n                    this._hasKeyboardInteraction = isInteracting;\n                    break;\n                }\n            }\n\n            if (isInteracting) {\n                this._clearTimeout();\n\n                return;\n            }\n\n            const nextElement = event.relatedTarget;\n\n            if (this._element === nextElement || this._element.contains(nextElement)) {\n                return;\n            }\n\n            this._maybeScheduleHide();\n        }\n\n        _setListeners() {\n            EventHandler.on(this._element, EVENT_MOUSEOVER, event => this._onInteraction(event, true));\n            EventHandler.on(this._element, EVENT_MOUSEOUT, event => this._onInteraction(event, false));\n            EventHandler.on(this._element, EVENT_FOCUSIN, event => this._onInteraction(event, true));\n            EventHandler.on(this._element, EVENT_FOCUSOUT, event => this._onInteraction(event, false));\n        }\n\n        _clearTimeout() {\n            clearTimeout(this._timeout);\n            this._timeout = null;\n        } // Static\n\n    }\n\n    /**\n     * Data API implementation\n     */\n\n\n    enableDismissTrigger(Toast);\n    /**\n     * jQuery\n     */\n\n    defineJQueryPlugin(Toast);\n\n    /**\n     * --------------------------------------------------------------------------\n     * Bootstrap (v5.2.3): index.umd.js\n     * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n     * --------------------------------------------------------------------------\n     */\n    const index_umd = {\n        Alert,\n        Button,\n        Carousel,\n        Collapse,\n        Dropdown,\n        Modal,\n        Offcanvas,\n        Popover,\n        ScrollSpy,\n        Tab,\n        Toast,\n        Tooltip\n    };\n\n    return index_umd;\n\n}));\n//# sourceMappingURL=bootstrap.js.map\n"
  },
  {
    "path": "src/main/resources/web/js/petite-vue.js",
    "content": "var tt = Object.defineProperty;\nvar nt = (e, t, n) => t in e ? tt(e, t, {enumerable: !0, configurable: !0, writable: !0, value: n}) : e[t] = n;\nvar $ = (e, t, n) => (nt(e, typeof t != \"symbol\" ? t + \"\" : t, n), n);\n\nfunction st(e, t) {\n    const n = Object.create(null), s = e.split(\",\");\n    for (let r = 0; r < s.length; r++) n[s[r]] = !0;\n    return t ? r => !!n[r.toLowerCase()] : r => !!n[r];\n}\n\nfunction de(e) {\n    if (y(e)) {\n        const t = {};\n        for (let n = 0; n < e.length; n++) {\n            const s = e[n], r = N(s) ? it(s) : de(s);\n            if (r) for (const i in r) t[i] = r[i];\n        }\n        return t;\n    } else {\n        if (N(e)) return e;\n        if (S(e)) return e;\n    }\n}\n\nconst rt = /;(?![^(]*\\))/g, ot = /:(.+)/;\n\nfunction it(e) {\n    const t = {};\n    return e.split(rt).forEach(n => {\n        if (n) {\n            const s = n.split(ot);\n            s.length > 1 && (t[s[0].trim()] = s[1].trim());\n        }\n    }), t;\n}\n\nfunction me(e) {\n    let t = \"\";\n    if (N(e)) t = e; else if (y(e)) for (let n = 0; n < e.length; n++) {\n        const s = me(e[n]);\n        s && (t += s + \" \");\n    } else if (S(e)) for (const n in e) e[n] && (t += n + \" \");\n    return t.trim();\n}\n\nfunction ct(e, t) {\n    if (e.length !== t.length) return !1;\n    let n = !0;\n    for (let s = 0; n && s < e.length; s++) n = I(e[s], t[s]);\n    return n;\n}\n\nfunction I(e, t) {\n    if (e === t) return !0;\n    let n = ge(e), s = ge(t);\n    if (n || s) return n && s ? e.getTime() === t.getTime() : !1;\n    if (n = y(e), s = y(t), n || s) return n && s ? ct(e, t) : !1;\n    if (n = S(e), s = S(t), n || s) {\n        if (!n || !s) return !1;\n        const r = Object.keys(e).length, i = Object.keys(t).length;\n        if (r !== i) return !1;\n        for (const c in e) {\n            const o = e.hasOwnProperty(c), l = t.hasOwnProperty(c);\n            if (o && !l || !o && l || !I(e[c], t[c])) return !1;\n        }\n    }\n    return String(e) === String(t);\n}\n\nfunction G(e, t) {\n    return e.findIndex(n => I(n, t));\n}\n\nconst lt = Object.assign, ft = (e, t) => {\n        const n = e.indexOf(t);\n        n > -1 && e.splice(n, 1);\n    }, at = Object.prototype.hasOwnProperty, U = (e, t) => at.call(e, t), y = Array.isArray,\n    Y = e => ye(e) === \"[object Map]\", ge = e => e instanceof Date, N = e => typeof e == \"string\",\n    Q = e => typeof e == \"symbol\", S = e => e !== null && typeof e == \"object\", ut = Object.prototype.toString,\n    ye = e => ut.call(e), pt = e => ye(e).slice(8, -1),\n    X = e => N(e) && e !== \"NaN\" && e[0] !== \"-\" && \"\" + parseInt(e, 10) === e, be = e => {\n        const t = Object.create(null);\n        return n => t[n] || (t[n] = e(n));\n    }, ht = /-(\\w)/g, dt = be(e => e.replace(ht, (t, n) => n ? n.toUpperCase() : \"\")), mt = /\\B([A-Z])/g,\n    xe = be(e => e.replace(mt, \"-$1\").toLowerCase()), gt = (e, t) => !Object.is(e, t), ve = e => {\n        const t = parseFloat(e);\n        return isNaN(t) ? e : t;\n    };\nlet yt;\n\nfunction we(e, t) {\n    t = t || yt, t && t.active && t.effects.push(e);\n}\n\nconst _e = e => {\n    const t = new Set(e);\n    return t.w = 0, t.n = 0, t;\n}, Ee = e => (e.w & O) > 0, $e = e => (e.n & O) > 0, bt = ({deps: e}) => {\n    if (e.length) for (let t = 0; t < e.length; t++) e[t].w |= O;\n}, xt = e => {\n    const {deps: t} = e;\n    if (t.length) {\n        let n = 0;\n        for (let s = 0; s < t.length; s++) {\n            const r = t[s];\n            Ee(r) && !$e(r) ? r.delete(e) : t[n++] = r, r.w &= ~O, r.n &= ~O;\n        }\n        t.length = n;\n    }\n}, ee = new WeakMap();\nlet B = 0, O = 1;\nconst te = 30, z = [];\nlet C;\nconst W = Symbol(\"\"), Se = Symbol(\"\");\n\nclass vt {\n    constructor(t, n = null, s) {\n        this.fn = t, this.scheduler = n, this.active = !0, this.deps = [], we(this, s);\n    }\n\n    run() {\n        if (!this.active) return this.fn();\n        if (!z.includes(this)) try {\n            return z.push(C = this), $t(), O = 1 << ++B, B <= te ? bt(this) : Oe(this), this.fn();\n        } finally {\n            B <= te && xt(this), O = 1 << --B, ke(), z.pop();\n            const t = z.length;\n            C = t > 0 ? z[t - 1] : void 0;\n        }\n    }\n\n    stop() {\n        this.active && (Oe(this), this.onStop && this.onStop(), this.active = !1);\n    }\n}\n\nfunction Oe(e) {\n    const {deps: t} = e;\n    if (t.length) {\n        for (let n = 0; n < t.length; n++) t[n].delete(e);\n        t.length = 0;\n    }\n}\n\nfunction wt(e, t) {\n    e.effect && (e = e.effect.fn);\n    const n = new vt(e);\n    t && (lt(n, t), t.scope && we(n, t.scope)), (!t || !t.lazy) && n.run();\n    const s = n.run.bind(n);\n    return s.effect = n, s;\n}\n\nfunction _t(e) {\n    e.effect.stop();\n}\n\nlet K = !0;\nconst ne = [];\n\nfunction Et() {\n    ne.push(K), K = !1;\n}\n\nfunction $t() {\n    ne.push(K), K = !0;\n}\n\nfunction ke() {\n    const e = ne.pop();\n    K = e === void 0 ? !0 : e;\n}\n\nfunction F(e, t, n) {\n    if (!St()) return;\n    let s = ee.get(e);\n    s || ee.set(e, s = new Map());\n    let r = s.get(n);\n    r || s.set(n, r = _e()), Ot(r);\n}\n\nfunction St() {\n    return K && C !== void 0;\n}\n\nfunction Ot(e, t) {\n    let n = !1;\n    B <= te ? $e(e) || (e.n |= O, n = !Ee(e)) : n = !e.has(C), n && (e.add(C), C.deps.push(e));\n}\n\nfunction se(e, t, n, s, r, i) {\n    const c = ee.get(e);\n    if (!c) return;\n    let o = [];\n    if (t === \"clear\") o = [...c.values()]; else if (n === \"length\" && y(e)) c.forEach((l, f) => {\n        (f === \"length\" || f >= s) && o.push(l);\n    }); else switch (n !== void 0 && o.push(c.get(n)), t) {\n        case \"add\":\n            y(e) ? X(n) && o.push(c.get(\"length\")) : (o.push(c.get(W)), Y(e) && o.push(c.get(Se)));\n            break;\n        case \"delete\":\n            y(e) || (o.push(c.get(W)), Y(e) && o.push(c.get(Se)));\n            break;\n        case \"set\":\n            Y(e) && o.push(c.get(W));\n            break;\n    }\n    if (o.length === 1) o[0] && Te(o[0]); else {\n        const l = [];\n        for (const f of o) f && l.push(...f);\n        Te(_e(l));\n    }\n}\n\nfunction Te(e, t) {\n    for (const n of y(e) ? e : [...e]) (n !== C || n.allowRecurse) && (n.scheduler ? n.scheduler() : n.run());\n}\n\nconst kt = st(\"__proto__,__v_isRef,__isVue\"),\n    Ae = new Set(Object.getOwnPropertyNames(Symbol).map(e => Symbol[e]).filter(Q)), Tt = Me(), At = Me(!0), Re = Rt();\n\nfunction Rt() {\n    const e = {};\n    return [\"includes\", \"indexOf\", \"lastIndexOf\"].forEach(t => {\n        e[t] = function (...n) {\n            const s = j(this);\n            for (let i = 0, c = this.length; i < c; i++) F(s, \"get\", i + \"\");\n            const r = s[t](...n);\n            return r === -1 || r === !1 ? s[t](...n.map(j)) : r;\n        };\n    }), [\"push\", \"pop\", \"shift\", \"unshift\", \"splice\"].forEach(t => {\n        e[t] = function (...n) {\n            Et();\n            const s = j(this)[t].apply(this, n);\n            return ke(), s;\n        };\n    }), e;\n}\n\nfunction Me(e = !1, t = !1) {\n    return function (s, r, i) {\n        if (r === \"__v_isReactive\") return !e;\n        if (r === \"__v_isReadonly\") return e;\n        if (r === \"__v_raw\" && i === (e ? t ? zt : je : t ? Bt : Ce).get(s)) return s;\n        const c = y(s);\n        if (!e && c && U(Re, r)) return Reflect.get(Re, r, i);\n        const o = Reflect.get(s, r, i);\n        return (Q(r) ? Ae.has(r) : kt(r)) || (e || F(s, \"get\", r), t) ? o : re(o) ? !c || !X(r) ? o.value : o : S(o) ? e ? Ht(o) : D(o) : o;\n    };\n}\n\nconst Mt = Ct();\n\nfunction Ct(e = !1) {\n    return function (n, s, r, i) {\n        let c = n[s];\n        if (!e && !Lt(r) && (r = j(r), c = j(c), !y(n) && re(c) && !re(r))) return c.value = r, !0;\n        const o = y(n) && X(s) ? Number(s) < n.length : U(n, s), l = Reflect.set(n, s, r, i);\n        return n === j(i) && (o ? gt(r, c) && se(n, \"set\", s, r) : se(n, \"add\", s, r)), l;\n    };\n}\n\nfunction jt(e, t) {\n    const n = U(e, t);\n    e[t];\n    const s = Reflect.deleteProperty(e, t);\n    return s && n && se(e, \"delete\", t, void 0), s;\n}\n\nfunction Pt(e, t) {\n    const n = Reflect.has(e, t);\n    return (!Q(t) || !Ae.has(t)) && F(e, \"has\", t), n;\n}\n\nfunction It(e) {\n    return F(e, \"iterate\", y(e) ? \"length\" : W), Reflect.ownKeys(e);\n}\n\nconst Nt = {get: Tt, set: Mt, deleteProperty: jt, has: Pt, ownKeys: It}, Kt = {\n    get: At, set(e, t) {\n        return !0;\n    }, deleteProperty(e, t) {\n        return !0;\n    }\n}, Ce = new WeakMap(), Bt = new WeakMap(), je = new WeakMap(), zt = new WeakMap();\n\nfunction Dt(e) {\n    switch (e) {\n        case \"Object\":\n        case \"Array\":\n            return 1;\n        case \"Map\":\n        case \"Set\":\n        case \"WeakMap\":\n        case \"WeakSet\":\n            return 2;\n        default:\n            return 0;\n    }\n}\n\nfunction Vt(e) {\n    return e.__v_skip || !Object.isExtensible(e) ? 0 : Dt(pt(e));\n}\n\nfunction D(e) {\n    return e && e.__v_isReadonly ? e : Pe(e, !1, Nt, null, Ce);\n}\n\nfunction Ht(e) {\n    return Pe(e, !0, Kt, null, je);\n}\n\nfunction Pe(e, t, n, s, r) {\n    if (!S(e) || e.__v_raw && !(t && e.__v_isReactive)) return e;\n    const i = r.get(e);\n    if (i) return i;\n    const c = Vt(e);\n    if (c === 0) return e;\n    const o = new Proxy(e, c === 2 ? s : n);\n    return r.set(e, o), o;\n}\n\nfunction Lt(e) {\n    return !!(e && e.__v_isReadonly);\n}\n\nfunction j(e) {\n    const t = e && e.__v_raw;\n    return t ? j(t) : e;\n}\n\nfunction re(e) {\n    return Boolean(e && e.__v_isRef === !0);\n}\n\nPromise.resolve();\nlet oe = !1;\nconst q = [], Wt = Promise.resolve(), V = e => Wt.then(e), Ie = e => {\n        q.includes(e) || q.push(e), oe || (oe = !0, V(Ft));\n    }, Ft = () => {\n        for (const e of q) e();\n        q.length = 0, oe = !1;\n    }, qt = /^(spellcheck|draggable|form|list|type)$/, ie = ({el: e, get: t, effect: n, arg: s, modifiers: r}) => {\n        let i;\n        s === \"class\" && (e._class = e.className), n(() => {\n            let c = t();\n            if (s) (r == null ? void 0 : r.camel) && (s = dt(s)), ce(e, s, c, i); else {\n                for (const o in c) ce(e, o, c[o], i && i[o]);\n                for (const o in i) (!c || !(o in c)) && ce(e, o, null);\n            }\n            i = c;\n        });\n    }, ce = (e, t, n, s) => {\n        if (t === \"class\") e.setAttribute(\"class\", me(e._class ? [e._class, n] : n) || \"\"); else if (t === \"style\") {\n            n = de(n);\n            const {style: r} = e;\n            if (!n) e.removeAttribute(\"style\"); else if (N(n)) n !== s && (r.cssText = n); else {\n                for (const i in n) le(r, i, n[i]);\n                if (s && !N(s)) for (const i in s) n[i] == null && le(r, i, \"\");\n            }\n        } else !(e instanceof SVGElement) && t in e && !qt.test(t) ? (e[t] = n, t === \"value\" && (e._value = n)) : t === \"true-value\" ? e._trueValue = n : t === \"false-value\" ? e._falseValue = n : n != null ? e.setAttribute(t, n) : e.removeAttribute(t);\n    }, Ne = /\\s*!important$/, le = (e, t, n) => {\n        y(n) ? n.forEach(s => le(e, t, s)) : t.startsWith(\"--\") ? e.setProperty(t, n) : Ne.test(n) ? e.setProperty(xe(t), n.replace(Ne, \"\"), \"important\") : e[t] = n;\n    }, k = (e, t) => {\n        const n = e.getAttribute(t);\n        return n != null && e.removeAttribute(t), n;\n    }, T = (e, t, n, s) => {\n        e.addEventListener(t, n, s);\n    }, Jt = /^[A-Za-z_$][\\w$]*(?:\\.[A-Za-z_$][\\w$]*|\\['[^']*?']|\\[\"[^\"]*?\"]|\\[\\d+]|\\[[A-Za-z_$][\\w$]*])*$/,\n    Zt = [\"ctrl\", \"shift\", \"alt\", \"meta\"], Gt = {\n        stop: e => e.stopPropagation(),\n        prevent: e => e.preventDefault(),\n        self: e => e.target !== e.currentTarget,\n        ctrl: e => !e.ctrlKey,\n        shift: e => !e.shiftKey,\n        alt: e => !e.altKey,\n        meta: e => !e.metaKey,\n        left: e => \"button\" in e && e.button !== 0,\n        middle: e => \"button\" in e && e.button !== 1,\n        right: e => \"button\" in e && e.button !== 2,\n        exact: (e, t) => Zt.some(n => e[`${n}Key`] && !t[n])\n    }, Ke = ({el: e, get: t, exp: n, arg: s, modifiers: r}) => {\n        if (!s) return;\n        let i = Jt.test(n) ? t(`(e => ${n}(e))`) : t(`($event => { ${n} })`);\n        if (s === \"vue:mounted\") {\n            V(i);\n            return;\n        } else if (s === \"vue:unmounted\") return () => i();\n        if (r) {\n            s === \"click\" && (r.right && (s = \"contextmenu\"), r.middle && (s = \"mouseup\"));\n            const c = i;\n            i = o => {\n                if (!(\"key\" in o && !(xe(o.key) in r))) {\n                    for (const l in r) {\n                        const f = Gt[l];\n                        if (f && f(o, r)) return;\n                    }\n                    return c(o);\n                }\n            };\n        }\n        T(e, s, i, r);\n    }, Ut = ({el: e, get: t, effect: n}) => {\n        const s = e.style.display;\n        n(() => {\n            e.style.display = t() ? s : \"none\";\n        });\n    }, Be = ({el: e, get: t, effect: n}) => {\n        n(() => {\n            e.textContent = ze(t());\n        });\n    }, ze = e => e == null ? \"\" : S(e) ? JSON.stringify(e, null, 2) : String(e), Yt = ({el: e, get: t, effect: n}) => {\n        n(() => {\n            e.innerHTML = t();\n        });\n    }, Qt = ({el: e, exp: t, get: n, effect: s, modifiers: r}) => {\n        const i = e.type, c = n(`(val) => { ${t} = val }`), {trim: o, number: l = i === \"number\"} = r || {};\n        if (e.tagName === \"SELECT\") {\n            const f = e;\n            T(e, \"change\", () => {\n                const a = Array.prototype.filter.call(f.options, u => u.selected).map(u => l ? ve(A(u)) : A(u));\n                c(f.multiple ? a : a[0]);\n            }), s(() => {\n                const a = n(), u = f.multiple;\n                for (let p = 0, x = f.options.length; p < x; p++) {\n                    const b = f.options[p], v = A(b);\n                    if (u) y(a) ? b.selected = G(a, v) > -1 : b.selected = a.has(v); else if (I(A(b), a)) {\n                        f.selectedIndex !== p && (f.selectedIndex = p);\n                        return;\n                    }\n                }\n                !u && f.selectedIndex !== -1 && (f.selectedIndex = -1);\n            });\n        } else if (i === \"checkbox\") {\n            T(e, \"change\", () => {\n                const a = n(), u = e.checked;\n                if (y(a)) {\n                    const p = A(e), x = G(a, p), b = x !== -1;\n                    if (u && !b) c(a.concat(p)); else if (!u && b) {\n                        const v = [...a];\n                        v.splice(x, 1), c(v);\n                    }\n                } else c(De(e, u));\n            });\n            let f;\n            s(() => {\n                const a = n();\n                y(a) ? e.checked = G(a, A(e)) > -1 : a !== f && (e.checked = I(a, De(e, !0))), f = a;\n            });\n        } else if (i === \"radio\") {\n            T(e, \"change\", () => {\n                c(A(e));\n            });\n            let f;\n            s(() => {\n                const a = n();\n                a !== f && (e.checked = I(a, A(e)));\n            });\n        } else {\n            const f = a => o ? a.trim() : l ? ve(a) : a;\n            T(e, \"compositionstart\", Xt), T(e, \"compositionend\", en), T(e, (r == null ? void 0 : r.lazy) ? \"change\" : \"input\", () => {\n                e.composing || c(f(e.value));\n            }), o && T(e, \"change\", () => {\n                e.value = e.value.trim();\n            }), s(() => {\n                if (e.composing) return;\n                const a = e.value, u = n();\n                document.activeElement === e && f(a) === u || a !== u && (e.value = u);\n            });\n        }\n    }, A = e => \"_value\" in e ? e._value : e.value, De = (e, t) => {\n        const n = t ? \"_trueValue\" : \"_falseValue\";\n        return n in e ? e[n] : t;\n    }, Xt = e => {\n        e.target.composing = !0;\n    }, en = e => {\n        const t = e.target;\n        t.composing && (t.composing = !1, tn(t, \"input\"));\n    }, tn = (e, t) => {\n        const n = document.createEvent(\"HTMLEvents\");\n        n.initEvent(t, !0, !0), e.dispatchEvent(n);\n    }, Ve = Object.create(null), H = (e, t, n) => He(e, `return(${t})`, n), He = (e, t, n) => {\n        const s = Ve[t] || (Ve[t] = nn(t));\n        try {\n            return s(e, n);\n        } catch (r) {\n            console.error(r);\n        }\n    }, nn = e => {\n        try {\n            return new Function(\"$data\", \"$el\", `with($data){${e}}`);\n        } catch (t) {\n            return console.error(`${t.message} in expression: ${e}`), () => {\n            };\n        }\n    }, sn = ({el: e, ctx: t, exp: n, effect: s}) => {\n        V(() => s(() => He(t.scope, n, e)));\n    }, rn = {bind: ie, on: Ke, show: Ut, text: Be, html: Yt, model: Qt, effect: sn}, on = (e, t, n) => {\n        const s = e.parentElement, r = new Comment(\"v-if\");\n        s.insertBefore(r, e);\n        const i = [{exp: t, el: e}];\n        let c, o;\n        for (; (c = e.nextElementSibling) && (o = null, k(c, \"v-else\") === \"\" || (o = k(c, \"v-else-if\")));) s.removeChild(c), i.push({\n            exp: o,\n            el: c\n        });\n        const l = e.nextSibling;\n        s.removeChild(e);\n        let f, a = -1;\n        const u = () => {\n            f && (s.insertBefore(r, f.el), f.remove(), f = void 0);\n        };\n        return n.effect(() => {\n            for (let p = 0; p < i.length; p++) {\n                const {exp: x, el: b} = i[p];\n                if (!x || H(n.scope, x)) {\n                    p !== a && (u(), f = new ue(b, n), f.insert(s, r), s.removeChild(r), a = p);\n                    return;\n                }\n            }\n            a = -1, u();\n        }), l;\n    }, cn = /([\\s\\S]*?)\\s+(?:in|of)\\s+([\\s\\S]*)/, Le = /,([^,\\}\\]]*)(?:,([^,\\}\\]]*))?$/, ln = /^\\(|\\)$/g,\n    fn = /^[{[]\\s*((?:[\\w_$]+\\s*,?\\s*)+)[\\]}]$/, an = (e, t, n) => {\n        const s = t.match(cn);\n        if (!s) return;\n        const r = e.nextSibling, i = e.parentElement, c = new Text(\"\");\n        i.insertBefore(c, e), i.removeChild(e);\n        const o = s[2].trim();\n        let l = s[1].trim().replace(ln, \"\").trim(), f, a = !1, u, p, x = \"key\",\n            b = e.getAttribute(x) || e.getAttribute(x = \":key\") || e.getAttribute(x = \"v-bind:key\");\n        b && (e.removeAttribute(x), x === \"key\" && (b = JSON.stringify(b)));\n        let v;\n        (v = l.match(Le)) && (l = l.replace(Le, \"\").trim(), u = v[1].trim(), v[2] && (p = v[2].trim())), (v = l.match(fn)) && (f = v[1].split(\",\").map(m => m.trim()), a = l[0] === \"[\");\n        let pe = !1, R, L, J;\n        const et = m => {\n            const w = new Map(), h = [];\n            if (y(m)) for (let d = 0; d < m.length; d++) h.push(Z(w, m[d], d)); else if (typeof m == \"number\") for (let d = 0; d < m; d++) h.push(Z(w, d + 1, d)); else if (S(m)) {\n                let d = 0;\n                for (const g in m) h.push(Z(w, m[g], d++, g));\n            }\n            return [h, w];\n        }, Z = (m, w, h, d) => {\n            const g = {};\n            f ? f.forEach((M, E) => g[M] = w[a ? E : M]) : g[l] = w, d ? (u && (g[u] = d), p && (g[p] = h)) : u && (g[u] = h);\n            const P = Ge(n, g), _ = b ? H(P.scope, b) : h;\n            return m.set(_, h), P.key = _, P;\n        }, he = (m, w) => {\n            const h = new ue(e, m);\n            return h.key = m.key, h.insert(i, w), h;\n        };\n        return n.effect(() => {\n            const m = H(n.scope, o), w = J;\n            if ([L, J] = et(m), !pe) R = L.map(h => he(h, c)), pe = !0; else {\n                for (let _ = 0; _ < R.length; _++) J.has(R[_].key) || R[_].remove();\n                const h = [];\n                let d = L.length, g, P;\n                for (; d--;) {\n                    const _ = L[d], M = w.get(_.key);\n                    let E;\n                    M == null ? E = he(_, g ? g.el : c) : (E = R[M], Object.assign(E.ctx.scope, _.scope), M !== d && (R[M + 1] !== g || P === g) && (P = E, E.insert(i, g ? g.el : c))), h.unshift(g = E);\n                }\n                R = h;\n            }\n        }), r;\n    }, We = ({el: e, ctx: {scope: {$refs: t}}, get: n, effect: s}) => {\n        let r;\n        return s(() => {\n            const i = n();\n            t[i] = e, r && i !== r && delete t[r], r = i;\n        }), () => {\n            r && delete t[r];\n        };\n    }, un = /^(?:v-|:|@)/, pn = /\\.([\\w-]+)/g;\nlet fe = !1;\nconst Fe = (e, t) => {\n    const n = e.nodeType;\n    if (n === 1) {\n        const s = e;\n        if (s.hasAttribute(\"v-pre\")) return;\n        k(s, \"v-cloak\");\n        let r;\n        if (r = k(s, \"v-if\")) return on(s, r, t);\n        if (r = k(s, \"v-for\")) return an(s, r, t);\n        if ((r = k(s, \"v-scope\")) || r === \"\") {\n            const o = r ? H(t.scope, r) : {};\n            t = Ge(t, o), o.$template && hn(s, o.$template);\n        }\n        const i = k(s, \"v-once\") != null;\n        i && (fe = !0), (r = k(s, \"ref\")) && ae(s, We, `\"${r}\"`, t), qe(s, t);\n        const c = [];\n        for (const {\n            name: o,\n            value: l\n        } of [...s.attributes]) un.test(o) && o !== \"v-cloak\" && (o === \"v-model\" ? c.unshift([o, l]) : o[0] === \"@\" || /^v-on\\b/.test(o) ? c.push([o, l]) : Je(s, o, l, t));\n        for (const [o, l] of c) Je(s, o, l, t);\n        i && (fe = !1);\n    } else if (n === 3) {\n        const s = e.data;\n        if (s.includes(t.delimiters[0])) {\n            let r = [], i = 0, c;\n            for (; c = t.delimitersRE.exec(s);) {\n                const o = s.slice(i, c.index);\n                o && r.push(JSON.stringify(o)), r.push(`$s(${c[1]})`), i = c.index + c[0].length;\n            }\n            i < s.length && r.push(JSON.stringify(s.slice(i))), ae(e, Be, r.join(\"+\"), t);\n        }\n    } else n === 11 && qe(e, t);\n}, qe = (e, t) => {\n    let n = e.firstChild;\n    for (; n;) n = Fe(n, t) || n.nextSibling;\n}, Je = (e, t, n, s) => {\n    let r, i, c;\n    if (t = t.replace(pn, (o, l) => ((c || (c = {}))[l] = !0, \"\")), t[0] === \":\") r = ie, i = t.slice(1); else if (t[0] === \"@\") r = Ke, i = t.slice(1); else {\n        const o = t.indexOf(\":\"), l = o > 0 ? t.slice(2, o) : t.slice(2);\n        r = rn[l] || s.dirs[l], i = o > 0 ? t.slice(o + 1) : void 0;\n    }\n    r && (r === ie && i === \"ref\" && (r = We), ae(e, r, n, s, i, c), e.removeAttribute(t));\n}, ae = (e, t, n, s, r, i) => {\n    const c = t({el: e, get: (o = n) => H(s.scope, o, e), effect: s.effect, ctx: s, exp: n, arg: r, modifiers: i});\n    c && s.cleanups.push(c);\n}, hn = (e, t) => {\n    if (t[0] === \"#\") {\n        const n = document.querySelector(t);\n        e.appendChild(n.content.cloneNode(!0));\n        return;\n    }\n    e.innerHTML = t;\n}, Ze = e => {\n    const t = {\n        delimiters: [\"{{\", \"}}\"],\n        delimitersRE: /\\{\\{([^]+?)\\}\\}/g, ...e,\n        scope: e ? e.scope : D({}),\n        dirs: e ? e.dirs : {},\n        effects: [],\n        blocks: [],\n        cleanups: [],\n        effect: n => {\n            if (fe) return Ie(n), n;\n            const s = wt(n, {scheduler: () => Ie(s)});\n            return t.effects.push(s), s;\n        }\n    };\n    return t;\n}, Ge = (e, t = {}) => {\n    const n = e.scope, s = Object.create(n);\n    Object.defineProperties(s, Object.getOwnPropertyDescriptors(t)), s.$refs = Object.create(n.$refs);\n    const r = D(new Proxy(s, {\n        set(i, c, o, l) {\n            return l === r && !i.hasOwnProperty(c) ? Reflect.set(n, c, o) : Reflect.set(i, c, o, l);\n        }\n    }));\n    return Ue(r), {...e, scope: r};\n}, Ue = e => {\n    for (const t of Object.keys(e)) typeof e[t] == \"function\" && (e[t] = e[t].bind(e));\n};\n\nclass ue {\n    constructor(t, n, s = !1) {\n        $(this, \"template\");\n        $(this, \"ctx\");\n        $(this, \"key\");\n        $(this, \"parentCtx\");\n        $(this, \"isFragment\");\n        $(this, \"start\");\n        $(this, \"end\");\n        this.isFragment = t instanceof HTMLTemplateElement, s ? this.template = t : this.isFragment ? this.template = t.content.cloneNode(!0) : this.template = t.cloneNode(!0), s ? this.ctx = n : (this.parentCtx = n, n.blocks.push(this), this.ctx = Ze(n)), Fe(this.template, this.ctx);\n    }\n\n    get el() {\n        return this.start || this.template;\n    }\n\n    insert(t, n = null) {\n        if (this.isFragment) {\n            if (this.start) {\n                let s = this.start, r;\n                for (; s && (r = s.nextSibling, t.insertBefore(s, n), s !== this.end);) s = r;\n            } else this.start = new Text(\"\"), this.end = new Text(\"\"), t.insertBefore(this.end, n), t.insertBefore(this.start, this.end), t.insertBefore(this.template, this.end);\n        } else t.insertBefore(this.template, n);\n    }\n\n    remove() {\n        if (this.parentCtx && ft(this.parentCtx.blocks, this), this.start) {\n            const t = this.start.parentNode;\n            let n = this.start, s;\n            for (; n && (s = n.nextSibling, t.removeChild(n), n !== this.end);) n = s;\n        } else this.template.parentNode.removeChild(this.template);\n        this.teardown();\n    }\n\n    teardown() {\n        this.ctx.blocks.forEach(t => {\n            t.teardown();\n        }), this.ctx.effects.forEach(_t), this.ctx.cleanups.forEach(t => t());\n    }\n}\n\nconst Ye = e => e.replace(/[-.*+?^${}()|[\\]\\/\\\\]/g, \"\\\\$&\"), Qe = e => {\n    const t = Ze();\n    if (e && (t.scope = D(e), Ue(t.scope), e.$delimiters)) {\n        const [s, r] = t.delimiters = e.$delimiters;\n        t.delimitersRE = new RegExp(Ye(s) + \"([^]+?)\" + Ye(r), \"g\");\n    }\n    t.scope.$s = ze, t.scope.$nextTick = V, t.scope.$refs = Object.create(null);\n    let n;\n    return {\n        directive(s, r) {\n            return r ? (t.dirs[s] = r, this) : t.dirs[s];\n        }, mount(s) {\n            if (typeof s == \"string\" && (s = document.querySelector(s), !s)) return;\n            s = s || document.documentElement;\n            let r;\n            return s.hasAttribute(\"v-scope\") ? r = [s] : r = [...s.querySelectorAll(\"[v-scope]\")].filter(i => !i.matches(\"[v-scope] [v-scope]\")), r.length || (r = [s]), n = r.map(i => new ue(i, t, !0)), this;\n        }, unmount() {\n            n.forEach(s => s.teardown());\n        }\n    };\n}, Xe = document.currentScript;\nXe && Xe.hasAttribute(\"init\") && Qe().mount();\nexport {Qe as createApp, V as nextTick, D as reactive};"
  }
]