From deabfe6349cdc991f7777af52ca8630f7fda16b1 Mon Sep 17 00:00:00 2001 From: fl0ppy-d1sk Date: Thu, 2 May 2024 12:38:35 +0200 Subject: [PATCH 1/8] ui - init work on interfacing templates with UI --- src/linux/Dockerfile-centos | 1 + src/linux/Dockerfile-debian | 1 + src/linux/Dockerfile-fedora | 1 + src/linux/Dockerfile-rhel | 1 + src/linux/Dockerfile-rhel9 | 1 + src/linux/Dockerfile-ubuntu | 1 + src/linux/Dockerfile-ubuntu-noble | 1 + src/ui/Dockerfile | 1 + src/ui/main.py | 3 ++- src/ui/src/Templates.py | 36 +++++++++++++++++++++++++++++++ 10 files changed, 46 insertions(+), 1 deletion(-) create mode 100644 src/ui/src/Templates.py diff --git a/src/linux/Dockerfile-centos b/src/linux/Dockerfile-centos index 78ffc1626..0dfdb1d15 100644 --- a/src/linux/Dockerfile-centos +++ b/src/linux/Dockerfile-centos @@ -67,6 +67,7 @@ COPY src/common/gen gen COPY src/common/helpers helpers COPY src/common/settings.json settings.json COPY src/common/utils utils +COPY src/common/templates templates COPY src/scheduler scheduler COPY src/ui ui COPY src/VERSION VERSION diff --git a/src/linux/Dockerfile-debian b/src/linux/Dockerfile-debian index bfcaed389..a24f68b84 100644 --- a/src/linux/Dockerfile-debian +++ b/src/linux/Dockerfile-debian @@ -53,6 +53,7 @@ COPY src/common/gen gen COPY src/common/helpers helpers COPY src/common/settings.json settings.json COPY src/common/utils utils +COPY src/common/templates templates COPY src/scheduler scheduler COPY src/ui ui COPY src/VERSION VERSION diff --git a/src/linux/Dockerfile-fedora b/src/linux/Dockerfile-fedora index d659adf27..47a3712f3 100644 --- a/src/linux/Dockerfile-fedora +++ b/src/linux/Dockerfile-fedora @@ -49,6 +49,7 @@ COPY src/common/gen gen COPY src/common/helpers helpers COPY src/common/settings.json settings.json COPY src/common/utils utils +COPY src/common/templates templates COPY src/scheduler scheduler COPY src/ui ui COPY src/VERSION VERSION diff --git a/src/linux/Dockerfile-rhel b/src/linux/Dockerfile-rhel index 566cc6576..74e4888dd 100644 --- a/src/linux/Dockerfile-rhel +++ b/src/linux/Dockerfile-rhel @@ -63,6 +63,7 @@ COPY src/common/gen gen COPY src/common/helpers helpers COPY src/common/settings.json settings.json COPY src/common/utils utils +COPY src/common/templates templates COPY src/scheduler scheduler COPY src/ui ui COPY src/VERSION VERSION diff --git a/src/linux/Dockerfile-rhel9 b/src/linux/Dockerfile-rhel9 index 5a0f18de1..f060db97b 100644 --- a/src/linux/Dockerfile-rhel9 +++ b/src/linux/Dockerfile-rhel9 @@ -64,6 +64,7 @@ COPY src/common/gen gen COPY src/common/helpers helpers COPY src/common/settings.json settings.json COPY src/common/utils utils +COPY src/common/templates templates COPY src/scheduler scheduler COPY src/ui ui COPY src/VERSION VERSION diff --git a/src/linux/Dockerfile-ubuntu b/src/linux/Dockerfile-ubuntu index 9f1b21a4c..90b756970 100644 --- a/src/linux/Dockerfile-ubuntu +++ b/src/linux/Dockerfile-ubuntu @@ -53,6 +53,7 @@ COPY src/common/gen gen COPY src/common/helpers helpers COPY src/common/settings.json settings.json COPY src/common/utils utils +COPY src/common/templates templates COPY src/scheduler scheduler COPY src/ui ui COPY src/VERSION VERSION diff --git a/src/linux/Dockerfile-ubuntu-noble b/src/linux/Dockerfile-ubuntu-noble index 745b536d2..ef06f573e 100644 --- a/src/linux/Dockerfile-ubuntu-noble +++ b/src/linux/Dockerfile-ubuntu-noble @@ -53,6 +53,7 @@ COPY src/common/gen gen COPY src/common/helpers helpers COPY src/common/settings.json settings.json COPY src/common/utils utils +COPY src/common/templates templates COPY src/scheduler scheduler COPY src/ui ui COPY src/VERSION VERSION diff --git a/src/ui/Dockerfile b/src/ui/Dockerfile index 8b4c46966..c5f2ef050 100644 --- a/src/ui/Dockerfile +++ b/src/ui/Dockerfile @@ -30,6 +30,7 @@ COPY src/common/gen gen COPY src/common/settings.json settings.json COPY src/common/utils utils COPY src/common/helpers helpers +COPY src/common/templates templates COPY src/ui ui COPY src/VERSION VERSION diff --git a/src/ui/main.py b/src/ui/main.py index b04178933..292c0e78c 100755 --- a/src/ui/main.py +++ b/src/ui/main.py @@ -51,6 +51,7 @@ from src.ConfigFiles import ConfigFiles from src.Config import Config from src.ReverseProxied import ReverseProxied from src.User import AnonymousUser, User +from src.Templates import get_ui_templates from utils import check_settings, get_b64encoded_qr_image, path_to_dict, get_remain from common_utils import get_integration, get_version # type: ignore @@ -154,6 +155,7 @@ try: SEND_FILE_MAX_AGE_DEFAULT=86400, SCRIPT_NONCE=sha256(urandom(32)).hexdigest(), DB=db, + UI_TEMPLATES=get_ui_templates() ) except FileNotFoundError as e: app.logger.error(repr(e), e.filename) @@ -171,7 +173,6 @@ csrf.init_app(app) LOG_RX = re_compile(r"^(?P\d+/\d+/\d+\s\d+:\d+:\d+)\s\[(?P[a-z]+)\]\s\d+#\d+:\s(?P[^\n]+)$") REVERSE_PROXY_PATH = re_compile(r"^(?Phttps?://.{1,255}(:((6553[0-5])|(655[0-2]\d)|(65[0-4]\d{2})|(6[0-4]\d{3})|([1-5]\d{4})|([0-5]{0,5})|(\d{1,4})))?)$") - def get_ui_data(): ui_data = "Error" while ui_data == "Error": diff --git a/src/ui/src/Templates.py b/src/ui/src/Templates.py new file mode 100644 index 000000000..e14e5fd7f --- /dev/null +++ b/src/ui/src/Templates.py @@ -0,0 +1,36 @@ +from json import loads +from glob import glob +from os import sep +from os.path import join + +def get_ui_templates(): + ui_templates = [] + for template_file in glob(join(sep, "usr", "share", "bunkerweb", "templates", "*.json")): + try: + ui_template = {} + with open(template_file, "r") as f: + bw_template = loads(f.read()) + ui_template = { + "name": bw_template["name"], + "description": bw_template["description"] + } + ui_template["steps"] = [] + for bw_step in bw_template["steps"]: + ui_step = {} + ui_step["name"] = bw_step["name"] + ui_step["description"] = bw_step["description"] + ui_step["settings"] = [] + for setting, value in bw_step["settings"].items(): + ui_setting = { + "setting_id": setting, + "value": value + } + ui_step["settings"].append(ui_setting) + ui_template["steps"].append(ui_step) + ui_templates.append(ui_template) + except Exception as e: + # print(e) + # TODO: log + pass + # print(ui_templates, flush=True) + return ui_templates \ No newline at end of file From b3b4a826f9f46cf26d6c0a83865abb00f3f5bed1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Th=C3=A9ophile=20Diot?= Date: Thu, 2 May 2024 16:18:07 +0200 Subject: [PATCH 2/8] Fix deletion of existing package for el9 and ubuntu-noble in push-packagecloud.yml --- .github/workflows/push-packagecloud.yml | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/.github/workflows/push-packagecloud.yml b/.github/workflows/push-packagecloud.yml index b85014363..dd6a75475 100644 --- a/.github/workflows/push-packagecloud.yml +++ b/.github/workflows/push-packagecloud.yml @@ -60,16 +60,23 @@ jobs: path: /tmp/${{ inputs.LINUX }} # Remove existing packages - name: Remove existing package + if: inputs.LINUX != 'el9' && inputs.LINUX != 'ubuntu-noble' run: package_cloud yank bunkerity/${{ inputs.REPO }}/${{ inputs.LINUX }}/${{ inputs.VERSION }} bunkerweb${{ inputs.SEPARATOR }}${{ inputs.BW_VERSION }}${{ inputs.SEPARATOR }}${{ inputs.SUFFIX }}${{ inputs.PACKAGE_ARCH }}.${{ inputs.PACKAGE }} continue-on-error: true env: PACKAGECLOUD_TOKEN: ${{ secrets.PACKAGECLOUD_TOKEN }} - - name: Remove existing package + - name: Remove existing package el9 if: inputs.LINUX == 'el9' run: package_cloud yank bunkerity/${{ inputs.REPO }}/el/9 bunkerweb${{ inputs.SEPARATOR }}${{ inputs.BW_VERSION }}${{ inputs.SEPARATOR }}${{ inputs.SUFFIX }}${{ inputs.PACKAGE_ARCH }}.${{ inputs.PACKAGE }} continue-on-error: true env: PACKAGECLOUD_TOKEN: ${{ secrets.PACKAGECLOUD_TOKEN }} + - name: Remove existing package ubuntu-noble + if: inputs.LINUX == 'ubuntu-noble' + run: package_cloud yank bunkerity/${{ inputs.REPO }}/ubuntu/noble bunkerweb${{ inputs.SEPARATOR }}${{ inputs.BW_VERSION }}${{ inputs.SEPARATOR }}${{ inputs.SUFFIX }}${{ inputs.PACKAGE_ARCH }}.${{ inputs.PACKAGE }} + continue-on-error: true + env: + PACKAGECLOUD_TOKEN: ${{ secrets.PACKAGECLOUD_TOKEN }} # Update name # - name: Rename package # if: inputs.BW_VERSION == 'testing' From ed0e050bc5c0f4b4664ceabb96fc06c59da43d2b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Th=C3=A9ophile=20Diot?= Date: Fri, 3 May 2024 11:13:06 +0200 Subject: [PATCH 3/8] Update UI tests workflow to prepare tests before running --- .github/workflows/ui.yml | 25 +++++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ui.yml b/.github/workflows/ui.yml index dd2a33a6f..fd4be55ff 100644 --- a/.github/workflows/ui.yml +++ b/.github/workflows/ui.yml @@ -63,13 +63,34 @@ jobs: security-events: write # UI tests + prepare-tests-ui: + runs-on: ubuntu-latest + steps: + - name: Checkout repository + uses: actions/checkout@0ad4b8fadaa221de15dcec353f45205ec38ea70b # v4.1.4 + - id: set-matrix + run: | + tests=$(find ./tests/ui/ -name "*_page.py" -type f -printf "%f\n" | jq -c --raw-input --slurp 'split("\n")| .[0:-1]') + echo "tests=$tests" >> $GITHUB_OUTPUT + outputs: + tests: ${{ steps.set-matrix.outputs.tests }} tests-ui: - needs: [codeql, build-containers] + needs: [prepare-tests-ui, build-containers] + strategy: + fail-fast: false + matrix: + test: ${{ fromJson(needs.prepare-tests-ui.outputs.tests) }} uses: ./.github/workflows/tests-ui.yml with: + TEST: ${{ matrix.test }} RELEASE: ui tests-ui-linux: - needs: [codeql, build-packages] + needs: [prepare-tests-ui, build-packages] + strategy: + fail-fast: false + matrix: + test: ${{ fromJson(needs.prepare-tests-ui.outputs.tests) }} uses: ./.github/workflows/tests-ui-linux.yml with: + TEST: ${{ matrix.test }} RELEASE: ui From 2df047a18ce384d396fef83d83d3c2149e92bb4d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Th=C3=A9ophile=20Diot?= Date: Fri, 3 May 2024 11:23:03 +0200 Subject: [PATCH 4/8] chore: Add error logging for generating custom configs and external plugins --- src/scheduler/main.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/scheduler/main.py b/src/scheduler/main.py index ed4167e30..e5c30e189 100644 --- a/src/scheduler/main.py +++ b/src/scheduler/main.py @@ -138,6 +138,7 @@ def generate_custom_configs(configs: List[Dict[str, Any]], *, original_path: Uni tmp_path.parent.mkdir(parents=True, exist_ok=True) tmp_path.write_bytes(custom_config["data"]) except OSError as e: + logger.debug(format_exc()) if custom_config["method"] != "manual": logger.error( f"Error while generating custom configs \"{custom_config['name']}\"{' for service ' + custom_config['service_id'] if custom_config['service_id'] else ''}: {e}" @@ -189,6 +190,7 @@ def generate_external_plugins(plugins: List[Dict[str, Any]], *, original_path: U for job_file in chain(original_path.joinpath(plugin["id"], "jobs").glob("*"), original_path.joinpath(plugin["id"], "bwcli").glob("*")): job_file.chmod(job_file.stat().st_mode | S_IEXEC) except OSError as e: + logger.debug(format_exc()) if plugin["method"] != "manual": logger.error(f"Error while generating {'pro ' if pro else ''}external plugins \"{plugin['name']}\": {e}") except BaseException as e: From b1945e1be0f2043ea6c42dc8893251c03df65e41 Mon Sep 17 00:00:00 2001 From: Jordan Blasenhauer Date: Fri, 3 May 2024 11:43:42 +0200 Subject: [PATCH 5/8] precommit + update services mode and filters * remove simple mode for current version * fix input filtering and services modal --- src/common/templates/high.json | 252 ++++---- src/common/templates/low.json | 216 +++---- src/common/templates/medium.json | 218 +++---- src/ui/main.py | 3 +- src/ui/src/Templates.py | 13 +- src/ui/static/js/services.js | 193 +----- src/ui/static/js/utils/settings.js | 596 +++--------------- src/ui/templates/services_modal.html | 14 - .../services_modal_settings_simple.html | 156 ----- src/ui/templates/settings_simple.html | 105 --- tests/ui/services_page.py | 23 +- 11 files changed, 459 insertions(+), 1330 deletions(-) delete mode 100644 src/ui/templates/services_modal_settings_simple.html delete mode 100644 src/ui/templates/settings_simple.html diff --git a/src/common/templates/high.json b/src/common/templates/high.json index c91cf1652..5b299cbb4 100644 --- a/src/common/templates/high.json +++ b/src/common/templates/high.json @@ -1,129 +1,129 @@ { - "name": "medium", - "description": "Generic settings template with high security level required for your web service. False positives will certainly appear without any custom edit.", - "steps": [ + "name": "medium", + "description": "Generic settings template with high security level required for your web service. False positives will certainly appear without any custom edit.", + "steps": [ + { + "name": "Server configuration", + "description": "Configure your server name and reverse proxy settings. Don't forget to add the corresponding DNS A entry pointing to your BunkerWeb IP.", + "settings": { + "SERVER_NAME": "www.example.com", + "USE_REVERSE_PROXY": "yes", + "REVERSE_PROXY_HOST": "http://my-upstream-server:8080", + "REVERSE_PROXY_URL": "/", + "REVERSE_PROXY_INTERCEPT_ERRORS": "yes", + "REVERSE_PROXY_WS": "no", + "REVERSE_PROXY_CUSTOM_HOST": "", + "REVERSE_PROXY_HEADERS": "Accept-Encoding ''", + "SERVE_FILES": "no" + } + }, + { + "name": "HTTPS", + "description": "Enable/disable and configure HTTPS for your service.", + "settings": { + "AUTO_LETS_ENCRYPT": "yes", + "SSL_PROTOCOLS": "TLSv1.3" + } + }, + { + "name": "HTTP configuration", + "description": "Miscellaneous settings related to HTTP protocol.", + "settings": { + "DENY_HTTP_STATUS": "444", + "USE_GZIP": "yes", + "USE_BROTLI": "yes", + "ALLOWED_METHODS": "GET|POST|HEAD", + "MAX_SIZES": "10m", + "COOKIE_FLAGS": "* HttpOnly SameSite=Lax", + "CONTENT_SECURITY_POLICY": "object-src 'none'; form-action 'self'; frame-ancestors 'self';", + "X_FRAME_OPTIONS": "SAMEORIGIN", + "PERMISSIONS_POLICY": "accelerometer=(), ambient-light-sensor=(), autoplay=(), battery=(), camera=(), cross-origin-isolated=(), display-capture=(), document-domain=(), encrypted-media=(), execution-while-not-rendered=(), execution-while-out-of-viewport=(), fullscreen=(), geolocation=(), gyroscope=(), hid=(), idle-detection=(), magnetometer=(), microphone=(), midi=(), navigation-override=(), payment=(), picture-in-picture=(), publickey-credentials-get=(), screen-wake-lock=(), serial=(), usb=(), web-share=(), xr-spatial-tracking=()", + "FEATURE_POLICY": "accelerometer 'none'; ambient-light-sensor 'none'; autoplay 'none'; battery 'none'; camera 'none'; display-capture 'none'; document-domain 'none'; encrypted-media 'none'; execution-while-not-rendered 'none'; execution-while-out-of-viewport 'none'; fullscreen 'none'; geolocation 'none'; gyroscope 'none'; layout-animation 'none'; legacy-image-formats 'none'; magnetometer 'none'; microphone 'none'; midi 'none'; navigation-override 'none'; payment 'none'; picture-in-picture 'none'; publickey-credentials-get 'none'; speaker-selection 'none'; sync-xhr 'none'; unoptimized-images 'none'; unsized-media 'none'; usb 'none'; screen-wake-lock 'none'; web-share 'none'; xr-spatial-tracking 'none';" + } + }, + { + "name": "Bad behavior", + "description": "Configure automatic bans when detecting bad behaviors on your web service.", + "settings": { + "USE_BAD_BEHAVIOR": "yes", + "BAD_BEHAVIOR_STATUS_CODES": "400 401 403 404 405 429 444", + "BAD_BEHAVIOR_BAN_TIME": "86400", + "BAD_BEHAVIOR_THRESHOLD": "5", + "BAD_BEHAVIOR_COUNT_TIME": "60" + } + }, + { + "name": "Limit", + "description": "Configure requests and connections limits on your web service.", + "settings": { + "USE_LIMIT_CONN": "yes", + "LIMIT_CONN_MAX_HTTP1": "10", + "LIMIT_CONN_MAX_HTTP2": "100", + "USE_LIMIT_REQ": "yes", + "LIMIT_REQ_URL": "/", + "LIMIT_REQ_RATE": "2r/s" + } + }, + { + "name": "DNSBL", + "description": "Enable/disable DNSBL protection. Might generate false positives especially if you have a worldwide audience.", + "settings": { + "USE_DNSBL": "yes" + } + }, + { + "name": "Country", + "description": "Configure allowed countries to reach out your web service. Recommended if you protect a restricted area such as extranet or administration panel.", + "settings": { + "WHITELIST_COUNTRY": "" + } + }, + { + "name": "Antibot", + "description": "Enable/disable and configure antibot protection globally on your web service.", + "settings": { + "USE_ANTIBOT": "captcha", + "ANTIBOT_TIME_RESOLVE": "120", + "ANTIBOT_TIME_VALID": "86400", + "ANTIBOT_RECAPTCHA_SCORE": "0.7", + "ANTIBOT_RECAPTCHA_SITEKEY": "", + "ANTIBOT_RECAPTCHA_SECRET": "", + "ANTIBOT_HCAPTCHA_SITEKEY": "", + "ANTIBOT_HCAPTCHA_SECRET": "", + "ANTIBOT_TURNSTILE_SITEKEY": "", + "ANTIBOT_TURNSTILE_SECRET": "" + } + }, + { + "name": "CORS", + "description": "Configure Cross-Origin Resource Sharing (CORS) to allow/deny external requests to your web service.", + "settings": { + "USE_CORS": "yes", + "CORS_ALLOW_ORIGIN": "" + } + }, + { + "name": "Reverse scan", + "description": "Configure reverse scan of client to detect open proxy or datacenter connections.", + "settings": { + "USE_REVERSE_SCAN": "yes", + "REVERSE_SCAN_PORTS": "22 80 443 3128 8000 8080" + } + }, + { + "name": "ModSecurity", + "description": "Enable/disable and configure ModSecurity on your web service.", + "settings": { + "USE_MODSECURITY": "yes", + "MODSECURITY_CRS_VERSION": "4" + }, + "configs": [ { - "name": "Server configuration", - "description": "Configure your server name and reverse proxy settings. Don't forget to add the corresponding DNS A entry pointing to your BunkerWeb IP.", - "settings": { - "SERVER_NAME": "www.example.com", - "USE_REVERSE_PROXY": "yes", - "REVERSE_PROXY_HOST": "http://my-upstream-server:8080", - "REVERSE_PROXY_URL": "/", - "REVERSE_PROXY_INTERCEPT_ERRORS": "yes", - "REVERSE_PROXY_WS": "no", - "REVERSE_PROXY_CUSTOM_HOST": "", - "REVERSE_PROXY_HEADERS": "Accept-Encoding ''", - "SERVE_FILES": "no" - } - }, - { - "name": "HTTPS", - "description": "Enable/disable and configure HTTPS for your service.", - "settings": { - "AUTO_LETS_ENCRYPT": "yes", - "SSL_PROTOCOLS": "TLSv1.3" - } - }, - { - "name": "HTTP configuration", - "description": "Miscellaneous settings related to HTTP protocol.", - "settings": { - "DENY_HTTP_STATUS": "444", - "USE_GZIP": "yes", - "USE_BROTLI": "yes", - "ALLOWED_METHODS": "GET|POST|HEAD", - "MAX_SIZES": "10m", - "COOKIE_FLAGS": "* HttpOnly SameSite=Lax", - "CONTENT_SECURITY_POLICY": "object-src 'none'; form-action 'self'; frame-ancestors 'self';", - "X_FRAME_OPTIONS": "SAMEORIGIN", - "PERMISSIONS_POLICY": "accelerometer=(), ambient-light-sensor=(), autoplay=(), battery=(), camera=(), cross-origin-isolated=(), display-capture=(), document-domain=(), encrypted-media=(), execution-while-not-rendered=(), execution-while-out-of-viewport=(), fullscreen=(), geolocation=(), gyroscope=(), hid=(), idle-detection=(), magnetometer=(), microphone=(), midi=(), navigation-override=(), payment=(), picture-in-picture=(), publickey-credentials-get=(), screen-wake-lock=(), serial=(), usb=(), web-share=(), xr-spatial-tracking=()", - "FEATURE_POLICY": "accelerometer 'none'; ambient-light-sensor 'none'; autoplay 'none'; battery 'none'; camera 'none'; display-capture 'none'; document-domain 'none'; encrypted-media 'none'; execution-while-not-rendered 'none'; execution-while-out-of-viewport 'none'; fullscreen 'none'; geolocation 'none'; gyroscope 'none'; layout-animation 'none'; legacy-image-formats 'none'; magnetometer 'none'; microphone 'none'; midi 'none'; navigation-override 'none'; payment 'none'; picture-in-picture 'none'; publickey-credentials-get 'none'; speaker-selection 'none'; sync-xhr 'none'; unoptimized-images 'none'; unsized-media 'none'; usb 'none'; screen-wake-lock 'none'; web-share 'none'; xr-spatial-tracking 'none';" - } - }, - { - "name": "Bad behavior", - "description": "Configure automatic bans when detecting bad behaviors on your web service.", - "settings": { - "USE_BAD_BEHAVIOR": "yes", - "BAD_BEHAVIOR_STATUS_CODES": "400 401 403 404 405 429 444", - "BAD_BEHAVIOR_BAN_TIME": "86400", - "BAD_BEHAVIOR_THRESHOLD": "5", - "BAD_BEHAVIOR_COUNT_TIME": "60" - } - }, - { - "name": "Limit", - "description": "Configure requests and connections limits on your web service.", - "settings": { - "USE_LIMIT_CONN": "yes", - "LIMIT_CONN_MAX_HTTP1": "10", - "LIMIT_CONN_MAX_HTTP2": "100", - "USE_LIMIT_REQ": "yes", - "LIMIT_REQ_URL": "/", - "LIMIT_REQ_RATE": "2r/s" - } - }, - { - "name": "DNSBL", - "description": "Enable/disable DNSBL protection. Might generate false positives especially if you have a worldwide audience.", - "settings": { - "USE_DNSBL": "yes" - } - }, - { - "name": "Country", - "description": "Configure allowed countries to reach out your web service. Recommended if you protect a restricted area such as extranet or administration panel.", - "settings": { - "WHITELIST_COUNTRY": "" - } - }, - { - "name": "Antibot", - "description": "Enable/disable and configure antibot protection globally on your web service.", - "settings": { - "USE_ANTIBOT": "captcha", - "ANTIBOT_TIME_RESOLVE": "120", - "ANTIBOT_TIME_VALID": "86400", - "ANTIBOT_RECAPTCHA_SCORE": "0.7", - "ANTIBOT_RECAPTCHA_SITEKEY": "", - "ANTIBOT_RECAPTCHA_SECRET": "", - "ANTIBOT_HCAPTCHA_SITEKEY": "", - "ANTIBOT_HCAPTCHA_SECRET": "", - "ANTIBOT_TURNSTILE_SITEKEY": "", - "ANTIBOT_TURNSTILE_SECRET": "" - } - }, - { - "name": "CORS", - "description": "Configure Cross-Origin Resource Sharing (CORS) to allow/deny external requests to your web service.", - "settings": { - "USE_CORS": "yes", - "CORS_ALLOW_ORIGIN": "" - } - }, - { - "name": "Reverse scan", - "description": "Configure reverse scan of client to detect open proxy or datacenter connections.", - "settings": { - "USE_REVERSE_SCAN": "yes", - "REVERSE_SCAN_PORTS": "22 80 443 3128 8000 8080" - } - }, - { - "name": "ModSecurity", - "description": "Enable/disable and configure ModSecurity on your web service.", - "settings": { - "USE_MODSECURITY": "yes", - "MODSECURITY_CRS_VERSION": "4" - }, - "configs": [ - { - "name": "template-high", - "type": "modsec-crs", - "data": "SecAction \"id:900000,phase:1,pass,t:none,nolog,tag:'OWASP_CRS',ver:'OWASP_CRS/4.2.0',setvar:tx.blocking_paranoia_level=4\"" - } - ] + "name": "template-high", + "type": "modsec-crs", + "data": "SecAction \"id:900000,phase:1,pass,t:none,nolog,tag:'OWASP_CRS',ver:'OWASP_CRS/4.2.0',setvar:tx.blocking_paranoia_level=4\"" } - ] -} \ No newline at end of file + ] + } + ] +} diff --git a/src/common/templates/low.json b/src/common/templates/low.json index 313919490..e077f89ac 100644 --- a/src/common/templates/low.json +++ b/src/common/templates/low.json @@ -1,111 +1,111 @@ { - "name": "low", - "description": "Generic settings template with low security level to avoid false positives and get started with BunkerWeb.", - "steps": [ + "name": "low", + "description": "Generic settings template with low security level to avoid false positives and get started with BunkerWeb.", + "steps": [ + { + "name": "Server configuration", + "description": "Configure your server name and reverse proxy settings. Don't forget to add the corresponding DNS A entry pointing to your BunkerWeb IP.", + "settings": { + "SERVER_NAME": "www.example.com", + "USE_REVERSE_PROXY": "yes", + "REVERSE_PROXY_HOST": "http://my-upstream-server:8080", + "REVERSE_PROXY_URL": "/", + "REVERSE_PROXY_INTERCEPT_ERRORS": "no", + "REVERSE_PROXY_WS": "yes", + "REVERSE_PROXY_CUSTOM_HOST": "", + "REVERSE_PROXY_HEADERS": "Accept-Encoding ''" + } + }, + { + "name": "HTTPS", + "description": "Enable/disable HTTPS for your service.", + "settings": { + "AUTO_LETS_ENCRYPT": "yes" + } + }, + { + "name": "HTTP configuration", + "description": "Miscellaneous settings related to HTTP protocol.", + "settings": { + "USE_GZIP": "yes", + "USE_BROTLI": "yes", + "ALLOWED_METHODS": "GET|POST|HEAD|PUT|PATCH|OPTIONS|DELETE", + "MAX_SIZES": "50m", + "COOKIE_FLAGS": "* SameSite=Lax", + "CONTENT_SECURITY_POLICY": "", + "X_FRAME_OPTIONS": "", + "PERMISSIONS_POLICY": "", + "FEATURE_POLICY": "", + "KEEP_UPSTREAM_HEADERS": "*" + } + }, + { + "name": "Bad behavior", + "description": "Configure automatic bans when detecting bad behaviors on your web service.", + "settings": { + "USE_BAD_BEHAVIOR": "yes", + "BAD_BEHAVIOR_STATUS_CODES": "400 401 403 405 429 444", + "BAD_BEHAVIOR_BAN_TIME": "3600", + "BAD_BEHAVIOR_THRESHOLD": "20", + "BAD_BEHAVIOR_COUNT_TIME": "60" + } + }, + { + "name": "Limit", + "description": "Configure requests and connections limits on your web service.", + "settings": { + "USE_LIMIT_CONN": "yes", + "LIMIT_CONN_MAX_HTTP1": 20, + "LIMIT_CONN_MAX_HTTP2": 200, + "USE_LIMIT_REQ": "yes", + "LIMIT_REQ_URL": "/", + "LIMIT_REQ_RATE": "5r/s" + } + }, + { + "name": "DNSBL", + "description": "Enable/disable DNSBL protection. Might generate false positives especially if you have a worldwide audience.", + "settings": { + "USE_DNSBL": "no" + } + }, + { + "name": "Country", + "description": "Configure allowed countries to reach out your web service. Recommended if you protect a restricted area such as extranet or administration panel.", + "settings": { + "WHITELIST_COUNTRY": "" + } + }, + { + "name": "Antibot", + "description": "Enable/disable and configure antibot protection globally on your web service.", + "settings": { + "USE_ANTIBOT": "no", + "ANTIBOT_TIME_RESOLVE": "120", + "ANTIBOT_TIME_VALID": "86400", + "ANTIBOT_RECAPTCHA_SCORE": "0.7", + "ANTIBOT_RECAPTCHA_SITEKEY": "", + "ANTIBOT_RECAPTCHA_SECRET": "", + "ANTIBOT_HCAPTCHA_SITEKEY": "", + "ANTIBOT_HCAPTCHA_SECRET": "", + "ANTIBOT_TURNSTILE_SITEKEY": "", + "ANTIBOT_TURNSTILE_SECRET": "" + } + }, + { + "name": "ModSecurity", + "description": "Enable/disable and configure ModSecurity on your web service.", + "settings": { + "USE_MODSECURITY": "yes" + }, + "configs": [ { - "name": "Server configuration", - "description": "Configure your server name and reverse proxy settings. Don't forget to add the corresponding DNS A entry pointing to your BunkerWeb IP.", - "settings": { - "SERVER_NAME": "www.example.com", - "USE_REVERSE_PROXY": "yes", - "REVERSE_PROXY_HOST": "http://my-upstream-server:8080", - "REVERSE_PROXY_URL": "/", - "REVERSE_PROXY_INTERCEPT_ERRORS": "no", - "REVERSE_PROXY_WS": "yes", - "REVERSE_PROXY_CUSTOM_HOST": "", - "REVERSE_PROXY_HEADERS": "Accept-Encoding ''" - } - }, - { - "name": "HTTPS", - "description": "Enable/disable HTTPS for your service.", - "settings": { - "AUTO_LETS_ENCRYPT": "yes" - } - }, - { - "name": "HTTP configuration", - "description": "Miscellaneous settings related to HTTP protocol.", - "settings": { - "USE_GZIP": "yes", - "USE_BROTLI": "yes", - "ALLOWED_METHODS": "GET|POST|HEAD|PUT|PATCH|OPTIONS|DELETE", - "MAX_SIZES": "50m", - "COOKIE_FLAGS": "* SameSite=Lax", - "CONTENT_SECURITY_POLICY": "", - "X_FRAME_OPTIONS": "", - "PERMISSIONS_POLICY": "", - "FEATURE_POLICY": "", - "KEEP_UPSTREAM_HEADERS": "*" - } - }, - { - "name": "Bad behavior", - "description": "Configure automatic bans when detecting bad behaviors on your web service.", - "settings": { - "USE_BAD_BEHAVIOR": "yes", - "BAD_BEHAVIOR_STATUS_CODES": "400 401 403 405 429 444", - "BAD_BEHAVIOR_BAN_TIME": "3600", - "BAD_BEHAVIOR_THRESHOLD": "20", - "BAD_BEHAVIOR_COUNT_TIME": "60" - } - }, - { - "name": "Limit", - "description": "Configure requests and connections limits on your web service.", - "settings": { - "USE_LIMIT_CONN": "yes", - "LIMIT_CONN_MAX_HTTP1": 20, - "LIMIT_CONN_MAX_HTTP2": 200, - "USE_LIMIT_REQ": "yes", - "LIMIT_REQ_URL": "/", - "LIMIT_REQ_RATE": "5r/s" - } - }, - { - "name": "DNSBL", - "description": "Enable/disable DNSBL protection. Might generate false positives especially if you have a worldwide audience.", - "settings": { - "USE_DNSBL": "no" - } - }, - { - "name": "Country", - "description": "Configure allowed countries to reach out your web service. Recommended if you protect a restricted area such as extranet or administration panel.", - "settings": { - "WHITELIST_COUNTRY": "" - } - }, - { - "name": "Antibot", - "description": "Enable/disable and configure antibot protection globally on your web service.", - "settings": { - "USE_ANTIBOT": "no", - "ANTIBOT_TIME_RESOLVE": "120", - "ANTIBOT_TIME_VALID": "86400", - "ANTIBOT_RECAPTCHA_SCORE": "0.7", - "ANTIBOT_RECAPTCHA_SITEKEY": "", - "ANTIBOT_RECAPTCHA_SECRET": "", - "ANTIBOT_HCAPTCHA_SITEKEY": "", - "ANTIBOT_HCAPTCHA_SECRET": "", - "ANTIBOT_TURNSTILE_SITEKEY": "", - "ANTIBOT_TURNSTILE_SECRET": "" - } - }, - { - "name": "ModSecurity", - "description": "Enable/disable and configure ModSecurity on your web service.", - "settings": { - "USE_MODSECURITY": "yes" - }, - "configs": [ - { - "name": "template-low", - "type": "modsec-crs", - "description": "Override ModSecurity CRS settings.", - "data": "SecAction \"id:900110,phase:1,nolog,pass,t:none,setvar:tx.inbound_anomaly_score_threshold=7,setvar:tx.outbound_anomaly_score_threshold=4\"" - } - ] + "name": "template-low", + "type": "modsec-crs", + "description": "Override ModSecurity CRS settings.", + "data": "SecAction \"id:900110,phase:1,nolog,pass,t:none,setvar:tx.inbound_anomaly_score_threshold=7,setvar:tx.outbound_anomaly_score_threshold=4\"" } - ] -} \ No newline at end of file + ] + } + ] +} diff --git a/src/common/templates/medium.json b/src/common/templates/medium.json index 40d7cf552..b9bb90f97 100644 --- a/src/common/templates/medium.json +++ b/src/common/templates/medium.json @@ -1,110 +1,110 @@ { - "name": "medium", - "description": "Generic settings template with medium security level aimed for average web service in production. False positives may appear depending on your environment.", - "steps": [ - { - "name": "Server configuration", - "description": "Configure your server name and reverse proxy settings. Don't forget to add the corresponding DNS A entry pointing to your BunkerWeb IP.", - "settings": { - "SERVER_NAME": "www.example.com", - "USE_REVERSE_PROXY": "yes", - "REVERSE_PROXY_HOST": "http://my-upstream-server:8080", - "REVERSE_PROXY_URL": "/", - "REVERSE_PROXY_INTERCEPT_ERRORS": "yes", - "REVERSE_PROXY_WS": "no", - "REVERSE_PROXY_CUSTOM_HOST": "", - "REVERSE_PROXY_HEADERS": "Accept-Encoding ''" - } - }, - { - "name": "HTTPS", - "description": "Enable/disable HTTPS for your service.", - "settings": { - "AUTO_LETS_ENCRYPT": "yes" - } - }, - { - "name": "HTTP configuration", - "description": "Miscellaneous settings related to HTTP protocol.", - "settings": { - "USE_GZIP": "yes", - "USE_BROTLI": "yes", - "ALLOWED_METHODS": "GET|POST|HEAD", - "MAX_SIZES": "10m", - "COOKIE_FLAGS": "* HttpOnly SameSite=Lax", - "CONTENT_SECURITY_POLICY": "object-src 'none'; form-action 'self'; frame-ancestors 'self';", - "X_FRAME_OPTIONS": "SAMEORIGIN", - "PERMISSIONS_POLICY": "accelerometer=(), ambient-light-sensor=(), autoplay=(), battery=(), camera=(), cross-origin-isolated=(), display-capture=(), document-domain=(), encrypted-media=(), execution-while-not-rendered=(), execution-while-out-of-viewport=(), fullscreen=(), geolocation=(), gyroscope=(), hid=(), idle-detection=(), magnetometer=(), microphone=(), midi=(), navigation-override=(), payment=(), picture-in-picture=(), publickey-credentials-get=(), screen-wake-lock=(), serial=(), usb=(), web-share=(), xr-spatial-tracking=()", - "FEATURE_POLICY": "accelerometer 'none'; ambient-light-sensor 'none'; autoplay 'none'; battery 'none'; camera 'none'; display-capture 'none'; document-domain 'none'; encrypted-media 'none'; execution-while-not-rendered 'none'; execution-while-out-of-viewport 'none'; fullscreen 'none'; geolocation 'none'; gyroscope 'none'; layout-animation 'none'; legacy-image-formats 'none'; magnetometer 'none'; microphone 'none'; midi 'none'; navigation-override 'none'; payment 'none'; picture-in-picture 'none'; publickey-credentials-get 'none'; speaker-selection 'none'; sync-xhr 'none'; unoptimized-images 'none'; unsized-media 'none'; usb 'none'; screen-wake-lock 'none'; web-share 'none'; xr-spatial-tracking 'none';" - } - }, - { - "name": "Bad behavior", - "description": "Configure automatic bans when detecting bad behaviors on your web service.", - "settings": { - "USE_BAD_BEHAVIOR": "yes", - "BAD_BEHAVIOR_STATUS_CODES": "400 401 403 404 405 429 444", - "BAD_BEHAVIOR_BAN_TIME": "86400", - "BAD_BEHAVIOR_THRESHOLD": "10", - "BAD_BEHAVIOR_COUNT_TIME": "60" - } - }, - { - "name": "Limit", - "description": "Configure requests and connections limits on your web service.", - "settings": { - "USE_LIMIT_CONN": "yes", - "LIMIT_CONN_MAX_HTTP1": "10", - "LIMIT_CONN_MAX_HTTP2": "100", - "USE_LIMIT_REQ": "yes", - "LIMIT_REQ_URL": "/", - "LIMIT_REQ_RATE": "2r/s" - } - }, - { - "name": "DNSBL", - "description": "Enable/disable DNSBL protection. Might generate false positives especially if you have a worldwide audience.", - "settings": { - "USE_DNSBL": "yes" - } - }, - { - "name": "Country", - "description": "Configure allowed countries to reach out your web service. Recommended if you protect a restricted area such as extranet or administration panel.", - "settings": { - "WHITELIST_COUNTRY": "" - } - }, - { - "name": "Antibot", - "description": "Enable/disable and configure antibot protection globally on your web service.", - "settings": { - "USE_ANTIBOT": "javascript", - "ANTIBOT_TIME_RESOLVE": "120", - "ANTIBOT_TIME_VALID": "86400", - "ANTIBOT_RECAPTCHA_SCORE": "0.7", - "ANTIBOT_RECAPTCHA_SITEKEY": "", - "ANTIBOT_RECAPTCHA_SECRET": "", - "ANTIBOT_HCAPTCHA_SITEKEY": "", - "ANTIBOT_HCAPTCHA_SECRET": "", - "ANTIBOT_TURNSTILE_SITEKEY": "", - "ANTIBOT_TURNSTILE_SECRET": "" - } - }, - { - "name": "CORS", - "description": "Configure Cross-Origin Resource Sharing (CORS) to allow/deny external requests to your web service.", - "settings": { - "USE_CORS": "no", - "CORS_ALLOW_ORIGIN": "*" - } - }, - { - "name": "ModSecurity", - "description": "Enable/disable and configure ModSecurity on your web service.", - "settings": { - "USE_MODSECURITY": "yes" - } - } - ] -} \ No newline at end of file + "name": "medium", + "description": "Generic settings template with medium security level aimed for average web service in production. False positives may appear depending on your environment.", + "steps": [ + { + "name": "Server configuration", + "description": "Configure your server name and reverse proxy settings. Don't forget to add the corresponding DNS A entry pointing to your BunkerWeb IP.", + "settings": { + "SERVER_NAME": "www.example.com", + "USE_REVERSE_PROXY": "yes", + "REVERSE_PROXY_HOST": "http://my-upstream-server:8080", + "REVERSE_PROXY_URL": "/", + "REVERSE_PROXY_INTERCEPT_ERRORS": "yes", + "REVERSE_PROXY_WS": "no", + "REVERSE_PROXY_CUSTOM_HOST": "", + "REVERSE_PROXY_HEADERS": "Accept-Encoding ''" + } + }, + { + "name": "HTTPS", + "description": "Enable/disable HTTPS for your service.", + "settings": { + "AUTO_LETS_ENCRYPT": "yes" + } + }, + { + "name": "HTTP configuration", + "description": "Miscellaneous settings related to HTTP protocol.", + "settings": { + "USE_GZIP": "yes", + "USE_BROTLI": "yes", + "ALLOWED_METHODS": "GET|POST|HEAD", + "MAX_SIZES": "10m", + "COOKIE_FLAGS": "* HttpOnly SameSite=Lax", + "CONTENT_SECURITY_POLICY": "object-src 'none'; form-action 'self'; frame-ancestors 'self';", + "X_FRAME_OPTIONS": "SAMEORIGIN", + "PERMISSIONS_POLICY": "accelerometer=(), ambient-light-sensor=(), autoplay=(), battery=(), camera=(), cross-origin-isolated=(), display-capture=(), document-domain=(), encrypted-media=(), execution-while-not-rendered=(), execution-while-out-of-viewport=(), fullscreen=(), geolocation=(), gyroscope=(), hid=(), idle-detection=(), magnetometer=(), microphone=(), midi=(), navigation-override=(), payment=(), picture-in-picture=(), publickey-credentials-get=(), screen-wake-lock=(), serial=(), usb=(), web-share=(), xr-spatial-tracking=()", + "FEATURE_POLICY": "accelerometer 'none'; ambient-light-sensor 'none'; autoplay 'none'; battery 'none'; camera 'none'; display-capture 'none'; document-domain 'none'; encrypted-media 'none'; execution-while-not-rendered 'none'; execution-while-out-of-viewport 'none'; fullscreen 'none'; geolocation 'none'; gyroscope 'none'; layout-animation 'none'; legacy-image-formats 'none'; magnetometer 'none'; microphone 'none'; midi 'none'; navigation-override 'none'; payment 'none'; picture-in-picture 'none'; publickey-credentials-get 'none'; speaker-selection 'none'; sync-xhr 'none'; unoptimized-images 'none'; unsized-media 'none'; usb 'none'; screen-wake-lock 'none'; web-share 'none'; xr-spatial-tracking 'none';" + } + }, + { + "name": "Bad behavior", + "description": "Configure automatic bans when detecting bad behaviors on your web service.", + "settings": { + "USE_BAD_BEHAVIOR": "yes", + "BAD_BEHAVIOR_STATUS_CODES": "400 401 403 404 405 429 444", + "BAD_BEHAVIOR_BAN_TIME": "86400", + "BAD_BEHAVIOR_THRESHOLD": "10", + "BAD_BEHAVIOR_COUNT_TIME": "60" + } + }, + { + "name": "Limit", + "description": "Configure requests and connections limits on your web service.", + "settings": { + "USE_LIMIT_CONN": "yes", + "LIMIT_CONN_MAX_HTTP1": "10", + "LIMIT_CONN_MAX_HTTP2": "100", + "USE_LIMIT_REQ": "yes", + "LIMIT_REQ_URL": "/", + "LIMIT_REQ_RATE": "2r/s" + } + }, + { + "name": "DNSBL", + "description": "Enable/disable DNSBL protection. Might generate false positives especially if you have a worldwide audience.", + "settings": { + "USE_DNSBL": "yes" + } + }, + { + "name": "Country", + "description": "Configure allowed countries to reach out your web service. Recommended if you protect a restricted area such as extranet or administration panel.", + "settings": { + "WHITELIST_COUNTRY": "" + } + }, + { + "name": "Antibot", + "description": "Enable/disable and configure antibot protection globally on your web service.", + "settings": { + "USE_ANTIBOT": "javascript", + "ANTIBOT_TIME_RESOLVE": "120", + "ANTIBOT_TIME_VALID": "86400", + "ANTIBOT_RECAPTCHA_SCORE": "0.7", + "ANTIBOT_RECAPTCHA_SITEKEY": "", + "ANTIBOT_RECAPTCHA_SECRET": "", + "ANTIBOT_HCAPTCHA_SITEKEY": "", + "ANTIBOT_HCAPTCHA_SECRET": "", + "ANTIBOT_TURNSTILE_SITEKEY": "", + "ANTIBOT_TURNSTILE_SECRET": "" + } + }, + { + "name": "CORS", + "description": "Configure Cross-Origin Resource Sharing (CORS) to allow/deny external requests to your web service.", + "settings": { + "USE_CORS": "no", + "CORS_ALLOW_ORIGIN": "*" + } + }, + { + "name": "ModSecurity", + "description": "Enable/disable and configure ModSecurity on your web service.", + "settings": { + "USE_MODSECURITY": "yes" + } + } + ] +} diff --git a/src/ui/main.py b/src/ui/main.py index 292c0e78c..ca59209e7 100755 --- a/src/ui/main.py +++ b/src/ui/main.py @@ -155,7 +155,7 @@ try: SEND_FILE_MAX_AGE_DEFAULT=86400, SCRIPT_NONCE=sha256(urandom(32)).hexdigest(), DB=db, - UI_TEMPLATES=get_ui_templates() + UI_TEMPLATES=get_ui_templates(), ) except FileNotFoundError as e: app.logger.error(repr(e), e.filename) @@ -173,6 +173,7 @@ csrf.init_app(app) LOG_RX = re_compile(r"^(?P\d+/\d+/\d+\s\d+:\d+:\d+)\s\[(?P[a-z]+)\]\s\d+#\d+:\s(?P[^\n]+)$") REVERSE_PROXY_PATH = re_compile(r"^(?Phttps?://.{1,255}(:((6553[0-5])|(655[0-2]\d)|(65[0-4]\d{2})|(6[0-4]\d{3})|([1-5]\d{4})|([0-5]{0,5})|(\d{1,4})))?)$") + def get_ui_data(): ui_data = "Error" while ui_data == "Error": diff --git a/src/ui/src/Templates.py b/src/ui/src/Templates.py index e14e5fd7f..85a95c099 100644 --- a/src/ui/src/Templates.py +++ b/src/ui/src/Templates.py @@ -3,6 +3,7 @@ from glob import glob from os import sep from os.path import join + def get_ui_templates(): ui_templates = [] for template_file in glob(join(sep, "usr", "share", "bunkerweb", "templates", "*.json")): @@ -10,10 +11,7 @@ def get_ui_templates(): ui_template = {} with open(template_file, "r") as f: bw_template = loads(f.read()) - ui_template = { - "name": bw_template["name"], - "description": bw_template["description"] - } + ui_template = {"name": bw_template["name"], "description": bw_template["description"]} ui_template["steps"] = [] for bw_step in bw_template["steps"]: ui_step = {} @@ -21,10 +19,7 @@ def get_ui_templates(): ui_step["description"] = bw_step["description"] ui_step["settings"] = [] for setting, value in bw_step["settings"].items(): - ui_setting = { - "setting_id": setting, - "value": value - } + ui_setting = {"setting_id": setting, "value": value} ui_step["settings"].append(ui_setting) ui_template["steps"].append(ui_step) ui_templates.append(ui_template) @@ -33,4 +28,4 @@ def get_ui_templates(): # TODO: log pass # print(ui_templates, flush=True) - return ui_templates \ No newline at end of file + return ui_templates diff --git a/src/ui/static/js/services.js b/src/ui/static/js/services.js index 4d5f3f8ef..b5c1dfabe 100644 --- a/src/ui/static/js/services.js +++ b/src/ui/static/js/services.js @@ -6,8 +6,6 @@ import { CheckNoMatchFilter, showInvalid, SettingsAdvanced, - SettingsSimple, - SettingsSwitch, } from "./utils/settings.js"; class SettingsService { @@ -24,12 +22,6 @@ class SettingsService { this.settingsMultiple, "services", ); - this.simpleSettings = new SettingsSimple( - document.querySelector("[data-simple][data-services-modal-form]"), - this.settingsMultiple, - "services", - ); - this.initSettingsService(); } @@ -117,133 +109,6 @@ class SettingsService { forceEnabled, emptyServerName, ); - - // Click on right security level dropdown btn - // This will fire security level event listener - this.simpleSettings.updateData( - action, - oldServName, - operation, - settings, - forceEnabled, - setMethodUI, - emptyServerName, - ); - const modeBtn = document.querySelector( - "button[data-toggle-settings-mode-btn]", - ); - const mode = modeBtn.getAttribute("data-toggle-settings-mode-btn"); - if (action === "new") { - mode !== "simple" ? modeBtn.click() : null; - document - .querySelector( - `button[data-setting-select-dropdown-btn="security-level"][value="standard"]`, - ) - .click(); - document - .querySelector( - `button[data-setting-select-dropdown-btn="security-level"][value="custom"]`, - ) - .setAttribute("disabled", "true"); - } else { - mode !== "advanced" ? modeBtn.click() : null; - document - .querySelector( - `button[data-setting-select-dropdown-btn="security-level"][value="custom"]`, - ) - .removeAttribute("disabled"); - document - .querySelector( - `button[data-setting-select-dropdown-btn="security-level"][value="custom"]`, - ) - .click(); - } - } - } catch (err) {} - // security level - try { - if ( - e.target - .closest("button") - .getAttribute("data-setting-select-dropdown-btn") == - "security-level" - ) { - // get current common values - const action = this.simpleSettings.currAction; - const oldServName = this.simpleSettings.oldServName; - const operation = this.simpleSettings.operation; - const forceEnabled = this.simpleSettings.forceEnabled; - const setMethodUI = this.simpleSettings.setMethodUI; - const emptyServerName = this.simpleSettings.emptyServerName; - // get custom security level settings of service if custom choose - const value = e.target.closest("button").getAttribute("value"); - - // mainSettings is the settings of the service - let mainSettings; - - // Try to get settings in a valid format - try { - mainSettings = JSON.parse( - document - .querySelector(`[data-old-name][data-value="${oldServName}"]`) - .closest("[data-services-service]") - .getAttribute("data-settings"), - ); - } catch (err) {} - - try { - if (!settings) { - mainSettings = JSON.parse( - document - .querySelector(`[data-old-name][data-value="${oldServName}"]`) - .closest("[data-services-service]") - .getAttribute("data-settings") - .replaceAll(`'`, `"`), - ); - } - } catch (err) {} - - // In case we want a security level, we need to get the settings of the security level - // In order to filter and merge both to avoid overriding disabled settings (method != ui|default) - let compareSettings = null; - if (value !== "custom") { - // Try to get settings in a valid format - try { - compareSettings = JSON.parse( - document - .querySelector(`input#security-level-${value}`) - .getAttribute("data-settings"), - ); - } catch (err) {} - - try { - if (!compareSettings) { - compareSettings = JSON.parse( - document - .querySelector(`input#security-level-${value}`) - .getAttribute("data-settings") - .replaceAll(`'`, `"`), - ); - } - } catch (err) {} - } - // No main settings if new - if (action === "new") { - mainSettings = JSON.parse(JSON.stringify(compareSettings)); - compareSettings = null; - } - - this.simpleSettings.setSimple( - action, - oldServName, - operation, - mainSettings, - compareSettings, - setMethodUI, - forceEnabled, - emptyServerName, - true, - ); } } catch (err) {} }); @@ -260,9 +125,6 @@ class ServiceModal { "[data-services-tabs-select-header]", ]); this.modalCard = this.modal.querySelector("[data-services-modal-card]"); - this.switchModeBtn = this.modal.querySelector( - "[data-toggle-settings-mode-btn]", - ); //modal forms this.formNewEdit = this.modal.querySelector( "[data-advanced][data-services-modal-form]", @@ -270,9 +132,7 @@ class ServiceModal { this.formDelete = this.modal.querySelector( "[data-services-modal-form-delete]", ); - this.simpleForm = this.modal.querySelector( - "[data-simple][data-services-modal-form]", - ); + //container this.container = document.querySelector("main"); this.currAction = ""; @@ -370,10 +230,9 @@ class ServiceModal { this.setCardViewportHeight(action === "delete" ? false : true); this.setHeaderActionsVisible(action === "delete" ? false : true); this.SetSelectTabsVisible(action === "delete" ? false : true); - this.setModeVisible(action); + this.resetFilterSettings(); if (action === "edit" || action === "new" || action === "clone") { this.formNewEdit.classList.remove("hidden"); - this.simpleForm.classList.remove("hidden"); const oldNameValue = action === "edit" ? oldServName : ""; @@ -401,6 +260,20 @@ class ServiceModal { this.openModal(); } + resetFilterSettings() { + // Reset select + const selectTypeAll = document + .querySelector("#filter-type[data-services-setting-select-dropdown]") + .querySelector( + 'button[value="all"][data-services-setting-select-dropdown-btn="type"]', + ); + selectTypeAll.click(); + const inpKeyword = this.modal.querySelector("input#settings-filter"); + inpKeyword.value = ""; + // dispatch event input + inpKeyword.dispatchEvent(new Event("input")); + } + setIsDraft(isDraft, method) { const draftVal = isDraft ? "yes" : "no"; @@ -437,18 +310,12 @@ class ServiceModal { this.modal .querySelector("[data-toggle-draft-btn]") .classList.remove("hidden"); - this.modal - .querySelector("[data-toggle-settings-mode-btn]") - .classList.remove("hidden"); } if (!setVisible) { this.modal .querySelector("[data-toggle-draft-btn]") .classList.add("hidden"); - this.modal - .querySelector("[data-toggle-settings-mode-btn]") - .classList.add("hidden"); } } @@ -464,29 +331,8 @@ class ServiceModal { } } - switchMode(mode) { - if (mode === "advanced") { - this.formNewEdit.classList.remove("hidden"); - this.simpleForm.classList.add("hidden"); - } - - if (mode === "simple") { - this.formNewEdit.classList.add("hidden"); - this.simpleForm.classList.remove("hidden"); - } - } - - setModeVisible(action) { - if (action === "new" || action === "clone" || action === "edit") { - this.switchModeBtn.classList.remove("hidden"); - } else { - this.switchModeBtn.classList.add("hidden"); - } - } - hideForms() { this.formNewEdit.classList.add("hidden"); - this.simpleForm.classList.add("hidden"); this.formDelete.classList.add("hidden"); } @@ -842,13 +688,6 @@ const setFilterGlobal = new FilterSettings( const settings = new SettingsService(); -const switchSettings = new SettingsSwitch( - document.querySelector("[data-toggle-settings-mode-btn]"), - document.querySelector("main"), - ["advanced", "simple"], - "services", -); - const checkServiceModalKeyword = new CheckNoMatchFilter( document.querySelector("input#settings-filter"), "input", diff --git a/src/ui/static/js/utils/settings.js b/src/ui/static/js/utils/settings.js index 3ff0fe5d3..db1bcf01d 100644 --- a/src/ui/static/js/utils/settings.js +++ b/src/ui/static/js/utils/settings.js @@ -13,7 +13,7 @@ class Popover { this.hidePopover(this.relateBtn); } catch (e) {} }, - true + true, ); window.addEventListener("pointerover", (e) => { @@ -48,7 +48,7 @@ class Popover { const popoverName = btn.getAttribute("data-popover-btn"); //toggle curr popover const popover = btn.parentElement.querySelector( - `[data-popover-content=${popoverName}]` + `[data-popover-content=${popoverName}]`, ); popover.classList.add("transition-all", "delay-200", "opacity-0"); @@ -70,7 +70,7 @@ class Popover { const popoverName = btn.getAttribute("data-popover-btn"); //toggle curr popover const popover = btn.parentElement.querySelector( - `[data-popover-content=${popoverName}]` + `[data-popover-content=${popoverName}]`, ); popover.classList.add("hidden"); popover.classList.remove("transition-all", "delay-200"); @@ -127,7 +127,7 @@ class TabsSelect { window.history.replaceState( null, "", - `${window.location.pathname}#${tabAtt}` + `${window.location.pathname}#${tabAtt}`, ); } } @@ -153,7 +153,7 @@ class TabsSelect { const fragment = window.location.hash.substring(1); if (fragment) { const tab = this.tabContainer.querySelector( - `button[data-tab-select-handler='${fragment}']` + `button[data-tab-select-handler='${fragment}']`, ); tab.click(); // Scroll to the top of the page (with a delay to ensure the tab is clicked first) @@ -167,7 +167,7 @@ class TabsSelect { resetTabsStyle() { const tabsEl = this.tabContainer.querySelectorAll( - "button[data-tab-select-handler]" + "button[data-tab-select-handler]", ); tabsEl.forEach((tab) => { tab.classList.remove("active"); @@ -176,7 +176,7 @@ class TabsSelect { highlightClicked(tabAtt) { const tabMobile = this.tabContainer.querySelector( - `button[data-tab-select-handler='${tabAtt}']` + `button[data-tab-select-handler='${tabAtt}']`, ); tabMobile.classList.add("active"); } @@ -191,14 +191,14 @@ class TabsSelect { showSettingClicked(tabAtt) { const plugin = this.contentContainer.querySelector( - `[data-plugin-item='${tabAtt}']` + `[data-plugin-item='${tabAtt}']`, ); plugin.classList.remove("hidden"); } setDropBtnText(tabAtt, text) { const dropBtn = this.tabContainer.querySelector( - "[data-tab-select-dropdown-btn]" + "[data-tab-select-dropdown-btn]", ); dropBtn.setAttribute("data-tab-id", tabAtt); dropBtn.querySelector("span").textContent = text; @@ -206,7 +206,7 @@ class TabsSelect { closeDropdown() { const dropdown = this.tabContainer.querySelector( - "[data-tab-select-dropdown]" + "[data-tab-select-dropdown]", ); dropdown.classList.add("hidden"); dropdown.classList.remove("flex"); @@ -216,7 +216,7 @@ class TabsSelect { toggleDropdown() { const dropdown = this.tabContainer.querySelector( - "[data-tab-select-dropdown]" + "[data-tab-select-dropdown]", ); const combobox = dropdown.querySelector("[data-combobox]"); if (combobox) { @@ -241,7 +241,7 @@ class TabsSelect { updateTabArrow() { const dropdown = this.tabContainer.querySelector( - "[data-tab-select-dropdown]" + "[data-tab-select-dropdown]", ); if (dropdown.classList.contains("hidden")) { @@ -275,24 +275,24 @@ class FilterSettings { inputID, tabContainer, contentContainer, - prefix = "global-config" + prefix = "global-config", ) { this.input = document.querySelector(`input#${inputID}`); this.prefix = prefix; this.contextTxtEl = document.querySelector( - `span[data-${this.prefix}-setting-select-text="context"]` + `span[data-${this.prefix}-setting-select-text="context"]`, ); this.typeTxtEl = document.querySelector( - `span[data-${this.prefix}-setting-select-text="type"]` + `span[data-${this.prefix}-setting-select-text="type"]`, ); this.comboboxEl = document.querySelector( - `[data-${this.prefix}-tabs-select] [data-combobox]` + `[data-${this.prefix}-tabs-select] [data-combobox]`, ); this.isComboCheck = false; this.tabContainer = tabContainer; this.contentContainer = contentContainer; this.tabsEls = this.tabContainer.querySelectorAll( - `[data-tab-select-handler]` + `[data-tab-select-handler]`, ); this.comboboxEl = this.tabContainer .querySelector("[data-tab-select-dropdown]") @@ -325,16 +325,16 @@ class FilterSettings { try { if ( (e.target.hasAttribute( - `data-${this.prefix}-setting-select-dropdown-btn` + `data-${this.prefix}-setting-select-dropdown-btn`, ) && e.target.getAttribute( - `data-${this.prefix}-setting-select-dropdown-btn` + `data-${this.prefix}-setting-select-dropdown-btn`, ) === `context`) || (e.target.hasAttribute( - `data-${this.prefix}-setting-select-dropdown-btn` + `data-${this.prefix}-setting-select-dropdown-btn`, ) && e.target.getAttribute( - `data-${this.prefix}-setting-select-dropdown-btn` + `data-${this.prefix}-setting-select-dropdown-btn`, ) === `type`) ) { return this.runFilter(); @@ -531,7 +531,7 @@ class FilterSettings { const multGroups = this.contentContainer .querySelector(`[data-plugin-item=${tabName}]`) .querySelectorAll( - `[data-${this.prefix}-settings-multiple^="${multHandlerName}"]` + `[data-${this.prefix}-settings-multiple^="${multHandlerName}"]`, ); // check for each if all settings are hidden @@ -539,7 +539,7 @@ class FilterSettings { const multGroup = multGroups[j]; let isAllMultSettingHidden = true; const settings = multGroup.querySelectorAll( - `[data-setting-container]` + `[data-setting-container]`, ); for (let k = 0; k < settings.length; k++) { if (!settings[k].classList.contains("hidden")) { @@ -632,7 +632,7 @@ class FilterSettings { .querySelector("[data-tab-select-dropdown-btn]") .setAttribute("data-tab-id", "no-match"); this.tabContainer.querySelector( - "[data-tab-select-dropdown-btn] span" + "[data-tab-select-dropdown-btn] span", ).textContent = "No match"; // we want to close dropdown in case open previously this.toggleDropdown(true, true, false); @@ -641,7 +641,7 @@ class FilterSettings { // case at least one match const currTabBtn = this.tabContainer.querySelector( - `[data-tab-select-handler='${tabNameBeforeFilter}']` + `[data-tab-select-handler='${tabNameBeforeFilter}']`, ); // case the previous plugin is still visible, set is as active by clicking it again @@ -661,7 +661,7 @@ class FilterSettings { return; const hiddenTabsEl = this.tabContainer.querySelectorAll( - `[data-tab-select-handler][class*="!hidden"]` + `[data-tab-select-handler][class*="!hidden"]`, ); if (hiddenTabsEl.length < this.tabsEls.length - 1) @@ -672,15 +672,15 @@ class FilterSettings { toggleDropdown( avoidComboFocus = false, disableOpen = false, - disableClose = false + disableClose = false, ) { // avoid this on mobile if (window.innerWidth < 768) return; const dropdownEl = this.tabContainer.querySelector( - "[data-tab-select-dropdown]" + "[data-tab-select-dropdown]", ); const dropdownBtn = this.tabContainer.querySelector( - "[data-tab-select-dropdown-btn]" + "[data-tab-select-dropdown-btn]", ); if (this.comboboxEl && avoidComboFocus) this.comboboxEl.setAttribute("data-focus", "false"); @@ -736,7 +736,7 @@ class FilterSettings { const multGroups = this.contentContainer .querySelector(`[data-plugin-item=${tabName}]`) .querySelectorAll( - `[data-${this.prefix}-settings-multiple^="${multHandlerName}"]` + `[data-${this.prefix}-settings-multiple^="${multHandlerName}"]`, ); // check for each if all settings are hidden for (let j = 0; j < multGroups.length; j++) { @@ -751,7 +751,7 @@ class FilterSettings { multGroup.classList.remove("hidden"); const settings = multGroup.querySelectorAll( - `[data-setting-container]` + `[data-setting-container]`, ); for (let k = 0; k < settings.length; k++) { settings[k].classList.remove("hidden"); @@ -768,7 +768,7 @@ class FilterSettings { .querySelector(`[data-plugin-item="${tabName}"]`) .querySelector(`[data-plugin-settings]`); const settings = settingContainer.querySelectorAll( - "[data-setting-container]" + "[data-setting-container]", ); return settings; } @@ -790,7 +790,7 @@ class FilterSettings { ) continue; const settingsContainer = settingMultipleGroup.querySelectorAll( - `[data-setting-container]` + `[data-setting-container]`, ); settingsContainer.forEach((setting) => { @@ -859,7 +859,7 @@ class CheckNoMatchFilter { elsToCheck, elContainer, noMatchEl, - classToCheck = "hidden" + classToCheck = "hidden", ) { this.input = input; this.type = type; @@ -989,11 +989,11 @@ class Settings { this.mode = mode; this.serverNameInps = this.container.querySelectorAll( - 'input[name="SERVER_NAME"][data-setting-input]' + 'input[name="SERVER_NAME"][data-setting-input]', ); this.submitBtn = this.container.querySelector( - `button[data-${this.prefix}-modal-submit]` + `button[data-${this.prefix}-modal-submit]`, ); this.currAction = ""; this.currMethod = ""; @@ -1091,7 +1091,7 @@ class Settings { parentEl = this.container, attMethodName = "data-default-method", attValueName = "data-default-value", - avoidMultiple = true + avoidMultiple = true, ) { // Start with input-like (input, checkbox) const inps = avoidMultiple @@ -1122,7 +1122,7 @@ class Settings { "select", select, select.getAttribute("name"), - parentEl + parentEl, ) ) return; @@ -1132,15 +1132,15 @@ class Settings { //click the custom select dropdown to update select value select.parentElement .querySelector( - `button[data-setting-select-dropdown-btn][value='${defaultVal}']` + `button[data-setting-select-dropdown-btn][value='${defaultVal}']`, ) .click(); //set state to custom visible el const btnCustom = document.querySelector( `[data-setting-select=${select.getAttribute( - "data-setting-select-default" - )}]` + "data-setting-select-default", + )}]`, ); this.setDisabledByMethod(btnCustom, defaultMethod); @@ -1162,7 +1162,7 @@ class Settings { settings, setMethodUI, forceEnabled, - emptyServerName + emptyServerName, ) { // Get global needed data this.currAction = action; @@ -1179,7 +1179,7 @@ class Settings { updateOldNameValue() { const oldNameInps = this.container.querySelectorAll( - 'input[name="OLD_SERVER_NAME"]' + 'input[name="OLD_SERVER_NAME"]', ); oldNameInps.forEach((inp) => { @@ -1191,7 +1191,7 @@ class Settings { updateOperation() { // update operation and other hidden inputs for all mode in modal const operationInps = this.container.querySelectorAll( - 'input[name="operation"]' + 'input[name="operation"]', ); operationInps.forEach((inp) => { inp.setAttribute("value", this.operation); @@ -1263,7 +1263,7 @@ class Settings { if (inp.tagName === "SELECT") { inp.parentElement .querySelector( - `button[data-setting-select-dropdown-btn][value='${value}']` + `button[data-setting-select-dropdown-btn][value='${value}']`, ) .click(); inp.setAttribute("data-method", method); @@ -1323,7 +1323,7 @@ class SettingsMultiple extends Settings { const attName = btn.getAttribute(`data-${this.prefix}-multiple-add`); //get all multiple groups const multipleEls = this.container.querySelectorAll( - `[data-${this.prefix}-settings-multiple*="${attName}"]` + `[data-${this.prefix}-settings-multiple*="${attName}"]`, ); //case no schema if (multipleEls.length <= 0) return; @@ -1335,7 +1335,7 @@ class SettingsMultiple extends Settings { //and keep the highest num multipleEls.forEach((container) => { const ctnrName = container.getAttribute( - `data-${this.prefix}-settings-multiple` + `data-${this.prefix}-settings-multiple`, ); const [containerSuffix, containerIsNum, containerName] = this.getSuffixData(ctnrName); @@ -1348,7 +1348,7 @@ class SettingsMultiple extends Settings { const setNum = +currNum === 0 ? `` : `_${currNum}`; //the default (schema) group is the last group const schema = this.container.querySelector( - `[data-${this.prefix}-settings-multiple="${attName}_SCHEMA"]` + `[data-${this.prefix}-settings-multiple="${attName}_SCHEMA"]`, ); //clone schema to create a group with new num const schemaClone = schema.cloneNode(true); @@ -1388,12 +1388,12 @@ class SettingsMultiple extends Settings { // We are not removing it really, just hiding it and update values to default // By setting default value, group will be send to server and delete (because a setting with default value is useless to keep) const multContainer = e.target.closest( - `[data-${this.prefix}-settings-multiple]` + `[data-${this.prefix}-settings-multiple]`, ); multContainer.classList.add("hidden-multiple"); // get setting container const settings = multContainer.querySelectorAll( - `[data-setting-container]` + `[data-setting-container]`, ); settings.forEach((setting) => { // for regular input @@ -1420,7 +1420,7 @@ class SettingsMultiple extends Settings { // for select try { const selects = setting.querySelectorAll( - "button[data-setting-select]" + "button[data-setting-select]", ); selects.forEach((select) => { const defaultVal = select.getAttribute("data-default") || ""; @@ -1431,8 +1431,8 @@ class SettingsMultiple extends Settings { defaultVal; const dropdown = this.container.querySelector( `[data-setting-select-dropdown="${select.getAttribute( - "data-setting-select" - )}"]` + "data-setting-select", + )}"]`, ); dropdown.querySelector(`button[value=${defaultVal}]`).click(); }); @@ -1446,7 +1446,7 @@ class SettingsMultiple extends Settings { removePrevMultiples() { const multiPlugins = this.container.querySelectorAll( - `[data-${this.prefix}-settings-multiple]` + `[data-${this.prefix}-settings-multiple]`, ); multiPlugins.forEach((multiGrp) => { if ( @@ -1477,11 +1477,11 @@ class SettingsMultiple extends Settings { setMultipleToDOM(sortMultObj) { // We want to loop on each schema container for (const [schemaCtnrName, multGroupBySuffix] of Object.entries( - sortMultObj + sortMultObj, )) { //we need to access the DOM schema container const schemaCtnr = this.container.querySelector( - `[data-${this.prefix}-settings-multiple="${schemaCtnrName}"]` + `[data-${this.prefix}-settings-multiple="${schemaCtnrName}"]`, ); //now we have to loop on each multiple settings group for (const [suffix, settings] of Object.entries(multGroupBySuffix)) { @@ -1497,7 +1497,7 @@ class SettingsMultiple extends Settings { for (const [name, data] of Object.entries(settings)) { //get setting container of clone container const settingContainer = schemaCtnrClone.querySelector( - `[data-setting-container="${name}"]` + `[data-setting-container="${name}"]`, ); } //send schema clone to DOM and show it @@ -1520,7 +1520,7 @@ class SettingsMultiple extends Settings { const multiples = {}; const schemaSettings = this.container.querySelectorAll( - `[data-setting-container$="SCHEMA"]` + `[data-setting-container$="SCHEMA"]`, ); // loop on every schema settings @@ -1547,13 +1547,13 @@ class SettingsMultiple extends Settings { addOneMultGroup() { const multAddBtns = this.container.querySelectorAll( - `[data-${this.prefix}-multiple-add]` + `[data-${this.prefix}-multiple-add]`, ); multAddBtns.forEach((btn) => { const att = btn.getAttribute(`data-${this.prefix}-multiple-add`); //check if already one (SCHEMA exclude so length >= 2) const multGroups = this.container.querySelectorAll( - `[data-${this.prefix}-settings-multiple^="${att}"]` + `[data-${this.prefix}-settings-multiple^="${att}"]`, ); if (multGroups.length >= 2) return; @@ -1570,7 +1570,7 @@ class SettingsMultiple extends Settings { hiddenIfNoMultiples() { //hide multiple btn if no multiple exist on a plugin const multiples = this.container.querySelectorAll( - `[data-${this.prefix}-settings-multiple]` + `[data-${this.prefix}-settings-multiple]`, ); multiples.forEach((container) => { if (container.querySelectorAll(`[data-setting-container]`).length <= 0) @@ -1582,7 +1582,7 @@ class SettingsMultiple extends Settings { showMultByAtt(att) { const multContainers = this.container.querySelectorAll( - `[data-${this.prefix}-settings-multiple^=${att}]` + `[data-${this.prefix}-settings-multiple^=${att}]`, ); multContainers.forEach((container) => { if ( @@ -1596,7 +1596,7 @@ class SettingsMultiple extends Settings { toggleMultByAtt(att) { const multContainers = this.container.querySelectorAll( - `[data-${this.prefix}-settings-multiple^=${att}]` + `[data-${this.prefix}-settings-multiple^=${att}]`, ); multContainers.forEach((container) => { if ( @@ -1631,10 +1631,10 @@ class SettingsMultiple extends Settings { selects.forEach((select) => { const method = select.getAttribute("data-default-method"); const name = select.getAttribute( - `data-${this.prefix}-setting-select-default` + `data-${this.prefix}-setting-select-default`, ); const selDOM = this.container.querySelector( - `button[data-${this.prefix}-setting-select='${name}']` + `button[data-${this.prefix}-setting-select='${name}']`, ); if (method === "ui" || method === "default") { selDOM.removeAttribute("disabled", ""); @@ -1659,14 +1659,14 @@ class SettingsMultiple extends Settings { ? name.replace(`_${splitName[splitName.length - 1]}`, "").trim() : name.trim(); const relateSetting = this.container.querySelector( - `[data-setting-container=${nameSuffixLess}_SCHEMA]` + `[data-setting-container=${nameSuffixLess}_SCHEMA]`, ); if (!relateSetting) continue; const relateCtnr = relateSetting.closest( - `[data-${this.prefix}-settings-multiple]` + `[data-${this.prefix}-settings-multiple]`, ); const relateCtnrName = relateCtnr.getAttribute( - `data-${this.prefix}-settings-multiple` + `data-${this.prefix}-settings-multiple`, ); //then we sort the setting on the right container name by suffixe number if (!(relateCtnrName in sortMultiples)) { @@ -1687,7 +1687,7 @@ class SettingsMultiple extends Settings { `data-${this.prefix}-settings-multiple`, schemaCtnrClone .getAttribute(`data-${this.prefix}-settings-multiple`) - .replace("_SCHEMA", suffix) + .replace("_SCHEMA", suffix), ); // Get all elemennts by attribute to update _SCHEMA by suffix @@ -1706,7 +1706,7 @@ class SettingsMultiple extends Settings { attEls.forEach((attEl) => { attEl.setAttribute( att, - attEl.getAttribute(att).replace("_SCHEMA", suffix) + attEl.getAttribute(att).replace("_SCHEMA", suffix), ); }); }); @@ -1793,7 +1793,7 @@ class SettingsEditor extends SettingsMultiple { addDefaultEditorIfNone() { // get containers with _SCHEMA const editorContainers = this.container.querySelectorAll( - "[data-editor-container$='_SCHEMA']" + "[data-editor-container$='_SCHEMA']", ); editorContainers.forEach((editorContainer) => { // Check if others editor exists with same base name @@ -1801,7 +1801,7 @@ class SettingsEditor extends SettingsMultiple { .getAttribute("data-editor-container") .replace("_SCHEMA", ""); const otherEditors = this.container.querySelectorAll( - `[data-editor-container*='${editorName}']` + `[data-editor-container*='${editorName}']`, ); if (otherEditors.length > 1) return; // Add default editor @@ -1819,7 +1819,7 @@ class SettingsEditor extends SettingsMultiple { // reset previous editors this.editorEls.forEach((editor) => { const editorContainer = editor.container.closest( - "[data-editor-container]" + "[data-editor-container]", ); editorContainer.remove(); editor.destroy(); @@ -1828,7 +1828,7 @@ class SettingsEditor extends SettingsMultiple { this.editorEls = []; // get only container ending with _SCHEMA const editorContainers = this.container.querySelectorAll( - "[data-editor-container$='_SCHEMA']" + "[data-editor-container$='_SCHEMA']", ); const configsSettings = this.getEditorSettings(); // Create instances on the right containers @@ -1849,7 +1849,7 @@ class SettingsEditor extends SettingsMultiple { editorType, editorName, num, - editorValue + editorValue, ); } }); @@ -1868,11 +1868,11 @@ class SettingsEditor extends SettingsMultiple { editor.setAttribute("name", `${contName}_${num}`); } const filenameInp = containerClone.querySelector( - `input[data-editor-filename]` + `input[data-editor-filename]`, ); if (filenameInp) filenameInp.value = name; const hiddenInp = containerClone.querySelector( - `textarea[data-editor-input]` + `textarea[data-editor-input]`, ); if (hiddenInp) { hiddenInp.setAttribute("data-config-type", type); @@ -1931,7 +1931,7 @@ class SettingsAdvanced extends SettingsEditor { settings, setMethodUI = false, forceEnabled = false, - emptyServerName = false + emptyServerName = false, ) { this.updateData( action, @@ -1940,7 +1940,7 @@ class SettingsAdvanced extends SettingsEditor { settings, setMethodUI, forceEnabled, - emptyServerName + emptyServerName, ); this.setSettingsAdvanced(); this.resetServerName(); @@ -1956,7 +1956,7 @@ class SettingsAdvanced extends SettingsEditor { checkVisibleInpsValidity() { try { const inps = this.container.querySelectorAll( - "[data-plugin-item]:not(.hidden) input[data-setting-input], [data-plugin-item][class*='hidden'] input[data-setting-input]" + "[data-plugin-item]:not(.hidden) input[data-setting-input], [data-plugin-item][class*='hidden'] input[data-setting-input]", ); // merge input with visible and not visible @@ -1982,7 +1982,7 @@ class SettingsAdvanced extends SettingsEditor { ) { // Case conflict with another server name const serverNames = document.querySelectorAll( - "[data-services-service]" + "[data-services-service]", ); const serverNameValue = inps[i].getAttribute("value"); serverNames.forEach((serverName) => { @@ -1997,7 +1997,7 @@ class SettingsAdvanced extends SettingsEditor { } const errMsg = this.container.querySelector( - "[data-services-modal-error-msg]" + "[data-services-modal-error-msg]", ); if (!isAllValid) { invalidInp.classList.add("invalid"); @@ -2028,436 +2028,6 @@ class SettingsAdvanced extends SettingsEditor { } } -class SettingsSimple extends SettingsEditor { - constructor(formEl, multSettingsName, prefix = "services") { - super("simple", formEl, multSettingsName, prefix); - this.nextBtn = this.container.querySelector("button[data-simple-next]"); - this.backBtn = this.container.querySelector("button[data-simple-back]"); - this.initSimple(); - } - - initSimple() { - window.addEventListener("DOMContentLoaded", () => { - this.container.addEventListener("input", (e) => { - this.checkVisibleInpsValidity(); - }); - }); - - // SIMPLE MODE ACTIONS - this.nextBtn.addEventListener("click", () => { - this.nextSimpleStep(); - }); - - this.backBtn.addEventListener("click", () => { - this.prevSimpleStep(); - }); - } - - setSimple( - action = this.currAction, - oldServName = this.oldServName, - operation = this.operation, - mainSettings, - compareSettings = null, - setMethodUI = false, - forceEnabled = false, - emptyServerName = false, - resetSteps = false - ) { - const settings = - compareSettings && Object.keys(compareSettings).length > 0 - ? this.filterSettings(mainSettings, compareSettings) - : mainSettings; - - this.updateData( - action, - oldServName, - operation, - settings, - setMethodUI, - forceEnabled, - emptyServerName - ); - this.setSettingsSimple(); - this.setEditorSettings(); - this.resetServerName(); - if (resetSteps) this.resetSimpleMode(); - this.checkVisibleInpsValidity(); - } - - filterSettings(mainSettings, compareSettings) { - const mergeSettings = {}; - // handle custom configs, we only keep security level config on new, else we get only service configs - const configsToGetFrom = - this.currAction === "new" ? compareSettings : mainSettings; - const customConfSettings = []; // Allow to delete custom configs - for (const [key, value] of Object.entries(configsToGetFrom)) { - if (key.startsWith("CUSTOM_CONFIG")) { - mergeSettings[key] = value; - customConfSettings.push(key); - } - } - - // Delete merged custom configs - for (let i = 0; i < customConfSettings.length; i++) { - try { - delete mainSettings[customConfSettings[i]]; - } catch (e) {} - - try { - delete compareSettings[customConfSettings[i]]; - } catch (e) {} - } - - // get the highest suffix number in mainSettings - let highestMainSuffix = 0; - let highestCompareSuffix = 0; - // This will allow - const settingsConflicts = []; - for (const [key, value] of Object.entries(mainSettings)) { - const [mainSuffix, mainIsSuffixe, mainName] = this.getSuffixData(key); - // Case same key (same setting) and not a multiple - // Keep the one with a method != than ui or default if exists - // Else keep the one from compareSettings that is the securityLevel - if (key in compareSettings && !mainName.includes(this.multSettingsName)) { - const method = mainSettings[key]["method"]; - if (method !== "ui" && method !== "default") { - mergeSettings[key] = value; - } else { - highestMainSuffix = mergeSettings[key] = compareSettings[key]; - } - settingsConflicts.push(key); - continue; - } - // Need to check if is a multiple from a list because we can have custom configs with suffixe too - if (this.multSettingsName.includes(mainName)) { - highestMainSuffix = mainIsSuffixe - ? Math.max(highestMainSuffix, suffixeNum) - : highestMainSuffix; - settingsConflicts.push(key); - } - const [compareSuffix, compareIsSuffixe, compareName] = - this.getSuffixData(key); - - // Need to check if is a multiple from a list because we can have custom configs with suffixe too - if (this.multSettingsName.includes(compareName)) { - highestCompareSuffix = compareIsSuffixe - ? Math.max(highestCompareSuffix, suffixeNum) - : highestCompareSuffix; - settingsConflicts.push(key); - } - } - - // Case highest main suffixe is higher than compare suffixe - // Start updating starting from the highest suffix looping on all suffixed - // Until we reached the highest compare suffixe - if (highestCompareSuffix >= highestMainSuffix) { - highestMainSuffix++; - for (let i = 0; i <= highestCompareSuffix; i++) { - // Check if the setting is a multiple and match the current suffixe - for (const [key, value] of Object.entries(compareSettings)) { - const [compareSuffix, compareIsSuffixe, compareName] = - this.getSuffixData(key); - // Need to check if is a multiple from a list because we can have custom configs with suffixe too - if (!this.multSettingsName.includes(compareName)) continue; - // Case multiple, update suffixe to the highest available if needed - const newNameSuffixe = key.replace( - `_${compareName}`, - `_${highestMainSuffix}` - ); - mergeSettings[newNameSuffixe] = value; - } - // Update for the next loop to get the next suffixe - highestMainSuffix++; - } - } - // Else, add compare settings without changing anything - else { - for (const [key, value] of Object.entries(compareSettings)) { - const [compareSuffix, compareIsSuffixe, compareName] = - this.getSuffixData(key); - // Need to check if is a multiple from a list because we can have custom configs with suffixe too - if (!this.multSettingsName.includes(compareName)) continue; - mergeSettings[key] = value; - } - } - - // Delete conflicts settings in order to merge the rest - for (let i = 0; i < settingsConflicts.length; i++) { - try { - delete mainSettings[settingsConflicts[i]]; - } catch (e) {} - try { - delete compareSettings[settingsConflicts[i]]; - } catch (e) {} - } - - // Merge the rest of the settings - const mergeAllSettings = { - ...mergeSettings, - ...mainSettings, - ...compareSettings, - }; - return mergeAllSettings; - } - - setSettingsSimple() { - this.setRegularInps(); - this.setMultipleInps(); - } - - resetSimpleMode() { - // reset button - this.backBtn.setAttribute("disabled", ""); - this.nextBtn.removeAttribute("disabled"); - // hidden all steps and show first one - const steps = this.container.querySelectorAll("[data-step]"); - steps.forEach((step) => { - step.classList.add("hidden"); - }); - const firstStep = this.container.querySelector("[data-step='1']"); - firstStep.classList.remove("hidden"); - this.updateSimpleActions(); - } - - nextSimpleStep() { - // get current step - const currStep = this.container.querySelector("[data-step]:not(.hidden)"); - const currStepNum = currStep.getAttribute("data-step"); - // get next step and next step + 1 to determine if continue or save - const nextStep = this.container.querySelector( - `[data-step="${+currStepNum + 1}"]` - ); - // hide current step and show next one - currStep.classList.add("hidden"); - nextStep.classList.remove("hidden"); - - this.checkVisibleInpsValidity(); - this.updateSimpleActions(); - } - - prevSimpleStep() { - // get current step - const currStep = this.container.querySelector("[data-step]:not(.hidden)"); - const currStepNum = currStep.getAttribute("data-step"); - // get next step and next step + 1 to determine if continue or save - const prevStep = this.container.querySelector( - `[data-step="${+currStepNum - 1}"]` - ); - - // hide current step and show next one - currStep.classList.add("hidden"); - prevStep.classList.remove("hidden"); - - this.checkVisibleInpsValidity(); - this.updateSimpleActions(); - } - - updateSimpleActions() { - const currStep = this.container.querySelector("[data-step]:not(.hidden)"); - const currStepNum = currStep.getAttribute("data-step"); - // get next step and next step + 1 to determine if continue or save - const prevStep = this.container.querySelector( - `[data-step="${+currStepNum - 1}"]` - ); - - const nextStep = this.container.querySelector( - `[data-step="${+currStepNum + 1}"]` - ); - - // Handle case last step or not - if (nextStep) { - this.nextBtn.classList.remove("hidden"); - this.submitBtn.classList.add("hidden"); - } - - if (!nextStep) { - this.nextBtn.classList.add("hidden"); - this.submitBtn.classList.remove("hidden"); - } - - if (prevStep) { - this.backBtn.removeAttribute("disabled"); - } - - if (!prevStep) { - this.backBtn.setAttribute("disabled", ""); - } - } - - checkVisibleInpsValidity() { - try { - const inps = this.container.querySelectorAll( - "[data-step]:not(.hidden) input[data-setting-input]" - ); - // merge input with visible and not visible - if (inps.length <= 0) return; - - let isAllValid = true; - let invalidInpName = ""; - let invalidInp = null; - - for (let i = 0; i < inps.length; i++) { - // for all inputs - if (!inps[i].validity.valid) { - invalidInp = inps[i]; - isAllValid = false; - invalidInpName = inps[i].getAttribute("name"); - break; - } - - // special case for SERVER_NAME - if ( - inps[i].getAttribute("name") === "SERVER_NAME" && - inps[i].value !== "" - ) { - // Case conflict with another server name - const serverNames = document.querySelectorAll( - "[data-services-service]" - ); - const serverNameValue = inps[i].getAttribute("value"); - serverNames.forEach((serverName) => { - const name = serverName.getAttribute("data-services-service"); - if (name === serverNameValue) return; - if (name === inps[i].value) { - invalidInpName = inps[i]?.getAttribute("name"); - isAllValid = false; - } - }); - } - } - - const errMsg = this.container.querySelector( - "[data-services-modal-error-msg]" - ); - if (!isAllValid) { - invalidInp.classList.add("invalid"); - const invalidEl = invalidInp - .closest("form") - .querySelector(`[data-invalid=${invalidInp.getAttribute("id")}]`); - invalidEl.classList.remove("hidden", "md:hidden"); - // Wait a little that modal is fully open to focus on invalid input, because not working when element is hidden - setTimeout(() => { - // only focus if not another input is focus - if (document.activeElement.tagName !== "INPUT") invalidInp.focus(); - }, 30); - - errMsg.textContent = `${invalidInpName} must be valid to submit`; - errMsg.classList.remove("hidden"); - this.nextBtn.setAttribute("disabled", ""); - } - - if (isAllValid) { - errMsg.classList.add("hidden"); - this.nextBtn.removeAttribute("disabled"); - } - } catch (e) {} - } -} - -class SettingsRaw extends SettingsMultiple { - constructor(mode, formEl, multSettingsName, prefix = "services") { - super(mode, formEl, multSettingsName, prefix); - this.initRaw(); - } - - initRaw() { - window.addEventListener("DOMContentLoaded", () => { - this.container.addEventListener("input", (e) => { - this.checkVisibleInpsValidity(); - }); - }); - } - - setRaw( - action, - oldServName, - operation, - settings, - setMethodUI = false, - forceEnabled = false, - emptyServerName = false - ) { - this.updateData( - action, - oldServName, - operation, - settings, - setMethodUI, - forceEnabled, - emptyServerName - ); - this.setSettingsRaw(settings, setMethodUI, forceEnabled, emptyServerName); - } - - setSettingsRaw(settings, setMethodUI = false, forceEnabled = false) {} -} - -class SettingsSwitch { - constructor( - switchBtn, - container = document.querySelector("main"), - modes = ["advanced", "simple"], - prefix = "services" - ) { - this.prefix = prefix; - this.modes = modes; - this.switchModeBtn = switchBtn; - // dict with mode as key and form element as value - this.container = container; - this.init(); - } - - init() { - this.switchModeBtn.addEventListener("click", () => { - // Get - const currMode = this.switchModeBtn.getAttribute( - "data-toggle-settings-mode-btn" - ); - // Get current mode index in this.modes to get next one or first element if no next - const currModeIndex = this.modes.indexOf(currMode); - const nextMode = this.modes[currModeIndex + 1] || this.modes[0]; - this.setSettingMode(nextMode); - }); - } - - // Switch settings mode and update button - setSettingMode(mode) { - const currMode = this.switchModeBtn.getAttribute( - "data-toggle-settings-mode-btn" - ); - - if (currMode === mode) return; - if (!this.switchModeBtn) return; - - const elsToShow = - mode === "advanced" - ? this.container.querySelectorAll("[data-advanced]") - : this.container.querySelectorAll("[data-simple]"); - - const elsToHide = - mode === "advanced" - ? this.container.querySelectorAll("[data-simple]") - : this.container.querySelectorAll("[data-advanced]"); - elsToHide.forEach((setting) => { - setting.classList.add("!hidden"); - }); - elsToShow.forEach((setting) => { - setting.classList.remove("!hidden"); - }); - // button - this.switchModeBtn.setAttribute("data-toggle-settings-mode-btn", mode); - const switchEls = this.switchModeBtn.querySelectorAll( - "[data-toggle-settings-mode]" - ); - switchEls.forEach((el) => { - el.getAttribute("data-toggle-settings-mode") === mode - ? el.classList.remove("hidden") - : el.classList.add("hidden"); - }); - } -} - export { Popover, Tabs, @@ -2469,6 +2039,4 @@ export { Settings, SettingsMultiple, SettingsAdvanced, - SettingsSimple, - SettingsSwitch, }; diff --git a/src/ui/templates/services_modal.html b/src/ui/templates/services_modal.html index 5a147d529..b8afe0485 100644 --- a/src/ui/templates/services_modal.html +++ b/src/ui/templates/services_modal.html @@ -31,19 +31,6 @@ - - - - - - - - - diff --git a/src/ui/templates/settings_simple.html b/src/ui/templates/settings_simple.html deleted file mode 100644 index 88bf5ab22..000000000 --- a/src/ui/templates/settings_simple.html +++ /dev/null @@ -1,105 +0,0 @@ -{% set current_endpoint = current_endpoint or url_for(request.endpoint)[1:].split("/")[-1].strip().replace('_', '-') %} - -
-{% for setting_simple in plugin_simple %} - {% set setting_input = { "name" : setting_simple.get('setting_id'), "multiples" : setting_simple.get("multiples", {}), "method" : setting_simple.get('setting').get("method", "default"), "help" : setting_simple.get('setting').get("help"), "label" : setting_simple.get('setting').get("label"), "id" : setting_simple.get('setting').get("id"), "type" : setting_simple.get('setting').get("type"), "default" : setting_simple.get('setting').get("default", "default"), "select" : setting_simple.get('setting').get("select"), "regex" : setting_simple.get('setting').get("regex"), "value" : setting_simple.get('setting').get("value"), "is_multiple" : True if setting_simple.get('setting').get("multiple", "") else False, "multiple_name" : setting_simple.get('setting').get('multiple') } %} -
- -
-
-
- {{ setting_simple['title'] }} -
-

{{ setting_simple['subtitle'] }}

-
-
- {% if not setting_input.get('is_multiple') %} - -
-
- {% include "setting_header.html" %} - {% include "setting_input.html" %} - {% include "setting_select.html" %} - {% include "setting_checkbox.html" %} - {% include "setting_invalid.html"%} -
- -
- - {% endif %} - - - {% if setting_input.get('is_multiple') %} - -
-
{{ setting_simple['plugin_id'] }}
- - -
- - - - - {% endif %} -
-{% endfor %} - - -{% for config in configs %} -
- -
-
-
- {{ config['title'] }} -
-

{{ config['subtitle'] }}

-
-
- -
-{% endfor %} -
diff --git a/tests/ui/services_page.py b/tests/ui/services_page.py index a9a8b4682..2b5e326c9 100644 --- a/tests/ui/services_page.py +++ b/tests/ui/services_page.py @@ -61,7 +61,8 @@ try: log_info("Toggle modal checked, trying settings ...") - assert_button_click(DRIVER, "//button[@data-toggle-settings-mode-btn='simple']") + # simple mode + # assert_button_click(DRIVER, "//button[@data-toggle-settings-mode-btn='simple']") log_info("Start trying combobox filter ...") @@ -270,19 +271,19 @@ try: assert_button_click(DRIVER, "//button[@data-services-action='new']") - current_mode = DRIVER.execute_script("return document.querySelector('button[data-toggle-settings-mode-btn]').getAttribute('data-toggle-settings-mode-btn')") - if current_mode != "simple": - log_error(f"""Default mode for new service need to be simple and not {current_mode}...""") - exit(1) + # current_mode = DRIVER.execute_script("return document.querySelector('button[data-toggle-settings-mode-btn]').getAttribute('data-toggle-settings-mode-btn')") + # if current_mode != "simple": + # log_error(f"""Default mode for new service need to be simple and not {current_mode}...""") + # exit(1) - # Switch to advanced mode - DRIVER.execute_script("document.querySelector('button[data-toggle-settings-mode-btn]').click()") + # # Switch to advanced mode + # DRIVER.execute_script("document.querySelector('button[data-toggle-settings-mode-btn]').click()") - current_mode = DRIVER.execute_script("return document.querySelector('button[data-toggle-settings-mode-btn]').getAttribute('data-toggle-settings-mode-btn')") + # current_mode = DRIVER.execute_script("return document.querySelector('button[data-toggle-settings-mode-btn]').getAttribute('data-toggle-settings-mode-btn')") - if current_mode != "advanced": - log_error(f"""Switching mode needed to return advanced mode, but he have {current_mode}...""") - exit(1) + # if current_mode != "advanced": + # log_error(f"""Switching mode needed to return advanced mode, but he have {current_mode}...""") + # exit(1) server_name_input = safe_get_element(DRIVER, By.XPATH, "//form[@data-services-modal-form and @data-advanced]//input[@id='SERVER_NAME']") assert isinstance(server_name_input, WebElement), "Input is not a WebElement" From b7978990de1012552e6fd0feca70abf6fe2ae38b Mon Sep 17 00:00:00 2001 From: Jordan Blasenhauer Date: Fri, 3 May 2024 12:04:27 +0200 Subject: [PATCH 6/8] update config test --- tests/ui/configs_page.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/ui/configs_page.py b/tests/ui/configs_page.py index 79cc4d736..b2fe960b5 100644 --- a/tests/ui/configs_page.py +++ b/tests/ui/configs_page.py @@ -20,7 +20,7 @@ try: assert_button_click(DRIVER, "//button[@data-services-action='new']") - assert_button_click(DRIVER, "//button[@data-toggle-settings-mode-btn='simple']") + # assert_button_click(DRIVER, "//button[@data-toggle-settings-mode-btn='simple']") server_name_input = safe_get_element(DRIVER, By.ID, "SERVER_NAME") assert isinstance(server_name_input, WebElement), "Input is not a WebElement" From b5019d77e10c23b8920717bf57516601ae6cc00c Mon Sep 17 00:00:00 2001 From: florian Date: Fri, 3 May 2024 12:25:33 +0200 Subject: [PATCH 7/8] review settings order in UI --- src/common/core/antibot/plugin.json | 36 ++--- src/common/core/backup/plugin.json | 20 +-- src/common/core/badbehavior/plugin.json | 18 +-- src/common/core/blacklist/plugin.json | 176 +++++++++++------------ src/common/core/cors/plugin.json | 54 +++---- src/common/core/greylist/plugin.json | 84 +++++------ src/common/core/realip/plugin.json | 18 +-- src/common/core/redis/plugin.json | 36 ++--- src/common/core/reverseproxy/plugin.json | 98 ++++++------- src/common/core/whitelist/plugin.json | 86 +++++------ 10 files changed, 313 insertions(+), 313 deletions(-) diff --git a/src/common/core/antibot/plugin.json b/src/common/core/antibot/plugin.json index 1d7911ef3..600c8c063 100644 --- a/src/common/core/antibot/plugin.json +++ b/src/common/core/antibot/plugin.json @@ -32,6 +32,24 @@ "regex": "^\\/[\\w\\].~:\\/?#\\[@!$\\&'\\(\\)*+,;=\\-]*$", "type": "text" }, + "ANTIBOT_TIME_RESOLVE": { + "context": "multisite", + "default": "60", + "help": "Maximum time (in seconds) clients have to resolve the challenge. Once this time has passed, a new challenge will be generated.", + "id": "antibot-time-resolve", + "label": "Time to resolve", + "regex": "^[0-9]+$", + "type": "text" + }, + "ANTIBOT_TIME_VALID": { + "context": "multisite", + "default": "86400", + "help": "Maximum validity time of solved challenges. Once this time has passed, clients will need to resolve a new one.", + "id": "antibot-time-valid", + "label": "Time valid", + "regex": "^[0-9]+$", + "type": "text" + }, "ANTIBOT_RECAPTCHA_SCORE": { "context": "multisite", "default": "0.7", @@ -94,24 +112,6 @@ "label": "Turnstile secret", "regex": "^(0x[\\w\\-]+)?$", "type": "password" - }, - "ANTIBOT_TIME_RESOLVE": { - "context": "multisite", - "default": "60", - "help": "Maximum time (in seconds) clients have to resolve the challenge. Once this time has passed, a new challenge will be generated.", - "id": "antibot-time-resolve", - "label": "Time to resolve", - "regex": "^[0-9]+$", - "type": "text" - }, - "ANTIBOT_TIME_VALID": { - "context": "multisite", - "default": "86400", - "help": "Maximum validity time of solved challenges. Once this time has passed, clients will need to resolve a new one.", - "id": "antibot-time-valid", - "label": "Time valid", - "regex": "^[0-9]+$", - "type": "text" } } } diff --git a/src/common/core/backup/plugin.json b/src/common/core/backup/plugin.json index 62ff5f0e9..a6a3942fb 100644 --- a/src/common/core/backup/plugin.json +++ b/src/common/core/backup/plugin.json @@ -14,19 +14,10 @@ "regex": "^(yes|no)$", "type": "check" }, - "BACKUP_DIRECTORY": { - "context": "global", - "default": "/var/lib/bunkerweb/backups", - "help": "The directory where the backup will be stored", - "id": "backup-directory", - "label": "Backup directory", - "regex": "^.*$", - "type": "text" - }, "BACKUP_SCHEDULE": { "context": "global", "default": "daily", - "help": "The frequency of the backup", + "help": "The frequency of the backup (daily, weekly or monthly)", "id": "backup-schedule", "label": "Backup schedule", "regex": "^(daily|weekly|monthly)$", @@ -41,6 +32,15 @@ "label": "Backup rotation", "regex": "^[1-9][0-9]*$", "type": "text" + }, + "BACKUP_DIRECTORY": { + "context": "global", + "default": "/var/lib/bunkerweb/backups", + "help": "The directory where the backup will be stored", + "id": "backup-directory", + "label": "Backup directory", + "regex": "^.*$", + "type": "text" } }, "jobs": [ diff --git a/src/common/core/badbehavior/plugin.json b/src/common/core/badbehavior/plugin.json index a7253374a..4d89103f5 100644 --- a/src/common/core/badbehavior/plugin.json +++ b/src/common/core/badbehavior/plugin.json @@ -23,15 +23,6 @@ "regex": "^( *([1-5]\\d{2})(?!.*\\2) *)+$", "type": "text" }, - "BAD_BEHAVIOR_BAN_TIME": { - "context": "multisite", - "default": "86400", - "help": "The duration time (in seconds) of a ban when the corresponding IP has reached the threshold.", - "id": "bad-behavior-ban-time", - "label": "Ban duration (in seconds)", - "regex": "^\\d+", - "type": "text" - }, "BAD_BEHAVIOR_THRESHOLD": { "context": "multisite", "default": "10", @@ -49,6 +40,15 @@ "label": "Period (in seconds)", "regex": "^\\d+", "type": "text" + }, + "BAD_BEHAVIOR_BAN_TIME": { + "context": "multisite", + "default": "86400", + "help": "The duration time (in seconds) of a ban when the corresponding IP has reached the threshold.", + "id": "bad-behavior-ban-time", + "label": "Ban duration (in seconds)", + "regex": "^\\d+", + "type": "text" } } } diff --git a/src/common/core/blacklist/plugin.json b/src/common/core/blacklist/plugin.json index 5f7a68b32..f415e3e01 100644 --- a/src/common/core/blacklist/plugin.json +++ b/src/common/core/blacklist/plugin.json @@ -23,13 +23,13 @@ "regex": "^(?! )( *(((\\b25[0-5]|\\b2[0-4]\\d|\\b[01]?\\d\\d?)(\\.(25[0-5]|2[0-4]\\d|[01]?\\d\\d?)){3})(\\/([1-2][0-9]?|3[0-2]?|[04-9]))?|(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]Z{0,4}){0,4}%[0-9a-zA-Z]+|::(ffff(:0{1,4})?:)?((25[0-5]|(2[0-4]|1?\\d)?\\d)\\.){3}(25[0-5]|(2[0-4]|1?\\d)?\\d)|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1?\\d)?\\d)\\.){3}(25[0-5]|(2[0-4]|1?\\d)?\\d))(\\/(12[0-8]|1[01][0-9]|[0-9][0-9]?))?)(?!.*\\D\\2([^\\d\\/]|$)) *)*$", "type": "text" }, - "BLACKLIST_IP_URLS": { - "context": "global", - "default": "https://www.dan.me.uk/torlist/?exit", - "help": "List of URLs, separated with spaces, containing bad IP/network to block.", - "id": "blacklist-ip-urls", - "label": "Blacklist IP/network URLs", - "regex": "^( *((https?:\\/\\/|file:\\/\\/\\/)[\\-\\w@:%.+~#=]+[\\-\\w\\(\\)!@:%+.~#?&\\/=$]*)(?!.*\\2(?!.)) *)*$", + "BLACKLIST_RDNS": { + "context": "multisite", + "default": ".shodan.io .censys.io", + "help": "List of reverse DNS suffixes, separated with spaces, to block.", + "id": "blacklist-rdns", + "label": "Blacklist reverse DNS", + "regex": "^( *(([^ ]+)(?!.*\\3( |$))) *)*$", "type": "text" }, "BLACKLIST_RDNS_GLOBAL": { @@ -41,24 +41,6 @@ "regex": "^(yes|no)$", "type": "check" }, - "BLACKLIST_RDNS": { - "context": "multisite", - "default": ".shodan.io .censys.io", - "help": "List of reverse DNS suffixes, separated with spaces, to block.", - "id": "blacklist-rdns", - "label": "Blacklist reverse DNS", - "regex": "^( *(([^ ]+)(?!.*\\3( |$))) *)*$", - "type": "text" - }, - "BLACKLIST_RDNS_URLS": { - "context": "global", - "default": "", - "help": "List of URLs, separated with spaces, containing reverse DNS suffixes to block.", - "id": "blacklist-rdns-urls", - "label": "Blacklist reverse DNS URLs", - "regex": "^( *((https?:\\/\\/|file:\\/\\/\\/)[\\-\\w@:%.+~#=]+[\\-\\w\\(\\)!@:%+.~#?&\\/=$]*)(?!.*\\2(?!.)) *)*$", - "type": "text" - }, "BLACKLIST_ASN": { "context": "multisite", "default": "", @@ -68,15 +50,6 @@ "regex": "^^( *((ASN?)?(\\d+)\\b(?!.*[SN ]\\4\\b)) *)*$", "type": "text" }, - "BLACKLIST_ASN_URLS": { - "context": "global", - "default": "", - "help": "List of URLs, separated with spaces, containing ASN to block.", - "id": "blacklist-asn-urls", - "label": "Blacklist ASN URLs", - "regex": "^( *((https?:\\/\\/|file:\\/\\/\\/)[\\-\\w@:%.+~#=]+[\\-\\w\\(\\)!@:%+.~#?&\\/=$]*)(?!.*\\2(?!.)) *)*$", - "type": "text" - }, "BLACKLIST_USER_AGENT": { "context": "multisite", "default": "", @@ -86,15 +59,6 @@ "regex": "^.*$", "type": "text" }, - "BLACKLIST_USER_AGENT_URLS": { - "context": "global", - "default": "https://raw.githubusercontent.com/mitchellkrogza/nginx-ultimate-bad-bot-blocker/master/_generator_lists/bad-user-agents.list", - "help": "List of URLs, separated with spaces, containing bad User-Agent to block.", - "id": "blacklist-user-agent-urls", - "label": "Blacklist User-Agent URLs", - "regex": "^( *((https?:\\/\\/|file:\\/\\/\\/)[\\-\\w@:%.+~#=]+[\\-\\w\\(\\)!@:%+.~#?&\\/=$]*)(?!.*\\2(?!.)) *)*$", - "type": "text" - }, "BLACKLIST_URI": { "context": "multisite", "default": "", @@ -104,15 +68,6 @@ "regex": "^( *(.*)(?!.*\\2(?!.)) *)*$", "type": "text" }, - "BLACKLIST_URI_URLS": { - "context": "global", - "default": "", - "help": "List of URLs, separated with spaces, containing bad URI to block.", - "id": "blacklist-uri-urls", - "label": "Blacklist URI URLs", - "regex": "^( *((https?:\\/\\/|file:\\/\\/\\/)[\\-\\w@:%.+~#=]+[\\-\\w\\(\\)!@:%+.~#?&\\/=$]*)(?!.*\\2(?!.)) *)*$", - "type": "text" - }, "BLACKLIST_IGNORE_IP": { "context": "multisite", "default": "", @@ -122,15 +77,6 @@ "regex": "^(?! )( *(((\\b25[0-5]|\\b2[0-4]\\d|\\b[01]?\\d\\d?)(\\.(25[0-5]|2[0-4]\\d|[01]?\\d\\d?)){3})(\\/([1-2][0-9]?|3[0-2]?|[04-9]))?|(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]Z{0,4}){0,4}%[0-9a-zA-Z]+|::(ffff(:0{1,4})?:)?((25[0-5]|(2[0-4]|1?\\d)?\\d)\\.){3}(25[0-5]|(2[0-4]|1?\\d)?\\d)|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1?\\d)?\\d)\\.){3}(25[0-5]|(2[0-4]|1?\\d)?\\d))(\\/(12[0-8]|1[01][0-9]|[0-9][0-9]?))?)(?!.*\\D\\2([^\\d\\/]|$)) *)*$", "type": "text" }, - "BLACKLIST_IGNORE_IP_URLS": { - "context": "global", - "default": "", - "help": "List of URLs, separated with spaces, containing IP/network to ignore in the blacklist.", - "id": "blacklist-ignore-ip-urls", - "label": "Blacklist ignore IP/network URLs", - "regex": "^( *((https?:\\/\\/|file:\\/\\/\\/)[\\-\\w@:%.+~#=]+[\\-\\w\\(\\)!@:%+.~#?&\\/=$]*)(?!.*\\2(?!.)) *)*$", - "type": "text" - }, "BLACKLIST_IGNORE_RDNS": { "context": "multisite", "default": "", @@ -140,15 +86,6 @@ "regex": "^( *(([^ ]+)(?!.*\\3( |$))) *)*$", "type": "text" }, - "BLACKLIST_IGNORE_RDNS_URLS": { - "context": "global", - "default": "", - "help": "List of URLs, separated with spaces, containing reverse DNS suffixes to ignore in the blacklist.", - "id": "blacklist-ignore-rdns-urls", - "label": "Blacklist ignore reverse DNS URLs", - "regex": "^( *((https?:\\/\\/|file:\\/\\/\\/)[\\-\\w@:%.+~#=]+[\\-\\w\\(\\)!@:%+.~#?&\\/=$]*)(?!.*\\2(?!.)) *)*$", - "type": "text" - }, "BLACKLIST_IGNORE_ASN": { "context": "multisite", "default": "", @@ -158,15 +95,6 @@ "regex": "^^( *((ASN?)?(\\d+)\\b(?!.*[SN ]\\4\\b)) *)*$", "type": "text" }, - "BLACKLIST_IGNORE_ASN_URLS": { - "context": "global", - "default": "", - "help": "List of URLs, separated with spaces, containing ASN to ignore in the blacklist.", - "id": "blacklist-ignore-asn-urls", - "label": "Blacklist ignore ASN URLs", - "regex": "^( *((https?:\\/\\/|file:\\/\\/\\/)[\\-\\w@:%.+~#=]+[\\-\\w\\(\\)!@:%+.~#?&\\/=$]*)(?!.*\\2(?!.)) *)*$", - "type": "text" - }, "BLACKLIST_IGNORE_USER_AGENT": { "context": "multisite", "default": "", @@ -176,15 +104,6 @@ "regex": "^.*$", "type": "text" }, - "BLACKLIST_IGNORE_USER_AGENT_URLS": { - "context": "global", - "default": "", - "help": "List of URLs, separated with spaces, containing User-Agent to ignore in the blacklist.", - "id": "blacklist-ignore-user-agent-urls", - "label": "Blacklist ignore User-Agent URLs", - "regex": "^( *((https?:\\/\\/|file:\\/\\/\\/)[\\-\\w@:%.+~#=]+[\\-\\w\\(\\)!@:%+.~#?&\\/=$]*)(?!.*\\2(?!.)) *)*$", - "type": "text" - }, "BLACKLIST_IGNORE_URI": { "context": "multisite", "default": "", @@ -194,6 +113,87 @@ "regex": "^( *(.*)(?!.*\\2(?!.)) *)*$", "type": "text" }, + "BLACKLIST_IP_URLS": { + "context": "global", + "default": "https://www.dan.me.uk/torlist/?exit", + "help": "List of URLs, separated with spaces, containing bad IP/network to block.", + "id": "blacklist-ip-urls", + "label": "Blacklist IP/network URLs", + "regex": "^( *((https?:\\/\\/|file:\\/\\/\\/)[\\-\\w@:%.+~#=]+[\\-\\w\\(\\)!@:%+.~#?&\\/=$]*)(?!.*\\2(?!.)) *)*$", + "type": "text" + }, + "BLACKLIST_RDNS_URLS": { + "context": "global", + "default": "", + "help": "List of URLs, separated with spaces, containing reverse DNS suffixes to block.", + "id": "blacklist-rdns-urls", + "label": "Blacklist reverse DNS URLs", + "regex": "^( *((https?:\\/\\/|file:\\/\\/\\/)[\\-\\w@:%.+~#=]+[\\-\\w\\(\\)!@:%+.~#?&\\/=$]*)(?!.*\\2(?!.)) *)*$", + "type": "text" + }, + "BLACKLIST_ASN_URLS": { + "context": "global", + "default": "", + "help": "List of URLs, separated with spaces, containing ASN to block.", + "id": "blacklist-asn-urls", + "label": "Blacklist ASN URLs", + "regex": "^( *((https?:\\/\\/|file:\\/\\/\\/)[\\-\\w@:%.+~#=]+[\\-\\w\\(\\)!@:%+.~#?&\\/=$]*)(?!.*\\2(?!.)) *)*$", + "type": "text" + }, + "BLACKLIST_USER_AGENT_URLS": { + "context": "global", + "default": "https://raw.githubusercontent.com/mitchellkrogza/nginx-ultimate-bad-bot-blocker/master/_generator_lists/bad-user-agents.list", + "help": "List of URLs, separated with spaces, containing bad User-Agent to block.", + "id": "blacklist-user-agent-urls", + "label": "Blacklist User-Agent URLs", + "regex": "^( *((https?:\\/\\/|file:\\/\\/\\/)[\\-\\w@:%.+~#=]+[\\-\\w\\(\\)!@:%+.~#?&\\/=$]*)(?!.*\\2(?!.)) *)*$", + "type": "text" + }, + "BLACKLIST_URI_URLS": { + "context": "global", + "default": "", + "help": "List of URLs, separated with spaces, containing bad URI to block.", + "id": "blacklist-uri-urls", + "label": "Blacklist URI URLs", + "regex": "^( *((https?:\\/\\/|file:\\/\\/\\/)[\\-\\w@:%.+~#=]+[\\-\\w\\(\\)!@:%+.~#?&\\/=$]*)(?!.*\\2(?!.)) *)*$", + "type": "text" + }, + "BLACKLIST_IGNORE_IP_URLS": { + "context": "global", + "default": "", + "help": "List of URLs, separated with spaces, containing IP/network to ignore in the blacklist.", + "id": "blacklist-ignore-ip-urls", + "label": "Blacklist ignore IP/network URLs", + "regex": "^( *((https?:\\/\\/|file:\\/\\/\\/)[\\-\\w@:%.+~#=]+[\\-\\w\\(\\)!@:%+.~#?&\\/=$]*)(?!.*\\2(?!.)) *)*$", + "type": "text" + }, + "BLACKLIST_IGNORE_RDNS_URLS": { + "context": "global", + "default": "", + "help": "List of URLs, separated with spaces, containing reverse DNS suffixes to ignore in the blacklist.", + "id": "blacklist-ignore-rdns-urls", + "label": "Blacklist ignore reverse DNS URLs", + "regex": "^( *((https?:\\/\\/|file:\\/\\/\\/)[\\-\\w@:%.+~#=]+[\\-\\w\\(\\)!@:%+.~#?&\\/=$]*)(?!.*\\2(?!.)) *)*$", + "type": "text" + }, + "BLACKLIST_IGNORE_ASN_URLS": { + "context": "global", + "default": "", + "help": "List of URLs, separated with spaces, containing ASN to ignore in the blacklist.", + "id": "blacklist-ignore-asn-urls", + "label": "Blacklist ignore ASN URLs", + "regex": "^( *((https?:\\/\\/|file:\\/\\/\\/)[\\-\\w@:%.+~#=]+[\\-\\w\\(\\)!@:%+.~#?&\\/=$]*)(?!.*\\2(?!.)) *)*$", + "type": "text" + }, + "BLACKLIST_IGNORE_USER_AGENT_URLS": { + "context": "global", + "default": "", + "help": "List of URLs, separated with spaces, containing User-Agent to ignore in the blacklist.", + "id": "blacklist-ignore-user-agent-urls", + "label": "Blacklist ignore User-Agent URLs", + "regex": "^( *((https?:\\/\\/|file:\\/\\/\\/)[\\-\\w@:%.+~#=]+[\\-\\w\\(\\)!@:%+.~#?&\\/=$]*)(?!.*\\2(?!.)) *)*$", + "type": "text" + }, "BLACKLIST_IGNORE_URI_URLS": { "context": "global", "default": "", diff --git a/src/common/core/cors/plugin.json b/src/common/core/cors/plugin.json index c00fe3661..c1cfb61bf 100644 --- a/src/common/core/cors/plugin.json +++ b/src/common/core/cors/plugin.json @@ -23,6 +23,33 @@ "regex": "^.*$", "type": "text" }, + "CORS_ALLOW_METHODS": { + "context": "multisite", + "default": "GET, POST, OPTIONS", + "help": "Value of the Access-Control-Allow-Methods header.", + "id": "cors-allow-methods", + "label": "Access-Control-Allow-Methods value", + "regex": "^(\\*|(?![, ])(,? ?(GET|HEAD|POST|PUT|DELETE|CONNECT|OPTIONS|TRACE|PATCH)(?!.*\\3))*)?$", + "type": "text" + }, + "CORS_ALLOW_HEADERS": { + "context": "multisite", + "default": "DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range", + "help": "Value of the Access-Control-Allow-Headers header.", + "id": "cors-allow-headers", + "label": "Access-Control-Allow-Headers value", + "regex": "^(\\*|(?![, ])(,? ?([\\w\\-]+)(?!.*\\3(?!.)))*)?$", + "type": "text" + }, + "CORS_ALLOW_CREDENTIALS": { + "context": "multisite", + "default": "no", + "help": "Send the Access-Control-Allow-Credentials header.", + "id": "cors-allow-credentials", + "label": "Send Access-Control-Allow-Credentials", + "regex": "^(yes|no)$", + "type": "check" + }, "CORS_EXPOSE_HEADERS": { "context": "multisite", "default": "Content-Length,Content-Range", @@ -71,33 +98,6 @@ "regex": "^\\d+$", "type": "text" }, - "CORS_ALLOW_CREDENTIALS": { - "context": "multisite", - "default": "no", - "help": "Send the Access-Control-Allow-Credentials header.", - "id": "cors-allow-credentials", - "label": "Send Access-Control-Allow-Credentials", - "regex": "^(yes|no)$", - "type": "check" - }, - "CORS_ALLOW_METHODS": { - "context": "multisite", - "default": "GET, POST, OPTIONS", - "help": "Value of the Access-Control-Allow-Methods header.", - "id": "cors-allow-methods", - "label": "Access-Control-Allow-Methods value", - "regex": "^(\\*|(?![, ])(,? ?(GET|HEAD|POST|PUT|DELETE|CONNECT|OPTIONS|TRACE|PATCH)(?!.*\\3))*)?$", - "type": "text" - }, - "CORS_ALLOW_HEADERS": { - "context": "multisite", - "default": "DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range", - "help": "Value of the Access-Control-Allow-Headers header.", - "id": "cors-allow-headers", - "label": "Access-Control-Allow-Headers value", - "regex": "^(\\*|(?![, ])(,? ?([\\w\\-]+)(?!.*\\3(?!.)))*)?$", - "type": "text" - }, "CORS_DENY_REQUEST": { "context": "multisite", "default": "yes", diff --git a/src/common/core/greylist/plugin.json b/src/common/core/greylist/plugin.json index bda64f741..38e5dd5ea 100644 --- a/src/common/core/greylist/plugin.json +++ b/src/common/core/greylist/plugin.json @@ -23,13 +23,13 @@ "regex": "^(?! )( *(((\\b25[0-5]|\\b2[0-4]\\d|\\b[01]?\\d\\d?)(\\.(25[0-5]|2[0-4]\\d|[01]?\\d\\d?)){3})(\\/([1-2][0-9]?|3[0-2]?|[04-9]))?|(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]Z{0,4}){0,4}%[0-9a-zA-Z]+|::(ffff(:0{1,4})?:)?((25[0-5]|(2[0-4]|1?\\d)?\\d)\\.){3}(25[0-5]|(2[0-4]|1?\\d)?\\d)|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1?\\d)?\\d)\\.){3}(25[0-5]|(2[0-4]|1?\\d)?\\d))(\\/(12[0-8]|1[01][0-9]|[0-9][0-9]?))?)(?!.*\\D\\2([^\\d\\/]|$)) *)*$", "type": "text" }, - "GREYLIST_IP_URLS": { - "context": "global", + "GREYLIST_RDNS": { + "context": "multisite", "default": "", - "help": "List of URLs, separated with spaces, containing good IP/network to put into the greylist.", - "id": "greylist-ip-urls", - "label": "Greylist IP/network URLs", - "regex": "^( *((https?:\\/\\/|file:\\/\\/\\/)[\\-\\w@:%.+~#=]+[\\-\\w\\(\\)!@:%+.~#?&\\/=$]*)(?!.*\\2(?!.)) *)*$", + "help": "List of reverse DNS suffixes, separated with spaces, to put into the greylist.", + "id": "greylist-rdns", + "label": "Greylist reverse DNS", + "regex": "^( *(([^ ]+)(?!.*\\3( |$))) *)*$", "type": "text" }, "GREYLIST_RDNS_GLOBAL": { @@ -41,24 +41,6 @@ "regex": "^(yes|no)$", "type": "check" }, - "GREYLIST_RDNS": { - "context": "multisite", - "default": "", - "help": "List of reverse DNS suffixes, separated with spaces, to put into the greylist.", - "id": "greylist-rdns", - "label": "Greylist reverse DNS", - "regex": "^( *(([^ ]+)(?!.*\\3( |$))) *)*$", - "type": "text" - }, - "GREYLIST_RDNS_URLS": { - "context": "global", - "default": "", - "help": "List of URLs, separated with spaces, containing reverse DNS suffixes to put into the greylist.", - "id": "greylist-rdns-urls", - "label": "Greylist reverse DNS URLs", - "regex": "^( *((https?:\\/\\/|file:\\/\\/\\/)[\\-\\w@:%.+~#=]+[\\-\\w\\(\\)!@:%+.~#?&\\/=$]*)(?!.*\\2(?!.)) *)*$", - "type": "text" - }, "GREYLIST_ASN": { "context": "multisite", "default": "", @@ -68,15 +50,6 @@ "regex": "^^( *((ASN?)?(\\d+)\\b(?!.*[SN ]\\4\\b)) *)*$", "type": "text" }, - "GREYLIST_ASN_URLS": { - "context": "global", - "default": "", - "help": "List of URLs, separated with spaces, containing ASN to put into the greylist.", - "id": "greylist-asn-urls", - "label": "Greylist ASN URLs", - "regex": "^( *((https?:\\/\\/|file:\\/\\/\\/)[\\-\\w@:%.+~#=]+[\\-\\w\\(\\)!@:%+.~#?&\\/=$]*)(?!.*\\2(?!.)) *)*$", - "type": "text" - }, "GREYLIST_USER_AGENT": { "context": "multisite", "default": "", @@ -86,15 +59,6 @@ "regex": "^.*$", "type": "text" }, - "GREYLIST_USER_AGENT_URLS": { - "context": "global", - "default": "", - "help": "List of URLs, separated with spaces, containing good User-Agent to put into the greylist.", - "id": "greylist-user-agent-urls", - "label": "Greylist User-Agent URLs", - "regex": "^( *((https?:\\/\\/|file:\\/\\/\\/)[\\-\\w@:%.+~#=]+[\\-\\w\\(\\)!@:%+.~#?&\\/=$]*)(?!.*\\2(?!.)) *)*$", - "type": "text" - }, "GREYLIST_URI": { "context": "multisite", "default": "", @@ -104,6 +68,42 @@ "regex": "^.*$", "type": "text" }, + "GREYLIST_IP_URLS": { + "context": "global", + "default": "", + "help": "List of URLs, separated with spaces, containing good IP/network to put into the greylist.", + "id": "greylist-ip-urls", + "label": "Greylist IP/network URLs", + "regex": "^( *((https?:\\/\\/|file:\\/\\/\\/)[\\-\\w@:%.+~#=]+[\\-\\w\\(\\)!@:%+.~#?&\\/=$]*)(?!.*\\2(?!.)) *)*$", + "type": "text" + }, + "GREYLIST_RDNS_URLS": { + "context": "global", + "default": "", + "help": "List of URLs, separated with spaces, containing reverse DNS suffixes to put into the greylist.", + "id": "greylist-rdns-urls", + "label": "Greylist reverse DNS URLs", + "regex": "^( *((https?:\\/\\/|file:\\/\\/\\/)[\\-\\w@:%.+~#=]+[\\-\\w\\(\\)!@:%+.~#?&\\/=$]*)(?!.*\\2(?!.)) *)*$", + "type": "text" + }, + "GREYLIST_ASN_URLS": { + "context": "global", + "default": "", + "help": "List of URLs, separated with spaces, containing ASN to put into the greylist.", + "id": "greylist-asn-urls", + "label": "Greylist ASN URLs", + "regex": "^( *((https?:\\/\\/|file:\\/\\/\\/)[\\-\\w@:%.+~#=]+[\\-\\w\\(\\)!@:%+.~#?&\\/=$]*)(?!.*\\2(?!.)) *)*$", + "type": "text" + }, + "GREYLIST_USER_AGENT_URLS": { + "context": "global", + "default": "", + "help": "List of URLs, separated with spaces, containing good User-Agent to put into the greylist.", + "id": "greylist-user-agent-urls", + "label": "Greylist User-Agent URLs", + "regex": "^( *((https?:\\/\\/|file:\\/\\/\\/)[\\-\\w@:%.+~#=]+[\\-\\w\\(\\)!@:%+.~#?&\\/=$]*)(?!.*\\2(?!.)) *)*$", + "type": "text" + }, "GREYLIST_URI_URLS": { "context": "global", "default": "", diff --git a/src/common/core/realip/plugin.json b/src/common/core/realip/plugin.json index 86f842078..667a9ab43 100644 --- a/src/common/core/realip/plugin.json +++ b/src/common/core/realip/plugin.json @@ -32,15 +32,6 @@ "regex": "^(?! )( *(((\\b25[0-5]|\\b2[0-4]\\d|\\b[01]?\\d\\d?)(\\.(25[0-5]|2[0-4]\\d|[01]?\\d\\d?)){3})(\\/([1-2][0-9]?|3[0-2]?|[04-9]))?|(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]Z{0,4}){0,4}%[0-9a-zA-Z]+|::(ffff(:0{1,4})?:)?((25[0-5]|(2[0-4]|1?\\d)?\\d)\\.){3}(25[0-5]|(2[0-4]|1?\\d)?\\d)|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1?\\d)?\\d)\\.){3}(25[0-5]|(2[0-4]|1?\\d)?\\d))(\\/(12[0-8]|1[01][0-9]|[0-9][0-9]?))?)(?!.*\\D\\2([^\\d\\/]|$)) *)*$", "type": "text" }, - "REAL_IP_FROM_URLS": { - "context": "global", - "default": "", - "help": "List of URLs containing trusted IPs / networks, separated with spaces, where proxied requests come from.", - "id": "real-ip-from-urls", - "label": "Real IP from URLs", - "regex": "^( *((https?:\\/\\/|file:\\/\\/\\/)[\\-\\w@:%.+~#=]+[\\-\\w\\(\\)!@:%+.~#?&\\/=$]*)(?!.*\\2(?!.)) *)*$", - "type": "text" - }, "REAL_IP_HEADER": { "context": "multisite", "default": "X-Forwarded-For", @@ -58,6 +49,15 @@ "label": "Real IP recursive", "regex": "^(yes|no)$", "type": "check" + }, + "REAL_IP_FROM_URLS": { + "context": "global", + "default": "", + "help": "List of URLs containing trusted IPs / networks, separated with spaces, where proxied requests come from.", + "id": "real-ip-from-urls", + "label": "Real IP from URLs", + "regex": "^( *((https?:\\/\\/|file:\\/\\/\\/)[\\-\\w@:%.+~#=]+[\\-\\w\\(\\)!@:%+.~#?&\\/=$]*)(?!.*\\2(?!.)) *)*$", + "type": "text" } }, "jobs": [ diff --git a/src/common/core/redis/plugin.json b/src/common/core/redis/plugin.json index 28d0acc86..ee39a4370 100644 --- a/src/common/core/redis/plugin.json +++ b/src/common/core/redis/plugin.json @@ -68,24 +68,6 @@ "regex": "^[0-9]+$", "type": "text" }, - "REDIS_KEEPALIVE_IDLE": { - "context": "global", - "default": "30000", - "help": "Max idle time (in ms) before closing redis connection in the pool.", - "id": "redis-keepalive-idle", - "label": "Redis keepalive idle (ms)", - "regex": "^[0-9]+$", - "type": "text" - }, - "REDIS_KEEPALIVE_POOL": { - "context": "global", - "default": "10", - "help": "Max number of redis connection(s) kept in the pool.", - "id": "redis-keepalive-pool", - "label": "Redis keepalive pool", - "regex": "^[0-9]+$", - "type": "text" - }, "REDIS_USERNAME": { "context": "global", "default": "", @@ -139,6 +121,24 @@ "label": "Redis sentinel master", "regex": "^.*$", "type": "text" + }, + "REDIS_KEEPALIVE_IDLE": { + "context": "global", + "default": "30000", + "help": "Max idle time (in ms) before closing redis connection in the pool.", + "id": "redis-keepalive-idle", + "label": "Redis keepalive idle (ms)", + "regex": "^[0-9]+$", + "type": "text" + }, + "REDIS_KEEPALIVE_POOL": { + "context": "global", + "default": "10", + "help": "Max number of redis connection(s) kept in the pool.", + "id": "redis-keepalive-pool", + "label": "Redis keepalive pool", + "regex": "^[0-9]+$", + "type": "text" } } } diff --git a/src/common/core/reverseproxy/plugin.json b/src/common/core/reverseproxy/plugin.json index eac974aed..a93ec5c65 100644 --- a/src/common/core/reverseproxy/plugin.json +++ b/src/common/core/reverseproxy/plugin.json @@ -23,6 +23,15 @@ "regex": "^(yes|no)$", "type": "check" }, + "REVERSE_PROXY_CUSTOM_HOST": { + "context": "multisite", + "default": "", + "help": "Override Host header sent to upstream server.", + "id": "reverse-proxy-custom-host", + "label": "Reverse proxy custom host", + "regex": "^.*$", + "type": "text" + }, "REVERSE_PROXY_HOST": { "context": "multisite", "default": "", @@ -123,6 +132,46 @@ "type": "text", "multiple": "reverse-proxy" }, + "REVERSE_PROXY_CONNECT_TIMEOUT": { + "context": "multisite", + "default": "60s", + "help": "Timeout when connecting to the proxied resource.", + "id": "reverse-proxy-connect-timeout", + "label": "Reverse proxy connect timeout", + "regex": "^\\d+(ms?|[shdwMy])$", + "type": "text", + "multiple": "reverse-proxy" + }, + "REVERSE_PROXY_READ_TIMEOUT": { + "context": "multisite", + "default": "60s", + "help": "Timeout when reading from the proxied resource.", + "id": "reverse-proxy-read-timeout", + "label": "Reverse proxy read timeout", + "regex": "^\\d+(ms?|[shdwMy])$", + "type": "text", + "multiple": "reverse-proxy" + }, + "REVERSE_PROXY_SEND_TIMEOUT": { + "context": "multisite", + "default": "60s", + "help": "Timeout when sending to the proxied resource.", + "id": "reverse-proxy-send-timeout", + "label": "Reverse proxy send timeout", + "regex": "^\\d+(ms?|[shdwMy])$", + "type": "text", + "multiple": "reverse-proxy" + }, + "REVERSE_PROXY_INCLUDES": { + "context": "multisite", + "default": "", + "help": "Additional configuration to include in the location block, separated with spaces.", + "id": "reverse-proxy-includes", + "label": "Reverse proxy includes", + "regex": "^(?! )( ?(\\w+)(?!.*\\b\\2\\b))*$", + "type": "text", + "multiple": "reverse-proxy" + }, "USE_PROXY_CACHE": { "context": "multisite", "default": "no", @@ -212,55 +261,6 @@ "label": "Reverse proxy bypass", "regex": "^.*$", "type": "text" - }, - "REVERSE_PROXY_CONNECT_TIMEOUT": { - "context": "multisite", - "default": "60s", - "help": "Timeout when connecting to the proxied resource.", - "id": "reverse-proxy-connect-timeout", - "label": "Reverse proxy connect timeout", - "regex": "^\\d+(ms?|[shdwMy])$", - "type": "text", - "multiple": "reverse-proxy" - }, - "REVERSE_PROXY_READ_TIMEOUT": { - "context": "multisite", - "default": "60s", - "help": "Timeout when reading from the proxied resource.", - "id": "reverse-proxy-read-timeout", - "label": "Reverse proxy read timeout", - "regex": "^\\d+(ms?|[shdwMy])$", - "type": "text", - "multiple": "reverse-proxy" - }, - "REVERSE_PROXY_SEND_TIMEOUT": { - "context": "multisite", - "default": "60s", - "help": "Timeout when sending to the proxied resource.", - "id": "reverse-proxy-send-timeout", - "label": "Reverse proxy send timeout", - "regex": "^\\d+(ms?|[shdwMy])$", - "type": "text", - "multiple": "reverse-proxy" - }, - "REVERSE_PROXY_INCLUDES": { - "context": "multisite", - "default": "", - "help": "Additional configuration to include in the location block, separated with spaces.", - "id": "reverse-proxy-includes", - "label": "Reverse proxy includes", - "regex": "^(?! )( ?(\\w+)(?!.*\\b\\2\\b))*$", - "type": "text", - "multiple": "reverse-proxy" - }, - "REVERSE_PROXY_CUSTOM_HOST": { - "context": "multisite", - "default": "", - "help": "Override Host header sent to upstream server.", - "id": "reverse-proxy-custom-host", - "label": "Reverse proxy custom host", - "regex": "^.*$", - "type": "text" } } } diff --git a/src/common/core/whitelist/plugin.json b/src/common/core/whitelist/plugin.json index 4c2433676..c3020783b 100644 --- a/src/common/core/whitelist/plugin.json +++ b/src/common/core/whitelist/plugin.json @@ -23,13 +23,13 @@ "regex": "^(?! )( *(((\\b25[0-5]|\\b2[0-4]\\d|\\b[01]?\\d\\d?)(\\.(25[0-5]|2[0-4]\\d|[01]?\\d\\d?)){3})(\\/([1-2][0-9]?|3[0-2]?|[04-9]))?|(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]Z{0,4}){0,4}%[0-9a-zA-Z]+|::(ffff(:0{1,4})?:)?((25[0-5]|(2[0-4]|1?\\d)?\\d)\\.){3}(25[0-5]|(2[0-4]|1?\\d)?\\d)|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1?\\d)?\\d)\\.){3}(25[0-5]|(2[0-4]|1?\\d)?\\d))(\\/(12[0-8]|1[01][0-9]|[0-9][0-9]?))?)(?!.*\\D\\2([^\\d\\/]|$)) *)*$", "type": "text" }, - "WHITELIST_IP_URLS": { - "context": "global", - "default": "", - "help": "List of URLs, separated with spaces, containing good IP/network to whitelist.", - "id": "whitelist-ip-urls", - "label": "Whitelist IP/network URLs", - "regex": "^( *((https?:\\/\\/|file:\\/\\/\\/)[\\-\\w@:%.+~#=]+[\\-\\w\\(\\)!@:%+.~#?&\\/=$]*)(?!.*\\2(?!.)) *)*$", + "WHITELIST_RDNS": { + "context": "multisite", + "default": ".google.com .googlebot.com .yandex.ru .yandex.net .yandex.com .search.msn.com .baidu.com .baidu.jp .crawl.yahoo.net .fwd.linkedin.com .twitter.com .twttr.com .discord.com", + "help": "List of reverse DNS suffixes, separated with spaces, to whitelist.", + "id": "whitelist-rdns", + "label": "Whitelist reverse DNS", + "regex": "^( *(([^ ]+)(?!.*\\3( |$))) *)*$", "type": "text" }, "WHITELIST_RDNS_GLOBAL": { @@ -41,24 +41,6 @@ "regex": "^(yes|no)$", "type": "check" }, - "WHITELIST_RDNS": { - "context": "multisite", - "default": ".google.com .googlebot.com .yandex.ru .yandex.net .yandex.com .search.msn.com .baidu.com .baidu.jp .crawl.yahoo.net .fwd.linkedin.com .twitter.com .twttr.com .discord.com", - "help": "List of reverse DNS suffixes, separated with spaces, to whitelist.", - "id": "whitelist-rdns", - "label": "Whitelist reverse DNS", - "regex": "^( *(([^ ]+)(?!.*\\3( |$))) *)*$", - "type": "text" - }, - "WHITELIST_RDNS_URLS": { - "context": "global", - "default": "", - "help": "List of URLs, separated with spaces, containing reverse DNS suffixes to whitelist.", - "id": "whitelist-rdns-urls", - "label": "Whitelist reverse DNS URLs", - "regex": "^( *((https?:\\/\\/|file:\\/\\/\\/)[\\-\\w@:%.+~#=]+[\\-\\w\\(\\)!@:%+.~#?&\\/=$]*)(?!.*\\2(?!.)) *)*$", - "type": "text" - }, "WHITELIST_ASN": { "context": "multisite", "default": "32934", @@ -68,15 +50,6 @@ "regex": "^^( *((ASN?)?(\\d+)\\b(?!.*[SN ]\\4\\b)) *)*$", "type": "text" }, - "WHITELIST_ASN_URLS": { - "context": "global", - "default": "", - "help": "List of URLs, separated with spaces, containing ASN to whitelist.", - "id": "whitelist-asn-urls", - "label": "Whitelist ASN URLs", - "regex": "^( *((https?:\\/\\/|file:\\/\\/\\/)[\\-\\w@:%.+~#=]+[\\-\\w\\(\\)!@:%+.~#?&\\/=$]*)(?!.*\\2(?!.)) *)*$", - "type": "text" - }, "WHITELIST_USER_AGENT": { "context": "multisite", "default": "", @@ -86,15 +59,6 @@ "regex": "^.*$", "type": "text" }, - "WHITELIST_USER_AGENT_URLS": { - "context": "global", - "default": "", - "help": "List of URLs, separated with spaces, containing good User-Agent to whitelist.", - "id": "whitelist-user-agent-urls", - "label": "Whitelist User-Agent URLs", - "regex": "^( *((https?:\\/\\/|file:\\/\\/\\/)[\\-\\w@:%.+~#=]+[\\-\\w\\(\\)!@:%+.~#?&\\/=$]*)(?!.*\\2(?!.)) *)*$", - "type": "text" - }, "WHITELIST_URI": { "context": "multisite", "default": "", @@ -104,6 +68,42 @@ "regex": "^( *(.*)(?!.*\\2(?!.)) *)*$", "type": "text" }, + "WHITELIST_IP_URLS": { + "context": "global", + "default": "", + "help": "List of URLs, separated with spaces, containing good IP/network to whitelist.", + "id": "whitelist-ip-urls", + "label": "Whitelist IP/network URLs", + "regex": "^( *((https?:\\/\\/|file:\\/\\/\\/)[\\-\\w@:%.+~#=]+[\\-\\w\\(\\)!@:%+.~#?&\\/=$]*)(?!.*\\2(?!.)) *)*$", + "type": "text" + }, + "WHITELIST_RDNS_URLS": { + "context": "global", + "default": "", + "help": "List of URLs, separated with spaces, containing reverse DNS suffixes to whitelist.", + "id": "whitelist-rdns-urls", + "label": "Whitelist reverse DNS URLs", + "regex": "^( *((https?:\\/\\/|file:\\/\\/\\/)[\\-\\w@:%.+~#=]+[\\-\\w\\(\\)!@:%+.~#?&\\/=$]*)(?!.*\\2(?!.)) *)*$", + "type": "text" + }, + "WHITELIST_ASN_URLS": { + "context": "global", + "default": "", + "help": "List of URLs, separated with spaces, containing ASN to whitelist.", + "id": "whitelist-asn-urls", + "label": "Whitelist ASN URLs", + "regex": "^( *((https?:\\/\\/|file:\\/\\/\\/)[\\-\\w@:%.+~#=]+[\\-\\w\\(\\)!@:%+.~#?&\\/=$]*)(?!.*\\2(?!.)) *)*$", + "type": "text" + }, + "WHITELIST_USER_AGENT_URLS": { + "context": "global", + "default": "", + "help": "List of URLs, separated with spaces, containing good User-Agent to whitelist.", + "id": "whitelist-user-agent-urls", + "label": "Whitelist User-Agent URLs", + "regex": "^( *((https?:\\/\\/|file:\\/\\/\\/)[\\-\\w@:%.+~#=]+[\\-\\w\\(\\)!@:%+.~#?&\\/=$]*)(?!.*\\2(?!.)) *)*$", + "type": "text" + }, "WHITELIST_URI_URLS": { "context": "global", "default": "", From ecaeb420eae518836f3df9af5121610809009ddf Mon Sep 17 00:00:00 2001 From: Jordan Blasenhauer Date: Fri, 3 May 2024 12:46:03 +0200 Subject: [PATCH 8/8] fix and enhance popover multisite --- src/ui/static/css/dashboard.css | 2 +- src/ui/styles.css | 10 +++++++++- src/ui/templates/setting_header.html | 6 +++--- 3 files changed, 13 insertions(+), 5 deletions(-) diff --git a/src/ui/static/css/dashboard.css b/src/ui/static/css/dashboard.css index c930bf523..527ffd4d6 100644 --- a/src/ui/static/css/dashboard.css +++ b/src/ui/static/css/dashboard.css @@ -1 +1 @@ -/*! tailwindcss v3.4.1 | MIT License | https://tailwindcss.com*/*,:after,:before{box-sizing:border-box;border:0 solid #e9ecef}:after,:before{--tw-content:""}:host,html{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:Open Sans;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:initial}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button;background-color:initial;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:initial}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}fieldset{margin:0}fieldset,legend{padding:0}menu,ol,ul{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#ced4da}input::placeholder,textarea::placeholder{opacity:1;color:#ced4da}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]{display:none}*,::backdrop,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:#5e72e480;--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }.\!container{width:100%!important;margin-right:auto!important;margin-left:auto!important;padding-right:1.5rem!important;padding-left:1.5rem!important}.container{width:100%;margin-right:auto;margin-left:auto;padding-right:1.5rem;padding-left:1.5rem}@media (min-width:340px){.\!container{max-width:340px!important}.container{max-width:340px}}@media (min-width:576px){.\!container{max-width:576px!important}.container{max-width:576px}}@media (min-width:768px){.\!container{max-width:768px!important}.container{max-width:768px}}@media (min-width:992px){.\!container{max-width:992px!important}.container{max-width:992px}}@media (min-width:1200px){.\!container{max-width:1200px!important}.container{max-width:1200px}}@media (min-width:1320px){.\!container{max-width:1320px!important}.container{max-width:1320px}}@media (min-width:1920px){.\!container{max-width:1920px!important}.container{max-width:1920px}}a{letter-spacing:-.025rem}hr{margin:1rem 0;border:0;opacity:.25}img{max-width:none}label{display:inline-block}p{line-height:1.625;font-weight:400;margin-bottom:1rem}small{font-size:.875em}svg{display:inline}table{border-collapse:inherit}h1,h2,h3,h4,h5,h6{margin-bottom:.5rem;color:#344767}h1,h2,h3,h4{letter-spacing:-.05rem}h1,h2,h3{font-weight:700}h4,h5,h6{font-weight:600}h1{font-size:3rem;line-height:1.25}h2{font-size:2.25rem;line-height:1.3}h3{font-size:1.875rem}h3,h4{line-height:1.375}h4{font-size:1.5rem}h5{font-size:1.25rem;line-height:1.375}h6{font-size:1rem;line-height:1.625}.sr-only{position:absolute!important;width:1px!important;height:1px!important;padding:0!important;margin:-1px!important;overflow:hidden!important;clip:rect(0,0,0,0)!important;white-space:nowrap!important;border-width:0!important}.pointer-events-none{pointer-events:none!important}.visible{visibility:visible!important}.invisible{visibility:hidden!important}.collapse{visibility:collapse!important}.static{position:static!important}.fixed{position:fixed!important}.absolute{position:absolute!important}.relative{position:relative!important}.inset-y-0{top:0!important;bottom:0!important}.-left-full{left:-100%!important}.-right-0{right:0!important}.-right-1{right:-.25rem!important}.bottom-0{bottom:0!important}.bottom-1{bottom:.25rem!important}.bottom-1\.5{bottom:.375rem!important}.bottom-2{bottom:.5rem!important}.bottom-24{bottom:6rem!important}.bottom-3{bottom:.75rem!important}.bottom-4{bottom:1rem!important}.bottom-6{bottom:1.5rem!important}.bottom-7{bottom:1.75rem!important}.bottom-8{bottom:2rem!important}.left-0{left:0!important}.left-1{left:.25rem!important}.left-16{left:4rem!important}.left-20{left:5rem!important}.left-24{left:6rem!important}.left-32{left:8rem!important}.left-4{left:1rem!important}.left-40{left:10rem!important}.left-48{left:12rem!important}.left-8{left:2rem!important}.left-auto{left:auto!important}.left-full{left:100%!important}.right-0{right:0!important}.right-12{right:3rem!important}.right-2{right:.5rem!important}.right-20{right:5rem!important}.right-4{right:1rem!important}.right-5{right:1.25rem!important}.right-6{right:1.5rem!important}.right-7{right:1.75rem!important}.right-8{right:2rem!important}.right-\[3\.25rem\]{right:3.25rem!important}.top-0{top:0!important}.top-1{top:.25rem!important}.top-1\.5{top:.375rem!important}.top-1\/2{top:50%!important}.top-10{top:2.5rem!important}.top-12{top:3rem!important}.top-14{top:3.5rem!important}.top-16{top:4rem!important}.top-2{top:.5rem!important}.top-24{top:6rem!important}.top-3{top:.75rem!important}.top-36{top:9rem!important}.top-4{top:1rem!important}.top-6{top:1.5rem!important}.top-7{top:1.75rem!important}.top-8{top:2rem!important}.top-\[38\%\]{top:38%!important}.top-\[4\.5rem\]{top:4.5rem!important}.top-\[52\%\]{top:52%!important}.top-\[55\%\]{top:55%!important}.top-\[8\.2rem\]{top:8.2rem!important}.-z-10{z-index:-10!important}.z-0{z-index:0!important}.z-10{z-index:10!important}.z-100{z-index:100!important}.z-110{z-index:110!important}.z-20{z-index:20!important}.z-990{z-index:990!important}.z-\[10000\]{z-index:10000!important}.z-\[1000\]{z-index:1000!important}.z-\[1001\]{z-index:1001!important}.z-\[20\]{z-index:20!important}.z-sticky{z-index:1020!important}.order-1{order:1!important}.order-2{order:2!important}.order-3{order:3!important}.order-4{order:4!important}.col-span-1{grid-column:span 1/span 1!important}.col-span-10{grid-column:span 10/span 10!important}.col-span-11{grid-column:span 11/span 11!important}.col-span-12{grid-column:span 12/span 12!important}.col-span-2{grid-column:span 2/span 2!important}.col-span-3{grid-column:span 3/span 3!important}.col-span-4{grid-column:span 4/span 4!important}.col-span-5{grid-column:span 5/span 5!important}.col-span-6{grid-column:span 6/span 6!important}.col-span-9{grid-column:span 9/span 9!important}.float-right{float:right!important}.float-left{float:left!important}.m-0{margin:0!important}.m-1{margin:.25rem!important}.m-2{margin:.5rem!important}.mx-0{margin-left:0!important;margin-right:0!important}.mx-1{margin-left:.25rem!important;margin-right:.25rem!important}.mx-1\.5{margin-left:.375rem!important;margin-right:.375rem!important}.mx-2{margin-left:.5rem!important;margin-right:.5rem!important}.mx-2\.5{margin-left:.625rem!important;margin-right:.625rem!important}.mx-4{margin-left:1rem!important;margin-right:1rem!important}.mx-auto{margin-left:auto!important;margin-right:auto!important}.my-0{margin-top:0!important;margin-bottom:0!important}.my-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-3{margin-top:.75rem!important;margin-bottom:.75rem!important}.my-4{margin-top:1rem!important;margin-bottom:1rem!important}.mb-0{margin-bottom:0!important}.mb-0\.5{margin-bottom:.125rem!important}.mb-1{margin-bottom:.25rem!important}.mb-2{margin-bottom:.5rem!important}.mb-2\.5{margin-bottom:.625rem!important}.mb-3{margin-bottom:.75rem!important}.mb-4{margin-bottom:1rem!important}.mb-6{margin-bottom:1.5rem!important}.mb-7{margin-bottom:1.75rem!important}.mb-8{margin-bottom:2rem!important}.ml-0{margin-left:0!important}.ml-1{margin-left:.25rem!important}.ml-12{margin-left:3rem!important}.ml-2{margin-left:.5rem!important}.ml-3{margin-left:.75rem!important}.ml-4{margin-left:1rem!important}.mr-1{margin-right:.25rem!important}.mr-12{margin-right:3rem!important}.mr-2{margin-right:.5rem!important}.mr-3{margin-right:.75rem!important}.mr-4{margin-right:1rem!important}.mt-0{margin-top:0!important}.mt-0\.5{margin-top:.125rem!important}.mt-1{margin-top:.25rem!important}.mt-1\.5{margin-top:.375rem!important}.mt-10{margin-top:2.5rem!important}.mt-12{margin-top:3rem!important}.mt-16{margin-top:4rem!important}.mt-2{margin-top:.5rem!important}.mt-3{margin-top:.75rem!important}.mt-4{margin-top:1rem!important}.mt-5{margin-top:1.25rem!important}.mt-6{margin-top:1.5rem!important}.mt-8{margin-top:2rem!important}.mt-\[15vh\]{margin-top:15vh!important}.mt-\[4\.5rem\]{margin-top:4.5rem!important}.block{display:block!important}.inline-block{display:inline-block!important}.inline{display:inline!important}.flex{display:flex!important}.table{display:table!important}.grid{display:grid!important}.list-item{display:list-item!important}.\!hidden,.hidden{display:none!important}.h-1{height:.25rem!important}.h-1\/3{height:33.333333%!important}.h-12{height:3rem!important}.h-14{height:3.5rem!important}.h-3{height:.75rem!important}.h-32{height:8rem!important}.h-4{height:1rem!important}.h-4\.5{height:1.125rem!important}.h-40{height:10rem!important}.h-5{height:1.25rem!important}.h-5\.5{height:1.375rem!important}.h-50{height:12.5rem!important}.h-6{height:1.5rem!important}.h-7{height:1.75rem!important}.h-8{height:2rem!important}.h-96{height:24rem!important}.h-\[2\.5rem\]{height:2.5rem!important}.h-\[250px\]{height:250px!important}.h-\[3\.5rem\]{height:3.5rem!important}.h-\[4rem\]{height:4rem!important}.h-\[90vh\]{height:90vh!important}.h-fit{height:-moz-fit-content!important;height:fit-content!important}.h-full{height:100%!important}.h-px{height:1px!important}.h-screen{height:100vh!important}.max-h-100{max-height:25rem!important}.max-h-30{max-height:7.5rem!important}.max-h-80{max-height:20rem!important}.max-h-\[200px\]{max-height:200px!important}.max-h-\[250px\]{max-height:250px!important}.max-h-\[350px\]{max-height:350px!important}.max-h-\[400px\]{max-height:400px!important}.max-h-\[70vh\]{max-height:70vh!important}.max-h-\[90vh\]{max-height:90vh!important}.max-h-\[95vh\]{max-height:95vh!important}.max-h-screen{max-height:100vh!important}.min-h-12{min-height:3rem!important}.min-h-20{min-height:5rem!important}.min-h-52{min-height:13rem!important}.min-h-6{min-height:1.5rem!important}.min-h-\[100px\]{min-height:100px!important}.min-h-\[200px\]{min-height:200px!important}.min-h-\[350px\]{min-height:350px!important}.min-h-\[400px\]{min-height:400px!important}.min-h-\[55vh\]{min-height:55vh!important}.min-h-\[75px\]{min-height:75px!important}.min-h-\[85vh\]{min-height:85vh!important}.min-h-screen{min-height:100vh!important}.w-1{width:.25rem!important}.w-10{width:2.5rem!important}.w-11\/12{width:91.666667%!important}.w-28{width:7rem!important}.w-3{width:.75rem!important}.w-32{width:8rem!important}.w-4{width:1rem!important}.w-4\.5{width:1.125rem!important}.w-40{width:10rem!important}.w-48{width:12rem!important}.w-5{width:1.25rem!important}.w-5\.5{width:1.375rem!important}.w-50{width:12.5rem!important}.w-6{width:1.5rem!important}.w-7{width:1.75rem!important}.w-8{width:2rem!important}.w-80{width:20rem!important}.w-90{width:22.5rem!important}.w-\[2\.5rem\]{width:2.5rem!important}.w-\[50vw\]{width:50vw!important}.w-auto{width:auto!important}.w-fit{width:-moz-fit-content!important;width:fit-content!important}.w-full{width:100%!important}.w-screen{width:100vw!important}.min-w-0{min-width:0!important}.min-w-\[1150px\]{min-width:1150px!important}.min-w-\[1300px\]{min-width:1300px!important}.min-w-\[200px\]{min-width:200px!important}.min-w-\[300px\]{min-width:300px!important}.min-w-\[600px\]{min-width:600px!important}.min-w-\[800px\]{min-width:800px!important}.min-w-\[900px\]{min-width:900px!important}.max-w-40{max-width:10rem!important}.max-w-60{max-width:15rem!important}.max-w-64{max-width:16rem!important}.max-w-\[1000px\]{max-width:1000px!important}.max-w-\[150px\]{max-width:150px!important}.max-w-\[1920px\]{max-width:1920px!important}.max-w-\[300px\]{max-width:300px!important}.max-w-\[400px\]{max-width:400px!important}.max-w-\[450px\]{max-width:450px!important}.max-w-\[550px\]{max-width:550px!important}.max-w-\[650px\]{max-width:650px!important}.max-w-\[700px\]{max-width:700px!important}.max-w-full{max-width:100%!important}.max-w-none{max-width:none!important}.max-w-screen-lg{max-width:992px!important}.flex-auto{flex:1 1 auto!important}.grow{flex-grow:1!important}.basis-full{flex-basis:100%!important}.border-collapse{border-collapse:collapse!important}.-translate-x-1{--tw-translate-x:-0.25rem!important}.-translate-x-1,.-translate-x-1\.5{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}.-translate-x-1\.5{--tw-translate-x:-0.375rem!important}.-translate-x-36{--tw-translate-x:-9rem!important}.-translate-x-36,.-translate-x-40{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}.-translate-x-40{--tw-translate-x:-10rem!important}.-translate-x-48{--tw-translate-x:-12rem!important}.-translate-x-48,.-translate-x-52{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}.-translate-x-52{--tw-translate-x:-13rem!important}.-translate-x-56{--tw-translate-x:-14rem!important}.-translate-x-56,.-translate-x-60{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}.-translate-x-60{--tw-translate-x:-15rem!important}.-translate-x-64{--tw-translate-x:-16rem!important}.-translate-x-64,.-translate-x-72{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}.-translate-x-72{--tw-translate-x:-18rem!important}.-translate-x-full{--tw-translate-x:-100%!important}.-translate-x-full,.-translate-y-0{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}.-translate-y-0{--tw-translate-y:-0px!important}.-translate-y-0\.4{--tw-translate-y:-0.1rem!important}.-translate-y-0\.4,.-translate-y-0\.5{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}.-translate-y-0\.5{--tw-translate-y:-0.125rem!important}.-translate-y-1{--tw-translate-y:-0.25rem!important}.-translate-y-1,.-translate-y-12{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}.-translate-y-12{--tw-translate-y:-3rem!important}.-translate-y-16{--tw-translate-y:-4rem!important}.-translate-y-16,.-translate-y-2{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}.-translate-y-2{--tw-translate-y:-0.5rem!important}.-translate-y-20{--tw-translate-y:-5rem!important}.-translate-y-20,.-translate-y-24{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}.-translate-y-24{--tw-translate-y:-6rem!important}.-translate-y-28{--tw-translate-y:-7rem!important}.-translate-y-28,.-translate-y-36{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}.-translate-y-36{--tw-translate-y:-9rem!important}.-translate-y-4{--tw-translate-y:-1rem!important}.-translate-y-4,.-translate-y-6{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}.-translate-y-6{--tw-translate-y:-1.5rem!important}.-translate-y-8{--tw-translate-y:-2rem!important}.-translate-y-8,.translate-x-0{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}.translate-x-0{--tw-translate-x:0px!important}.translate-x-0\.5{--tw-translate-x:0.125rem!important}.translate-x-0\.5,.translate-x-1{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}.translate-x-1{--tw-translate-x:0.25rem!important}.translate-x-16{--tw-translate-x:4rem!important}.translate-x-16,.translate-x-2{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}.translate-x-2{--tw-translate-x:0.5rem!important}.translate-x-24{--tw-translate-x:6rem!important}.translate-x-24,.translate-x-3{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}.translate-x-3{--tw-translate-x:0.75rem!important}.translate-x-32{--tw-translate-x:8rem!important}.translate-x-32,.translate-x-4{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}.translate-x-4{--tw-translate-x:1rem!important}.translate-x-40{--tw-translate-x:10rem!important}.translate-x-40,.translate-x-48{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}.translate-x-48{--tw-translate-x:12rem!important}.translate-x-52{--tw-translate-x:13rem!important}.translate-x-52,.translate-x-56{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}.translate-x-56{--tw-translate-x:14rem!important}.translate-x-60{--tw-translate-x:15rem!important}.translate-x-60,.translate-x-90{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}.translate-x-90{--tw-translate-x:22.5rem!important}.translate-x-\[3rem\]{--tw-translate-x:3rem!important}.translate-x-\[3rem\],.translate-y-0{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}.translate-y-0{--tw-translate-y:0px!important}.translate-y-0\.5{--tw-translate-y:0.125rem!important}.translate-y-0\.5,.translate-y-1{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}.translate-y-1{--tw-translate-y:0.25rem!important}.translate-y-16{--tw-translate-y:4rem!important}.translate-y-16,.translate-y-2{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}.translate-y-2{--tw-translate-y:0.5rem!important}.-rotate-12{--tw-rotate:-12deg!important}.-rotate-12,.rotate-12{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}.rotate-12{--tw-rotate:12deg!important}.rotate-180{--tw-rotate:180deg!important}.rotate-180,.rotate-90{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}.rotate-90{--tw-rotate:90deg!important}.scale-105{--tw-scale-x:1.05!important;--tw-scale-y:1.05!important}.scale-105,.scale-110{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}.scale-110{--tw-scale-x:1.1!important;--tw-scale-y:1.1!important}.scale-50{--tw-scale-x:.5!important;--tw-scale-y:.5!important}.scale-50,.scale-75{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}.scale-75{--tw-scale-x:.75!important;--tw-scale-y:.75!important}.scale-90{--tw-scale-x:.9!important;--tw-scale-y:.9!important}.scale-90,.scale-\[0\.6\]{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}.scale-\[0\.6\]{--tw-scale-x:0.6!important;--tw-scale-y:0.6!important}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}.cursor-not-allowed{cursor:not-allowed!important}.cursor-pointer{cursor:pointer!important}.cursor-text{cursor:text!important}.select-none{-webkit-user-select:none!important;-moz-user-select:none!important;user-select:none!important}.resize{resize:both!important}.list-none{list-style-type:none!important}.appearance-none{-webkit-appearance:none!important;-moz-appearance:none!important;appearance:none!important}.grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))!important}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))!important}.flex-row{flex-direction:row!important}.flex-col{flex-direction:column!important}.flex-wrap{flex-wrap:wrap!important}.items-start{align-items:flex-start!important}.items-end{align-items:flex-end!important}.items-center{align-items:center!important}.justify-start{justify-content:flex-start!important}.justify-end{justify-content:flex-end!important}.justify-center{justify-content:center!important}.justify-between{justify-content:space-between!important}.justify-items-center{justify-items:center!important}.gap-2{gap:.5rem!important}.gap-3{gap:.75rem!important}.gap-4{gap:1rem!important}.gap-8{gap:2rem!important}.gap-x-4{-moz-column-gap:1rem!important;column-gap:1rem!important}.gap-y-2{row-gap:.5rem!important}.gap-y-3{row-gap:.75rem!important}.gap-y-4{row-gap:1rem!important}.overflow-auto{overflow:auto!important}.overflow-hidden{overflow:hidden!important}.overflow-x-auto{overflow-x:auto!important}.overflow-y-auto{overflow-y:auto!important}.overflow-x-hidden{overflow-x:hidden!important}.whitespace-normal{white-space:normal!important}.whitespace-nowrap{white-space:nowrap!important}.break-words{overflow-wrap:break-word!important}.rounded,.rounded-1{border-radius:.25rem!important}.rounded-1\.4{border-radius:.35rem!important}.rounded-10{border-radius:2.5rem!important}.rounded-2xl{border-radius:1rem!important}.rounded-circle{border-radius:50%!important}.rounded-full{border-radius:9999px!important}.rounded-lg{border-radius:.5rem!important}.rounded-none{border-radius:0!important}.rounded-xl{border-radius:.75rem!important}.rounded-b{border-bottom-right-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.rounded-b-lg{border-bottom-left-radius:.5rem!important}.rounded-b-lg,.rounded-r-lg{border-bottom-right-radius:.5rem!important}.rounded-r-lg{border-top-right-radius:.5rem!important}.rounded-t{border-top-left-radius:.25rem!important;border-top-right-radius:.25rem!important}.rounded-t-2xl{border-top-left-radius:1rem!important;border-top-right-radius:1rem!important}.rounded-t-lg{border-top-left-radius:.5rem!important;border-top-right-radius:.5rem!important}.border{border-width:1px!important}.border-0{border-width:0!important}.border-2{border-width:2px!important}.border-b{border-bottom-width:1px!important}.border-b-0{border-bottom-width:0!important}.border-l{border-left-width:1px!important}.border-r{border-right-width:1px!important}.border-t{border-top-width:1px!important}.border-solid{border-style:solid!important}.border-dashed{border-style:dashed!important}.border-gray-100{--tw-border-opacity:1!important;border-color:rgb(235 239 244/var(--tw-border-opacity))!important}.border-gray-100\/50{border-color:#ebeff480!important}.border-gray-200{--tw-border-opacity:1!important;border-color:rgb(233 236 239/var(--tw-border-opacity))!important}.border-gray-300{--tw-border-opacity:1!important;border-color:rgb(210 214 218/var(--tw-border-opacity))!important}.border-gray-400{--tw-border-opacity:1!important;border-color:rgb(206 212 218/var(--tw-border-opacity))!important}.border-gray-700{--tw-border-opacity:1!important;border-color:rgb(73 80 87/var(--tw-border-opacity))!important}.border-primary{--tw-border-opacity:1!important;border-color:rgb(11 85 119/var(--tw-border-opacity))!important}.bg-blue-500{--tw-bg-opacity:1!important;background-color:rgb(94 114 228/var(--tw-bg-opacity))!important}.bg-emerald-500{--tw-bg-opacity:1!important;background-color:rgb(45 206 137/var(--tw-bg-opacity))!important}.bg-emerald-500\/80{background-color:#2dce89cc!important}.bg-gray-100{background-color:rgb(235 239 244/var(--tw-bg-opacity))!important}.bg-gray-100,.bg-gray-200{--tw-bg-opacity:1!important}.bg-gray-200{background-color:rgb(233 236 239/var(--tw-bg-opacity))!important}.bg-gray-300{background-color:rgb(210 214 218/var(--tw-bg-opacity))!important}.bg-gray-300,.bg-gray-50{--tw-bg-opacity:1!important}.bg-gray-50{background-color:rgb(248 249 250/var(--tw-bg-opacity))!important}.bg-gray-50\/10{background-color:#f8f9fa1a!important}.bg-gray-500{--tw-bg-opacity:1!important;background-color:rgb(173 181 189/var(--tw-bg-opacity))!important}.bg-gray-500\/80{background-color:#adb5bdcc!important}.bg-gray-600{--tw-bg-opacity:1!important;background-color:rgb(108 117 125/var(--tw-bg-opacity))!important}.bg-gray-600\/50{background-color:#6c757d80!important}.bg-gray-600\/80{background-color:#6c757dcc!important}.bg-green-500{--tw-bg-opacity:1!important;background-color:rgb(34 197 94/var(--tw-bg-opacity))!important}.bg-green-500\/80{background-color:#22c55ecc!important}.bg-orange-500{--tw-bg-opacity:1!important;background-color:rgb(251 99 64/var(--tw-bg-opacity))!important}.bg-orange-500\/80{background-color:#fb6340cc!important}.bg-primary{--tw-bg-opacity:1!important;background-color:rgb(11 85 119/var(--tw-bg-opacity))!important}.bg-primary\/10{background-color:#0b55771a!important}.bg-red-500{--tw-bg-opacity:1!important;background-color:rgb(245 57 57/var(--tw-bg-opacity))!important}.bg-red-500\/80{background-color:#f53939cc!important}.bg-secondary{background-color:rgb(46 172 104/var(--tw-bg-opacity))!important}.bg-secondary,.bg-sky-500{--tw-bg-opacity:1!important}.bg-sky-500{background-color:rgb(14 165 233/var(--tw-bg-opacity))!important}.bg-sky-500\/80{background-color:#0ea5e9cc!important}.bg-slate-800\/10{background-color:#3a416f1a!important}.bg-transparent{background-color:initial!important}.bg-white{background-color:rgb(255 255 255/var(--tw-bg-opacity))!important}.bg-white,.bg-yellow-400{--tw-bg-opacity:1!important}.bg-yellow-400{background-color:rgb(251 207 51/var(--tw-bg-opacity))!important}.bg-yellow-400\/80{background-color:#fbcf33cc!important}.bg-yellow-500{--tw-bg-opacity:1!important;background-color:rgb(251 177 64/var(--tw-bg-opacity))!important}.bg-yellow-500\/80{background-color:#fbb140cc!important}.bg-gradient-to-r{background-image:linear-gradient(to right,var(--tw-gradient-stops))!important}.bg-gradient-to-tl{background-image:linear-gradient(to top left,var(--tw-gradient-stops))!important}.bg-none{background-image:none!important}.from-\[\#075577\]{--tw-gradient-from:#075577 var(--tw-gradient-from-position)!important;--tw-gradient-to:#07557700 var(--tw-gradient-to-position)!important;--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)!important}.from-\[\#0b5577\]{--tw-gradient-from:#0b5577 var(--tw-gradient-from-position)!important;--tw-gradient-to:#0b557700 var(--tw-gradient-to-position)!important;--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)!important}.from-transparent{--tw-gradient-from:#0000 var(--tw-gradient-from-position)!important;--tw-gradient-to:#0000 var(--tw-gradient-to-position)!important;--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)!important}.via-black\/40{--tw-gradient-to:#0000 var(--tw-gradient-to-position)!important;--tw-gradient-stops:var(--tw-gradient-from),#0006 var(--tw-gradient-via-position),var(--tw-gradient-to)!important}.to-\[\#116D70\]{--tw-gradient-to:#116d70 var(--tw-gradient-to-position)!important}.to-transparent{--tw-gradient-to:#0000 var(--tw-gradient-to-position)!important}.bg-150{background-size:150%!important}.bg-contain{background-size:contain!important}.bg-clip-border{background-clip:initial!important}.bg-clip-padding{background-clip:padding-box!important}.bg-center{background-position:50%!important}.bg-left{background-position:0!important}.bg-x-25{background-position:25% 0!important}.bg-no-repeat{background-repeat:no-repeat!important}.fill-blue-500{fill:#5e72e4!important}.fill-gray-500{fill:#adb5bd!important}.fill-gray-600{fill:#6c757d!important}.fill-gray-700{fill:#495057!important}.fill-green-500{fill:#22c55e!important}.fill-primary{fill:#0b5577!important}.fill-red-500{fill:#f53939!important}.fill-sky-500{fill:#0ea5e9!important}.fill-slate-800{fill:#3a416f!important}.fill-white{fill:#fff!important}.fill-yellow-500{fill:#fbb140!important}.stroke-amber-500{stroke:#f59e0b!important}.stroke-blue-400{stroke:#60a5fa!important}.stroke-blue-500{stroke:#5e72e4!important}.stroke-emerald-600{stroke:#059669!important}.stroke-gray-100{stroke:#ebeff4!important}.stroke-gray-100\/50{stroke:#ebeff480!important}.stroke-gray-600{stroke:#6c757d!important}.stroke-gray-700{stroke:#495057!important}.stroke-gray-800{stroke:#252f40!important}.stroke-green-700{stroke:#15803d!important}.stroke-orange-500{stroke:#fb6340!important}.stroke-pink-600{stroke:#db2777!important}.stroke-red-500{stroke:#f53939!important}.stroke-sky-500{stroke:#0ea5e9!important}.stroke-stone-500{stroke:#78716c!important}.stroke-white{stroke:#fff!important}.stroke-white\/0{stroke:#fff0!important}.stroke-yellow-400{stroke:#fbcf33!important}.stroke-yellow-500{stroke:#fbb140!important}.stroke-0{stroke-width:0!important}.object-cover{-o-object-fit:cover!important;object-fit:cover!important}.p-0{padding:0!important}.p-1{padding:.25rem!important}.p-2{padding:.5rem!important}.p-3{padding:.75rem!important}.p-4{padding:1rem!important}.px-0{padding-left:0!important;padding-right:0!important}.px-0\.5{padding-left:.125rem!important;padding-right:.125rem!important}.px-1{padding-left:.25rem!important;padding-right:.25rem!important}.px-1\.5{padding-left:.375rem!important;padding-right:.375rem!important}.px-2{padding-left:.5rem!important;padding-right:.5rem!important}.px-28{padding-left:7rem!important;padding-right:7rem!important}.px-3{padding-left:.75rem!important;padding-right:.75rem!important}.px-4{padding-left:1rem!important;padding-right:1rem!important}.px-6{padding-left:1.5rem!important;padding-right:1.5rem!important}.px-8{padding-left:2rem!important;padding-right:2rem!important}.py-0{padding-top:0!important;padding-bottom:0!important}.py-0\.5{padding-top:.125rem!important;padding-bottom:.125rem!important}.py-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-1\.5{padding-top:.375rem!important;padding-bottom:.375rem!important}.py-10{padding-top:2.5rem!important;padding-bottom:2.5rem!important}.py-12{padding-top:3rem!important;padding-bottom:3rem!important}.py-16{padding-top:4rem!important;padding-bottom:4rem!important}.py-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-2\.5{padding-top:.625rem!important;padding-bottom:.625rem!important}.py-3{padding-top:.75rem!important;padding-bottom:.75rem!important}.py-4{padding-top:1rem!important;padding-bottom:1rem!important}.py-8{padding-top:2rem!important;padding-bottom:2rem!important}.pb-0{padding-bottom:0!important}.pb-10{padding-bottom:2.5rem!important}.pb-16{padding-bottom:4rem!important}.pb-2{padding-bottom:.5rem!important}.pb-24{padding-bottom:6rem!important}.pb-28{padding-bottom:7rem!important}.pb-4{padding-bottom:1rem!important}.pb-6{padding-bottom:1.5rem!important}.pb-8{padding-bottom:2rem!important}.pl-0{padding-left:0!important}.pl-2{padding-left:.5rem!important}.pl-3{padding-left:.75rem!important}.pl-6{padding-left:1.5rem!important}.pt-1{padding-top:.25rem!important}.pt-10{padding-top:2.5rem!important}.pt-2{padding-top:.5rem!important}.pt-20{padding-top:5rem!important}.pt-3{padding-top:.75rem!important}.pt-4{padding-top:1rem!important}.pt-6{padding-top:1.5rem!important}.pt-8{padding-top:2rem!important}.pt-9{padding-top:2.25rem!important}.text-left{text-align:left!important}.text-center{text-align:center!important}.align-top{vertical-align:top!important}.align-middle{vertical-align:middle!important}.align-bottom{vertical-align:bottom!important}.font-sans{font-family:Open Sans!important}.text-2xl{font-size:1.5rem!important;line-height:2rem!important}.text-3xl{font-size:1.875rem!important;line-height:2.25rem!important}.text-4xl{font-size:2.25rem!important;line-height:2.5rem!important}.text-5xl{font-size:3rem!important}.text-5xl,.text-6xl{line-height:1!important}.text-6xl{font-size:3.75rem!important}.text-7xl{font-size:4.5rem!important}.text-7xl,.text-9xl{line-height:1!important}.text-9xl{font-size:6rem!important}.text-\[0\.7rem\]{font-size:.7rem!important}.text-\[1\.1rem\]{font-size:1.1rem!important}.text-base{font-size:1rem!important;line-height:1.5rem!important}.text-lg{font-size:1.125rem!important;line-height:1.75rem!important}.text-sm{font-size:.875rem!important;line-height:1.5rem!important}.text-xl{font-size:1.25rem!important;line-height:1.75rem!important}.text-xs{font-size:.75rem!important;line-height:1rem!important}.font-bold{font-weight:700!important}.font-medium{font-weight:500!important}.font-normal{font-weight:400!important}.font-semibold{font-weight:600!important}.uppercase{text-transform:uppercase!important}.capitalize{text-transform:capitalize!important}.italic{font-style:italic!important}.ordinal{--tw-ordinal:ordinal!important;font-variant-numeric:var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure) var(--tw-numeric-spacing) var(--tw-numeric-fraction)!important}.leading-5{line-height:1.25rem!important}.leading-5\.6{line-height:1.4rem!important}.leading-6{line-height:1.5rem!important}.leading-default{line-height:1.6!important}.leading-none{line-height:1!important}.leading-normal{line-height:1.5!important}.leading-tight{line-height:1.25!important}.tracking-\[0\.20rem\]{letter-spacing:.2rem!important}.tracking-normal{letter-spacing:0!important}.tracking-tight-rem{letter-spacing:-.025rem!important}.tracking-wide{letter-spacing:.025em!important}.tracking-wider{letter-spacing:.05em!important}.tracking-widest{letter-spacing:.1em!important}.text-blue-500{--tw-text-opacity:1!important;color:rgb(94 114 228/var(--tw-text-opacity))!important}.text-gray-100{--tw-text-opacity:1!important;color:rgb(235 239 244/var(--tw-text-opacity))!important}.text-gray-100\/50{color:#ebeff480!important}.text-gray-300{--tw-text-opacity:1!important;color:rgb(210 214 218/var(--tw-text-opacity))!important}.text-gray-50{--tw-text-opacity:1!important;color:rgb(248 249 250/var(--tw-text-opacity))!important}.text-gray-500{--tw-text-opacity:1!important;color:rgb(173 181 189/var(--tw-text-opacity))!important}.text-gray-600{--tw-text-opacity:1!important;color:rgb(108 117 125/var(--tw-text-opacity))!important}.text-gray-700{--tw-text-opacity:1!important;color:rgb(73 80 87/var(--tw-text-opacity))!important}.text-gray-700\/80{color:#495057cc!important}.text-gray-800{--tw-text-opacity:1!important;color:rgb(37 47 64/var(--tw-text-opacity))!important}.text-green-500{--tw-text-opacity:1!important;color:rgb(34 197 94/var(--tw-text-opacity))!important}.text-primary{color:rgb(11 85 119/var(--tw-text-opacity))!important}.text-primary,.text-red-500{--tw-text-opacity:1!important}.text-red-500{color:rgb(245 57 57/var(--tw-text-opacity))!important}.text-secondary{--tw-text-opacity:1!important;color:rgb(46 172 104/var(--tw-text-opacity))!important}.text-sky-500{--tw-text-opacity:1!important;color:rgb(14 165 233/var(--tw-text-opacity))!important}.text-slate-500{--tw-text-opacity:1!important;color:rgb(103 116 142/var(--tw-text-opacity))!important}.text-slate-700{color:rgb(52 71 103/var(--tw-text-opacity))!important}.text-slate-700,.text-white{--tw-text-opacity:1!important}.text-white{color:rgb(255 255 255/var(--tw-text-opacity))!important}.text-yellow-400{--tw-text-opacity:1!important;color:rgb(251 207 51/var(--tw-text-opacity))!important}.text-yellow-500{--tw-text-opacity:1!important;color:rgb(251 177 64/var(--tw-text-opacity))!important}.underline{text-decoration-line:underline!important}.antialiased{-webkit-font-smoothing:antialiased!important;-moz-osx-font-smoothing:grayscale!important}.opacity-0{opacity:0!important}.opacity-100{opacity:1!important}.opacity-50{opacity:.5!important}.opacity-60{opacity:.6!important}.opacity-80{opacity:.8!important}.shadow{--tw-shadow:0 1px 3px 0 #0000001a,0 1px 2px -1px #0000001a!important;--tw-shadow-colored:0 1px 3px 0 var(--tw-shadow-color),0 1px 2px -1px var(--tw-shadow-color)!important}.shadow,.shadow-3xl{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)!important}.shadow-3xl{--tw-shadow:0 8px 26px -4px #14141426,0 8px 9px -5px #1414140f!important;--tw-shadow-colored:0 8px 26px -4px var(--tw-shadow-color),0 8px 9px -5px var(--tw-shadow-color)!important}.shadow-\[8px_8px_12px_rgb\(0\2c 0\2c 0\2c 0\.2\)\]{--tw-shadow:8px 8px 12px #0003!important;--tw-shadow-colored:8px 8px 12px var(--tw-shadow-color)!important}.shadow-\[8px_8px_12px_rgb\(0\2c 0\2c 0\2c 0\.2\)\],.shadow-md{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)!important}.shadow-md{--tw-shadow:0 4px 6px #32325d1a,0 1px 3px #00000014!important;--tw-shadow-colored:0 4px 6px var(--tw-shadow-color),0 1px 3px var(--tw-shadow-color)!important}.shadow-none{--tw-shadow:0 0 #0000!important;--tw-shadow-colored:0 0 #0000!important}.shadow-none,.shadow-sm{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)!important}.shadow-sm{--tw-shadow:0 .25rem .375rem -.0625rem #1414141f,0 .125rem .25rem -.0625rem #14141412!important;--tw-shadow-colored:0 .25rem .375rem -.0625rem var(--tw-shadow-color),0 .125rem .25rem -.0625rem var(--tw-shadow-color)!important}.shadow-xl{--tw-shadow:0 0 2rem 0 #8898aa26!important;--tw-shadow-colored:0 0 2rem 0 var(--tw-shadow-color)!important}.shadow-xl,.shadow-xs{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)!important}.shadow-xs{--tw-shadow:0 7px 14px #32325d1a,0 3px 6px #00000014!important;--tw-shadow-colored:0 7px 14px var(--tw-shadow-color),0 3px 6px var(--tw-shadow-color)!important}.outline-none{outline:2px solid #0000!important;outline-offset:2px!important}.outline{outline-style:solid!important}.outline-secondary{outline-color:#2eac68!important}.blur{--tw-blur:blur(8px)!important}.blur,.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)!important}.transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter!important;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter!important;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter!important;transition-timing-function:ease!important;transition-duration:.15s!important}.transition-all{transition-property:all!important;transition-timing-function:ease!important;transition-duration:.15s!important}.transition-transform{transition-property:transform!important;transition-timing-function:ease!important;transition-duration:.15s!important}.delay-200{transition-delay:.2s!important}.duration-200{transition-duration:.2s!important}.duration-250{transition-duration:.25s!important}.duration-300{transition-duration:.3s!important}.duration-700{transition-duration:.7s!important}.ease-in{transition-timing-function:ease-in!important}.ease-in-out{transition-timing-function:ease-in-out!important}.flex-wrap-inherit{flex-wrap:inherit!important}@font-face{font-family:Open Sans;src:url(../webfonts/OpenSans.ttf)}*{font-family:Open Sans,sans-serif}.ace_editor,.ace_editor *{font-family:Monaco,Menlo,Ubuntu Mono,Droid Sans Mono,Consolas,monospace!important;font-weight:400!important;letter-spacing:0!important}.sr-only{display:none}.separator{margin:.75rem 0 .5rem;height:1px;background-color:initial;--tw-gradient-from:#0000 var(--tw-gradient-from-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to);--tw-gradient-stops:var(--tw-gradient-from),#0006 var(--tw-gradient-via-position),var(--tw-gradient-to);--tw-gradient-to:#0000 var(--tw-gradient-to-position)}.separator,:is(.dark .separator){background-image:linear-gradient(to right,var(--tw-gradient-stops))}:is(.dark .separator){--tw-gradient-from:#0000 var(--tw-gradient-from-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to);--tw-gradient-to:#fff0 var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),#fff var(--tw-gradient-via-position),var(--tw-gradient-to);--tw-gradient-to:#0000 var(--tw-gradient-to-position)}.close-btn{display:inline-block;cursor:pointer;border-radius:.5rem;border-width:1px;--tw-border-opacity:1;border-color:rgb(245 57 57/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity));padding:.5rem 1rem;text-align:center;vertical-align:middle;font-weight:700;text-transform:uppercase;line-height:1.5;letter-spacing:-.025rem;--tw-text-opacity:1;color:rgb(245 57 57/var(--tw-text-opacity));--tw-shadow:0 7px 14px #32325d1a,0 3px 6px #00000014;--tw-shadow-colored:0 7px 14px var(--tw-shadow-color),0 3px 6px var(--tw-shadow-color);transition-property:all;transition-timing-function:ease;transition-duration:.15s;transition-timing-function:ease-in}.close-btn,.close-btn:hover{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.close-btn:hover{--tw-translate-y:-1px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));--tw-shadow:0 4px 6px #32325d1a,0 1px 3px #00000014;--tw-shadow-colored:0 4px 6px var(--tw-shadow-color),0 1px 3px var(--tw-shadow-color)}.close-btn:focus,.close-btn:hover{background-color:#fffc}.close-btn:active{opacity:.85}.close-btn:disabled{cursor:not-allowed;--tw-bg-opacity:1;--tw-text-opacity:1;color:rgb(73 80 87/var(--tw-text-opacity))}.close-btn:disabled,.close-btn:hover:disabled{border-color:#ced4da00;background-color:rgb(206 212 218/var(--tw-bg-opacity))}.close-btn:hover:disabled{--tw-translate-y:0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));--tw-bg-opacity:1}:is(.dark .close-btn){--tw-bg-opacity:1;background-color:rgb(233 236 239/var(--tw-bg-opacity));--tw-brightness:brightness(.9)}:is(.dark .close-btn),:is(.dark .close-btn:hover){filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}:is(.dark .close-btn:hover){--tw-brightness:brightness(.75)}:is(.dark .close-btn:disabled){--tw-bg-opacity:1;--tw-text-opacity:1;color:rgb(210 214 218/var(--tw-text-opacity))}:is(.dark .close-btn:disabled),:is(.dark .close-btn:hover:disabled){border-color:#49505700;background-color:rgb(73 80 87/var(--tw-bg-opacity))}:is(.dark .close-btn:hover:disabled){--tw-translate-y:0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));--tw-bg-opacity:1}@media (min-width:768px){.close-btn{padding:.625rem 1.25rem}}.valid-btn{display:inline-block;cursor:pointer;border-radius:.5rem;--tw-bg-opacity:1;background-color:rgb(34 197 94/var(--tw-bg-opacity));padding:.5rem 1rem;text-align:center;vertical-align:middle;font-weight:700;text-transform:uppercase;line-height:1.5;letter-spacing:.025em;--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity));--tw-shadow:0 7px 14px #32325d1a,0 3px 6px #00000014;--tw-shadow-colored:0 7px 14px var(--tw-shadow-color),0 3px 6px var(--tw-shadow-color);transition-property:all;transition-timing-function:ease;transition-duration:.15s;transition-timing-function:ease-in}.valid-btn,.valid-btn:hover{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.valid-btn:hover{--tw-translate-y:-1px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));--tw-shadow:0 4px 6px #32325d1a,0 1px 3px #00000014;--tw-shadow-colored:0 4px 6px var(--tw-shadow-color),0 1px 3px var(--tw-shadow-color)}.valid-btn:focus,.valid-btn:hover{background-color:#22c55ecc}.valid-btn:active{opacity:.85}.valid-btn:disabled{cursor:not-allowed;--tw-bg-opacity:1;--tw-text-opacity:1;color:rgb(73 80 87/var(--tw-text-opacity))}.valid-btn:disabled,.valid-btn:hover:disabled{border-color:#ced4da00;background-color:rgb(206 212 218/var(--tw-bg-opacity))}.valid-btn:hover:disabled{--tw-translate-y:0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));--tw-bg-opacity:1}:is(.dark .valid-btn){--tw-brightness:brightness(.9);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}:is(.dark .valid-btn:disabled){--tw-bg-opacity:1;--tw-text-opacity:1;color:rgb(210 214 218/var(--tw-text-opacity))}:is(.dark .valid-btn:disabled),:is(.dark .valid-btn:hover:disabled){border-color:#49505700;background-color:rgb(73 80 87/var(--tw-bg-opacity))}:is(.dark .valid-btn:hover:disabled){--tw-translate-y:0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));--tw-bg-opacity:1}@media (min-width:768px){.valid-btn{padding:.625rem 1.25rem}}.delete-btn{display:inline-block;cursor:pointer;border-radius:.5rem;--tw-bg-opacity:1;background-color:rgb(245 57 57/var(--tw-bg-opacity));padding:.5rem 1rem;text-align:center;vertical-align:middle;font-weight:700;text-transform:uppercase;line-height:1.5;letter-spacing:.025em;--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity));--tw-shadow:0 7px 14px #32325d1a,0 3px 6px #00000014;--tw-shadow-colored:0 7px 14px var(--tw-shadow-color),0 3px 6px var(--tw-shadow-color);transition-property:all;transition-timing-function:ease;transition-duration:.15s;transition-timing-function:ease-in}.delete-btn,.delete-btn:hover{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.delete-btn:hover{--tw-translate-y:-1px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));--tw-shadow:0 4px 6px #32325d1a,0 1px 3px #00000014;--tw-shadow-colored:0 4px 6px var(--tw-shadow-color),0 1px 3px var(--tw-shadow-color)}.delete-btn:focus,.delete-btn:hover{background-color:#f53939cc}.delete-btn:active{opacity:.85}.delete-btn:disabled{cursor:not-allowed;--tw-bg-opacity:1;--tw-text-opacity:1;color:rgb(73 80 87/var(--tw-text-opacity))}.delete-btn:disabled,.delete-btn:hover:disabled{border-color:#ced4da00;background-color:rgb(206 212 218/var(--tw-bg-opacity))}.delete-btn:hover:disabled{--tw-translate-y:0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));--tw-bg-opacity:1}:is(.dark .delete-btn){--tw-brightness:brightness(.9);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}:is(.dark .delete-btn:disabled){border-color:#49505700;--tw-bg-opacity:1;background-color:rgb(73 80 87/var(--tw-bg-opacity));--tw-text-opacity:1;color:rgb(210 214 218/var(--tw-text-opacity))}:is(.dark .delete-btn:hover:disabled){--tw-translate-y:0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));border-color:#49505700;--tw-bg-opacity:1;background-color:rgb(73 80 87/var(--tw-bg-opacity))}@media (min-width:768px){.delete-btn{padding:.625rem 1.25rem}}.edit-btn{display:inline-block;cursor:pointer;border-radius:.5rem;--tw-bg-opacity:1;background-color:rgb(251 177 64/var(--tw-bg-opacity));padding:.5rem 1rem;text-align:center;vertical-align:middle;font-weight:700;text-transform:uppercase;line-height:1.5;letter-spacing:.025em;--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity));--tw-shadow:0 7px 14px #32325d1a,0 3px 6px #00000014;--tw-shadow-colored:0 7px 14px var(--tw-shadow-color),0 3px 6px var(--tw-shadow-color);transition-property:all;transition-timing-function:ease;transition-duration:.15s;transition-timing-function:ease-in}.edit-btn,.edit-btn:hover{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.edit-btn:hover{--tw-translate-y:-1px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));--tw-shadow:0 4px 6px #32325d1a,0 1px 3px #00000014;--tw-shadow-colored:0 4px 6px var(--tw-shadow-color),0 1px 3px var(--tw-shadow-color)}.edit-btn:focus,.edit-btn:hover{background-color:#fbb140cc}.edit-btn:active{opacity:.85}.edit-btn:disabled{cursor:not-allowed;--tw-bg-opacity:1;--tw-text-opacity:1;color:rgb(73 80 87/var(--tw-text-opacity))}.edit-btn:disabled,.edit-btn:hover:disabled{border-color:#ced4da00;background-color:rgb(206 212 218/var(--tw-bg-opacity))}.edit-btn:hover:disabled{--tw-translate-y:0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));--tw-bg-opacity:1}:is(.dark .edit-btn){--tw-brightness:brightness(.9);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}:is(.dark .edit-btn:disabled){--tw-bg-opacity:1;--tw-text-opacity:1;color:rgb(210 214 218/var(--tw-text-opacity))}:is(.dark .edit-btn:disabled),:is(.dark .edit-btn:hover:disabled){border-color:#49505700;background-color:rgb(73 80 87/var(--tw-bg-opacity))}:is(.dark .edit-btn:hover:disabled){--tw-translate-y:0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));--tw-bg-opacity:1}@media (min-width:768px){.edit-btn{padding:.625rem 1.25rem}}.info-btn{display:inline-block;cursor:pointer;border-radius:.5rem;--tw-bg-opacity:1;background-color:rgb(14 165 233/var(--tw-bg-opacity));padding:.5rem 1rem;text-align:center;vertical-align:middle;font-weight:700;text-transform:uppercase;line-height:1.5;letter-spacing:.025em;--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity));--tw-shadow:0 7px 14px #32325d1a,0 3px 6px #00000014;--tw-shadow-colored:0 7px 14px var(--tw-shadow-color),0 3px 6px var(--tw-shadow-color);transition-property:all;transition-timing-function:ease;transition-duration:.15s;transition-timing-function:ease-in}.info-btn,.info-btn:hover{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.info-btn:hover{--tw-translate-y:-1px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));--tw-shadow:0 4px 6px #32325d1a,0 1px 3px #00000014;--tw-shadow-colored:0 4px 6px var(--tw-shadow-color),0 1px 3px var(--tw-shadow-color)}.info-btn:focus,.info-btn:hover{background-color:#0ea5e9cc}.info-btn:active{opacity:.85}.info-btn:disabled{cursor:not-allowed;--tw-bg-opacity:1;--tw-text-opacity:1;color:rgb(73 80 87/var(--tw-text-opacity))}.info-btn:disabled,.info-btn:hover:disabled{border-color:#ced4da00;background-color:rgb(206 212 218/var(--tw-bg-opacity))}.info-btn:hover:disabled{--tw-translate-y:0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));--tw-bg-opacity:1}:is(.dark .info-btn){--tw-brightness:brightness(.9);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}:is(.dark .info-btn:disabled){--tw-bg-opacity:1;--tw-text-opacity:1;color:rgb(210 214 218/var(--tw-text-opacity))}:is(.dark .info-btn:disabled),:is(.dark .info-btn:hover:disabled){border-color:#49505700;background-color:rgb(73 80 87/var(--tw-bg-opacity))}:is(.dark .info-btn:hover:disabled){--tw-translate-y:0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));--tw-bg-opacity:1}@media (min-width:768px){.info-btn{padding:.625rem 1.25rem}}.checkbox{position:relative;z-index:10;float:left;margin-top:.25rem;height:1.25rem;width:1.25rem;cursor:pointer;-webkit-appearance:none;-moz-appearance:none;appearance:none;border-radius:.35rem;border-width:1px;border-color:rgb(210 214 218/var(--tw-border-opacity));background-color:rgb(255 255 255/var(--tw-bg-opacity));background-size:contain;background-position:50%;background-repeat:no-repeat;vertical-align:top;font-size:1rem;line-height:1.5rem;transition-property:none;transition-property:all;transition-timing-function:ease;transition-duration:.25s}.checkbox,.checkbox:disabled{--tw-border-opacity:1;--tw-bg-opacity:1}.checkbox:disabled{cursor:default;border-color:rgb(206 212 218/var(--tw-border-opacity));background-color:rgb(206 212 218/var(--tw-bg-opacity));--tw-text-opacity:1;color:rgb(73 80 87/var(--tw-text-opacity))}.checkbox[data-checked=true]{z-index:0;--tw-border-opacity:1;border-color:rgb(11 85 119/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(11 85 119/var(--tw-bg-opacity))}.checkbox:disabled[data-checked=true]{--tw-border-opacity:1;border-color:rgb(206 212 218/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(206 212 218/var(--tw-bg-opacity));--tw-text-opacity:1;color:rgb(73 80 87/var(--tw-text-opacity))}:is(.dark .checkbox){--tw-border-opacity:1;border-color:rgb(98 117 148/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(52 71 103/var(--tw-bg-opacity))}:is(.dark .checkbox:disabled){--tw-border-opacity:1;border-color:rgb(37 47 64/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(37 47 64/var(--tw-bg-opacity));--tw-text-opacity:1;color:rgb(210 214 218/var(--tw-text-opacity))}:is(.dark .checkbox[data-checked=true]){--tw-border-opacity:1;border-color:rgb(11 85 119/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(11 85 119/var(--tw-bg-opacity))}:is(.dark .checkbox:disabled[data-checked=true]){--tw-border-opacity:1;border-color:rgb(37 47 64/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(37 47 64/var(--tw-bg-opacity));--tw-text-opacity:1;color:rgb(210 214 218/var(--tw-text-opacity))}.custom-select-btn{display:flex;width:100%;align-items:center;justify-content:space-between;border-radius:.5rem;border-width:1px;border-style:solid;--tw-border-opacity:1;border-color:rgb(210 214 218/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity));background-clip:padding-box;padding:.25rem .375rem;text-align:left;vertical-align:middle;font-size:.875rem;font-weight:400;line-height:1.4rem;--tw-text-opacity:1;color:rgb(73 80 87/var(--tw-text-opacity));transition-property:all;transition-timing-function:ease;transition-duration:.3s;transition-timing-function:ease-in-out}.custom-select-btn::-moz-placeholder{--tw-text-opacity:1;color:rgb(173 181 189/var(--tw-text-opacity))}.custom-select-btn::placeholder{--tw-text-opacity:1;color:rgb(173 181 189/var(--tw-text-opacity))}.custom-select-btn:focus{--tw-border-opacity:1;border-color:rgb(11 85 119/var(--tw-border-opacity))}.custom-select-btn:disabled{--tw-border-opacity:1;border-color:rgb(206 212 218/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(206 212 218/var(--tw-bg-opacity));--tw-text-opacity:1;color:rgb(73 80 87/var(--tw-text-opacity));opacity:.75}:is(.dark .custom-select-btn){--tw-border-opacity:1;border-color:rgb(98 117 148/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(52 71 103/var(--tw-bg-opacity));--tw-text-opacity:1;color:rgb(233 236 239/var(--tw-text-opacity))}:is(.dark .custom-select-btn:disabled){--tw-border-opacity:1;border-color:rgb(37 47 64/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(37 47 64/var(--tw-bg-opacity));--tw-text-opacity:1;color:rgb(210 214 218/var(--tw-text-opacity))}@media (min-width:768px){.custom-select-btn{padding:.5rem .75rem}}.custom-dropdown-btn{position:relative;margin-top:0;margin-bottom:0;min-height:38px;cursor:pointer;border-radius:0;border-bottom-width:1px;border-left-width:1px;border-right-width:1px;--tw-border-opacity:1;border-color:rgb(210 214 218/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity));padding:.5rem 1.5rem;text-align:center;vertical-align:middle;font-size:.875rem;line-height:1.5rem;line-height:1.5;letter-spacing:-.025rem;--tw-text-opacity:1;color:rgb(73 80 87/var(--tw-text-opacity));transition-property:none;transition-property:all;transition-timing-function:ease;transition-duration:.15s;transition-timing-function:ease-in}.custom-dropdown-btn:hover{--tw-brightness:brightness(.9);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}:is(.dark .custom-dropdown-btn){--tw-border-opacity:1;border-color:rgb(98 117 148/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(52 71 103/var(--tw-bg-opacity));--tw-text-opacity:1;color:rgb(233 236 239/var(--tw-text-opacity))}.active.custom-dropdown-btn{position:relative;margin-top:0;margin-bottom:0;min-height:38px;cursor:pointer;border-radius:0;border-bottom-width:1px;border-left-width:1px;border-right-width:1px;--tw-border-opacity:1;border-color:rgb(210 214 218/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(11 85 119/var(--tw-bg-opacity));padding:.5rem 1.5rem;text-align:center;vertical-align:middle;font-size:.875rem;line-height:1.5rem;line-height:1.5;letter-spacing:-.025rem;--tw-text-opacity:1;color:rgb(210 214 218/var(--tw-text-opacity));transition-property:all;transition-timing-function:ease;transition-duration:.15s;transition-timing-function:ease-in}.active.custom-dropdown-btn:hover{--tw-brightness:brightness(.9);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}:is(.dark .active.custom-dropdown-btn){border-color:rgb(98 117 148/var(--tw-border-opacity));background-color:rgb(11 85 119/var(--tw-bg-opacity));color:rgb(233 236 239/var(--tw-text-opacity))}.regular-input,:is(.dark .active.custom-dropdown-btn){--tw-border-opacity:1;--tw-bg-opacity:1;--tw-text-opacity:1}.regular-input{display:block;width:100%;-webkit-appearance:none;-moz-appearance:none;appearance:none;border-radius:.5rem;border-width:1px;border-style:solid;border-color:rgb(210 214 218/var(--tw-border-opacity));background-color:rgb(255 255 255/var(--tw-bg-opacity));background-clip:padding-box;padding:.25rem .375rem;font-size:.875rem;font-weight:400;line-height:1.4rem;color:rgb(73 80 87/var(--tw-text-opacity));outline:2px solid #0000;outline-offset:2px;transition-property:none;transition-property:all;transition-timing-function:ease;transition-duration:.15s;transition-timing-function:ease-in}.regular-input::-moz-placeholder{--tw-text-opacity:1;color:rgb(173 181 189/var(--tw-text-opacity))}.regular-input::placeholder{--tw-text-opacity:1;color:rgb(173 181 189/var(--tw-text-opacity))}.regular-input:focus{border-color:#d2d6da00;--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.regular-input:valid:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(34 197 94/var(--tw-ring-opacity))}.regular-input:invalid:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(245 57 57/var(--tw-ring-opacity))}.regular-input:disabled{--tw-bg-opacity:1;background-color:rgb(206 212 218/var(--tw-bg-opacity));--tw-text-opacity:1;color:rgb(73 80 87/var(--tw-text-opacity));opacity:.75}:is(.dark .regular-input){--tw-border-opacity:1;border-color:rgb(98 117 148/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(52 71 103/var(--tw-bg-opacity));--tw-text-opacity:1;color:rgb(233 236 239/var(--tw-text-opacity))}:is(.dark .regular-input:disabled){--tw-border-opacity:1;border-color:rgb(37 47 64/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(37 47 64/var(--tw-bg-opacity));--tw-text-opacity:1;color:rgb(210 214 218/var(--tw-text-opacity))}@media (min-width:768px){.regular-input{padding:.5rem .75rem}}.invalid.regular-input{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)!important;--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color)!important;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)!important;--tw-ring-opacity:1!important;--tw-ring-color:rgb(245 57 57/var(--tw-ring-opacity))!important}.input-title{margin:0;font-size:.875rem;line-height:1.5rem;font-weight:700;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:ease;transition-duration:.3s;transition-timing-function:ease-in-out}:is(.dark .input-title){--tw-text-opacity:1;color:rgb(233 236 239/var(--tw-text-opacity))}.popover-settings-container{position:fixed;z-index:1000;height:-moz-fit-content;height:fit-content;max-width:250px;--tw-translate-y:-1.75rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));border-radius:.375rem;--tw-bg-opacity:1;background-color:rgb(94 114 228/var(--tw-bg-opacity));padding:.75rem;transition-property:all;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:ease;transition-duration:.5s}:is(.dark .popover-settings-container){--tw-brightness:brightness(.9);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.popover-tab{position:absolute;left:0;bottom:0;z-index:50;--tw-translate-y:-1.75rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));border-radius:.375rem;--tw-bg-opacity:1;background-color:rgb(94 114 228/var(--tw-bg-opacity));padding:.75rem;transition-property:all;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:ease;transition-duration:.5s}:is(.dark .popover-tab){--tw-brightness:brightness(.9);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.popover-settings-text{margin:0;font-size:.875rem;line-height:1.5rem;font-weight:700;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:ease;transition-duration:.3s;transition-timing-function:ease-in-out}.popover-settings-text,:is(.dark .popover-settings-text){--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.popover-settings-svg{margin-left:.5rem;height:1.25rem;width:1.25rem;cursor:pointer;fill:#5e72e4}.popover-settings-svg:hover{--tw-brightness:brightness(.75);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.popover-settings-svg-multiple{margin-left:.5rem;height:1.375rem;width:1.375rem;cursor:pointer;fill:#fb6340;stroke:#495057}.popover-settings-svg-multiple:hover{--tw-brightness:brightness(.75);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}:is(.dark .popover-settings-svg-multiple){stroke:#adb5bd}.hidden-multiple{display:none!important}.active.tabs-tab-btn,.active.tabs-tab-btn:hover{--tw-bg-opacity:1;background-color:rgb(233 236 239/var(--tw-bg-opacity))}:is(.dark .active.tabs-tab-btn),:is(.dark .active.tabs-tab-btn:hover){--tw-bg-opacity:1;background-color:rgb(73 80 87/var(--tw-bg-opacity))}.tabs-tab-btn{position:relative;margin-top:.25rem;margin-bottom:.25rem;cursor:pointer;border-radius:0;border-width:1px;--tw-border-opacity:1;border-color:rgb(11 85 119/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity));padding:.75rem;text-align:center;vertical-align:middle;font-size:.875rem;line-height:1.5rem;font-weight:700;text-transform:uppercase;line-height:1.5;letter-spacing:-.025rem;--tw-shadow:0 7px 14px #32325d1a,0 3px 6px #00000014;--tw-shadow-colored:0 7px 14px var(--tw-shadow-color),0 3px 6px var(--tw-shadow-color);transition-property:all;transition-timing-function:ease;transition-duration:.15s;transition-timing-function:ease-in}.tabs-tab-btn,.tabs-tab-btn:hover{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.tabs-tab-btn:hover{--tw-bg-opacity:1;background-color:rgb(235 239 244/var(--tw-bg-opacity));--tw-shadow:0 4px 6px #32325d1a,0 1px 3px #00000014;--tw-shadow-colored:0 4px 6px var(--tw-shadow-color),0 1px 3px var(--tw-shadow-color)}:is(.dark .tabs-tab-btn){--tw-border-opacity:1;border-color:rgb(98 117 148/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(52 71 103/var(--tw-bg-opacity))}:is(.dark .tabs-tab-btn:hover){--tw-bg-opacity:1;background-color:rgb(58 65 111/var(--tw-bg-opacity))}.tabs-name{padding-left:.75rem;padding-right:.5rem;--tw-text-opacity:1;color:rgb(11 85 119/var(--tw-text-opacity));transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:ease;transition-duration:.3s;transition-timing-function:ease-in-out}:is(.dark .tabs-name){--tw-text-opacity:1;color:rgb(235 239 244/var(--tw-text-opacity))}.tabs-popover-container{position:absolute;top:60px;left:0;z-index:50;min-width:150px;border-radius:.375rem;--tw-bg-opacity:1;background-color:rgb(94 114 228/var(--tw-bg-opacity));padding:.75rem;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:ease;transition-duration:.15s}:is(.dark .tabs-popover-container){--tw-brightness:brightness(.9);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.tabs-popover-text{margin:0;font-size:.875rem;line-height:1.5rem;font-weight:700;--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.settings-tabs-select-btn{margin-top:.25rem;margin-bottom:.25rem;display:flex;width:100%;cursor:pointer;align-items:center;justify-content:space-between;border-radius:.5rem;border-width:1px;--tw-border-opacity:1;border-color:rgb(11 85 119/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity));padding:.5rem 1rem;text-align:center;vertical-align:middle;font-size:.875rem;line-height:1.5rem;font-weight:700;text-transform:uppercase;line-height:1.5;letter-spacing:-.025rem;--tw-shadow:0 7px 14px #32325d1a,0 3px 6px #00000014;--tw-shadow-colored:0 7px 14px var(--tw-shadow-color),0 3px 6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);transition-property:all;transition-timing-function:ease;transition-duration:.15s;transition-timing-function:ease-in}.settings-tabs-select-btn:hover{--tw-translate-y:-1px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));--tw-bg-opacity:1;background-color:rgb(248 249 250/var(--tw-bg-opacity));--tw-shadow:0 4px 6px #32325d1a,0 1px 3px #00000014;--tw-shadow-colored:0 4px 6px var(--tw-shadow-color),0 1px 3px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}:is(.dark .settings-tabs-select-btn){--tw-border-opacity:1;border-color:rgb(98 117 148/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(52 71 103/var(--tw-bg-opacity))}:is(.dark .settings-tabs-select-btn:hover){--tw-brightness:brightness(.95);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}@media (min-width:768px){.settings-tabs-select-btn{padding:.75rem 1.5rem}}.settings-tabs-select-btn-text{--tw-text-opacity:1;color:rgb(11 85 119/var(--tw-text-opacity));transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:ease;transition-duration:.3s;transition-timing-function:ease-in-out}:is(.dark .settings-tabs-select-btn-text){--tw-text-opacity:1;color:rgb(206 212 218/var(--tw-text-opacity))}.active.settings-tabs-select-dropdown-btn{position:relative;z-index:1000;margin-top:0;margin-bottom:0;cursor:pointer;border-radius:0;--tw-border-opacity:1;border-color:rgb(210 214 218/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(11 85 119/var(--tw-bg-opacity));padding:.5rem 1.5rem;text-align:center;vertical-align:middle;font-size:.875rem;line-height:1.5rem;line-height:1.5;letter-spacing:-.025rem;--tw-text-opacity:1;color:rgb(210 214 218/var(--tw-text-opacity));transition-property:all;transition-timing-function:ease;transition-duration:.15s;transition-timing-function:ease-in}.active.settings-tabs-select-dropdown-btn:hover{--tw-brightness:brightness(.9);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}:is(.dark .active.settings-tabs-select-dropdown-btn){--tw-border-opacity:1;border-color:rgb(98 117 148/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(11 85 119/var(--tw-bg-opacity));--tw-text-opacity:1;color:rgb(233 236 239/var(--tw-text-opacity))}:is(.dark .active.settings-tabs-select-dropdown-btn:hover){--tw-brightness:brightness(.9);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.first.settings-tabs-select-dropdown-btn{border-top-left-radius:.25rem;border-top-right-radius:.25rem;border-width:1px}.last.settings-tabs-select-dropdown-btn{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.settings-tabs-select-dropdown-btn{position:relative;margin-top:0;margin-bottom:0;display:flex;cursor:pointer;justify-content:space-between;border-radius:0;border-bottom-width:1px;border-left-width:1px;border-right-width:1px;--tw-border-opacity:1;border-color:rgb(210 214 218/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity));padding:.5rem 1.5rem;text-align:center;vertical-align:middle;font-size:.875rem;line-height:1.5rem;line-height:1.5;letter-spacing:-.025rem;--tw-text-opacity:1;color:rgb(73 80 87/var(--tw-text-opacity));transition-property:all;transition-timing-function:ease;transition-duration:.15s;transition-timing-function:ease-in}.settings-tabs-select-dropdown-btn:hover{--tw-brightness:brightness(.9);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}:is(.dark .settings-tabs-select-dropdown-btn){--tw-border-opacity:1;border-color:rgb(98 117 148/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(52 71 103/var(--tw-bg-opacity));--tw-text-opacity:1;color:rgb(233 236 239/var(--tw-text-opacity))}:is(.dark .settings-tabs-select-dropdown-btn:hover){--tw-brightness:brightness(.9);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.home-card{grid-column:span 12/span 12;display:flex;width:100%;justify-content:space-between;overflow-wrap:break-word;border-radius:1rem;--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity));background-clip:initial;padding:1rem;--tw-shadow:0 4px 6px #32325d1a,0 1px 3px #00000014;--tw-shadow-colored:0 4px 6px var(--tw-shadow-color),0 1px 3px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:ease;transition-duration:.15s}.home-card:hover{--tw-scale-x:1.02;--tw-scale-y:1.02;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}:is(.dark .home-card){--tw-bg-opacity:1;background-color:rgb(17 28 68/var(--tw-bg-opacity));--tw-shadow:0 2px 2px 0 #00000024,0 3px 1px -2px #0003,0 1px 5px 0 #0000001f;--tw-shadow-colored:0 2px 2px 0 var(--tw-shadow-color),0 3px 1px -2px var(--tw-shadow-color),0 1px 5px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);--tw-brightness:brightness(1.1);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}@media (min-width:576px){.home-card{max-height:7rem}}@media (min-width:768px){.home-card{grid-column:span 6/span 6}}@media (min-width:1320px){.home-card{grid-column:span 4/span 4}}.home-card-name{margin-bottom:0;font-family:Open Sans;font-size:.875rem;line-height:1.5rem;font-weight:600;text-transform:uppercase;line-height:1.5}:is(.dark .home-card-name){--tw-text-opacity:1;color:rgb(206 212 218/var(--tw-text-opacity))}.home-card-title{margin-bottom:.25rem;font-weight:700}:is(.dark .home-card-title){color:#ffffffe6}.home-card-subtitle{margin-left:.125rem;margin-right:.125rem;margin-bottom:0;font-size:.875rem;line-height:1.5rem;font-weight:700;line-height:1.5}.info.home-card-subtitle{--tw-text-opacity:1;color:rgb(14 165 233/var(--tw-text-opacity))}.error.home-card-subtitle{--tw-text-opacity:1;color:rgb(245 57 57/var(--tw-text-opacity))}.success.home-card-subtitle{--tw-text-opacity:1;color:rgb(34 197 94/var(--tw-text-opacity))}.warning.home-card-subtitle{--tw-text-opacity:1;color:rgb(251 177 64/var(--tw-text-opacity))}.home-card-svg-container{display:inline-block;height:3rem;width:3rem;border-radius:50%;text-align:center}:is(.dark .home-card-svg-container){--tw-brightness:brightness(.9);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.version.home-card-svg-container{--tw-bg-opacity:1;background-color:rgb(251 177 64/var(--tw-bg-opacity))}.version-number.home-card-svg-container{--tw-bg-opacity:1;background-color:rgb(45 206 137/var(--tw-bg-opacity))}.instances.home-card-svg-container{--tw-bg-opacity:1;background-color:rgb(108 117 125/var(--tw-bg-opacity))}.services.home-card-svg-container{--tw-bg-opacity:1;background-color:rgb(251 99 64/var(--tw-bg-opacity))}.plugins.home-card-svg-container{--tw-bg-opacity:1;background-color:rgb(251 207 51/var(--tw-bg-opacity))}.card-detail-container{margin-top:1rem;margin-bottom:1.5rem;margin-left:.25rem;display:grid;grid-template-columns:repeat(1,minmax(0,1fr));gap:.5rem}.card-detail-item{grid-column:span 1/span 1;display:flex;align-items:center;padding-top:.25rem;padding-bottom:.25rem}@media (min-width:576px){.card-detail-item{padding-top:0;padding-bottom:0}}.card-detail-item-title{margin-bottom:0;font-family:Open Sans;font-size:.875rem;line-height:1.5rem;font-weight:700;text-transform:uppercase;line-height:1.5;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:ease;transition-duration:.3s;transition-timing-function:ease-in-out}:is(.dark .card-detail-item-title){--tw-text-opacity:1;color:rgb(173 181 189/var(--tw-text-opacity))}.card-detail-item-subtitle{grid-column:span 1/span 1;margin-bottom:0;word-break:break-all;padding-left:.5rem;font-family:Open Sans;font-size:.875rem;line-height:1.5rem;font-weight:600;text-transform:uppercase;line-height:1.5;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:ease;transition-duration:.3s;transition-timing-function:ease-in-out}:is(.dark .card-detail-item-subtitle){--tw-text-opacity:1;color:rgb(235 239 244/var(--tw-text-opacity))}.core-layout{grid-column:span 12/span 12;display:grid;grid-template-columns:repeat(12,minmax(0,1fr))}.core-card{position:relative;grid-column:span 12/span 12;margin:.5rem;height:-moz-fit-content;height:fit-content;min-width:0;overflow-wrap:break-word;border-radius:1rem;--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity));background-clip:initial;padding:1rem;--tw-shadow:0 0 2rem 0 #8898aa26;--tw-shadow-colored:0 0 2rem 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:ease;transition-duration:.15s}.core-card:hover{--tw-scale-x:1.02;--tw-scale-y:1.02;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}:is(.dark .core-card){--tw-bg-opacity:1;background-color:rgb(17 28 68/var(--tw-bg-opacity));--tw-shadow:0 2px 2px 0 #00000024,0 3px 1px -2px #0003,0 1px 5px 0 #0000001f;--tw-shadow-colored:0 2px 2px 0 var(--tw-shadow-color),0 3px 1px -2px var(--tw-shadow-color),0 1px 5px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);--tw-brightness:brightness(1.1);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}@media (min-width:768px){.core-card{grid-column:span 6/span 6}}@media (min-width:1320px){.core-card{grid-column:span 4/span 4}}@media (min-width:1920px){.core-card{grid-column:span 3/span 3}}.core-card-lg{position:relative;grid-column:span 12/span 12;margin:.5rem;height:-moz-fit-content;height:fit-content;min-width:0;overflow-wrap:break-word;border-radius:1rem;--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity));background-clip:initial;padding:1rem;--tw-shadow:0 0 2rem 0 #8898aa26;--tw-shadow-colored:0 0 2rem 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:ease;transition-duration:.15s}.core-card-lg:hover{--tw-scale-x:1.02;--tw-scale-y:1.02;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}:is(.dark .core-card-lg){--tw-bg-opacity:1;background-color:rgb(17 28 68/var(--tw-bg-opacity));--tw-shadow:0 2px 2px 0 #00000024,0 3px 1px -2px #0003,0 1px 5px 0 #0000001f;--tw-shadow-colored:0 2px 2px 0 var(--tw-shadow-color),0 3px 1px -2px var(--tw-shadow-color),0 1px 5px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);--tw-brightness:brightness(1.1);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}@media (min-width:768px){.core-card-lg{grid-column:span 6/span 6}}.core-card-wrap{display:flex;justify-content:space-between}.core-card-wrap-logo{display:flex;align-items:center;justify-content:flex-start}.core-card-text{margin-bottom:0;font-family:Open Sans;font-size:.875rem;line-height:1.5rem;line-height:1.5;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:ease;transition-duration:.3s;transition-timing-function:ease-in-out}:is(.dark .core-card-text){--tw-text-opacity:1;color:rgb(210 214 218/var(--tw-text-opacity))}.core-card-text-doc{margin-top:1rem;margin-bottom:.5rem;padding-left:.25rem;padding-right:.25rem;font-family:Open Sans;font-size:.875rem;line-height:1.5rem;line-height:1.5;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:ease;transition-duration:.3s;transition-timing-function:ease-in-out}:is(.dark .core-card-text-doc){--tw-text-opacity:1;color:rgb(210 214 218/var(--tw-text-opacity))}.core-card-text-doc-link{margin-top:.5rem;cursor:pointer;--tw-text-opacity:1;color:rgb(14 165 233/var(--tw-text-opacity));text-decoration-line:underline}.core-card-text-doc-link:hover{--tw-brightness:brightness(.9);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.center.core-card-text{text-align:center}.core-card-title{margin-bottom:.5rem;font-weight:700}:is(.dark .core-card-title){color:#ffffffe6}.core-card-svg-container{display:inline-block;height:3rem;width:3rem;border-radius:50%;text-align:center}:is(.dark .core-card-svg-container){--tw-brightness:brightness(.9);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.core-card-deactivated-title{font-weight:700}:is(.dark .core-card-deactivated-title){color:#ffffffe6}.core-card-deactivated-svg{position:relative;--tw-translate-y:-8px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));fill:#fbb140;stroke:#fff;font-size:1.125rem;line-height:1.75rem;line-height:1}.core-card-text-container{margin:.75rem .25rem;display:flex;align-items:center;justify-content:flex-start}.core-card-status{position:relative;grid-column:span 12/span 12;margin:.5rem;height:-moz-fit-content;height:fit-content;width:-moz-fit-content;width:fit-content;min-width:0;overflow-wrap:break-word;border-radius:1rem;--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity));background-clip:initial;padding:1rem;--tw-shadow:0 0 2rem 0 #8898aa26;--tw-shadow-colored:0 0 2rem 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:ease;transition-duration:.15s}.core-card-status:hover{--tw-scale-x:1.02;--tw-scale-y:1.02;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}:is(.dark .core-card-status){--tw-bg-opacity:1;background-color:rgb(17 28 68/var(--tw-bg-opacity));--tw-shadow:0 2px 2px 0 #00000024,0 3px 1px -2px #0003,0 1px 5px 0 #0000001f;--tw-shadow-colored:0 2px 2px 0 var(--tw-shadow-color),0 3px 1px -2px var(--tw-shadow-color),0 1px 5px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);--tw-brightness:brightness(1.1);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}@media (min-width:768px){.core-card-status{grid-column:span 6/span 6}}@media (min-width:1320px){.core-card-status{grid-column:span 3/span 3}}@media (min-width:1920px){.core-card-status{grid-column:span 2/span 2}}.core-card-status-container{margin-left:.25rem;margin-right:.25rem;display:flex;align-items:center;justify-content:flex-start}.core-card-status-title{margin-bottom:0;margin-right:1rem;font-weight:700}:is(.dark .core-card-status-title){color:#ffffffe6}.core-card-status-svg{height:1.5rem;width:1.5rem}.info.core-card-status-svg{fill:#0ea5e9}.error.core-card-status-svg{fill:#f53939}.success.core-card-status-svg{fill:#22c55e}.core-layout-separator{grid-column:span 12/span 12}.core-card-list{position:relative;grid-column:span 12/span 12;margin:.5rem;display:grid;max-height:25rem;grid-template-columns:repeat(12,minmax(0,1fr));align-content:flex-start;overflow-y:auto;overflow-x:hidden;overflow-wrap:break-word;border-radius:1rem;--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity));background-clip:initial;padding:1rem;--tw-shadow:0 0 2rem 0 #8898aa26;--tw-shadow-colored:0 0 2rem 0 var(--tw-shadow-color)}.core-card-list,:is(.dark .core-card-list){box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}:is(.dark .core-card-list){--tw-bg-opacity:1;background-color:rgb(17 28 68/var(--tw-bg-opacity));--tw-shadow:0 2px 2px 0 #00000024,0 3px 1px -2px #0003,0 1px 5px 0 #0000001f;--tw-shadow-colored:0 2px 2px 0 var(--tw-shadow-color),0 3px 1px -2px var(--tw-shadow-color),0 1px 5px 0 var(--tw-shadow-color);--tw-brightness:brightness(1.1);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}@media (min-width:576px){.core-card-list{max-height:31.25rem}}@media (min-width:768px){.core-card-list{grid-column:span 6/span 6}}.core-card-list.no-data{place-content:stretch}.core-card-list-no-data{margin-bottom:0;padding-bottom:2rem;text-align:center;font-size:1.5rem;line-height:2rem}@media (min-width:768px){.w-small.core-card-list{max-width:300px}.w-medium.core-card-list{max-width:400px}.w-large.core-card-list{max-width:550px}}.core-card-list-title-container{grid-column:span 12/span 12;display:flex}.core-card-list-title{margin:.5rem .5rem 1rem;font-weight:700}:is(.dark .core-card-list-title){color:#ffffffe6}.core-card-list-container{grid-column:span 12/span 12;overflow-x:auto;overflow-y:auto}.core-card-list-header{margin:0;height:2rem;border-bottom-width:1px;--tw-border-opacity:1;border-color:rgb(206 212 218/var(--tw-border-opacity));padding-bottom:.5rem;font-size:.875rem;line-height:1.5rem;font-weight:700}:is(.dark .core-card-list-header){--tw-text-opacity:1;color:rgb(233 236 239/var(--tw-text-opacity))}.core-card-list-item{display:grid;grid-template-columns:repeat(12,minmax(0,1fr));align-items:center;border-bottom-width:1px;--tw-border-opacity:1;border-color:rgb(210 214 218/var(--tw-border-opacity));padding-top:.625rem;padding-bottom:.625rem}.core-card-list-item-content{margin:.25rem 0;font-size:.875rem;line-height:1.5rem}:is(.dark .core-card-list-item-content){--tw-text-opacity:1;color:rgb(206 212 218/var(--tw-text-opacity))}.core-card-list-wrap{display:grid;width:100%;grid-template-columns:repeat(12,minmax(0,1fr));border-radius:.25rem;padding:.5rem}.w-small.core-card-list-wrap{min-width:200px}.w-medium.core-card-list-wrap{min-width:300px}.w-large.core-card-list-wrap{min-width:450px}.core-card-metrics{grid-column:span 12/span 12;margin:.5rem;display:flex;height:-moz-fit-content;height:fit-content;justify-content:space-between;overflow-wrap:break-word;border-radius:1rem;--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity));background-clip:initial;padding:1rem;--tw-shadow:0 0 2rem 0 #8898aa26;--tw-shadow-colored:0 0 2rem 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:ease;transition-duration:.15s}.core-card-metrics:hover{--tw-scale-x:1.02;--tw-scale-y:1.02;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}:is(.dark .core-card-metrics){--tw-bg-opacity:1;background-color:rgb(17 28 68/var(--tw-bg-opacity));--tw-shadow:0 2px 2px 0 #00000024,0 3px 1px -2px #0003,0 1px 5px 0 #0000001f;--tw-shadow-colored:0 2px 2px 0 var(--tw-shadow-color),0 3px 1px -2px var(--tw-shadow-color),0 1px 5px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);--tw-brightness:brightness(1.1);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}@media (min-width:576px){.core-card-metrics{max-height:7rem}}@media (min-width:768px){.core-card-metrics{grid-column:span 6/span 6}}@media (min-width:1320px){.core-card-metrics{grid-column:span 4/span 4}}.core-card-metrics-name{margin-bottom:.5rem;font-family:Open Sans;font-size:.875rem;line-height:1.5rem;font-weight:600;text-transform:uppercase;line-height:1.5}:is(.dark .core-card-metrics-name){--tw-text-opacity:1;color:rgb(206 212 218/var(--tw-text-opacity))}.core-card-metrics-subtitle{margin-bottom:0}:is(.dark .core-card-metrics-subtitle){--tw-text-opacity:1;color:rgb(210 214 218/var(--tw-text-opacity))}.core-card-metrics-subtitle-content{margin-left:.125rem;margin-right:.125rem;font-size:.875rem;line-height:1.5rem;font-weight:700;line-height:1.5}.error.core-card-metrics-subtitle-content{--tw-text-opacity:1;color:rgb(245 57 57/var(--tw-text-opacity))}.success.core-card-metrics-subtitle-content{--tw-text-opacity:1;color:rgb(34 197 94/var(--tw-text-opacity))}.warning.core-card-metrics-subtitle-content{--tw-text-opacity:1;color:rgb(251 177 64/var(--tw-text-opacity))}.info.core-card-metrics-subtitle-content{--tw-text-opacity:1;color:rgb(14 165 233/var(--tw-text-opacity))}.core-card-metrics-svg{position:relative;fill:#fff;font-size:1.125rem;line-height:1.75rem;line-height:1}.size-small.core-card-metrics-svg{--tw-scale-x:0.5;--tw-scale-y:0.5}.size-medium.core-card-metrics-svg,.size-small.core-card-metrics-svg{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.size-medium.core-card-metrics-svg{--tw-scale-x:0.6;--tw-scale-y:0.6}.size-base.core-card-metrics-svg{--tw-scale-x:0.75;--tw-scale-y:0.75;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.purple.core-card-svg-container{--tw-bg-opacity:1;background-color:rgb(147 51 234/var(--tw-bg-opacity))}.green.core-card-svg-container{--tw-bg-opacity:1;background-color:rgb(21 128 61/var(--tw-bg-opacity))}.red.core-card-svg-container{--tw-bg-opacity:1;background-color:rgb(185 28 28/var(--tw-bg-opacity))}.orange.core-card-svg-container{--tw-bg-opacity:1;background-color:rgb(245 96 54/var(--tw-bg-opacity))}.blue.core-card-svg-container{--tw-bg-opacity:1;background-color:rgb(33 82 255/var(--tw-bg-opacity))}.yellow.core-card-svg-container{--tw-bg-opacity:1;background-color:rgb(202 138 4/var(--tw-bg-opacity))}.gray.core-card-svg-container{--tw-bg-opacity:1;background-color:rgb(108 117 125/var(--tw-bg-opacity))}.dark.core-card-svg-container{--tw-bg-opacity:1;background-color:rgb(98 117 148/var(--tw-bg-opacity))}.amber.core-card-svg-container{--tw-bg-opacity:1;background-color:rgb(217 119 6/var(--tw-bg-opacity))}.emerald.core-card-svg-container{--tw-bg-opacity:1;background-color:rgb(5 150 105/var(--tw-bg-opacity))}.teal.core-card-svg-container{--tw-bg-opacity:1;background-color:rgb(13 148 136/var(--tw-bg-opacity))}.indigo.core-card-svg-container{--tw-bg-opacity:1;background-color:rgb(79 70 229/var(--tw-bg-opacity))}.cyan.core-card-svg-container{--tw-bg-opacity:1;background-color:rgb(8 145 178/var(--tw-bg-opacity))}.sky.core-card-svg-container{--tw-bg-opacity:1;background-color:rgb(3 105 161/var(--tw-bg-opacity))}.pink.core-card-svg-container{--tw-bg-opacity:1;background-color:rgb(219 39 119/var(--tw-bg-opacity))}.lime.core-card-svg-container{--tw-bg-opacity:1;background-color:rgb(101 163 13/var(--tw-bg-opacity))}.core-separator{margin:.75rem 0 .5rem;height:1px;background-color:initial;--tw-gradient-from:#0000 var(--tw-gradient-from-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to);--tw-gradient-stops:var(--tw-gradient-from),#0006 var(--tw-gradient-via-position),var(--tw-gradient-to);--tw-gradient-to:#0000 var(--tw-gradient-to-position)}.core-separator,:is(.dark .core-separator){background-image:linear-gradient(to right,var(--tw-gradient-stops))}:is(.dark .core-separator){--tw-gradient-from:#0000 var(--tw-gradient-from-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to);--tw-gradient-to:#fff0 var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),#fff var(--tw-gradient-via-position),var(--tw-gradient-to);--tw-gradient-to:#0000 var(--tw-gradient-to-position)}.core-card-test-container{margin-top:1rem;display:flex;justify-content:center}.core-card-test-btn{display:inline-block;cursor:pointer;border-radius:.5rem;--tw-bg-opacity:1;background-color:rgb(251 177 64/var(--tw-bg-opacity));padding:.75rem 1.5rem;text-align:center;vertical-align:middle;font-size:.875rem;line-height:1.5rem;font-weight:700;text-transform:uppercase;line-height:1.5;letter-spacing:.025em;--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity));--tw-shadow:0 7px 14px #32325d1a,0 3px 6px #00000014;--tw-shadow-colored:0 7px 14px var(--tw-shadow-color),0 3px 6px var(--tw-shadow-color);transition-property:all;transition-timing-function:ease;transition-duration:.15s;transition-timing-function:ease-in}.core-card-test-btn,.core-card-test-btn:hover{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.core-card-test-btn:hover{--tw-translate-y:-1px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));background-color:#fbb140cc;--tw-shadow:0 4px 6px #32325d1a,0 1px 3px #00000014;--tw-shadow-colored:0 4px 6px var(--tw-shadow-color),0 1px 3px var(--tw-shadow-color)}.core-card-test-btn:focus{background-color:#fbb140cc}.core-card-test-btn:active{opacity:.85}.core-card-test-btn:disabled{cursor:not-allowed;--tw-bg-opacity:1;--tw-text-opacity:1;color:rgb(73 80 87/var(--tw-text-opacity))}.core-card-test-btn:disabled,.core-card-test-btn:hover:disabled{border-color:#ced4da00;background-color:rgb(206 212 218/var(--tw-bg-opacity))}.core-card-test-btn:hover:disabled{--tw-translate-y:0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));--tw-bg-opacity:1}:is(.dark .core-card-test-btn){--tw-brightness:brightness(.9);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}:is(.dark .core-card-test-btn:disabled){border-color:#49505700;--tw-bg-opacity:1;background-color:rgb(73 80 87/var(--tw-bg-opacity));--tw-text-opacity:1;color:rgb(210 214 218/var(--tw-text-opacity))}:is(.dark .core-card-test-btn:hover:disabled){--tw-translate-y:0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));border-color:#49505700;--tw-bg-opacity:1;background-color:rgb(73 80 87/var(--tw-bg-opacity))}.core-card-upload-btn{display:inline-block;width:-moz-fit-content;width:fit-content;cursor:pointer;border-radius:.5rem;--tw-bg-opacity:1;background-color:rgb(11 85 119/var(--tw-bg-opacity));background-image:linear-gradient(to top left,var(--tw-gradient-stops));background-size:150%;background-position:25% 0;padding:.75rem 1.5rem;text-align:center;vertical-align:middle;font-size:.75rem;line-height:1rem;font-weight:700;text-transform:uppercase;line-height:1.5;letter-spacing:.025em;--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity));--tw-shadow:0 7px 14px #32325d1a,0 3px 6px #00000014;--tw-shadow-colored:0 7px 14px var(--tw-shadow-color),0 3px 6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);transition-property:all;transition-timing-function:ease;transition-duration:.15s;transition-timing-function:ease-in}.core-card-upload-btn:hover{--tw-translate-y:-1px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));--tw-shadow:0 4px 6px #32325d1a,0 1px 3px #00000014;--tw-shadow-colored:0 4px 6px var(--tw-shadow-color),0 1px 3px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);--tw-brightness:brightness(.75);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.core-card-upload-btn:active{opacity:.85}.core-card-upload-btn:disabled{cursor:not-allowed;--tw-border-opacity:1;border-color:rgb(206 212 218/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(206 212 218/var(--tw-bg-opacity));--tw-text-opacity:1;color:rgb(73 80 87/var(--tw-text-opacity));opacity:.75}.core-card-upload-btn:hover:disabled{--tw-translate-y:0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}:is(.dark .core-card-upload-btn){--tw-brightness:brightness(1.25);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}:is(.dark .core-card-upload-btn:disabled){--tw-border-opacity:1;border-color:rgb(37 47 64/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(37 47 64/var(--tw-bg-opacity));--tw-text-opacity:1;color:rgb(210 214 218/var(--tw-text-opacity))}.core-card-test-status-container{margin-left:.25rem;margin-right:.25rem;display:flex;align-items:center;justify-content:center}.core-card-test-status-svg{margin-right:.5rem;height:1.5rem;width:1.5rem}.success.core-card-test-status-svg{fill:#22c55e}.error.core-card-test-status-svg{fill:#f53939}.info.core-card-test-status-svg{fill:#0ea5e9}.core-img-default{margin-right:1rem;height:3rem;width:3rem}.core-img-hor{margin-right:1rem;height:4rem;width:6rem}.file-manager-actions-item-btn{position:relative;margin:.25rem;cursor:pointer;white-space:nowrap;border-radius:.25rem;border-width:1px;--tw-border-opacity:1;border-color:rgb(11 85 119/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity));padding:.75rem 1.25rem .625rem 1rem;text-align:center;vertical-align:middle;font-size:.875rem;line-height:1.5rem;font-weight:700;text-transform:uppercase;line-height:1.5;letter-spacing:-.025rem;--tw-text-opacity:1;color:rgb(11 85 119/var(--tw-text-opacity));--tw-shadow:0 7px 14px #32325d1a,0 3px 6px #00000014;--tw-shadow-colored:0 7px 14px var(--tw-shadow-color),0 3px 6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);transition-property:all;transition-timing-function:ease;transition-duration:.15s;transition-timing-function:ease-in}.file-manager-actions-item-btn:hover{--tw-bg-opacity:1;background-color:rgb(235 239 244/var(--tw-bg-opacity));--tw-shadow:0 4px 6px #32325d1a,0 1px 3px #00000014;--tw-shadow-colored:0 4px 6px var(--tw-shadow-color),0 1px 3px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.file-manager-actions-item-btn:disabled{cursor:not-allowed;border-color:#ced4da00;--tw-bg-opacity:1;background-color:rgb(206 212 218/var(--tw-bg-opacity));--tw-text-opacity:1;color:rgb(73 80 87/var(--tw-text-opacity))}.file-manager-actions-item-btn:hover:disabled{--tw-translate-y:0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));border-color:#ced4da00;--tw-bg-opacity:1;background-color:rgb(206 212 218/var(--tw-bg-opacity))}:is(.dark .file-manager-actions-item-btn){--tw-border-opacity:1;border-color:rgb(98 117 148/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(52 71 103/var(--tw-bg-opacity));--tw-text-opacity:1;color:rgb(233 236 239/var(--tw-text-opacity))}:is(.dark .file-manager-actions-item-btn:hover){--tw-bg-opacity:1;background-color:rgb(58 65 111/var(--tw-bg-opacity))}:is(.dark .file-manager-actions-item-btn:disabled){border-color:#49505700;--tw-bg-opacity:1;background-color:rgb(73 80 87/var(--tw-bg-opacity));--tw-text-opacity:1;color:rgb(210 214 218/var(--tw-text-opacity))}:is(.dark .file-manager-actions-item-btn:hover:disabled){--tw-translate-y:0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));border-color:#49505700;--tw-bg-opacity:1;background-color:rgb(73 80 87/var(--tw-bg-opacity))}@media (min-width:768px){.file-manager-actions-item-btn{display:block}}.first-letter\:absolute:first-letter{position:absolute!important}.first-letter\:w-full:first-letter{width:100%!important}.placeholder\:text-gray-500::-moz-placeholder{--tw-text-opacity:1!important;color:rgb(173 181 189/var(--tw-text-opacity))!important}.placeholder\:text-gray-500::placeholder{--tw-text-opacity:1!important;color:rgb(173 181 189/var(--tw-text-opacity))!important}.before\:float-left:before{content:var(--tw-content)!important;float:left!important}.before\:pr-2:before{content:var(--tw-content)!important;padding-right:.5rem!important}.before\:text-white:before{content:var(--tw-content)!important;--tw-text-opacity:1!important;color:rgb(255 255 255/var(--tw-text-opacity))!important}.before\:content-\[\'\/\'\]:before{--tw-content:"/"!important;content:var(--tw-content)!important}.after\:absolute:after{content:var(--tw-content)!important;position:absolute!important}.after\:top-px:after{content:var(--tw-content)!important;top:1px!important}.after\:float-right:after{content:var(--tw-content)!important;float:right!important}.after\:h-4:after{content:var(--tw-content)!important;height:1rem!important}.after\:w-4:after{content:var(--tw-content)!important;width:1rem!important}.after\:translate-x-px:after{content:var(--tw-content)!important;--tw-translate-x:1px!important;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}.after\:rounded-circle:after{content:var(--tw-content)!important;border-radius:50%!important}.after\:bg-white:after{content:var(--tw-content)!important;--tw-bg-opacity:1!important;background-color:rgb(255 255 255/var(--tw-bg-opacity))!important}.after\:pl-2:after{content:var(--tw-content)!important;padding-left:.5rem!important}.after\:text-gray-600:after{content:var(--tw-content)!important;--tw-text-opacity:1!important;color:rgb(108 117 125/var(--tw-text-opacity))!important}.after\:shadow-2xl:after{content:var(--tw-content)!important;--tw-shadow:0 .3125rem .625rem 0 #0000001f!important;--tw-shadow-colored:0 .3125rem .625rem 0 var(--tw-shadow-color)!important;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)!important}.after\:duration-300:after{content:var(--tw-content)!important;transition-duration:.3s!important}.after\:content-\[\'\'\]:after{--tw-content:""!important;content:var(--tw-content)!important}.after\:content-\[\'\/\'\]:after{--tw-content:"/"!important;content:var(--tw-content)!important}.checked\:z-0:checked{z-index:0!important}.checked\:border-primary:checked{--tw-border-opacity:1!important;border-color:rgb(11 85 119/var(--tw-border-opacity))!important}.checked\:bg-primary:checked{--tw-bg-opacity:1!important;background-color:rgb(11 85 119/var(--tw-bg-opacity))!important}.checked\:bg-none:checked{background-image:none!important}.checked\:bg-right:checked{background-position:100%!important}.checked\:after\:translate-x-5:checked:after{--tw-translate-x:1.25rem!important}.checked\:after\:translate-x-5:checked:after,.checked\:after\:translate-x-5\.3:checked:after{content:var(--tw-content)!important;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}.checked\:after\:translate-x-5\.3:checked:after{--tw-translate-x:1.3rem!important}.valid\:\!border-red-500:valid{--tw-border-opacity:1!important;border-color:rgb(245 57 57/var(--tw-border-opacity))!important}.hover\:-translate-y-0:hover{--tw-translate-y:-0px!important}.hover\:-translate-y-0:hover,.hover\:-translate-y-0\.4:hover{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}.hover\:-translate-y-0\.4:hover{--tw-translate-y:-0.1rem!important}.hover\:-translate-y-0\.5:hover{--tw-translate-y:-0.125rem!important}.hover\:-translate-y-0\.5:hover,.hover\:-translate-y-px:hover{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}.hover\:-translate-y-px:hover{--tw-translate-y:-1px!important}.hover\:scale-102:hover{--tw-scale-x:1.02!important;--tw-scale-y:1.02!important;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}.hover\:rounded-lg:hover{border-radius:.5rem!important}.hover\:bg-emerald-500:hover{--tw-bg-opacity:1!important;background-color:rgb(45 206 137/var(--tw-bg-opacity))!important}.hover\:bg-emerald-500\/80:hover{background-color:#2dce89cc!important}.hover\:bg-gray-100:hover{--tw-bg-opacity:1!important;background-color:rgb(235 239 244/var(--tw-bg-opacity))!important}.hover\:bg-gray-100\/10:hover{background-color:#ebeff41a!important}.hover\:bg-gray-300:hover{--tw-bg-opacity:1!important;background-color:rgb(210 214 218/var(--tw-bg-opacity))!important}.hover\:bg-gray-500:hover{--tw-bg-opacity:1!important;background-color:rgb(173 181 189/var(--tw-bg-opacity))!important}.hover\:bg-gray-500\/80:hover{background-color:#adb5bdcc!important}.hover\:bg-gray-600:hover{--tw-bg-opacity:1!important;background-color:rgb(108 117 125/var(--tw-bg-opacity))!important}.hover\:bg-gray-600\/80:hover{background-color:#6c757dcc!important}.hover\:bg-green-500:hover{--tw-bg-opacity:1!important;background-color:rgb(34 197 94/var(--tw-bg-opacity))!important}.hover\:bg-green-500\/80:hover{background-color:#22c55ecc!important}.hover\:bg-orange-500:hover{--tw-bg-opacity:1!important;background-color:rgb(251 99 64/var(--tw-bg-opacity))!important}.hover\:bg-orange-500\/80:hover{background-color:#fb6340cc!important}.hover\:bg-primary\/30:hover{background-color:#0b55774d!important}.hover\:bg-primary\/5:hover{background-color:#0b55770d!important}.hover\:bg-primary\/80:hover{background-color:#0b5577cc!important}.hover\:bg-red-500:hover{--tw-bg-opacity:1!important;background-color:rgb(245 57 57/var(--tw-bg-opacity))!important}.hover\:bg-red-500\/80:hover{background-color:#f53939cc!important}.hover\:bg-sky-500:hover{--tw-bg-opacity:1!important;background-color:rgb(14 165 233/var(--tw-bg-opacity))!important}.hover\:bg-sky-500\/80:hover{background-color:#0ea5e9cc!important}.hover\:bg-yellow-400:hover{--tw-bg-opacity:1!important;background-color:rgb(251 207 51/var(--tw-bg-opacity))!important}.hover\:bg-yellow-400\/80:hover{background-color:#fbcf33cc!important}.hover\:bg-yellow-500:hover{--tw-bg-opacity:1!important;background-color:rgb(251 177 64/var(--tw-bg-opacity))!important}.hover\:bg-yellow-500\/80:hover{background-color:#fbb140cc!important}.hover\:italic:hover{font-style:italic!important}.hover\:no-underline:hover{text-decoration-line:none!important}.hover\:opacity-80:hover{opacity:.8!important}.hover\:shadow-md:hover{--tw-shadow:0 4px 6px #32325d1a,0 1px 3px #00000014!important;--tw-shadow-colored:0 4px 6px var(--tw-shadow-color),0 1px 3px var(--tw-shadow-color)!important;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)!important}.hover\:brightness-75:hover{--tw-brightness:brightness(.75)!important}.hover\:brightness-75:hover,.hover\:brightness-90:hover{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)!important}.hover\:brightness-90:hover{--tw-brightness:brightness(.9)!important}.hover\:brightness-95:hover{--tw-brightness:brightness(.95)!important;filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)!important}.focus\:\!border-red-500:focus{--tw-border-opacity:1!important;border-color:rgb(245 57 57/var(--tw-border-opacity))!important}.focus\:border-green-500:focus{--tw-border-opacity:1!important;border-color:rgb(34 197 94/var(--tw-border-opacity))!important}.focus\:border-primary:focus{--tw-border-opacity:1!important;border-color:rgb(11 85 119/var(--tw-border-opacity))!important}.focus\:bg-emerald-500:focus{--tw-bg-opacity:1!important;background-color:rgb(45 206 137/var(--tw-bg-opacity))!important}.focus\:bg-emerald-500\/80:focus{background-color:#2dce89cc!important}.focus\:bg-gray-500:focus{--tw-bg-opacity:1!important;background-color:rgb(173 181 189/var(--tw-bg-opacity))!important}.focus\:bg-gray-500\/80:focus{background-color:#adb5bdcc!important}.focus\:bg-gray-600:focus{--tw-bg-opacity:1!important;background-color:rgb(108 117 125/var(--tw-bg-opacity))!important}.focus\:bg-gray-600\/80:focus{background-color:#6c757dcc!important}.focus\:bg-green-500:focus{--tw-bg-opacity:1!important;background-color:rgb(34 197 94/var(--tw-bg-opacity))!important}.focus\:bg-green-500\/80:focus{background-color:#22c55ecc!important}.focus\:bg-orange-500:focus{--tw-bg-opacity:1!important;background-color:rgb(251 99 64/var(--tw-bg-opacity))!important}.focus\:bg-orange-500\/80:focus{background-color:#fb6340cc!important}.focus\:bg-primary\/80:focus{background-color:#0b5577cc!important}.focus\:bg-red-500:focus{--tw-bg-opacity:1!important;background-color:rgb(245 57 57/var(--tw-bg-opacity))!important}.focus\:bg-red-500\/80:focus{background-color:#f53939cc!important}.focus\:bg-sky-500:focus{--tw-bg-opacity:1!important;background-color:rgb(14 165 233/var(--tw-bg-opacity))!important}.focus\:bg-sky-500\/80:focus{background-color:#0ea5e9cc!important}.focus\:bg-yellow-400:focus{--tw-bg-opacity:1!important;background-color:rgb(251 207 51/var(--tw-bg-opacity))!important}.focus\:bg-yellow-400\/80:focus{background-color:#fbcf33cc!important}.focus\:bg-yellow-500:focus{--tw-bg-opacity:1!important;background-color:rgb(251 177 64/var(--tw-bg-opacity))!important}.focus\:bg-yellow-500\/80:focus{background-color:#fbb140cc!important}.focus\:outline:focus{outline-style:solid!important}.focus\:\!ring-red-500:focus{--tw-ring-opacity:1!important;--tw-ring-color:rgb(245 57 57/var(--tw-ring-opacity))!important}.focus\:valid\:\!border-red-500:valid:focus{--tw-border-opacity:1!important;border-color:rgb(245 57 57/var(--tw-border-opacity))!important}.focus\:valid\:border-green-500:valid:focus{--tw-border-opacity:1!important;border-color:rgb(34 197 94/var(--tw-border-opacity))!important}.focus\:valid\:\!ring-red-500:valid:focus{--tw-ring-opacity:1!important;--tw-ring-color:rgb(245 57 57/var(--tw-ring-opacity))!important}.focus\:invalid\:border-red-500:invalid:focus{--tw-border-opacity:1!important;border-color:rgb(245 57 57/var(--tw-border-opacity))!important}.focus\:file\:invalid\:border-red-500:invalid::file-selector-button:focus{--tw-border-opacity:1!important;border-color:rgb(245 57 57/var(--tw-border-opacity))!important}.active\:\!border-red-500:active{--tw-border-opacity:1!important;border-color:rgb(245 57 57/var(--tw-border-opacity))!important}.active\:opacity-85:active{opacity:.85!important}.active\:valid\:\!border-red-500:valid:active{--tw-border-opacity:1!important;border-color:rgb(245 57 57/var(--tw-border-opacity))!important}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed!important}.disabled\:border-gray-400:disabled{--tw-border-opacity:1!important;border-color:rgb(206 212 218/var(--tw-border-opacity))!important}.disabled\:border-gray-400\/0:disabled{border-color:#ced4da00!important}.disabled\:bg-gray-400:disabled{--tw-bg-opacity:1!important;background-color:rgb(206 212 218/var(--tw-bg-opacity))!important}.disabled\:text-gray-700:disabled{--tw-text-opacity:1!important;color:rgb(73 80 87/var(--tw-text-opacity))!important}.disabled\:opacity-75:disabled{opacity:.75!important}.disabled\:hover\:translate-y-0:hover:disabled{--tw-translate-y:0px!important;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}.disabled\:hover\:border-gray-400\/0:hover:disabled{border-color:#ced4da00!important}.disabled\:hover\:bg-gray-400:hover:disabled{--tw-bg-opacity:1!important;background-color:rgb(206 212 218/var(--tw-bg-opacity))!important}.group:hover .group-hover\:z-10{z-index:10!important}.group:hover .group-hover\:opacity-100{opacity:1!important}:is(.dark .dark\:inline){display:inline!important}:is(.dark .dark\:hidden){display:none!important}:is(.dark .dark\:border-gray-200){--tw-border-opacity:1!important;border-color:rgb(233 236 239/var(--tw-border-opacity))!important}:is(.dark .dark\:border-gray-300){--tw-border-opacity:1!important;border-color:rgb(210 214 218/var(--tw-border-opacity))!important}:is(.dark .dark\:border-gray-700){--tw-border-opacity:1!important;border-color:rgb(73 80 87/var(--tw-border-opacity))!important}:is(.dark .dark\:border-slate-600){--tw-border-opacity:1!important;border-color:rgb(98 117 148/var(--tw-border-opacity))!important}:is(.dark .dark\:border-slate-800){--tw-border-opacity:1!important;border-color:rgb(58 65 111/var(--tw-border-opacity))!important}:is(.dark .dark\:bg-gray-400){--tw-bg-opacity:1!important;background-color:rgb(206 212 218/var(--tw-bg-opacity))!important}:is(.dark .dark\:bg-gray-800){--tw-bg-opacity:1!important;background-color:rgb(37 47 64/var(--tw-bg-opacity))!important}:is(.dark .dark\:bg-green-500\/90){background-color:#22c55ee6!important}:is(.dark .dark\:bg-primary){--tw-bg-opacity:1!important;background-color:rgb(11 85 119/var(--tw-bg-opacity))!important}:is(.dark .dark\:bg-primary\/50){background-color:#0b557780!important}:is(.dark .dark\:bg-red-500\/90){background-color:#f53939e6!important}:is(.dark .dark\:bg-slate-700){--tw-bg-opacity:1!important;background-color:rgb(52 71 103/var(--tw-bg-opacity))!important}:is(.dark .dark\:bg-slate-700\/50){background-color:#34476780!important}:is(.dark .dark\:bg-slate-800){--tw-bg-opacity:1!important;background-color:rgb(58 65 111/var(--tw-bg-opacity))!important}:is(.dark .dark\:bg-slate-850){--tw-bg-opacity:1!important;background-color:rgb(17 28 68/var(--tw-bg-opacity))!important}:is(.dark .dark\:bg-slate-900){--tw-bg-opacity:1!important;background-color:rgb(5 17 57/var(--tw-bg-opacity))!important}:is(.dark .dark\:bg-slate-900\/30){background-color:#0511394d!important}:is(.dark .dark\:bg-gradient-to-r){background-image:linear-gradient(to right,var(--tw-gradient-stops))!important}:is(.dark .dark\:from-transparent){--tw-gradient-from:#0000 var(--tw-gradient-from-position)!important;--tw-gradient-to:#0000 var(--tw-gradient-to-position)!important;--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)!important}:is(.dark .dark\:via-white){--tw-gradient-to:#fff0 var(--tw-gradient-to-position)!important;--tw-gradient-stops:var(--tw-gradient-from),#fff var(--tw-gradient-via-position),var(--tw-gradient-to)!important}:is(.dark .dark\:to-transparent){--tw-gradient-to:#0000 var(--tw-gradient-to-position)!important}:is(.dark .dark\:fill-blue-500){fill:#5e72e4!important}:is(.dark .dark\:fill-gray-300){fill:#d2d6da!important}:is(.dark .dark\:fill-gray-500){fill:#adb5bd!important}:is(.dark .dark\:fill-gray-600){fill:#6c757d!important}:is(.dark .dark\:stroke-amber-500){stroke:#f59e0b!important}:is(.dark .dark\:stroke-gray-300){stroke:#d2d6da!important}:is(.dark .dark\:stroke-gray-400){stroke:#ced4da!important}:is(.dark .dark\:stroke-gray-600){stroke:#6c757d!important}:is(.dark .dark\:stroke-red-500){stroke:#f53939!important}:is(.dark .dark\:stroke-white\/90){stroke:#ffffffe6!important}:is(.dark .dark\:text-gray-100){--tw-text-opacity:1!important;color:rgb(235 239 244/var(--tw-text-opacity))!important}:is(.dark .dark\:text-gray-200){--tw-text-opacity:1!important;color:rgb(233 236 239/var(--tw-text-opacity))!important}:is(.dark .dark\:text-gray-300){--tw-text-opacity:1!important;color:rgb(210 214 218/var(--tw-text-opacity))!important}:is(.dark .dark\:text-gray-400){--tw-text-opacity:1!important;color:rgb(206 212 218/var(--tw-text-opacity))!important}:is(.dark .dark\:text-gray-50){--tw-text-opacity:1!important;color:rgb(248 249 250/var(--tw-text-opacity))!important}:is(.dark .dark\:text-gray-500){--tw-text-opacity:1!important;color:rgb(173 181 189/var(--tw-text-opacity))!important}:is(.dark .dark\:text-white){--tw-text-opacity:1!important;color:rgb(255 255 255/var(--tw-text-opacity))!important}:is(.dark .dark\:text-white\/80){color:#fffc!important}:is(.dark .dark\:text-white\/90){color:#ffffffe6!important}:is(.dark .dark\:opacity-100){opacity:1!important}:is(.dark .dark\:opacity-60){opacity:.6!important}:is(.dark .dark\:opacity-80){opacity:.8!important}:is(.dark .dark\:opacity-90){opacity:.9!important}:is(.dark .dark\:shadow-dark-xl){--tw-shadow:0 2px 2px 0 #00000024,0 3px 1px -2px #0003,0 1px 5px 0 #0000001f!important;--tw-shadow-colored:0 2px 2px 0 var(--tw-shadow-color),0 3px 1px -2px var(--tw-shadow-color),0 1px 5px 0 var(--tw-shadow-color)!important}:is(.dark .dark\:shadow-dark-xl),:is(.dark .dark\:shadow-none){box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)!important}:is(.dark .dark\:shadow-none){--tw-shadow:0 0 #0000!important;--tw-shadow-colored:0 0 #0000!important}:is(.dark .dark\:brightness-110){--tw-brightness:brightness(1.1)!important}:is(.dark .dark\:brightness-110),:is(.dark .dark\:brightness-125){filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)!important}:is(.dark .dark\:brightness-125){--tw-brightness:brightness(1.25)!important}:is(.dark .dark\:brightness-90){--tw-brightness:brightness(.9)!important}:is(.dark .dark\:brightness-90),:is(.dark .dark\:brightness-95){filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)!important}:is(.dark .dark\:brightness-95){--tw-brightness:brightness(.95)!important}:is(.dark .dark\:brightness-\[0\.885\]){--tw-brightness:brightness(0.885)!important;filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)!important}:is(.dark .dark\:placeholder\:text-gray-600)::-moz-placeholder{--tw-text-opacity:1!important;color:rgb(108 117 125/var(--tw-text-opacity))!important}:is(.dark .dark\:placeholder\:text-gray-600)::placeholder{--tw-text-opacity:1!important;color:rgb(108 117 125/var(--tw-text-opacity))!important}:is(.dark .dark\:after\:text-gray-300):after{content:var(--tw-content)!important;--tw-text-opacity:1!important;color:rgb(210 214 218/var(--tw-text-opacity))!important}:is(.dark .dark\:after\:text-gray-500):after{content:var(--tw-content)!important;--tw-text-opacity:1!important;color:rgb(173 181 189/var(--tw-text-opacity))!important}:is(.dark .dark\:checked\:border-primary:checked){--tw-border-opacity:1!important;border-color:rgb(11 85 119/var(--tw-border-opacity))!important}:is(.dark .dark\:checked\:bg-primary:checked){--tw-bg-opacity:1!important;background-color:rgb(11 85 119/var(--tw-bg-opacity))!important}:is(.dark .dark\:hover\:bg-primary\/20:hover){background-color:#0b557733!important}:is(.dark .dark\:hover\:bg-primary\/60:hover){background-color:#0b557799!important}:is(.dark .dark\:hover\:bg-slate-700\/50:hover){background-color:#34476780!important}:is(.dark .dark\:hover\:bg-slate-800:hover){--tw-bg-opacity:1!important;background-color:rgb(58 65 111/var(--tw-bg-opacity))!important}:is(.dark .dark\:hover\:brightness-100:hover){--tw-brightness:brightness(1)!important}:is(.dark .dark\:hover\:brightness-100:hover),:is(.dark .dark\:hover\:brightness-105:hover){filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)!important}:is(.dark .dark\:hover\:brightness-105:hover){--tw-brightness:brightness(1.05)!important}:is(.dark .dark\:hover\:brightness-110:hover){--tw-brightness:brightness(1.1)!important}:is(.dark .dark\:hover\:brightness-110:hover),:is(.dark .dark\:hover\:brightness-90:hover){filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)!important}:is(.dark .dark\:hover\:brightness-90:hover){--tw-brightness:brightness(.9)!important}:is(.dark .dark\:disabled\:border-gray-700\/0:disabled){border-color:#49505700!important}:is(.dark .dark\:disabled\:border-gray-800:disabled){--tw-border-opacity:1!important;border-color:rgb(37 47 64/var(--tw-border-opacity))!important}:is(.dark .dark\:disabled\:bg-gray-700:disabled){--tw-bg-opacity:1!important;background-color:rgb(73 80 87/var(--tw-bg-opacity))!important}:is(.dark .dark\:disabled\:bg-gray-800:disabled){--tw-bg-opacity:1!important;background-color:rgb(37 47 64/var(--tw-bg-opacity))!important}:is(.dark .dark\:disabled\:text-gray-300:disabled){--tw-text-opacity:1!important;color:rgb(210 214 218/var(--tw-text-opacity))!important}:is(.dark .dark\:disabled\:text-gray-400:disabled){--tw-text-opacity:1!important;color:rgb(206 212 218/var(--tw-text-opacity))!important}:is(.dark .dark\:disabled\:hover\:translate-y-0:hover:disabled){--tw-translate-y:0px!important;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}:is(.dark .dark\:disabled\:hover\:border-gray-700\/0:hover:disabled){border-color:#49505700!important}:is(.dark .dark\:disabled\:hover\:bg-gray-700:hover:disabled){--tw-bg-opacity:1!important;background-color:rgb(73 80 87/var(--tw-bg-opacity))!important}@media (min-width:576px){.sm\:right-24{right:6rem!important}.sm\:right-40{right:10rem!important}.sm\:right-6{right:1.5rem!important}.sm\:top-2{top:.5rem!important}.sm\:top-8{top:2rem!important}.sm\:top-\[4\.5rem\]{top:4.5rem!important}.sm\:col-span-4{grid-column:span 4/span 4!important}.sm\:col-span-6{grid-column:span 6/span 6!important}.sm\:col-start-5{grid-column-start:5!important}.sm\:mx-2{margin-left:.5rem!important;margin-right:.5rem!important}.sm\:mx-6{margin-left:1.5rem!important;margin-right:1.5rem!important}.sm\:my-0{margin-top:0!important;margin-bottom:0!important}.sm\:mb-2{margin-bottom:.5rem!important}.sm\:ml-1{margin-left:.25rem!important}.sm\:ml-4{margin-left:1rem!important}.sm\:mr-16{margin-right:4rem!important}.sm\:mt-0{margin-top:0!important}.sm\:block{display:block!important}.sm\:inline{display:inline!important}.sm\:flex{display:flex!important}.sm\:h-10{height:2.5rem!important}.sm\:h-14{height:3.5rem!important}.sm\:h-7{height:1.75rem!important}.sm\:max-h-125{max-height:31.25rem!important}.sm\:w-36{width:9rem!important}.sm\:w-50{width:12.5rem!important}.sm\:w-7{width:1.75rem!important}.sm\:min-w-\[250px\]{min-width:250px!important}.sm\:min-w-\[500px\]{min-width:500px!important}.sm\:max-w-\[350px\]{max-width:350px!important}.sm\:translate-x-0{--tw-translate-x:0px!important}.sm\:scale-100,.sm\:translate-x-0{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}.sm\:scale-100{--tw-scale-x:1!important;--tw-scale-y:1!important}.sm\:flex-row{flex-direction:row!important}.sm\:items-center{align-items:center!important}.sm\:justify-end{justify-content:flex-end!important}.sm\:justify-items-start{justify-items:start!important}.sm\:gap-4{gap:1rem!important}.sm\:p-3{padding:.75rem!important}.sm\:px-12{padding-left:3rem!important;padding-right:3rem!important}.sm\:px-4{padding-left:1rem!important;padding-right:1rem!important}.sm\:px-6{padding-left:1.5rem!important;padding-right:1.5rem!important}.sm\:pl-3{padding-left:.75rem!important}.sm\:pr-2{padding-right:.5rem!important}.sm\:pt-6{padding-top:1.5rem!important}.sm\:text-left{text-align:left!important}.sm\:text-2xl{font-size:1.5rem!important;line-height:2rem!important}.sm\:text-4xl{font-size:2.25rem!important;line-height:2.5rem!important}.sm\:text-7xl{font-size:4.5rem!important;line-height:1!important}.sm\:text-base{font-size:1rem!important}.sm\:text-base,.sm\:text-sm{line-height:1.5rem!important}.sm\:text-sm{font-size:.875rem!important}}@media (min-width:768px){.md\:absolute{position:absolute!important}.md\:right-8{right:2rem!important}.md\:right-\[3\.75rem\]{right:3.75rem!important}.md\:top-\[40\%\]{top:40%!important}.md\:top-\[53\%\]{top:53%!important}.md\:col-span-4{grid-column:span 4/span 4!important}.md\:col-span-6{grid-column:span 6/span 6!important}.md\:col-span-7{grid-column:span 7/span 7!important}.md\:col-span-8{grid-column:span 8/span 8!important}.md\:mx-3{margin-left:.75rem!important;margin-right:.75rem!important}.md\:mx-4{margin-left:1rem!important;margin-right:1rem!important}.md\:my-3{margin-top:.75rem!important;margin-bottom:.75rem!important}.md\:mb-0{margin-bottom:0!important}.md\:mb-3{margin-bottom:.75rem!important}.md\:mr-3{margin-right:.75rem!important}.md\:mt-0{margin-top:0!important}.md\:mt-6{margin-top:1.5rem!important}.md\:hidden{display:none!important}.md\:h-16{height:4rem!important}.md\:max-h-\[90vh\]{max-height:90vh!important}.md\:min-h-50-screen{min-height:50vh!important}.md\:w-1\/2{width:50%!important}.md\:w-60{width:15rem!important}.md\:max-w-\[700px\]{max-width:700px!important}.md\:-translate-y-20{--tw-translate-y:-5rem!important;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}.md\:flex-row{flex-direction:row!important}.md\:items-end{align-items:flex-end!important}.md\:gap-x-4{-moz-column-gap:1rem!important;column-gap:1rem!important}.md\:gap-x-6{-moz-column-gap:1.5rem!important;column-gap:1.5rem!important}.md\:px-1{padding-left:.25rem!important;padding-right:.25rem!important}.md\:px-3{padding-left:.75rem!important;padding-right:.75rem!important}.md\:px-4{padding-left:1rem!important;padding-right:1rem!important}.md\:px-6{padding-left:1.5rem!important;padding-right:1.5rem!important}.md\:py-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.md\:text-base{font-size:1rem!important;line-height:1.5rem!important}}@media (min-width:992px){.lg\:relative{position:relative!important}.lg\:bottom-2{bottom:.5rem!important}.lg\:left-48{left:12rem!important}.lg\:top-24{top:6rem!important}.lg\:order-1{order:1!important}.lg\:order-2{order:2!important}.lg\:col-span-1{grid-column:span 1/span 1!important}.lg\:col-span-4{grid-column:span 4/span 4!important}.lg\:col-span-5{grid-column:span 5/span 5!important}.lg\:col-span-6{grid-column:span 6/span 6!important}.lg\:col-span-8{grid-column:span 8/span 8!important}.lg\:mx-0{margin-left:0!important;margin-right:0!important}.lg\:mx-4{margin-left:1rem!important;margin-right:1rem!important}.lg\:mx-8{margin-left:2rem!important;margin-right:2rem!important}.lg\:my-3{margin-top:.75rem!important;margin-bottom:.75rem!important}.lg\:mt-0{margin-top:0!important}.lg\:mt-4{margin-top:1rem!important}.lg\:mt-8{margin-top:2rem!important}.lg\:block{display:block!important}.lg\:inline{display:inline!important}.lg\:flex{display:flex!important}.lg\:hidden{display:none!important}.lg\:h-24{height:6rem!important}.lg\:h-36{height:9rem!important}.lg\:h-9{height:2.25rem!important}.lg\:max-h-\[550px\]{max-height:550px!important}.lg\:w-36{width:9rem!important}.lg\:w-80{width:20rem!important}.lg\:w-9{width:2.25rem!important}.lg\:w-\[400px\]{width:400px!important}.lg\:max-w-\[700px\]{max-width:700px!important}.lg\:translate-x-0{--tw-translate-x:0px!important}.lg\:translate-x-0,.lg\:translate-y-0{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}.lg\:translate-y-0{--tw-translate-y:0px!important}.lg\:flex-row{flex-direction:row!important}.lg\:flex-nowrap{flex-wrap:nowrap!important}.lg\:justify-start{justify-content:flex-start!important}.lg\:justify-end{justify-content:flex-end!important}.lg\:justify-between{justify-content:space-between!important}.lg\:gap-6{gap:1.5rem!important}.lg\:bg-gray-50{--tw-bg-opacity:1!important;background-color:rgb(248 249 250/var(--tw-bg-opacity))!important}.lg\:px-6{padding-left:1.5rem!important;padding-right:1.5rem!important}.lg\:pb-1{padding-bottom:.25rem!important}.lg\:pb-28{padding-bottom:7rem!important}.lg\:pt-6{padding-top:1.5rem!important}.lg\:text-left{text-align:left!important}.lg\:text-base{font-size:1rem!important}.lg\:text-base,.lg\:text-sm{line-height:1.5rem!important}.lg\:text-sm{font-size:.875rem!important}}@media (min-width:1200px){.xl\:left-0{left:0!important}.xl\:right-24{right:6rem!important}.xl\:right-6{right:1.5rem!important}.xl\:ml-6{margin-left:1.5rem!important}.xl\:ml-68{margin-left:17rem!important}.xl\:hidden{display:none!important}.xl\:h-44{height:11rem!important}.xl\:max-h-\[550px\]{max-height:550px!important}.xl\:w-1\/3{width:33.333333%!important}.xl\:w-44{width:11rem!important}.xl\:w-\[500px\]{width:500px!important}.xl\:max-w-\[1200px\]{max-width:1200px!important}.xl\:translate-x-0{--tw-translate-x:0px!important;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}.xl\:p-1{padding:.25rem!important}.xl\:p-1\.5{padding:.375rem!important}.xl\:pl-75{padding-left:18.75rem!important}.xl\:text-base{font-size:1rem!important;line-height:1.5rem!important}}@media (min-width:1320px){.\32xl\:col-span-4{grid-column:span 4/span 4!important}.\32xl\:col-span-6{grid-column:span 6/span 6!important}.\32xl\:my-3{margin-top:.75rem!important;margin-bottom:.75rem!important}.\32xl\:max-w-\[1500px\]{max-width:1500px!important}.\32xl\:text-3xl{font-size:1.875rem!important;line-height:2.25rem!important}.\32xl\:text-5xl{font-size:3rem!important;line-height:1!important}.\32xl\:text-8xl{font-size:5rem!important;line-height:1!important}.\32xl\:text-lg{font-size:1.125rem!important;line-height:1.75rem!important}}@media (min-width:1920px){.\33xl\:col-span-3{grid-column:span 3/span 3!important}.\33xl\:col-span-4{grid-column:span 4/span 4!important}.\33xl\:col-span-5{grid-column:span 5/span 5!important}.\33xl\:inline{display:inline!important}.\33xl\:max-w-none{max-width:none!important}.\33xl\:translate-x-60{--tw-translate-x:15rem!important;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}.\33xl\:text-6xl{font-size:3.75rem!important;line-height:1!important}.\33xl\:text-9xl{font-size:6rem!important;line-height:1!important}.\33xl\:text-xl{font-size:1.25rem!important;line-height:1.75rem!important}}@media (min-width:340px){.xs\:flex-row{flex-direction:row!important}.xs\:items-center{align-items:center!important}.xs\:justify-start{justify-content:flex-start!important}.xs\:pl-2{padding-left:.5rem!important}.xs\:text-base{font-size:1rem!important}.xs\:text-base,.xs\:text-sm{line-height:1.5rem!important}.xs\:text-sm{font-size:.875rem!important}}.\[\&\>\*\]\:bg-primary>*{--tw-bg-opacity:1!important;background-color:rgb(11 85 119/var(--tw-bg-opacity))!important} \ No newline at end of file +/*! tailwindcss v3.4.1 | MIT License | https://tailwindcss.com*/*,:after,:before{box-sizing:border-box;border:0 solid #e9ecef}:after,:before{--tw-content:""}:host,html{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:Open Sans;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:initial}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button;background-color:initial;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:initial}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}fieldset{margin:0}fieldset,legend{padding:0}menu,ol,ul{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#ced4da}input::placeholder,textarea::placeholder{opacity:1;color:#ced4da}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]{display:none}*,::backdrop,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:#5e72e480;--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }.\!container{width:100%!important;margin-right:auto!important;margin-left:auto!important;padding-right:1.5rem!important;padding-left:1.5rem!important}.container{width:100%;margin-right:auto;margin-left:auto;padding-right:1.5rem;padding-left:1.5rem}@media (min-width:340px){.\!container{max-width:340px!important}.container{max-width:340px}}@media (min-width:576px){.\!container{max-width:576px!important}.container{max-width:576px}}@media (min-width:768px){.\!container{max-width:768px!important}.container{max-width:768px}}@media (min-width:992px){.\!container{max-width:992px!important}.container{max-width:992px}}@media (min-width:1200px){.\!container{max-width:1200px!important}.container{max-width:1200px}}@media (min-width:1320px){.\!container{max-width:1320px!important}.container{max-width:1320px}}@media (min-width:1920px){.\!container{max-width:1920px!important}.container{max-width:1920px}}a{letter-spacing:-.025rem}hr{margin:1rem 0;border:0;opacity:.25}img{max-width:none}label{display:inline-block}p{line-height:1.625;font-weight:400;margin-bottom:1rem}small{font-size:.875em}svg{display:inline}table{border-collapse:inherit}h1,h2,h3,h4,h5,h6{margin-bottom:.5rem;color:#344767}h1,h2,h3,h4{letter-spacing:-.05rem}h1,h2,h3{font-weight:700}h4,h5,h6{font-weight:600}h1{font-size:3rem;line-height:1.25}h2{font-size:2.25rem;line-height:1.3}h3{font-size:1.875rem}h3,h4{line-height:1.375}h4{font-size:1.5rem}h5{font-size:1.25rem;line-height:1.375}h6{font-size:1rem;line-height:1.625}.sr-only{position:absolute!important;width:1px!important;height:1px!important;padding:0!important;margin:-1px!important;overflow:hidden!important;clip:rect(0,0,0,0)!important;white-space:nowrap!important;border-width:0!important}.pointer-events-none{pointer-events:none!important}.visible{visibility:visible!important}.invisible{visibility:hidden!important}.collapse{visibility:collapse!important}.static{position:static!important}.fixed{position:fixed!important}.absolute{position:absolute!important}.relative{position:relative!important}.inset-y-0{top:0!important;bottom:0!important}.-left-full{left:-100%!important}.-right-0{right:0!important}.-right-1{right:-.25rem!important}.bottom-0{bottom:0!important}.bottom-1{bottom:.25rem!important}.bottom-1\.5{bottom:.375rem!important}.bottom-2{bottom:.5rem!important}.bottom-24{bottom:6rem!important}.bottom-3{bottom:.75rem!important}.bottom-4{bottom:1rem!important}.bottom-6{bottom:1.5rem!important}.bottom-7{bottom:1.75rem!important}.bottom-8{bottom:2rem!important}.left-0{left:0!important}.left-1{left:.25rem!important}.left-16{left:4rem!important}.left-20{left:5rem!important}.left-24{left:6rem!important}.left-32{left:8rem!important}.left-4{left:1rem!important}.left-40{left:10rem!important}.left-48{left:12rem!important}.left-8{left:2rem!important}.left-auto{left:auto!important}.left-full{left:100%!important}.right-0{right:0!important}.right-12{right:3rem!important}.right-2{right:.5rem!important}.right-20{right:5rem!important}.right-4{right:1rem!important}.right-5{right:1.25rem!important}.right-6{right:1.5rem!important}.right-7{right:1.75rem!important}.right-8{right:2rem!important}.right-\[3\.25rem\]{right:3.25rem!important}.top-0{top:0!important}.top-1{top:.25rem!important}.top-1\.5{top:.375rem!important}.top-1\/2{top:50%!important}.top-10{top:2.5rem!important}.top-12{top:3rem!important}.top-14{top:3.5rem!important}.top-16{top:4rem!important}.top-2{top:.5rem!important}.top-24{top:6rem!important}.top-3{top:.75rem!important}.top-36{top:9rem!important}.top-4{top:1rem!important}.top-6{top:1.5rem!important}.top-7{top:1.75rem!important}.top-8{top:2rem!important}.top-\[38\%\]{top:38%!important}.top-\[4\.5rem\]{top:4.5rem!important}.top-\[52\%\]{top:52%!important}.top-\[55\%\]{top:55%!important}.top-\[8\.2rem\]{top:8.2rem!important}.-z-10{z-index:-10!important}.z-0{z-index:0!important}.z-10{z-index:10!important}.z-100{z-index:100!important}.z-110{z-index:110!important}.z-20{z-index:20!important}.z-990{z-index:990!important}.z-\[10000\]{z-index:10000!important}.z-\[1000\]{z-index:1000!important}.z-\[1001\]{z-index:1001!important}.z-\[20\]{z-index:20!important}.z-sticky{z-index:1020!important}.order-1{order:1!important}.order-2{order:2!important}.order-3{order:3!important}.order-4{order:4!important}.col-span-1{grid-column:span 1/span 1!important}.col-span-10{grid-column:span 10/span 10!important}.col-span-11{grid-column:span 11/span 11!important}.col-span-12{grid-column:span 12/span 12!important}.col-span-2{grid-column:span 2/span 2!important}.col-span-3{grid-column:span 3/span 3!important}.col-span-4{grid-column:span 4/span 4!important}.col-span-5{grid-column:span 5/span 5!important}.col-span-6{grid-column:span 6/span 6!important}.col-span-9{grid-column:span 9/span 9!important}.float-right{float:right!important}.float-left{float:left!important}.m-0{margin:0!important}.m-1{margin:.25rem!important}.m-2{margin:.5rem!important}.mx-0{margin-left:0!important;margin-right:0!important}.mx-1{margin-left:.25rem!important;margin-right:.25rem!important}.mx-1\.5{margin-left:.375rem!important;margin-right:.375rem!important}.mx-2{margin-left:.5rem!important;margin-right:.5rem!important}.mx-2\.5{margin-left:.625rem!important;margin-right:.625rem!important}.mx-4{margin-left:1rem!important;margin-right:1rem!important}.mx-auto{margin-left:auto!important;margin-right:auto!important}.my-0{margin-top:0!important;margin-bottom:0!important}.my-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-3{margin-top:.75rem!important;margin-bottom:.75rem!important}.my-4{margin-top:1rem!important;margin-bottom:1rem!important}.mb-0{margin-bottom:0!important}.mb-0\.5{margin-bottom:.125rem!important}.mb-1{margin-bottom:.25rem!important}.mb-2{margin-bottom:.5rem!important}.mb-2\.5{margin-bottom:.625rem!important}.mb-3{margin-bottom:.75rem!important}.mb-4{margin-bottom:1rem!important}.mb-6{margin-bottom:1.5rem!important}.mb-7{margin-bottom:1.75rem!important}.mb-8{margin-bottom:2rem!important}.ml-0{margin-left:0!important}.ml-1{margin-left:.25rem!important}.ml-12{margin-left:3rem!important}.ml-2{margin-left:.5rem!important}.ml-3{margin-left:.75rem!important}.ml-4{margin-left:1rem!important}.mr-1{margin-right:.25rem!important}.mr-12{margin-right:3rem!important}.mr-2{margin-right:.5rem!important}.mr-3{margin-right:.75rem!important}.mr-4{margin-right:1rem!important}.mt-0{margin-top:0!important}.mt-0\.5{margin-top:.125rem!important}.mt-1{margin-top:.25rem!important}.mt-10{margin-top:2.5rem!important}.mt-12{margin-top:3rem!important}.mt-16{margin-top:4rem!important}.mt-2{margin-top:.5rem!important}.mt-3{margin-top:.75rem!important}.mt-4{margin-top:1rem!important}.mt-5{margin-top:1.25rem!important}.mt-6{margin-top:1.5rem!important}.mt-8{margin-top:2rem!important}.mt-\[15vh\]{margin-top:15vh!important}.mt-\[4\.5rem\]{margin-top:4.5rem!important}.block{display:block!important}.inline-block{display:inline-block!important}.inline{display:inline!important}.flex{display:flex!important}.table{display:table!important}.grid{display:grid!important}.list-item{display:list-item!important}.\!hidden,.hidden{display:none!important}.h-1{height:.25rem!important}.h-1\/3{height:33.333333%!important}.h-12{height:3rem!important}.h-14{height:3.5rem!important}.h-3{height:.75rem!important}.h-32{height:8rem!important}.h-4{height:1rem!important}.h-4\.5{height:1.125rem!important}.h-40{height:10rem!important}.h-5{height:1.25rem!important}.h-5\.5{height:1.375rem!important}.h-6{height:1.5rem!important}.h-7{height:1.75rem!important}.h-8{height:2rem!important}.h-96{height:24rem!important}.h-\[2\.5rem\]{height:2.5rem!important}.h-\[250px\]{height:250px!important}.h-\[3\.5rem\]{height:3.5rem!important}.h-\[4rem\]{height:4rem!important}.h-\[90vh\]{height:90vh!important}.h-fit{height:-moz-fit-content!important;height:fit-content!important}.h-full{height:100%!important}.h-px{height:1px!important}.h-screen{height:100vh!important}.max-h-100{max-height:25rem!important}.max-h-30{max-height:7.5rem!important}.max-h-80{max-height:20rem!important}.max-h-\[200px\]{max-height:200px!important}.max-h-\[250px\]{max-height:250px!important}.max-h-\[350px\]{max-height:350px!important}.max-h-\[400px\]{max-height:400px!important}.max-h-\[70vh\]{max-height:70vh!important}.max-h-\[90vh\]{max-height:90vh!important}.max-h-\[95vh\]{max-height:95vh!important}.max-h-screen{max-height:100vh!important}.min-h-12{min-height:3rem!important}.min-h-20{min-height:5rem!important}.min-h-52{min-height:13rem!important}.min-h-6{min-height:1.5rem!important}.min-h-\[100px\]{min-height:100px!important}.min-h-\[200px\]{min-height:200px!important}.min-h-\[350px\]{min-height:350px!important}.min-h-\[400px\]{min-height:400px!important}.min-h-\[55vh\]{min-height:55vh!important}.min-h-\[75px\]{min-height:75px!important}.min-h-\[85vh\]{min-height:85vh!important}.min-h-screen{min-height:100vh!important}.w-1{width:.25rem!important}.w-10{width:2.5rem!important}.w-11\/12{width:91.666667%!important}.w-28{width:7rem!important}.w-3{width:.75rem!important}.w-32{width:8rem!important}.w-4{width:1rem!important}.w-4\.5{width:1.125rem!important}.w-40{width:10rem!important}.w-48{width:12rem!important}.w-5{width:1.25rem!important}.w-5\.5{width:1.375rem!important}.w-50{width:12.5rem!important}.w-6{width:1.5rem!important}.w-7{width:1.75rem!important}.w-8{width:2rem!important}.w-80{width:20rem!important}.w-90{width:22.5rem!important}.w-\[2\.5rem\]{width:2.5rem!important}.w-\[50vw\]{width:50vw!important}.w-auto{width:auto!important}.w-fit{width:-moz-fit-content!important;width:fit-content!important}.w-full{width:100%!important}.w-screen{width:100vw!important}.min-w-0{min-width:0!important}.min-w-\[1150px\]{min-width:1150px!important}.min-w-\[1300px\]{min-width:1300px!important}.min-w-\[200px\]{min-width:200px!important}.min-w-\[300px\]{min-width:300px!important}.min-w-\[600px\]{min-width:600px!important}.min-w-\[800px\]{min-width:800px!important}.min-w-\[900px\]{min-width:900px!important}.max-w-40{max-width:10rem!important}.max-w-60{max-width:15rem!important}.max-w-64{max-width:16rem!important}.max-w-\[1000px\]{max-width:1000px!important}.max-w-\[150px\]{max-width:150px!important}.max-w-\[1920px\]{max-width:1920px!important}.max-w-\[300px\]{max-width:300px!important}.max-w-\[400px\]{max-width:400px!important}.max-w-\[450px\]{max-width:450px!important}.max-w-\[550px\]{max-width:550px!important}.max-w-\[650px\]{max-width:650px!important}.max-w-\[700px\]{max-width:700px!important}.max-w-full{max-width:100%!important}.max-w-none{max-width:none!important}.max-w-screen-lg{max-width:992px!important}.flex-auto{flex:1 1 auto!important}.grow{flex-grow:1!important}.basis-full{flex-basis:100%!important}.border-collapse{border-collapse:collapse!important}.-translate-x-1{--tw-translate-x:-0.25rem!important}.-translate-x-1,.-translate-x-1\.5{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}.-translate-x-1\.5{--tw-translate-x:-0.375rem!important}.-translate-x-36{--tw-translate-x:-9rem!important}.-translate-x-36,.-translate-x-40{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}.-translate-x-40{--tw-translate-x:-10rem!important}.-translate-x-48{--tw-translate-x:-12rem!important}.-translate-x-48,.-translate-x-52{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}.-translate-x-52{--tw-translate-x:-13rem!important}.-translate-x-56{--tw-translate-x:-14rem!important}.-translate-x-56,.-translate-x-60{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}.-translate-x-60{--tw-translate-x:-15rem!important}.-translate-x-64{--tw-translate-x:-16rem!important}.-translate-x-64,.-translate-x-72{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}.-translate-x-72{--tw-translate-x:-18rem!important}.-translate-x-full{--tw-translate-x:-100%!important}.-translate-x-full,.-translate-y-0{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}.-translate-y-0{--tw-translate-y:-0px!important}.-translate-y-0\.4{--tw-translate-y:-0.1rem!important}.-translate-y-0\.4,.-translate-y-0\.5{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}.-translate-y-0\.5{--tw-translate-y:-0.125rem!important}.-translate-y-1{--tw-translate-y:-0.25rem!important}.-translate-y-1,.-translate-y-12{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}.-translate-y-12{--tw-translate-y:-3rem!important}.-translate-y-16{--tw-translate-y:-4rem!important}.-translate-y-16,.-translate-y-2{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}.-translate-y-2{--tw-translate-y:-0.5rem!important}.-translate-y-20{--tw-translate-y:-5rem!important}.-translate-y-20,.-translate-y-24{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}.-translate-y-24{--tw-translate-y:-6rem!important}.-translate-y-28{--tw-translate-y:-7rem!important}.-translate-y-28,.-translate-y-36{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}.-translate-y-36{--tw-translate-y:-9rem!important}.-translate-y-4{--tw-translate-y:-1rem!important}.-translate-y-4,.-translate-y-6{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}.-translate-y-6{--tw-translate-y:-1.5rem!important}.-translate-y-8{--tw-translate-y:-2rem!important}.-translate-y-8,.translate-x-0{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}.translate-x-0{--tw-translate-x:0px!important}.translate-x-0\.5{--tw-translate-x:0.125rem!important}.translate-x-0\.5,.translate-x-1{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}.translate-x-1{--tw-translate-x:0.25rem!important}.translate-x-16{--tw-translate-x:4rem!important}.translate-x-16,.translate-x-2{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}.translate-x-2{--tw-translate-x:0.5rem!important}.translate-x-24{--tw-translate-x:6rem!important}.translate-x-24,.translate-x-3{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}.translate-x-3{--tw-translate-x:0.75rem!important}.translate-x-32{--tw-translate-x:8rem!important}.translate-x-32,.translate-x-4{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}.translate-x-4{--tw-translate-x:1rem!important}.translate-x-40{--tw-translate-x:10rem!important}.translate-x-40,.translate-x-48{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}.translate-x-48{--tw-translate-x:12rem!important}.translate-x-52{--tw-translate-x:13rem!important}.translate-x-52,.translate-x-56{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}.translate-x-56{--tw-translate-x:14rem!important}.translate-x-60{--tw-translate-x:15rem!important}.translate-x-60,.translate-x-90{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}.translate-x-90{--tw-translate-x:22.5rem!important}.translate-x-\[3rem\]{--tw-translate-x:3rem!important}.translate-x-\[3rem\],.translate-y-0{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}.translate-y-0{--tw-translate-y:0px!important}.translate-y-0\.5{--tw-translate-y:0.125rem!important}.translate-y-0\.5,.translate-y-1{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}.translate-y-1{--tw-translate-y:0.25rem!important}.translate-y-16{--tw-translate-y:4rem!important}.translate-y-16,.translate-y-2{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}.translate-y-2{--tw-translate-y:0.5rem!important}.-rotate-12{--tw-rotate:-12deg!important}.-rotate-12,.rotate-12{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}.rotate-12{--tw-rotate:12deg!important}.rotate-180{--tw-rotate:180deg!important}.rotate-180,.rotate-90{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}.rotate-90{--tw-rotate:90deg!important}.scale-105{--tw-scale-x:1.05!important;--tw-scale-y:1.05!important}.scale-105,.scale-110{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}.scale-110{--tw-scale-x:1.1!important;--tw-scale-y:1.1!important}.scale-50{--tw-scale-x:.5!important;--tw-scale-y:.5!important}.scale-50,.scale-75{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}.scale-75{--tw-scale-x:.75!important;--tw-scale-y:.75!important}.scale-90{--tw-scale-x:.9!important;--tw-scale-y:.9!important}.scale-90,.scale-\[0\.6\]{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}.scale-\[0\.6\]{--tw-scale-x:0.6!important;--tw-scale-y:0.6!important}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}.cursor-not-allowed{cursor:not-allowed!important}.cursor-pointer{cursor:pointer!important}.cursor-text{cursor:text!important}.select-none{-webkit-user-select:none!important;-moz-user-select:none!important;user-select:none!important}.resize{resize:both!important}.list-none{list-style-type:none!important}.appearance-none{-webkit-appearance:none!important;-moz-appearance:none!important;appearance:none!important}.grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))!important}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))!important}.flex-row{flex-direction:row!important}.flex-col{flex-direction:column!important}.flex-wrap{flex-wrap:wrap!important}.items-start{align-items:flex-start!important}.items-end{align-items:flex-end!important}.items-center{align-items:center!important}.justify-start{justify-content:flex-start!important}.justify-end{justify-content:flex-end!important}.justify-center{justify-content:center!important}.justify-between{justify-content:space-between!important}.justify-items-center{justify-items:center!important}.gap-2{gap:.5rem!important}.gap-3{gap:.75rem!important}.gap-4{gap:1rem!important}.gap-8{gap:2rem!important}.gap-x-4{-moz-column-gap:1rem!important;column-gap:1rem!important}.gap-y-2{row-gap:.5rem!important}.gap-y-3{row-gap:.75rem!important}.gap-y-4{row-gap:1rem!important}.overflow-auto{overflow:auto!important}.overflow-hidden{overflow:hidden!important}.overflow-x-auto{overflow-x:auto!important}.overflow-y-auto{overflow-y:auto!important}.overflow-x-hidden{overflow-x:hidden!important}.whitespace-normal{white-space:normal!important}.whitespace-nowrap{white-space:nowrap!important}.break-words{overflow-wrap:break-word!important}.rounded,.rounded-1{border-radius:.25rem!important}.rounded-1\.4{border-radius:.35rem!important}.rounded-10{border-radius:2.5rem!important}.rounded-2xl{border-radius:1rem!important}.rounded-circle{border-radius:50%!important}.rounded-full{border-radius:9999px!important}.rounded-lg{border-radius:.5rem!important}.rounded-none{border-radius:0!important}.rounded-xl{border-radius:.75rem!important}.rounded-b{border-bottom-right-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.rounded-b-lg{border-bottom-left-radius:.5rem!important}.rounded-b-lg,.rounded-r-lg{border-bottom-right-radius:.5rem!important}.rounded-r-lg{border-top-right-radius:.5rem!important}.rounded-t{border-top-left-radius:.25rem!important;border-top-right-radius:.25rem!important}.rounded-t-2xl{border-top-left-radius:1rem!important;border-top-right-radius:1rem!important}.rounded-t-lg{border-top-left-radius:.5rem!important;border-top-right-radius:.5rem!important}.border{border-width:1px!important}.border-0{border-width:0!important}.border-2{border-width:2px!important}.border-b{border-bottom-width:1px!important}.border-b-0{border-bottom-width:0!important}.border-l{border-left-width:1px!important}.border-r{border-right-width:1px!important}.border-t{border-top-width:1px!important}.border-solid{border-style:solid!important}.border-dashed{border-style:dashed!important}.border-gray-100{--tw-border-opacity:1!important;border-color:rgb(235 239 244/var(--tw-border-opacity))!important}.border-gray-100\/50{border-color:#ebeff480!important}.border-gray-200{--tw-border-opacity:1!important;border-color:rgb(233 236 239/var(--tw-border-opacity))!important}.border-gray-300{--tw-border-opacity:1!important;border-color:rgb(210 214 218/var(--tw-border-opacity))!important}.border-gray-400{--tw-border-opacity:1!important;border-color:rgb(206 212 218/var(--tw-border-opacity))!important}.border-gray-700{--tw-border-opacity:1!important;border-color:rgb(73 80 87/var(--tw-border-opacity))!important}.border-primary{--tw-border-opacity:1!important;border-color:rgb(11 85 119/var(--tw-border-opacity))!important}.bg-blue-500{--tw-bg-opacity:1!important;background-color:rgb(94 114 228/var(--tw-bg-opacity))!important}.bg-emerald-500{--tw-bg-opacity:1!important;background-color:rgb(45 206 137/var(--tw-bg-opacity))!important}.bg-emerald-500\/80{background-color:#2dce89cc!important}.bg-gray-100{background-color:rgb(235 239 244/var(--tw-bg-opacity))!important}.bg-gray-100,.bg-gray-200{--tw-bg-opacity:1!important}.bg-gray-200{background-color:rgb(233 236 239/var(--tw-bg-opacity))!important}.bg-gray-300{background-color:rgb(210 214 218/var(--tw-bg-opacity))!important}.bg-gray-300,.bg-gray-50{--tw-bg-opacity:1!important}.bg-gray-50{background-color:rgb(248 249 250/var(--tw-bg-opacity))!important}.bg-gray-50\/10{background-color:#f8f9fa1a!important}.bg-gray-500{--tw-bg-opacity:1!important;background-color:rgb(173 181 189/var(--tw-bg-opacity))!important}.bg-gray-500\/80{background-color:#adb5bdcc!important}.bg-gray-600{--tw-bg-opacity:1!important;background-color:rgb(108 117 125/var(--tw-bg-opacity))!important}.bg-gray-600\/50{background-color:#6c757d80!important}.bg-gray-600\/80{background-color:#6c757dcc!important}.bg-green-500{--tw-bg-opacity:1!important;background-color:rgb(34 197 94/var(--tw-bg-opacity))!important}.bg-green-500\/80{background-color:#22c55ecc!important}.bg-orange-500{--tw-bg-opacity:1!important;background-color:rgb(251 99 64/var(--tw-bg-opacity))!important}.bg-orange-500\/80{background-color:#fb6340cc!important}.bg-primary{--tw-bg-opacity:1!important;background-color:rgb(11 85 119/var(--tw-bg-opacity))!important}.bg-primary\/10{background-color:#0b55771a!important}.bg-red-500{--tw-bg-opacity:1!important;background-color:rgb(245 57 57/var(--tw-bg-opacity))!important}.bg-red-500\/80{background-color:#f53939cc!important}.bg-secondary{background-color:rgb(46 172 104/var(--tw-bg-opacity))!important}.bg-secondary,.bg-sky-500{--tw-bg-opacity:1!important}.bg-sky-500{background-color:rgb(14 165 233/var(--tw-bg-opacity))!important}.bg-sky-500\/80{background-color:#0ea5e9cc!important}.bg-slate-800\/10{background-color:#3a416f1a!important}.bg-transparent{background-color:initial!important}.bg-white{background-color:rgb(255 255 255/var(--tw-bg-opacity))!important}.bg-white,.bg-yellow-400{--tw-bg-opacity:1!important}.bg-yellow-400{background-color:rgb(251 207 51/var(--tw-bg-opacity))!important}.bg-yellow-400\/80{background-color:#fbcf33cc!important}.bg-yellow-500{--tw-bg-opacity:1!important;background-color:rgb(251 177 64/var(--tw-bg-opacity))!important}.bg-yellow-500\/80{background-color:#fbb140cc!important}.bg-gradient-to-r{background-image:linear-gradient(to right,var(--tw-gradient-stops))!important}.bg-gradient-to-tl{background-image:linear-gradient(to top left,var(--tw-gradient-stops))!important}.bg-none{background-image:none!important}.from-\[\#075577\]{--tw-gradient-from:#075577 var(--tw-gradient-from-position)!important;--tw-gradient-to:#07557700 var(--tw-gradient-to-position)!important;--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)!important}.from-\[\#0b5577\]{--tw-gradient-from:#0b5577 var(--tw-gradient-from-position)!important;--tw-gradient-to:#0b557700 var(--tw-gradient-to-position)!important;--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)!important}.from-transparent{--tw-gradient-from:#0000 var(--tw-gradient-from-position)!important;--tw-gradient-to:#0000 var(--tw-gradient-to-position)!important;--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)!important}.via-black\/40{--tw-gradient-to:#0000 var(--tw-gradient-to-position)!important;--tw-gradient-stops:var(--tw-gradient-from),#0006 var(--tw-gradient-via-position),var(--tw-gradient-to)!important}.to-\[\#116D70\]{--tw-gradient-to:#116d70 var(--tw-gradient-to-position)!important}.to-transparent{--tw-gradient-to:#0000 var(--tw-gradient-to-position)!important}.bg-150{background-size:150%!important}.bg-contain{background-size:contain!important}.bg-clip-border{background-clip:initial!important}.bg-clip-padding{background-clip:padding-box!important}.bg-center{background-position:50%!important}.bg-left{background-position:0!important}.bg-x-25{background-position:25% 0!important}.bg-no-repeat{background-repeat:no-repeat!important}.fill-blue-500{fill:#5e72e4!important}.fill-gray-500{fill:#adb5bd!important}.fill-gray-600{fill:#6c757d!important}.fill-gray-700{fill:#495057!important}.fill-green-500{fill:#22c55e!important}.fill-primary{fill:#0b5577!important}.fill-red-500{fill:#f53939!important}.fill-sky-500{fill:#0ea5e9!important}.fill-slate-800{fill:#3a416f!important}.fill-white{fill:#fff!important}.fill-yellow-500{fill:#fbb140!important}.stroke-amber-500{stroke:#f59e0b!important}.stroke-blue-400{stroke:#60a5fa!important}.stroke-blue-500{stroke:#5e72e4!important}.stroke-emerald-600{stroke:#059669!important}.stroke-gray-100{stroke:#ebeff4!important}.stroke-gray-100\/50{stroke:#ebeff480!important}.stroke-gray-600{stroke:#6c757d!important}.stroke-gray-700{stroke:#495057!important}.stroke-gray-800{stroke:#252f40!important}.stroke-green-700{stroke:#15803d!important}.stroke-orange-500{stroke:#fb6340!important}.stroke-pink-600{stroke:#db2777!important}.stroke-red-500{stroke:#f53939!important}.stroke-sky-500{stroke:#0ea5e9!important}.stroke-stone-500{stroke:#78716c!important}.stroke-white{stroke:#fff!important}.stroke-yellow-400{stroke:#fbcf33!important}.stroke-yellow-500{stroke:#fbb140!important}.stroke-0{stroke-width:0!important}.object-cover{-o-object-fit:cover!important;object-fit:cover!important}.p-0{padding:0!important}.p-1{padding:.25rem!important}.p-2{padding:.5rem!important}.p-3{padding:.75rem!important}.p-4{padding:1rem!important}.px-0{padding-left:0!important;padding-right:0!important}.px-0\.5{padding-left:.125rem!important;padding-right:.125rem!important}.px-1{padding-left:.25rem!important;padding-right:.25rem!important}.px-1\.5{padding-left:.375rem!important;padding-right:.375rem!important}.px-2{padding-left:.5rem!important;padding-right:.5rem!important}.px-28{padding-left:7rem!important;padding-right:7rem!important}.px-3{padding-left:.75rem!important;padding-right:.75rem!important}.px-4{padding-left:1rem!important;padding-right:1rem!important}.px-6{padding-left:1.5rem!important;padding-right:1.5rem!important}.px-8{padding-left:2rem!important;padding-right:2rem!important}.py-0{padding-top:0!important;padding-bottom:0!important}.py-0\.5{padding-top:.125rem!important;padding-bottom:.125rem!important}.py-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-1\.5{padding-top:.375rem!important;padding-bottom:.375rem!important}.py-10{padding-top:2.5rem!important;padding-bottom:2.5rem!important}.py-12{padding-top:3rem!important;padding-bottom:3rem!important}.py-16{padding-top:4rem!important;padding-bottom:4rem!important}.py-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-2\.5{padding-top:.625rem!important;padding-bottom:.625rem!important}.py-3{padding-top:.75rem!important;padding-bottom:.75rem!important}.py-4{padding-top:1rem!important;padding-bottom:1rem!important}.py-8{padding-top:2rem!important;padding-bottom:2rem!important}.pb-0{padding-bottom:0!important}.pb-10{padding-bottom:2.5rem!important}.pb-16{padding-bottom:4rem!important}.pb-2{padding-bottom:.5rem!important}.pb-24{padding-bottom:6rem!important}.pb-28{padding-bottom:7rem!important}.pb-4{padding-bottom:1rem!important}.pb-6{padding-bottom:1.5rem!important}.pb-8{padding-bottom:2rem!important}.pl-0{padding-left:0!important}.pl-2{padding-left:.5rem!important}.pl-3{padding-left:.75rem!important}.pl-6{padding-left:1.5rem!important}.pt-1{padding-top:.25rem!important}.pt-10{padding-top:2.5rem!important}.pt-2{padding-top:.5rem!important}.pt-20{padding-top:5rem!important}.pt-3{padding-top:.75rem!important}.pt-4{padding-top:1rem!important}.pt-6{padding-top:1.5rem!important}.pt-8{padding-top:2rem!important}.pt-9{padding-top:2.25rem!important}.text-left{text-align:left!important}.text-center{text-align:center!important}.align-top{vertical-align:top!important}.align-middle{vertical-align:middle!important}.align-bottom{vertical-align:bottom!important}.font-sans{font-family:Open Sans!important}.text-2xl{font-size:1.5rem!important;line-height:2rem!important}.text-3xl{font-size:1.875rem!important;line-height:2.25rem!important}.text-4xl{font-size:2.25rem!important;line-height:2.5rem!important}.text-5xl{font-size:3rem!important}.text-5xl,.text-6xl{line-height:1!important}.text-6xl{font-size:3.75rem!important}.text-7xl{font-size:4.5rem!important}.text-7xl,.text-9xl{line-height:1!important}.text-9xl{font-size:6rem!important}.text-\[0\.7rem\]{font-size:.7rem!important}.text-\[1\.1rem\]{font-size:1.1rem!important}.text-base{font-size:1rem!important;line-height:1.5rem!important}.text-lg{font-size:1.125rem!important;line-height:1.75rem!important}.text-sm{font-size:.875rem!important;line-height:1.5rem!important}.text-xl{font-size:1.25rem!important;line-height:1.75rem!important}.text-xs{font-size:.75rem!important;line-height:1rem!important}.font-bold{font-weight:700!important}.font-medium{font-weight:500!important}.font-normal{font-weight:400!important}.font-semibold{font-weight:600!important}.uppercase{text-transform:uppercase!important}.capitalize{text-transform:capitalize!important}.italic{font-style:italic!important}.ordinal{--tw-ordinal:ordinal!important;font-variant-numeric:var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure) var(--tw-numeric-spacing) var(--tw-numeric-fraction)!important}.leading-5{line-height:1.25rem!important}.leading-5\.6{line-height:1.4rem!important}.leading-6{line-height:1.5rem!important}.leading-default{line-height:1.6!important}.leading-none{line-height:1!important}.leading-normal{line-height:1.5!important}.leading-tight{line-height:1.25!important}.tracking-\[0\.20rem\]{letter-spacing:.2rem!important}.tracking-normal{letter-spacing:0!important}.tracking-tight-rem{letter-spacing:-.025rem!important}.tracking-wide{letter-spacing:.025em!important}.tracking-wider{letter-spacing:.05em!important}.tracking-widest{letter-spacing:.1em!important}.text-blue-500{--tw-text-opacity:1!important;color:rgb(94 114 228/var(--tw-text-opacity))!important}.text-gray-100{--tw-text-opacity:1!important;color:rgb(235 239 244/var(--tw-text-opacity))!important}.text-gray-100\/50{color:#ebeff480!important}.text-gray-300{--tw-text-opacity:1!important;color:rgb(210 214 218/var(--tw-text-opacity))!important}.text-gray-50{--tw-text-opacity:1!important;color:rgb(248 249 250/var(--tw-text-opacity))!important}.text-gray-500{--tw-text-opacity:1!important;color:rgb(173 181 189/var(--tw-text-opacity))!important}.text-gray-600{--tw-text-opacity:1!important;color:rgb(108 117 125/var(--tw-text-opacity))!important}.text-gray-700{--tw-text-opacity:1!important;color:rgb(73 80 87/var(--tw-text-opacity))!important}.text-gray-700\/80{color:#495057cc!important}.text-gray-800{--tw-text-opacity:1!important;color:rgb(37 47 64/var(--tw-text-opacity))!important}.text-green-500{--tw-text-opacity:1!important;color:rgb(34 197 94/var(--tw-text-opacity))!important}.text-primary{color:rgb(11 85 119/var(--tw-text-opacity))!important}.text-primary,.text-red-500{--tw-text-opacity:1!important}.text-red-500{color:rgb(245 57 57/var(--tw-text-opacity))!important}.text-secondary{--tw-text-opacity:1!important;color:rgb(46 172 104/var(--tw-text-opacity))!important}.text-sky-500{--tw-text-opacity:1!important;color:rgb(14 165 233/var(--tw-text-opacity))!important}.text-slate-500{--tw-text-opacity:1!important;color:rgb(103 116 142/var(--tw-text-opacity))!important}.text-slate-700{color:rgb(52 71 103/var(--tw-text-opacity))!important}.text-slate-700,.text-white{--tw-text-opacity:1!important}.text-white{color:rgb(255 255 255/var(--tw-text-opacity))!important}.text-yellow-400{--tw-text-opacity:1!important;color:rgb(251 207 51/var(--tw-text-opacity))!important}.text-yellow-500{--tw-text-opacity:1!important;color:rgb(251 177 64/var(--tw-text-opacity))!important}.underline{text-decoration-line:underline!important}.antialiased{-webkit-font-smoothing:antialiased!important;-moz-osx-font-smoothing:grayscale!important}.opacity-0{opacity:0!important}.opacity-100{opacity:1!important}.opacity-50{opacity:.5!important}.opacity-60{opacity:.6!important}.opacity-80{opacity:.8!important}.shadow{--tw-shadow:0 1px 3px 0 #0000001a,0 1px 2px -1px #0000001a!important;--tw-shadow-colored:0 1px 3px 0 var(--tw-shadow-color),0 1px 2px -1px var(--tw-shadow-color)!important}.shadow,.shadow-3xl{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)!important}.shadow-3xl{--tw-shadow:0 8px 26px -4px #14141426,0 8px 9px -5px #1414140f!important;--tw-shadow-colored:0 8px 26px -4px var(--tw-shadow-color),0 8px 9px -5px var(--tw-shadow-color)!important}.shadow-\[8px_8px_12px_rgb\(0\2c 0\2c 0\2c 0\.2\)\]{--tw-shadow:8px 8px 12px #0003!important;--tw-shadow-colored:8px 8px 12px var(--tw-shadow-color)!important}.shadow-\[8px_8px_12px_rgb\(0\2c 0\2c 0\2c 0\.2\)\],.shadow-md{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)!important}.shadow-md{--tw-shadow:0 4px 6px #32325d1a,0 1px 3px #00000014!important;--tw-shadow-colored:0 4px 6px var(--tw-shadow-color),0 1px 3px var(--tw-shadow-color)!important}.shadow-none{--tw-shadow:0 0 #0000!important;--tw-shadow-colored:0 0 #0000!important}.shadow-none,.shadow-sm{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)!important}.shadow-sm{--tw-shadow:0 .25rem .375rem -.0625rem #1414141f,0 .125rem .25rem -.0625rem #14141412!important;--tw-shadow-colored:0 .25rem .375rem -.0625rem var(--tw-shadow-color),0 .125rem .25rem -.0625rem var(--tw-shadow-color)!important}.shadow-xl{--tw-shadow:0 0 2rem 0 #8898aa26!important;--tw-shadow-colored:0 0 2rem 0 var(--tw-shadow-color)!important}.shadow-xl,.shadow-xs{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)!important}.shadow-xs{--tw-shadow:0 7px 14px #32325d1a,0 3px 6px #00000014!important;--tw-shadow-colored:0 7px 14px var(--tw-shadow-color),0 3px 6px var(--tw-shadow-color)!important}.outline-none{outline:2px solid #0000!important;outline-offset:2px!important}.outline{outline-style:solid!important}.outline-secondary{outline-color:#2eac68!important}.blur{--tw-blur:blur(8px)!important}.blur,.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)!important}.transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter!important;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter!important;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter!important;transition-timing-function:ease!important;transition-duration:.15s!important}.transition-all{transition-property:all!important;transition-timing-function:ease!important;transition-duration:.15s!important}.transition-transform{transition-property:transform!important;transition-timing-function:ease!important;transition-duration:.15s!important}.delay-200{transition-delay:.2s!important}.duration-200{transition-duration:.2s!important}.duration-250{transition-duration:.25s!important}.duration-300{transition-duration:.3s!important}.duration-700{transition-duration:.7s!important}.ease-in{transition-timing-function:ease-in!important}.ease-in-out{transition-timing-function:ease-in-out!important}.flex-wrap-inherit{flex-wrap:inherit!important}@font-face{font-family:Open Sans;src:url(../webfonts/OpenSans.ttf)}*{font-family:Open Sans,sans-serif}.ace_editor,.ace_editor *{font-family:Monaco,Menlo,Ubuntu Mono,Droid Sans Mono,Consolas,monospace!important;font-weight:400!important;letter-spacing:0!important}.sr-only{display:none}.separator{margin:.75rem 0 .5rem;height:1px;background-color:initial;--tw-gradient-from:#0000 var(--tw-gradient-from-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to);--tw-gradient-stops:var(--tw-gradient-from),#0006 var(--tw-gradient-via-position),var(--tw-gradient-to);--tw-gradient-to:#0000 var(--tw-gradient-to-position)}.separator,:is(.dark .separator){background-image:linear-gradient(to right,var(--tw-gradient-stops))}:is(.dark .separator){--tw-gradient-from:#0000 var(--tw-gradient-from-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to);--tw-gradient-to:#fff0 var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),#fff var(--tw-gradient-via-position),var(--tw-gradient-to);--tw-gradient-to:#0000 var(--tw-gradient-to-position)}.close-btn{display:inline-block;cursor:pointer;border-radius:.5rem;border-width:1px;--tw-border-opacity:1;border-color:rgb(245 57 57/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity));padding:.5rem 1rem;text-align:center;vertical-align:middle;font-weight:700;text-transform:uppercase;line-height:1.5;letter-spacing:-.025rem;--tw-text-opacity:1;color:rgb(245 57 57/var(--tw-text-opacity));--tw-shadow:0 7px 14px #32325d1a,0 3px 6px #00000014;--tw-shadow-colored:0 7px 14px var(--tw-shadow-color),0 3px 6px var(--tw-shadow-color);transition-property:all;transition-timing-function:ease;transition-duration:.15s;transition-timing-function:ease-in}.close-btn,.close-btn:hover{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.close-btn:hover{--tw-translate-y:-1px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));--tw-shadow:0 4px 6px #32325d1a,0 1px 3px #00000014;--tw-shadow-colored:0 4px 6px var(--tw-shadow-color),0 1px 3px var(--tw-shadow-color)}.close-btn:focus,.close-btn:hover{background-color:#fffc}.close-btn:active{opacity:.85}.close-btn:disabled{cursor:not-allowed;--tw-bg-opacity:1;--tw-text-opacity:1;color:rgb(73 80 87/var(--tw-text-opacity))}.close-btn:disabled,.close-btn:hover:disabled{border-color:#ced4da00;background-color:rgb(206 212 218/var(--tw-bg-opacity))}.close-btn:hover:disabled{--tw-translate-y:0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));--tw-bg-opacity:1}:is(.dark .close-btn){--tw-bg-opacity:1;background-color:rgb(233 236 239/var(--tw-bg-opacity));--tw-brightness:brightness(.9)}:is(.dark .close-btn),:is(.dark .close-btn:hover){filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}:is(.dark .close-btn:hover){--tw-brightness:brightness(.75)}:is(.dark .close-btn:disabled){--tw-bg-opacity:1;--tw-text-opacity:1;color:rgb(210 214 218/var(--tw-text-opacity))}:is(.dark .close-btn:disabled),:is(.dark .close-btn:hover:disabled){border-color:#49505700;background-color:rgb(73 80 87/var(--tw-bg-opacity))}:is(.dark .close-btn:hover:disabled){--tw-translate-y:0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));--tw-bg-opacity:1}@media (min-width:768px){.close-btn{padding:.625rem 1.25rem}}.valid-btn{display:inline-block;cursor:pointer;border-radius:.5rem;--tw-bg-opacity:1;background-color:rgb(34 197 94/var(--tw-bg-opacity));padding:.5rem 1rem;text-align:center;vertical-align:middle;font-weight:700;text-transform:uppercase;line-height:1.5;letter-spacing:.025em;--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity));--tw-shadow:0 7px 14px #32325d1a,0 3px 6px #00000014;--tw-shadow-colored:0 7px 14px var(--tw-shadow-color),0 3px 6px var(--tw-shadow-color);transition-property:all;transition-timing-function:ease;transition-duration:.15s;transition-timing-function:ease-in}.valid-btn,.valid-btn:hover{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.valid-btn:hover{--tw-translate-y:-1px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));--tw-shadow:0 4px 6px #32325d1a,0 1px 3px #00000014;--tw-shadow-colored:0 4px 6px var(--tw-shadow-color),0 1px 3px var(--tw-shadow-color)}.valid-btn:focus,.valid-btn:hover{background-color:#22c55ecc}.valid-btn:active{opacity:.85}.valid-btn:disabled{cursor:not-allowed;--tw-bg-opacity:1;--tw-text-opacity:1;color:rgb(73 80 87/var(--tw-text-opacity))}.valid-btn:disabled,.valid-btn:hover:disabled{border-color:#ced4da00;background-color:rgb(206 212 218/var(--tw-bg-opacity))}.valid-btn:hover:disabled{--tw-translate-y:0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));--tw-bg-opacity:1}:is(.dark .valid-btn){--tw-brightness:brightness(.9);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}:is(.dark .valid-btn:disabled){--tw-bg-opacity:1;--tw-text-opacity:1;color:rgb(210 214 218/var(--tw-text-opacity))}:is(.dark .valid-btn:disabled),:is(.dark .valid-btn:hover:disabled){border-color:#49505700;background-color:rgb(73 80 87/var(--tw-bg-opacity))}:is(.dark .valid-btn:hover:disabled){--tw-translate-y:0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));--tw-bg-opacity:1}@media (min-width:768px){.valid-btn{padding:.625rem 1.25rem}}.delete-btn{display:inline-block;cursor:pointer;border-radius:.5rem;--tw-bg-opacity:1;background-color:rgb(245 57 57/var(--tw-bg-opacity));padding:.5rem 1rem;text-align:center;vertical-align:middle;font-weight:700;text-transform:uppercase;line-height:1.5;letter-spacing:.025em;--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity));--tw-shadow:0 7px 14px #32325d1a,0 3px 6px #00000014;--tw-shadow-colored:0 7px 14px var(--tw-shadow-color),0 3px 6px var(--tw-shadow-color);transition-property:all;transition-timing-function:ease;transition-duration:.15s;transition-timing-function:ease-in}.delete-btn,.delete-btn:hover{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.delete-btn:hover{--tw-translate-y:-1px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));--tw-shadow:0 4px 6px #32325d1a,0 1px 3px #00000014;--tw-shadow-colored:0 4px 6px var(--tw-shadow-color),0 1px 3px var(--tw-shadow-color)}.delete-btn:focus,.delete-btn:hover{background-color:#f53939cc}.delete-btn:active{opacity:.85}.delete-btn:disabled{cursor:not-allowed;--tw-bg-opacity:1;--tw-text-opacity:1;color:rgb(73 80 87/var(--tw-text-opacity))}.delete-btn:disabled,.delete-btn:hover:disabled{border-color:#ced4da00;background-color:rgb(206 212 218/var(--tw-bg-opacity))}.delete-btn:hover:disabled{--tw-translate-y:0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));--tw-bg-opacity:1}:is(.dark .delete-btn){--tw-brightness:brightness(.9);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}:is(.dark .delete-btn:disabled){border-color:#49505700;--tw-bg-opacity:1;background-color:rgb(73 80 87/var(--tw-bg-opacity));--tw-text-opacity:1;color:rgb(210 214 218/var(--tw-text-opacity))}:is(.dark .delete-btn:hover:disabled){--tw-translate-y:0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));border-color:#49505700;--tw-bg-opacity:1;background-color:rgb(73 80 87/var(--tw-bg-opacity))}@media (min-width:768px){.delete-btn{padding:.625rem 1.25rem}}.edit-btn{display:inline-block;cursor:pointer;border-radius:.5rem;--tw-bg-opacity:1;background-color:rgb(251 177 64/var(--tw-bg-opacity));padding:.5rem 1rem;text-align:center;vertical-align:middle;font-weight:700;text-transform:uppercase;line-height:1.5;letter-spacing:.025em;--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity));--tw-shadow:0 7px 14px #32325d1a,0 3px 6px #00000014;--tw-shadow-colored:0 7px 14px var(--tw-shadow-color),0 3px 6px var(--tw-shadow-color);transition-property:all;transition-timing-function:ease;transition-duration:.15s;transition-timing-function:ease-in}.edit-btn,.edit-btn:hover{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.edit-btn:hover{--tw-translate-y:-1px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));--tw-shadow:0 4px 6px #32325d1a,0 1px 3px #00000014;--tw-shadow-colored:0 4px 6px var(--tw-shadow-color),0 1px 3px var(--tw-shadow-color)}.edit-btn:focus,.edit-btn:hover{background-color:#fbb140cc}.edit-btn:active{opacity:.85}.edit-btn:disabled{cursor:not-allowed;--tw-bg-opacity:1;--tw-text-opacity:1;color:rgb(73 80 87/var(--tw-text-opacity))}.edit-btn:disabled,.edit-btn:hover:disabled{border-color:#ced4da00;background-color:rgb(206 212 218/var(--tw-bg-opacity))}.edit-btn:hover:disabled{--tw-translate-y:0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));--tw-bg-opacity:1}:is(.dark .edit-btn){--tw-brightness:brightness(.9);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}:is(.dark .edit-btn:disabled){--tw-bg-opacity:1;--tw-text-opacity:1;color:rgb(210 214 218/var(--tw-text-opacity))}:is(.dark .edit-btn:disabled),:is(.dark .edit-btn:hover:disabled){border-color:#49505700;background-color:rgb(73 80 87/var(--tw-bg-opacity))}:is(.dark .edit-btn:hover:disabled){--tw-translate-y:0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));--tw-bg-opacity:1}@media (min-width:768px){.edit-btn{padding:.625rem 1.25rem}}.info-btn{display:inline-block;cursor:pointer;border-radius:.5rem;--tw-bg-opacity:1;background-color:rgb(14 165 233/var(--tw-bg-opacity));padding:.5rem 1rem;text-align:center;vertical-align:middle;font-weight:700;text-transform:uppercase;line-height:1.5;letter-spacing:.025em;--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity));--tw-shadow:0 7px 14px #32325d1a,0 3px 6px #00000014;--tw-shadow-colored:0 7px 14px var(--tw-shadow-color),0 3px 6px var(--tw-shadow-color);transition-property:all;transition-timing-function:ease;transition-duration:.15s;transition-timing-function:ease-in}.info-btn,.info-btn:hover{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.info-btn:hover{--tw-translate-y:-1px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));--tw-shadow:0 4px 6px #32325d1a,0 1px 3px #00000014;--tw-shadow-colored:0 4px 6px var(--tw-shadow-color),0 1px 3px var(--tw-shadow-color)}.info-btn:focus,.info-btn:hover{background-color:#0ea5e9cc}.info-btn:active{opacity:.85}.info-btn:disabled{cursor:not-allowed;--tw-bg-opacity:1;--tw-text-opacity:1;color:rgb(73 80 87/var(--tw-text-opacity))}.info-btn:disabled,.info-btn:hover:disabled{border-color:#ced4da00;background-color:rgb(206 212 218/var(--tw-bg-opacity))}.info-btn:hover:disabled{--tw-translate-y:0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));--tw-bg-opacity:1}:is(.dark .info-btn){--tw-brightness:brightness(.9);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}:is(.dark .info-btn:disabled){--tw-bg-opacity:1;--tw-text-opacity:1;color:rgb(210 214 218/var(--tw-text-opacity))}:is(.dark .info-btn:disabled),:is(.dark .info-btn:hover:disabled){border-color:#49505700;background-color:rgb(73 80 87/var(--tw-bg-opacity))}:is(.dark .info-btn:hover:disabled){--tw-translate-y:0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));--tw-bg-opacity:1}@media (min-width:768px){.info-btn{padding:.625rem 1.25rem}}.checkbox{position:relative;z-index:10;float:left;margin-top:.25rem;height:1.25rem;width:1.25rem;cursor:pointer;-webkit-appearance:none;-moz-appearance:none;appearance:none;border-radius:.35rem;border-width:1px;border-color:rgb(210 214 218/var(--tw-border-opacity));background-color:rgb(255 255 255/var(--tw-bg-opacity));background-size:contain;background-position:50%;background-repeat:no-repeat;vertical-align:top;font-size:1rem;line-height:1.5rem;transition-property:none;transition-property:all;transition-timing-function:ease;transition-duration:.25s}.checkbox,.checkbox:disabled{--tw-border-opacity:1;--tw-bg-opacity:1}.checkbox:disabled{cursor:default;border-color:rgb(206 212 218/var(--tw-border-opacity));background-color:rgb(206 212 218/var(--tw-bg-opacity));--tw-text-opacity:1;color:rgb(73 80 87/var(--tw-text-opacity))}.checkbox[data-checked=true]{z-index:0;--tw-border-opacity:1;border-color:rgb(11 85 119/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(11 85 119/var(--tw-bg-opacity))}.checkbox:disabled[data-checked=true]{--tw-border-opacity:1;border-color:rgb(206 212 218/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(206 212 218/var(--tw-bg-opacity));--tw-text-opacity:1;color:rgb(73 80 87/var(--tw-text-opacity))}:is(.dark .checkbox){--tw-border-opacity:1;border-color:rgb(98 117 148/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(52 71 103/var(--tw-bg-opacity))}:is(.dark .checkbox:disabled){--tw-border-opacity:1;border-color:rgb(37 47 64/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(37 47 64/var(--tw-bg-opacity));--tw-text-opacity:1;color:rgb(210 214 218/var(--tw-text-opacity))}:is(.dark .checkbox[data-checked=true]){--tw-border-opacity:1;border-color:rgb(11 85 119/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(11 85 119/var(--tw-bg-opacity))}:is(.dark .checkbox:disabled[data-checked=true]){--tw-border-opacity:1;border-color:rgb(37 47 64/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(37 47 64/var(--tw-bg-opacity));--tw-text-opacity:1;color:rgb(210 214 218/var(--tw-text-opacity))}.custom-select-btn{display:flex;width:100%;align-items:center;justify-content:space-between;border-radius:.5rem;border-width:1px;border-style:solid;--tw-border-opacity:1;border-color:rgb(210 214 218/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity));background-clip:padding-box;padding:.25rem .375rem;text-align:left;vertical-align:middle;font-size:.875rem;font-weight:400;line-height:1.4rem;--tw-text-opacity:1;color:rgb(73 80 87/var(--tw-text-opacity));transition-property:all;transition-timing-function:ease;transition-duration:.3s;transition-timing-function:ease-in-out}.custom-select-btn::-moz-placeholder{--tw-text-opacity:1;color:rgb(173 181 189/var(--tw-text-opacity))}.custom-select-btn::placeholder{--tw-text-opacity:1;color:rgb(173 181 189/var(--tw-text-opacity))}.custom-select-btn:focus{--tw-border-opacity:1;border-color:rgb(11 85 119/var(--tw-border-opacity))}.custom-select-btn:disabled{--tw-border-opacity:1;border-color:rgb(206 212 218/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(206 212 218/var(--tw-bg-opacity));--tw-text-opacity:1;color:rgb(73 80 87/var(--tw-text-opacity));opacity:.75}:is(.dark .custom-select-btn){--tw-border-opacity:1;border-color:rgb(98 117 148/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(52 71 103/var(--tw-bg-opacity));--tw-text-opacity:1;color:rgb(233 236 239/var(--tw-text-opacity))}:is(.dark .custom-select-btn:disabled){--tw-border-opacity:1;border-color:rgb(37 47 64/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(37 47 64/var(--tw-bg-opacity));--tw-text-opacity:1;color:rgb(210 214 218/var(--tw-text-opacity))}@media (min-width:768px){.custom-select-btn{padding:.5rem .75rem}}.custom-dropdown-btn{position:relative;margin-top:0;margin-bottom:0;min-height:38px;cursor:pointer;border-radius:0;border-bottom-width:1px;border-left-width:1px;border-right-width:1px;--tw-border-opacity:1;border-color:rgb(210 214 218/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity));padding:.5rem 1.5rem;text-align:center;vertical-align:middle;font-size:.875rem;line-height:1.5rem;line-height:1.5;letter-spacing:-.025rem;--tw-text-opacity:1;color:rgb(73 80 87/var(--tw-text-opacity));transition-property:none;transition-property:all;transition-timing-function:ease;transition-duration:.15s;transition-timing-function:ease-in}.custom-dropdown-btn:hover{--tw-brightness:brightness(.9);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}:is(.dark .custom-dropdown-btn){--tw-border-opacity:1;border-color:rgb(98 117 148/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(52 71 103/var(--tw-bg-opacity));--tw-text-opacity:1;color:rgb(233 236 239/var(--tw-text-opacity))}.active.custom-dropdown-btn{position:relative;margin-top:0;margin-bottom:0;min-height:38px;cursor:pointer;border-radius:0;border-bottom-width:1px;border-left-width:1px;border-right-width:1px;--tw-border-opacity:1;border-color:rgb(210 214 218/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(11 85 119/var(--tw-bg-opacity));padding:.5rem 1.5rem;text-align:center;vertical-align:middle;font-size:.875rem;line-height:1.5rem;line-height:1.5;letter-spacing:-.025rem;--tw-text-opacity:1;color:rgb(210 214 218/var(--tw-text-opacity));transition-property:all;transition-timing-function:ease;transition-duration:.15s;transition-timing-function:ease-in}.active.custom-dropdown-btn:hover{--tw-brightness:brightness(.9);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}:is(.dark .active.custom-dropdown-btn){border-color:rgb(98 117 148/var(--tw-border-opacity));background-color:rgb(11 85 119/var(--tw-bg-opacity));color:rgb(233 236 239/var(--tw-text-opacity))}.regular-input,:is(.dark .active.custom-dropdown-btn){--tw-border-opacity:1;--tw-bg-opacity:1;--tw-text-opacity:1}.regular-input{display:block;width:100%;-webkit-appearance:none;-moz-appearance:none;appearance:none;border-radius:.5rem;border-width:1px;border-style:solid;border-color:rgb(210 214 218/var(--tw-border-opacity));background-color:rgb(255 255 255/var(--tw-bg-opacity));background-clip:padding-box;padding:.25rem .375rem;font-size:.875rem;font-weight:400;line-height:1.4rem;color:rgb(73 80 87/var(--tw-text-opacity));outline:2px solid #0000;outline-offset:2px;transition-property:none;transition-property:all;transition-timing-function:ease;transition-duration:.15s;transition-timing-function:ease-in}.regular-input::-moz-placeholder{--tw-text-opacity:1;color:rgb(173 181 189/var(--tw-text-opacity))}.regular-input::placeholder{--tw-text-opacity:1;color:rgb(173 181 189/var(--tw-text-opacity))}.regular-input:focus{border-color:#d2d6da00;--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.regular-input:valid:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(34 197 94/var(--tw-ring-opacity))}.regular-input:invalid:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(245 57 57/var(--tw-ring-opacity))}.regular-input:disabled{--tw-bg-opacity:1;background-color:rgb(206 212 218/var(--tw-bg-opacity));--tw-text-opacity:1;color:rgb(73 80 87/var(--tw-text-opacity));opacity:.75}:is(.dark .regular-input){--tw-border-opacity:1;border-color:rgb(98 117 148/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(52 71 103/var(--tw-bg-opacity));--tw-text-opacity:1;color:rgb(233 236 239/var(--tw-text-opacity))}:is(.dark .regular-input:disabled){--tw-border-opacity:1;border-color:rgb(37 47 64/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(37 47 64/var(--tw-bg-opacity));--tw-text-opacity:1;color:rgb(210 214 218/var(--tw-text-opacity))}@media (min-width:768px){.regular-input{padding:.5rem .75rem}}.invalid.regular-input{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)!important;--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color)!important;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)!important;--tw-ring-opacity:1!important;--tw-ring-color:rgb(245 57 57/var(--tw-ring-opacity))!important}.input-title{margin:0;font-size:.875rem;line-height:1.5rem;font-weight:700;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:ease;transition-duration:.3s;transition-timing-function:ease-in-out}:is(.dark .input-title){--tw-text-opacity:1;color:rgb(233 236 239/var(--tw-text-opacity))}.popover-settings-container{position:fixed;z-index:1000;height:-moz-fit-content;height:fit-content;max-width:250px;--tw-translate-y:-1.75rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));border-radius:.375rem;padding:.75rem;transition-property:all;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:ease;transition-duration:.5s}:is(.dark .popover-settings-container){--tw-brightness:brightness(.9);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.info.popover-settings-container{--tw-bg-opacity:1;background-color:rgb(94 114 228/var(--tw-bg-opacity))}.multisite.popover-settings-container{--tw-bg-opacity:1;background-color:rgb(251 99 64/var(--tw-bg-opacity))}.popover-tab{position:absolute;left:0;bottom:0;z-index:50;--tw-translate-y:-1.75rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));border-radius:.375rem;--tw-bg-opacity:1;background-color:rgb(94 114 228/var(--tw-bg-opacity));padding:.75rem;transition-property:all;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:ease;transition-duration:.5s}:is(.dark .popover-tab){--tw-brightness:brightness(.9);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.popover-settings-text{margin:0;font-size:.875rem;line-height:1.5rem;font-weight:700;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:ease;transition-duration:.3s;transition-timing-function:ease-in-out}.popover-settings-text,:is(.dark .popover-settings-text){--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.popover-settings-svg{margin-left:.5rem;height:1.25rem;width:1.25rem;cursor:pointer;fill:#5e72e4}.popover-settings-svg:hover{--tw-brightness:brightness(.75);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.popover-settings-svg-multiple{margin-left:.5rem;height:1.375rem;width:1.375rem;cursor:pointer;fill:#fb6340;stroke:#495057}.popover-settings-svg-multiple:hover{--tw-brightness:brightness(.75);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}:is(.dark .popover-settings-svg-multiple){stroke:#adb5bd}.hidden-multiple{display:none!important}.active.tabs-tab-btn,.active.tabs-tab-btn:hover{--tw-bg-opacity:1;background-color:rgb(233 236 239/var(--tw-bg-opacity))}:is(.dark .active.tabs-tab-btn),:is(.dark .active.tabs-tab-btn:hover){--tw-bg-opacity:1;background-color:rgb(73 80 87/var(--tw-bg-opacity))}.tabs-tab-btn{position:relative;margin-top:.25rem;margin-bottom:.25rem;cursor:pointer;border-radius:0;border-width:1px;--tw-border-opacity:1;border-color:rgb(11 85 119/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity));padding:.75rem;text-align:center;vertical-align:middle;font-size:.875rem;line-height:1.5rem;font-weight:700;text-transform:uppercase;line-height:1.5;letter-spacing:-.025rem;--tw-shadow:0 7px 14px #32325d1a,0 3px 6px #00000014;--tw-shadow-colored:0 7px 14px var(--tw-shadow-color),0 3px 6px var(--tw-shadow-color);transition-property:all;transition-timing-function:ease;transition-duration:.15s;transition-timing-function:ease-in}.tabs-tab-btn,.tabs-tab-btn:hover{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.tabs-tab-btn:hover{--tw-bg-opacity:1;background-color:rgb(235 239 244/var(--tw-bg-opacity));--tw-shadow:0 4px 6px #32325d1a,0 1px 3px #00000014;--tw-shadow-colored:0 4px 6px var(--tw-shadow-color),0 1px 3px var(--tw-shadow-color)}:is(.dark .tabs-tab-btn){--tw-border-opacity:1;border-color:rgb(98 117 148/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(52 71 103/var(--tw-bg-opacity))}:is(.dark .tabs-tab-btn:hover){--tw-bg-opacity:1;background-color:rgb(58 65 111/var(--tw-bg-opacity))}.tabs-name{padding-left:.75rem;padding-right:.5rem;--tw-text-opacity:1;color:rgb(11 85 119/var(--tw-text-opacity));transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:ease;transition-duration:.3s;transition-timing-function:ease-in-out}:is(.dark .tabs-name){--tw-text-opacity:1;color:rgb(235 239 244/var(--tw-text-opacity))}.tabs-popover-container{position:absolute;top:60px;left:0;z-index:50;min-width:150px;border-radius:.375rem;--tw-bg-opacity:1;background-color:rgb(94 114 228/var(--tw-bg-opacity));padding:.75rem;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:ease;transition-duration:.15s}:is(.dark .tabs-popover-container){--tw-brightness:brightness(.9);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.tabs-popover-text{margin:0;font-size:.875rem;line-height:1.5rem;font-weight:700;--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.settings-tabs-select-btn{margin-top:.25rem;margin-bottom:.25rem;display:flex;width:100%;cursor:pointer;align-items:center;justify-content:space-between;border-radius:.5rem;border-width:1px;--tw-border-opacity:1;border-color:rgb(11 85 119/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity));padding:.5rem 1rem;text-align:center;vertical-align:middle;font-size:.875rem;line-height:1.5rem;font-weight:700;text-transform:uppercase;line-height:1.5;letter-spacing:-.025rem;--tw-shadow:0 7px 14px #32325d1a,0 3px 6px #00000014;--tw-shadow-colored:0 7px 14px var(--tw-shadow-color),0 3px 6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);transition-property:all;transition-timing-function:ease;transition-duration:.15s;transition-timing-function:ease-in}.settings-tabs-select-btn:hover{--tw-translate-y:-1px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));--tw-bg-opacity:1;background-color:rgb(248 249 250/var(--tw-bg-opacity));--tw-shadow:0 4px 6px #32325d1a,0 1px 3px #00000014;--tw-shadow-colored:0 4px 6px var(--tw-shadow-color),0 1px 3px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}:is(.dark .settings-tabs-select-btn){--tw-border-opacity:1;border-color:rgb(98 117 148/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(52 71 103/var(--tw-bg-opacity))}:is(.dark .settings-tabs-select-btn:hover){--tw-brightness:brightness(.95);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}@media (min-width:768px){.settings-tabs-select-btn{padding:.75rem 1.5rem}}.settings-tabs-select-btn-text{--tw-text-opacity:1;color:rgb(11 85 119/var(--tw-text-opacity));transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:ease;transition-duration:.3s;transition-timing-function:ease-in-out}:is(.dark .settings-tabs-select-btn-text){--tw-text-opacity:1;color:rgb(206 212 218/var(--tw-text-opacity))}.active.settings-tabs-select-dropdown-btn{position:relative;z-index:1000;margin-top:0;margin-bottom:0;cursor:pointer;border-radius:0;--tw-border-opacity:1;border-color:rgb(210 214 218/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(11 85 119/var(--tw-bg-opacity));padding:.5rem 1.5rem;text-align:center;vertical-align:middle;font-size:.875rem;line-height:1.5rem;line-height:1.5;letter-spacing:-.025rem;--tw-text-opacity:1;color:rgb(210 214 218/var(--tw-text-opacity));transition-property:all;transition-timing-function:ease;transition-duration:.15s;transition-timing-function:ease-in}.active.settings-tabs-select-dropdown-btn:hover{--tw-brightness:brightness(.9);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}:is(.dark .active.settings-tabs-select-dropdown-btn){--tw-border-opacity:1;border-color:rgb(98 117 148/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(11 85 119/var(--tw-bg-opacity));--tw-text-opacity:1;color:rgb(233 236 239/var(--tw-text-opacity))}:is(.dark .active.settings-tabs-select-dropdown-btn:hover){--tw-brightness:brightness(.9);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.first.settings-tabs-select-dropdown-btn{border-top-left-radius:.25rem;border-top-right-radius:.25rem;border-width:1px}.last.settings-tabs-select-dropdown-btn{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.settings-tabs-select-dropdown-btn{position:relative;margin-top:0;margin-bottom:0;display:flex;cursor:pointer;justify-content:space-between;border-radius:0;border-bottom-width:1px;border-left-width:1px;border-right-width:1px;--tw-border-opacity:1;border-color:rgb(210 214 218/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity));padding:.5rem 1.5rem;text-align:center;vertical-align:middle;font-size:.875rem;line-height:1.5rem;line-height:1.5;letter-spacing:-.025rem;--tw-text-opacity:1;color:rgb(73 80 87/var(--tw-text-opacity));transition-property:all;transition-timing-function:ease;transition-duration:.15s;transition-timing-function:ease-in}.settings-tabs-select-dropdown-btn:hover{--tw-brightness:brightness(.9);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}:is(.dark .settings-tabs-select-dropdown-btn){--tw-border-opacity:1;border-color:rgb(98 117 148/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(52 71 103/var(--tw-bg-opacity));--tw-text-opacity:1;color:rgb(233 236 239/var(--tw-text-opacity))}:is(.dark .settings-tabs-select-dropdown-btn:hover){--tw-brightness:brightness(.9);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.home-card{grid-column:span 12/span 12;display:flex;width:100%;justify-content:space-between;overflow-wrap:break-word;border-radius:1rem;--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity));background-clip:initial;padding:1rem;--tw-shadow:0 4px 6px #32325d1a,0 1px 3px #00000014;--tw-shadow-colored:0 4px 6px var(--tw-shadow-color),0 1px 3px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:ease;transition-duration:.15s}.home-card:hover{--tw-scale-x:1.02;--tw-scale-y:1.02;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}:is(.dark .home-card){--tw-bg-opacity:1;background-color:rgb(17 28 68/var(--tw-bg-opacity));--tw-shadow:0 2px 2px 0 #00000024,0 3px 1px -2px #0003,0 1px 5px 0 #0000001f;--tw-shadow-colored:0 2px 2px 0 var(--tw-shadow-color),0 3px 1px -2px var(--tw-shadow-color),0 1px 5px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);--tw-brightness:brightness(1.1);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}@media (min-width:576px){.home-card{max-height:7rem}}@media (min-width:768px){.home-card{grid-column:span 6/span 6}}@media (min-width:1320px){.home-card{grid-column:span 4/span 4}}.home-card-name{margin-bottom:0;font-family:Open Sans;font-size:.875rem;line-height:1.5rem;font-weight:600;text-transform:uppercase;line-height:1.5}:is(.dark .home-card-name){--tw-text-opacity:1;color:rgb(206 212 218/var(--tw-text-opacity))}.home-card-title{margin-bottom:.25rem;font-weight:700}:is(.dark .home-card-title){color:#ffffffe6}.home-card-subtitle{margin-left:.125rem;margin-right:.125rem;margin-bottom:0;font-size:.875rem;line-height:1.5rem;font-weight:700;line-height:1.5}.info.home-card-subtitle{--tw-text-opacity:1;color:rgb(14 165 233/var(--tw-text-opacity))}.error.home-card-subtitle{--tw-text-opacity:1;color:rgb(245 57 57/var(--tw-text-opacity))}.success.home-card-subtitle{--tw-text-opacity:1;color:rgb(34 197 94/var(--tw-text-opacity))}.warning.home-card-subtitle{--tw-text-opacity:1;color:rgb(251 177 64/var(--tw-text-opacity))}.home-card-svg-container{display:inline-block;height:3rem;width:3rem;border-radius:50%;text-align:center}:is(.dark .home-card-svg-container){--tw-brightness:brightness(.9);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.version.home-card-svg-container{--tw-bg-opacity:1;background-color:rgb(251 177 64/var(--tw-bg-opacity))}.version-number.home-card-svg-container{--tw-bg-opacity:1;background-color:rgb(45 206 137/var(--tw-bg-opacity))}.instances.home-card-svg-container{--tw-bg-opacity:1;background-color:rgb(108 117 125/var(--tw-bg-opacity))}.services.home-card-svg-container{--tw-bg-opacity:1;background-color:rgb(251 99 64/var(--tw-bg-opacity))}.plugins.home-card-svg-container{--tw-bg-opacity:1;background-color:rgb(251 207 51/var(--tw-bg-opacity))}.card-detail-container{margin-top:1rem;margin-bottom:1.5rem;margin-left:.25rem;display:grid;grid-template-columns:repeat(1,minmax(0,1fr));gap:.5rem}.card-detail-item{grid-column:span 1/span 1;display:flex;align-items:center;padding-top:.25rem;padding-bottom:.25rem}@media (min-width:576px){.card-detail-item{padding-top:0;padding-bottom:0}}.card-detail-item-title{margin-bottom:0;font-family:Open Sans;font-size:.875rem;line-height:1.5rem;font-weight:700;text-transform:uppercase;line-height:1.5;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:ease;transition-duration:.3s;transition-timing-function:ease-in-out}:is(.dark .card-detail-item-title){--tw-text-opacity:1;color:rgb(173 181 189/var(--tw-text-opacity))}.card-detail-item-subtitle{grid-column:span 1/span 1;margin-bottom:0;word-break:break-all;padding-left:.5rem;font-family:Open Sans;font-size:.875rem;line-height:1.5rem;font-weight:600;text-transform:uppercase;line-height:1.5;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:ease;transition-duration:.3s;transition-timing-function:ease-in-out}:is(.dark .card-detail-item-subtitle){--tw-text-opacity:1;color:rgb(235 239 244/var(--tw-text-opacity))}.core-layout{grid-column:span 12/span 12;display:grid;grid-template-columns:repeat(12,minmax(0,1fr))}.core-card{position:relative;grid-column:span 12/span 12;margin:.5rem;height:-moz-fit-content;height:fit-content;min-width:0;overflow-wrap:break-word;border-radius:1rem;--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity));background-clip:initial;padding:1rem;--tw-shadow:0 0 2rem 0 #8898aa26;--tw-shadow-colored:0 0 2rem 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:ease;transition-duration:.15s}.core-card:hover{--tw-scale-x:1.02;--tw-scale-y:1.02;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}:is(.dark .core-card){--tw-bg-opacity:1;background-color:rgb(17 28 68/var(--tw-bg-opacity));--tw-shadow:0 2px 2px 0 #00000024,0 3px 1px -2px #0003,0 1px 5px 0 #0000001f;--tw-shadow-colored:0 2px 2px 0 var(--tw-shadow-color),0 3px 1px -2px var(--tw-shadow-color),0 1px 5px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);--tw-brightness:brightness(1.1);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}@media (min-width:768px){.core-card{grid-column:span 6/span 6}}@media (min-width:1320px){.core-card{grid-column:span 4/span 4}}@media (min-width:1920px){.core-card{grid-column:span 3/span 3}}.core-card-lg{position:relative;grid-column:span 12/span 12;margin:.5rem;height:-moz-fit-content;height:fit-content;min-width:0;overflow-wrap:break-word;border-radius:1rem;--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity));background-clip:initial;padding:1rem;--tw-shadow:0 0 2rem 0 #8898aa26;--tw-shadow-colored:0 0 2rem 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:ease;transition-duration:.15s}.core-card-lg:hover{--tw-scale-x:1.02;--tw-scale-y:1.02;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}:is(.dark .core-card-lg){--tw-bg-opacity:1;background-color:rgb(17 28 68/var(--tw-bg-opacity));--tw-shadow:0 2px 2px 0 #00000024,0 3px 1px -2px #0003,0 1px 5px 0 #0000001f;--tw-shadow-colored:0 2px 2px 0 var(--tw-shadow-color),0 3px 1px -2px var(--tw-shadow-color),0 1px 5px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);--tw-brightness:brightness(1.1);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}@media (min-width:768px){.core-card-lg{grid-column:span 6/span 6}}.core-card-wrap{display:flex;justify-content:space-between}.core-card-wrap-logo{display:flex;align-items:center;justify-content:flex-start}.core-card-text{margin-bottom:0;font-family:Open Sans;font-size:.875rem;line-height:1.5rem;line-height:1.5;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:ease;transition-duration:.3s;transition-timing-function:ease-in-out}:is(.dark .core-card-text){--tw-text-opacity:1;color:rgb(210 214 218/var(--tw-text-opacity))}.core-card-text-doc{margin-top:1rem;margin-bottom:.5rem;padding-left:.25rem;padding-right:.25rem;font-family:Open Sans;font-size:.875rem;line-height:1.5rem;line-height:1.5;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:ease;transition-duration:.3s;transition-timing-function:ease-in-out}:is(.dark .core-card-text-doc){--tw-text-opacity:1;color:rgb(210 214 218/var(--tw-text-opacity))}.core-card-text-doc-link{margin-top:.5rem;cursor:pointer;--tw-text-opacity:1;color:rgb(14 165 233/var(--tw-text-opacity));text-decoration-line:underline}.core-card-text-doc-link:hover{--tw-brightness:brightness(.9);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.center.core-card-text{text-align:center}.core-card-title{margin-bottom:.5rem;font-weight:700}:is(.dark .core-card-title){color:#ffffffe6}.core-card-svg-container{display:inline-block;height:3rem;width:3rem;border-radius:50%;text-align:center}:is(.dark .core-card-svg-container){--tw-brightness:brightness(.9);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.core-card-deactivated-title{font-weight:700}:is(.dark .core-card-deactivated-title){color:#ffffffe6}.core-card-deactivated-svg{position:relative;--tw-translate-y:-8px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));fill:#fbb140;stroke:#fff;font-size:1.125rem;line-height:1.75rem;line-height:1}.core-card-text-container{margin:.75rem .25rem;display:flex;align-items:center;justify-content:flex-start}.core-card-status{position:relative;grid-column:span 12/span 12;margin:.5rem;height:-moz-fit-content;height:fit-content;width:-moz-fit-content;width:fit-content;min-width:0;overflow-wrap:break-word;border-radius:1rem;--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity));background-clip:initial;padding:1rem;--tw-shadow:0 0 2rem 0 #8898aa26;--tw-shadow-colored:0 0 2rem 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:ease;transition-duration:.15s}.core-card-status:hover{--tw-scale-x:1.02;--tw-scale-y:1.02;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}:is(.dark .core-card-status){--tw-bg-opacity:1;background-color:rgb(17 28 68/var(--tw-bg-opacity));--tw-shadow:0 2px 2px 0 #00000024,0 3px 1px -2px #0003,0 1px 5px 0 #0000001f;--tw-shadow-colored:0 2px 2px 0 var(--tw-shadow-color),0 3px 1px -2px var(--tw-shadow-color),0 1px 5px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);--tw-brightness:brightness(1.1);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}@media (min-width:768px){.core-card-status{grid-column:span 6/span 6}}@media (min-width:1320px){.core-card-status{grid-column:span 3/span 3}}@media (min-width:1920px){.core-card-status{grid-column:span 2/span 2}}.core-card-status-container{margin-left:.25rem;margin-right:.25rem;display:flex;align-items:center;justify-content:flex-start}.core-card-status-title{margin-bottom:0;margin-right:1rem;font-weight:700}:is(.dark .core-card-status-title){color:#ffffffe6}.core-card-status-svg{height:1.5rem;width:1.5rem}.info.core-card-status-svg{fill:#0ea5e9}.error.core-card-status-svg{fill:#f53939}.success.core-card-status-svg{fill:#22c55e}.core-layout-separator{grid-column:span 12/span 12}.core-card-list{position:relative;grid-column:span 12/span 12;margin:.5rem;display:grid;max-height:25rem;grid-template-columns:repeat(12,minmax(0,1fr));align-content:flex-start;overflow-y:auto;overflow-x:hidden;overflow-wrap:break-word;border-radius:1rem;--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity));background-clip:initial;padding:1rem;--tw-shadow:0 0 2rem 0 #8898aa26;--tw-shadow-colored:0 0 2rem 0 var(--tw-shadow-color)}.core-card-list,:is(.dark .core-card-list){box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}:is(.dark .core-card-list){--tw-bg-opacity:1;background-color:rgb(17 28 68/var(--tw-bg-opacity));--tw-shadow:0 2px 2px 0 #00000024,0 3px 1px -2px #0003,0 1px 5px 0 #0000001f;--tw-shadow-colored:0 2px 2px 0 var(--tw-shadow-color),0 3px 1px -2px var(--tw-shadow-color),0 1px 5px 0 var(--tw-shadow-color);--tw-brightness:brightness(1.1);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}@media (min-width:576px){.core-card-list{max-height:31.25rem}}@media (min-width:768px){.core-card-list{grid-column:span 6/span 6}}.core-card-list.no-data{place-content:stretch}.core-card-list-no-data{margin-bottom:0;padding-bottom:2rem;text-align:center;font-size:1.5rem;line-height:2rem}@media (min-width:768px){.w-small.core-card-list{max-width:300px}.w-medium.core-card-list{max-width:400px}.w-large.core-card-list{max-width:550px}}.core-card-list-title-container{grid-column:span 12/span 12;display:flex}.core-card-list-title{margin:.5rem .5rem 1rem;font-weight:700}:is(.dark .core-card-list-title){color:#ffffffe6}.core-card-list-container{grid-column:span 12/span 12;overflow-x:auto;overflow-y:auto}.core-card-list-header{margin:0;height:2rem;border-bottom-width:1px;--tw-border-opacity:1;border-color:rgb(206 212 218/var(--tw-border-opacity));padding-bottom:.5rem;font-size:.875rem;line-height:1.5rem;font-weight:700}:is(.dark .core-card-list-header){--tw-text-opacity:1;color:rgb(233 236 239/var(--tw-text-opacity))}.core-card-list-item{display:grid;grid-template-columns:repeat(12,minmax(0,1fr));align-items:center;border-bottom-width:1px;--tw-border-opacity:1;border-color:rgb(210 214 218/var(--tw-border-opacity));padding-top:.625rem;padding-bottom:.625rem}.core-card-list-item-content{margin:.25rem 0;font-size:.875rem;line-height:1.5rem}:is(.dark .core-card-list-item-content){--tw-text-opacity:1;color:rgb(206 212 218/var(--tw-text-opacity))}.core-card-list-wrap{display:grid;width:100%;grid-template-columns:repeat(12,minmax(0,1fr));border-radius:.25rem;padding:.5rem}.w-small.core-card-list-wrap{min-width:200px}.w-medium.core-card-list-wrap{min-width:300px}.w-large.core-card-list-wrap{min-width:450px}.core-card-metrics{grid-column:span 12/span 12;margin:.5rem;display:flex;height:-moz-fit-content;height:fit-content;justify-content:space-between;overflow-wrap:break-word;border-radius:1rem;--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity));background-clip:initial;padding:1rem;--tw-shadow:0 0 2rem 0 #8898aa26;--tw-shadow-colored:0 0 2rem 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:ease;transition-duration:.15s}.core-card-metrics:hover{--tw-scale-x:1.02;--tw-scale-y:1.02;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}:is(.dark .core-card-metrics){--tw-bg-opacity:1;background-color:rgb(17 28 68/var(--tw-bg-opacity));--tw-shadow:0 2px 2px 0 #00000024,0 3px 1px -2px #0003,0 1px 5px 0 #0000001f;--tw-shadow-colored:0 2px 2px 0 var(--tw-shadow-color),0 3px 1px -2px var(--tw-shadow-color),0 1px 5px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);--tw-brightness:brightness(1.1);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}@media (min-width:576px){.core-card-metrics{max-height:7rem}}@media (min-width:768px){.core-card-metrics{grid-column:span 6/span 6}}@media (min-width:1320px){.core-card-metrics{grid-column:span 4/span 4}}.core-card-metrics-name{margin-bottom:.5rem;font-family:Open Sans;font-size:.875rem;line-height:1.5rem;font-weight:600;text-transform:uppercase;line-height:1.5}:is(.dark .core-card-metrics-name){--tw-text-opacity:1;color:rgb(206 212 218/var(--tw-text-opacity))}.core-card-metrics-subtitle{margin-bottom:0}:is(.dark .core-card-metrics-subtitle){--tw-text-opacity:1;color:rgb(210 214 218/var(--tw-text-opacity))}.core-card-metrics-subtitle-content{margin-left:.125rem;margin-right:.125rem;font-size:.875rem;line-height:1.5rem;font-weight:700;line-height:1.5}.error.core-card-metrics-subtitle-content{--tw-text-opacity:1;color:rgb(245 57 57/var(--tw-text-opacity))}.success.core-card-metrics-subtitle-content{--tw-text-opacity:1;color:rgb(34 197 94/var(--tw-text-opacity))}.warning.core-card-metrics-subtitle-content{--tw-text-opacity:1;color:rgb(251 177 64/var(--tw-text-opacity))}.info.core-card-metrics-subtitle-content{--tw-text-opacity:1;color:rgb(14 165 233/var(--tw-text-opacity))}.core-card-metrics-svg{position:relative;fill:#fff;font-size:1.125rem;line-height:1.75rem;line-height:1}.size-small.core-card-metrics-svg{--tw-scale-x:0.5;--tw-scale-y:0.5}.size-medium.core-card-metrics-svg,.size-small.core-card-metrics-svg{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.size-medium.core-card-metrics-svg{--tw-scale-x:0.6;--tw-scale-y:0.6}.size-base.core-card-metrics-svg{--tw-scale-x:0.75;--tw-scale-y:0.75;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.purple.core-card-svg-container{--tw-bg-opacity:1;background-color:rgb(147 51 234/var(--tw-bg-opacity))}.green.core-card-svg-container{--tw-bg-opacity:1;background-color:rgb(21 128 61/var(--tw-bg-opacity))}.red.core-card-svg-container{--tw-bg-opacity:1;background-color:rgb(185 28 28/var(--tw-bg-opacity))}.orange.core-card-svg-container{--tw-bg-opacity:1;background-color:rgb(245 96 54/var(--tw-bg-opacity))}.blue.core-card-svg-container{--tw-bg-opacity:1;background-color:rgb(33 82 255/var(--tw-bg-opacity))}.yellow.core-card-svg-container{--tw-bg-opacity:1;background-color:rgb(202 138 4/var(--tw-bg-opacity))}.gray.core-card-svg-container{--tw-bg-opacity:1;background-color:rgb(108 117 125/var(--tw-bg-opacity))}.dark.core-card-svg-container{--tw-bg-opacity:1;background-color:rgb(98 117 148/var(--tw-bg-opacity))}.amber.core-card-svg-container{--tw-bg-opacity:1;background-color:rgb(217 119 6/var(--tw-bg-opacity))}.emerald.core-card-svg-container{--tw-bg-opacity:1;background-color:rgb(5 150 105/var(--tw-bg-opacity))}.teal.core-card-svg-container{--tw-bg-opacity:1;background-color:rgb(13 148 136/var(--tw-bg-opacity))}.indigo.core-card-svg-container{--tw-bg-opacity:1;background-color:rgb(79 70 229/var(--tw-bg-opacity))}.cyan.core-card-svg-container{--tw-bg-opacity:1;background-color:rgb(8 145 178/var(--tw-bg-opacity))}.sky.core-card-svg-container{--tw-bg-opacity:1;background-color:rgb(3 105 161/var(--tw-bg-opacity))}.pink.core-card-svg-container{--tw-bg-opacity:1;background-color:rgb(219 39 119/var(--tw-bg-opacity))}.lime.core-card-svg-container{--tw-bg-opacity:1;background-color:rgb(101 163 13/var(--tw-bg-opacity))}.core-separator{margin:.75rem 0 .5rem;height:1px;background-color:initial;--tw-gradient-from:#0000 var(--tw-gradient-from-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to);--tw-gradient-stops:var(--tw-gradient-from),#0006 var(--tw-gradient-via-position),var(--tw-gradient-to);--tw-gradient-to:#0000 var(--tw-gradient-to-position)}.core-separator,:is(.dark .core-separator){background-image:linear-gradient(to right,var(--tw-gradient-stops))}:is(.dark .core-separator){--tw-gradient-from:#0000 var(--tw-gradient-from-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to);--tw-gradient-to:#fff0 var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),#fff var(--tw-gradient-via-position),var(--tw-gradient-to);--tw-gradient-to:#0000 var(--tw-gradient-to-position)}.core-card-test-container{margin-top:1rem;display:flex;justify-content:center}.core-card-test-btn{display:inline-block;cursor:pointer;border-radius:.5rem;--tw-bg-opacity:1;background-color:rgb(251 177 64/var(--tw-bg-opacity));padding:.75rem 1.5rem;text-align:center;vertical-align:middle;font-size:.875rem;line-height:1.5rem;font-weight:700;text-transform:uppercase;line-height:1.5;letter-spacing:.025em;--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity));--tw-shadow:0 7px 14px #32325d1a,0 3px 6px #00000014;--tw-shadow-colored:0 7px 14px var(--tw-shadow-color),0 3px 6px var(--tw-shadow-color);transition-property:all;transition-timing-function:ease;transition-duration:.15s;transition-timing-function:ease-in}.core-card-test-btn,.core-card-test-btn:hover{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.core-card-test-btn:hover{--tw-translate-y:-1px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));background-color:#fbb140cc;--tw-shadow:0 4px 6px #32325d1a,0 1px 3px #00000014;--tw-shadow-colored:0 4px 6px var(--tw-shadow-color),0 1px 3px var(--tw-shadow-color)}.core-card-test-btn:focus{background-color:#fbb140cc}.core-card-test-btn:active{opacity:.85}.core-card-test-btn:disabled{cursor:not-allowed;--tw-bg-opacity:1;--tw-text-opacity:1;color:rgb(73 80 87/var(--tw-text-opacity))}.core-card-test-btn:disabled,.core-card-test-btn:hover:disabled{border-color:#ced4da00;background-color:rgb(206 212 218/var(--tw-bg-opacity))}.core-card-test-btn:hover:disabled{--tw-translate-y:0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));--tw-bg-opacity:1}:is(.dark .core-card-test-btn){--tw-brightness:brightness(.9);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}:is(.dark .core-card-test-btn:disabled){border-color:#49505700;--tw-bg-opacity:1;background-color:rgb(73 80 87/var(--tw-bg-opacity));--tw-text-opacity:1;color:rgb(210 214 218/var(--tw-text-opacity))}:is(.dark .core-card-test-btn:hover:disabled){--tw-translate-y:0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));border-color:#49505700;--tw-bg-opacity:1;background-color:rgb(73 80 87/var(--tw-bg-opacity))}.core-card-upload-btn{display:inline-block;width:-moz-fit-content;width:fit-content;cursor:pointer;border-radius:.5rem;--tw-bg-opacity:1;background-color:rgb(11 85 119/var(--tw-bg-opacity));background-image:linear-gradient(to top left,var(--tw-gradient-stops));background-size:150%;background-position:25% 0;padding:.75rem 1.5rem;text-align:center;vertical-align:middle;font-size:.75rem;line-height:1rem;font-weight:700;text-transform:uppercase;line-height:1.5;letter-spacing:.025em;--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity));--tw-shadow:0 7px 14px #32325d1a,0 3px 6px #00000014;--tw-shadow-colored:0 7px 14px var(--tw-shadow-color),0 3px 6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);transition-property:all;transition-timing-function:ease;transition-duration:.15s;transition-timing-function:ease-in}.core-card-upload-btn:hover{--tw-translate-y:-1px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));--tw-shadow:0 4px 6px #32325d1a,0 1px 3px #00000014;--tw-shadow-colored:0 4px 6px var(--tw-shadow-color),0 1px 3px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);--tw-brightness:brightness(.75);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.core-card-upload-btn:active{opacity:.85}.core-card-upload-btn:disabled{cursor:not-allowed;--tw-border-opacity:1;border-color:rgb(206 212 218/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(206 212 218/var(--tw-bg-opacity));--tw-text-opacity:1;color:rgb(73 80 87/var(--tw-text-opacity));opacity:.75}.core-card-upload-btn:hover:disabled{--tw-translate-y:0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}:is(.dark .core-card-upload-btn){--tw-brightness:brightness(1.25);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}:is(.dark .core-card-upload-btn:disabled){--tw-border-opacity:1;border-color:rgb(37 47 64/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(37 47 64/var(--tw-bg-opacity));--tw-text-opacity:1;color:rgb(210 214 218/var(--tw-text-opacity))}.core-card-test-status-container{margin-left:.25rem;margin-right:.25rem;display:flex;align-items:center;justify-content:center}.core-card-test-status-svg{margin-right:.5rem;height:1.5rem;width:1.5rem}.success.core-card-test-status-svg{fill:#22c55e}.error.core-card-test-status-svg{fill:#f53939}.info.core-card-test-status-svg{fill:#0ea5e9}.core-img-default{margin-right:1rem;height:3rem;width:3rem}.core-img-hor{margin-right:1rem;height:4rem;width:6rem}.file-manager-actions-item-btn{position:relative;margin:.25rem;cursor:pointer;white-space:nowrap;border-radius:.25rem;border-width:1px;--tw-border-opacity:1;border-color:rgb(11 85 119/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity));padding:.75rem 1.25rem .625rem 1rem;text-align:center;vertical-align:middle;font-size:.875rem;line-height:1.5rem;font-weight:700;text-transform:uppercase;line-height:1.5;letter-spacing:-.025rem;--tw-text-opacity:1;color:rgb(11 85 119/var(--tw-text-opacity));--tw-shadow:0 7px 14px #32325d1a,0 3px 6px #00000014;--tw-shadow-colored:0 7px 14px var(--tw-shadow-color),0 3px 6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);transition-property:all;transition-timing-function:ease;transition-duration:.15s;transition-timing-function:ease-in}.file-manager-actions-item-btn:hover{--tw-bg-opacity:1;background-color:rgb(235 239 244/var(--tw-bg-opacity));--tw-shadow:0 4px 6px #32325d1a,0 1px 3px #00000014;--tw-shadow-colored:0 4px 6px var(--tw-shadow-color),0 1px 3px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.file-manager-actions-item-btn:disabled{cursor:not-allowed;border-color:#ced4da00;--tw-bg-opacity:1;background-color:rgb(206 212 218/var(--tw-bg-opacity));--tw-text-opacity:1;color:rgb(73 80 87/var(--tw-text-opacity))}.file-manager-actions-item-btn:hover:disabled{--tw-translate-y:0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));border-color:#ced4da00;--tw-bg-opacity:1;background-color:rgb(206 212 218/var(--tw-bg-opacity))}:is(.dark .file-manager-actions-item-btn){--tw-border-opacity:1;border-color:rgb(98 117 148/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(52 71 103/var(--tw-bg-opacity));--tw-text-opacity:1;color:rgb(233 236 239/var(--tw-text-opacity))}:is(.dark .file-manager-actions-item-btn:hover){--tw-bg-opacity:1;background-color:rgb(58 65 111/var(--tw-bg-opacity))}:is(.dark .file-manager-actions-item-btn:disabled){border-color:#49505700;--tw-bg-opacity:1;background-color:rgb(73 80 87/var(--tw-bg-opacity));--tw-text-opacity:1;color:rgb(210 214 218/var(--tw-text-opacity))}:is(.dark .file-manager-actions-item-btn:hover:disabled){--tw-translate-y:0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));border-color:#49505700;--tw-bg-opacity:1;background-color:rgb(73 80 87/var(--tw-bg-opacity))}@media (min-width:768px){.file-manager-actions-item-btn{display:block}}.first-letter\:absolute:first-letter{position:absolute!important}.first-letter\:w-full:first-letter{width:100%!important}.placeholder\:text-gray-500::-moz-placeholder{--tw-text-opacity:1!important;color:rgb(173 181 189/var(--tw-text-opacity))!important}.placeholder\:text-gray-500::placeholder{--tw-text-opacity:1!important;color:rgb(173 181 189/var(--tw-text-opacity))!important}.before\:float-left:before{content:var(--tw-content)!important;float:left!important}.before\:pr-2:before{content:var(--tw-content)!important;padding-right:.5rem!important}.before\:text-white:before{content:var(--tw-content)!important;--tw-text-opacity:1!important;color:rgb(255 255 255/var(--tw-text-opacity))!important}.before\:content-\[\'\/\'\]:before{--tw-content:"/"!important;content:var(--tw-content)!important}.after\:absolute:after{content:var(--tw-content)!important;position:absolute!important}.after\:top-px:after{content:var(--tw-content)!important;top:1px!important}.after\:float-right:after{content:var(--tw-content)!important;float:right!important}.after\:h-4:after{content:var(--tw-content)!important;height:1rem!important}.after\:w-4:after{content:var(--tw-content)!important;width:1rem!important}.after\:translate-x-px:after{content:var(--tw-content)!important;--tw-translate-x:1px!important;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}.after\:rounded-circle:after{content:var(--tw-content)!important;border-radius:50%!important}.after\:bg-white:after{content:var(--tw-content)!important;--tw-bg-opacity:1!important;background-color:rgb(255 255 255/var(--tw-bg-opacity))!important}.after\:pl-2:after{content:var(--tw-content)!important;padding-left:.5rem!important}.after\:text-gray-600:after{content:var(--tw-content)!important;--tw-text-opacity:1!important;color:rgb(108 117 125/var(--tw-text-opacity))!important}.after\:shadow-2xl:after{content:var(--tw-content)!important;--tw-shadow:0 .3125rem .625rem 0 #0000001f!important;--tw-shadow-colored:0 .3125rem .625rem 0 var(--tw-shadow-color)!important;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)!important}.after\:duration-300:after{content:var(--tw-content)!important;transition-duration:.3s!important}.after\:content-\[\'\'\]:after{--tw-content:""!important;content:var(--tw-content)!important}.after\:content-\[\'\/\'\]:after{--tw-content:"/"!important;content:var(--tw-content)!important}.checked\:z-0:checked{z-index:0!important}.checked\:border-primary:checked{--tw-border-opacity:1!important;border-color:rgb(11 85 119/var(--tw-border-opacity))!important}.checked\:bg-primary:checked{--tw-bg-opacity:1!important;background-color:rgb(11 85 119/var(--tw-bg-opacity))!important}.checked\:bg-none:checked{background-image:none!important}.checked\:bg-right:checked{background-position:100%!important}.checked\:after\:translate-x-5:checked:after{--tw-translate-x:1.25rem!important}.checked\:after\:translate-x-5:checked:after,.checked\:after\:translate-x-5\.3:checked:after{content:var(--tw-content)!important;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}.checked\:after\:translate-x-5\.3:checked:after{--tw-translate-x:1.3rem!important}.valid\:\!border-red-500:valid{--tw-border-opacity:1!important;border-color:rgb(245 57 57/var(--tw-border-opacity))!important}.hover\:-translate-y-0:hover{--tw-translate-y:-0px!important}.hover\:-translate-y-0:hover,.hover\:-translate-y-0\.4:hover{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}.hover\:-translate-y-0\.4:hover{--tw-translate-y:-0.1rem!important}.hover\:-translate-y-0\.5:hover{--tw-translate-y:-0.125rem!important}.hover\:-translate-y-0\.5:hover,.hover\:-translate-y-px:hover{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}.hover\:-translate-y-px:hover{--tw-translate-y:-1px!important}.hover\:scale-102:hover{--tw-scale-x:1.02!important;--tw-scale-y:1.02!important;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}.hover\:rounded-lg:hover{border-radius:.5rem!important}.hover\:bg-emerald-500:hover{--tw-bg-opacity:1!important;background-color:rgb(45 206 137/var(--tw-bg-opacity))!important}.hover\:bg-emerald-500\/80:hover{background-color:#2dce89cc!important}.hover\:bg-gray-100:hover{--tw-bg-opacity:1!important;background-color:rgb(235 239 244/var(--tw-bg-opacity))!important}.hover\:bg-gray-100\/10:hover{background-color:#ebeff41a!important}.hover\:bg-gray-300:hover{--tw-bg-opacity:1!important;background-color:rgb(210 214 218/var(--tw-bg-opacity))!important}.hover\:bg-gray-500:hover{--tw-bg-opacity:1!important;background-color:rgb(173 181 189/var(--tw-bg-opacity))!important}.hover\:bg-gray-500\/80:hover{background-color:#adb5bdcc!important}.hover\:bg-gray-600:hover{--tw-bg-opacity:1!important;background-color:rgb(108 117 125/var(--tw-bg-opacity))!important}.hover\:bg-gray-600\/80:hover{background-color:#6c757dcc!important}.hover\:bg-green-500:hover{--tw-bg-opacity:1!important;background-color:rgb(34 197 94/var(--tw-bg-opacity))!important}.hover\:bg-green-500\/80:hover{background-color:#22c55ecc!important}.hover\:bg-orange-500:hover{--tw-bg-opacity:1!important;background-color:rgb(251 99 64/var(--tw-bg-opacity))!important}.hover\:bg-orange-500\/80:hover{background-color:#fb6340cc!important}.hover\:bg-primary\/30:hover{background-color:#0b55774d!important}.hover\:bg-primary\/5:hover{background-color:#0b55770d!important}.hover\:bg-primary\/80:hover{background-color:#0b5577cc!important}.hover\:bg-red-500:hover{--tw-bg-opacity:1!important;background-color:rgb(245 57 57/var(--tw-bg-opacity))!important}.hover\:bg-red-500\/80:hover{background-color:#f53939cc!important}.hover\:bg-sky-500:hover{--tw-bg-opacity:1!important;background-color:rgb(14 165 233/var(--tw-bg-opacity))!important}.hover\:bg-sky-500\/80:hover{background-color:#0ea5e9cc!important}.hover\:bg-yellow-400:hover{--tw-bg-opacity:1!important;background-color:rgb(251 207 51/var(--tw-bg-opacity))!important}.hover\:bg-yellow-400\/80:hover{background-color:#fbcf33cc!important}.hover\:bg-yellow-500:hover{--tw-bg-opacity:1!important;background-color:rgb(251 177 64/var(--tw-bg-opacity))!important}.hover\:bg-yellow-500\/80:hover{background-color:#fbb140cc!important}.hover\:italic:hover{font-style:italic!important}.hover\:no-underline:hover{text-decoration-line:none!important}.hover\:opacity-80:hover{opacity:.8!important}.hover\:shadow-md:hover{--tw-shadow:0 4px 6px #32325d1a,0 1px 3px #00000014!important;--tw-shadow-colored:0 4px 6px var(--tw-shadow-color),0 1px 3px var(--tw-shadow-color)!important;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)!important}.hover\:brightness-75:hover{--tw-brightness:brightness(.75)!important}.hover\:brightness-75:hover,.hover\:brightness-90:hover{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)!important}.hover\:brightness-90:hover{--tw-brightness:brightness(.9)!important}.hover\:brightness-95:hover{--tw-brightness:brightness(.95)!important;filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)!important}.focus\:\!border-red-500:focus{--tw-border-opacity:1!important;border-color:rgb(245 57 57/var(--tw-border-opacity))!important}.focus\:border-green-500:focus{--tw-border-opacity:1!important;border-color:rgb(34 197 94/var(--tw-border-opacity))!important}.focus\:border-primary:focus{--tw-border-opacity:1!important;border-color:rgb(11 85 119/var(--tw-border-opacity))!important}.focus\:bg-emerald-500:focus{--tw-bg-opacity:1!important;background-color:rgb(45 206 137/var(--tw-bg-opacity))!important}.focus\:bg-emerald-500\/80:focus{background-color:#2dce89cc!important}.focus\:bg-gray-500:focus{--tw-bg-opacity:1!important;background-color:rgb(173 181 189/var(--tw-bg-opacity))!important}.focus\:bg-gray-500\/80:focus{background-color:#adb5bdcc!important}.focus\:bg-gray-600:focus{--tw-bg-opacity:1!important;background-color:rgb(108 117 125/var(--tw-bg-opacity))!important}.focus\:bg-gray-600\/80:focus{background-color:#6c757dcc!important}.focus\:bg-green-500:focus{--tw-bg-opacity:1!important;background-color:rgb(34 197 94/var(--tw-bg-opacity))!important}.focus\:bg-green-500\/80:focus{background-color:#22c55ecc!important}.focus\:bg-orange-500:focus{--tw-bg-opacity:1!important;background-color:rgb(251 99 64/var(--tw-bg-opacity))!important}.focus\:bg-orange-500\/80:focus{background-color:#fb6340cc!important}.focus\:bg-primary\/80:focus{background-color:#0b5577cc!important}.focus\:bg-red-500:focus{--tw-bg-opacity:1!important;background-color:rgb(245 57 57/var(--tw-bg-opacity))!important}.focus\:bg-red-500\/80:focus{background-color:#f53939cc!important}.focus\:bg-sky-500:focus{--tw-bg-opacity:1!important;background-color:rgb(14 165 233/var(--tw-bg-opacity))!important}.focus\:bg-sky-500\/80:focus{background-color:#0ea5e9cc!important}.focus\:bg-yellow-400:focus{--tw-bg-opacity:1!important;background-color:rgb(251 207 51/var(--tw-bg-opacity))!important}.focus\:bg-yellow-400\/80:focus{background-color:#fbcf33cc!important}.focus\:bg-yellow-500:focus{--tw-bg-opacity:1!important;background-color:rgb(251 177 64/var(--tw-bg-opacity))!important}.focus\:bg-yellow-500\/80:focus{background-color:#fbb140cc!important}.focus\:outline:focus{outline-style:solid!important}.focus\:\!ring-red-500:focus{--tw-ring-opacity:1!important;--tw-ring-color:rgb(245 57 57/var(--tw-ring-opacity))!important}.focus\:valid\:\!border-red-500:valid:focus{--tw-border-opacity:1!important;border-color:rgb(245 57 57/var(--tw-border-opacity))!important}.focus\:valid\:border-green-500:valid:focus{--tw-border-opacity:1!important;border-color:rgb(34 197 94/var(--tw-border-opacity))!important}.focus\:valid\:\!ring-red-500:valid:focus{--tw-ring-opacity:1!important;--tw-ring-color:rgb(245 57 57/var(--tw-ring-opacity))!important}.focus\:invalid\:border-red-500:invalid:focus{--tw-border-opacity:1!important;border-color:rgb(245 57 57/var(--tw-border-opacity))!important}.focus\:file\:invalid\:border-red-500:invalid::file-selector-button:focus{--tw-border-opacity:1!important;border-color:rgb(245 57 57/var(--tw-border-opacity))!important}.active\:\!border-red-500:active{--tw-border-opacity:1!important;border-color:rgb(245 57 57/var(--tw-border-opacity))!important}.active\:opacity-85:active{opacity:.85!important}.active\:valid\:\!border-red-500:valid:active{--tw-border-opacity:1!important;border-color:rgb(245 57 57/var(--tw-border-opacity))!important}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed!important}.disabled\:border-gray-400:disabled{--tw-border-opacity:1!important;border-color:rgb(206 212 218/var(--tw-border-opacity))!important}.disabled\:border-gray-400\/0:disabled{border-color:#ced4da00!important}.disabled\:bg-gray-400:disabled{--tw-bg-opacity:1!important;background-color:rgb(206 212 218/var(--tw-bg-opacity))!important}.disabled\:text-gray-700:disabled{--tw-text-opacity:1!important;color:rgb(73 80 87/var(--tw-text-opacity))!important}.disabled\:opacity-75:disabled{opacity:.75!important}.disabled\:hover\:translate-y-0:hover:disabled{--tw-translate-y:0px!important;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}.disabled\:hover\:border-gray-400\/0:hover:disabled{border-color:#ced4da00!important}.disabled\:hover\:bg-gray-400:hover:disabled{--tw-bg-opacity:1!important;background-color:rgb(206 212 218/var(--tw-bg-opacity))!important}.group:hover .group-hover\:z-10{z-index:10!important}.group:hover .group-hover\:opacity-100{opacity:1!important}:is(.dark .dark\:inline){display:inline!important}:is(.dark .dark\:hidden){display:none!important}:is(.dark .dark\:border-gray-200){--tw-border-opacity:1!important;border-color:rgb(233 236 239/var(--tw-border-opacity))!important}:is(.dark .dark\:border-gray-300){--tw-border-opacity:1!important;border-color:rgb(210 214 218/var(--tw-border-opacity))!important}:is(.dark .dark\:border-gray-700){--tw-border-opacity:1!important;border-color:rgb(73 80 87/var(--tw-border-opacity))!important}:is(.dark .dark\:border-slate-600){--tw-border-opacity:1!important;border-color:rgb(98 117 148/var(--tw-border-opacity))!important}:is(.dark .dark\:border-slate-800){--tw-border-opacity:1!important;border-color:rgb(58 65 111/var(--tw-border-opacity))!important}:is(.dark .dark\:bg-gray-400){--tw-bg-opacity:1!important;background-color:rgb(206 212 218/var(--tw-bg-opacity))!important}:is(.dark .dark\:bg-gray-800){--tw-bg-opacity:1!important;background-color:rgb(37 47 64/var(--tw-bg-opacity))!important}:is(.dark .dark\:bg-green-500\/90){background-color:#22c55ee6!important}:is(.dark .dark\:bg-primary){--tw-bg-opacity:1!important;background-color:rgb(11 85 119/var(--tw-bg-opacity))!important}:is(.dark .dark\:bg-primary\/50){background-color:#0b557780!important}:is(.dark .dark\:bg-red-500\/90){background-color:#f53939e6!important}:is(.dark .dark\:bg-slate-700){--tw-bg-opacity:1!important;background-color:rgb(52 71 103/var(--tw-bg-opacity))!important}:is(.dark .dark\:bg-slate-700\/50){background-color:#34476780!important}:is(.dark .dark\:bg-slate-800){--tw-bg-opacity:1!important;background-color:rgb(58 65 111/var(--tw-bg-opacity))!important}:is(.dark .dark\:bg-slate-850){--tw-bg-opacity:1!important;background-color:rgb(17 28 68/var(--tw-bg-opacity))!important}:is(.dark .dark\:bg-slate-900){--tw-bg-opacity:1!important;background-color:rgb(5 17 57/var(--tw-bg-opacity))!important}:is(.dark .dark\:bg-slate-900\/30){background-color:#0511394d!important}:is(.dark .dark\:bg-gradient-to-r){background-image:linear-gradient(to right,var(--tw-gradient-stops))!important}:is(.dark .dark\:from-transparent){--tw-gradient-from:#0000 var(--tw-gradient-from-position)!important;--tw-gradient-to:#0000 var(--tw-gradient-to-position)!important;--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)!important}:is(.dark .dark\:via-white){--tw-gradient-to:#fff0 var(--tw-gradient-to-position)!important;--tw-gradient-stops:var(--tw-gradient-from),#fff var(--tw-gradient-via-position),var(--tw-gradient-to)!important}:is(.dark .dark\:to-transparent){--tw-gradient-to:#0000 var(--tw-gradient-to-position)!important}:is(.dark .dark\:fill-blue-500){fill:#5e72e4!important}:is(.dark .dark\:fill-gray-300){fill:#d2d6da!important}:is(.dark .dark\:fill-gray-500){fill:#adb5bd!important}:is(.dark .dark\:fill-gray-600){fill:#6c757d!important}:is(.dark .dark\:stroke-amber-500){stroke:#f59e0b!important}:is(.dark .dark\:stroke-gray-300){stroke:#d2d6da!important}:is(.dark .dark\:stroke-gray-400){stroke:#ced4da!important}:is(.dark .dark\:stroke-gray-600){stroke:#6c757d!important}:is(.dark .dark\:stroke-red-500){stroke:#f53939!important}:is(.dark .dark\:stroke-white\/90){stroke:#ffffffe6!important}:is(.dark .dark\:text-gray-100){--tw-text-opacity:1!important;color:rgb(235 239 244/var(--tw-text-opacity))!important}:is(.dark .dark\:text-gray-200){--tw-text-opacity:1!important;color:rgb(233 236 239/var(--tw-text-opacity))!important}:is(.dark .dark\:text-gray-300){--tw-text-opacity:1!important;color:rgb(210 214 218/var(--tw-text-opacity))!important}:is(.dark .dark\:text-gray-400){--tw-text-opacity:1!important;color:rgb(206 212 218/var(--tw-text-opacity))!important}:is(.dark .dark\:text-gray-50){--tw-text-opacity:1!important;color:rgb(248 249 250/var(--tw-text-opacity))!important}:is(.dark .dark\:text-gray-500){--tw-text-opacity:1!important;color:rgb(173 181 189/var(--tw-text-opacity))!important}:is(.dark .dark\:text-white){--tw-text-opacity:1!important;color:rgb(255 255 255/var(--tw-text-opacity))!important}:is(.dark .dark\:text-white\/80){color:#fffc!important}:is(.dark .dark\:text-white\/90){color:#ffffffe6!important}:is(.dark .dark\:opacity-100){opacity:1!important}:is(.dark .dark\:opacity-60){opacity:.6!important}:is(.dark .dark\:opacity-80){opacity:.8!important}:is(.dark .dark\:opacity-90){opacity:.9!important}:is(.dark .dark\:shadow-dark-xl){--tw-shadow:0 2px 2px 0 #00000024,0 3px 1px -2px #0003,0 1px 5px 0 #0000001f!important;--tw-shadow-colored:0 2px 2px 0 var(--tw-shadow-color),0 3px 1px -2px var(--tw-shadow-color),0 1px 5px 0 var(--tw-shadow-color)!important}:is(.dark .dark\:shadow-dark-xl),:is(.dark .dark\:shadow-none){box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)!important}:is(.dark .dark\:shadow-none){--tw-shadow:0 0 #0000!important;--tw-shadow-colored:0 0 #0000!important}:is(.dark .dark\:brightness-110){--tw-brightness:brightness(1.1)!important}:is(.dark .dark\:brightness-110),:is(.dark .dark\:brightness-125){filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)!important}:is(.dark .dark\:brightness-125){--tw-brightness:brightness(1.25)!important}:is(.dark .dark\:brightness-90){--tw-brightness:brightness(.9)!important}:is(.dark .dark\:brightness-90),:is(.dark .dark\:brightness-95){filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)!important}:is(.dark .dark\:brightness-95){--tw-brightness:brightness(.95)!important}:is(.dark .dark\:brightness-\[0\.885\]){--tw-brightness:brightness(0.885)!important;filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)!important}:is(.dark .dark\:placeholder\:text-gray-600)::-moz-placeholder{--tw-text-opacity:1!important;color:rgb(108 117 125/var(--tw-text-opacity))!important}:is(.dark .dark\:placeholder\:text-gray-600)::placeholder{--tw-text-opacity:1!important;color:rgb(108 117 125/var(--tw-text-opacity))!important}:is(.dark .dark\:after\:text-gray-300):after{content:var(--tw-content)!important;--tw-text-opacity:1!important;color:rgb(210 214 218/var(--tw-text-opacity))!important}:is(.dark .dark\:after\:text-gray-500):after{content:var(--tw-content)!important;--tw-text-opacity:1!important;color:rgb(173 181 189/var(--tw-text-opacity))!important}:is(.dark .dark\:checked\:border-primary:checked){--tw-border-opacity:1!important;border-color:rgb(11 85 119/var(--tw-border-opacity))!important}:is(.dark .dark\:checked\:bg-primary:checked){--tw-bg-opacity:1!important;background-color:rgb(11 85 119/var(--tw-bg-opacity))!important}:is(.dark .dark\:hover\:bg-primary\/20:hover){background-color:#0b557733!important}:is(.dark .dark\:hover\:bg-primary\/60:hover){background-color:#0b557799!important}:is(.dark .dark\:hover\:bg-slate-700\/50:hover){background-color:#34476780!important}:is(.dark .dark\:hover\:bg-slate-800:hover){--tw-bg-opacity:1!important;background-color:rgb(58 65 111/var(--tw-bg-opacity))!important}:is(.dark .dark\:hover\:brightness-100:hover){--tw-brightness:brightness(1)!important}:is(.dark .dark\:hover\:brightness-100:hover),:is(.dark .dark\:hover\:brightness-105:hover){filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)!important}:is(.dark .dark\:hover\:brightness-105:hover){--tw-brightness:brightness(1.05)!important}:is(.dark .dark\:hover\:brightness-110:hover){--tw-brightness:brightness(1.1)!important}:is(.dark .dark\:hover\:brightness-110:hover),:is(.dark .dark\:hover\:brightness-90:hover){filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)!important}:is(.dark .dark\:hover\:brightness-90:hover){--tw-brightness:brightness(.9)!important}:is(.dark .dark\:disabled\:border-gray-700\/0:disabled){border-color:#49505700!important}:is(.dark .dark\:disabled\:border-gray-800:disabled){--tw-border-opacity:1!important;border-color:rgb(37 47 64/var(--tw-border-opacity))!important}:is(.dark .dark\:disabled\:bg-gray-700:disabled){--tw-bg-opacity:1!important;background-color:rgb(73 80 87/var(--tw-bg-opacity))!important}:is(.dark .dark\:disabled\:bg-gray-800:disabled){--tw-bg-opacity:1!important;background-color:rgb(37 47 64/var(--tw-bg-opacity))!important}:is(.dark .dark\:disabled\:text-gray-300:disabled){--tw-text-opacity:1!important;color:rgb(210 214 218/var(--tw-text-opacity))!important}:is(.dark .dark\:disabled\:text-gray-400:disabled){--tw-text-opacity:1!important;color:rgb(206 212 218/var(--tw-text-opacity))!important}:is(.dark .dark\:disabled\:hover\:translate-y-0:hover:disabled){--tw-translate-y:0px!important;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}:is(.dark .dark\:disabled\:hover\:border-gray-700\/0:hover:disabled){border-color:#49505700!important}:is(.dark .dark\:disabled\:hover\:bg-gray-700:hover:disabled){--tw-bg-opacity:1!important;background-color:rgb(73 80 87/var(--tw-bg-opacity))!important}@media (min-width:576px){.sm\:right-24{right:6rem!important}.sm\:right-40{right:10rem!important}.sm\:right-6{right:1.5rem!important}.sm\:top-2{top:.5rem!important}.sm\:top-8{top:2rem!important}.sm\:top-\[4\.5rem\]{top:4.5rem!important}.sm\:col-span-4{grid-column:span 4/span 4!important}.sm\:col-span-6{grid-column:span 6/span 6!important}.sm\:col-start-5{grid-column-start:5!important}.sm\:mx-2{margin-left:.5rem!important;margin-right:.5rem!important}.sm\:mx-6{margin-left:1.5rem!important;margin-right:1.5rem!important}.sm\:my-0{margin-top:0!important;margin-bottom:0!important}.sm\:mb-2{margin-bottom:.5rem!important}.sm\:ml-1{margin-left:.25rem!important}.sm\:ml-4{margin-left:1rem!important}.sm\:mr-16{margin-right:4rem!important}.sm\:block{display:block!important}.sm\:inline{display:inline!important}.sm\:flex{display:flex!important}.sm\:h-10{height:2.5rem!important}.sm\:h-14{height:3.5rem!important}.sm\:h-7{height:1.75rem!important}.sm\:max-h-125{max-height:31.25rem!important}.sm\:w-36{width:9rem!important}.sm\:w-50{width:12.5rem!important}.sm\:w-7{width:1.75rem!important}.sm\:min-w-\[250px\]{min-width:250px!important}.sm\:min-w-\[500px\]{min-width:500px!important}.sm\:max-w-\[350px\]{max-width:350px!important}.sm\:translate-x-0{--tw-translate-x:0px!important}.sm\:scale-100,.sm\:translate-x-0{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}.sm\:scale-100{--tw-scale-x:1!important;--tw-scale-y:1!important}.sm\:flex-row{flex-direction:row!important}.sm\:items-center{align-items:center!important}.sm\:justify-end{justify-content:flex-end!important}.sm\:justify-items-start{justify-items:start!important}.sm\:gap-4{gap:1rem!important}.sm\:p-3{padding:.75rem!important}.sm\:px-12{padding-left:3rem!important;padding-right:3rem!important}.sm\:px-4{padding-left:1rem!important;padding-right:1rem!important}.sm\:px-6{padding-left:1.5rem!important;padding-right:1.5rem!important}.sm\:pt-6{padding-top:1.5rem!important}.sm\:text-left{text-align:left!important}.sm\:text-2xl{font-size:1.5rem!important;line-height:2rem!important}.sm\:text-4xl{font-size:2.25rem!important;line-height:2.5rem!important}.sm\:text-7xl{font-size:4.5rem!important;line-height:1!important}.sm\:text-base{font-size:1rem!important}.sm\:text-base,.sm\:text-sm{line-height:1.5rem!important}.sm\:text-sm{font-size:.875rem!important}}@media (min-width:768px){.md\:absolute{position:absolute!important}.md\:right-8{right:2rem!important}.md\:right-\[3\.75rem\]{right:3.75rem!important}.md\:top-\[40\%\]{top:40%!important}.md\:top-\[53\%\]{top:53%!important}.md\:col-span-4{grid-column:span 4/span 4!important}.md\:col-span-6{grid-column:span 6/span 6!important}.md\:col-span-7{grid-column:span 7/span 7!important}.md\:col-span-8{grid-column:span 8/span 8!important}.md\:mx-3{margin-left:.75rem!important;margin-right:.75rem!important}.md\:mx-4{margin-left:1rem!important;margin-right:1rem!important}.md\:my-3{margin-top:.75rem!important;margin-bottom:.75rem!important}.md\:mb-0{margin-bottom:0!important}.md\:mb-3{margin-bottom:.75rem!important}.md\:mr-3{margin-right:.75rem!important}.md\:mt-0{margin-top:0!important}.md\:mt-6{margin-top:1.5rem!important}.md\:hidden{display:none!important}.md\:h-16{height:4rem!important}.md\:max-h-\[90vh\]{max-height:90vh!important}.md\:min-h-50-screen{min-height:50vh!important}.md\:w-1\/2{width:50%!important}.md\:w-60{width:15rem!important}.md\:max-w-\[700px\]{max-width:700px!important}.md\:-translate-y-20{--tw-translate-y:-5rem!important;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}.md\:flex-row{flex-direction:row!important}.md\:items-end{align-items:flex-end!important}.md\:gap-x-4{-moz-column-gap:1rem!important;column-gap:1rem!important}.md\:gap-x-6{-moz-column-gap:1.5rem!important;column-gap:1.5rem!important}.md\:px-1{padding-left:.25rem!important;padding-right:.25rem!important}.md\:px-3{padding-left:.75rem!important;padding-right:.75rem!important}.md\:px-4{padding-left:1rem!important;padding-right:1rem!important}.md\:px-6{padding-left:1.5rem!important;padding-right:1.5rem!important}.md\:py-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.md\:text-base{font-size:1rem!important;line-height:1.5rem!important}}@media (min-width:992px){.lg\:relative{position:relative!important}.lg\:bottom-2{bottom:.5rem!important}.lg\:left-48{left:12rem!important}.lg\:top-24{top:6rem!important}.lg\:order-1{order:1!important}.lg\:order-2{order:2!important}.lg\:col-span-1{grid-column:span 1/span 1!important}.lg\:col-span-4{grid-column:span 4/span 4!important}.lg\:col-span-5{grid-column:span 5/span 5!important}.lg\:col-span-6{grid-column:span 6/span 6!important}.lg\:col-span-8{grid-column:span 8/span 8!important}.lg\:mx-0{margin-left:0!important;margin-right:0!important}.lg\:mx-4{margin-left:1rem!important;margin-right:1rem!important}.lg\:mx-8{margin-left:2rem!important;margin-right:2rem!important}.lg\:my-3{margin-top:.75rem!important;margin-bottom:.75rem!important}.lg\:mt-0{margin-top:0!important}.lg\:mt-4{margin-top:1rem!important}.lg\:mt-8{margin-top:2rem!important}.lg\:block{display:block!important}.lg\:inline{display:inline!important}.lg\:flex{display:flex!important}.lg\:hidden{display:none!important}.lg\:h-24{height:6rem!important}.lg\:h-36{height:9rem!important}.lg\:h-9{height:2.25rem!important}.lg\:max-h-\[550px\]{max-height:550px!important}.lg\:w-36{width:9rem!important}.lg\:w-80{width:20rem!important}.lg\:w-9{width:2.25rem!important}.lg\:w-\[400px\]{width:400px!important}.lg\:max-w-\[700px\]{max-width:700px!important}.lg\:translate-x-0{--tw-translate-x:0px!important}.lg\:translate-x-0,.lg\:translate-y-0{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}.lg\:translate-y-0{--tw-translate-y:0px!important}.lg\:flex-row{flex-direction:row!important}.lg\:flex-nowrap{flex-wrap:nowrap!important}.lg\:justify-start{justify-content:flex-start!important}.lg\:justify-end{justify-content:flex-end!important}.lg\:justify-between{justify-content:space-between!important}.lg\:gap-6{gap:1.5rem!important}.lg\:bg-gray-50{--tw-bg-opacity:1!important;background-color:rgb(248 249 250/var(--tw-bg-opacity))!important}.lg\:px-6{padding-left:1.5rem!important;padding-right:1.5rem!important}.lg\:pb-1{padding-bottom:.25rem!important}.lg\:pb-28{padding-bottom:7rem!important}.lg\:pt-6{padding-top:1.5rem!important}.lg\:text-left{text-align:left!important}.lg\:text-base{font-size:1rem!important}.lg\:text-base,.lg\:text-sm{line-height:1.5rem!important}.lg\:text-sm{font-size:.875rem!important}}@media (min-width:1200px){.xl\:left-0{left:0!important}.xl\:right-24{right:6rem!important}.xl\:right-6{right:1.5rem!important}.xl\:ml-6{margin-left:1.5rem!important}.xl\:ml-68{margin-left:17rem!important}.xl\:hidden{display:none!important}.xl\:h-44{height:11rem!important}.xl\:max-h-\[550px\]{max-height:550px!important}.xl\:w-1\/3{width:33.333333%!important}.xl\:w-44{width:11rem!important}.xl\:w-\[500px\]{width:500px!important}.xl\:max-w-\[1200px\]{max-width:1200px!important}.xl\:translate-x-0{--tw-translate-x:0px!important;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}.xl\:p-1{padding:.25rem!important}.xl\:p-1\.5{padding:.375rem!important}.xl\:pl-75{padding-left:18.75rem!important}.xl\:text-base{font-size:1rem!important;line-height:1.5rem!important}}@media (min-width:1320px){.\32xl\:col-span-4{grid-column:span 4/span 4!important}.\32xl\:col-span-6{grid-column:span 6/span 6!important}.\32xl\:my-3{margin-top:.75rem!important;margin-bottom:.75rem!important}.\32xl\:max-w-\[1500px\]{max-width:1500px!important}.\32xl\:text-3xl{font-size:1.875rem!important;line-height:2.25rem!important}.\32xl\:text-5xl{font-size:3rem!important;line-height:1!important}.\32xl\:text-8xl{font-size:5rem!important;line-height:1!important}.\32xl\:text-lg{font-size:1.125rem!important;line-height:1.75rem!important}}@media (min-width:1920px){.\33xl\:col-span-3{grid-column:span 3/span 3!important}.\33xl\:col-span-4{grid-column:span 4/span 4!important}.\33xl\:col-span-5{grid-column:span 5/span 5!important}.\33xl\:inline{display:inline!important}.\33xl\:max-w-none{max-width:none!important}.\33xl\:translate-x-60{--tw-translate-x:15rem!important;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}.\33xl\:text-6xl{font-size:3.75rem!important;line-height:1!important}.\33xl\:text-9xl{font-size:6rem!important;line-height:1!important}.\33xl\:text-xl{font-size:1.25rem!important;line-height:1.75rem!important}}@media (min-width:340px){.xs\:flex-row{flex-direction:row!important}.xs\:items-center{align-items:center!important}.xs\:justify-start{justify-content:flex-start!important}.xs\:pl-2{padding-left:.5rem!important}.xs\:text-base{font-size:1rem!important}.xs\:text-base,.xs\:text-sm{line-height:1.5rem!important}.xs\:text-sm{font-size:.875rem!important}}.\[\&\>\*\]\:bg-primary>*{--tw-bg-opacity:1!important;background-color:rgb(11 85 119/var(--tw-bg-opacity))!important} \ No newline at end of file diff --git a/src/ui/styles.css b/src/ui/styles.css index 632b65acb..7e7b79f14 100644 --- a/src/ui/styles.css +++ b/src/ui/styles.css @@ -92,7 +92,15 @@ } .popover-settings-container { - @apply z-[1000] h-fit max-w-[250px] transition-all duration-500 dark:brightness-90 transition rounded-md p-3 -translate-y-7 fixed bg-blue-500; + @apply z-[1000] h-fit max-w-[250px] transition-all duration-500 dark:brightness-90 transition rounded-md p-3 -translate-y-7 fixed; +} + +.info.popover-settings-container { + @apply bg-blue-500; +} + +.multisite.popover-settings-container { + @apply bg-orange-500; } .popover-tab { diff --git a/src/ui/templates/setting_header.html b/src/ui/templates/setting_header.html index 4377edc50..9695c3a79 100644 --- a/src/ui/templates/setting_header.html +++ b/src/ui/templates/setting_header.html @@ -1,7 +1,7 @@ {% if setting_input %} {% set inp_name = setting_input['name'] %} {% set inp_name_mult = inp_name + "_SCHEMA" if setting_input["is_multiple"] else inp_name %} - {% set inp_name_multisite = inp_name + "-multisite_SCHEMA" if setting_input["is_multiple"] else inp_name %} + {% set inp_name_multisite = inp_name + "-multisite_SCHEMA" if setting_input["is_multiple"] else inp_name + "-multisite" %} {% set inp_label = setting_input['label'] %} {% set inp_help = setting_input['help'] %} {% set inp_context = setting_input['context'] %} @@ -18,7 +18,7 @@ @@ -38,7 +38,7 @@