From d2dc628f9bceff57e7084ae676c2a635e0833ed7 Mon Sep 17 00:00:00 2001 From: Paolo Salvatori Date: Thu, 6 Aug 2026 09:12:27 +0200 Subject: [PATCH 1/6] Add the Azure Files Vacation Planner sample Adds samples/web-app-file-storage, a Vacation Planner variant that stores each activity as a text file on an Azure Files share mounted by the Azure Files CSI driver. The app carries no Azure SDK: it calls open(), os.listdir() and os.remove() on a directory, and the driver turns that directory into an Azure file share. One set of scripts covers four combinations, chosen with two menus in 01-deploy-resources.sh and persisted to .deploy-options.env so 05-deploy-app.sh never asks twice (exporting PROVISIONING_MODE and FILE_SHARE_PROTOCOL skips the menus for an unattended run): * static SMB: a StorageV2 account, a PersistentVolume with uid/gid mount options, and a Secret with the account key the driver mounts with * static NFS: a premium FileStorage account restricted to the node subnets, with protocol: nfs and no Secret * dynamic SMB: a claim on the built-in azurefile-csi storage class * dynamic NFS: a claim on a storage class of its own, since none of the built-in ones sets protocol: nfs An init container prepares and seeds the share for all four: it chowns the mount point on NFS, where the share carries real POSIX ownership and fsGroup cannot help (the file.csi.azure.com CSIDriver declares fsGroupPolicy: ReadWriteOnceWithFSType and the volume is ReadWriteMany), and copies the sample activities that are missing. Both cluster provisioning scripts now check that the Azure Files CSI driver and the CSI snapshot controller are enabled, enable the Microsoft.Storage service endpoint on the node subnets that an NFS share requires, and print the cluster's storage profile and storage classes. Also renames web-app-storage-account to web-app-blob-storage, so the two blob-backed samples are told apart by what they store rather than by an ambiguous folder name, fixes the sample list in the root README (the MySQL sample was missing and PostgreSQL read "Azure Database DB for"), and removes a duplicate architecture.png committed under a malformed path in the PostgreSQL sample. Co-Authored-By: Claude Opus 5 --- .gitignore | 2 + README.md | 7 +- .../README.md | 0 .../images/architecture.png | Bin .../scripts/00-variables.sh | 0 .../scripts/01-deploy-resources.sh | 0 .../scripts/02-build-docker-image.sh | 0 .../scripts/03-run-docker-container.sh | 0 .../scripts/04-push-docker-image.sh | 0 .../scripts/05-deploy-app.sh | 0 .../scripts/Dockerfile | 0 .../scripts/configmap.yml | 0 .../scripts/deployment.yml | 0 .../scripts/namespace.yml | 0 .../scripts/secret.yml | 0 .../scripts/service.yml | 0 .../src/app.py | 0 .../src/gunicorn.conf.py | 0 .../src/requirements.txt | 0 .../static/bootstrap/css/bootstrap-grid.css | 0 .../bootstrap/css/bootstrap-grid.css.map | 0 .../bootstrap/css/bootstrap-grid.min.css | 0 .../bootstrap/css/bootstrap-grid.min.css.map | 0 .../bootstrap/css/bootstrap-grid.rtl.css | 0 .../bootstrap/css/bootstrap-grid.rtl.css.map | 0 .../bootstrap/css/bootstrap-grid.rtl.min.css | 0 .../css/bootstrap-grid.rtl.min.css.map | 0 .../static/bootstrap/css/bootstrap-reboot.css | 0 .../bootstrap/css/bootstrap-reboot.css.map | 0 .../bootstrap/css/bootstrap-reboot.min.css | 0 .../css/bootstrap-reboot.min.css.map | 0 .../bootstrap/css/bootstrap-reboot.rtl.css | 0 .../css/bootstrap-reboot.rtl.css.map | 0 .../css/bootstrap-reboot.rtl.min.css | 0 .../css/bootstrap-reboot.rtl.min.css.map | 0 .../bootstrap/css/bootstrap-utilities.css | 0 .../bootstrap/css/bootstrap-utilities.css.map | 0 .../bootstrap/css/bootstrap-utilities.min.css | 0 .../css/bootstrap-utilities.min.css.map | 0 .../bootstrap/css/bootstrap-utilities.rtl.css | 0 .../css/bootstrap-utilities.rtl.css.map | 0 .../css/bootstrap-utilities.rtl.min.css | 0 .../css/bootstrap-utilities.rtl.min.css.map | 0 .../src/static/bootstrap/css/bootstrap.css | 0 .../static/bootstrap/css/bootstrap.css.map | 0 .../static/bootstrap/css/bootstrap.min.css | 0 .../bootstrap/css/bootstrap.min.css.map | 0 .../static/bootstrap/css/bootstrap.rtl.css | 0 .../bootstrap/css/bootstrap.rtl.css.map | 0 .../bootstrap/css/bootstrap.rtl.min.css | 0 .../bootstrap/css/bootstrap.rtl.min.css.map | 0 .../static/bootstrap/js/bootstrap.bundle.js | 0 .../bootstrap/js/bootstrap.bundle.js.map | 0 .../bootstrap/js/bootstrap.bundle.min.js | 0 .../bootstrap/js/bootstrap.bundle.min.js.map | 0 .../src/static/bootstrap/js/bootstrap.esm.js | 0 .../static/bootstrap/js/bootstrap.esm.js.map | 0 .../static/bootstrap/js/bootstrap.esm.min.js | 0 .../bootstrap/js/bootstrap.esm.min.js.map | 0 .../src/static/bootstrap/js/bootstrap.js | 0 .../src/static/bootstrap/js/bootstrap.js.map | 0 .../src/static/bootstrap/js/bootstrap.min.js | 0 .../static/bootstrap/js/bootstrap.min.js.map | 0 .../src/static/favicon.ico | Bin .../src/static/style.css | 0 .../src/templates/index.html | 0 samples/web-app-file-storage/README.md | 139 + .../images}/architecture.png | Bin 38251 -> 36997 bytes .../scripts/00-variables.sh | 67 + .../scripts/01-deploy-resources.sh | 308 + .../scripts/02-build-docker-image.sh | 18 + .../scripts/03-run-docker-container.sh | 41 + .../scripts/04-push-docker-image.sh | 40 + .../scripts/05-deploy-app.sh | 209 + .../web-app-file-storage/scripts/Dockerfile | 56 + .../scripts/configmap.yml | 11 + .../scripts/deployment.yml | 159 + .../scripts/namespace.yml | 4 + .../scripts/persistentvolume-nfs.yml | 42 + .../scripts/persistentvolume-smb.yml | 45 + .../scripts/persistentvolumeclaim.yml | 24 + .../web-app-file-storage/scripts/secret.yml | 10 + .../scripts/seed-configmap.yml | 24 + .../web-app-file-storage/scripts/service.yml | 16 + .../scripts/storage-secret.yml | 15 + .../scripts/storageclass-nfs.yml | 26 + samples/web-app-file-storage/src/app.py | 221 + .../web-app-file-storage/src/gunicorn.conf.py | 18 + .../web-app-file-storage/src/requirements.txt | 3 + .../static/bootstrap/css/bootstrap-grid.css | 5051 +++++++ .../bootstrap/css/bootstrap-grid.css.map | 1 + .../bootstrap/css/bootstrap-grid.min.css | 7 + .../bootstrap/css/bootstrap-grid.min.css.map | 1 + .../bootstrap/css/bootstrap-grid.rtl.css | 5050 +++++++ .../bootstrap/css/bootstrap-grid.rtl.css.map | 1 + .../bootstrap/css/bootstrap-grid.rtl.min.css | 7 + .../css/bootstrap-grid.rtl.min.css.map | 1 + .../static/bootstrap/css/bootstrap-reboot.css | 485 + .../bootstrap/css/bootstrap-reboot.css.map | 1 + .../bootstrap/css/bootstrap-reboot.min.css | 8 + .../css/bootstrap-reboot.min.css.map | 1 + .../bootstrap/css/bootstrap-reboot.rtl.css | 482 + .../css/bootstrap-reboot.rtl.css.map | 1 + .../css/bootstrap-reboot.rtl.min.css | 8 + .../css/bootstrap-reboot.rtl.min.css.map | 1 + .../bootstrap/css/bootstrap-utilities.css | 4866 +++++++ .../bootstrap/css/bootstrap-utilities.css.map | 1 + .../bootstrap/css/bootstrap-utilities.min.css | 7 + .../css/bootstrap-utilities.min.css.map | 1 + .../bootstrap/css/bootstrap-utilities.rtl.css | 4857 +++++++ .../css/bootstrap-utilities.rtl.css.map | 1 + .../css/bootstrap-utilities.rtl.min.css | 7 + .../css/bootstrap-utilities.rtl.min.css.map | 1 + .../src/static/bootstrap/css/bootstrap.css | 11266 ++++++++++++++++ .../static/bootstrap/css/bootstrap.css.map | 1 + .../static/bootstrap/css/bootstrap.min.css | 7 + .../bootstrap/css/bootstrap.min.css.map | 1 + .../static/bootstrap/css/bootstrap.rtl.css | 11242 +++++++++++++++ .../bootstrap/css/bootstrap.rtl.css.map | 1 + .../bootstrap/css/bootstrap.rtl.min.css | 7 + .../bootstrap/css/bootstrap.rtl.min.css.map | 1 + .../static/bootstrap/js/bootstrap.bundle.js | 6812 ++++++++++ .../bootstrap/js/bootstrap.bundle.js.map | 1 + .../bootstrap/js/bootstrap.bundle.min.js | 7 + .../bootstrap/js/bootstrap.bundle.min.js.map | 1 + .../src/static/bootstrap/js/bootstrap.esm.js | 4999 +++++++ .../static/bootstrap/js/bootstrap.esm.js.map | 1 + .../static/bootstrap/js/bootstrap.esm.min.js | 7 + .../bootstrap/js/bootstrap.esm.min.js.map | 1 + .../src/static/bootstrap/js/bootstrap.js | 5046 +++++++ .../src/static/bootstrap/js/bootstrap.js.map | 1 + .../src/static/bootstrap/js/bootstrap.min.js | 7 + .../static/bootstrap/js/bootstrap.min.js.map | 1 + .../src/static/favicon.ico | Bin 0 -> 36791 bytes .../web-app-file-storage/src/static/style.css | 341 + .../src/templates/index.html | 260 + samples/web-app-managed-identity/README.md | 2 +- .../01-system-assigned-managed-identity.sh | 94 + scripts/01-user-assigned-managed-identity.sh | 94 + 139 files changed, 62550 insertions(+), 3 deletions(-) rename samples/{web-app-storage-account => web-app-blob-storage}/README.md (100%) rename samples/{web-app-storage-account => web-app-blob-storage}/images/architecture.png (100%) rename samples/{web-app-storage-account => web-app-blob-storage}/scripts/00-variables.sh (100%) rename samples/{web-app-storage-account => web-app-blob-storage}/scripts/01-deploy-resources.sh (100%) rename samples/{web-app-storage-account => web-app-blob-storage}/scripts/02-build-docker-image.sh (100%) rename samples/{web-app-storage-account => web-app-blob-storage}/scripts/03-run-docker-container.sh (100%) rename samples/{web-app-storage-account => web-app-blob-storage}/scripts/04-push-docker-image.sh (100%) rename samples/{web-app-storage-account => web-app-blob-storage}/scripts/05-deploy-app.sh (100%) rename samples/{web-app-storage-account => web-app-blob-storage}/scripts/Dockerfile (100%) rename samples/{web-app-storage-account => web-app-blob-storage}/scripts/configmap.yml (100%) rename samples/{web-app-storage-account => web-app-blob-storage}/scripts/deployment.yml (100%) rename samples/{web-app-storage-account => web-app-blob-storage}/scripts/namespace.yml (100%) rename samples/{web-app-storage-account => web-app-blob-storage}/scripts/secret.yml (100%) rename samples/{web-app-storage-account => web-app-blob-storage}/scripts/service.yml (100%) rename samples/{web-app-storage-account => web-app-blob-storage}/src/app.py (100%) rename samples/{web-app-storage-account => web-app-blob-storage}/src/gunicorn.conf.py (100%) rename samples/{web-app-storage-account => web-app-blob-storage}/src/requirements.txt (100%) rename samples/{web-app-storage-account => web-app-blob-storage}/src/static/bootstrap/css/bootstrap-grid.css (100%) rename samples/{web-app-storage-account => web-app-blob-storage}/src/static/bootstrap/css/bootstrap-grid.css.map (100%) rename samples/{web-app-storage-account => web-app-blob-storage}/src/static/bootstrap/css/bootstrap-grid.min.css (100%) rename samples/{web-app-storage-account => web-app-blob-storage}/src/static/bootstrap/css/bootstrap-grid.min.css.map (100%) rename samples/{web-app-storage-account => web-app-blob-storage}/src/static/bootstrap/css/bootstrap-grid.rtl.css (100%) rename samples/{web-app-storage-account => web-app-blob-storage}/src/static/bootstrap/css/bootstrap-grid.rtl.css.map (100%) rename samples/{web-app-storage-account => web-app-blob-storage}/src/static/bootstrap/css/bootstrap-grid.rtl.min.css (100%) rename samples/{web-app-storage-account => web-app-blob-storage}/src/static/bootstrap/css/bootstrap-grid.rtl.min.css.map (100%) rename samples/{web-app-storage-account => web-app-blob-storage}/src/static/bootstrap/css/bootstrap-reboot.css (100%) rename samples/{web-app-storage-account => web-app-blob-storage}/src/static/bootstrap/css/bootstrap-reboot.css.map (100%) rename samples/{web-app-storage-account => web-app-blob-storage}/src/static/bootstrap/css/bootstrap-reboot.min.css (100%) rename samples/{web-app-storage-account => web-app-blob-storage}/src/static/bootstrap/css/bootstrap-reboot.min.css.map (100%) rename samples/{web-app-storage-account => web-app-blob-storage}/src/static/bootstrap/css/bootstrap-reboot.rtl.css (100%) rename samples/{web-app-storage-account => web-app-blob-storage}/src/static/bootstrap/css/bootstrap-reboot.rtl.css.map (100%) rename samples/{web-app-storage-account => web-app-blob-storage}/src/static/bootstrap/css/bootstrap-reboot.rtl.min.css (100%) rename samples/{web-app-storage-account => web-app-blob-storage}/src/static/bootstrap/css/bootstrap-reboot.rtl.min.css.map (100%) rename samples/{web-app-storage-account => web-app-blob-storage}/src/static/bootstrap/css/bootstrap-utilities.css (100%) rename samples/{web-app-storage-account => web-app-blob-storage}/src/static/bootstrap/css/bootstrap-utilities.css.map (100%) rename samples/{web-app-storage-account => web-app-blob-storage}/src/static/bootstrap/css/bootstrap-utilities.min.css (100%) rename samples/{web-app-storage-account => web-app-blob-storage}/src/static/bootstrap/css/bootstrap-utilities.min.css.map (100%) rename samples/{web-app-storage-account => web-app-blob-storage}/src/static/bootstrap/css/bootstrap-utilities.rtl.css (100%) rename samples/{web-app-storage-account => web-app-blob-storage}/src/static/bootstrap/css/bootstrap-utilities.rtl.css.map (100%) rename samples/{web-app-storage-account => web-app-blob-storage}/src/static/bootstrap/css/bootstrap-utilities.rtl.min.css (100%) rename samples/{web-app-storage-account => web-app-blob-storage}/src/static/bootstrap/css/bootstrap-utilities.rtl.min.css.map (100%) rename samples/{web-app-storage-account => web-app-blob-storage}/src/static/bootstrap/css/bootstrap.css (100%) rename samples/{web-app-storage-account => web-app-blob-storage}/src/static/bootstrap/css/bootstrap.css.map (100%) rename samples/{web-app-storage-account => web-app-blob-storage}/src/static/bootstrap/css/bootstrap.min.css (100%) rename samples/{web-app-storage-account => web-app-blob-storage}/src/static/bootstrap/css/bootstrap.min.css.map (100%) rename samples/{web-app-storage-account => web-app-blob-storage}/src/static/bootstrap/css/bootstrap.rtl.css (100%) rename samples/{web-app-storage-account => web-app-blob-storage}/src/static/bootstrap/css/bootstrap.rtl.css.map (100%) rename samples/{web-app-storage-account => web-app-blob-storage}/src/static/bootstrap/css/bootstrap.rtl.min.css (100%) rename samples/{web-app-storage-account => web-app-blob-storage}/src/static/bootstrap/css/bootstrap.rtl.min.css.map (100%) rename samples/{web-app-storage-account => web-app-blob-storage}/src/static/bootstrap/js/bootstrap.bundle.js (100%) rename samples/{web-app-storage-account => web-app-blob-storage}/src/static/bootstrap/js/bootstrap.bundle.js.map (100%) rename samples/{web-app-storage-account => web-app-blob-storage}/src/static/bootstrap/js/bootstrap.bundle.min.js (100%) rename samples/{web-app-storage-account => web-app-blob-storage}/src/static/bootstrap/js/bootstrap.bundle.min.js.map (100%) rename samples/{web-app-storage-account => web-app-blob-storage}/src/static/bootstrap/js/bootstrap.esm.js (100%) rename samples/{web-app-storage-account => web-app-blob-storage}/src/static/bootstrap/js/bootstrap.esm.js.map (100%) rename samples/{web-app-storage-account => web-app-blob-storage}/src/static/bootstrap/js/bootstrap.esm.min.js (100%) rename samples/{web-app-storage-account => web-app-blob-storage}/src/static/bootstrap/js/bootstrap.esm.min.js.map (100%) rename samples/{web-app-storage-account => web-app-blob-storage}/src/static/bootstrap/js/bootstrap.js (100%) rename samples/{web-app-storage-account => web-app-blob-storage}/src/static/bootstrap/js/bootstrap.js.map (100%) rename samples/{web-app-storage-account => web-app-blob-storage}/src/static/bootstrap/js/bootstrap.min.js (100%) rename samples/{web-app-storage-account => web-app-blob-storage}/src/static/bootstrap/js/bootstrap.min.js.map (100%) rename samples/{web-app-storage-account => web-app-blob-storage}/src/static/favicon.ico (100%) rename samples/{web-app-storage-account => web-app-blob-storage}/src/static/style.css (100%) rename samples/{web-app-storage-account => web-app-blob-storage}/src/templates/index.html (100%) create mode 100644 samples/web-app-file-storage/README.md rename samples/{web-app-postgresql-flexible-server/images/images/architecture.png) => web-app-file-storage/images}/architecture.png (59%) create mode 100755 samples/web-app-file-storage/scripts/00-variables.sh create mode 100755 samples/web-app-file-storage/scripts/01-deploy-resources.sh create mode 100755 samples/web-app-file-storage/scripts/02-build-docker-image.sh create mode 100755 samples/web-app-file-storage/scripts/03-run-docker-container.sh create mode 100755 samples/web-app-file-storage/scripts/04-push-docker-image.sh create mode 100755 samples/web-app-file-storage/scripts/05-deploy-app.sh create mode 100644 samples/web-app-file-storage/scripts/Dockerfile create mode 100644 samples/web-app-file-storage/scripts/configmap.yml create mode 100644 samples/web-app-file-storage/scripts/deployment.yml create mode 100644 samples/web-app-file-storage/scripts/namespace.yml create mode 100644 samples/web-app-file-storage/scripts/persistentvolume-nfs.yml create mode 100644 samples/web-app-file-storage/scripts/persistentvolume-smb.yml create mode 100644 samples/web-app-file-storage/scripts/persistentvolumeclaim.yml create mode 100644 samples/web-app-file-storage/scripts/secret.yml create mode 100644 samples/web-app-file-storage/scripts/seed-configmap.yml create mode 100644 samples/web-app-file-storage/scripts/service.yml create mode 100644 samples/web-app-file-storage/scripts/storage-secret.yml create mode 100644 samples/web-app-file-storage/scripts/storageclass-nfs.yml create mode 100644 samples/web-app-file-storage/src/app.py create mode 100644 samples/web-app-file-storage/src/gunicorn.conf.py create mode 100644 samples/web-app-file-storage/src/requirements.txt create mode 100644 samples/web-app-file-storage/src/static/bootstrap/css/bootstrap-grid.css create mode 100644 samples/web-app-file-storage/src/static/bootstrap/css/bootstrap-grid.css.map create mode 100644 samples/web-app-file-storage/src/static/bootstrap/css/bootstrap-grid.min.css create mode 100644 samples/web-app-file-storage/src/static/bootstrap/css/bootstrap-grid.min.css.map create mode 100644 samples/web-app-file-storage/src/static/bootstrap/css/bootstrap-grid.rtl.css create mode 100644 samples/web-app-file-storage/src/static/bootstrap/css/bootstrap-grid.rtl.css.map create mode 100644 samples/web-app-file-storage/src/static/bootstrap/css/bootstrap-grid.rtl.min.css create mode 100644 samples/web-app-file-storage/src/static/bootstrap/css/bootstrap-grid.rtl.min.css.map create mode 100644 samples/web-app-file-storage/src/static/bootstrap/css/bootstrap-reboot.css create mode 100644 samples/web-app-file-storage/src/static/bootstrap/css/bootstrap-reboot.css.map create mode 100644 samples/web-app-file-storage/src/static/bootstrap/css/bootstrap-reboot.min.css create mode 100644 samples/web-app-file-storage/src/static/bootstrap/css/bootstrap-reboot.min.css.map create mode 100644 samples/web-app-file-storage/src/static/bootstrap/css/bootstrap-reboot.rtl.css create mode 100644 samples/web-app-file-storage/src/static/bootstrap/css/bootstrap-reboot.rtl.css.map create mode 100644 samples/web-app-file-storage/src/static/bootstrap/css/bootstrap-reboot.rtl.min.css create mode 100644 samples/web-app-file-storage/src/static/bootstrap/css/bootstrap-reboot.rtl.min.css.map create mode 100644 samples/web-app-file-storage/src/static/bootstrap/css/bootstrap-utilities.css create mode 100644 samples/web-app-file-storage/src/static/bootstrap/css/bootstrap-utilities.css.map create mode 100644 samples/web-app-file-storage/src/static/bootstrap/css/bootstrap-utilities.min.css create mode 100644 samples/web-app-file-storage/src/static/bootstrap/css/bootstrap-utilities.min.css.map create mode 100644 samples/web-app-file-storage/src/static/bootstrap/css/bootstrap-utilities.rtl.css create mode 100644 samples/web-app-file-storage/src/static/bootstrap/css/bootstrap-utilities.rtl.css.map create mode 100644 samples/web-app-file-storage/src/static/bootstrap/css/bootstrap-utilities.rtl.min.css create mode 100644 samples/web-app-file-storage/src/static/bootstrap/css/bootstrap-utilities.rtl.min.css.map create mode 100644 samples/web-app-file-storage/src/static/bootstrap/css/bootstrap.css create mode 100644 samples/web-app-file-storage/src/static/bootstrap/css/bootstrap.css.map create mode 100644 samples/web-app-file-storage/src/static/bootstrap/css/bootstrap.min.css create mode 100644 samples/web-app-file-storage/src/static/bootstrap/css/bootstrap.min.css.map create mode 100644 samples/web-app-file-storage/src/static/bootstrap/css/bootstrap.rtl.css create mode 100644 samples/web-app-file-storage/src/static/bootstrap/css/bootstrap.rtl.css.map create mode 100644 samples/web-app-file-storage/src/static/bootstrap/css/bootstrap.rtl.min.css create mode 100644 samples/web-app-file-storage/src/static/bootstrap/css/bootstrap.rtl.min.css.map create mode 100644 samples/web-app-file-storage/src/static/bootstrap/js/bootstrap.bundle.js create mode 100644 samples/web-app-file-storage/src/static/bootstrap/js/bootstrap.bundle.js.map create mode 100644 samples/web-app-file-storage/src/static/bootstrap/js/bootstrap.bundle.min.js create mode 100644 samples/web-app-file-storage/src/static/bootstrap/js/bootstrap.bundle.min.js.map create mode 100644 samples/web-app-file-storage/src/static/bootstrap/js/bootstrap.esm.js create mode 100644 samples/web-app-file-storage/src/static/bootstrap/js/bootstrap.esm.js.map create mode 100644 samples/web-app-file-storage/src/static/bootstrap/js/bootstrap.esm.min.js create mode 100644 samples/web-app-file-storage/src/static/bootstrap/js/bootstrap.esm.min.js.map create mode 100644 samples/web-app-file-storage/src/static/bootstrap/js/bootstrap.js create mode 100644 samples/web-app-file-storage/src/static/bootstrap/js/bootstrap.js.map create mode 100644 samples/web-app-file-storage/src/static/bootstrap/js/bootstrap.min.js create mode 100644 samples/web-app-file-storage/src/static/bootstrap/js/bootstrap.min.js.map create mode 100644 samples/web-app-file-storage/src/static/favicon.ico create mode 100644 samples/web-app-file-storage/src/static/style.css create mode 100644 samples/web-app-file-storage/src/templates/index.html diff --git a/.gitignore b/.gitignore index 1faf750..7a37ee9 100644 --- a/.gitignore +++ b/.gitignore @@ -151,6 +151,8 @@ activemq-data/ .env .envrc .venv +# Deployment options generated by samples/web-app-file-storage/scripts/01-deploy-resources.sh +.deploy-options.env env/ venv/ ENV/ diff --git a/README.md b/README.md index b2220a7..ce0acfe 100644 --- a/README.md +++ b/README.md @@ -5,11 +5,13 @@ This repository contains a set of end-to-end samples that show how to deploy an Every sample deploys the same Vacation Planner web app, a small Python [Flask](https://flask.palletsprojects.com/) single-page application, and only differs in the Azure data service used to persist the activity data behind it: - [Azure SQL Database](https://learn.microsoft.com/en-us/azure/azure-sql/database/sql-database-paas-overview?view=azuresql) -- [Azure Database DB for PostgreSQL flexible server](https://learn.microsoft.com/en-us/azure/postgresql/overview) +- [Azure Database for MySQL flexible server](https://learn.microsoft.com/en-us/azure/mysql/flexible-server/overview) +- [Azure Database for PostgreSQL flexible server](https://learn.microsoft.com/en-us/azure/postgresql/overview) - An in-cluster [PostgreSQL](https://www.postgresql.org/) database deployed as a Kubernetes [StatefulSet](https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/) - [Azure Cosmos DB for MongoDB](https://learn.microsoft.com/en-us/azure/cosmos-db/mongodb/overview) - [Azure Cosmos DB for NoSQL](https://learn.microsoft.com/en-us/azure/cosmos-db/overview) - [Azure Blob Storage](https://learn.microsoft.com/en-us/azure/storage/blobs/storage-blobs-introduction) +- [Azure Files](https://learn.microsoft.com/en-us/azure/storage/files/storage-files-introduction), mounted into the pods over SMB or NFS by the [Azure Files CSI driver](https://learn.microsoft.com/en-us/azure/aks/azure-files-csi) This makes it easy to compare how the same application is wired up against different backing stores. @@ -75,7 +77,8 @@ All samples implement the same Vacation Planner web app. They only vary the unde | [web-app-in-cluster-postgresql](samples/web-app-in-cluster-postgresql/) | Stores activities in an in-cluster [PostgreSQL](https://www.postgresql.org/) database deployed as a Kubernetes [StatefulSet](https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/) (a primary with two streaming-replica standbys), instead of a managed Azure data service. | | [web-app-cosmosdb-mongodb-api](samples/web-app-cosmosdb-mongodb-api/) | Stores activities in a collection of an [Azure Cosmos DB for MongoDB](https://learn.microsoft.com/en-us/azure/cosmos-db/mongodb/introduction) account. | | [web-app-cosmosdb-nosql-api](samples/web-app-cosmosdb-nosql-api/) | Stores activities in a container of an [Azure Cosmos DB for NoSQL](https://learn.microsoft.com/en-us/azure/cosmos-db/nosql/) account. | -| [web-app-storage-account](samples/web-app-storage-account/) | Stores activities in an [Azure Blob Storage](https://learn.microsoft.com/en-us/azure/storage/blobs/storage-blobs-introduction) container, using a connection string. | +| [web-app-blob-storage](samples/web-app-blob-storage/) | Stores activities in an [Azure Blob Storage](https://learn.microsoft.com/en-us/azure/storage/blobs/storage-blobs-introduction) container, using a connection string. | +| [web-app-file-storage](samples/web-app-file-storage/) | Stores activities as text files on an [Azure Files](https://learn.microsoft.com/en-us/azure/storage/files/storage-files-introduction) share mounted into the pods by the [Azure Files CSI driver](https://learn.microsoft.com/en-us/azure/aks/azure-files-csi), over either SMB or NFS, with either a pre-created share or one provisioned on demand. The only sample whose app uses no Azure SDK at all. | | [web-app-managed-identity](samples/web-app-managed-identity/) | Stores activities in an Azure Blob Storage container, authenticating with [Microsoft Entra Workload ID](https://learn.microsoft.com/en-us/azure/aks/workload-identity-overview) (federated credential plus workload identity) instead of a secret, and optionally exposes the app through the Gateway API with a managed TLS certificate. | Each sample folder follows the same layout: diff --git a/samples/web-app-storage-account/README.md b/samples/web-app-blob-storage/README.md similarity index 100% rename from samples/web-app-storage-account/README.md rename to samples/web-app-blob-storage/README.md diff --git a/samples/web-app-storage-account/images/architecture.png b/samples/web-app-blob-storage/images/architecture.png similarity index 100% rename from samples/web-app-storage-account/images/architecture.png rename to samples/web-app-blob-storage/images/architecture.png diff --git a/samples/web-app-storage-account/scripts/00-variables.sh b/samples/web-app-blob-storage/scripts/00-variables.sh similarity index 100% rename from samples/web-app-storage-account/scripts/00-variables.sh rename to samples/web-app-blob-storage/scripts/00-variables.sh diff --git a/samples/web-app-storage-account/scripts/01-deploy-resources.sh b/samples/web-app-blob-storage/scripts/01-deploy-resources.sh similarity index 100% rename from samples/web-app-storage-account/scripts/01-deploy-resources.sh rename to samples/web-app-blob-storage/scripts/01-deploy-resources.sh diff --git a/samples/web-app-storage-account/scripts/02-build-docker-image.sh b/samples/web-app-blob-storage/scripts/02-build-docker-image.sh similarity index 100% rename from samples/web-app-storage-account/scripts/02-build-docker-image.sh rename to samples/web-app-blob-storage/scripts/02-build-docker-image.sh diff --git a/samples/web-app-storage-account/scripts/03-run-docker-container.sh b/samples/web-app-blob-storage/scripts/03-run-docker-container.sh similarity index 100% rename from samples/web-app-storage-account/scripts/03-run-docker-container.sh rename to samples/web-app-blob-storage/scripts/03-run-docker-container.sh diff --git a/samples/web-app-storage-account/scripts/04-push-docker-image.sh b/samples/web-app-blob-storage/scripts/04-push-docker-image.sh similarity index 100% rename from samples/web-app-storage-account/scripts/04-push-docker-image.sh rename to samples/web-app-blob-storage/scripts/04-push-docker-image.sh diff --git a/samples/web-app-storage-account/scripts/05-deploy-app.sh b/samples/web-app-blob-storage/scripts/05-deploy-app.sh similarity index 100% rename from samples/web-app-storage-account/scripts/05-deploy-app.sh rename to samples/web-app-blob-storage/scripts/05-deploy-app.sh diff --git a/samples/web-app-storage-account/scripts/Dockerfile b/samples/web-app-blob-storage/scripts/Dockerfile similarity index 100% rename from samples/web-app-storage-account/scripts/Dockerfile rename to samples/web-app-blob-storage/scripts/Dockerfile diff --git a/samples/web-app-storage-account/scripts/configmap.yml b/samples/web-app-blob-storage/scripts/configmap.yml similarity index 100% rename from samples/web-app-storage-account/scripts/configmap.yml rename to samples/web-app-blob-storage/scripts/configmap.yml diff --git a/samples/web-app-storage-account/scripts/deployment.yml b/samples/web-app-blob-storage/scripts/deployment.yml similarity index 100% rename from samples/web-app-storage-account/scripts/deployment.yml rename to samples/web-app-blob-storage/scripts/deployment.yml diff --git a/samples/web-app-storage-account/scripts/namespace.yml b/samples/web-app-blob-storage/scripts/namespace.yml similarity index 100% rename from samples/web-app-storage-account/scripts/namespace.yml rename to samples/web-app-blob-storage/scripts/namespace.yml diff --git a/samples/web-app-storage-account/scripts/secret.yml b/samples/web-app-blob-storage/scripts/secret.yml similarity index 100% rename from samples/web-app-storage-account/scripts/secret.yml rename to samples/web-app-blob-storage/scripts/secret.yml diff --git a/samples/web-app-storage-account/scripts/service.yml b/samples/web-app-blob-storage/scripts/service.yml similarity index 100% rename from samples/web-app-storage-account/scripts/service.yml rename to samples/web-app-blob-storage/scripts/service.yml diff --git a/samples/web-app-storage-account/src/app.py b/samples/web-app-blob-storage/src/app.py similarity index 100% rename from samples/web-app-storage-account/src/app.py rename to samples/web-app-blob-storage/src/app.py diff --git a/samples/web-app-storage-account/src/gunicorn.conf.py b/samples/web-app-blob-storage/src/gunicorn.conf.py similarity index 100% rename from samples/web-app-storage-account/src/gunicorn.conf.py rename to samples/web-app-blob-storage/src/gunicorn.conf.py diff --git a/samples/web-app-storage-account/src/requirements.txt b/samples/web-app-blob-storage/src/requirements.txt similarity index 100% rename from samples/web-app-storage-account/src/requirements.txt rename to samples/web-app-blob-storage/src/requirements.txt diff --git a/samples/web-app-storage-account/src/static/bootstrap/css/bootstrap-grid.css b/samples/web-app-blob-storage/src/static/bootstrap/css/bootstrap-grid.css similarity index 100% rename from samples/web-app-storage-account/src/static/bootstrap/css/bootstrap-grid.css rename to samples/web-app-blob-storage/src/static/bootstrap/css/bootstrap-grid.css diff --git a/samples/web-app-storage-account/src/static/bootstrap/css/bootstrap-grid.css.map b/samples/web-app-blob-storage/src/static/bootstrap/css/bootstrap-grid.css.map similarity index 100% rename from samples/web-app-storage-account/src/static/bootstrap/css/bootstrap-grid.css.map rename to samples/web-app-blob-storage/src/static/bootstrap/css/bootstrap-grid.css.map diff --git a/samples/web-app-storage-account/src/static/bootstrap/css/bootstrap-grid.min.css b/samples/web-app-blob-storage/src/static/bootstrap/css/bootstrap-grid.min.css similarity index 100% rename from samples/web-app-storage-account/src/static/bootstrap/css/bootstrap-grid.min.css rename to samples/web-app-blob-storage/src/static/bootstrap/css/bootstrap-grid.min.css diff --git a/samples/web-app-storage-account/src/static/bootstrap/css/bootstrap-grid.min.css.map b/samples/web-app-blob-storage/src/static/bootstrap/css/bootstrap-grid.min.css.map similarity index 100% rename from samples/web-app-storage-account/src/static/bootstrap/css/bootstrap-grid.min.css.map rename to samples/web-app-blob-storage/src/static/bootstrap/css/bootstrap-grid.min.css.map diff --git a/samples/web-app-storage-account/src/static/bootstrap/css/bootstrap-grid.rtl.css b/samples/web-app-blob-storage/src/static/bootstrap/css/bootstrap-grid.rtl.css similarity index 100% rename from samples/web-app-storage-account/src/static/bootstrap/css/bootstrap-grid.rtl.css rename to samples/web-app-blob-storage/src/static/bootstrap/css/bootstrap-grid.rtl.css diff --git a/samples/web-app-storage-account/src/static/bootstrap/css/bootstrap-grid.rtl.css.map b/samples/web-app-blob-storage/src/static/bootstrap/css/bootstrap-grid.rtl.css.map similarity index 100% rename from samples/web-app-storage-account/src/static/bootstrap/css/bootstrap-grid.rtl.css.map rename to samples/web-app-blob-storage/src/static/bootstrap/css/bootstrap-grid.rtl.css.map diff --git a/samples/web-app-storage-account/src/static/bootstrap/css/bootstrap-grid.rtl.min.css b/samples/web-app-blob-storage/src/static/bootstrap/css/bootstrap-grid.rtl.min.css similarity index 100% rename from samples/web-app-storage-account/src/static/bootstrap/css/bootstrap-grid.rtl.min.css rename to samples/web-app-blob-storage/src/static/bootstrap/css/bootstrap-grid.rtl.min.css diff --git a/samples/web-app-storage-account/src/static/bootstrap/css/bootstrap-grid.rtl.min.css.map b/samples/web-app-blob-storage/src/static/bootstrap/css/bootstrap-grid.rtl.min.css.map similarity index 100% rename from samples/web-app-storage-account/src/static/bootstrap/css/bootstrap-grid.rtl.min.css.map rename to samples/web-app-blob-storage/src/static/bootstrap/css/bootstrap-grid.rtl.min.css.map diff --git a/samples/web-app-storage-account/src/static/bootstrap/css/bootstrap-reboot.css b/samples/web-app-blob-storage/src/static/bootstrap/css/bootstrap-reboot.css similarity index 100% rename from samples/web-app-storage-account/src/static/bootstrap/css/bootstrap-reboot.css rename to samples/web-app-blob-storage/src/static/bootstrap/css/bootstrap-reboot.css diff --git a/samples/web-app-storage-account/src/static/bootstrap/css/bootstrap-reboot.css.map b/samples/web-app-blob-storage/src/static/bootstrap/css/bootstrap-reboot.css.map similarity index 100% rename from samples/web-app-storage-account/src/static/bootstrap/css/bootstrap-reboot.css.map rename to samples/web-app-blob-storage/src/static/bootstrap/css/bootstrap-reboot.css.map diff --git a/samples/web-app-storage-account/src/static/bootstrap/css/bootstrap-reboot.min.css b/samples/web-app-blob-storage/src/static/bootstrap/css/bootstrap-reboot.min.css similarity index 100% rename from samples/web-app-storage-account/src/static/bootstrap/css/bootstrap-reboot.min.css rename to samples/web-app-blob-storage/src/static/bootstrap/css/bootstrap-reboot.min.css diff --git a/samples/web-app-storage-account/src/static/bootstrap/css/bootstrap-reboot.min.css.map b/samples/web-app-blob-storage/src/static/bootstrap/css/bootstrap-reboot.min.css.map similarity index 100% rename from samples/web-app-storage-account/src/static/bootstrap/css/bootstrap-reboot.min.css.map rename to samples/web-app-blob-storage/src/static/bootstrap/css/bootstrap-reboot.min.css.map diff --git a/samples/web-app-storage-account/src/static/bootstrap/css/bootstrap-reboot.rtl.css b/samples/web-app-blob-storage/src/static/bootstrap/css/bootstrap-reboot.rtl.css similarity index 100% rename from samples/web-app-storage-account/src/static/bootstrap/css/bootstrap-reboot.rtl.css rename to samples/web-app-blob-storage/src/static/bootstrap/css/bootstrap-reboot.rtl.css diff --git a/samples/web-app-storage-account/src/static/bootstrap/css/bootstrap-reboot.rtl.css.map b/samples/web-app-blob-storage/src/static/bootstrap/css/bootstrap-reboot.rtl.css.map similarity index 100% rename from samples/web-app-storage-account/src/static/bootstrap/css/bootstrap-reboot.rtl.css.map rename to samples/web-app-blob-storage/src/static/bootstrap/css/bootstrap-reboot.rtl.css.map diff --git a/samples/web-app-storage-account/src/static/bootstrap/css/bootstrap-reboot.rtl.min.css b/samples/web-app-blob-storage/src/static/bootstrap/css/bootstrap-reboot.rtl.min.css similarity index 100% rename from samples/web-app-storage-account/src/static/bootstrap/css/bootstrap-reboot.rtl.min.css rename to samples/web-app-blob-storage/src/static/bootstrap/css/bootstrap-reboot.rtl.min.css diff --git a/samples/web-app-storage-account/src/static/bootstrap/css/bootstrap-reboot.rtl.min.css.map b/samples/web-app-blob-storage/src/static/bootstrap/css/bootstrap-reboot.rtl.min.css.map similarity index 100% rename from samples/web-app-storage-account/src/static/bootstrap/css/bootstrap-reboot.rtl.min.css.map rename to samples/web-app-blob-storage/src/static/bootstrap/css/bootstrap-reboot.rtl.min.css.map diff --git a/samples/web-app-storage-account/src/static/bootstrap/css/bootstrap-utilities.css b/samples/web-app-blob-storage/src/static/bootstrap/css/bootstrap-utilities.css similarity index 100% rename from samples/web-app-storage-account/src/static/bootstrap/css/bootstrap-utilities.css rename to samples/web-app-blob-storage/src/static/bootstrap/css/bootstrap-utilities.css diff --git a/samples/web-app-storage-account/src/static/bootstrap/css/bootstrap-utilities.css.map b/samples/web-app-blob-storage/src/static/bootstrap/css/bootstrap-utilities.css.map similarity index 100% rename from samples/web-app-storage-account/src/static/bootstrap/css/bootstrap-utilities.css.map rename to samples/web-app-blob-storage/src/static/bootstrap/css/bootstrap-utilities.css.map diff --git a/samples/web-app-storage-account/src/static/bootstrap/css/bootstrap-utilities.min.css b/samples/web-app-blob-storage/src/static/bootstrap/css/bootstrap-utilities.min.css similarity index 100% rename from samples/web-app-storage-account/src/static/bootstrap/css/bootstrap-utilities.min.css rename to samples/web-app-blob-storage/src/static/bootstrap/css/bootstrap-utilities.min.css diff --git a/samples/web-app-storage-account/src/static/bootstrap/css/bootstrap-utilities.min.css.map b/samples/web-app-blob-storage/src/static/bootstrap/css/bootstrap-utilities.min.css.map similarity index 100% rename from samples/web-app-storage-account/src/static/bootstrap/css/bootstrap-utilities.min.css.map rename to samples/web-app-blob-storage/src/static/bootstrap/css/bootstrap-utilities.min.css.map diff --git a/samples/web-app-storage-account/src/static/bootstrap/css/bootstrap-utilities.rtl.css b/samples/web-app-blob-storage/src/static/bootstrap/css/bootstrap-utilities.rtl.css similarity index 100% rename from samples/web-app-storage-account/src/static/bootstrap/css/bootstrap-utilities.rtl.css rename to samples/web-app-blob-storage/src/static/bootstrap/css/bootstrap-utilities.rtl.css diff --git a/samples/web-app-storage-account/src/static/bootstrap/css/bootstrap-utilities.rtl.css.map b/samples/web-app-blob-storage/src/static/bootstrap/css/bootstrap-utilities.rtl.css.map similarity index 100% rename from samples/web-app-storage-account/src/static/bootstrap/css/bootstrap-utilities.rtl.css.map rename to samples/web-app-blob-storage/src/static/bootstrap/css/bootstrap-utilities.rtl.css.map diff --git a/samples/web-app-storage-account/src/static/bootstrap/css/bootstrap-utilities.rtl.min.css b/samples/web-app-blob-storage/src/static/bootstrap/css/bootstrap-utilities.rtl.min.css similarity index 100% rename from samples/web-app-storage-account/src/static/bootstrap/css/bootstrap-utilities.rtl.min.css rename to samples/web-app-blob-storage/src/static/bootstrap/css/bootstrap-utilities.rtl.min.css diff --git a/samples/web-app-storage-account/src/static/bootstrap/css/bootstrap-utilities.rtl.min.css.map b/samples/web-app-blob-storage/src/static/bootstrap/css/bootstrap-utilities.rtl.min.css.map similarity index 100% rename from samples/web-app-storage-account/src/static/bootstrap/css/bootstrap-utilities.rtl.min.css.map rename to samples/web-app-blob-storage/src/static/bootstrap/css/bootstrap-utilities.rtl.min.css.map diff --git a/samples/web-app-storage-account/src/static/bootstrap/css/bootstrap.css b/samples/web-app-blob-storage/src/static/bootstrap/css/bootstrap.css similarity index 100% rename from samples/web-app-storage-account/src/static/bootstrap/css/bootstrap.css rename to samples/web-app-blob-storage/src/static/bootstrap/css/bootstrap.css diff --git a/samples/web-app-storage-account/src/static/bootstrap/css/bootstrap.css.map b/samples/web-app-blob-storage/src/static/bootstrap/css/bootstrap.css.map similarity index 100% rename from samples/web-app-storage-account/src/static/bootstrap/css/bootstrap.css.map rename to samples/web-app-blob-storage/src/static/bootstrap/css/bootstrap.css.map diff --git a/samples/web-app-storage-account/src/static/bootstrap/css/bootstrap.min.css b/samples/web-app-blob-storage/src/static/bootstrap/css/bootstrap.min.css similarity index 100% rename from samples/web-app-storage-account/src/static/bootstrap/css/bootstrap.min.css rename to samples/web-app-blob-storage/src/static/bootstrap/css/bootstrap.min.css diff --git a/samples/web-app-storage-account/src/static/bootstrap/css/bootstrap.min.css.map b/samples/web-app-blob-storage/src/static/bootstrap/css/bootstrap.min.css.map similarity index 100% rename from samples/web-app-storage-account/src/static/bootstrap/css/bootstrap.min.css.map rename to samples/web-app-blob-storage/src/static/bootstrap/css/bootstrap.min.css.map diff --git a/samples/web-app-storage-account/src/static/bootstrap/css/bootstrap.rtl.css b/samples/web-app-blob-storage/src/static/bootstrap/css/bootstrap.rtl.css similarity index 100% rename from samples/web-app-storage-account/src/static/bootstrap/css/bootstrap.rtl.css rename to samples/web-app-blob-storage/src/static/bootstrap/css/bootstrap.rtl.css diff --git a/samples/web-app-storage-account/src/static/bootstrap/css/bootstrap.rtl.css.map b/samples/web-app-blob-storage/src/static/bootstrap/css/bootstrap.rtl.css.map similarity index 100% rename from samples/web-app-storage-account/src/static/bootstrap/css/bootstrap.rtl.css.map rename to samples/web-app-blob-storage/src/static/bootstrap/css/bootstrap.rtl.css.map diff --git a/samples/web-app-storage-account/src/static/bootstrap/css/bootstrap.rtl.min.css b/samples/web-app-blob-storage/src/static/bootstrap/css/bootstrap.rtl.min.css similarity index 100% rename from samples/web-app-storage-account/src/static/bootstrap/css/bootstrap.rtl.min.css rename to samples/web-app-blob-storage/src/static/bootstrap/css/bootstrap.rtl.min.css diff --git a/samples/web-app-storage-account/src/static/bootstrap/css/bootstrap.rtl.min.css.map b/samples/web-app-blob-storage/src/static/bootstrap/css/bootstrap.rtl.min.css.map similarity index 100% rename from samples/web-app-storage-account/src/static/bootstrap/css/bootstrap.rtl.min.css.map rename to samples/web-app-blob-storage/src/static/bootstrap/css/bootstrap.rtl.min.css.map diff --git a/samples/web-app-storage-account/src/static/bootstrap/js/bootstrap.bundle.js b/samples/web-app-blob-storage/src/static/bootstrap/js/bootstrap.bundle.js similarity index 100% rename from samples/web-app-storage-account/src/static/bootstrap/js/bootstrap.bundle.js rename to samples/web-app-blob-storage/src/static/bootstrap/js/bootstrap.bundle.js diff --git a/samples/web-app-storage-account/src/static/bootstrap/js/bootstrap.bundle.js.map b/samples/web-app-blob-storage/src/static/bootstrap/js/bootstrap.bundle.js.map similarity index 100% rename from samples/web-app-storage-account/src/static/bootstrap/js/bootstrap.bundle.js.map rename to samples/web-app-blob-storage/src/static/bootstrap/js/bootstrap.bundle.js.map diff --git a/samples/web-app-storage-account/src/static/bootstrap/js/bootstrap.bundle.min.js b/samples/web-app-blob-storage/src/static/bootstrap/js/bootstrap.bundle.min.js similarity index 100% rename from samples/web-app-storage-account/src/static/bootstrap/js/bootstrap.bundle.min.js rename to samples/web-app-blob-storage/src/static/bootstrap/js/bootstrap.bundle.min.js diff --git a/samples/web-app-storage-account/src/static/bootstrap/js/bootstrap.bundle.min.js.map b/samples/web-app-blob-storage/src/static/bootstrap/js/bootstrap.bundle.min.js.map similarity index 100% rename from samples/web-app-storage-account/src/static/bootstrap/js/bootstrap.bundle.min.js.map rename to samples/web-app-blob-storage/src/static/bootstrap/js/bootstrap.bundle.min.js.map diff --git a/samples/web-app-storage-account/src/static/bootstrap/js/bootstrap.esm.js b/samples/web-app-blob-storage/src/static/bootstrap/js/bootstrap.esm.js similarity index 100% rename from samples/web-app-storage-account/src/static/bootstrap/js/bootstrap.esm.js rename to samples/web-app-blob-storage/src/static/bootstrap/js/bootstrap.esm.js diff --git a/samples/web-app-storage-account/src/static/bootstrap/js/bootstrap.esm.js.map b/samples/web-app-blob-storage/src/static/bootstrap/js/bootstrap.esm.js.map similarity index 100% rename from samples/web-app-storage-account/src/static/bootstrap/js/bootstrap.esm.js.map rename to samples/web-app-blob-storage/src/static/bootstrap/js/bootstrap.esm.js.map diff --git a/samples/web-app-storage-account/src/static/bootstrap/js/bootstrap.esm.min.js b/samples/web-app-blob-storage/src/static/bootstrap/js/bootstrap.esm.min.js similarity index 100% rename from samples/web-app-storage-account/src/static/bootstrap/js/bootstrap.esm.min.js rename to samples/web-app-blob-storage/src/static/bootstrap/js/bootstrap.esm.min.js diff --git a/samples/web-app-storage-account/src/static/bootstrap/js/bootstrap.esm.min.js.map b/samples/web-app-blob-storage/src/static/bootstrap/js/bootstrap.esm.min.js.map similarity index 100% rename from samples/web-app-storage-account/src/static/bootstrap/js/bootstrap.esm.min.js.map rename to samples/web-app-blob-storage/src/static/bootstrap/js/bootstrap.esm.min.js.map diff --git a/samples/web-app-storage-account/src/static/bootstrap/js/bootstrap.js b/samples/web-app-blob-storage/src/static/bootstrap/js/bootstrap.js similarity index 100% rename from samples/web-app-storage-account/src/static/bootstrap/js/bootstrap.js rename to samples/web-app-blob-storage/src/static/bootstrap/js/bootstrap.js diff --git a/samples/web-app-storage-account/src/static/bootstrap/js/bootstrap.js.map b/samples/web-app-blob-storage/src/static/bootstrap/js/bootstrap.js.map similarity index 100% rename from samples/web-app-storage-account/src/static/bootstrap/js/bootstrap.js.map rename to samples/web-app-blob-storage/src/static/bootstrap/js/bootstrap.js.map diff --git a/samples/web-app-storage-account/src/static/bootstrap/js/bootstrap.min.js b/samples/web-app-blob-storage/src/static/bootstrap/js/bootstrap.min.js similarity index 100% rename from samples/web-app-storage-account/src/static/bootstrap/js/bootstrap.min.js rename to samples/web-app-blob-storage/src/static/bootstrap/js/bootstrap.min.js diff --git a/samples/web-app-storage-account/src/static/bootstrap/js/bootstrap.min.js.map b/samples/web-app-blob-storage/src/static/bootstrap/js/bootstrap.min.js.map similarity index 100% rename from samples/web-app-storage-account/src/static/bootstrap/js/bootstrap.min.js.map rename to samples/web-app-blob-storage/src/static/bootstrap/js/bootstrap.min.js.map diff --git a/samples/web-app-storage-account/src/static/favicon.ico b/samples/web-app-blob-storage/src/static/favicon.ico similarity index 100% rename from samples/web-app-storage-account/src/static/favicon.ico rename to samples/web-app-blob-storage/src/static/favicon.ico diff --git a/samples/web-app-storage-account/src/static/style.css b/samples/web-app-blob-storage/src/static/style.css similarity index 100% rename from samples/web-app-storage-account/src/static/style.css rename to samples/web-app-blob-storage/src/static/style.css diff --git a/samples/web-app-storage-account/src/templates/index.html b/samples/web-app-blob-storage/src/templates/index.html similarity index 100% rename from samples/web-app-storage-account/src/templates/index.html rename to samples/web-app-blob-storage/src/templates/index.html diff --git a/samples/web-app-file-storage/README.md b/samples/web-app-file-storage/README.md new file mode 100644 index 0000000..b2b8b18 --- /dev/null +++ b/samples/web-app-file-storage/README.md @@ -0,0 +1,139 @@ +# Vacation Planner: Azure Files + +This sample demonstrates a Python Flask single-page web application called *Vacation Planner* hosted on an [Azure Kubernetes Service (AKS)](https://learn.microsoft.com/en-us/azure/aks/what-is-aks) cluster in the cloud on Azure or locally in the LocalStack emulator for Azure. The app runs in a dedicated namespace and stores each activity as a text file on an [Azure Files](https://learn.microsoft.com/en-us/azure/storage/files/storage-files-introduction) share, mounted into every pod by the [Azure Files CSI driver](https://learn.microsoft.com/en-us/azure/aks/azure-files-csi). + +Unlike every other sample in this repository, the app uses **no Azure SDK at all**: no client library, no connection string, no account key, not a single line of authentication code. It calls `open()`, `os.listdir()` and `os.remove()` on a directory, and the CSI driver turns that directory into an Azure file share. That is the point of the sample, and it is what makes Azure Files the shortest path to persistence for an application that already speaks the file system. + +The three replicas of the deployment mount the same share at the same time (`ReadWriteMany`), so an activity added through one pod is served by all of them. The UI shows the name of the pod that served the page, which makes that visible. + +Before installing the sample, make sure to create an [Azure Kubernetes Service (AKS)](https://learn.microsoft.com/en-us/azure/aks/what-is-aks) cluster by using one of the following scripts: + +- [scripts/01-system-assigned-managed-identity.sh](../../scripts/01-system-assigned-managed-identity.sh): creates the cluster using a system-assigned managed identity as its cluster identity. +- [scripts/01-user-assigned-managed-identity.sh](../../scripts/01-user-assigned-managed-identity.sh): creates the cluster using a user-assigned managed identity as its cluster identity. + +Both scripts check that the Azure Files CSI driver and the CSI snapshot controller are enabled on the cluster, and enable the `Microsoft.Storage` service endpoint on the node subnets, which an NFS share requires. They print the cluster's `storageProfile` and its storage classes when they are done. + +All commands below are run from this sample's `scripts/` folder. + +## Architecture + +The following diagram illustrates the architecture of the solution: + +![Architecture Diagram](./images/architecture.png) + +## Provisioning mode and protocol + +The first script asks two questions and remembers the answers, so the sample covers four combinations with one set of scripts: + +| | **Static**: the file share is created by `01-deploy-resources.sh` | **Dynamic**: the file share is created by the CSI driver | +| --- | --- | --- | +| **SMB** | A `StorageV2` account with a `Standard_LRS` SMB share, a `PersistentVolume` that points at it, and a Secret holding the account key for the mount. | A claim on the built-in `azurefile-csi` storage class. The driver creates the storage account and the share in the node resource group. | +| **NFS** | A premium `FileStorage` account with an NFS share, restricted to the node subnets, and a `PersistentVolume` with `protocol: nfs` and no Secret. | A claim on the `vacation-planner-file-nfs` storage class created from [`storageclass-nfs.yml`](scripts/storageclass-nfs.yml), because none of the built-in classes provisions an NFS share. | + +Static provisioning is the better default: it works unchanged on Azure, needs no premium account, and produces a share you can inspect with `az storage file list`. Dynamic provisioning is the better demonstration of the driver itself, since the driver creates the storage account and the share on its own, in the cluster's node resource group. + +Both answers are stored in `scripts/.deploy-options.env` (git-ignored), so `05-deploy-app.sh` deploys the app for the same combination without asking again. Exporting the two variables skips the menus, which is what an unattended run does: + +```bash +PROVISIONING_MODE=dynamic FILE_SHARE_PROTOCOL=nfs ./01-deploy-resources.sh +``` + +An exported variable always wins over the stored answer, so make sure the two agree: deploying a static volume for a share that was never created leaves the pods in `ContainerCreating` with a mount error. Both scripts print the combination they are working on. + +## SMB or NFS + +The two protocols are not interchangeable, and the differences are what the sample makes visible: + +| | SMB | NFS | +| --- | --- | --- | +| Authentication | The storage account key (NTLMv2), which the driver reads from a Kubernetes Secret with the fixed keys `azurestorageaccountname` and `azurestorageaccountkey`. | None. Access is granted by the network rules of the storage account, which is why the account has to be restricted to the node subnets. | +| Storage account | Any account kind, `Standard_LRS` is enough. | A premium `FileStorage` account: [NFS shares are only available on SSD file shares](https://learn.microsoft.com/en-us/azure/storage/files/files-nfs-protocol), with a 100 GiB minimum. | +| Permissions | Synthesized by the client from the `uid`, `gid`, `file_mode` and `dir_mode` mount options: no ownership is stored on the share. | Real POSIX ownership stored on the share, and the mount options above are ignored. The share arrives owned by `root`, so the init container of the deployment takes ownership of it as uid 1000. | +| Network | Reachable over the public endpoint. | Reachable only from a private endpoint or from a virtual network with the `Microsoft.Storage` service endpoint. | +| Secure transfer | Required, and on by default. | Must be off, unless the client uses the AZNFS TLS helper. | +| Interoperability | The same share is reachable over the file data plane REST API, so `az storage file list` shows the files the pods write. | Not reachable over the file data plane REST API on Azure: use `kubectl exec` to look at the share. | + +`securityContext.fsGroup` is deliberately **not** used to make the NFS share writable. The `file.csi.azure.com` CSIDriver object declares `fsGroupPolicy: ReadWriteOnceWithFSType`, so the kubelet applies `fsGroup` only to a `ReadWriteOnce` volume with a file system type. This volume is `ReadWriteMany`, so setting `fsGroup` would silently do nothing. The init container chowning the mount point is the documented way out. + +## Deployment workflow + +Run the numbered scripts in order from the `scripts/` folder: + +```bash +cd scripts +./01-deploy-resources.sh +./02-build-docker-image.sh +./03-run-docker-container.sh # optional local smoke test +./04-push-docker-image.sh +./05-deploy-app.sh +``` + +## Scripts and manifests + +| File | Description | +| ---- | ----------- | +| [`00-variables.sh`](scripts/00-variables.sh) | Defines the variables shared across the other scripts (resource names, image tag, storage account and file share names, Kubernetes namespace, mount path, …). The other scripts load these values by sourcing this file. | +| [`01-deploy-resources.sh`](scripts/01-deploy-resources.sh) | Asks for the provisioning mode and the protocol, then deploys the Azure resources used by this sample: the resource group, the [Azure Container Registry (ACR)](https://learn.microsoft.com/en-us/azure/container-registry/container-registry-intro), and, in static mode, the storage account and the [Azure file share](https://learn.microsoft.com/en-us/azure/storage/files/storage-files-introduction) for the chosen protocol. | +| [`02-build-docker-image.sh`](scripts/02-build-docker-image.sh) | Builds the Docker image for the web app from the [`src/`](src/) folder. | +| [`03-run-docker-container.sh`](scripts/03-run-docker-container.sh) | Runs the web app in a local Docker container (no Kubernetes, no Azure resource) with a directory on the host mounted where the Azure file share goes, to validate that it starts and stores the activities as expected. | +| [`04-push-docker-image.sh`](scripts/04-push-docker-image.sh) | Tags and pushes the Docker image to the Azure Container Registry, on Azure or in the LocalStack emulator. | +| [`05-deploy-app.sh`](scripts/05-deploy-app.sh) | Uses the YAML manifests below (templated with `yq`) to deploy the app to the AKS cluster, applying only the ones the chosen combination needs, and waits for the rollout to complete. | +| [`Dockerfile`](scripts/Dockerfile) | Builds the Docker image of the web app. Unlike the other samples it pins the app user to uid and gid 1000, because that identity appears in the mount options of the SMB volume and in the ownership of the NFS share. | +| [`namespace.yml`](scripts/namespace.yml) | Creates the Kubernetes namespace. | +| [`configmap.yml`](scripts/configmap.yml) | Creates the ConfigMap holding non-secret input values (the directory where the file share is mounted) passed to the app as environment variables. | +| [`seed-configmap.yml`](scripts/seed-configmap.yml) | Holds the sample activities the init container copies into the file share when they are missing, so the app is never empty on the first page load. | +| [`secret.yml`](scripts/secret.yml) | Creates the Secret holding the Flask secret key. It holds no storage credential: the app never authenticates to Azure. | +| [`storage-secret.yml`](scripts/storage-secret.yml) | Creates the Secret holding the storage account name and key the CSI driver uses to mount the SMB share. Applied for the static SMB combination only. | +| [`persistentvolume-smb.yml`](scripts/persistentvolume-smb.yml) | Creates the `PersistentVolume` bound to a pre-created SMB file share, with the account key secret and the `uid`, `gid` and mode mount options. | +| [`persistentvolume-nfs.yml`](scripts/persistentvolume-nfs.yml) | Creates the `PersistentVolume` bound to a pre-created NFS file share, with `protocol: nfs`, the NFS mount options, and no secret. | +| [`persistentvolumeclaim.yml`](scripts/persistentvolumeclaim.yml) | Creates the `ReadWriteMany` claim the pods mount. Committed in its static shape (pre-bound by name, empty storage class); `05-deploy-app.sh` rewrites those two fields for dynamic provisioning. | +| [`storageclass-nfs.yml`](scripts/storageclass-nfs.yml) | Creates the storage class that provisions an NFS file share on demand (`protocol: nfs`, `skuName: Premium_LRS`). Applied for the dynamic NFS combination only. | +| [`deployment.yml`](scripts/deployment.yml) | Creates the Kubernetes Deployment: three replicas mounting the same share, plus the init container that prepares and seeds it. | +| [`service.yml`](scripts/service.yml) | Creates the `ClusterIP` Service that exposes the web app inside the cluster. | + +## Accessing the web app + +The app is exposed through a `ClusterIP` service, which is only reachable from inside the cluster. Port-forward it to a local port to open it from your machine: + +```bash +kubectl port-forward service/vacation-planner-file 8080:80 -n vacation-planner-file +``` + +Then browse to [http://localhost:8080](http://localhost:8080). Alternatively, use a tool such as [k9s](https://k9scli.io/) to start the port-forward interactively. + +## Looking at the file share + +Every activity is one UTF-8 text file named `YYYY-MM-DD-HH-MM-SS-activity.txt`. From inside the cluster, on any of the three replicas and for any of the four combinations: + +```bash +kubectl exec -n vacation-planner-file deployment/vacation-planner-file -- ls -l /data +``` + +An SMB share is reachable over the file data plane REST API as well, so the files the pods write can also be listed from your machine, which is a neat way to see that the volume really is an Azure file share: + +```bash +az storage file list --account-name localfilesmbtest --share-name activities --output table +``` + +The same command does not work for an NFS share on Azure, which has no REST data plane, and it needs the account key or a role assignment on the account. + +## Cleaning up + +The namespace holds the app, but the `PersistentVolume` and the storage class are cluster-scoped and survive `kubectl delete namespace`. They also have to go before switching to another combination, because the fields of a claim cannot be changed after it is created: + +```bash +kubectl delete namespace vacation-planner-file +kubectl delete pv vacation-planner-file-pv --ignore-not-found +kubectl delete storageclass vacation-planner-file-nfs --ignore-not-found +``` + +The volume is created with `persistentVolumeReclaimPolicy: Retain`, so deleting it leaves the file share and the activities in place: the same share is picked up again the next time the sample is deployed. In dynamic mode the storage class reclaim policy is `Delete`, so the share the driver created goes away with the claim. + +## Running on Azure + +The sample runs unchanged against Azure, with two things to keep in mind for the NFS combinations: + +- The mount needs the storage account to be restricted to the node subnets. `01-deploy-resources.sh` reads the node subnets from the cluster and configures them for the static combination, and the CSI driver does it for the dynamic one. When it cannot, it says so with a warning instead of leaving you to discover it from a mount timeout. +- A premium file share is provisioned capacity, so the 100 GiB minimum is billed whether it holds three text files or a hundred gigabytes. + +One behaviour is worth knowing in both protocols: `actimeo=30` caches directory metadata for 30 seconds, so an activity added through one replica can take a few seconds to show up on another. That is the ordinary trade-off of a shared file system, not a bug in the sample. diff --git a/samples/web-app-postgresql-flexible-server/images/images/architecture.png)/architecture.png b/samples/web-app-file-storage/images/architecture.png similarity index 59% rename from samples/web-app-postgresql-flexible-server/images/images/architecture.png)/architecture.png rename to samples/web-app-file-storage/images/architecture.png index f84b79560706b1ad72543e879b50e1c7be1c9410..5218f655dd8f160281a3aac9d545c3592e5107f9 100644 GIT binary patch delta 14376 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 WK@0r#rgr{0A}6IRSt4%w^?v~(5#GxH delta 15640 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 diff --git a/samples/web-app-file-storage/scripts/00-variables.sh b/samples/web-app-file-storage/scripts/00-variables.sh new file mode 100755 index 0000000..4138fe6 --- /dev/null +++ b/samples/web-app-file-storage/scripts/00-variables.sh @@ -0,0 +1,67 @@ +# Variables + +# Azure Resources +PREFIX='local' +SUFFIX='test' +LOCATION='italynorth' +RESOURCE_GROUP_NAME="${PREFIX}-rg" +ACR_NAME="${PREFIX,,}acr${SUFFIX,,}" +ACR_SKU='Standard' +AKS_CLUSTER_NAME="${PREFIX}-aks-${SUFFIX}" +SUBSCRIPTION_NAME=$(az account show --query name --output tsv) +SUBSCRIPTION_ID=$(az account show --query id --output tsv) +TENANT_ID=$(az account show --query tenantId --output tsv) +CURRENT_DIR="$(cd "$(dirname "$0")" && pwd)" + +# Storage Accounts +# An SMB share needs a general-purpose v2 account, an NFS share needs a premium FileStorage account +# (NFS Azure file shares are only available on SSD file shares), and the kind of an account cannot be +# changed after creation. Each protocol therefore gets its own account, so switching protocol never +# collides with the account created for the other one. +SMB_STORAGE_ACCOUNT_NAME="${PREFIX}filesmb${SUFFIX}" +SMB_STORAGE_ACCOUNT_KIND='StorageV2' +SMB_STORAGE_ACCOUNT_SKU='Standard_LRS' +NFS_STORAGE_ACCOUNT_NAME="${PREFIX}filenfs${SUFFIX}" +NFS_STORAGE_ACCOUNT_KIND='FileStorage' +NFS_STORAGE_ACCOUNT_SKU='Premium_LRS' + +# Azure file share +FILE_SHARE_NAME='activities' +# A premium file share is provisioned storage with a 100 GiB minimum, so both protocols use the same +# size to keep a single PersistentVolumeClaim for all the combinations. +FILE_SHARE_QUOTA_GB='100' + +# Docker Image +IMAGE_NAME="vacation-planner-file" +IMAGE_PULL_POLICY="Always" +IMAGE_TAG="v1" +PORT="8080" + +# Kubernetes +NAMESPACE="vacation-planner-file" +DEPLOYMENT_NAME="vacation-planner-file" +SERVICE_NAME="vacation-planner-file" +CONFIGMAP_NAME="vacation-planner-file-config" +SEED_CONFIGMAP_NAME="vacation-planner-file-seed" +SECRET_NAME="vacation-planner-file-secrets" +STORAGE_SECRET_NAME="vacation-planner-file-storage" +PERSISTENT_VOLUME_NAME="vacation-planner-file-pv" +PERSISTENT_VOLUME_CLAIM_NAME="vacation-planner-file-pvc" + +# Storage class used to provision the volume on demand. +# SMB uses azurefile-csi, one of the four azurefile* classes the Azure Files CSI driver installs on +# every AKS cluster. NFS needs a class of its own, because none of the built-in ones sets +# protocol: nfs, and it is created by 05-deploy-app.sh from storageclass-nfs.yml. +SMB_STORAGE_CLASS_NAME='azurefile-csi' +NFS_STORAGE_CLASS_NAME="vacation-planner-file-nfs" + +# Directory where the Azure file share is mounted in the pods +ACTIVITIES_DIR='/data' + +# Deployment options chosen interactively in 01-deploy-resources.sh, or exported beforehand for an +# unattended run. The generated file assigns each value with ${VAR:-value} syntax, so an exported +# environment variable always takes precedence over the persisted choice. +DEPLOY_OPTIONS_FILE="$CURRENT_DIR/.deploy-options.env" +[ -f "$DEPLOY_OPTIONS_FILE" ] && source "$DEPLOY_OPTIONS_FILE" +PROVISIONING_MODE="${PROVISIONING_MODE:-}" +FILE_SHARE_PROTOCOL="${FILE_SHARE_PROTOCOL:-}" diff --git a/samples/web-app-file-storage/scripts/01-deploy-resources.sh b/samples/web-app-file-storage/scripts/01-deploy-resources.sh new file mode 100755 index 0000000..0a35f6c --- /dev/null +++ b/samples/web-app-file-storage/scripts/01-deploy-resources.sh @@ -0,0 +1,308 @@ +#!/bin/bash + +# Variables +source ./00-variables.sh + +# Change the current directory to the script's directory +cd "$CURRENT_DIR" || exit + +# Ask how the Azure file share holding the activities should be provisioned. +# Both answers are persisted below, so 05-deploy-app.sh deploys the app for the same combination +# without asking again. Export PROVISIONING_MODE and FILE_SHARE_PROTOCOL beforehand to skip the +# menus altogether, for example in an unattended run: +# +# PROVISIONING_MODE=dynamic FILE_SHARE_PROTOCOL=nfs ./01-deploy-resources.sh +if [[ -z "$PROVISIONING_MODE" ]]; then + # Print the menu + echo "====================================" + echo "Provisioning Mode (1-3): " + echo "====================================" + options=( + "Static: use a file share created by this script" + "Dynamic: let the CSI driver create the file share" + "Quit" + ) + # Select an option + COLUMNS=0 + select option in "${options[@]}"; do + case $option in + "Static: use a file share created by this script") + PROVISIONING_MODE='static' + break + ;; + "Dynamic: let the CSI driver create the file share") + PROVISIONING_MODE='dynamic' + break + ;; + "Quit") + exit + ;; + *) echo "invalid option $REPLY" ;; + esac + done +fi + +PROVISIONING_MODE="${PROVISIONING_MODE,,}" + +if [[ "$PROVISIONING_MODE" != 'static' && "$PROVISIONING_MODE" != 'dynamic' ]]; then + echo "Invalid provisioning mode [$PROVISIONING_MODE]: expected [static] or [dynamic]" + exit 1 +fi + +# Ask which protocol the Azure file share should use. +if [[ -z "$FILE_SHARE_PROTOCOL" ]]; then + # Print the menu + echo "====================================" + echo "File Share Protocol (1-3): " + echo "====================================" + options=( + "SMB: mounted with the storage account key" + "NFS: mounted from a virtual network, no key" + "Quit" + ) + # Select an option + COLUMNS=0 + select option in "${options[@]}"; do + case $option in + "SMB: mounted with the storage account key") + FILE_SHARE_PROTOCOL='smb' + break + ;; + "NFS: mounted from a virtual network, no key") + FILE_SHARE_PROTOCOL='nfs' + break + ;; + "Quit") + exit + ;; + *) echo "invalid option $REPLY" ;; + esac + done +fi + +FILE_SHARE_PROTOCOL="${FILE_SHARE_PROTOCOL,,}" + +if [[ "$FILE_SHARE_PROTOCOL" != 'smb' && "$FILE_SHARE_PROTOCOL" != 'nfs' ]]; then + echo "Invalid file share protocol [$FILE_SHARE_PROTOCOL]: expected [smb] or [nfs]" + exit 1 +fi + +# Persist both answers so 05-deploy-app.sh deploys the app for the same combination. +# Each value is written with ${VAR:-value} syntax, so an exported environment variable still takes +# precedence when 00-variables.sh sources this file. +cat <"$DEPLOY_OPTIONS_FILE" +# Generated by 01-deploy-resources.sh - do not edit. +# An exported environment variable takes precedence over the value stored here. +PROVISIONING_MODE="\${PROVISIONING_MODE:-$PROVISIONING_MODE}" +FILE_SHARE_PROTOCOL="\${FILE_SHARE_PROTOCOL:-$FILE_SHARE_PROTOCOL}" +EOF + +if [[ $? == 0 ]]; then + echo "Deployment options saved to [$DEPLOY_OPTIONS_FILE]" +else + echo "Failed to save the deployment options to [$DEPLOY_OPTIONS_FILE]" + exit 1 +fi + +echo "Deploying the resources for [$PROVISIONING_MODE] provisioning over [${FILE_SHARE_PROTOCOL^^}]..." + +# Create a resource group +echo "Checking if resource group [$RESOURCE_GROUP_NAME] exists in the subscription [$SUBSCRIPTION_NAME]..." +az group show --name $RESOURCE_GROUP_NAME &>/dev/null + +if [[ $? != 0 ]]; then + echo "No resource group [$RESOURCE_GROUP_NAME] exists in the subscription [$SUBSCRIPTION_NAME]" + echo "Creating resource group [$RESOURCE_GROUP_NAME] in the subscription [$SUBSCRIPTION_NAME]..." + + az group create \ + --name $RESOURCE_GROUP_NAME \ + --location "$LOCATION" \ + --only-show-errors 1>/dev/null + + if [[ $? == 0 ]]; then + echo "Resource group [$RESOURCE_GROUP_NAME] successfully created in the subscription [$SUBSCRIPTION_NAME]" + else + echo "Failed to create resource group [$RESOURCE_GROUP_NAME] in the subscription [$SUBSCRIPTION_NAME]" + exit 1 + fi +else + echo "Resource group [$RESOURCE_GROUP_NAME] already exists in the subscription [$SUBSCRIPTION_NAME]" +fi + +# Create the Azure Container Registry +echo "Checking if [$ACR_NAME] Azure Container Registry already exists in the [$RESOURCE_GROUP_NAME] resource group..." +az acr show \ + --name "$ACR_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --only-show-errors &>/dev/null + +if [[ $? != 0 ]]; then + echo "No [$ACR_NAME] Azure Container Registry exists in the [$RESOURCE_GROUP_NAME] resource group" + echo "Creating Azure Container Registry [$ACR_NAME]..." + az acr create \ + --name "$ACR_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --location "$LOCATION" \ + --sku "$ACR_SKU" \ + --admin-enabled "true" \ + --only-show-errors 1>/dev/null + + if [ $? -eq 0 ]; then + echo "Azure Container Registry [$ACR_NAME] created successfully." + else + echo "Failed to create Azure Container Registry [$ACR_NAME]." + exit 1 + fi +else + echo "[$ACR_NAME] Azure Container Registry already exists in the [$RESOURCE_GROUP_NAME] resource group" +fi + +# In dynamic mode there is nothing else to create: the Azure Files CSI driver creates the storage +# account and the file share in the node resource group when the PersistentVolumeClaim is bound. +if [[ "$PROVISIONING_MODE" == 'dynamic' ]]; then + echo "Dynamic provisioning selected: the Azure Files CSI driver creates the storage account and the [$FILE_SHARE_NAME] file share when the [$PERSISTENT_VOLUME_CLAIM_NAME] persistent volume claim is bound by 05-deploy-app.sh." + exit 0 +fi + +# Static provisioning: create the storage account and the file share the PersistentVolume points at. +if [[ "$FILE_SHARE_PROTOCOL" == 'smb' ]]; then + STORAGE_ACCOUNT_NAME="$SMB_STORAGE_ACCOUNT_NAME" + STORAGE_ACCOUNT_KIND="$SMB_STORAGE_ACCOUNT_KIND" + STORAGE_ACCOUNT_SKU="$SMB_STORAGE_ACCOUNT_SKU" + ENABLED_PROTOCOLS='SMB' + + # An SMB share is mounted with the account key over an encrypted connection, so secure transfer + # stays on and the account keeps its default network access. + STORAGE_ACCOUNT_EXTRA_ARGS=(--https-only true) + FILE_SHARE_EXTRA_ARGS=() +else + STORAGE_ACCOUNT_NAME="$NFS_STORAGE_ACCOUNT_NAME" + STORAGE_ACCOUNT_KIND="$NFS_STORAGE_ACCOUNT_KIND" + STORAGE_ACCOUNT_SKU="$NFS_STORAGE_ACCOUNT_SKU" + ENABLED_PROTOCOLS='NFS' + + # An NFSv4.1 mount is not encrypted in transit unless the client uses the AZNFS TLS helper, so + # secure transfer has to be off for the CSI driver to mount the share + # (https://learn.microsoft.com/en-us/azure/storage/files/files-nfs-protocol). + STORAGE_ACCOUNT_EXTRA_ARGS=(--https-only false) + + # NoRootSquash lets the init container of the deployment chown the mount point as root, which is + # how the NFS variant makes the share writable by the non-root user of the app. + FILE_SHARE_EXTRA_ARGS=(--root-squash NoRootSquash) +fi + +echo "Checking if storage account [$STORAGE_ACCOUNT_NAME] exists in the resource group [$RESOURCE_GROUP_NAME]..." +az storage account show \ + --name $STORAGE_ACCOUNT_NAME \ + --resource-group $RESOURCE_GROUP_NAME &>/dev/null + +if [[ $? != 0 ]]; then + echo "Creating [$STORAGE_ACCOUNT_KIND] storage account [$STORAGE_ACCOUNT_NAME] with the [$STORAGE_ACCOUNT_SKU] sku..." + az storage account create \ + --name $STORAGE_ACCOUNT_NAME \ + --location "$LOCATION" \ + --resource-group $RESOURCE_GROUP_NAME \ + --kind $STORAGE_ACCOUNT_KIND \ + --sku $STORAGE_ACCOUNT_SKU \ + "${STORAGE_ACCOUNT_EXTRA_ARGS[@]}" \ + --only-show-errors 1>/dev/null + + if [ $? -eq 0 ]; then + echo "Storage account [$STORAGE_ACCOUNT_NAME] created successfully." + else + echo "Failed to create storage account [$STORAGE_ACCOUNT_NAME]." + exit 1 + fi +else + echo "Storage account [$STORAGE_ACCOUNT_NAME] already exists in the [$RESOURCE_GROUP_NAME] resource group" +fi + +# An NFS share has no user-based authentication: access is granted by network rules only, so the +# account must be restricted to the subnets of the AKS nodes that mount the share. The subnets are +# read from the cluster itself, so this works with either of the two cluster provisioning scripts. +# The Microsoft.Storage service endpoint on those subnets is enabled by the cluster script. +if [[ "$FILE_SHARE_PROTOCOL" == 'nfs' ]]; then + echo "Retrieving the node subnets of the [$AKS_CLUSTER_NAME] AKS cluster..." + node_subnet_ids=$(az aks show \ + --name $AKS_CLUSTER_NAME \ + --resource-group $RESOURCE_GROUP_NAME \ + --query "agentPoolProfiles[?vnetSubnetId!=null].vnetSubnetId" \ + --output tsv \ + --only-show-errors 2>/dev/null | sort --unique) + + if [[ -z "$node_subnet_ids" ]]; then + echo "WARNING: no node subnet found for the [$AKS_CLUSTER_NAME] AKS cluster: the [$STORAGE_ACCOUNT_NAME] storage account is left open to all networks." + echo "WARNING: on Azure the NFS mount will fail, because an NFS share can only be reached from a restricted network." + else + network_rules_added='true' + + for node_subnet_id in $node_subnet_ids; do + echo "Allowing access to the [$STORAGE_ACCOUNT_NAME] storage account from the [$(basename "$node_subnet_id")] subnet..." + az storage account network-rule add \ + --account-name $STORAGE_ACCOUNT_NAME \ + --resource-group $RESOURCE_GROUP_NAME \ + --subnet "$node_subnet_id" \ + --only-show-errors 1>/dev/null + + if [[ $? != 0 ]]; then + network_rules_added='false' + echo "WARNING: failed to allow access from the [$(basename "$node_subnet_id")] subnet to the [$STORAGE_ACCOUNT_NAME] storage account." + fi + done + + # The account is closed to every other network only once every subnet rule is in place: + # denying by default while a rule is missing would lock the nodes out of their own share. + if [[ "$network_rules_added" == 'true' ]]; then + echo "Restricting the [$STORAGE_ACCOUNT_NAME] storage account to the node subnets..." + az storage account update \ + --name $STORAGE_ACCOUNT_NAME \ + --resource-group $RESOURCE_GROUP_NAME \ + --default-action Deny \ + --only-show-errors 1>/dev/null + + if [[ $? == 0 ]]; then + echo "The [$STORAGE_ACCOUNT_NAME] storage account is now reachable from the node subnets only." + else + echo "WARNING: failed to restrict the [$STORAGE_ACCOUNT_NAME] storage account to the node subnets." + echo "WARNING: on Azure the NFS mount will fail, because an NFS share can only be reached from a restricted network." + fi + else + echo "WARNING: the [$STORAGE_ACCOUNT_NAME] storage account is left open to all networks, because at least one subnet rule could not be created." + echo "WARNING: on Azure the NFS mount will fail, because an NFS share can only be reached from a restricted network." + fi + fi +fi + +# Create the Azure file share. +# az storage share-rm talks to the storage resource provider (the control plane) instead of the file +# data plane, which is what makes --enabled-protocols and --root-squash available and lets the share +# be created without an account key. +echo "Checking if file share [$FILE_SHARE_NAME] exists in storage account [$STORAGE_ACCOUNT_NAME]..." +az storage share-rm show \ + --name $FILE_SHARE_NAME \ + --storage-account $STORAGE_ACCOUNT_NAME \ + --resource-group $RESOURCE_GROUP_NAME \ + --only-show-errors &>/dev/null + +if [[ $? != 0 ]]; then + echo "Creating [$ENABLED_PROTOCOLS] file share [$FILE_SHARE_NAME] with a quota of [$FILE_SHARE_QUOTA_GB] GiB..." + az storage share-rm create \ + --name $FILE_SHARE_NAME \ + --storage-account $STORAGE_ACCOUNT_NAME \ + --resource-group $RESOURCE_GROUP_NAME \ + --enabled-protocols $ENABLED_PROTOCOLS \ + --quota $FILE_SHARE_QUOTA_GB \ + "${FILE_SHARE_EXTRA_ARGS[@]}" \ + --only-show-errors 1>/dev/null + + if [ $? -eq 0 ]; then + echo "File share [$FILE_SHARE_NAME] created successfully." + else + echo "Failed to create file share [$FILE_SHARE_NAME]." + exit 1 + fi +else + echo "File share [$FILE_SHARE_NAME] already exists in the [$STORAGE_ACCOUNT_NAME] storage account" +fi + +echo "The [$FILE_SHARE_NAME] $ENABLED_PROTOCOLS file share of the [$STORAGE_ACCOUNT_NAME] storage account is ready to be mounted by the app." diff --git a/samples/web-app-file-storage/scripts/02-build-docker-image.sh b/samples/web-app-file-storage/scripts/02-build-docker-image.sh new file mode 100755 index 0000000..a0c0f10 --- /dev/null +++ b/samples/web-app-file-storage/scripts/02-build-docker-image.sh @@ -0,0 +1,18 @@ +#!/bin/bash + +# Variables +source ./00-variables.sh + +# Change the current directory to the script's directory +cd "$CURRENT_DIR" || exit + +# Build context: the src/ folder (contains app.py, requirements.txt, static/, templates/). +# The Dockerfile lives alongside this script, so we point -f at it explicitly. +BUILD_CONTEXT="../src" + +# Build the docker image +docker build \ + -t $IMAGE_NAME:$IMAGE_TAG \ + -f Dockerfile \ + --build-arg PORT=$PORT \ + $BUILD_CONTEXT diff --git a/samples/web-app-file-storage/scripts/03-run-docker-container.sh b/samples/web-app-file-storage/scripts/03-run-docker-container.sh new file mode 100755 index 0000000..de57b4e --- /dev/null +++ b/samples/web-app-file-storage/scripts/03-run-docker-container.sh @@ -0,0 +1,41 @@ +#!/bin/bash + +# Variables +source ./00-variables.sh + +# Change the current directory to the script's directory +cd "$CURRENT_DIR" || exit + +# Local smoke test: no Azure resource is involved. In the cluster the app writes to an Azure file +# share mounted by the Azure Files CSI driver, and here it writes to a directory on the host mounted +# at the same path, which is all the app knows about its storage. +ACTIVITIES_HOST_DIR="${TMPDIR:-/tmp}/${IMAGE_NAME}-activities" + +echo "Creating the local activities directory [$ACTIVITIES_HOST_DIR]..." +mkdir -p "$ACTIVITIES_HOST_DIR" + +if [[ $? != 0 ]]; then + echo "Failed to create the local activities directory [$ACTIVITIES_HOST_DIR]." + exit 1 +fi + +# The container runs as uid 1000, which is not necessarily the owner of a directory on the host +chmod 0777 "$ACTIVITIES_HOST_DIR" + +if [[ $? != 0 ]]; then + echo "Failed to make the local activities directory [$ACTIVITIES_HOST_DIR] writable." + exit 1 +fi + +echo "The activities are stored as text files in [$ACTIVITIES_HOST_DIR]." + +# --network=host so endpoints like *.localhost.localstack.cloud resolve to the +# host's loopback (where LocalStack is listening), not the container's. +docker run -it \ + --rm \ + --network=host \ + -e PORT=$PORT \ + -e ACTIVITIES_DIR="$ACTIVITIES_DIR" \ + -v "$ACTIVITIES_HOST_DIR:$ACTIVITIES_DIR" \ + --name "$IMAGE_NAME" \ + "$IMAGE_NAME:$IMAGE_TAG" diff --git a/samples/web-app-file-storage/scripts/04-push-docker-image.sh b/samples/web-app-file-storage/scripts/04-push-docker-image.sh new file mode 100755 index 0000000..a1b7518 --- /dev/null +++ b/samples/web-app-file-storage/scripts/04-push-docker-image.sh @@ -0,0 +1,40 @@ +#!/bin/bash + +# Variables +source ./00-variables.sh + +# Login to ACR +echo "Logging into Azure Container Registry [$ACR_NAME]..." +az acr login --name $ACR_NAME + +# Retrieve ACR login server. Each container image needs to be tagged with the loginServer name of the registry. +ACR_LOGIN_SERVER=$(az acr show --name $ACR_NAME --query loginServer --output tsv) + +if [ $? -eq 0 ]; then + echo "Logged into Azure Container Registry [$ACR_NAME] successfully." +else + echo "Failed to log into Azure Container Registry [$ACR_NAME]." + exit 1 +fi + +FULL_IMAGE="${ACR_LOGIN_SERVER}/${IMAGE_NAME}:${IMAGE_TAG}" + +# Tag the local image with the loginServer of ACR +docker tag ${IMAGE_NAME,,}:$IMAGE_TAG $ACR_LOGIN_SERVER/${IMAGE_NAME,,}:$IMAGE_TAG + +if [ $? -eq 0 ]; then + echo "Docker image [$IMAGE_NAME] tagged as [$FULL_IMAGE] successfully." +else + echo "Failed to tag Docker image [$IMAGE_NAME] as [$FULL_IMAGE]." + exit 1 +fi + +# Push the container image to ACR +docker push $ACR_LOGIN_SERVER/${IMAGE_NAME,,}:$IMAGE_TAG + +if [ $? -eq 0 ]; then + echo "Docker image [$FULL_IMAGE] pushed to ACR successfully." +else + echo "Failed to push Docker image [$FULL_IMAGE] to ACR." + exit 1 +fi diff --git a/samples/web-app-file-storage/scripts/05-deploy-app.sh b/samples/web-app-file-storage/scripts/05-deploy-app.sh new file mode 100755 index 0000000..089b0e3 --- /dev/null +++ b/samples/web-app-file-storage/scripts/05-deploy-app.sh @@ -0,0 +1,209 @@ +#!/bin/bash + +# Variables +source ./00-variables.sh + +# Change the current directory to the script's directory +cd "$CURRENT_DIR" || exit + +# The combination to deploy is the one chosen in 01-deploy-resources.sh, which persisted it to +# .deploy-options.env, or the one exported in the environment. It is never guessed here: deploying a +# static volume for a file share that was never created, or an NFS volume against an SMB share, leaves +# the pods stuck in ContainerCreating with a mount error. +if [[ -z "$PROVISIONING_MODE" || -z "$FILE_SHARE_PROTOCOL" ]]; then + echo "The provisioning mode and the file share protocol are not set." + echo "Run ./01-deploy-resources.sh first, or export PROVISIONING_MODE (static|dynamic) and FILE_SHARE_PROTOCOL (smb|nfs)." + exit 1 +fi + +if [[ "$PROVISIONING_MODE" != 'static' && "$PROVISIONING_MODE" != 'dynamic' ]]; then + echo "Invalid provisioning mode [$PROVISIONING_MODE]: expected [static] or [dynamic]" + exit 1 +fi + +if [[ "$FILE_SHARE_PROTOCOL" != 'smb' && "$FILE_SHARE_PROTOCOL" != 'nfs' ]]; then + echo "Invalid file share protocol [$FILE_SHARE_PROTOCOL]: expected [smb] or [nfs]" + exit 1 +fi + +echo "Deploying the app with [$PROVISIONING_MODE] provisioning over [${FILE_SHARE_PROTOCOL^^}]..." + +# Pick the storage account that holds the file share for the selected protocol +if [[ "$FILE_SHARE_PROTOCOL" == 'nfs' ]]; then + STORAGE_ACCOUNT_NAME="$NFS_STORAGE_ACCOUNT_NAME" +else + STORAGE_ACCOUNT_NAME="$SMB_STORAGE_ACCOUNT_NAME" +fi + +# Generate a stable Flask SECRET_KEY (sessions survive pod restarts) +SECRET_KEY=$(openssl rand -hex 32) + +# Get the login server for the Azure Container Registry +echo "Getting login server for Azure Container Registry [$ACR_NAME]..." +ACR_LOGIN_SERVER=$(az acr show \ + --name "$ACR_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --query "loginServer" \ + --output tsv \ + --only-show-errors) + +if [ -n "$ACR_LOGIN_SERVER" ]; then + echo "Login server retrieved successfully: $ACR_LOGIN_SERVER" +else + echo "Failed to retrieve login server for Azure Container Registry [$ACR_NAME]." + exit 1 +fi + +FULL_IMAGE="${ACR_LOGIN_SERVER}/${IMAGE_NAME}:${IMAGE_TAG}" + +# Create namespace +cat namespace.yml | +yq "(.metadata.name)|="\""$NAMESPACE"\" | +kubectl apply -f - + +# Create secret with the Flask secret key. Unlike the sibling samples, no storage credential is +# passed to the app: it reads and writes files on the mounted share and never authenticates to Azure. +cat secret.yml | +yq "(.metadata.namespace)|="\""$NAMESPACE"\" | +yq "(.metadata.name)|="\""$SECRET_NAME"\" | +yq "(.data.SECRET_KEY)|="\""$(echo -n $SECRET_KEY | base64 -w0)"\" | +kubectl apply -f - + +# Create configmap with environment variables +cat configmap.yml | +yq "(.metadata.namespace)|="\""$NAMESPACE"\" | +yq "(.metadata.name)|="\""$CONFIGMAP_NAME"\" | +yq "(.data.ACTIVITIES_DIR)|="\""$ACTIVITIES_DIR"\" | +kubectl apply -f - + +# Create the configmap holding the sample activities used to seed the file share +cat seed-configmap.yml | +yq "(.metadata.namespace)|="\""$NAMESPACE"\" | +yq "(.metadata.name)|="\""$SEED_CONFIGMAP_NAME"\" | +kubectl apply -f - + +if [[ "$PROVISIONING_MODE" == 'static' ]]; then + # Static provisioning: bind the claim to a volume that points at the file share created by + # 01-deploy-resources.sh. + if [[ "$FILE_SHARE_PROTOCOL" == 'smb' ]]; then + # The driver mounts an SMB share with the storage account key, so it needs the key in a secret + echo "Retrieving the key of the [$STORAGE_ACCOUNT_NAME] storage account..." + STORAGE_ACCOUNT_KEY=$(az storage account keys list \ + --account-name $STORAGE_ACCOUNT_NAME \ + --resource-group $RESOURCE_GROUP_NAME \ + --query "[0].value" \ + --output tsv \ + --only-show-errors) + + if [ -z "$STORAGE_ACCOUNT_KEY" ]; then + echo "Failed to retrieve the key of the [$STORAGE_ACCOUNT_NAME] storage account." + exit 1 + fi + + cat storage-secret.yml | + yq "(.metadata.namespace)|="\""$NAMESPACE"\" | + yq "(.metadata.name)|="\""$STORAGE_SECRET_NAME"\" | + yq "(.data.azurestorageaccountname)|="\""$(echo -n $STORAGE_ACCOUNT_NAME | base64 -w0)"\" | + yq "(.data.azurestorageaccountkey)|="\""$(echo -n $STORAGE_ACCOUNT_KEY | base64 -w0)"\" | + kubectl apply -f - + + # The SMB and NFS volumes are applied by two separate pipelines on purpose: yq's |= operator + # creates a missing path, so setting nodeStageSecretRef.namespace on the NFS volume would add a + # secret reference to a volume that must not have one. + cat persistentvolume-smb.yml | + yq "(.metadata.name)|="\""$PERSISTENT_VOLUME_NAME"\" | + yq "(.spec.csi.volumeHandle)|="\""${RESOURCE_GROUP_NAME}#${STORAGE_ACCOUNT_NAME}#${FILE_SHARE_NAME}"\" | + yq "(.spec.csi.volumeAttributes.resourceGroup)|="\""$RESOURCE_GROUP_NAME"\" | + yq "(.spec.csi.volumeAttributes.storageAccount)|="\""$STORAGE_ACCOUNT_NAME"\" | + yq "(.spec.csi.volumeAttributes.shareName)|="\""$FILE_SHARE_NAME"\" | + yq "(.spec.csi.nodeStageSecretRef.name)|="\""$STORAGE_SECRET_NAME"\" | + yq "(.spec.csi.nodeStageSecretRef.namespace)|="\""$NAMESPACE"\" | + kubectl apply -f - + else + cat persistentvolume-nfs.yml | + yq "(.metadata.name)|="\""$PERSISTENT_VOLUME_NAME"\" | + yq "(.spec.csi.volumeHandle)|="\""${RESOURCE_GROUP_NAME}#${STORAGE_ACCOUNT_NAME}#${FILE_SHARE_NAME}"\" | + yq "(.spec.csi.volumeAttributes.resourceGroup)|="\""$RESOURCE_GROUP_NAME"\" | + yq "(.spec.csi.volumeAttributes.storageAccount)|="\""$STORAGE_ACCOUNT_NAME"\" | + yq "(.spec.csi.volumeAttributes.shareName)|="\""$FILE_SHARE_NAME"\" | + kubectl apply -f - + fi + + # The claim is committed in its static shape, so it is applied as it is + cat persistentvolumeclaim.yml | + yq "(.metadata.namespace)|="\""$NAMESPACE"\" | + yq "(.metadata.name)|="\""$PERSISTENT_VOLUME_CLAIM_NAME"\" | + yq "(.spec.volumeName)|="\""$PERSISTENT_VOLUME_NAME"\" | + kubectl apply -f - +else + # Dynamic provisioning: the CSI driver creates the storage account and the file share when the + # claim is bound, so there is no volume to create, only a storage class to select. + if [[ "$FILE_SHARE_PROTOCOL" == 'nfs' ]]; then + # None of the built-in azurefile* classes provisions an NFS share + cat storageclass-nfs.yml | + yq "(.metadata.name)|="\""$NFS_STORAGE_CLASS_NAME"\" | + kubectl apply -f - + + STORAGE_CLASS_NAME="$NFS_STORAGE_CLASS_NAME" + else + STORAGE_CLASS_NAME="$SMB_STORAGE_CLASS_NAME" + + echo "Checking if the [$STORAGE_CLASS_NAME] storage class exists in the cluster..." + kubectl get storageclass "$STORAGE_CLASS_NAME" &>/dev/null + + if [[ $? != 0 ]]; then + echo "No [$STORAGE_CLASS_NAME] storage class exists in the cluster." + echo "It is installed with the Azure Files CSI driver: check that the driver is enabled with" + echo " az aks show --name $AKS_CLUSTER_NAME --resource-group $RESOURCE_GROUP_NAME --query storageProfile.fileCsiDriver" + exit 1 + fi + fi + + # Drop the static binding and let the storage class provision the volume + cat persistentvolumeclaim.yml | + yq "(.metadata.namespace)|="\""$NAMESPACE"\" | + yq "(.metadata.name)|="\""$PERSISTENT_VOLUME_CLAIM_NAME"\" | + yq "del(.spec.volumeName)" | + yq "(.spec.storageClassName)|="\""$STORAGE_CLASS_NAME"\" | + kubectl apply -f - +fi + +# Create deployment +cat deployment.yml | +yq "(.metadata.namespace)|="\""$NAMESPACE"\" | +yq "(.metadata.name)|="\""$DEPLOYMENT_NAME"\" | +yq "(.spec.template.spec.volumes[0].persistentVolumeClaim.claimName)|="\""$PERSISTENT_VOLUME_CLAIM_NAME"\" | +yq "(.spec.template.spec.volumes[1].configMap.name)|="\""$SEED_CONFIGMAP_NAME"\" | +yq "(.spec.template.spec.initContainers[0].image)|="\""$FULL_IMAGE"\" | +yq "(.spec.template.spec.initContainers[0].imagePullPolicy)|="\""$IMAGE_PULL_POLICY"\" | +yq "(.spec.template.spec.initContainers[0].env[0].value)|="\""$FILE_SHARE_PROTOCOL"\" | +yq "(.spec.template.spec.initContainers[0].env[1].valueFrom.configMapKeyRef.name)|="\""$CONFIGMAP_NAME"\" | +yq "(.spec.template.spec.initContainers[0].volumeMounts[0].mountPath)|="\""$ACTIVITIES_DIR"\" | +yq "(.spec.template.spec.containers[0].image)|="\""$FULL_IMAGE"\" | +yq "(.spec.template.spec.containers[0].imagePullPolicy)|="\""$IMAGE_PULL_POLICY"\" | +yq "(.spec.template.spec.containers[0].ports[0].containerPort)|=$PORT" | +yq "(.spec.template.spec.containers[0].env[0].valueFrom.configMapKeyRef.name)|="\""$CONFIGMAP_NAME"\" | +yq "(.spec.template.spec.containers[0].env[1].valueFrom.secretKeyRef.name)|="\""$SECRET_NAME"\" | +yq "(.spec.template.spec.containers[0].volumeMounts[0].mountPath)|="\""$ACTIVITIES_DIR"\" | +kubectl apply -f - + +# Create service +cat service.yml | +yq "(.metadata.namespace)|="\""$NAMESPACE"\" | +yq "(.metadata.name)|="\""$SERVICE_NAME"\" | +kubectl apply -f - + +# Wait for the rollout, so an unattended run of the scripts fails here instead of appearing to succeed +# while the pods are unable to mount the file share. +echo "Waiting for the [$DEPLOYMENT_NAME] deployment to roll out..." +kubectl rollout status "deployment/$DEPLOYMENT_NAME" --namespace "$NAMESPACE" --timeout=600s + +if [[ $? == 0 ]]; then + echo "The app is running. Browse to it with:" + echo " kubectl port-forward service/$SERVICE_NAME 8080:80 --namespace $NAMESPACE" +else + echo "The [$DEPLOYMENT_NAME] deployment did not roll out. Inspect the pods with:" + echo " kubectl get pods --namespace $NAMESPACE" + echo " kubectl describe pod --selector app=$DEPLOYMENT_NAME --namespace $NAMESPACE" + exit 1 +fi diff --git a/samples/web-app-file-storage/scripts/Dockerfile b/samples/web-app-file-storage/scripts/Dockerfile new file mode 100644 index 0000000..3b30f9c --- /dev/null +++ b/samples/web-app-file-storage/scripts/Dockerfile @@ -0,0 +1,56 @@ +# Stage 1 - Install build dependencies +FROM python:3.13-slim AS builder + +WORKDIR /app + +ENV PYTHONDONTWRITEBYTECODE=1 +ENV PYTHONUNBUFFERED=1 + +RUN apt-get update && apt-get install -y --no-install-recommends \ + build-essential \ + curl \ + && rm -rf /var/lib/apt/lists/* + +RUN python -m venv /opt/venv +ENV PATH="/opt/venv/bin:$PATH" + +COPY requirements.txt . + +RUN pip install --no-cache-dir -r requirements.txt + +# Stage 2 - Runtime image +FROM python:3.13-slim + +ARG PORT=8080 + +# Uid and gid of the user the app runs as. Unlike the other samples, these are pinned to a known +# value instead of being allocated by `adduser --system`: the app writes to an Azure file share, and +# the identity that must be able to write to it appears in the mount options of the SMB volume +# (uid=1000,gid=1000) and in the ownership of the NFS share. An unpredictable system uid would make +# the volume read-only for the app. +ARG APP_UID=1000 +ARG APP_GID=1000 + +ENV PYTHONDONTWRITEBYTECODE=1 +ENV PYTHONUNBUFFERED=1 +ENV PATH="/opt/venv/bin:$PATH" +ENV PORT=${PORT} + +WORKDIR /app + +COPY --from=builder /opt/venv /opt/venv + +COPY app.py ./ +COPY gunicorn.conf.py ./ +COPY static ./static +COPY templates ./templates + +RUN groupadd --gid ${APP_GID} app \ + && useradd --uid ${APP_UID} --gid app --home-dir /home/app --create-home --shell /usr/sbin/nologin app \ + && chown -R app:app /app /home/app +USER app +ENV HOME=/home/app + +EXPOSE ${PORT} + +CMD ["sh", "-c", "exec gunicorn -c gunicorn.conf.py --bind 0.0.0.0:${PORT} --access-logfile - --error-logfile - app:app"] diff --git a/samples/web-app-file-storage/scripts/configmap.yml b/samples/web-app-file-storage/scripts/configmap.yml new file mode 100644 index 0000000..1b178c4 --- /dev/null +++ b/samples/web-app-file-storage/scripts/configmap.yml @@ -0,0 +1,11 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: vacation-planner-file-config + namespace: vacation-planner-file + labels: + app: vacation-planner-file +data: + # Directory where the Azure file share is mounted in the pods. It is the only thing the app knows + # about its storage: the app reads and writes plain files and uses no Azure SDK at all. + ACTIVITIES_DIR: "/data" diff --git a/samples/web-app-file-storage/scripts/deployment.yml b/samples/web-app-file-storage/scripts/deployment.yml new file mode 100644 index 0000000..293634b --- /dev/null +++ b/samples/web-app-file-storage/scripts/deployment.yml @@ -0,0 +1,159 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: vacation-planner-file + namespace: vacation-planner-file + labels: + app: vacation-planner-file +spec: + replicas: 3 + selector: + matchLabels: + app: vacation-planner-file + strategy: + rollingUpdate: + maxSurge: 1 + maxUnavailable: 0 + type: RollingUpdate + minReadySeconds: 5 + template: + metadata: + labels: + app: vacation-planner-file + spec: + nodeSelector: + kubernetes.io/os: linux + volumes: + # The Azure file share, mounted by the Azure Files CSI driver. All three replicas mount the + # same share, which is what makes the activities they serve identical. + - name: activities + persistentVolumeClaim: + claimName: vacation-planner-file-pvc + # The sample activities the init container copies into the share when they are missing + - name: seed + configMap: + name: vacation-planner-file-seed + # Prepares the file share before the app starts, and runs as root, which is why the app + # container declares its own securityContext instead of the pod declaring it for both. + # + # On NFS it takes ownership of the mount point: an NFS share carries real POSIX ownership, + # arrives owned by root, and ignores the uid and gid mount options that solve this for SMB. + # securityContext.fsGroup is not an alternative: the file.csi.azure.com CSIDriver object + # declares fsGroupPolicy: ReadWriteOnceWithFSType, so the kubelet applies fsGroup only to a + # ReadWriteOnce volume with a file system type, and this volume is ReadWriteMany. Setting + # fsGroup here would silently do nothing. The chown is not recursive: files created by the app + # already belong to it, and a recursive chown over NFS would make every pod start slower as the + # share fills up. + # + # It then seeds the share with the sample activities, skipping the files that are already there, + # so the three replicas starting at the same time cannot conflict. + initContainers: + - name: init-file-share + image: .azurecr.io/vacation-planner-file:v1 + imagePullPolicy: Always + securityContext: + runAsUser: 0 + runAsGroup: 0 + env: + # Set to smb or nfs by 05-deploy-app.sh. The chown must not run on an SMB mount, where it + # fails with EPERM because the CIFS client synthesizes ownership from the mount options. + - name: FILE_SHARE_PROTOCOL + value: smb + - name: ACTIVITIES_DIR + valueFrom: + configMapKeyRef: + name: vacation-planner-file-config + key: ACTIVITIES_DIR + command: + - /bin/sh + - -c + - | + set -e + + if [ "$FILE_SHARE_PROTOCOL" = "nfs" ]; then + echo "Taking ownership of $ACTIVITIES_DIR as uid 1000..." + chown 1000:1000 "$ACTIVITIES_DIR" + chmod 0755 "$ACTIVITIES_DIR" + fi + + for file in /seed/*-activity.txt; do + [ -e "$file" ] || continue + + name=$(basename "$file") + + if [ -e "$ACTIVITIES_DIR/$name" ]; then + echo "Activity file [$name] already exists in the file share, skipping it..." + continue + fi + + echo "Seeding the file share with the activity file [$name]..." + cp "$file" "$ACTIVITIES_DIR/$name" + + if [ "$FILE_SHARE_PROTOCOL" = "nfs" ]; then + chown 1000:1000 "$ACTIVITIES_DIR/$name" + fi + done + + echo "The file share is ready." + volumeMounts: + - name: activities + mountPath: /data + - name: seed + mountPath: /seed + readOnly: true + resources: + requests: + cpu: "100m" + memory: "128Mi" + limits: + cpu: "500m" + memory: "256Mi" + containers: + - name: vacation-planner-file + image: .azurecr.io/vacation-planner-file:v1 + imagePullPolicy: Always + # The image already runs as this user, declared here as well because it is the identity the + # mount options of the SMB volume and the ownership of the NFS share are aligned with. + securityContext: + runAsUser: 1000 + runAsGroup: 1000 + ports: + - name: http + containerPort: 8080 + env: + - name: ACTIVITIES_DIR + valueFrom: + configMapKeyRef: + name: vacation-planner-file-config + key: ACTIVITIES_DIR + - name: SECRET_KEY + valueFrom: + secretKeyRef: + name: vacation-planner-file-secrets + key: SECRET_KEY + volumeMounts: + - name: activities + mountPath: /data + resources: + requests: + cpu: "100m" + memory: "128Mi" + limits: + cpu: "500m" + memory: "256Mi" + livenessProbe: + httpGet: + path: / + port: http + initialDelaySeconds: 15 + periodSeconds: 30 + timeoutSeconds: 5 + failureThreshold: 3 + readinessProbe: + httpGet: + path: / + port: http + initialDelaySeconds: 5 + periodSeconds: 10 + timeoutSeconds: 3 + failureThreshold: 3 diff --git a/samples/web-app-file-storage/scripts/namespace.yml b/samples/web-app-file-storage/scripts/namespace.yml new file mode 100644 index 0000000..d19adf9 --- /dev/null +++ b/samples/web-app-file-storage/scripts/namespace.yml @@ -0,0 +1,4 @@ +kind: Namespace +apiVersion: v1 +metadata: + name: vacation-planner-file diff --git a/samples/web-app-file-storage/scripts/persistentvolume-nfs.yml b/samples/web-app-file-storage/scripts/persistentvolume-nfs.yml new file mode 100644 index 0000000..2c20104 --- /dev/null +++ b/samples/web-app-file-storage/scripts/persistentvolume-nfs.yml @@ -0,0 +1,42 @@ +apiVersion: v1 +kind: PersistentVolume +metadata: + name: vacation-planner-file-pv + annotations: + pv.kubernetes.io/provisioned-by: file.csi.azure.com + labels: + app: vacation-planner-file +spec: + capacity: + storage: 100Gi + accessModes: + # Every replica of the deployment mounts the same share at the same time + - ReadWriteMany + # Retain, so deleting the claim leaves the file share and its activities untouched + persistentVolumeReclaimPolicy: Retain + # No storage class on purpose: the claim in persistentvolumeclaim.yml sets storageClassName to the + # empty string and binds to this volume by name, so no provisioner ever looks at it. + mountOptions: + # Mount options recommended by the Azure Files CSI driver documentation for NFS + # (https://learn.microsoft.com/en-us/azure/aks/azure-csi-files-storage-provision): four + # connections to the share, no reserved source port, and a 30 second attribute cache. + # + # Unlike the SMB volume, there are no uid, gid or mode options here: an NFS share carries real + # POSIX ownership and ignores them. The init container of the deployment chowns the mount point + # to uid 1000 instead. + - nconnect=4 + - noresvport + - actimeo=30 + csi: + driver: file.csi.azure.com + # Must be unique per share in the cluster: {resource group}#{storage account}#{file share} + volumeHandle: "resource-group#storage-account#file-share" + volumeAttributes: + # Without this the driver mounts the share over SMB and the mount fails, because the share of a + # premium FileStorage account created with --enabled-protocols NFS speaks NFSv4.1 only. + protocol: nfs + resourceGroup: resource-group + storageAccount: storage-account + shareName: file-share + # No nodeStageSecretRef: an NFS share has no key-based authentication. Access is granted by the + # network rules of the storage account, which 01-deploy-resources.sh restricts to the node subnets. diff --git a/samples/web-app-file-storage/scripts/persistentvolume-smb.yml b/samples/web-app-file-storage/scripts/persistentvolume-smb.yml new file mode 100644 index 0000000..e8ae7f6 --- /dev/null +++ b/samples/web-app-file-storage/scripts/persistentvolume-smb.yml @@ -0,0 +1,45 @@ +apiVersion: v1 +kind: PersistentVolume +metadata: + name: vacation-planner-file-pv + annotations: + pv.kubernetes.io/provisioned-by: file.csi.azure.com + labels: + app: vacation-planner-file +spec: + capacity: + storage: 100Gi + accessModes: + # Every replica of the deployment mounts the same share at the same time + - ReadWriteMany + # Retain, so deleting the claim leaves the file share and its activities untouched + persistentVolumeReclaimPolicy: Retain + # No storage class on purpose: the claim in persistentvolumeclaim.yml sets storageClassName to the + # empty string and binds to this volume by name, so no provisioner ever looks at it. + mountOptions: + # Permissions recommended by the Azure Files CSI driver documentation for a static SMB volume + # (https://learn.microsoft.com/en-us/azure/aks/azure-csi-files-storage-provision). The app runs as + # uid 1000, so the volume is mounted with that identity: the CIFS client synthesizes the ownership + # of every file and directory from these options, which is why the SMB variant needs no chown. + - dir_mode=0755 + - file_mode=0755 + - uid=1000 + - gid=1000 + - mfsymlinks + - cache=strict + - nosharesock + # Reduce the latency of the metadata-heavy directory listing the app does on every page load. + # It also caps how long a file created by one replica can stay invisible to the others. + - actimeo=30 + csi: + driver: file.csi.azure.com + # Must be unique per share in the cluster: {resource group}#{storage account}#{file share} + volumeHandle: "resource-group#storage-account#file-share" + volumeAttributes: + resourceGroup: resource-group + storageAccount: storage-account + shareName: file-share + # The driver mounts an SMB share with the storage account key, which it reads from this secret + nodeStageSecretRef: + name: vacation-planner-file-storage + namespace: vacation-planner-file diff --git a/samples/web-app-file-storage/scripts/persistentvolumeclaim.yml b/samples/web-app-file-storage/scripts/persistentvolumeclaim.yml new file mode 100644 index 0000000..ce470d8 --- /dev/null +++ b/samples/web-app-file-storage/scripts/persistentvolumeclaim.yml @@ -0,0 +1,24 @@ +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: vacation-planner-file-pvc + namespace: vacation-planner-file + labels: + app: vacation-planner-file +spec: + # Committed in the shape used by static provisioning: the claim is bound by name to the volume + # created from persistentvolume-smb.yml or persistentvolume-nfs.yml, and the empty storage class + # keeps any provisioner (including the cluster's default storage class) from stepping in. + # + # For dynamic provisioning, 05-deploy-app.sh removes volumeName and sets storageClassName to the + # class that provisions the share: the built-in azurefile-csi for SMB, or the class created from + # storageclass-nfs.yml for NFS. + accessModes: + - ReadWriteMany + storageClassName: "" + volumeName: vacation-planner-file-pv + resources: + requests: + # 100 GiB is the minimum size of a premium file share, which the NFS variants need, so all four + # combinations of the sample can share this single claim. + storage: 100Gi diff --git a/samples/web-app-file-storage/scripts/secret.yml b/samples/web-app-file-storage/scripts/secret.yml new file mode 100644 index 0000000..6afdf57 --- /dev/null +++ b/samples/web-app-file-storage/scripts/secret.yml @@ -0,0 +1,10 @@ +apiVersion: v1 +kind: Secret +metadata: + name: vacation-planner-file-secrets + namespace: vacation-planner-file + labels: + app: vacation-planner-file +type: Opaque +data: + SECRET_KEY: "" diff --git a/samples/web-app-file-storage/scripts/seed-configmap.yml b/samples/web-app-file-storage/scripts/seed-configmap.yml new file mode 100644 index 0000000..17c6b75 --- /dev/null +++ b/samples/web-app-file-storage/scripts/seed-configmap.yml @@ -0,0 +1,24 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: vacation-planner-file-seed + namespace: vacation-planner-file + labels: + app: vacation-planner-file +data: + # Sample activities the init container of the deployment copies into the Azure file share the first + # time the app is deployed, so the share is never empty on the first page load. + # + # Each key is the name of an activity file, in the same YYYY-MM-DD-HH-MM-SS-activity.txt format the + # app itself uses, and the value is the content of the file. The names are fixed rather than + # generated at runtime, which is what makes the seeding safe when the three replicas start at once: + # every pod would copy the same name with the same content, and the init container skips a file + # that is already there. + # + # This is the only seeding mechanism, and it covers all four combinations of the sample: it runs + # inside the cluster on the mounted share, so it works for a share the CSI driver has just created + # (whose name is not known to the host) and for an NFS share (which is not reachable over the file + # data plane REST API on Azure). + 2026-01-05-09-00-00-activity.txt: "Snorkelling at Coral Bay" + 2026-01-05-09-05-00-activity.txt: "Sunset hike to the Cape lighthouse" + 2026-01-05-09-10-00-activity.txt: "Cooking class: pasta from scratch" diff --git a/samples/web-app-file-storage/scripts/service.yml b/samples/web-app-file-storage/scripts/service.yml new file mode 100644 index 0000000..a1fbe7a --- /dev/null +++ b/samples/web-app-file-storage/scripts/service.yml @@ -0,0 +1,16 @@ +apiVersion: v1 +kind: Service +metadata: + name: vacation-planner-file + namespace: vacation-planner-file + labels: + app: vacation-planner-file +spec: + type: ClusterIP + selector: + app: vacation-planner-file + ports: + - name: http + protocol: TCP + port: 80 + targetPort: http diff --git a/samples/web-app-file-storage/scripts/storage-secret.yml b/samples/web-app-file-storage/scripts/storage-secret.yml new file mode 100644 index 0000000..35ff3b5 --- /dev/null +++ b/samples/web-app-file-storage/scripts/storage-secret.yml @@ -0,0 +1,15 @@ +apiVersion: v1 +kind: Secret +metadata: + name: vacation-planner-file-storage + namespace: vacation-planner-file + labels: + app: vacation-planner-file +type: Opaque +data: + # Credentials the Azure Files CSI driver uses to mount the SMB share, referenced by the + # nodeStageSecretRef of persistentvolume-smb.yml. The two key names are fixed by the driver. + # An SMB share is mounted with the storage account key (NTLMv2), so a static SMB volume needs this + # secret; an NFS share is not authenticated by a key at all and needs no secret. + azurestorageaccountname: "" + azurestorageaccountkey: "" diff --git a/samples/web-app-file-storage/scripts/storageclass-nfs.yml b/samples/web-app-file-storage/scripts/storageclass-nfs.yml new file mode 100644 index 0000000..ff0c940 --- /dev/null +++ b/samples/web-app-file-storage/scripts/storageclass-nfs.yml @@ -0,0 +1,26 @@ +apiVersion: storage.k8s.io/v1 +kind: StorageClass +metadata: + name: vacation-planner-file-nfs + labels: + app: vacation-planner-file +# The Azure Files CSI driver installed on every AKS cluster +provisioner: file.csi.azure.com +parameters: + # None of the four built-in azurefile* storage classes sets this, which is the only reason this + # sample ships a storage class of its own: without it the driver provisions an SMB share. + protocol: nfs + # NFS Azure file shares are only available on SSD (premium) file shares + # (https://learn.microsoft.com/en-us/azure/storage/files/files-nfs-protocol). Premium accounts also + # accept PremiumV2_LRS, the provisioned v2 billing model. + skuName: Premium_LRS +mountOptions: + # Same options as the static NFS volume in persistentvolume-nfs.yml. Mount options belong to the + # storage class when the volume is provisioned dynamically, and to the volume when it is static. + - nconnect=4 + - noresvport + - actimeo=30 +# Delete, so removing the claim also removes the file share and the account the driver created for it +reclaimPolicy: Delete +volumeBindingMode: Immediate +allowVolumeExpansion: true diff --git a/samples/web-app-file-storage/src/app.py b/samples/web-app-file-storage/src/app.py new file mode 100644 index 0000000..d6e0121 --- /dev/null +++ b/samples/web-app-file-storage/src/app.py @@ -0,0 +1,221 @@ +import os +import socket +import datetime +from typing import List, Tuple +from flask import Flask, flash, render_template, request, redirect, url_for + +# Initialize Flask application +app: Flask = Flask(__name__) +app.secret_key = os.environ.get("SECRET_KEY", os.urandom(24)) + +# Directory where the Azure file share is mounted in the container. The app talks to the share +# through the file system only: no Azure SDK, no connection string, no account key. Everything +# that makes the share reachable (SMB or NFS, pre-created or provisioned on demand) is handled by +# the Azure Files CSI driver when it mounts the volume into the pod. +activities_dir: str | None = None + +# Suffix of the files holding the activities, one file per activity. +ACTIVITY_FILE_SUFFIX: str = "-activity.txt" + +# Name of the pod serving the request, shown in the UI. All replicas mount the same file share, so +# an activity added through one pod is served by every other pod as well. +pod_name: str = os.environ.get("HOSTNAME", socket.gethostname()) + +debug: bool = os.environ.get("FLASK_DEBUG", "false").lower() == "true" +activities: List[Tuple[str, str]] = [] + +def get_environment_variables(): + """Get the value of an environment variable or raise an error if not set.""" + global activities_dir + try: + # Get the mount point of the Azure file share from an environment variable + activities_dir = os.environ.get("ACTIVITIES_DIR", "/data") + + if not activities_dir: + raise ValueError("The ACTIVITIES_DIR environment variable is set to an empty value.") + except ValueError as ve: + print(f"Configuration Error: {ve}") + except Exception as ex: + print(f"An error occurred: {ex}") + +def get_activities_dir(): + """Return the mounted directory holding the activities, or None when it is not usable.""" + global activities_dir + try: + print(f"Resolving the activities directory...") + + if not activities_dir: + raise ValueError("Activities directory is not set. Please set the ACTIVITIES_DIR environment variable.") + + # A missing directory means the Azure file share was not mounted into the container: the app + # is not able to create the mount point itself, so this must fail loudly instead of writing + # to the container file system, where the data would be invisible to the other replicas and + # lost on restart. + if not os.path.isdir(activities_dir): + raise ValueError(f"Activities directory '{activities_dir}' does not exist. Is the Azure file share mounted?") + + if not os.access(activities_dir, os.W_OK | os.X_OK): + raise ValueError( + f"Activities directory '{activities_dir}' is not writable by uid {os.geteuid()}. " + "Check the mount options of the volume (SMB) or the ownership of the share (NFS)." + ) + + print(f"Activities directory '{activities_dir}' resolved successfully.") + return activities_dir + except ValueError as ve: + print(f"Configuration Error: {ve}") + return None + except Exception as ex: + print(f"An error occurred while resolving the activities directory: {ex}") + return None + +def create_activities_dir_if_not_exists(): + """Create the activities directory under the mount point if it does not already exist.""" + global activities_dir + try: + if not activities_dir: + raise ValueError("Activities directory is not set. Please call get_activities_dir() first.") + + # The mount point itself always exists (the kubelet creates it when it mounts the volume), + # so this only ever creates a subdirectory when ACTIVITIES_DIR points below the mount point. + print(f"Creating activities directory '{activities_dir}' if it does not exist.") + os.makedirs(activities_dir, exist_ok=True) + print(f"Activities directory '{activities_dir}' is ready.") + except ValueError as ve: + print(f"Configuration Error: {ve}") + except OSError as ose: + print(f"An error occurred while creating the activities directory: {ose}") + except Exception as ex: + print(f"An error occurred while creating the activities directory: {ex}") + +def read_activities_from_dir(): + """Read all the activity files from the activities directory.""" + global activities_dir, activities + try: + if not activities_dir: + raise ValueError("Activities directory is not set. Please call get_activities_dir() first.") + + # Sorted by name, which sorts by creation timestamp: the file name is the timestamp + names = sorted(name for name in os.listdir(activities_dir) if name.endswith(ACTIVITY_FILE_SUFFIX)) + + for name in names: + path = os.path.join(activities_dir, name) + + if not os.path.isfile(path): + continue + + # Read the file content + with open(path, "r", encoding="utf-8") as file: + content = file.read() + + print(f"Found activity file: {name} with size {os.path.getsize(path)} bytes") + print(f"Content of activity file '{name}': {content}") + activities.append((name, content)) + except ValueError as ve: + print(f"Configuration Error: {ve}") + except OSError as ose: + print(f"An error occurred while reading the activity files: {ose}") + except Exception as ex: + print(f"An error occurred while reading the activity files: {ex}") + +def write_activity(name: str | None, content: str | None): + """Create or overwrite an activity file in the activities directory.""" + global activities_dir + + # Check if name and content are provided + if not name or not content: + raise ValueError("Both 'name' and 'content' must be provided to write an activity.") + + try: + if not activities_dir: + raise ValueError("Activities directory is not set. Please call get_activities_dir() first.") + + # Reject a name that would escape the activities directory + if os.path.basename(name) != name: + raise ValueError(f"Invalid activity name '{name}': it must not contain a path separator.") + + path = os.path.join(activities_dir, name) + + print(f"Writing activity file '{name}' in directory '{activities_dir}'.") + with open(path, "w", encoding="utf-8") as file: + file.write(content) + print(f"Activity file '{name}' written successfully.") + except ValueError as ve: + print(f"Configuration Error: {ve}") + except OSError as ose: + print(f"An error occurred while writing the activity file: {ose}") + except Exception as ex: + print(f"An error occurred while writing the activity file: {ex}") + +def delete_activity(name: str): + """Delete an activity file from the activities directory.""" + global activities_dir + try: + if not activities_dir: + raise ValueError("Activities directory is not set. Please call get_activities_dir() first.") + + if os.path.basename(name) != name: + raise ValueError(f"Invalid activity name '{name}': it must not contain a path separator.") + + path = os.path.join(activities_dir, name) + + print(f"Deleting activity file '{name}' from directory '{activities_dir}'.") + os.remove(path) + print(f"Activity file '{name}' deleted successfully.") + except ValueError as ve: + print(f"Configuration Error: {ve}") + except FileNotFoundError: + print(f"Activity file '{name}' does not exist in directory '{activities_dir}'.") + except OSError as ose: + print(f"An error occurred while deleting the activity file: {ose}") + except Exception as ex: + print(f"An error occurred while deleting the activity file: {ex}") + +@app.route('/', methods=['GET', 'POST']) +def index(): + if request.method == 'POST': + row_id = request.form.get('row_id', '').strip() + activity = request.form.get('activity', '').strip() + if activity: + if row_id: + # Overwrite the content of the existing activity file in place + write_activity(row_id, activity) + for i, act in enumerate(activities): + if act[0] == row_id: + activities[i] = (row_id, activity) + break + flash('Activity updated successfully.') + else: + # Generate a unique file name with a timestamp + timestamp = datetime.datetime.now().strftime("%Y-%m-%d-%H-%M-%S") + name = f"{timestamp}{ACTIVITY_FILE_SUFFIX}" + write_activity(name, activity) + activities.append((name, activity)) + flash('Activity added successfully.') + return redirect(url_for('index')) + + # Always reload the activities from the Azure file share on GET + activities.clear() + read_activities_from_dir() + return render_template('index.html', activities=activities, pod_name=pod_name) + +@app.route('/delete/', methods=['POST']) +def delete(activity_id): + if 0 <= activity_id < len(activities): + delete_activity(activities[activity_id][0]) + activities.pop(activity_id) + flash('Activity deleted successfully.') + return redirect(url_for('index')) + +# Initialize the application and the activities directory when the module is loaded. +# This ensures that the setup runs regardless of how the app is started (e.g., via 'flask run' or directly). +get_environment_variables() +if get_activities_dir(): + # Create the activities directory if it does not exist + create_activities_dir_if_not_exists() + + # Read the existing activity files from the Azure file share, if any + read_activities_from_dir() + +if __name__ == '__main__': + app.run(debug=True) diff --git a/samples/web-app-file-storage/src/gunicorn.conf.py b/samples/web-app-file-storage/src/gunicorn.conf.py new file mode 100644 index 0000000..cb87ebc --- /dev/null +++ b/samples/web-app-file-storage/src/gunicorn.conf.py @@ -0,0 +1,18 @@ +import os + + +def worker_int(worker): + # SIGINT (Ctrl+C) default path raises SystemExit inside the worker's recv() + # loop, dumping a traceback through gunicorn's HTTP parser frames. os._exit + # short-circuits the unwind for a clean foreground stop. SIGTERM (graceful) + # is unaffected — it goes through a different code path. + os._exit(0) + + +def worker_abort(worker): + # SIGABRT is what the arbiter sends when a worker misses its heartbeat + # ([CRITICAL] WORKER TIMEOUT). The default handler does sys.exit(1), which + # unwinds through the same recv() stack as SIGINT and prints a misleading + # traceback. The WORKER TIMEOUT log line above it is the real diagnostic; + # exit at the C level to suppress the spurious trace. + os._exit(1) diff --git a/samples/web-app-file-storage/src/requirements.txt b/samples/web-app-file-storage/src/requirements.txt new file mode 100644 index 0000000..3b1ab11 --- /dev/null +++ b/samples/web-app-file-storage/src/requirements.txt @@ -0,0 +1,3 @@ +Flask==3.1.3 +gunicorn==26.0.0 +python-dotenv==1.2.2 diff --git a/samples/web-app-file-storage/src/static/bootstrap/css/bootstrap-grid.css b/samples/web-app-file-storage/src/static/bootstrap/css/bootstrap-grid.css new file mode 100644 index 0000000..228f23b --- /dev/null +++ b/samples/web-app-file-storage/src/static/bootstrap/css/bootstrap-grid.css @@ -0,0 +1,5051 @@ +/*! + * Bootstrap Grid v5.1.3 (https://getbootstrap.com/) + * Copyright 2011-2021 The Bootstrap Authors + * Copyright 2011-2021 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) + */ +:root { + --bs-blue: #0d6efd; + --bs-indigo: #6610f2; + --bs-purple: #6f42c1; + --bs-pink: #d63384; + --bs-red: #dc3545; + --bs-orange: #fd7e14; + --bs-yellow: #ffc107; + --bs-green: #198754; + --bs-teal: #20c997; + --bs-cyan: #0dcaf0; + --bs-white: #fff; + --bs-gray: #6c757d; + --bs-gray-dark: #343a40; + --bs-gray-100: #f8f9fa; + --bs-gray-200: #e9ecef; + --bs-gray-300: #dee2e6; + --bs-gray-400: #ced4da; + --bs-gray-500: #adb5bd; + --bs-gray-600: #6c757d; + --bs-gray-700: #495057; + --bs-gray-800: #343a40; + --bs-gray-900: #212529; + --bs-primary: #0d6efd; + --bs-secondary: #6c757d; + --bs-success: #198754; + --bs-info: #0dcaf0; + --bs-warning: #ffc107; + --bs-danger: #dc3545; + --bs-light: #f8f9fa; + --bs-dark: #212529; + --bs-primary-rgb: 13, 110, 253; + --bs-secondary-rgb: 108, 117, 125; + --bs-success-rgb: 25, 135, 84; + --bs-info-rgb: 13, 202, 240; + --bs-warning-rgb: 255, 193, 7; + --bs-danger-rgb: 220, 53, 69; + --bs-light-rgb: 248, 249, 250; + --bs-dark-rgb: 33, 37, 41; + --bs-white-rgb: 255, 255, 255; + --bs-black-rgb: 0, 0, 0; + --bs-body-color-rgb: 33, 37, 41; + --bs-body-bg-rgb: 255, 255, 255; + --bs-font-sans-serif: system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", "Liberation Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; + --bs-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; + --bs-gradient: linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0)); + --bs-body-font-family: var(--bs-font-sans-serif); + --bs-body-font-size: 1rem; + --bs-body-font-weight: 400; + --bs-body-line-height: 1.5; + --bs-body-color: #212529; + --bs-body-bg: #fff; +} + +.container, +.container-fluid, +.container-xxl, +.container-xl, +.container-lg, +.container-md, +.container-sm { + width: 100%; + padding-right: var(--bs-gutter-x, 0.75rem); + padding-left: var(--bs-gutter-x, 0.75rem); + margin-right: auto; + margin-left: auto; +} + +@media (min-width: 576px) { + .container-sm, .container { + max-width: 540px; + } +} +@media (min-width: 768px) { + .container-md, .container-sm, .container { + max-width: 720px; + } +} +@media (min-width: 992px) { + .container-lg, .container-md, .container-sm, .container { + max-width: 960px; + } +} +@media (min-width: 1200px) { + .container-xl, .container-lg, .container-md, .container-sm, .container { + max-width: 1140px; + } +} +@media (min-width: 1400px) { + .container-xxl, .container-xl, .container-lg, .container-md, .container-sm, .container { + max-width: 1320px; + } +} +.row { + --bs-gutter-x: 1.5rem; + --bs-gutter-y: 0; + display: flex; + flex-wrap: wrap; + margin-top: calc(-1 * var(--bs-gutter-y)); + margin-right: calc(-0.5 * var(--bs-gutter-x)); + margin-left: calc(-0.5 * var(--bs-gutter-x)); +} +.row > * { + box-sizing: border-box; + flex-shrink: 0; + width: 100%; + max-width: 100%; + padding-right: calc(var(--bs-gutter-x) * 0.5); + padding-left: calc(var(--bs-gutter-x) * 0.5); + margin-top: var(--bs-gutter-y); +} + +.col { + flex: 1 0 0%; +} + +.row-cols-auto > * { + flex: 0 0 auto; + width: auto; +} + +.row-cols-1 > * { + flex: 0 0 auto; + width: 100%; +} + +.row-cols-2 > * { + flex: 0 0 auto; + width: 50%; +} + +.row-cols-3 > * { + flex: 0 0 auto; + width: 33.3333333333%; +} + +.row-cols-4 > * { + flex: 0 0 auto; + width: 25%; +} + +.row-cols-5 > * { + flex: 0 0 auto; + width: 20%; +} + +.row-cols-6 > * { + flex: 0 0 auto; + width: 16.6666666667%; +} + +.col-auto { + flex: 0 0 auto; + width: auto; +} + +.col-1 { + flex: 0 0 auto; + width: 8.33333333%; +} + +.col-2 { + flex: 0 0 auto; + width: 16.66666667%; +} + +.col-3 { + flex: 0 0 auto; + width: 25%; +} + +.col-4 { + flex: 0 0 auto; + width: 33.33333333%; +} + +.col-5 { + flex: 0 0 auto; + width: 41.66666667%; +} + +.col-6 { + flex: 0 0 auto; + width: 50%; +} + +.col-7 { + flex: 0 0 auto; + width: 58.33333333%; +} + +.col-8 { + flex: 0 0 auto; + width: 66.66666667%; +} + +.col-9 { + flex: 0 0 auto; + width: 75%; +} + +.col-10 { + flex: 0 0 auto; + width: 83.33333333%; +} + +.col-11 { + flex: 0 0 auto; + width: 91.66666667%; +} + +.col-12 { + flex: 0 0 auto; + width: 100%; +} + +.offset-1 { + margin-left: 8.33333333%; +} + +.offset-2 { + margin-left: 16.66666667%; +} + +.offset-3 { + margin-left: 25%; +} + +.offset-4 { + margin-left: 33.33333333%; +} + +.offset-5 { + margin-left: 41.66666667%; +} + +.offset-6 { + margin-left: 50%; +} + +.offset-7 { + margin-left: 58.33333333%; +} + +.offset-8 { + margin-left: 66.66666667%; +} + +.offset-9 { + margin-left: 75%; +} + +.offset-10 { + margin-left: 83.33333333%; +} + +.offset-11 { + margin-left: 91.66666667%; +} + +.g-0, +.gx-0 { + --bs-gutter-x: 0; +} + +.g-0, +.gy-0 { + --bs-gutter-y: 0; +} + +.g-1, +.gx-1 { + --bs-gutter-x: 0.25rem; +} + +.g-1, +.gy-1 { + --bs-gutter-y: 0.25rem; +} + +.g-2, +.gx-2 { + --bs-gutter-x: 0.5rem; +} + +.g-2, +.gy-2 { + --bs-gutter-y: 0.5rem; +} + +.g-3, +.gx-3 { + --bs-gutter-x: 1rem; +} + +.g-3, +.gy-3 { + --bs-gutter-y: 1rem; +} + +.g-4, +.gx-4 { + --bs-gutter-x: 1.5rem; +} + +.g-4, +.gy-4 { + --bs-gutter-y: 1.5rem; +} + +.g-5, +.gx-5 { + --bs-gutter-x: 3rem; +} + +.g-5, +.gy-5 { + --bs-gutter-y: 3rem; +} + +@media (min-width: 576px) { + .col-sm { + flex: 1 0 0%; + } + + .row-cols-sm-auto > * { + flex: 0 0 auto; + width: auto; + } + + .row-cols-sm-1 > * { + flex: 0 0 auto; + width: 100%; + } + + .row-cols-sm-2 > * { + flex: 0 0 auto; + width: 50%; + } + + .row-cols-sm-3 > * { + flex: 0 0 auto; + width: 33.3333333333%; + } + + .row-cols-sm-4 > * { + flex: 0 0 auto; + width: 25%; + } + + .row-cols-sm-5 > * { + flex: 0 0 auto; + width: 20%; + } + + .row-cols-sm-6 > * { + flex: 0 0 auto; + width: 16.6666666667%; + } + + .col-sm-auto { + flex: 0 0 auto; + width: auto; + } + + .col-sm-1 { + flex: 0 0 auto; + width: 8.33333333%; + } + + .col-sm-2 { + flex: 0 0 auto; + width: 16.66666667%; + } + + .col-sm-3 { + flex: 0 0 auto; + width: 25%; + } + + .col-sm-4 { + flex: 0 0 auto; + width: 33.33333333%; + } + + .col-sm-5 { + flex: 0 0 auto; + width: 41.66666667%; + } + + .col-sm-6 { + flex: 0 0 auto; + width: 50%; + } + + .col-sm-7 { + flex: 0 0 auto; + width: 58.33333333%; + } + + .col-sm-8 { + flex: 0 0 auto; + width: 66.66666667%; + } + + .col-sm-9 { + flex: 0 0 auto; + width: 75%; + } + + .col-sm-10 { + flex: 0 0 auto; + width: 83.33333333%; + } + + .col-sm-11 { + flex: 0 0 auto; + width: 91.66666667%; + } + + .col-sm-12 { + flex: 0 0 auto; + width: 100%; + } + + .offset-sm-0 { + margin-left: 0; + } + + .offset-sm-1 { + margin-left: 8.33333333%; + } + + .offset-sm-2 { + margin-left: 16.66666667%; + } + + .offset-sm-3 { + margin-left: 25%; + } + + .offset-sm-4 { + margin-left: 33.33333333%; + } + + .offset-sm-5 { + margin-left: 41.66666667%; + } + + .offset-sm-6 { + margin-left: 50%; + } + + .offset-sm-7 { + margin-left: 58.33333333%; + } + + .offset-sm-8 { + margin-left: 66.66666667%; + } + + .offset-sm-9 { + margin-left: 75%; + } + + .offset-sm-10 { + margin-left: 83.33333333%; + } + + .offset-sm-11 { + margin-left: 91.66666667%; + } + + .g-sm-0, +.gx-sm-0 { + --bs-gutter-x: 0; + } + + .g-sm-0, +.gy-sm-0 { + --bs-gutter-y: 0; + } + + .g-sm-1, +.gx-sm-1 { + --bs-gutter-x: 0.25rem; + } + + .g-sm-1, +.gy-sm-1 { + --bs-gutter-y: 0.25rem; + } + + .g-sm-2, +.gx-sm-2 { + --bs-gutter-x: 0.5rem; + } + + .g-sm-2, +.gy-sm-2 { + --bs-gutter-y: 0.5rem; + } + + .g-sm-3, +.gx-sm-3 { + --bs-gutter-x: 1rem; + } + + .g-sm-3, +.gy-sm-3 { + --bs-gutter-y: 1rem; + } + + .g-sm-4, +.gx-sm-4 { + --bs-gutter-x: 1.5rem; + } + + .g-sm-4, +.gy-sm-4 { + --bs-gutter-y: 1.5rem; + } + + .g-sm-5, +.gx-sm-5 { + --bs-gutter-x: 3rem; + } + + .g-sm-5, +.gy-sm-5 { + --bs-gutter-y: 3rem; + } +} +@media (min-width: 768px) { + .col-md { + flex: 1 0 0%; + } + + .row-cols-md-auto > * { + flex: 0 0 auto; + width: auto; + } + + .row-cols-md-1 > * { + flex: 0 0 auto; + width: 100%; + } + + .row-cols-md-2 > * { + flex: 0 0 auto; + width: 50%; + } + + .row-cols-md-3 > * { + flex: 0 0 auto; + width: 33.3333333333%; + } + + .row-cols-md-4 > * { + flex: 0 0 auto; + width: 25%; + } + + .row-cols-md-5 > * { + flex: 0 0 auto; + width: 20%; + } + + .row-cols-md-6 > * { + flex: 0 0 auto; + width: 16.6666666667%; + } + + .col-md-auto { + flex: 0 0 auto; + width: auto; + } + + .col-md-1 { + flex: 0 0 auto; + width: 8.33333333%; + } + + .col-md-2 { + flex: 0 0 auto; + width: 16.66666667%; + } + + .col-md-3 { + flex: 0 0 auto; + width: 25%; + } + + .col-md-4 { + flex: 0 0 auto; + width: 33.33333333%; + } + + .col-md-5 { + flex: 0 0 auto; + width: 41.66666667%; + } + + .col-md-6 { + flex: 0 0 auto; + width: 50%; + } + + .col-md-7 { + flex: 0 0 auto; + width: 58.33333333%; + } + + .col-md-8 { + flex: 0 0 auto; + width: 66.66666667%; + } + + .col-md-9 { + flex: 0 0 auto; + width: 75%; + } + + .col-md-10 { + flex: 0 0 auto; + width: 83.33333333%; + } + + .col-md-11 { + flex: 0 0 auto; + width: 91.66666667%; + } + + .col-md-12 { + flex: 0 0 auto; + width: 100%; + } + + .offset-md-0 { + margin-left: 0; + } + + .offset-md-1 { + margin-left: 8.33333333%; + } + + .offset-md-2 { + margin-left: 16.66666667%; + } + + .offset-md-3 { + margin-left: 25%; + } + + .offset-md-4 { + margin-left: 33.33333333%; + } + + .offset-md-5 { + margin-left: 41.66666667%; + } + + .offset-md-6 { + margin-left: 50%; + } + + .offset-md-7 { + margin-left: 58.33333333%; + } + + .offset-md-8 { + margin-left: 66.66666667%; + } + + .offset-md-9 { + margin-left: 75%; + } + + .offset-md-10 { + margin-left: 83.33333333%; + } + + .offset-md-11 { + margin-left: 91.66666667%; + } + + .g-md-0, +.gx-md-0 { + --bs-gutter-x: 0; + } + + .g-md-0, +.gy-md-0 { + --bs-gutter-y: 0; + } + + .g-md-1, +.gx-md-1 { + --bs-gutter-x: 0.25rem; + } + + .g-md-1, +.gy-md-1 { + --bs-gutter-y: 0.25rem; + } + + .g-md-2, +.gx-md-2 { + --bs-gutter-x: 0.5rem; + } + + .g-md-2, +.gy-md-2 { + --bs-gutter-y: 0.5rem; + } + + .g-md-3, +.gx-md-3 { + --bs-gutter-x: 1rem; + } + + .g-md-3, +.gy-md-3 { + --bs-gutter-y: 1rem; + } + + .g-md-4, +.gx-md-4 { + --bs-gutter-x: 1.5rem; + } + + .g-md-4, +.gy-md-4 { + --bs-gutter-y: 1.5rem; + } + + .g-md-5, +.gx-md-5 { + --bs-gutter-x: 3rem; + } + + .g-md-5, +.gy-md-5 { + --bs-gutter-y: 3rem; + } +} +@media (min-width: 992px) { + .col-lg { + flex: 1 0 0%; + } + + .row-cols-lg-auto > * { + flex: 0 0 auto; + width: auto; + } + + .row-cols-lg-1 > * { + flex: 0 0 auto; + width: 100%; + } + + .row-cols-lg-2 > * { + flex: 0 0 auto; + width: 50%; + } + + .row-cols-lg-3 > * { + flex: 0 0 auto; + width: 33.3333333333%; + } + + .row-cols-lg-4 > * { + flex: 0 0 auto; + width: 25%; + } + + .row-cols-lg-5 > * { + flex: 0 0 auto; + width: 20%; + } + + .row-cols-lg-6 > * { + flex: 0 0 auto; + width: 16.6666666667%; + } + + .col-lg-auto { + flex: 0 0 auto; + width: auto; + } + + .col-lg-1 { + flex: 0 0 auto; + width: 8.33333333%; + } + + .col-lg-2 { + flex: 0 0 auto; + width: 16.66666667%; + } + + .col-lg-3 { + flex: 0 0 auto; + width: 25%; + } + + .col-lg-4 { + flex: 0 0 auto; + width: 33.33333333%; + } + + .col-lg-5 { + flex: 0 0 auto; + width: 41.66666667%; + } + + .col-lg-6 { + flex: 0 0 auto; + width: 50%; + } + + .col-lg-7 { + flex: 0 0 auto; + width: 58.33333333%; + } + + .col-lg-8 { + flex: 0 0 auto; + width: 66.66666667%; + } + + .col-lg-9 { + flex: 0 0 auto; + width: 75%; + } + + .col-lg-10 { + flex: 0 0 auto; + width: 83.33333333%; + } + + .col-lg-11 { + flex: 0 0 auto; + width: 91.66666667%; + } + + .col-lg-12 { + flex: 0 0 auto; + width: 100%; + } + + .offset-lg-0 { + margin-left: 0; + } + + .offset-lg-1 { + margin-left: 8.33333333%; + } + + .offset-lg-2 { + margin-left: 16.66666667%; + } + + .offset-lg-3 { + margin-left: 25%; + } + + .offset-lg-4 { + margin-left: 33.33333333%; + } + + .offset-lg-5 { + margin-left: 41.66666667%; + } + + .offset-lg-6 { + margin-left: 50%; + } + + .offset-lg-7 { + margin-left: 58.33333333%; + } + + .offset-lg-8 { + margin-left: 66.66666667%; + } + + .offset-lg-9 { + margin-left: 75%; + } + + .offset-lg-10 { + margin-left: 83.33333333%; + } + + .offset-lg-11 { + margin-left: 91.66666667%; + } + + .g-lg-0, +.gx-lg-0 { + --bs-gutter-x: 0; + } + + .g-lg-0, +.gy-lg-0 { + --bs-gutter-y: 0; + } + + .g-lg-1, +.gx-lg-1 { + --bs-gutter-x: 0.25rem; + } + + .g-lg-1, +.gy-lg-1 { + --bs-gutter-y: 0.25rem; + } + + .g-lg-2, +.gx-lg-2 { + --bs-gutter-x: 0.5rem; + } + + .g-lg-2, +.gy-lg-2 { + --bs-gutter-y: 0.5rem; + } + + .g-lg-3, +.gx-lg-3 { + --bs-gutter-x: 1rem; + } + + .g-lg-3, +.gy-lg-3 { + --bs-gutter-y: 1rem; + } + + .g-lg-4, +.gx-lg-4 { + --bs-gutter-x: 1.5rem; + } + + .g-lg-4, +.gy-lg-4 { + --bs-gutter-y: 1.5rem; + } + + .g-lg-5, +.gx-lg-5 { + --bs-gutter-x: 3rem; + } + + .g-lg-5, +.gy-lg-5 { + --bs-gutter-y: 3rem; + } +} +@media (min-width: 1200px) { + .col-xl { + flex: 1 0 0%; + } + + .row-cols-xl-auto > * { + flex: 0 0 auto; + width: auto; + } + + .row-cols-xl-1 > * { + flex: 0 0 auto; + width: 100%; + } + + .row-cols-xl-2 > * { + flex: 0 0 auto; + width: 50%; + } + + .row-cols-xl-3 > * { + flex: 0 0 auto; + width: 33.3333333333%; + } + + .row-cols-xl-4 > * { + flex: 0 0 auto; + width: 25%; + } + + .row-cols-xl-5 > * { + flex: 0 0 auto; + width: 20%; + } + + .row-cols-xl-6 > * { + flex: 0 0 auto; + width: 16.6666666667%; + } + + .col-xl-auto { + flex: 0 0 auto; + width: auto; + } + + .col-xl-1 { + flex: 0 0 auto; + width: 8.33333333%; + } + + .col-xl-2 { + flex: 0 0 auto; + width: 16.66666667%; + } + + .col-xl-3 { + flex: 0 0 auto; + width: 25%; + } + + .col-xl-4 { + flex: 0 0 auto; + width: 33.33333333%; + } + + .col-xl-5 { + flex: 0 0 auto; + width: 41.66666667%; + } + + .col-xl-6 { + flex: 0 0 auto; + width: 50%; + } + + .col-xl-7 { + flex: 0 0 auto; + width: 58.33333333%; + } + + .col-xl-8 { + flex: 0 0 auto; + width: 66.66666667%; + } + + .col-xl-9 { + flex: 0 0 auto; + width: 75%; + } + + .col-xl-10 { + flex: 0 0 auto; + width: 83.33333333%; + } + + .col-xl-11 { + flex: 0 0 auto; + width: 91.66666667%; + } + + .col-xl-12 { + flex: 0 0 auto; + width: 100%; + } + + .offset-xl-0 { + margin-left: 0; + } + + .offset-xl-1 { + margin-left: 8.33333333%; + } + + .offset-xl-2 { + margin-left: 16.66666667%; + } + + .offset-xl-3 { + margin-left: 25%; + } + + .offset-xl-4 { + margin-left: 33.33333333%; + } + + .offset-xl-5 { + margin-left: 41.66666667%; + } + + .offset-xl-6 { + margin-left: 50%; + } + + .offset-xl-7 { + margin-left: 58.33333333%; + } + + .offset-xl-8 { + margin-left: 66.66666667%; + } + + .offset-xl-9 { + margin-left: 75%; + } + + .offset-xl-10 { + margin-left: 83.33333333%; + } + + .offset-xl-11 { + margin-left: 91.66666667%; + } + + .g-xl-0, +.gx-xl-0 { + --bs-gutter-x: 0; + } + + .g-xl-0, +.gy-xl-0 { + --bs-gutter-y: 0; + } + + .g-xl-1, +.gx-xl-1 { + --bs-gutter-x: 0.25rem; + } + + .g-xl-1, +.gy-xl-1 { + --bs-gutter-y: 0.25rem; + } + + .g-xl-2, +.gx-xl-2 { + --bs-gutter-x: 0.5rem; + } + + .g-xl-2, +.gy-xl-2 { + --bs-gutter-y: 0.5rem; + } + + .g-xl-3, +.gx-xl-3 { + --bs-gutter-x: 1rem; + } + + .g-xl-3, +.gy-xl-3 { + --bs-gutter-y: 1rem; + } + + .g-xl-4, +.gx-xl-4 { + --bs-gutter-x: 1.5rem; + } + + .g-xl-4, +.gy-xl-4 { + --bs-gutter-y: 1.5rem; + } + + .g-xl-5, +.gx-xl-5 { + --bs-gutter-x: 3rem; + } + + .g-xl-5, +.gy-xl-5 { + --bs-gutter-y: 3rem; + } +} +@media (min-width: 1400px) { + .col-xxl { + flex: 1 0 0%; + } + + .row-cols-xxl-auto > * { + flex: 0 0 auto; + width: auto; + } + + .row-cols-xxl-1 > * { + flex: 0 0 auto; + width: 100%; + } + + .row-cols-xxl-2 > * { + flex: 0 0 auto; + width: 50%; + } + + .row-cols-xxl-3 > * { + flex: 0 0 auto; + width: 33.3333333333%; + } + + .row-cols-xxl-4 > * { + flex: 0 0 auto; + width: 25%; + } + + .row-cols-xxl-5 > * { + flex: 0 0 auto; + width: 20%; + } + + .row-cols-xxl-6 > * { + flex: 0 0 auto; + width: 16.6666666667%; + } + + .col-xxl-auto { + flex: 0 0 auto; + width: auto; + } + + .col-xxl-1 { + flex: 0 0 auto; + width: 8.33333333%; + } + + .col-xxl-2 { + flex: 0 0 auto; + width: 16.66666667%; + } + + .col-xxl-3 { + flex: 0 0 auto; + width: 25%; + } + + .col-xxl-4 { + flex: 0 0 auto; + width: 33.33333333%; + } + + .col-xxl-5 { + flex: 0 0 auto; + width: 41.66666667%; + } + + .col-xxl-6 { + flex: 0 0 auto; + width: 50%; + } + + .col-xxl-7 { + flex: 0 0 auto; + width: 58.33333333%; + } + + .col-xxl-8 { + flex: 0 0 auto; + width: 66.66666667%; + } + + .col-xxl-9 { + flex: 0 0 auto; + width: 75%; + } + + .col-xxl-10 { + flex: 0 0 auto; + width: 83.33333333%; + } + + .col-xxl-11 { + flex: 0 0 auto; + width: 91.66666667%; + } + + .col-xxl-12 { + flex: 0 0 auto; + width: 100%; + } + + .offset-xxl-0 { + margin-left: 0; + } + + .offset-xxl-1 { + margin-left: 8.33333333%; + } + + .offset-xxl-2 { + margin-left: 16.66666667%; + } + + .offset-xxl-3 { + margin-left: 25%; + } + + .offset-xxl-4 { + margin-left: 33.33333333%; + } + + .offset-xxl-5 { + margin-left: 41.66666667%; + } + + .offset-xxl-6 { + margin-left: 50%; + } + + .offset-xxl-7 { + margin-left: 58.33333333%; + } + + .offset-xxl-8 { + margin-left: 66.66666667%; + } + + .offset-xxl-9 { + margin-left: 75%; + } + + .offset-xxl-10 { + margin-left: 83.33333333%; + } + + .offset-xxl-11 { + margin-left: 91.66666667%; + } + + .g-xxl-0, +.gx-xxl-0 { + --bs-gutter-x: 0; + } + + .g-xxl-0, +.gy-xxl-0 { + --bs-gutter-y: 0; + } + + .g-xxl-1, +.gx-xxl-1 { + --bs-gutter-x: 0.25rem; + } + + .g-xxl-1, +.gy-xxl-1 { + --bs-gutter-y: 0.25rem; + } + + .g-xxl-2, +.gx-xxl-2 { + --bs-gutter-x: 0.5rem; + } + + .g-xxl-2, +.gy-xxl-2 { + --bs-gutter-y: 0.5rem; + } + + .g-xxl-3, +.gx-xxl-3 { + --bs-gutter-x: 1rem; + } + + .g-xxl-3, +.gy-xxl-3 { + --bs-gutter-y: 1rem; + } + + .g-xxl-4, +.gx-xxl-4 { + --bs-gutter-x: 1.5rem; + } + + .g-xxl-4, +.gy-xxl-4 { + --bs-gutter-y: 1.5rem; + } + + .g-xxl-5, +.gx-xxl-5 { + --bs-gutter-x: 3rem; + } + + .g-xxl-5, +.gy-xxl-5 { + --bs-gutter-y: 3rem; + } +} +.d-inline { + display: inline !important; +} + +.d-inline-block { + display: inline-block !important; +} + +.d-block { + display: block !important; +} + +.d-grid { + display: grid !important; +} + +.d-table { + display: table !important; +} + +.d-table-row { + display: table-row !important; +} + +.d-table-cell { + display: table-cell !important; +} + +.d-flex { + display: flex !important; +} + +.d-inline-flex { + display: inline-flex !important; +} + +.d-none { + display: none !important; +} + +.flex-fill { + flex: 1 1 auto !important; +} + +.flex-row { + flex-direction: row !important; +} + +.flex-column { + flex-direction: column !important; +} + +.flex-row-reverse { + flex-direction: row-reverse !important; +} + +.flex-column-reverse { + flex-direction: column-reverse !important; +} + +.flex-grow-0 { + flex-grow: 0 !important; +} + +.flex-grow-1 { + flex-grow: 1 !important; +} + +.flex-shrink-0 { + flex-shrink: 0 !important; +} + +.flex-shrink-1 { + flex-shrink: 1 !important; +} + +.flex-wrap { + flex-wrap: wrap !important; +} + +.flex-nowrap { + flex-wrap: nowrap !important; +} + +.flex-wrap-reverse { + flex-wrap: wrap-reverse !important; +} + +.justify-content-start { + justify-content: flex-start !important; +} + +.justify-content-end { + justify-content: flex-end !important; +} + +.justify-content-center { + justify-content: center !important; +} + +.justify-content-between { + justify-content: space-between !important; +} + +.justify-content-around { + justify-content: space-around !important; +} + +.justify-content-evenly { + justify-content: space-evenly !important; +} + +.align-items-start { + align-items: flex-start !important; +} + +.align-items-end { + align-items: flex-end !important; +} + +.align-items-center { + align-items: center !important; +} + +.align-items-baseline { + align-items: baseline !important; +} + +.align-items-stretch { + align-items: stretch !important; +} + +.align-content-start { + align-content: flex-start !important; +} + +.align-content-end { + align-content: flex-end !important; +} + +.align-content-center { + align-content: center !important; +} + +.align-content-between { + align-content: space-between !important; +} + +.align-content-around { + align-content: space-around !important; +} + +.align-content-stretch { + align-content: stretch !important; +} + +.align-self-auto { + align-self: auto !important; +} + +.align-self-start { + align-self: flex-start !important; +} + +.align-self-end { + align-self: flex-end !important; +} + +.align-self-center { + align-self: center !important; +} + +.align-self-baseline { + align-self: baseline !important; +} + +.align-self-stretch { + align-self: stretch !important; +} + +.order-first { + order: -1 !important; +} + +.order-0 { + order: 0 !important; +} + +.order-1 { + order: 1 !important; +} + +.order-2 { + order: 2 !important; +} + +.order-3 { + order: 3 !important; +} + +.order-4 { + order: 4 !important; +} + +.order-5 { + order: 5 !important; +} + +.order-last { + order: 6 !important; +} + +.m-0 { + margin: 0 !important; +} + +.m-1 { + margin: 0.25rem !important; +} + +.m-2 { + margin: 0.5rem !important; +} + +.m-3 { + margin: 1rem !important; +} + +.m-4 { + margin: 1.5rem !important; +} + +.m-5 { + margin: 3rem !important; +} + +.m-auto { + margin: auto !important; +} + +.mx-0 { + margin-right: 0 !important; + margin-left: 0 !important; +} + +.mx-1 { + margin-right: 0.25rem !important; + margin-left: 0.25rem !important; +} + +.mx-2 { + margin-right: 0.5rem !important; + margin-left: 0.5rem !important; +} + +.mx-3 { + margin-right: 1rem !important; + margin-left: 1rem !important; +} + +.mx-4 { + margin-right: 1.5rem !important; + margin-left: 1.5rem !important; +} + +.mx-5 { + margin-right: 3rem !important; + margin-left: 3rem !important; +} + +.mx-auto { + margin-right: auto !important; + margin-left: auto !important; +} + +.my-0 { + margin-top: 0 !important; + margin-bottom: 0 !important; +} + +.my-1 { + margin-top: 0.25rem !important; + margin-bottom: 0.25rem !important; +} + +.my-2 { + margin-top: 0.5rem !important; + margin-bottom: 0.5rem !important; +} + +.my-3 { + margin-top: 1rem !important; + margin-bottom: 1rem !important; +} + +.my-4 { + margin-top: 1.5rem !important; + margin-bottom: 1.5rem !important; +} + +.my-5 { + margin-top: 3rem !important; + margin-bottom: 3rem !important; +} + +.my-auto { + margin-top: auto !important; + margin-bottom: auto !important; +} + +.mt-0 { + margin-top: 0 !important; +} + +.mt-1 { + margin-top: 0.25rem !important; +} + +.mt-2 { + margin-top: 0.5rem !important; +} + +.mt-3 { + margin-top: 1rem !important; +} + +.mt-4 { + margin-top: 1.5rem !important; +} + +.mt-5 { + margin-top: 3rem !important; +} + +.mt-auto { + margin-top: auto !important; +} + +.me-0 { + margin-right: 0 !important; +} + +.me-1 { + margin-right: 0.25rem !important; +} + +.me-2 { + margin-right: 0.5rem !important; +} + +.me-3 { + margin-right: 1rem !important; +} + +.me-4 { + margin-right: 1.5rem !important; +} + +.me-5 { + margin-right: 3rem !important; +} + +.me-auto { + margin-right: auto !important; +} + +.mb-0 { + margin-bottom: 0 !important; +} + +.mb-1 { + margin-bottom: 0.25rem !important; +} + +.mb-2 { + margin-bottom: 0.5rem !important; +} + +.mb-3 { + margin-bottom: 1rem !important; +} + +.mb-4 { + margin-bottom: 1.5rem !important; +} + +.mb-5 { + margin-bottom: 3rem !important; +} + +.mb-auto { + margin-bottom: auto !important; +} + +.ms-0 { + margin-left: 0 !important; +} + +.ms-1 { + margin-left: 0.25rem !important; +} + +.ms-2 { + margin-left: 0.5rem !important; +} + +.ms-3 { + margin-left: 1rem !important; +} + +.ms-4 { + margin-left: 1.5rem !important; +} + +.ms-5 { + margin-left: 3rem !important; +} + +.ms-auto { + margin-left: auto !important; +} + +.p-0 { + padding: 0 !important; +} + +.p-1 { + padding: 0.25rem !important; +} + +.p-2 { + padding: 0.5rem !important; +} + +.p-3 { + padding: 1rem !important; +} + +.p-4 { + padding: 1.5rem !important; +} + +.p-5 { + padding: 3rem !important; +} + +.px-0 { + padding-right: 0 !important; + padding-left: 0 !important; +} + +.px-1 { + padding-right: 0.25rem !important; + padding-left: 0.25rem !important; +} + +.px-2 { + padding-right: 0.5rem !important; + padding-left: 0.5rem !important; +} + +.px-3 { + padding-right: 1rem !important; + padding-left: 1rem !important; +} + +.px-4 { + padding-right: 1.5rem !important; + padding-left: 1.5rem !important; +} + +.px-5 { + padding-right: 3rem !important; + padding-left: 3rem !important; +} + +.py-0 { + padding-top: 0 !important; + padding-bottom: 0 !important; +} + +.py-1 { + padding-top: 0.25rem !important; + padding-bottom: 0.25rem !important; +} + +.py-2 { + padding-top: 0.5rem !important; + padding-bottom: 0.5rem !important; +} + +.py-3 { + padding-top: 1rem !important; + padding-bottom: 1rem !important; +} + +.py-4 { + padding-top: 1.5rem !important; + padding-bottom: 1.5rem !important; +} + +.py-5 { + padding-top: 3rem !important; + padding-bottom: 3rem !important; +} + +.pt-0 { + padding-top: 0 !important; +} + +.pt-1 { + padding-top: 0.25rem !important; +} + +.pt-2 { + padding-top: 0.5rem !important; +} + +.pt-3 { + padding-top: 1rem !important; +} + +.pt-4 { + padding-top: 1.5rem !important; +} + +.pt-5 { + padding-top: 3rem !important; +} + +.pe-0 { + padding-right: 0 !important; +} + +.pe-1 { + padding-right: 0.25rem !important; +} + +.pe-2 { + padding-right: 0.5rem !important; +} + +.pe-3 { + padding-right: 1rem !important; +} + +.pe-4 { + padding-right: 1.5rem !important; +} + +.pe-5 { + padding-right: 3rem !important; +} + +.pb-0 { + padding-bottom: 0 !important; +} + +.pb-1 { + padding-bottom: 0.25rem !important; +} + +.pb-2 { + padding-bottom: 0.5rem !important; +} + +.pb-3 { + padding-bottom: 1rem !important; +} + +.pb-4 { + padding-bottom: 1.5rem !important; +} + +.pb-5 { + padding-bottom: 3rem !important; +} + +.ps-0 { + padding-left: 0 !important; +} + +.ps-1 { + padding-left: 0.25rem !important; +} + +.ps-2 { + padding-left: 0.5rem !important; +} + +.ps-3 { + padding-left: 1rem !important; +} + +.ps-4 { + padding-left: 1.5rem !important; +} + +.ps-5 { + padding-left: 3rem !important; +} + +@media (min-width: 576px) { + .d-sm-inline { + display: inline !important; + } + + .d-sm-inline-block { + display: inline-block !important; + } + + .d-sm-block { + display: block !important; + } + + .d-sm-grid { + display: grid !important; + } + + .d-sm-table { + display: table !important; + } + + .d-sm-table-row { + display: table-row !important; + } + + .d-sm-table-cell { + display: table-cell !important; + } + + .d-sm-flex { + display: flex !important; + } + + .d-sm-inline-flex { + display: inline-flex !important; + } + + .d-sm-none { + display: none !important; + } + + .flex-sm-fill { + flex: 1 1 auto !important; + } + + .flex-sm-row { + flex-direction: row !important; + } + + .flex-sm-column { + flex-direction: column !important; + } + + .flex-sm-row-reverse { + flex-direction: row-reverse !important; + } + + .flex-sm-column-reverse { + flex-direction: column-reverse !important; + } + + .flex-sm-grow-0 { + flex-grow: 0 !important; + } + + .flex-sm-grow-1 { + flex-grow: 1 !important; + } + + .flex-sm-shrink-0 { + flex-shrink: 0 !important; + } + + .flex-sm-shrink-1 { + flex-shrink: 1 !important; + } + + .flex-sm-wrap { + flex-wrap: wrap !important; + } + + .flex-sm-nowrap { + flex-wrap: nowrap !important; + } + + .flex-sm-wrap-reverse { + flex-wrap: wrap-reverse !important; + } + + .justify-content-sm-start { + justify-content: flex-start !important; + } + + .justify-content-sm-end { + justify-content: flex-end !important; + } + + .justify-content-sm-center { + justify-content: center !important; + } + + .justify-content-sm-between { + justify-content: space-between !important; + } + + .justify-content-sm-around { + justify-content: space-around !important; + } + + .justify-content-sm-evenly { + justify-content: space-evenly !important; + } + + .align-items-sm-start { + align-items: flex-start !important; + } + + .align-items-sm-end { + align-items: flex-end !important; + } + + .align-items-sm-center { + align-items: center !important; + } + + .align-items-sm-baseline { + align-items: baseline !important; + } + + .align-items-sm-stretch { + align-items: stretch !important; + } + + .align-content-sm-start { + align-content: flex-start !important; + } + + .align-content-sm-end { + align-content: flex-end !important; + } + + .align-content-sm-center { + align-content: center !important; + } + + .align-content-sm-between { + align-content: space-between !important; + } + + .align-content-sm-around { + align-content: space-around !important; + } + + .align-content-sm-stretch { + align-content: stretch !important; + } + + .align-self-sm-auto { + align-self: auto !important; + } + + .align-self-sm-start { + align-self: flex-start !important; + } + + .align-self-sm-end { + align-self: flex-end !important; + } + + .align-self-sm-center { + align-self: center !important; + } + + .align-self-sm-baseline { + align-self: baseline !important; + } + + .align-self-sm-stretch { + align-self: stretch !important; + } + + .order-sm-first { + order: -1 !important; + } + + .order-sm-0 { + order: 0 !important; + } + + .order-sm-1 { + order: 1 !important; + } + + .order-sm-2 { + order: 2 !important; + } + + .order-sm-3 { + order: 3 !important; + } + + .order-sm-4 { + order: 4 !important; + } + + .order-sm-5 { + order: 5 !important; + } + + .order-sm-last { + order: 6 !important; + } + + .m-sm-0 { + margin: 0 !important; + } + + .m-sm-1 { + margin: 0.25rem !important; + } + + .m-sm-2 { + margin: 0.5rem !important; + } + + .m-sm-3 { + margin: 1rem !important; + } + + .m-sm-4 { + margin: 1.5rem !important; + } + + .m-sm-5 { + margin: 3rem !important; + } + + .m-sm-auto { + margin: auto !important; + } + + .mx-sm-0 { + margin-right: 0 !important; + margin-left: 0 !important; + } + + .mx-sm-1 { + margin-right: 0.25rem !important; + margin-left: 0.25rem !important; + } + + .mx-sm-2 { + margin-right: 0.5rem !important; + margin-left: 0.5rem !important; + } + + .mx-sm-3 { + margin-right: 1rem !important; + margin-left: 1rem !important; + } + + .mx-sm-4 { + margin-right: 1.5rem !important; + margin-left: 1.5rem !important; + } + + .mx-sm-5 { + margin-right: 3rem !important; + margin-left: 3rem !important; + } + + .mx-sm-auto { + margin-right: auto !important; + margin-left: auto !important; + } + + .my-sm-0 { + margin-top: 0 !important; + margin-bottom: 0 !important; + } + + .my-sm-1 { + margin-top: 0.25rem !important; + margin-bottom: 0.25rem !important; + } + + .my-sm-2 { + margin-top: 0.5rem !important; + margin-bottom: 0.5rem !important; + } + + .my-sm-3 { + margin-top: 1rem !important; + margin-bottom: 1rem !important; + } + + .my-sm-4 { + margin-top: 1.5rem !important; + margin-bottom: 1.5rem !important; + } + + .my-sm-5 { + margin-top: 3rem !important; + margin-bottom: 3rem !important; + } + + .my-sm-auto { + margin-top: auto !important; + margin-bottom: auto !important; + } + + .mt-sm-0 { + margin-top: 0 !important; + } + + .mt-sm-1 { + margin-top: 0.25rem !important; + } + + .mt-sm-2 { + margin-top: 0.5rem !important; + } + + .mt-sm-3 { + margin-top: 1rem !important; + } + + .mt-sm-4 { + margin-top: 1.5rem !important; + } + + .mt-sm-5 { + margin-top: 3rem !important; + } + + .mt-sm-auto { + margin-top: auto !important; + } + + .me-sm-0 { + margin-right: 0 !important; + } + + .me-sm-1 { + margin-right: 0.25rem !important; + } + + .me-sm-2 { + margin-right: 0.5rem !important; + } + + .me-sm-3 { + margin-right: 1rem !important; + } + + .me-sm-4 { + margin-right: 1.5rem !important; + } + + .me-sm-5 { + margin-right: 3rem !important; + } + + .me-sm-auto { + margin-right: auto !important; + } + + .mb-sm-0 { + margin-bottom: 0 !important; + } + + .mb-sm-1 { + margin-bottom: 0.25rem !important; + } + + .mb-sm-2 { + margin-bottom: 0.5rem !important; + } + + .mb-sm-3 { + margin-bottom: 1rem !important; + } + + .mb-sm-4 { + margin-bottom: 1.5rem !important; + } + + .mb-sm-5 { + margin-bottom: 3rem !important; + } + + .mb-sm-auto { + margin-bottom: auto !important; + } + + .ms-sm-0 { + margin-left: 0 !important; + } + + .ms-sm-1 { + margin-left: 0.25rem !important; + } + + .ms-sm-2 { + margin-left: 0.5rem !important; + } + + .ms-sm-3 { + margin-left: 1rem !important; + } + + .ms-sm-4 { + margin-left: 1.5rem !important; + } + + .ms-sm-5 { + margin-left: 3rem !important; + } + + .ms-sm-auto { + margin-left: auto !important; + } + + .p-sm-0 { + padding: 0 !important; + } + + .p-sm-1 { + padding: 0.25rem !important; + } + + .p-sm-2 { + padding: 0.5rem !important; + } + + .p-sm-3 { + padding: 1rem !important; + } + + .p-sm-4 { + padding: 1.5rem !important; + } + + .p-sm-5 { + padding: 3rem !important; + } + + .px-sm-0 { + padding-right: 0 !important; + padding-left: 0 !important; + } + + .px-sm-1 { + padding-right: 0.25rem !important; + padding-left: 0.25rem !important; + } + + .px-sm-2 { + padding-right: 0.5rem !important; + padding-left: 0.5rem !important; + } + + .px-sm-3 { + padding-right: 1rem !important; + padding-left: 1rem !important; + } + + .px-sm-4 { + padding-right: 1.5rem !important; + padding-left: 1.5rem !important; + } + + .px-sm-5 { + padding-right: 3rem !important; + padding-left: 3rem !important; + } + + .py-sm-0 { + padding-top: 0 !important; + padding-bottom: 0 !important; + } + + .py-sm-1 { + padding-top: 0.25rem !important; + padding-bottom: 0.25rem !important; + } + + .py-sm-2 { + padding-top: 0.5rem !important; + padding-bottom: 0.5rem !important; + } + + .py-sm-3 { + padding-top: 1rem !important; + padding-bottom: 1rem !important; + } + + .py-sm-4 { + padding-top: 1.5rem !important; + padding-bottom: 1.5rem !important; + } + + .py-sm-5 { + padding-top: 3rem !important; + padding-bottom: 3rem !important; + } + + .pt-sm-0 { + padding-top: 0 !important; + } + + .pt-sm-1 { + padding-top: 0.25rem !important; + } + + .pt-sm-2 { + padding-top: 0.5rem !important; + } + + .pt-sm-3 { + padding-top: 1rem !important; + } + + .pt-sm-4 { + padding-top: 1.5rem !important; + } + + .pt-sm-5 { + padding-top: 3rem !important; + } + + .pe-sm-0 { + padding-right: 0 !important; + } + + .pe-sm-1 { + padding-right: 0.25rem !important; + } + + .pe-sm-2 { + padding-right: 0.5rem !important; + } + + .pe-sm-3 { + padding-right: 1rem !important; + } + + .pe-sm-4 { + padding-right: 1.5rem !important; + } + + .pe-sm-5 { + padding-right: 3rem !important; + } + + .pb-sm-0 { + padding-bottom: 0 !important; + } + + .pb-sm-1 { + padding-bottom: 0.25rem !important; + } + + .pb-sm-2 { + padding-bottom: 0.5rem !important; + } + + .pb-sm-3 { + padding-bottom: 1rem !important; + } + + .pb-sm-4 { + padding-bottom: 1.5rem !important; + } + + .pb-sm-5 { + padding-bottom: 3rem !important; + } + + .ps-sm-0 { + padding-left: 0 !important; + } + + .ps-sm-1 { + padding-left: 0.25rem !important; + } + + .ps-sm-2 { + padding-left: 0.5rem !important; + } + + .ps-sm-3 { + padding-left: 1rem !important; + } + + .ps-sm-4 { + padding-left: 1.5rem !important; + } + + .ps-sm-5 { + padding-left: 3rem !important; + } +} +@media (min-width: 768px) { + .d-md-inline { + display: inline !important; + } + + .d-md-inline-block { + display: inline-block !important; + } + + .d-md-block { + display: block !important; + } + + .d-md-grid { + display: grid !important; + } + + .d-md-table { + display: table !important; + } + + .d-md-table-row { + display: table-row !important; + } + + .d-md-table-cell { + display: table-cell !important; + } + + .d-md-flex { + display: flex !important; + } + + .d-md-inline-flex { + display: inline-flex !important; + } + + .d-md-none { + display: none !important; + } + + .flex-md-fill { + flex: 1 1 auto !important; + } + + .flex-md-row { + flex-direction: row !important; + } + + .flex-md-column { + flex-direction: column !important; + } + + .flex-md-row-reverse { + flex-direction: row-reverse !important; + } + + .flex-md-column-reverse { + flex-direction: column-reverse !important; + } + + .flex-md-grow-0 { + flex-grow: 0 !important; + } + + .flex-md-grow-1 { + flex-grow: 1 !important; + } + + .flex-md-shrink-0 { + flex-shrink: 0 !important; + } + + .flex-md-shrink-1 { + flex-shrink: 1 !important; + } + + .flex-md-wrap { + flex-wrap: wrap !important; + } + + .flex-md-nowrap { + flex-wrap: nowrap !important; + } + + .flex-md-wrap-reverse { + flex-wrap: wrap-reverse !important; + } + + .justify-content-md-start { + justify-content: flex-start !important; + } + + .justify-content-md-end { + justify-content: flex-end !important; + } + + .justify-content-md-center { + justify-content: center !important; + } + + .justify-content-md-between { + justify-content: space-between !important; + } + + .justify-content-md-around { + justify-content: space-around !important; + } + + .justify-content-md-evenly { + justify-content: space-evenly !important; + } + + .align-items-md-start { + align-items: flex-start !important; + } + + .align-items-md-end { + align-items: flex-end !important; + } + + .align-items-md-center { + align-items: center !important; + } + + .align-items-md-baseline { + align-items: baseline !important; + } + + .align-items-md-stretch { + align-items: stretch !important; + } + + .align-content-md-start { + align-content: flex-start !important; + } + + .align-content-md-end { + align-content: flex-end !important; + } + + .align-content-md-center { + align-content: center !important; + } + + .align-content-md-between { + align-content: space-between !important; + } + + .align-content-md-around { + align-content: space-around !important; + } + + .align-content-md-stretch { + align-content: stretch !important; + } + + .align-self-md-auto { + align-self: auto !important; + } + + .align-self-md-start { + align-self: flex-start !important; + } + + .align-self-md-end { + align-self: flex-end !important; + } + + .align-self-md-center { + align-self: center !important; + } + + .align-self-md-baseline { + align-self: baseline !important; + } + + .align-self-md-stretch { + align-self: stretch !important; + } + + .order-md-first { + order: -1 !important; + } + + .order-md-0 { + order: 0 !important; + } + + .order-md-1 { + order: 1 !important; + } + + .order-md-2 { + order: 2 !important; + } + + .order-md-3 { + order: 3 !important; + } + + .order-md-4 { + order: 4 !important; + } + + .order-md-5 { + order: 5 !important; + } + + .order-md-last { + order: 6 !important; + } + + .m-md-0 { + margin: 0 !important; + } + + .m-md-1 { + margin: 0.25rem !important; + } + + .m-md-2 { + margin: 0.5rem !important; + } + + .m-md-3 { + margin: 1rem !important; + } + + .m-md-4 { + margin: 1.5rem !important; + } + + .m-md-5 { + margin: 3rem !important; + } + + .m-md-auto { + margin: auto !important; + } + + .mx-md-0 { + margin-right: 0 !important; + margin-left: 0 !important; + } + + .mx-md-1 { + margin-right: 0.25rem !important; + margin-left: 0.25rem !important; + } + + .mx-md-2 { + margin-right: 0.5rem !important; + margin-left: 0.5rem !important; + } + + .mx-md-3 { + margin-right: 1rem !important; + margin-left: 1rem !important; + } + + .mx-md-4 { + margin-right: 1.5rem !important; + margin-left: 1.5rem !important; + } + + .mx-md-5 { + margin-right: 3rem !important; + margin-left: 3rem !important; + } + + .mx-md-auto { + margin-right: auto !important; + margin-left: auto !important; + } + + .my-md-0 { + margin-top: 0 !important; + margin-bottom: 0 !important; + } + + .my-md-1 { + margin-top: 0.25rem !important; + margin-bottom: 0.25rem !important; + } + + .my-md-2 { + margin-top: 0.5rem !important; + margin-bottom: 0.5rem !important; + } + + .my-md-3 { + margin-top: 1rem !important; + margin-bottom: 1rem !important; + } + + .my-md-4 { + margin-top: 1.5rem !important; + margin-bottom: 1.5rem !important; + } + + .my-md-5 { + margin-top: 3rem !important; + margin-bottom: 3rem !important; + } + + .my-md-auto { + margin-top: auto !important; + margin-bottom: auto !important; + } + + .mt-md-0 { + margin-top: 0 !important; + } + + .mt-md-1 { + margin-top: 0.25rem !important; + } + + .mt-md-2 { + margin-top: 0.5rem !important; + } + + .mt-md-3 { + margin-top: 1rem !important; + } + + .mt-md-4 { + margin-top: 1.5rem !important; + } + + .mt-md-5 { + margin-top: 3rem !important; + } + + .mt-md-auto { + margin-top: auto !important; + } + + .me-md-0 { + margin-right: 0 !important; + } + + .me-md-1 { + margin-right: 0.25rem !important; + } + + .me-md-2 { + margin-right: 0.5rem !important; + } + + .me-md-3 { + margin-right: 1rem !important; + } + + .me-md-4 { + margin-right: 1.5rem !important; + } + + .me-md-5 { + margin-right: 3rem !important; + } + + .me-md-auto { + margin-right: auto !important; + } + + .mb-md-0 { + margin-bottom: 0 !important; + } + + .mb-md-1 { + margin-bottom: 0.25rem !important; + } + + .mb-md-2 { + margin-bottom: 0.5rem !important; + } + + .mb-md-3 { + margin-bottom: 1rem !important; + } + + .mb-md-4 { + margin-bottom: 1.5rem !important; + } + + .mb-md-5 { + margin-bottom: 3rem !important; + } + + .mb-md-auto { + margin-bottom: auto !important; + } + + .ms-md-0 { + margin-left: 0 !important; + } + + .ms-md-1 { + margin-left: 0.25rem !important; + } + + .ms-md-2 { + margin-left: 0.5rem !important; + } + + .ms-md-3 { + margin-left: 1rem !important; + } + + .ms-md-4 { + margin-left: 1.5rem !important; + } + + .ms-md-5 { + margin-left: 3rem !important; + } + + .ms-md-auto { + margin-left: auto !important; + } + + .p-md-0 { + padding: 0 !important; + } + + .p-md-1 { + padding: 0.25rem !important; + } + + .p-md-2 { + padding: 0.5rem !important; + } + + .p-md-3 { + padding: 1rem !important; + } + + .p-md-4 { + padding: 1.5rem !important; + } + + .p-md-5 { + padding: 3rem !important; + } + + .px-md-0 { + padding-right: 0 !important; + padding-left: 0 !important; + } + + .px-md-1 { + padding-right: 0.25rem !important; + padding-left: 0.25rem !important; + } + + .px-md-2 { + padding-right: 0.5rem !important; + padding-left: 0.5rem !important; + } + + .px-md-3 { + padding-right: 1rem !important; + padding-left: 1rem !important; + } + + .px-md-4 { + padding-right: 1.5rem !important; + padding-left: 1.5rem !important; + } + + .px-md-5 { + padding-right: 3rem !important; + padding-left: 3rem !important; + } + + .py-md-0 { + padding-top: 0 !important; + padding-bottom: 0 !important; + } + + .py-md-1 { + padding-top: 0.25rem !important; + padding-bottom: 0.25rem !important; + } + + .py-md-2 { + padding-top: 0.5rem !important; + padding-bottom: 0.5rem !important; + } + + .py-md-3 { + padding-top: 1rem !important; + padding-bottom: 1rem !important; + } + + .py-md-4 { + padding-top: 1.5rem !important; + padding-bottom: 1.5rem !important; + } + + .py-md-5 { + padding-top: 3rem !important; + padding-bottom: 3rem !important; + } + + .pt-md-0 { + padding-top: 0 !important; + } + + .pt-md-1 { + padding-top: 0.25rem !important; + } + + .pt-md-2 { + padding-top: 0.5rem !important; + } + + .pt-md-3 { + padding-top: 1rem !important; + } + + .pt-md-4 { + padding-top: 1.5rem !important; + } + + .pt-md-5 { + padding-top: 3rem !important; + } + + .pe-md-0 { + padding-right: 0 !important; + } + + .pe-md-1 { + padding-right: 0.25rem !important; + } + + .pe-md-2 { + padding-right: 0.5rem !important; + } + + .pe-md-3 { + padding-right: 1rem !important; + } + + .pe-md-4 { + padding-right: 1.5rem !important; + } + + .pe-md-5 { + padding-right: 3rem !important; + } + + .pb-md-0 { + padding-bottom: 0 !important; + } + + .pb-md-1 { + padding-bottom: 0.25rem !important; + } + + .pb-md-2 { + padding-bottom: 0.5rem !important; + } + + .pb-md-3 { + padding-bottom: 1rem !important; + } + + .pb-md-4 { + padding-bottom: 1.5rem !important; + } + + .pb-md-5 { + padding-bottom: 3rem !important; + } + + .ps-md-0 { + padding-left: 0 !important; + } + + .ps-md-1 { + padding-left: 0.25rem !important; + } + + .ps-md-2 { + padding-left: 0.5rem !important; + } + + .ps-md-3 { + padding-left: 1rem !important; + } + + .ps-md-4 { + padding-left: 1.5rem !important; + } + + .ps-md-5 { + padding-left: 3rem !important; + } +} +@media (min-width: 992px) { + .d-lg-inline { + display: inline !important; + } + + .d-lg-inline-block { + display: inline-block !important; + } + + .d-lg-block { + display: block !important; + } + + .d-lg-grid { + display: grid !important; + } + + .d-lg-table { + display: table !important; + } + + .d-lg-table-row { + display: table-row !important; + } + + .d-lg-table-cell { + display: table-cell !important; + } + + .d-lg-flex { + display: flex !important; + } + + .d-lg-inline-flex { + display: inline-flex !important; + } + + .d-lg-none { + display: none !important; + } + + .flex-lg-fill { + flex: 1 1 auto !important; + } + + .flex-lg-row { + flex-direction: row !important; + } + + .flex-lg-column { + flex-direction: column !important; + } + + .flex-lg-row-reverse { + flex-direction: row-reverse !important; + } + + .flex-lg-column-reverse { + flex-direction: column-reverse !important; + } + + .flex-lg-grow-0 { + flex-grow: 0 !important; + } + + .flex-lg-grow-1 { + flex-grow: 1 !important; + } + + .flex-lg-shrink-0 { + flex-shrink: 0 !important; + } + + .flex-lg-shrink-1 { + flex-shrink: 1 !important; + } + + .flex-lg-wrap { + flex-wrap: wrap !important; + } + + .flex-lg-nowrap { + flex-wrap: nowrap !important; + } + + .flex-lg-wrap-reverse { + flex-wrap: wrap-reverse !important; + } + + .justify-content-lg-start { + justify-content: flex-start !important; + } + + .justify-content-lg-end { + justify-content: flex-end !important; + } + + .justify-content-lg-center { + justify-content: center !important; + } + + .justify-content-lg-between { + justify-content: space-between !important; + } + + .justify-content-lg-around { + justify-content: space-around !important; + } + + .justify-content-lg-evenly { + justify-content: space-evenly !important; + } + + .align-items-lg-start { + align-items: flex-start !important; + } + + .align-items-lg-end { + align-items: flex-end !important; + } + + .align-items-lg-center { + align-items: center !important; + } + + .align-items-lg-baseline { + align-items: baseline !important; + } + + .align-items-lg-stretch { + align-items: stretch !important; + } + + .align-content-lg-start { + align-content: flex-start !important; + } + + .align-content-lg-end { + align-content: flex-end !important; + } + + .align-content-lg-center { + align-content: center !important; + } + + .align-content-lg-between { + align-content: space-between !important; + } + + .align-content-lg-around { + align-content: space-around !important; + } + + .align-content-lg-stretch { + align-content: stretch !important; + } + + .align-self-lg-auto { + align-self: auto !important; + } + + .align-self-lg-start { + align-self: flex-start !important; + } + + .align-self-lg-end { + align-self: flex-end !important; + } + + .align-self-lg-center { + align-self: center !important; + } + + .align-self-lg-baseline { + align-self: baseline !important; + } + + .align-self-lg-stretch { + align-self: stretch !important; + } + + .order-lg-first { + order: -1 !important; + } + + .order-lg-0 { + order: 0 !important; + } + + .order-lg-1 { + order: 1 !important; + } + + .order-lg-2 { + order: 2 !important; + } + + .order-lg-3 { + order: 3 !important; + } + + .order-lg-4 { + order: 4 !important; + } + + .order-lg-5 { + order: 5 !important; + } + + .order-lg-last { + order: 6 !important; + } + + .m-lg-0 { + margin: 0 !important; + } + + .m-lg-1 { + margin: 0.25rem !important; + } + + .m-lg-2 { + margin: 0.5rem !important; + } + + .m-lg-3 { + margin: 1rem !important; + } + + .m-lg-4 { + margin: 1.5rem !important; + } + + .m-lg-5 { + margin: 3rem !important; + } + + .m-lg-auto { + margin: auto !important; + } + + .mx-lg-0 { + margin-right: 0 !important; + margin-left: 0 !important; + } + + .mx-lg-1 { + margin-right: 0.25rem !important; + margin-left: 0.25rem !important; + } + + .mx-lg-2 { + margin-right: 0.5rem !important; + margin-left: 0.5rem !important; + } + + .mx-lg-3 { + margin-right: 1rem !important; + margin-left: 1rem !important; + } + + .mx-lg-4 { + margin-right: 1.5rem !important; + margin-left: 1.5rem !important; + } + + .mx-lg-5 { + margin-right: 3rem !important; + margin-left: 3rem !important; + } + + .mx-lg-auto { + margin-right: auto !important; + margin-left: auto !important; + } + + .my-lg-0 { + margin-top: 0 !important; + margin-bottom: 0 !important; + } + + .my-lg-1 { + margin-top: 0.25rem !important; + margin-bottom: 0.25rem !important; + } + + .my-lg-2 { + margin-top: 0.5rem !important; + margin-bottom: 0.5rem !important; + } + + .my-lg-3 { + margin-top: 1rem !important; + margin-bottom: 1rem !important; + } + + .my-lg-4 { + margin-top: 1.5rem !important; + margin-bottom: 1.5rem !important; + } + + .my-lg-5 { + margin-top: 3rem !important; + margin-bottom: 3rem !important; + } + + .my-lg-auto { + margin-top: auto !important; + margin-bottom: auto !important; + } + + .mt-lg-0 { + margin-top: 0 !important; + } + + .mt-lg-1 { + margin-top: 0.25rem !important; + } + + .mt-lg-2 { + margin-top: 0.5rem !important; + } + + .mt-lg-3 { + margin-top: 1rem !important; + } + + .mt-lg-4 { + margin-top: 1.5rem !important; + } + + .mt-lg-5 { + margin-top: 3rem !important; + } + + .mt-lg-auto { + margin-top: auto !important; + } + + .me-lg-0 { + margin-right: 0 !important; + } + + .me-lg-1 { + margin-right: 0.25rem !important; + } + + .me-lg-2 { + margin-right: 0.5rem !important; + } + + .me-lg-3 { + margin-right: 1rem !important; + } + + .me-lg-4 { + margin-right: 1.5rem !important; + } + + .me-lg-5 { + margin-right: 3rem !important; + } + + .me-lg-auto { + margin-right: auto !important; + } + + .mb-lg-0 { + margin-bottom: 0 !important; + } + + .mb-lg-1 { + margin-bottom: 0.25rem !important; + } + + .mb-lg-2 { + margin-bottom: 0.5rem !important; + } + + .mb-lg-3 { + margin-bottom: 1rem !important; + } + + .mb-lg-4 { + margin-bottom: 1.5rem !important; + } + + .mb-lg-5 { + margin-bottom: 3rem !important; + } + + .mb-lg-auto { + margin-bottom: auto !important; + } + + .ms-lg-0 { + margin-left: 0 !important; + } + + .ms-lg-1 { + margin-left: 0.25rem !important; + } + + .ms-lg-2 { + margin-left: 0.5rem !important; + } + + .ms-lg-3 { + margin-left: 1rem !important; + } + + .ms-lg-4 { + margin-left: 1.5rem !important; + } + + .ms-lg-5 { + margin-left: 3rem !important; + } + + .ms-lg-auto { + margin-left: auto !important; + } + + .p-lg-0 { + padding: 0 !important; + } + + .p-lg-1 { + padding: 0.25rem !important; + } + + .p-lg-2 { + padding: 0.5rem !important; + } + + .p-lg-3 { + padding: 1rem !important; + } + + .p-lg-4 { + padding: 1.5rem !important; + } + + .p-lg-5 { + padding: 3rem !important; + } + + .px-lg-0 { + padding-right: 0 !important; + padding-left: 0 !important; + } + + .px-lg-1 { + padding-right: 0.25rem !important; + padding-left: 0.25rem !important; + } + + .px-lg-2 { + padding-right: 0.5rem !important; + padding-left: 0.5rem !important; + } + + .px-lg-3 { + padding-right: 1rem !important; + padding-left: 1rem !important; + } + + .px-lg-4 { + padding-right: 1.5rem !important; + padding-left: 1.5rem !important; + } + + .px-lg-5 { + padding-right: 3rem !important; + padding-left: 3rem !important; + } + + .py-lg-0 { + padding-top: 0 !important; + padding-bottom: 0 !important; + } + + .py-lg-1 { + padding-top: 0.25rem !important; + padding-bottom: 0.25rem !important; + } + + .py-lg-2 { + padding-top: 0.5rem !important; + padding-bottom: 0.5rem !important; + } + + .py-lg-3 { + padding-top: 1rem !important; + padding-bottom: 1rem !important; + } + + .py-lg-4 { + padding-top: 1.5rem !important; + padding-bottom: 1.5rem !important; + } + + .py-lg-5 { + padding-top: 3rem !important; + padding-bottom: 3rem !important; + } + + .pt-lg-0 { + padding-top: 0 !important; + } + + .pt-lg-1 { + padding-top: 0.25rem !important; + } + + .pt-lg-2 { + padding-top: 0.5rem !important; + } + + .pt-lg-3 { + padding-top: 1rem !important; + } + + .pt-lg-4 { + padding-top: 1.5rem !important; + } + + .pt-lg-5 { + padding-top: 3rem !important; + } + + .pe-lg-0 { + padding-right: 0 !important; + } + + .pe-lg-1 { + padding-right: 0.25rem !important; + } + + .pe-lg-2 { + padding-right: 0.5rem !important; + } + + .pe-lg-3 { + padding-right: 1rem !important; + } + + .pe-lg-4 { + padding-right: 1.5rem !important; + } + + .pe-lg-5 { + padding-right: 3rem !important; + } + + .pb-lg-0 { + padding-bottom: 0 !important; + } + + .pb-lg-1 { + padding-bottom: 0.25rem !important; + } + + .pb-lg-2 { + padding-bottom: 0.5rem !important; + } + + .pb-lg-3 { + padding-bottom: 1rem !important; + } + + .pb-lg-4 { + padding-bottom: 1.5rem !important; + } + + .pb-lg-5 { + padding-bottom: 3rem !important; + } + + .ps-lg-0 { + padding-left: 0 !important; + } + + .ps-lg-1 { + padding-left: 0.25rem !important; + } + + .ps-lg-2 { + padding-left: 0.5rem !important; + } + + .ps-lg-3 { + padding-left: 1rem !important; + } + + .ps-lg-4 { + padding-left: 1.5rem !important; + } + + .ps-lg-5 { + padding-left: 3rem !important; + } +} +@media (min-width: 1200px) { + .d-xl-inline { + display: inline !important; + } + + .d-xl-inline-block { + display: inline-block !important; + } + + .d-xl-block { + display: block !important; + } + + .d-xl-grid { + display: grid !important; + } + + .d-xl-table { + display: table !important; + } + + .d-xl-table-row { + display: table-row !important; + } + + .d-xl-table-cell { + display: table-cell !important; + } + + .d-xl-flex { + display: flex !important; + } + + .d-xl-inline-flex { + display: inline-flex !important; + } + + .d-xl-none { + display: none !important; + } + + .flex-xl-fill { + flex: 1 1 auto !important; + } + + .flex-xl-row { + flex-direction: row !important; + } + + .flex-xl-column { + flex-direction: column !important; + } + + .flex-xl-row-reverse { + flex-direction: row-reverse !important; + } + + .flex-xl-column-reverse { + flex-direction: column-reverse !important; + } + + .flex-xl-grow-0 { + flex-grow: 0 !important; + } + + .flex-xl-grow-1 { + flex-grow: 1 !important; + } + + .flex-xl-shrink-0 { + flex-shrink: 0 !important; + } + + .flex-xl-shrink-1 { + flex-shrink: 1 !important; + } + + .flex-xl-wrap { + flex-wrap: wrap !important; + } + + .flex-xl-nowrap { + flex-wrap: nowrap !important; + } + + .flex-xl-wrap-reverse { + flex-wrap: wrap-reverse !important; + } + + .justify-content-xl-start { + justify-content: flex-start !important; + } + + .justify-content-xl-end { + justify-content: flex-end !important; + } + + .justify-content-xl-center { + justify-content: center !important; + } + + .justify-content-xl-between { + justify-content: space-between !important; + } + + .justify-content-xl-around { + justify-content: space-around !important; + } + + .justify-content-xl-evenly { + justify-content: space-evenly !important; + } + + .align-items-xl-start { + align-items: flex-start !important; + } + + .align-items-xl-end { + align-items: flex-end !important; + } + + .align-items-xl-center { + align-items: center !important; + } + + .align-items-xl-baseline { + align-items: baseline !important; + } + + .align-items-xl-stretch { + align-items: stretch !important; + } + + .align-content-xl-start { + align-content: flex-start !important; + } + + .align-content-xl-end { + align-content: flex-end !important; + } + + .align-content-xl-center { + align-content: center !important; + } + + .align-content-xl-between { + align-content: space-between !important; + } + + .align-content-xl-around { + align-content: space-around !important; + } + + .align-content-xl-stretch { + align-content: stretch !important; + } + + .align-self-xl-auto { + align-self: auto !important; + } + + .align-self-xl-start { + align-self: flex-start !important; + } + + .align-self-xl-end { + align-self: flex-end !important; + } + + .align-self-xl-center { + align-self: center !important; + } + + .align-self-xl-baseline { + align-self: baseline !important; + } + + .align-self-xl-stretch { + align-self: stretch !important; + } + + .order-xl-first { + order: -1 !important; + } + + .order-xl-0 { + order: 0 !important; + } + + .order-xl-1 { + order: 1 !important; + } + + .order-xl-2 { + order: 2 !important; + } + + .order-xl-3 { + order: 3 !important; + } + + .order-xl-4 { + order: 4 !important; + } + + .order-xl-5 { + order: 5 !important; + } + + .order-xl-last { + order: 6 !important; + } + + .m-xl-0 { + margin: 0 !important; + } + + .m-xl-1 { + margin: 0.25rem !important; + } + + .m-xl-2 { + margin: 0.5rem !important; + } + + .m-xl-3 { + margin: 1rem !important; + } + + .m-xl-4 { + margin: 1.5rem !important; + } + + .m-xl-5 { + margin: 3rem !important; + } + + .m-xl-auto { + margin: auto !important; + } + + .mx-xl-0 { + margin-right: 0 !important; + margin-left: 0 !important; + } + + .mx-xl-1 { + margin-right: 0.25rem !important; + margin-left: 0.25rem !important; + } + + .mx-xl-2 { + margin-right: 0.5rem !important; + margin-left: 0.5rem !important; + } + + .mx-xl-3 { + margin-right: 1rem !important; + margin-left: 1rem !important; + } + + .mx-xl-4 { + margin-right: 1.5rem !important; + margin-left: 1.5rem !important; + } + + .mx-xl-5 { + margin-right: 3rem !important; + margin-left: 3rem !important; + } + + .mx-xl-auto { + margin-right: auto !important; + margin-left: auto !important; + } + + .my-xl-0 { + margin-top: 0 !important; + margin-bottom: 0 !important; + } + + .my-xl-1 { + margin-top: 0.25rem !important; + margin-bottom: 0.25rem !important; + } + + .my-xl-2 { + margin-top: 0.5rem !important; + margin-bottom: 0.5rem !important; + } + + .my-xl-3 { + margin-top: 1rem !important; + margin-bottom: 1rem !important; + } + + .my-xl-4 { + margin-top: 1.5rem !important; + margin-bottom: 1.5rem !important; + } + + .my-xl-5 { + margin-top: 3rem !important; + margin-bottom: 3rem !important; + } + + .my-xl-auto { + margin-top: auto !important; + margin-bottom: auto !important; + } + + .mt-xl-0 { + margin-top: 0 !important; + } + + .mt-xl-1 { + margin-top: 0.25rem !important; + } + + .mt-xl-2 { + margin-top: 0.5rem !important; + } + + .mt-xl-3 { + margin-top: 1rem !important; + } + + .mt-xl-4 { + margin-top: 1.5rem !important; + } + + .mt-xl-5 { + margin-top: 3rem !important; + } + + .mt-xl-auto { + margin-top: auto !important; + } + + .me-xl-0 { + margin-right: 0 !important; + } + + .me-xl-1 { + margin-right: 0.25rem !important; + } + + .me-xl-2 { + margin-right: 0.5rem !important; + } + + .me-xl-3 { + margin-right: 1rem !important; + } + + .me-xl-4 { + margin-right: 1.5rem !important; + } + + .me-xl-5 { + margin-right: 3rem !important; + } + + .me-xl-auto { + margin-right: auto !important; + } + + .mb-xl-0 { + margin-bottom: 0 !important; + } + + .mb-xl-1 { + margin-bottom: 0.25rem !important; + } + + .mb-xl-2 { + margin-bottom: 0.5rem !important; + } + + .mb-xl-3 { + margin-bottom: 1rem !important; + } + + .mb-xl-4 { + margin-bottom: 1.5rem !important; + } + + .mb-xl-5 { + margin-bottom: 3rem !important; + } + + .mb-xl-auto { + margin-bottom: auto !important; + } + + .ms-xl-0 { + margin-left: 0 !important; + } + + .ms-xl-1 { + margin-left: 0.25rem !important; + } + + .ms-xl-2 { + margin-left: 0.5rem !important; + } + + .ms-xl-3 { + margin-left: 1rem !important; + } + + .ms-xl-4 { + margin-left: 1.5rem !important; + } + + .ms-xl-5 { + margin-left: 3rem !important; + } + + .ms-xl-auto { + margin-left: auto !important; + } + + .p-xl-0 { + padding: 0 !important; + } + + .p-xl-1 { + padding: 0.25rem !important; + } + + .p-xl-2 { + padding: 0.5rem !important; + } + + .p-xl-3 { + padding: 1rem !important; + } + + .p-xl-4 { + padding: 1.5rem !important; + } + + .p-xl-5 { + padding: 3rem !important; + } + + .px-xl-0 { + padding-right: 0 !important; + padding-left: 0 !important; + } + + .px-xl-1 { + padding-right: 0.25rem !important; + padding-left: 0.25rem !important; + } + + .px-xl-2 { + padding-right: 0.5rem !important; + padding-left: 0.5rem !important; + } + + .px-xl-3 { + padding-right: 1rem !important; + padding-left: 1rem !important; + } + + .px-xl-4 { + padding-right: 1.5rem !important; + padding-left: 1.5rem !important; + } + + .px-xl-5 { + padding-right: 3rem !important; + padding-left: 3rem !important; + } + + .py-xl-0 { + padding-top: 0 !important; + padding-bottom: 0 !important; + } + + .py-xl-1 { + padding-top: 0.25rem !important; + padding-bottom: 0.25rem !important; + } + + .py-xl-2 { + padding-top: 0.5rem !important; + padding-bottom: 0.5rem !important; + } + + .py-xl-3 { + padding-top: 1rem !important; + padding-bottom: 1rem !important; + } + + .py-xl-4 { + padding-top: 1.5rem !important; + padding-bottom: 1.5rem !important; + } + + .py-xl-5 { + padding-top: 3rem !important; + padding-bottom: 3rem !important; + } + + .pt-xl-0 { + padding-top: 0 !important; + } + + .pt-xl-1 { + padding-top: 0.25rem !important; + } + + .pt-xl-2 { + padding-top: 0.5rem !important; + } + + .pt-xl-3 { + padding-top: 1rem !important; + } + + .pt-xl-4 { + padding-top: 1.5rem !important; + } + + .pt-xl-5 { + padding-top: 3rem !important; + } + + .pe-xl-0 { + padding-right: 0 !important; + } + + .pe-xl-1 { + padding-right: 0.25rem !important; + } + + .pe-xl-2 { + padding-right: 0.5rem !important; + } + + .pe-xl-3 { + padding-right: 1rem !important; + } + + .pe-xl-4 { + padding-right: 1.5rem !important; + } + + .pe-xl-5 { + padding-right: 3rem !important; + } + + .pb-xl-0 { + padding-bottom: 0 !important; + } + + .pb-xl-1 { + padding-bottom: 0.25rem !important; + } + + .pb-xl-2 { + padding-bottom: 0.5rem !important; + } + + .pb-xl-3 { + padding-bottom: 1rem !important; + } + + .pb-xl-4 { + padding-bottom: 1.5rem !important; + } + + .pb-xl-5 { + padding-bottom: 3rem !important; + } + + .ps-xl-0 { + padding-left: 0 !important; + } + + .ps-xl-1 { + padding-left: 0.25rem !important; + } + + .ps-xl-2 { + padding-left: 0.5rem !important; + } + + .ps-xl-3 { + padding-left: 1rem !important; + } + + .ps-xl-4 { + padding-left: 1.5rem !important; + } + + .ps-xl-5 { + padding-left: 3rem !important; + } +} +@media (min-width: 1400px) { + .d-xxl-inline { + display: inline !important; + } + + .d-xxl-inline-block { + display: inline-block !important; + } + + .d-xxl-block { + display: block !important; + } + + .d-xxl-grid { + display: grid !important; + } + + .d-xxl-table { + display: table !important; + } + + .d-xxl-table-row { + display: table-row !important; + } + + .d-xxl-table-cell { + display: table-cell !important; + } + + .d-xxl-flex { + display: flex !important; + } + + .d-xxl-inline-flex { + display: inline-flex !important; + } + + .d-xxl-none { + display: none !important; + } + + .flex-xxl-fill { + flex: 1 1 auto !important; + } + + .flex-xxl-row { + flex-direction: row !important; + } + + .flex-xxl-column { + flex-direction: column !important; + } + + .flex-xxl-row-reverse { + flex-direction: row-reverse !important; + } + + .flex-xxl-column-reverse { + flex-direction: column-reverse !important; + } + + .flex-xxl-grow-0 { + flex-grow: 0 !important; + } + + .flex-xxl-grow-1 { + flex-grow: 1 !important; + } + + .flex-xxl-shrink-0 { + flex-shrink: 0 !important; + } + + .flex-xxl-shrink-1 { + flex-shrink: 1 !important; + } + + .flex-xxl-wrap { + flex-wrap: wrap !important; + } + + .flex-xxl-nowrap { + flex-wrap: nowrap !important; + } + + .flex-xxl-wrap-reverse { + flex-wrap: wrap-reverse !important; + } + + .justify-content-xxl-start { + justify-content: flex-start !important; + } + + .justify-content-xxl-end { + justify-content: flex-end !important; + } + + .justify-content-xxl-center { + justify-content: center !important; + } + + .justify-content-xxl-between { + justify-content: space-between !important; + } + + .justify-content-xxl-around { + justify-content: space-around !important; + } + + .justify-content-xxl-evenly { + justify-content: space-evenly !important; + } + + .align-items-xxl-start { + align-items: flex-start !important; + } + + .align-items-xxl-end { + align-items: flex-end !important; + } + + .align-items-xxl-center { + align-items: center !important; + } + + .align-items-xxl-baseline { + align-items: baseline !important; + } + + .align-items-xxl-stretch { + align-items: stretch !important; + } + + .align-content-xxl-start { + align-content: flex-start !important; + } + + .align-content-xxl-end { + align-content: flex-end !important; + } + + .align-content-xxl-center { + align-content: center !important; + } + + .align-content-xxl-between { + align-content: space-between !important; + } + + .align-content-xxl-around { + align-content: space-around !important; + } + + .align-content-xxl-stretch { + align-content: stretch !important; + } + + .align-self-xxl-auto { + align-self: auto !important; + } + + .align-self-xxl-start { + align-self: flex-start !important; + } + + .align-self-xxl-end { + align-self: flex-end !important; + } + + .align-self-xxl-center { + align-self: center !important; + } + + .align-self-xxl-baseline { + align-self: baseline !important; + } + + .align-self-xxl-stretch { + align-self: stretch !important; + } + + .order-xxl-first { + order: -1 !important; + } + + .order-xxl-0 { + order: 0 !important; + } + + .order-xxl-1 { + order: 1 !important; + } + + .order-xxl-2 { + order: 2 !important; + } + + .order-xxl-3 { + order: 3 !important; + } + + .order-xxl-4 { + order: 4 !important; + } + + .order-xxl-5 { + order: 5 !important; + } + + .order-xxl-last { + order: 6 !important; + } + + .m-xxl-0 { + margin: 0 !important; + } + + .m-xxl-1 { + margin: 0.25rem !important; + } + + .m-xxl-2 { + margin: 0.5rem !important; + } + + .m-xxl-3 { + margin: 1rem !important; + } + + .m-xxl-4 { + margin: 1.5rem !important; + } + + .m-xxl-5 { + margin: 3rem !important; + } + + .m-xxl-auto { + margin: auto !important; + } + + .mx-xxl-0 { + margin-right: 0 !important; + margin-left: 0 !important; + } + + .mx-xxl-1 { + margin-right: 0.25rem !important; + margin-left: 0.25rem !important; + } + + .mx-xxl-2 { + margin-right: 0.5rem !important; + margin-left: 0.5rem !important; + } + + .mx-xxl-3 { + margin-right: 1rem !important; + margin-left: 1rem !important; + } + + .mx-xxl-4 { + margin-right: 1.5rem !important; + margin-left: 1.5rem !important; + } + + .mx-xxl-5 { + margin-right: 3rem !important; + margin-left: 3rem !important; + } + + .mx-xxl-auto { + margin-right: auto !important; + margin-left: auto !important; + } + + .my-xxl-0 { + margin-top: 0 !important; + margin-bottom: 0 !important; + } + + .my-xxl-1 { + margin-top: 0.25rem !important; + margin-bottom: 0.25rem !important; + } + + .my-xxl-2 { + margin-top: 0.5rem !important; + margin-bottom: 0.5rem !important; + } + + .my-xxl-3 { + margin-top: 1rem !important; + margin-bottom: 1rem !important; + } + + .my-xxl-4 { + margin-top: 1.5rem !important; + margin-bottom: 1.5rem !important; + } + + .my-xxl-5 { + margin-top: 3rem !important; + margin-bottom: 3rem !important; + } + + .my-xxl-auto { + margin-top: auto !important; + margin-bottom: auto !important; + } + + .mt-xxl-0 { + margin-top: 0 !important; + } + + .mt-xxl-1 { + margin-top: 0.25rem !important; + } + + .mt-xxl-2 { + margin-top: 0.5rem !important; + } + + .mt-xxl-3 { + margin-top: 1rem !important; + } + + .mt-xxl-4 { + margin-top: 1.5rem !important; + } + + .mt-xxl-5 { + margin-top: 3rem !important; + } + + .mt-xxl-auto { + margin-top: auto !important; + } + + .me-xxl-0 { + margin-right: 0 !important; + } + + .me-xxl-1 { + margin-right: 0.25rem !important; + } + + .me-xxl-2 { + margin-right: 0.5rem !important; + } + + .me-xxl-3 { + margin-right: 1rem !important; + } + + .me-xxl-4 { + margin-right: 1.5rem !important; + } + + .me-xxl-5 { + margin-right: 3rem !important; + } + + .me-xxl-auto { + margin-right: auto !important; + } + + .mb-xxl-0 { + margin-bottom: 0 !important; + } + + .mb-xxl-1 { + margin-bottom: 0.25rem !important; + } + + .mb-xxl-2 { + margin-bottom: 0.5rem !important; + } + + .mb-xxl-3 { + margin-bottom: 1rem !important; + } + + .mb-xxl-4 { + margin-bottom: 1.5rem !important; + } + + .mb-xxl-5 { + margin-bottom: 3rem !important; + } + + .mb-xxl-auto { + margin-bottom: auto !important; + } + + .ms-xxl-0 { + margin-left: 0 !important; + } + + .ms-xxl-1 { + margin-left: 0.25rem !important; + } + + .ms-xxl-2 { + margin-left: 0.5rem !important; + } + + .ms-xxl-3 { + margin-left: 1rem !important; + } + + .ms-xxl-4 { + margin-left: 1.5rem !important; + } + + .ms-xxl-5 { + margin-left: 3rem !important; + } + + .ms-xxl-auto { + margin-left: auto !important; + } + + .p-xxl-0 { + padding: 0 !important; + } + + .p-xxl-1 { + padding: 0.25rem !important; + } + + .p-xxl-2 { + padding: 0.5rem !important; + } + + .p-xxl-3 { + padding: 1rem !important; + } + + .p-xxl-4 { + padding: 1.5rem !important; + } + + .p-xxl-5 { + padding: 3rem !important; + } + + .px-xxl-0 { + padding-right: 0 !important; + padding-left: 0 !important; + } + + .px-xxl-1 { + padding-right: 0.25rem !important; + padding-left: 0.25rem !important; + } + + .px-xxl-2 { + padding-right: 0.5rem !important; + padding-left: 0.5rem !important; + } + + .px-xxl-3 { + padding-right: 1rem !important; + padding-left: 1rem !important; + } + + .px-xxl-4 { + padding-right: 1.5rem !important; + padding-left: 1.5rem !important; + } + + .px-xxl-5 { + padding-right: 3rem !important; + padding-left: 3rem !important; + } + + .py-xxl-0 { + padding-top: 0 !important; + padding-bottom: 0 !important; + } + + .py-xxl-1 { + padding-top: 0.25rem !important; + padding-bottom: 0.25rem !important; + } + + .py-xxl-2 { + padding-top: 0.5rem !important; + padding-bottom: 0.5rem !important; + } + + .py-xxl-3 { + padding-top: 1rem !important; + padding-bottom: 1rem !important; + } + + .py-xxl-4 { + padding-top: 1.5rem !important; + padding-bottom: 1.5rem !important; + } + + .py-xxl-5 { + padding-top: 3rem !important; + padding-bottom: 3rem !important; + } + + .pt-xxl-0 { + padding-top: 0 !important; + } + + .pt-xxl-1 { + padding-top: 0.25rem !important; + } + + .pt-xxl-2 { + padding-top: 0.5rem !important; + } + + .pt-xxl-3 { + padding-top: 1rem !important; + } + + .pt-xxl-4 { + padding-top: 1.5rem !important; + } + + .pt-xxl-5 { + padding-top: 3rem !important; + } + + .pe-xxl-0 { + padding-right: 0 !important; + } + + .pe-xxl-1 { + padding-right: 0.25rem !important; + } + + .pe-xxl-2 { + padding-right: 0.5rem !important; + } + + .pe-xxl-3 { + padding-right: 1rem !important; + } + + .pe-xxl-4 { + padding-right: 1.5rem !important; + } + + .pe-xxl-5 { + padding-right: 3rem !important; + } + + .pb-xxl-0 { + padding-bottom: 0 !important; + } + + .pb-xxl-1 { + padding-bottom: 0.25rem !important; + } + + .pb-xxl-2 { + padding-bottom: 0.5rem !important; + } + + .pb-xxl-3 { + padding-bottom: 1rem !important; + } + + .pb-xxl-4 { + padding-bottom: 1.5rem !important; + } + + .pb-xxl-5 { + padding-bottom: 3rem !important; + } + + .ps-xxl-0 { + padding-left: 0 !important; + } + + .ps-xxl-1 { + padding-left: 0.25rem !important; + } + + .ps-xxl-2 { + padding-left: 0.5rem !important; + } + + .ps-xxl-3 { + padding-left: 1rem !important; + } + + .ps-xxl-4 { + padding-left: 1.5rem !important; + } + + .ps-xxl-5 { + padding-left: 3rem !important; + } +} +@media print { + .d-print-inline { + display: inline !important; + } + + .d-print-inline-block { + display: inline-block !important; + } + + .d-print-block { + display: block !important; + } + + .d-print-grid { + display: grid !important; + } + + .d-print-table { + display: table !important; + } + + .d-print-table-row { + display: table-row !important; + } + + .d-print-table-cell { + display: table-cell !important; + } + + .d-print-flex { + display: flex !important; + } + + .d-print-inline-flex { + display: inline-flex !important; + } + + .d-print-none { + display: none !important; + } +} + +/*# sourceMappingURL=bootstrap-grid.css.map */ \ No newline at end of file diff --git a/samples/web-app-file-storage/src/static/bootstrap/css/bootstrap-grid.css.map b/samples/web-app-file-storage/src/static/bootstrap/css/bootstrap-grid.css.map new file mode 100644 index 0000000..6bcd85c --- /dev/null +++ b/samples/web-app-file-storage/src/static/bootstrap/css/bootstrap-grid.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["../../scss/bootstrap-grid.scss","../../scss/_root.scss","bootstrap-grid.css","../../scss/_containers.scss","../../scss/mixins/_container.scss","../../scss/mixins/_breakpoints.scss","../../scss/_variables.scss","../../scss/_grid.scss","../../scss/mixins/_grid.scss","../../scss/mixins/_utilities.scss","../../scss/utilities/_api.scss"],"names":[],"mappings":"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BAAA;AP63DZ;;AOp4DQ;EAOI,6BAAA;APi4DZ;;AGx4DI;EIAI;IAOI,0BAAA;EPs4DV;;EO74DM;IAOI,gCAAA;EP04DV;;EOj5DM;IAOI,yBAAA;EP84DV;;EOr5DM;IAOI,wBAAA;EPk5DV;;EOz5DM;IAOI,yBAAA;EPs5DV;;EO75DM;IAOI,6BAAA;EP05DV;;EOj6DM;IAOI,8BAAA;EP85DV;;EOr6DM;IAOI,wBAAA;EPk6DV;;EOz6DM;IAOI,+BAAA;EPs6DV;;EO76DM;IAOI,wBAAA;EP06DV;;EOj7DM;IAOI,yBAAA;EP86DV;;EOr7DM;IAOI,8BAAA;EPk7DV;;EOz7DM;IAOI,iCAAA;EPs7DV;;EO77DM;IAOI,sCAAA;EP07DV;;EOj8DM;IAOI,yCAAA;EP87DV;;EOr8DM;IAOI,uBAAA;EPk8DV;;EOz8DM;IAOI,uBAAA;EPs8DV;;EO78DM;IAOI,yBAAA;EP08DV;;EOj9DM;IAOI,yBAAA;EP88DV;;EOr9DM;IAOI,0BAAA;EPk9DV;;EOz9DM;IAOI,4BAAA;EPs9DV;;EO79DM;IAOI,kCAAA;EP09DV;;EOj+DM;IAOI,sCAAA;EP89DV;;EOr+DM;IAOI,oCAAA;EPk+DV;;EOz+DM;IAOI,kCAAA;EPs+DV;;EO7+DM;IAOI,yCAAA;EP0+DV;;EOj/DM;IAOI,wCAAA;EP8+DV;;EOr/DM;IAOI,wCAAA;EPk/DV;;EOz/DM;IAOI,kCAAA;EPs/DV;;EO7/DM;IAOI,gCAAA;EP0/DV;;EOjgEM;IAOI,8BAAA;EP8/DV;;EOrgEM;IAOI,gCAAA;EPkgEV;;EOzgEM;IAOI,+BAAA;EPsgEV;;EO7gEM;IAOI,oCAAA;EP0gEV;;EOjhEM;IAOI,kCAAA;EP8gEV;;EOrhEM;IAOI,gCAAA;EPkhEV;;EOzhEM;IAOI,uCAAA;EPshEV;;EO7hEM;IAOI,sCAAA;EP0hEV;;EOjiEM;IAOI,iCAAA;EP8hEV;;EOriEM;IAOI,2BAAA;EPkiEV;;EOziEM;IAOI,iCAAA;EPsiEV;;EO7iEM;IAOI,+BAAA;EP0iEV;;EOjjEM;IAOI,6BAAA;EP8iEV;;EOrjEM;IAOI,+BAAA;EPkjEV;;EOzjEM;IAOI,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o5EV;;EO35EM;IAOI,2BAAA;EPw5EV;;EO/5EM;IAOI,iCAAA;EP45EV;;EOn6EM;IAOI,gCAAA;EPg6EV;;EOv6EM;IAOI,8BAAA;EPo6EV;;EO36EM;IAOI,gCAAA;EPw6EV;;EO/6EM;IAOI,8BAAA;EP46EV;;EOn7EM;IAOI,4BAAA;EPg7EV;;EOv7EM;IAOI,kCAAA;EPo7EV;;EO37EM;IAOI,iCAAA;EPw7EV;;EO/7EM;IAOI,+BAAA;EP47EV;;EOn8EM;IAOI,iCAAA;EPg8EV;;EOv8EM;IAOI,+BAAA;EPo8EV;;EO38EM;IAOI,0BAAA;EPw8EV;;EO/8EM;IAOI,gCAAA;EP48EV;;EOn9EM;IAOI,+BAAA;EPg9EV;;EOv9EM;IAOI,6BAAA;EPo9EV;;EO39EM;IAOI,+BAAA;EPw9EV;;EO/9EM;IAOI,6BAAA;EP49EV;AACF;AGp+EI;EIAI;IAOI,0BAAA;EPi+EV;;EOx+EM;IAOI,gCAAA;EPq+EV;;EO5+EM;IAOI,yBAAA;EPy+EV;;EOh/EM;IAOI,wBAAA;EP6+EV;;EOp/EM;IAOI,yBAAA;EPi/EV;;EOx/EM;IAOI,6BAAA;EPq/EV;;EO5/EM;IAOI,8BAAA;EPy/EV;;EOhgFM;IAOI,wBAAA;EP6/EV;;EOpgFM;IAOI,+BAAA;EPigFV;;EOxgFM;IAOI,wBAAA;EPqgFV;;EO5gFM;IAOI,yBAAA;EPygFV;;EOhhFM;IAOI,8BAAA;EP6gFV;;EOphFM;IAOI,iCAAA;EPihFV;;EOxhFM;IAOI,sCAAA;EPqhFV;;EO5hFM;IAOI,yCAAA;EPyhFV;;EOhiFM;IAOI,uBAAA;EP6hFV;;EOpiFM;IAOI,uBAAA;EPiiFV;;EOxiFM;IAOI,yBAAA;EPqiFV;;EO5iFM;IAOI,yBAAA;EPyiFV;;EOhjFM;IAOI,0BAAA;EP6iFV;;EOpjFM;IAOI,4BAAA;EPijFV;;EOxjFM;IAOI,kCAAA;EPqjFV;;EO5jFM;IAOI,sCAAA;EPyjFV;;EOhkFM;IAOI,oCAAA;EP6jFV;;EOpkFM;IAOI,kCAAA;EPikFV;;EOxkFM;IAOI,yCAAA;EPqkFV;;EO5kFM;IAOI,wCAAA;EPykFV;;EOhlFM;IAOI,wCA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EPomGV;;EO3mGM;IAOI,8BAAA;EPwmGV;;EO/mGM;IAOI,iCAAA;EP4mGV;;EOnnGM;IAOI,sCAAA;EPgnGV;;EOvnGM;IAOI,yCAAA;EPonGV;;EO3nGM;IAOI,uBAAA;EPwnGV;;EO/nGM;IAOI,uBAAA;EP4nGV;;EOnoGM;IAOI,yBAAA;EPgoGV;;EOvoGM;IAOI,yBAAA;EPooGV;;EO3oGM;IAOI,0BAAA;EPwoGV;;EO/oGM;IAOI,4BAAA;EP4oGV;;EOnpGM;IAOI,kCAAA;EPgpGV;;EOvpGM;IAOI,sCAAA;EPopGV;;EO3pGM;IAOI,oCAAA;EPwpGV;;EO/pGM;IAOI,kCAAA;EP4pGV;;EOnqGM;IAOI,yCAAA;EPgqGV;;EOvqGM;IAOI,wCAAA;EPoqGV;;EO3qGM;IAOI,wCAAA;EPwqGV;;EO/qGM;IAOI,kCAAA;EP4qGV;;EOnrGM;IAOI,gCAAA;EPgrGV;;EOvrGM;IAOI,8BAAA;EPorGV;;EO3rGM;IAOI,gCAAA;EPwrGV;;EO/rGM;IAOI,+BAAA;EP4rGV;;EOnsGM;IAOI,oCAAA;EPgsGV;;EOvsGM;IAOI,kCAAA;EPosGV;;EO3sGM;IAOI,gCAAA;EPwsGV;;EO/sGM;IAOI,uCAAA;EP4sGV;;EOntGM;IAOI,sCAAA;EPgtGV;;EOvtGM;IAOI,iCAAA;EPotGV;;EO3tGM;IAOI,2BAAA;EPwtGV;;EO/tGM;IAOI,iCAAA;EP4tGV;;EOnuGM;IAOI,+BAAA;EPguGV;;EOvuGM;IAOI,6BAAA;EPouGV;;EO3uGM;IAOI,+BAAA;EPwuGV;;EO/uGM;IAOI,8BAAA;EP4uGV;;EOnvGM;IAOI,oBAAA;EPgvGV;;EOvvGM;IAOI,mBAAA;EPovGV;;EO3vGM;IAOI,mBAAA;EPwvGV;;EO/vGM;IAOI,mBAAA;EP4vGV;;EOnwGM;IAOI,mBAAA;EPgwGV;;EOvwGM;IAOI,mBAAA;EPowGV;;EO3wGM;IAOI,mBAAA;EPwwGV;;EO/wGM;IAOI,mBAAA;EP4wGV;;EOnxGM;IAOI,oBAAA;EPgxGV;;EOvxGM;IAOI,0BAAA;EPoxGV;;EO3xGM;IAOI,yBAAA;EPwxGV;;EO/xGM;IAOI,uBAAA;EP4x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HM;IAOI,0BAAA;EP8nHV;;EOroHM;IAOI,gCAAA;EPkoHV;;EOzoHM;IAOI,+BAAA;EPsoHV;;EO7oHM;IAOI,6BAAA;EP0oHV;;EOjpHM;IAOI,+BAAA;EP8oHV;;EOrpHM;IAOI,6BAAA;EPkpHV;AACF;AG1pHI;EIAI;IAOI,0BAAA;EPupHV;;EO9pHM;IAOI,gCAAA;EP2pHV;;EOlqHM;IAOI,yBAAA;EP+pHV;;EOtqHM;IAOI,wBAAA;EPmqHV;;EO1qHM;IAOI,yBAAA;EPuqHV;;EO9qHM;IAOI,6BAAA;EP2qHV;;EOlrHM;IAOI,8BAAA;EP+qHV;;EOtrHM;IAOI,wBAAA;EPmrHV;;EO1rHM;IAOI,+BAAA;EPurHV;;EO9rHM;IAOI,wBAAA;EP2rHV;;EOlsHM;IAOI,yBAAA;EP+rHV;;EOtsHM;IAOI,8BAAA;EPmsHV;;EO1sHM;IAOI,iCAAA;EPusHV;;EO9sHM;IAOI,sCAAA;EP2sHV;;EOltHM;IAOI,yCAAA;EP+sHV;;EOttHM;IAOI,uBAAA;EPmtHV;;EO1tHM;IAOI,uBAAA;EPutHV;;EO9tHM;IAOI,yBAAA;EP2tHV;;EOluHM;IAOI,yBAAA;EP+tHV;;EOtuHM;IAOI,0BAAA;EPmuHV;;EO1uHM;IAOI,4BAAA;EPuuHV;;EO9uHM;IAOI,kCAAA;EP2uHV;;EOlvHM;IAOI,sCAAA;EP+uHV;;EOtvHM;IAOI,oCAAA;EPmvHV;;EO1vHM;IAOI,kCAAA;EPuvHV;;EO9vHM;IAOI,yCAAA;EP2vHV;;EOlwHM;IAOI,wCAAA;EP+vHV;;EOtwHM;IAOI,wCAAA;EPmwHV;;EO1wHM;IAOI,kCAAA;EPuwHV;;EO9wHM;IAOI,gCAAA;EP2wHV;;EOlxHM;IAOI,8BAAA;EP+wHV;;EOtxHM;IAOI,gCAAA;EPmxHV;;EO1xHM;IAOI,+BAAA;EPuxHV;;EO9xHM;IAOI,oCAAA;EP2xHV;;EOlyHM;IAOI,kCAAA;EP+xHV;;EOtyHM;IAOI,gCAAA;EPmyHV;;EO1yHM;IAOI,uCAAA;EPuyHV;;EO9yHM;IAOI,sCAAA;EP2yHV;;EOlzHM;IAOI,iCAAA;EP+yHV;;EOtzHM;IAOI,2BAAA;EPmzHV;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IAOI,+BAAA;EPqpIV;;EO5pIM;IAOI,8BAAA;EPypIV;;EOhqIM;IAOI,4BAAA;EP6pIV;;EOpqIM;IAOI,8BAAA;EPiqIV;;EOxqIM;IAOI,4BAAA;EPqqIV;;EO5qIM;IAOI,2BAAA;EPyqIV;;EOhrIM;IAOI,iCAAA;EP6qIV;;EOprIM;IAOI,gCAAA;EPirIV;;EOxrIM;IAOI,8BAAA;EPqrIV;;EO5rIM;IAOI,gCAAA;EPyrIV;;EOhsIM;IAOI,8BAAA;EP6rIV;;EOpsIM;IAOI,4BAAA;EPisIV;;EOxsIM;IAOI,kCAAA;EPqsIV;;EO5sIM;IAOI,iCAAA;EPysIV;;EOhtIM;IAOI,+BAAA;EP6sIV;;EOptIM;IAOI,iCAAA;EPitIV;;EOxtIM;IAOI,+BAAA;EPqtIV;;EO5tIM;IAOI,0BAAA;EPytIV;;EOhuIM;IAOI,gCAAA;EP6tIV;;EOpuIM;IAOI,+BAAA;EPiuIV;;EOxuIM;IAOI,6BAAA;EPquIV;;EO5uIM;IAOI,+BAAA;EPyuIV;;EOhvIM;IAOI,6BAAA;EP6uIV;AACF;AGrvII;EIAI;IAOI,0BAAA;EPkvIV;;EOzvIM;IAOI,gCAAA;EPsvIV;;EO7vIM;IAOI,yBAAA;EP0vIV;;EOjwIM;IAOI,wBAAA;EP8vIV;;EOrwIM;IAOI,yBAAA;EPkwIV;;EOzwIM;IAOI,6BAAA;EPswIV;;EO7wIM;IAOI,8BAAA;EP0wIV;;EOjxIM;IAOI,wBAAA;EP8wIV;;EOrxIM;IAOI,+BAAA;EPkxIV;;EOzxIM;IAOI,wBAAA;EPsxIV;;EO7xIM;IAOI,yBAAA;EP0xIV;;EOjyIM;IAOI,8BAAA;EP8xIV;;EOryIM;IAOI,iCAAA;EPkyIV;;EOzyIM;IAOI,sCAAA;EPsyIV;;EO7yIM;IAOI,yCAAA;EP0yIV;;EOjzIM;IAOI,uBAAA;EP8yIV;;EOrzIM;IAOI,uBAAA;EPkzIV;;EOzzIM;IAOI,yBAAA;EPszIV;;EO7zIM;IAOI,yBAAA;EP0zIV;;EOj0IM;IAOI,0BAAA;EP8zIV;;EOr0IM;IAOI,4BAAA;EPk0IV;;EOz0IM;IAOI,kCAAA;EPs0IV;;EO70IM;IAOI,sCAAA;EP00IV;;EO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","file":"bootstrap-grid.css","sourcesContent":["/*!\n * Bootstrap Grid v5.1.3 (https://getbootstrap.com/)\n * Copyright 2011-2021 The Bootstrap Authors\n * Copyright 2011-2021 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n\n$include-column-box-sizing: true !default;\n\n@import \"functions\";\n@import \"variables\";\n\n@import \"mixins/lists\";\n@import \"mixins/breakpoints\";\n@import \"mixins/container\";\n@import \"mixins/grid\";\n@import \"mixins/utilities\";\n\n@import \"vendor/rfs\";\n\n@import \"root\";\n\n@import \"containers\";\n@import \"grid\";\n\n@import \"utilities\";\n// Only use the utilities we need\n// stylelint-disable-next-line scss/dollar-variable-default\n$utilities: map-get-multiple(\n $utilities,\n (\n \"display\",\n \"order\",\n \"flex\",\n \"flex-direction\",\n \"flex-grow\",\n \"flex-shrink\",\n \"flex-wrap\",\n \"justify-content\",\n \"align-items\",\n \"align-content\",\n \"align-self\",\n \"margin\",\n \"margin-x\",\n \"margin-y\",\n \"margin-top\",\n \"margin-end\",\n \"margin-bottom\",\n \"margin-start\",\n \"negative-margin\",\n \"negative-margin-x\",\n \"negative-margin-y\",\n \"negative-margin-top\",\n \"negative-margin-end\",\n \"negative-margin-bottom\",\n \"negative-margin-start\",\n \"padding\",\n \"padding-x\",\n \"padding-y\",\n \"padding-top\",\n \"padding-end\",\n \"padding-bottom\",\n \"padding-start\",\n )\n);\n\n@import \"utilities/api\";\n",":root {\n // Note: Custom variable values only support SassScript inside `#{}`.\n\n // Colors\n //\n // Generate palettes for full colors, grays, and theme colors.\n\n @each $color, $value in $colors {\n --#{$variable-prefix}#{$color}: #{$value};\n }\n\n @each $color, $value in $grays {\n --#{$variable-prefix}gray-#{$color}: #{$value};\n }\n\n @each $color, $value in $theme-colors {\n --#{$variable-prefix}#{$color}: #{$value};\n }\n\n @each $color, $value in $theme-colors-rgb {\n --#{$variable-prefix}#{$color}-rgb: #{$value};\n }\n\n --#{$variable-prefix}white-rgb: #{to-rgb($white)};\n --#{$variable-prefix}black-rgb: #{to-rgb($black)};\n --#{$variable-prefix}body-color-rgb: #{to-rgb($body-color)};\n --#{$variable-prefix}body-bg-rgb: #{to-rgb($body-bg)};\n\n // Fonts\n\n // Note: Use `inspect` for lists so that quoted items keep the quotes.\n // See https://github.com/sass/sass/issues/2383#issuecomment-336349172\n --#{$variable-prefix}font-sans-serif: #{inspect($font-family-sans-serif)};\n --#{$variable-prefix}font-monospace: #{inspect($font-family-monospace)};\n --#{$variable-prefix}gradient: #{$gradient};\n\n // Root and body\n // stylelint-disable custom-property-empty-line-before\n // scss-docs-start root-body-variables\n @if $font-size-root != null {\n --#{$variable-prefix}root-font-size: #{$font-size-root};\n }\n --#{$variable-prefix}body-font-family: #{$font-family-base};\n --#{$variable-prefix}body-font-size: #{$font-size-base};\n --#{$variable-prefix}body-font-weight: #{$font-weight-base};\n --#{$variable-prefix}body-line-height: #{$line-height-base};\n --#{$variable-prefix}body-color: #{$body-color};\n @if $body-text-align != null {\n --#{$variable-prefix}body-text-align: #{$body-text-align};\n }\n --#{$variable-prefix}body-bg: #{$body-bg};\n // scss-docs-end root-body-variables\n // stylelint-enable custom-property-empty-line-before\n}\n","/*!\n * Bootstrap Grid v5.1.3 (https://getbootstrap.com/)\n * Copyright 2011-2021 The Bootstrap Authors\n * Copyright 2011-2021 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n:root {\n --bs-blue: #0d6efd;\n --bs-indigo: #6610f2;\n --bs-purple: #6f42c1;\n --bs-pink: #d63384;\n --bs-red: #dc3545;\n --bs-orange: #fd7e14;\n --bs-yellow: #ffc107;\n --bs-green: #198754;\n --bs-teal: #20c997;\n --bs-cyan: #0dcaf0;\n --bs-white: #fff;\n --bs-gray: #6c757d;\n --bs-gray-dark: #343a40;\n --bs-gray-100: #f8f9fa;\n --bs-gray-200: #e9ecef;\n --bs-gray-300: #dee2e6;\n --bs-gray-400: #ced4da;\n --bs-gray-500: #adb5bd;\n --bs-gray-600: #6c757d;\n --bs-gray-700: #495057;\n --bs-gray-800: #343a40;\n --bs-gray-900: #212529;\n --bs-primary: #0d6efd;\n --bs-secondary: #6c757d;\n --bs-success: #198754;\n --bs-info: #0dcaf0;\n --bs-warning: #ffc107;\n --bs-danger: #dc3545;\n --bs-light: #f8f9fa;\n --bs-dark: #212529;\n --bs-primary-rgb: 13, 110, 253;\n --bs-secondary-rgb: 108, 117, 125;\n --bs-success-rgb: 25, 135, 84;\n --bs-info-rgb: 13, 202, 240;\n --bs-warning-rgb: 255, 193, 7;\n --bs-danger-rgb: 220, 53, 69;\n --bs-light-rgb: 248, 249, 250;\n --bs-dark-rgb: 33, 37, 41;\n --bs-white-rgb: 255, 255, 255;\n --bs-black-rgb: 0, 0, 0;\n --bs-body-color-rgb: 33, 37, 41;\n --bs-body-bg-rgb: 255, 255, 255;\n --bs-font-sans-serif: system-ui, -apple-system, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", \"Liberation Sans\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n --bs-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n --bs-gradient: linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));\n --bs-body-font-family: var(--bs-font-sans-serif);\n --bs-body-font-size: 1rem;\n --bs-body-font-weight: 400;\n --bs-body-line-height: 1.5;\n --bs-body-color: #212529;\n --bs-body-bg: #fff;\n}\n\n.container,\n.container-fluid,\n.container-xxl,\n.container-xl,\n.container-lg,\n.container-md,\n.container-sm {\n width: 100%;\n padding-right: var(--bs-gutter-x, 0.75rem);\n padding-left: var(--bs-gutter-x, 0.75rem);\n margin-right: auto;\n margin-left: auto;\n}\n\n@media (min-width: 576px) {\n .container-sm, .container {\n max-width: 540px;\n }\n}\n@media (min-width: 768px) {\n .container-md, .container-sm, .container {\n max-width: 720px;\n }\n}\n@media (min-width: 992px) {\n .container-lg, .container-md, .container-sm, .container {\n max-width: 960px;\n }\n}\n@media (min-width: 1200px) {\n .container-xl, .container-lg, .container-md, .container-sm, .container {\n max-width: 1140px;\n }\n}\n@media (min-width: 1400px) {\n .container-xxl, .container-xl, .container-lg, .container-md, .container-sm, .container {\n max-width: 1320px;\n }\n}\n.row {\n --bs-gutter-x: 1.5rem;\n --bs-gutter-y: 0;\n display: flex;\n flex-wrap: wrap;\n margin-top: calc(-1 * var(--bs-gutter-y));\n margin-right: calc(-0.5 * var(--bs-gutter-x));\n margin-left: calc(-0.5 * var(--bs-gutter-x));\n}\n.row > * {\n box-sizing: border-box;\n flex-shrink: 0;\n width: 100%;\n max-width: 100%;\n padding-right: calc(var(--bs-gutter-x) * 0.5);\n padding-left: calc(var(--bs-gutter-x) * 0.5);\n margin-top: var(--bs-gutter-y);\n}\n\n.col {\n flex: 1 0 0%;\n}\n\n.row-cols-auto > * {\n flex: 0 0 auto;\n width: auto;\n}\n\n.row-cols-1 > * {\n flex: 0 0 auto;\n width: 100%;\n}\n\n.row-cols-2 > * {\n flex: 0 0 auto;\n width: 50%;\n}\n\n.row-cols-3 > * {\n flex: 0 0 auto;\n width: 33.3333333333%;\n}\n\n.row-cols-4 > * {\n flex: 0 0 auto;\n width: 25%;\n}\n\n.row-cols-5 > * {\n flex: 0 0 auto;\n width: 20%;\n}\n\n.row-cols-6 > * {\n flex: 0 0 auto;\n width: 16.6666666667%;\n}\n\n.col-auto {\n flex: 0 0 auto;\n width: auto;\n}\n\n.col-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n}\n\n.col-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n}\n\n.col-3 {\n flex: 0 0 auto;\n width: 25%;\n}\n\n.col-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n}\n\n.col-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n}\n\n.col-6 {\n flex: 0 0 auto;\n width: 50%;\n}\n\n.col-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n}\n\n.col-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n}\n\n.col-9 {\n flex: 0 0 auto;\n width: 75%;\n}\n\n.col-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n}\n\n.col-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n}\n\n.col-12 {\n flex: 0 0 auto;\n width: 100%;\n}\n\n.offset-1 {\n margin-left: 8.33333333%;\n}\n\n.offset-2 {\n margin-left: 16.66666667%;\n}\n\n.offset-3 {\n margin-left: 25%;\n}\n\n.offset-4 {\n margin-left: 33.33333333%;\n}\n\n.offset-5 {\n margin-left: 41.66666667%;\n}\n\n.offset-6 {\n margin-left: 50%;\n}\n\n.offset-7 {\n margin-left: 58.33333333%;\n}\n\n.offset-8 {\n margin-left: 66.66666667%;\n}\n\n.offset-9 {\n margin-left: 75%;\n}\n\n.offset-10 {\n margin-left: 83.33333333%;\n}\n\n.offset-11 {\n margin-left: 91.66666667%;\n}\n\n.g-0,\n.gx-0 {\n --bs-gutter-x: 0;\n}\n\n.g-0,\n.gy-0 {\n --bs-gutter-y: 0;\n}\n\n.g-1,\n.gx-1 {\n --bs-gutter-x: 0.25rem;\n}\n\n.g-1,\n.gy-1 {\n --bs-gutter-y: 0.25rem;\n}\n\n.g-2,\n.gx-2 {\n --bs-gutter-x: 0.5rem;\n}\n\n.g-2,\n.gy-2 {\n --bs-gutter-y: 0.5rem;\n}\n\n.g-3,\n.gx-3 {\n --bs-gutter-x: 1rem;\n}\n\n.g-3,\n.gy-3 {\n --bs-gutter-y: 1rem;\n}\n\n.g-4,\n.gx-4 {\n --bs-gutter-x: 1.5rem;\n}\n\n.g-4,\n.gy-4 {\n --bs-gutter-y: 1.5rem;\n}\n\n.g-5,\n.gx-5 {\n --bs-gutter-x: 3rem;\n}\n\n.g-5,\n.gy-5 {\n --bs-gutter-y: 3rem;\n}\n\n@media (min-width: 576px) {\n .col-sm {\n flex: 1 0 0%;\n }\n\n .row-cols-sm-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n\n .row-cols-sm-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n\n .row-cols-sm-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n\n .row-cols-sm-3 > * {\n flex: 0 0 auto;\n width: 33.3333333333%;\n }\n\n .row-cols-sm-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n\n .row-cols-sm-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n\n .row-cols-sm-6 > * {\n flex: 0 0 auto;\n width: 16.6666666667%;\n }\n\n .col-sm-auto {\n flex: 0 0 auto;\n width: auto;\n }\n\n .col-sm-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n\n .col-sm-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n\n .col-sm-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n\n .col-sm-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n\n .col-sm-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n\n .col-sm-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n\n .col-sm-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n\n .col-sm-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n\n .col-sm-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n\n .col-sm-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n\n .col-sm-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n\n .col-sm-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n\n .offset-sm-0 {\n margin-left: 0;\n }\n\n .offset-sm-1 {\n margin-left: 8.33333333%;\n }\n\n .offset-sm-2 {\n margin-left: 16.66666667%;\n }\n\n .offset-sm-3 {\n margin-left: 25%;\n }\n\n .offset-sm-4 {\n margin-left: 33.33333333%;\n }\n\n .offset-sm-5 {\n margin-left: 41.66666667%;\n }\n\n .offset-sm-6 {\n margin-left: 50%;\n }\n\n .offset-sm-7 {\n margin-left: 58.33333333%;\n }\n\n .offset-sm-8 {\n margin-left: 66.66666667%;\n }\n\n .offset-sm-9 {\n margin-left: 75%;\n }\n\n .offset-sm-10 {\n margin-left: 83.33333333%;\n }\n\n .offset-sm-11 {\n margin-left: 91.66666667%;\n }\n\n .g-sm-0,\n.gx-sm-0 {\n --bs-gutter-x: 0;\n }\n\n .g-sm-0,\n.gy-sm-0 {\n --bs-gutter-y: 0;\n }\n\n .g-sm-1,\n.gx-sm-1 {\n --bs-gutter-x: 0.25rem;\n }\n\n .g-sm-1,\n.gy-sm-1 {\n --bs-gutter-y: 0.25rem;\n }\n\n .g-sm-2,\n.gx-sm-2 {\n --bs-gutter-x: 0.5rem;\n }\n\n .g-sm-2,\n.gy-sm-2 {\n --bs-gutter-y: 0.5rem;\n }\n\n .g-sm-3,\n.gx-sm-3 {\n --bs-gutter-x: 1rem;\n }\n\n .g-sm-3,\n.gy-sm-3 {\n --bs-gutter-y: 1rem;\n }\n\n .g-sm-4,\n.gx-sm-4 {\n --bs-gutter-x: 1.5rem;\n }\n\n .g-sm-4,\n.gy-sm-4 {\n --bs-gutter-y: 1.5rem;\n }\n\n .g-sm-5,\n.gx-sm-5 {\n --bs-gutter-x: 3rem;\n }\n\n .g-sm-5,\n.gy-sm-5 {\n --bs-gutter-y: 3rem;\n }\n}\n@media (min-width: 768px) {\n .col-md {\n flex: 1 0 0%;\n }\n\n .row-cols-md-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n\n .row-cols-md-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n\n .row-cols-md-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n\n .row-cols-md-3 > * {\n flex: 0 0 auto;\n width: 33.3333333333%;\n }\n\n .row-cols-md-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n\n .row-cols-md-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n\n .row-cols-md-6 > * {\n flex: 0 0 auto;\n width: 16.6666666667%;\n }\n\n .col-md-auto {\n flex: 0 0 auto;\n width: auto;\n }\n\n .col-md-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n\n .col-md-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n\n .col-md-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n\n .col-md-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n\n .col-md-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n\n .col-md-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n\n .col-md-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n\n .col-md-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n\n .col-md-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n\n .col-md-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n\n .col-md-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n\n .col-md-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n\n .offset-md-0 {\n margin-left: 0;\n }\n\n .offset-md-1 {\n margin-left: 8.33333333%;\n }\n\n .offset-md-2 {\n margin-left: 16.66666667%;\n }\n\n .offset-md-3 {\n margin-left: 25%;\n }\n\n .offset-md-4 {\n margin-left: 33.33333333%;\n }\n\n .offset-md-5 {\n margin-left: 41.66666667%;\n }\n\n .offset-md-6 {\n margin-left: 50%;\n }\n\n .offset-md-7 {\n margin-left: 58.33333333%;\n }\n\n .offset-md-8 {\n margin-left: 66.66666667%;\n }\n\n .offset-md-9 {\n margin-left: 75%;\n }\n\n .offset-md-10 {\n margin-left: 83.33333333%;\n }\n\n .offset-md-11 {\n margin-left: 91.66666667%;\n }\n\n .g-md-0,\n.gx-md-0 {\n --bs-gutter-x: 0;\n }\n\n .g-md-0,\n.gy-md-0 {\n --bs-gutter-y: 0;\n }\n\n .g-md-1,\n.gx-md-1 {\n --bs-gutter-x: 0.25rem;\n }\n\n .g-md-1,\n.gy-md-1 {\n --bs-gutter-y: 0.25rem;\n }\n\n .g-md-2,\n.gx-md-2 {\n --bs-gutter-x: 0.5rem;\n }\n\n .g-md-2,\n.gy-md-2 {\n --bs-gutter-y: 0.5rem;\n }\n\n .g-md-3,\n.gx-md-3 {\n --bs-gutter-x: 1rem;\n }\n\n .g-md-3,\n.gy-md-3 {\n --bs-gutter-y: 1rem;\n }\n\n .g-md-4,\n.gx-md-4 {\n --bs-gutter-x: 1.5rem;\n }\n\n .g-md-4,\n.gy-md-4 {\n --bs-gutter-y: 1.5rem;\n }\n\n .g-md-5,\n.gx-md-5 {\n --bs-gutter-x: 3rem;\n }\n\n .g-md-5,\n.gy-md-5 {\n --bs-gutter-y: 3rem;\n }\n}\n@media (min-width: 992px) {\n .col-lg {\n flex: 1 0 0%;\n }\n\n .row-cols-lg-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n\n .row-cols-lg-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n\n .row-cols-lg-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n\n .row-cols-lg-3 > * {\n flex: 0 0 auto;\n width: 33.3333333333%;\n }\n\n .row-cols-lg-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n\n .row-cols-lg-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n\n .row-cols-lg-6 > * {\n flex: 0 0 auto;\n width: 16.6666666667%;\n }\n\n .col-lg-auto {\n flex: 0 0 auto;\n width: auto;\n }\n\n .col-lg-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n\n .col-lg-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n\n .col-lg-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n\n .col-lg-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n\n .col-lg-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n\n .col-lg-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n\n .col-lg-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n\n .col-lg-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n\n .col-lg-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n\n .col-lg-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n\n .col-lg-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n\n .col-lg-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n\n .offset-lg-0 {\n margin-left: 0;\n }\n\n .offset-lg-1 {\n margin-left: 8.33333333%;\n }\n\n .offset-lg-2 {\n margin-left: 16.66666667%;\n }\n\n .offset-lg-3 {\n margin-left: 25%;\n }\n\n .offset-lg-4 {\n margin-left: 33.33333333%;\n }\n\n .offset-lg-5 {\n margin-left: 41.66666667%;\n }\n\n .offset-lg-6 {\n margin-left: 50%;\n }\n\n .offset-lg-7 {\n margin-left: 58.33333333%;\n }\n\n .offset-lg-8 {\n margin-left: 66.66666667%;\n }\n\n .offset-lg-9 {\n margin-left: 75%;\n }\n\n .offset-lg-10 {\n margin-left: 83.33333333%;\n }\n\n .offset-lg-11 {\n margin-left: 91.66666667%;\n }\n\n .g-lg-0,\n.gx-lg-0 {\n --bs-gutter-x: 0;\n }\n\n .g-lg-0,\n.gy-lg-0 {\n --bs-gutter-y: 0;\n }\n\n .g-lg-1,\n.gx-lg-1 {\n --bs-gutter-x: 0.25rem;\n }\n\n .g-lg-1,\n.gy-lg-1 {\n --bs-gutter-y: 0.25rem;\n }\n\n .g-lg-2,\n.gx-lg-2 {\n --bs-gutter-x: 0.5rem;\n }\n\n .g-lg-2,\n.gy-lg-2 {\n --bs-gutter-y: 0.5rem;\n }\n\n .g-lg-3,\n.gx-lg-3 {\n --bs-gutter-x: 1rem;\n }\n\n .g-lg-3,\n.gy-lg-3 {\n --bs-gutter-y: 1rem;\n }\n\n .g-lg-4,\n.gx-lg-4 {\n --bs-gutter-x: 1.5rem;\n }\n\n .g-lg-4,\n.gy-lg-4 {\n --bs-gutter-y: 1.5rem;\n }\n\n .g-lg-5,\n.gx-lg-5 {\n --bs-gutter-x: 3rem;\n }\n\n .g-lg-5,\n.gy-lg-5 {\n --bs-gutter-y: 3rem;\n }\n}\n@media (min-width: 1200px) {\n .col-xl {\n flex: 1 0 0%;\n }\n\n .row-cols-xl-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n\n .row-cols-xl-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n\n .row-cols-xl-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n\n .row-cols-xl-3 > * {\n flex: 0 0 auto;\n width: 33.3333333333%;\n }\n\n .row-cols-xl-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n\n .row-cols-xl-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n\n .row-cols-xl-6 > * {\n flex: 0 0 auto;\n width: 16.6666666667%;\n }\n\n .col-xl-auto {\n flex: 0 0 auto;\n width: auto;\n }\n\n .col-xl-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n\n .col-xl-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n\n .col-xl-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n\n .col-xl-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n\n .col-xl-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n\n .col-xl-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n\n .col-xl-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n\n .col-xl-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n\n .col-xl-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n\n .col-xl-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n\n .col-xl-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n\n .col-xl-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n\n .offset-xl-0 {\n margin-left: 0;\n }\n\n .offset-xl-1 {\n margin-left: 8.33333333%;\n }\n\n .offset-xl-2 {\n margin-left: 16.66666667%;\n }\n\n .offset-xl-3 {\n margin-left: 25%;\n }\n\n .offset-xl-4 {\n margin-left: 33.33333333%;\n }\n\n .offset-xl-5 {\n margin-left: 41.66666667%;\n }\n\n .offset-xl-6 {\n margin-left: 50%;\n }\n\n .offset-xl-7 {\n margin-left: 58.33333333%;\n }\n\n .offset-xl-8 {\n margin-left: 66.66666667%;\n }\n\n .offset-xl-9 {\n margin-left: 75%;\n }\n\n .offset-xl-10 {\n margin-left: 83.33333333%;\n }\n\n .offset-xl-11 {\n margin-left: 91.66666667%;\n }\n\n .g-xl-0,\n.gx-xl-0 {\n --bs-gutter-x: 0;\n }\n\n .g-xl-0,\n.gy-xl-0 {\n --bs-gutter-y: 0;\n }\n\n .g-xl-1,\n.gx-xl-1 {\n --bs-gutter-x: 0.25rem;\n }\n\n .g-xl-1,\n.gy-xl-1 {\n --bs-gutter-y: 0.25rem;\n }\n\n .g-xl-2,\n.gx-xl-2 {\n --bs-gutter-x: 0.5rem;\n }\n\n .g-xl-2,\n.gy-xl-2 {\n --bs-gutter-y: 0.5rem;\n }\n\n .g-xl-3,\n.gx-xl-3 {\n --bs-gutter-x: 1rem;\n }\n\n .g-xl-3,\n.gy-xl-3 {\n --bs-gutter-y: 1rem;\n }\n\n .g-xl-4,\n.gx-xl-4 {\n --bs-gutter-x: 1.5rem;\n }\n\n .g-xl-4,\n.gy-xl-4 {\n --bs-gutter-y: 1.5rem;\n }\n\n .g-xl-5,\n.gx-xl-5 {\n --bs-gutter-x: 3rem;\n }\n\n .g-xl-5,\n.gy-xl-5 {\n --bs-gutter-y: 3rem;\n }\n}\n@media (min-width: 1400px) {\n .col-xxl {\n flex: 1 0 0%;\n }\n\n .row-cols-xxl-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n\n .row-cols-xxl-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n\n .row-cols-xxl-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n\n .row-cols-xxl-3 > * {\n flex: 0 0 auto;\n width: 33.3333333333%;\n }\n\n .row-cols-xxl-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n\n .row-cols-xxl-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n\n .row-cols-xxl-6 > * {\n flex: 0 0 auto;\n width: 16.6666666667%;\n }\n\n .col-xxl-auto {\n flex: 0 0 auto;\n width: auto;\n }\n\n .col-xxl-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n\n .col-xxl-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n\n .col-xxl-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n\n .col-xxl-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n\n .col-xxl-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n\n .col-xxl-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n\n .col-xxl-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n\n .col-xxl-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n\n .col-xxl-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n\n .col-xxl-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n\n .col-xxl-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n\n .col-xxl-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n\n .offset-xxl-0 {\n margin-left: 0;\n }\n\n .offset-xxl-1 {\n margin-left: 8.33333333%;\n }\n\n .offset-xxl-2 {\n margin-left: 16.66666667%;\n }\n\n .offset-xxl-3 {\n margin-left: 25%;\n }\n\n .offset-xxl-4 {\n margin-left: 33.33333333%;\n }\n\n .offset-xxl-5 {\n margin-left: 41.66666667%;\n }\n\n .offset-xxl-6 {\n margin-left: 50%;\n }\n\n .offset-xxl-7 {\n margin-left: 58.33333333%;\n }\n\n .offset-xxl-8 {\n margin-left: 66.66666667%;\n }\n\n .offset-xxl-9 {\n margin-left: 75%;\n }\n\n .offset-xxl-10 {\n margin-left: 83.33333333%;\n }\n\n .offset-xxl-11 {\n margin-left: 91.66666667%;\n }\n\n .g-xxl-0,\n.gx-xxl-0 {\n --bs-gutter-x: 0;\n }\n\n .g-xxl-0,\n.gy-xxl-0 {\n --bs-gutter-y: 0;\n }\n\n .g-xxl-1,\n.gx-xxl-1 {\n --bs-gutter-x: 0.25rem;\n }\n\n .g-xxl-1,\n.gy-xxl-1 {\n --bs-gutter-y: 0.25rem;\n }\n\n .g-xxl-2,\n.gx-xxl-2 {\n --bs-gutter-x: 0.5rem;\n }\n\n .g-xxl-2,\n.gy-xxl-2 {\n --bs-gutter-y: 0.5rem;\n }\n\n .g-xxl-3,\n.gx-xxl-3 {\n --bs-gutter-x: 1rem;\n }\n\n .g-xxl-3,\n.gy-xxl-3 {\n --bs-gutter-y: 1rem;\n }\n\n .g-xxl-4,\n.gx-xxl-4 {\n --bs-gutter-x: 1.5rem;\n }\n\n .g-xxl-4,\n.gy-xxl-4 {\n --bs-gutter-y: 1.5rem;\n }\n\n .g-xxl-5,\n.gx-xxl-5 {\n --bs-gutter-x: 3rem;\n }\n\n .g-xxl-5,\n.gy-xxl-5 {\n --bs-gutter-y: 3rem;\n }\n}\n.d-inline {\n display: inline !important;\n}\n\n.d-inline-block {\n display: inline-block !important;\n}\n\n.d-block {\n display: block !important;\n}\n\n.d-grid {\n display: grid !important;\n}\n\n.d-table {\n display: table !important;\n}\n\n.d-table-row {\n display: table-row !important;\n}\n\n.d-table-cell {\n display: table-cell !important;\n}\n\n.d-flex {\n display: flex !important;\n}\n\n.d-inline-flex {\n display: inline-flex !important;\n}\n\n.d-none {\n display: none !important;\n}\n\n.flex-fill {\n flex: 1 1 auto !important;\n}\n\n.flex-row {\n flex-direction: row !important;\n}\n\n.flex-column {\n flex-direction: column !important;\n}\n\n.flex-row-reverse {\n flex-direction: row-reverse !important;\n}\n\n.flex-column-reverse {\n flex-direction: column-reverse !important;\n}\n\n.flex-grow-0 {\n flex-grow: 0 !important;\n}\n\n.flex-grow-1 {\n flex-grow: 1 !important;\n}\n\n.flex-shrink-0 {\n flex-shrink: 0 !important;\n}\n\n.flex-shrink-1 {\n flex-shrink: 1 !important;\n}\n\n.flex-wrap {\n flex-wrap: wrap !important;\n}\n\n.flex-nowrap {\n flex-wrap: nowrap !important;\n}\n\n.flex-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n}\n\n.justify-content-start {\n justify-content: flex-start !important;\n}\n\n.justify-content-end {\n justify-content: flex-end !important;\n}\n\n.justify-content-center {\n justify-content: center !important;\n}\n\n.justify-content-between {\n justify-content: space-between !important;\n}\n\n.justify-content-around {\n justify-content: space-around !important;\n}\n\n.justify-content-evenly {\n justify-content: space-evenly !important;\n}\n\n.align-items-start {\n align-items: flex-start !important;\n}\n\n.align-items-end {\n align-items: flex-end !important;\n}\n\n.align-items-center {\n align-items: center !important;\n}\n\n.align-items-baseline {\n align-items: baseline !important;\n}\n\n.align-items-stretch {\n align-items: stretch !important;\n}\n\n.align-content-start {\n align-content: flex-start !important;\n}\n\n.align-content-end {\n align-content: flex-end !important;\n}\n\n.align-content-center {\n align-content: center !important;\n}\n\n.align-content-between {\n align-content: space-between !important;\n}\n\n.align-content-around {\n align-content: space-around !important;\n}\n\n.align-content-stretch {\n align-content: stretch !important;\n}\n\n.align-self-auto {\n align-self: auto !important;\n}\n\n.align-self-start {\n align-self: flex-start !important;\n}\n\n.align-self-end {\n align-self: flex-end !important;\n}\n\n.align-self-center {\n align-self: center !important;\n}\n\n.align-self-baseline {\n align-self: baseline !important;\n}\n\n.align-self-stretch {\n align-self: stretch !important;\n}\n\n.order-first {\n order: -1 !important;\n}\n\n.order-0 {\n order: 0 !important;\n}\n\n.order-1 {\n order: 1 !important;\n}\n\n.order-2 {\n order: 2 !important;\n}\n\n.order-3 {\n order: 3 !important;\n}\n\n.order-4 {\n order: 4 !important;\n}\n\n.order-5 {\n order: 5 !important;\n}\n\n.order-last {\n order: 6 !important;\n}\n\n.m-0 {\n margin: 0 !important;\n}\n\n.m-1 {\n margin: 0.25rem !important;\n}\n\n.m-2 {\n margin: 0.5rem !important;\n}\n\n.m-3 {\n margin: 1rem !important;\n}\n\n.m-4 {\n margin: 1.5rem !important;\n}\n\n.m-5 {\n margin: 3rem !important;\n}\n\n.m-auto {\n margin: auto !important;\n}\n\n.mx-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n}\n\n.mx-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n}\n\n.mx-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n}\n\n.mx-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n}\n\n.mx-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n}\n\n.mx-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n}\n\n.mx-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n}\n\n.my-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n}\n\n.my-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n}\n\n.my-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n}\n\n.my-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n}\n\n.my-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n}\n\n.my-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n}\n\n.my-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n}\n\n.mt-0 {\n margin-top: 0 !important;\n}\n\n.mt-1 {\n margin-top: 0.25rem !important;\n}\n\n.mt-2 {\n margin-top: 0.5rem !important;\n}\n\n.mt-3 {\n margin-top: 1rem !important;\n}\n\n.mt-4 {\n margin-top: 1.5rem !important;\n}\n\n.mt-5 {\n margin-top: 3rem !important;\n}\n\n.mt-auto {\n margin-top: auto !important;\n}\n\n.me-0 {\n margin-right: 0 !important;\n}\n\n.me-1 {\n margin-right: 0.25rem !important;\n}\n\n.me-2 {\n margin-right: 0.5rem !important;\n}\n\n.me-3 {\n margin-right: 1rem !important;\n}\n\n.me-4 {\n margin-right: 1.5rem !important;\n}\n\n.me-5 {\n margin-right: 3rem !important;\n}\n\n.me-auto {\n margin-right: auto !important;\n}\n\n.mb-0 {\n margin-bottom: 0 !important;\n}\n\n.mb-1 {\n margin-bottom: 0.25rem !important;\n}\n\n.mb-2 {\n margin-bottom: 0.5rem !important;\n}\n\n.mb-3 {\n margin-bottom: 1rem !important;\n}\n\n.mb-4 {\n margin-bottom: 1.5rem !important;\n}\n\n.mb-5 {\n margin-bottom: 3rem !important;\n}\n\n.mb-auto {\n margin-bottom: auto !important;\n}\n\n.ms-0 {\n margin-left: 0 !important;\n}\n\n.ms-1 {\n margin-left: 0.25rem !important;\n}\n\n.ms-2 {\n margin-left: 0.5rem !important;\n}\n\n.ms-3 {\n margin-left: 1rem !important;\n}\n\n.ms-4 {\n margin-left: 1.5rem !important;\n}\n\n.ms-5 {\n margin-left: 3rem !important;\n}\n\n.ms-auto {\n margin-left: auto !important;\n}\n\n.p-0 {\n padding: 0 !important;\n}\n\n.p-1 {\n padding: 0.25rem !important;\n}\n\n.p-2 {\n padding: 0.5rem !important;\n}\n\n.p-3 {\n padding: 1rem !important;\n}\n\n.p-4 {\n padding: 1.5rem !important;\n}\n\n.p-5 {\n padding: 3rem !important;\n}\n\n.px-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n}\n\n.px-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n}\n\n.px-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n}\n\n.px-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n}\n\n.px-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n}\n\n.px-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n}\n\n.py-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n}\n\n.py-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n}\n\n.py-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n}\n\n.py-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n}\n\n.py-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n}\n\n.py-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n}\n\n.pt-0 {\n padding-top: 0 !important;\n}\n\n.pt-1 {\n padding-top: 0.25rem !important;\n}\n\n.pt-2 {\n padding-top: 0.5rem !important;\n}\n\n.pt-3 {\n padding-top: 1rem !important;\n}\n\n.pt-4 {\n padding-top: 1.5rem !important;\n}\n\n.pt-5 {\n padding-top: 3rem !important;\n}\n\n.pe-0 {\n padding-right: 0 !important;\n}\n\n.pe-1 {\n padding-right: 0.25rem !important;\n}\n\n.pe-2 {\n padding-right: 0.5rem !important;\n}\n\n.pe-3 {\n padding-right: 1rem !important;\n}\n\n.pe-4 {\n padding-right: 1.5rem !important;\n}\n\n.pe-5 {\n padding-right: 3rem !important;\n}\n\n.pb-0 {\n padding-bottom: 0 !important;\n}\n\n.pb-1 {\n padding-bottom: 0.25rem !important;\n}\n\n.pb-2 {\n padding-bottom: 0.5rem !important;\n}\n\n.pb-3 {\n padding-bottom: 1rem !important;\n}\n\n.pb-4 {\n padding-bottom: 1.5rem !important;\n}\n\n.pb-5 {\n padding-bottom: 3rem !important;\n}\n\n.ps-0 {\n padding-left: 0 !important;\n}\n\n.ps-1 {\n padding-left: 0.25rem !important;\n}\n\n.ps-2 {\n padding-left: 0.5rem !important;\n}\n\n.ps-3 {\n padding-left: 1rem !important;\n}\n\n.ps-4 {\n padding-left: 1.5rem !important;\n}\n\n.ps-5 {\n padding-left: 3rem !important;\n}\n\n@media (min-width: 576px) {\n .d-sm-inline {\n display: inline !important;\n }\n\n .d-sm-inline-block {\n display: inline-block !important;\n }\n\n .d-sm-block {\n display: block !important;\n }\n\n .d-sm-grid {\n display: grid !important;\n }\n\n .d-sm-table {\n display: table !important;\n }\n\n .d-sm-table-row {\n display: table-row !important;\n }\n\n .d-sm-table-cell {\n display: table-cell !important;\n }\n\n .d-sm-flex {\n display: flex !important;\n }\n\n .d-sm-inline-flex {\n display: inline-flex !important;\n }\n\n .d-sm-none {\n display: none !important;\n }\n\n .flex-sm-fill {\n flex: 1 1 auto !important;\n }\n\n .flex-sm-row {\n flex-direction: row !important;\n }\n\n .flex-sm-column {\n flex-direction: column !important;\n }\n\n .flex-sm-row-reverse {\n flex-direction: row-reverse !important;\n }\n\n .flex-sm-column-reverse {\n flex-direction: column-reverse !important;\n }\n\n .flex-sm-grow-0 {\n flex-grow: 0 !important;\n }\n\n .flex-sm-grow-1 {\n flex-grow: 1 !important;\n }\n\n .flex-sm-shrink-0 {\n flex-shrink: 0 !important;\n }\n\n .flex-sm-shrink-1 {\n flex-shrink: 1 !important;\n }\n\n .flex-sm-wrap {\n flex-wrap: wrap !important;\n }\n\n .flex-sm-nowrap {\n flex-wrap: nowrap !important;\n }\n\n .flex-sm-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n\n .justify-content-sm-start {\n justify-content: flex-start !important;\n }\n\n .justify-content-sm-end {\n justify-content: flex-end !important;\n }\n\n .justify-content-sm-center {\n justify-content: center !important;\n }\n\n .justify-content-sm-between {\n justify-content: space-between !important;\n }\n\n .justify-content-sm-around {\n justify-content: space-around !important;\n }\n\n .justify-content-sm-evenly {\n justify-content: space-evenly !important;\n }\n\n .align-items-sm-start {\n align-items: flex-start !important;\n }\n\n .align-items-sm-end {\n align-items: flex-end !important;\n }\n\n .align-items-sm-center {\n align-items: center !important;\n }\n\n .align-items-sm-baseline {\n align-items: baseline !important;\n }\n\n .align-items-sm-stretch {\n align-items: stretch !important;\n }\n\n .align-content-sm-start {\n align-content: flex-start !important;\n }\n\n .align-content-sm-end {\n align-content: flex-end !important;\n }\n\n .align-content-sm-center {\n align-content: center !important;\n }\n\n .align-content-sm-between {\n align-content: space-between !important;\n }\n\n .align-content-sm-around {\n align-content: space-around !important;\n }\n\n .align-content-sm-stretch {\n align-content: stretch !important;\n }\n\n .align-self-sm-auto {\n align-self: auto !important;\n }\n\n .align-self-sm-start {\n align-self: flex-start !important;\n }\n\n .align-self-sm-end {\n align-self: flex-end !important;\n }\n\n .align-self-sm-center {\n align-self: center !important;\n }\n\n .align-self-sm-baseline {\n align-self: baseline !important;\n }\n\n .align-self-sm-stretch {\n align-self: stretch !important;\n }\n\n .order-sm-first {\n order: -1 !important;\n }\n\n .order-sm-0 {\n order: 0 !important;\n }\n\n .order-sm-1 {\n order: 1 !important;\n }\n\n .order-sm-2 {\n order: 2 !important;\n }\n\n .order-sm-3 {\n order: 3 !important;\n }\n\n .order-sm-4 {\n order: 4 !important;\n }\n\n .order-sm-5 {\n order: 5 !important;\n }\n\n .order-sm-last {\n order: 6 !important;\n }\n\n .m-sm-0 {\n margin: 0 !important;\n }\n\n .m-sm-1 {\n margin: 0.25rem !important;\n }\n\n .m-sm-2 {\n margin: 0.5rem !important;\n }\n\n .m-sm-3 {\n margin: 1rem !important;\n }\n\n .m-sm-4 {\n margin: 1.5rem !important;\n }\n\n .m-sm-5 {\n margin: 3rem !important;\n }\n\n .m-sm-auto {\n margin: auto !important;\n }\n\n .mx-sm-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n\n .mx-sm-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n }\n\n .mx-sm-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n }\n\n .mx-sm-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n }\n\n .mx-sm-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n }\n\n .mx-sm-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n }\n\n .mx-sm-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n\n .my-sm-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n\n .my-sm-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n\n .my-sm-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n\n .my-sm-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n\n .my-sm-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n\n .my-sm-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n\n .my-sm-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n\n .mt-sm-0 {\n margin-top: 0 !important;\n }\n\n .mt-sm-1 {\n margin-top: 0.25rem !important;\n }\n\n .mt-sm-2 {\n margin-top: 0.5rem !important;\n }\n\n .mt-sm-3 {\n margin-top: 1rem !important;\n }\n\n .mt-sm-4 {\n margin-top: 1.5rem !important;\n }\n\n .mt-sm-5 {\n margin-top: 3rem !important;\n }\n\n .mt-sm-auto {\n margin-top: auto !important;\n }\n\n .me-sm-0 {\n margin-right: 0 !important;\n }\n\n .me-sm-1 {\n margin-right: 0.25rem !important;\n }\n\n .me-sm-2 {\n margin-right: 0.5rem !important;\n }\n\n .me-sm-3 {\n margin-right: 1rem !important;\n }\n\n .me-sm-4 {\n margin-right: 1.5rem !important;\n }\n\n .me-sm-5 {\n margin-right: 3rem !important;\n }\n\n .me-sm-auto {\n margin-right: auto !important;\n }\n\n .mb-sm-0 {\n margin-bottom: 0 !important;\n }\n\n .mb-sm-1 {\n margin-bottom: 0.25rem !important;\n }\n\n .mb-sm-2 {\n margin-bottom: 0.5rem !important;\n }\n\n .mb-sm-3 {\n margin-bottom: 1rem !important;\n }\n\n .mb-sm-4 {\n margin-bottom: 1.5rem !important;\n }\n\n .mb-sm-5 {\n margin-bottom: 3rem !important;\n }\n\n .mb-sm-auto {\n margin-bottom: auto !important;\n }\n\n .ms-sm-0 {\n margin-left: 0 !important;\n }\n\n .ms-sm-1 {\n margin-left: 0.25rem !important;\n }\n\n .ms-sm-2 {\n margin-left: 0.5rem !important;\n }\n\n .ms-sm-3 {\n margin-left: 1rem !important;\n }\n\n .ms-sm-4 {\n margin-left: 1.5rem !important;\n }\n\n .ms-sm-5 {\n margin-left: 3rem !important;\n }\n\n .ms-sm-auto {\n margin-left: auto !important;\n }\n\n .p-sm-0 {\n padding: 0 !important;\n }\n\n .p-sm-1 {\n padding: 0.25rem !important;\n }\n\n .p-sm-2 {\n padding: 0.5rem !important;\n }\n\n .p-sm-3 {\n padding: 1rem !important;\n }\n\n .p-sm-4 {\n padding: 1.5rem !important;\n }\n\n .p-sm-5 {\n padding: 3rem !important;\n }\n\n .px-sm-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n\n .px-sm-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n }\n\n .px-sm-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n }\n\n .px-sm-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n }\n\n .px-sm-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n }\n\n .px-sm-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n }\n\n .py-sm-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n\n .py-sm-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n\n .py-sm-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n\n .py-sm-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n\n .py-sm-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n\n .py-sm-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n\n .pt-sm-0 {\n padding-top: 0 !important;\n }\n\n .pt-sm-1 {\n padding-top: 0.25rem !important;\n }\n\n .pt-sm-2 {\n padding-top: 0.5rem !important;\n }\n\n .pt-sm-3 {\n padding-top: 1rem !important;\n }\n\n .pt-sm-4 {\n padding-top: 1.5rem !important;\n }\n\n .pt-sm-5 {\n padding-top: 3rem !important;\n }\n\n .pe-sm-0 {\n padding-right: 0 !important;\n }\n\n .pe-sm-1 {\n padding-right: 0.25rem !important;\n }\n\n .pe-sm-2 {\n padding-right: 0.5rem !important;\n }\n\n .pe-sm-3 {\n padding-right: 1rem !important;\n }\n\n .pe-sm-4 {\n padding-right: 1.5rem !important;\n }\n\n .pe-sm-5 {\n padding-right: 3rem !important;\n }\n\n .pb-sm-0 {\n padding-bottom: 0 !important;\n }\n\n .pb-sm-1 {\n padding-bottom: 0.25rem !important;\n }\n\n .pb-sm-2 {\n padding-bottom: 0.5rem !important;\n }\n\n .pb-sm-3 {\n padding-bottom: 1rem !important;\n }\n\n .pb-sm-4 {\n padding-bottom: 1.5rem !important;\n }\n\n .pb-sm-5 {\n padding-bottom: 3rem !important;\n }\n\n .ps-sm-0 {\n padding-left: 0 !important;\n }\n\n .ps-sm-1 {\n padding-left: 0.25rem !important;\n }\n\n .ps-sm-2 {\n padding-left: 0.5rem !important;\n }\n\n .ps-sm-3 {\n padding-left: 1rem !important;\n }\n\n .ps-sm-4 {\n padding-left: 1.5rem !important;\n }\n\n .ps-sm-5 {\n padding-left: 3rem !important;\n }\n}\n@media (min-width: 768px) {\n .d-md-inline {\n display: inline !important;\n }\n\n .d-md-inline-block {\n display: inline-block !important;\n }\n\n .d-md-block {\n display: block !important;\n }\n\n .d-md-grid {\n display: grid !important;\n }\n\n .d-md-table {\n display: table !important;\n }\n\n .d-md-table-row {\n display: table-row !important;\n }\n\n .d-md-table-cell {\n display: table-cell !important;\n }\n\n .d-md-flex {\n display: flex !important;\n }\n\n .d-md-inline-flex {\n display: inline-flex !important;\n }\n\n .d-md-none {\n display: none !important;\n }\n\n .flex-md-fill {\n flex: 1 1 auto !important;\n }\n\n .flex-md-row {\n flex-direction: row !important;\n }\n\n .flex-md-column {\n flex-direction: column !important;\n }\n\n .flex-md-row-reverse {\n flex-direction: row-reverse !important;\n }\n\n .flex-md-column-reverse {\n flex-direction: column-reverse !important;\n }\n\n .flex-md-grow-0 {\n flex-grow: 0 !important;\n }\n\n .flex-md-grow-1 {\n flex-grow: 1 !important;\n }\n\n .flex-md-shrink-0 {\n flex-shrink: 0 !important;\n }\n\n .flex-md-shrink-1 {\n flex-shrink: 1 !important;\n }\n\n .flex-md-wrap {\n flex-wrap: wrap !important;\n }\n\n .flex-md-nowrap {\n flex-wrap: nowrap !important;\n }\n\n .flex-md-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n\n .justify-content-md-start {\n justify-content: flex-start !important;\n }\n\n .justify-content-md-end {\n justify-content: flex-end !important;\n }\n\n .justify-content-md-center {\n justify-content: center !important;\n }\n\n .justify-content-md-between {\n justify-content: space-between !important;\n }\n\n .justify-content-md-around {\n justify-content: space-around !important;\n }\n\n .justify-content-md-evenly {\n justify-content: space-evenly !important;\n }\n\n .align-items-md-start {\n align-items: flex-start !important;\n }\n\n .align-items-md-end {\n align-items: flex-end !important;\n }\n\n .align-items-md-center {\n align-items: center !important;\n }\n\n .align-items-md-baseline {\n align-items: baseline !important;\n }\n\n .align-items-md-stretch {\n align-items: stretch !important;\n }\n\n .align-content-md-start {\n align-content: flex-start !important;\n }\n\n .align-content-md-end {\n align-content: flex-end !important;\n }\n\n .align-content-md-center {\n align-content: center !important;\n }\n\n .align-content-md-between {\n align-content: space-between !important;\n }\n\n .align-content-md-around {\n align-content: space-around !important;\n }\n\n .align-content-md-stretch {\n align-content: stretch !important;\n }\n\n .align-self-md-auto {\n align-self: auto !important;\n }\n\n .align-self-md-start {\n align-self: flex-start !important;\n }\n\n .align-self-md-end {\n align-self: flex-end !important;\n }\n\n .align-self-md-center {\n align-self: center !important;\n }\n\n .align-self-md-baseline {\n align-self: baseline !important;\n }\n\n .align-self-md-stretch {\n align-self: stretch !important;\n }\n\n .order-md-first {\n order: -1 !important;\n }\n\n .order-md-0 {\n order: 0 !important;\n }\n\n .order-md-1 {\n order: 1 !important;\n }\n\n .order-md-2 {\n order: 2 !important;\n }\n\n .order-md-3 {\n order: 3 !important;\n }\n\n .order-md-4 {\n order: 4 !important;\n }\n\n .order-md-5 {\n order: 5 !important;\n }\n\n .order-md-last {\n order: 6 !important;\n }\n\n .m-md-0 {\n margin: 0 !important;\n }\n\n .m-md-1 {\n margin: 0.25rem !important;\n }\n\n .m-md-2 {\n margin: 0.5rem !important;\n }\n\n .m-md-3 {\n margin: 1rem !important;\n }\n\n .m-md-4 {\n margin: 1.5rem !important;\n }\n\n .m-md-5 {\n margin: 3rem !important;\n }\n\n .m-md-auto {\n margin: auto !important;\n }\n\n .mx-md-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n\n .mx-md-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n }\n\n .mx-md-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n }\n\n .mx-md-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n }\n\n .mx-md-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n }\n\n .mx-md-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n }\n\n .mx-md-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n\n .my-md-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n\n .my-md-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n\n .my-md-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n\n .my-md-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n\n .my-md-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n\n .my-md-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n\n .my-md-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n\n .mt-md-0 {\n margin-top: 0 !important;\n }\n\n .mt-md-1 {\n margin-top: 0.25rem !important;\n }\n\n .mt-md-2 {\n margin-top: 0.5rem !important;\n }\n\n .mt-md-3 {\n margin-top: 1rem !important;\n }\n\n .mt-md-4 {\n margin-top: 1.5rem !important;\n }\n\n .mt-md-5 {\n margin-top: 3rem !important;\n }\n\n .mt-md-auto {\n margin-top: auto !important;\n }\n\n .me-md-0 {\n margin-right: 0 !important;\n }\n\n .me-md-1 {\n margin-right: 0.25rem !important;\n }\n\n .me-md-2 {\n margin-right: 0.5rem !important;\n }\n\n .me-md-3 {\n margin-right: 1rem !important;\n }\n\n .me-md-4 {\n margin-right: 1.5rem !important;\n }\n\n .me-md-5 {\n margin-right: 3rem !important;\n }\n\n .me-md-auto {\n margin-right: auto !important;\n }\n\n .mb-md-0 {\n margin-bottom: 0 !important;\n }\n\n .mb-md-1 {\n margin-bottom: 0.25rem !important;\n }\n\n .mb-md-2 {\n margin-bottom: 0.5rem !important;\n }\n\n .mb-md-3 {\n margin-bottom: 1rem !important;\n }\n\n .mb-md-4 {\n margin-bottom: 1.5rem !important;\n }\n\n .mb-md-5 {\n margin-bottom: 3rem !important;\n }\n\n .mb-md-auto {\n margin-bottom: auto !important;\n }\n\n .ms-md-0 {\n margin-left: 0 !important;\n }\n\n .ms-md-1 {\n margin-left: 0.25rem !important;\n }\n\n .ms-md-2 {\n margin-left: 0.5rem !important;\n }\n\n .ms-md-3 {\n margin-left: 1rem !important;\n }\n\n .ms-md-4 {\n margin-left: 1.5rem !important;\n }\n\n .ms-md-5 {\n margin-left: 3rem !important;\n }\n\n .ms-md-auto {\n margin-left: auto !important;\n }\n\n .p-md-0 {\n padding: 0 !important;\n }\n\n .p-md-1 {\n padding: 0.25rem !important;\n }\n\n .p-md-2 {\n padding: 0.5rem !important;\n }\n\n .p-md-3 {\n padding: 1rem !important;\n }\n\n .p-md-4 {\n padding: 1.5rem !important;\n }\n\n .p-md-5 {\n padding: 3rem !important;\n }\n\n .px-md-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n\n .px-md-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n }\n\n .px-md-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n }\n\n .px-md-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n }\n\n .px-md-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n }\n\n .px-md-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n }\n\n .py-md-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n\n .py-md-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n\n .py-md-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n\n .py-md-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n\n .py-md-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n\n .py-md-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n\n .pt-md-0 {\n padding-top: 0 !important;\n }\n\n .pt-md-1 {\n padding-top: 0.25rem !important;\n }\n\n .pt-md-2 {\n padding-top: 0.5rem !important;\n }\n\n .pt-md-3 {\n padding-top: 1rem !important;\n }\n\n .pt-md-4 {\n padding-top: 1.5rem !important;\n }\n\n .pt-md-5 {\n padding-top: 3rem !important;\n }\n\n .pe-md-0 {\n padding-right: 0 !important;\n }\n\n .pe-md-1 {\n padding-right: 0.25rem !important;\n }\n\n .pe-md-2 {\n padding-right: 0.5rem !important;\n }\n\n .pe-md-3 {\n padding-right: 1rem !important;\n }\n\n .pe-md-4 {\n padding-right: 1.5rem !important;\n }\n\n .pe-md-5 {\n padding-right: 3rem !important;\n }\n\n .pb-md-0 {\n padding-bottom: 0 !important;\n }\n\n .pb-md-1 {\n padding-bottom: 0.25rem !important;\n }\n\n .pb-md-2 {\n padding-bottom: 0.5rem !important;\n }\n\n .pb-md-3 {\n padding-bottom: 1rem !important;\n }\n\n .pb-md-4 {\n padding-bottom: 1.5rem !important;\n }\n\n .pb-md-5 {\n padding-bottom: 3rem !important;\n }\n\n .ps-md-0 {\n padding-left: 0 !important;\n }\n\n .ps-md-1 {\n padding-left: 0.25rem !important;\n }\n\n .ps-md-2 {\n padding-left: 0.5rem !important;\n }\n\n .ps-md-3 {\n padding-left: 1rem !important;\n }\n\n .ps-md-4 {\n padding-left: 1.5rem !important;\n }\n\n .ps-md-5 {\n padding-left: 3rem !important;\n }\n}\n@media (min-width: 992px) {\n .d-lg-inline {\n display: inline !important;\n }\n\n .d-lg-inline-block {\n display: inline-block !important;\n }\n\n .d-lg-block {\n display: block !important;\n }\n\n .d-lg-grid {\n display: grid !important;\n }\n\n .d-lg-table {\n display: table !important;\n }\n\n .d-lg-table-row {\n display: table-row !important;\n }\n\n .d-lg-table-cell {\n display: table-cell !important;\n }\n\n .d-lg-flex {\n display: flex !important;\n }\n\n .d-lg-inline-flex {\n display: inline-flex !important;\n }\n\n .d-lg-none {\n display: none !important;\n }\n\n .flex-lg-fill {\n flex: 1 1 auto !important;\n }\n\n .flex-lg-row {\n flex-direction: row !important;\n }\n\n .flex-lg-column {\n flex-direction: column !important;\n }\n\n .flex-lg-row-reverse {\n flex-direction: row-reverse !important;\n }\n\n .flex-lg-column-reverse {\n flex-direction: column-reverse !important;\n }\n\n .flex-lg-grow-0 {\n flex-grow: 0 !important;\n }\n\n .flex-lg-grow-1 {\n flex-grow: 1 !important;\n }\n\n .flex-lg-shrink-0 {\n flex-shrink: 0 !important;\n }\n\n .flex-lg-shrink-1 {\n flex-shrink: 1 !important;\n }\n\n .flex-lg-wrap {\n flex-wrap: wrap !important;\n }\n\n .flex-lg-nowrap {\n flex-wrap: nowrap !important;\n }\n\n .flex-lg-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n\n .justify-content-lg-start {\n justify-content: flex-start !important;\n }\n\n .justify-content-lg-end {\n justify-content: flex-end !important;\n }\n\n .justify-content-lg-center {\n justify-content: center !important;\n }\n\n .justify-content-lg-between {\n justify-content: space-between !important;\n }\n\n .justify-content-lg-around {\n justify-content: space-around !important;\n }\n\n .justify-content-lg-evenly {\n justify-content: space-evenly !important;\n }\n\n .align-items-lg-start {\n align-items: flex-start !important;\n }\n\n .align-items-lg-end {\n align-items: flex-end !important;\n }\n\n .align-items-lg-center {\n align-items: center !important;\n }\n\n .align-items-lg-baseline {\n align-items: baseline !important;\n }\n\n .align-items-lg-stretch {\n align-items: stretch !important;\n }\n\n .align-content-lg-start {\n align-content: flex-start !important;\n }\n\n .align-content-lg-end {\n align-content: flex-end !important;\n }\n\n .align-content-lg-center {\n align-content: center !important;\n }\n\n .align-content-lg-between {\n align-content: space-between !important;\n }\n\n .align-content-lg-around {\n align-content: space-around !important;\n }\n\n .align-content-lg-stretch {\n align-content: stretch !important;\n }\n\n .align-self-lg-auto {\n align-self: auto !important;\n }\n\n .align-self-lg-start {\n align-self: flex-start !important;\n }\n\n .align-self-lg-end {\n align-self: flex-end !important;\n }\n\n .align-self-lg-center {\n align-self: center !important;\n }\n\n .align-self-lg-baseline {\n align-self: baseline !important;\n }\n\n .align-self-lg-stretch {\n align-self: stretch !important;\n }\n\n .order-lg-first {\n order: -1 !important;\n }\n\n .order-lg-0 {\n order: 0 !important;\n }\n\n .order-lg-1 {\n order: 1 !important;\n }\n\n .order-lg-2 {\n order: 2 !important;\n }\n\n .order-lg-3 {\n order: 3 !important;\n }\n\n .order-lg-4 {\n order: 4 !important;\n }\n\n .order-lg-5 {\n order: 5 !important;\n }\n\n .order-lg-last {\n order: 6 !important;\n }\n\n .m-lg-0 {\n margin: 0 !important;\n }\n\n .m-lg-1 {\n margin: 0.25rem !important;\n }\n\n .m-lg-2 {\n margin: 0.5rem !important;\n }\n\n .m-lg-3 {\n margin: 1rem !important;\n }\n\n .m-lg-4 {\n margin: 1.5rem !important;\n }\n\n .m-lg-5 {\n margin: 3rem !important;\n }\n\n .m-lg-auto {\n margin: auto !important;\n }\n\n .mx-lg-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n\n .mx-lg-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n }\n\n .mx-lg-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n }\n\n .mx-lg-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n }\n\n .mx-lg-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n }\n\n .mx-lg-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n }\n\n .mx-lg-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n\n .my-lg-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n\n .my-lg-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n\n .my-lg-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n\n .my-lg-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n\n .my-lg-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n\n .my-lg-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n\n .my-lg-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n\n .mt-lg-0 {\n margin-top: 0 !important;\n }\n\n .mt-lg-1 {\n margin-top: 0.25rem !important;\n }\n\n .mt-lg-2 {\n margin-top: 0.5rem !important;\n }\n\n .mt-lg-3 {\n margin-top: 1rem !important;\n }\n\n .mt-lg-4 {\n margin-top: 1.5rem !important;\n }\n\n .mt-lg-5 {\n margin-top: 3rem !important;\n }\n\n .mt-lg-auto {\n margin-top: auto !important;\n }\n\n .me-lg-0 {\n margin-right: 0 !important;\n }\n\n .me-lg-1 {\n margin-right: 0.25rem !important;\n }\n\n .me-lg-2 {\n margin-right: 0.5rem !important;\n }\n\n .me-lg-3 {\n margin-right: 1rem !important;\n }\n\n .me-lg-4 {\n margin-right: 1.5rem !important;\n }\n\n .me-lg-5 {\n margin-right: 3rem !important;\n }\n\n .me-lg-auto {\n margin-right: auto !important;\n }\n\n .mb-lg-0 {\n margin-bottom: 0 !important;\n }\n\n .mb-lg-1 {\n margin-bottom: 0.25rem !important;\n }\n\n .mb-lg-2 {\n margin-bottom: 0.5rem !important;\n }\n\n .mb-lg-3 {\n margin-bottom: 1rem !important;\n }\n\n .mb-lg-4 {\n margin-bottom: 1.5rem !important;\n }\n\n .mb-lg-5 {\n margin-bottom: 3rem !important;\n }\n\n .mb-lg-auto {\n margin-bottom: auto !important;\n }\n\n .ms-lg-0 {\n margin-left: 0 !important;\n }\n\n .ms-lg-1 {\n margin-left: 0.25rem !important;\n }\n\n .ms-lg-2 {\n margin-left: 0.5rem !important;\n }\n\n .ms-lg-3 {\n margin-left: 1rem !important;\n }\n\n .ms-lg-4 {\n margin-left: 1.5rem !important;\n }\n\n .ms-lg-5 {\n margin-left: 3rem !important;\n }\n\n .ms-lg-auto {\n margin-left: auto !important;\n }\n\n .p-lg-0 {\n padding: 0 !important;\n }\n\n .p-lg-1 {\n padding: 0.25rem !important;\n }\n\n .p-lg-2 {\n padding: 0.5rem !important;\n }\n\n .p-lg-3 {\n padding: 1rem !important;\n }\n\n .p-lg-4 {\n padding: 1.5rem !important;\n }\n\n .p-lg-5 {\n padding: 3rem !important;\n }\n\n .px-lg-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n\n .px-lg-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n }\n\n .px-lg-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n }\n\n .px-lg-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n }\n\n .px-lg-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n }\n\n .px-lg-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n }\n\n .py-lg-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n\n .py-lg-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n\n .py-lg-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n\n .py-lg-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n\n .py-lg-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n\n .py-lg-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n\n .pt-lg-0 {\n padding-top: 0 !important;\n }\n\n .pt-lg-1 {\n padding-top: 0.25rem !important;\n }\n\n .pt-lg-2 {\n padding-top: 0.5rem !important;\n }\n\n .pt-lg-3 {\n padding-top: 1rem !important;\n }\n\n .pt-lg-4 {\n padding-top: 1.5rem !important;\n }\n\n .pt-lg-5 {\n padding-top: 3rem !important;\n }\n\n .pe-lg-0 {\n padding-right: 0 !important;\n }\n\n .pe-lg-1 {\n padding-right: 0.25rem !important;\n }\n\n .pe-lg-2 {\n padding-right: 0.5rem !important;\n }\n\n .pe-lg-3 {\n padding-right: 1rem !important;\n }\n\n .pe-lg-4 {\n padding-right: 1.5rem !important;\n }\n\n .pe-lg-5 {\n padding-right: 3rem !important;\n }\n\n .pb-lg-0 {\n padding-bottom: 0 !important;\n }\n\n .pb-lg-1 {\n padding-bottom: 0.25rem !important;\n }\n\n .pb-lg-2 {\n padding-bottom: 0.5rem !important;\n }\n\n .pb-lg-3 {\n padding-bottom: 1rem !important;\n }\n\n .pb-lg-4 {\n padding-bottom: 1.5rem !important;\n }\n\n .pb-lg-5 {\n padding-bottom: 3rem !important;\n }\n\n .ps-lg-0 {\n padding-left: 0 !important;\n }\n\n .ps-lg-1 {\n padding-left: 0.25rem !important;\n }\n\n .ps-lg-2 {\n padding-left: 0.5rem !important;\n }\n\n .ps-lg-3 {\n padding-left: 1rem !important;\n }\n\n .ps-lg-4 {\n padding-left: 1.5rem !important;\n }\n\n .ps-lg-5 {\n padding-left: 3rem !important;\n }\n}\n@media (min-width: 1200px) {\n .d-xl-inline {\n display: inline !important;\n }\n\n .d-xl-inline-block {\n display: inline-block !important;\n }\n\n .d-xl-block {\n display: block !important;\n }\n\n .d-xl-grid {\n display: grid !important;\n }\n\n .d-xl-table {\n display: table !important;\n }\n\n .d-xl-table-row {\n display: table-row !important;\n }\n\n .d-xl-table-cell {\n display: table-cell !important;\n }\n\n .d-xl-flex {\n display: flex !important;\n }\n\n .d-xl-inline-flex {\n display: inline-flex !important;\n }\n\n .d-xl-none {\n display: none !important;\n }\n\n .flex-xl-fill {\n flex: 1 1 auto !important;\n }\n\n .flex-xl-row {\n flex-direction: row !important;\n }\n\n .flex-xl-column {\n flex-direction: column !important;\n }\n\n .flex-xl-row-reverse {\n flex-direction: row-reverse !important;\n }\n\n .flex-xl-column-reverse {\n flex-direction: column-reverse !important;\n }\n\n .flex-xl-grow-0 {\n flex-grow: 0 !important;\n }\n\n .flex-xl-grow-1 {\n flex-grow: 1 !important;\n }\n\n .flex-xl-shrink-0 {\n flex-shrink: 0 !important;\n }\n\n .flex-xl-shrink-1 {\n flex-shrink: 1 !important;\n }\n\n .flex-xl-wrap {\n flex-wrap: wrap !important;\n }\n\n .flex-xl-nowrap {\n flex-wrap: nowrap !important;\n }\n\n .flex-xl-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n\n .justify-content-xl-start {\n justify-content: flex-start !important;\n }\n\n .justify-content-xl-end {\n justify-content: flex-end !important;\n }\n\n .justify-content-xl-center {\n justify-content: center !important;\n }\n\n .justify-content-xl-between {\n justify-content: space-between !important;\n }\n\n .justify-content-xl-around {\n justify-content: space-around !important;\n }\n\n .justify-content-xl-evenly {\n justify-content: space-evenly !important;\n }\n\n .align-items-xl-start {\n align-items: flex-start !important;\n }\n\n .align-items-xl-end {\n align-items: flex-end !important;\n }\n\n .align-items-xl-center {\n align-items: center !important;\n }\n\n .align-items-xl-baseline {\n align-items: baseline !important;\n }\n\n .align-items-xl-stretch {\n align-items: stretch !important;\n }\n\n .align-content-xl-start {\n align-content: flex-start !important;\n }\n\n .align-content-xl-end {\n align-content: flex-end !important;\n }\n\n .align-content-xl-center {\n align-content: center !important;\n }\n\n .align-content-xl-between {\n align-content: space-between !important;\n }\n\n .align-content-xl-around {\n align-content: space-around !important;\n }\n\n .align-content-xl-stretch {\n align-content: stretch !important;\n }\n\n .align-self-xl-auto {\n align-self: auto !important;\n }\n\n .align-self-xl-start {\n align-self: flex-start !important;\n }\n\n .align-self-xl-end {\n align-self: flex-end !important;\n }\n\n .align-self-xl-center {\n align-self: center !important;\n }\n\n .align-self-xl-baseline {\n align-self: baseline !important;\n }\n\n .align-self-xl-stretch {\n align-self: stretch !important;\n }\n\n .order-xl-first {\n order: -1 !important;\n }\n\n .order-xl-0 {\n order: 0 !important;\n }\n\n .order-xl-1 {\n order: 1 !important;\n }\n\n .order-xl-2 {\n order: 2 !important;\n }\n\n .order-xl-3 {\n order: 3 !important;\n }\n\n .order-xl-4 {\n order: 4 !important;\n }\n\n .order-xl-5 {\n order: 5 !important;\n }\n\n .order-xl-last {\n order: 6 !important;\n }\n\n .m-xl-0 {\n margin: 0 !important;\n }\n\n .m-xl-1 {\n margin: 0.25rem !important;\n }\n\n .m-xl-2 {\n margin: 0.5rem !important;\n }\n\n .m-xl-3 {\n margin: 1rem !important;\n }\n\n .m-xl-4 {\n margin: 1.5rem !important;\n }\n\n .m-xl-5 {\n margin: 3rem !important;\n }\n\n .m-xl-auto {\n margin: auto !important;\n }\n\n .mx-xl-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n\n .mx-xl-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n }\n\n .mx-xl-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n }\n\n .mx-xl-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n }\n\n .mx-xl-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n }\n\n .mx-xl-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n }\n\n .mx-xl-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n\n .my-xl-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n\n .my-xl-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n\n .my-xl-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n\n .my-xl-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n\n .my-xl-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n\n .my-xl-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n\n .my-xl-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n\n .mt-xl-0 {\n margin-top: 0 !important;\n }\n\n .mt-xl-1 {\n margin-top: 0.25rem !important;\n }\n\n .mt-xl-2 {\n margin-top: 0.5rem !important;\n }\n\n .mt-xl-3 {\n margin-top: 1rem !important;\n }\n\n .mt-xl-4 {\n margin-top: 1.5rem !important;\n }\n\n .mt-xl-5 {\n margin-top: 3rem !important;\n }\n\n .mt-xl-auto {\n margin-top: auto !important;\n }\n\n .me-xl-0 {\n margin-right: 0 !important;\n }\n\n .me-xl-1 {\n margin-right: 0.25rem !important;\n }\n\n .me-xl-2 {\n margin-right: 0.5rem !important;\n }\n\n .me-xl-3 {\n margin-right: 1rem !important;\n }\n\n .me-xl-4 {\n margin-right: 1.5rem !important;\n }\n\n .me-xl-5 {\n margin-right: 3rem !important;\n }\n\n .me-xl-auto {\n margin-right: auto !important;\n }\n\n .mb-xl-0 {\n margin-bottom: 0 !important;\n }\n\n .mb-xl-1 {\n margin-bottom: 0.25rem !important;\n }\n\n .mb-xl-2 {\n margin-bottom: 0.5rem !important;\n }\n\n .mb-xl-3 {\n margin-bottom: 1rem !important;\n }\n\n .mb-xl-4 {\n margin-bottom: 1.5rem !important;\n }\n\n .mb-xl-5 {\n margin-bottom: 3rem !important;\n }\n\n .mb-xl-auto {\n margin-bottom: auto !important;\n }\n\n .ms-xl-0 {\n margin-left: 0 !important;\n }\n\n .ms-xl-1 {\n margin-left: 0.25rem !important;\n }\n\n .ms-xl-2 {\n margin-left: 0.5rem !important;\n }\n\n .ms-xl-3 {\n margin-left: 1rem !important;\n }\n\n .ms-xl-4 {\n margin-left: 1.5rem !important;\n }\n\n .ms-xl-5 {\n margin-left: 3rem !important;\n }\n\n .ms-xl-auto {\n margin-left: auto !important;\n }\n\n .p-xl-0 {\n padding: 0 !important;\n }\n\n .p-xl-1 {\n padding: 0.25rem !important;\n }\n\n .p-xl-2 {\n padding: 0.5rem !important;\n }\n\n .p-xl-3 {\n padding: 1rem !important;\n }\n\n .p-xl-4 {\n padding: 1.5rem !important;\n }\n\n .p-xl-5 {\n padding: 3rem !important;\n }\n\n .px-xl-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n\n .px-xl-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n }\n\n .px-xl-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n }\n\n .px-xl-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n }\n\n .px-xl-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n }\n\n .px-xl-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n }\n\n .py-xl-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n\n .py-xl-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n\n .py-xl-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n\n .py-xl-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n\n .py-xl-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n\n .py-xl-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n\n .pt-xl-0 {\n padding-top: 0 !important;\n }\n\n .pt-xl-1 {\n padding-top: 0.25rem !important;\n }\n\n .pt-xl-2 {\n padding-top: 0.5rem !important;\n }\n\n .pt-xl-3 {\n padding-top: 1rem !important;\n }\n\n .pt-xl-4 {\n padding-top: 1.5rem !important;\n }\n\n .pt-xl-5 {\n padding-top: 3rem !important;\n }\n\n .pe-xl-0 {\n padding-right: 0 !important;\n }\n\n .pe-xl-1 {\n padding-right: 0.25rem !important;\n }\n\n .pe-xl-2 {\n padding-right: 0.5rem !important;\n }\n\n .pe-xl-3 {\n padding-right: 1rem !important;\n }\n\n .pe-xl-4 {\n padding-right: 1.5rem !important;\n }\n\n .pe-xl-5 {\n padding-right: 3rem !important;\n }\n\n .pb-xl-0 {\n padding-bottom: 0 !important;\n }\n\n .pb-xl-1 {\n padding-bottom: 0.25rem !important;\n }\n\n .pb-xl-2 {\n padding-bottom: 0.5rem !important;\n }\n\n .pb-xl-3 {\n padding-bottom: 1rem !important;\n }\n\n .pb-xl-4 {\n padding-bottom: 1.5rem !important;\n }\n\n .pb-xl-5 {\n padding-bottom: 3rem !important;\n }\n\n .ps-xl-0 {\n padding-left: 0 !important;\n }\n\n .ps-xl-1 {\n padding-left: 0.25rem !important;\n }\n\n .ps-xl-2 {\n padding-left: 0.5rem !important;\n }\n\n .ps-xl-3 {\n padding-left: 1rem !important;\n }\n\n .ps-xl-4 {\n padding-left: 1.5rem !important;\n }\n\n .ps-xl-5 {\n padding-left: 3rem !important;\n }\n}\n@media (min-width: 1400px) {\n .d-xxl-inline {\n display: inline !important;\n }\n\n .d-xxl-inline-block {\n display: inline-block !important;\n }\n\n .d-xxl-block {\n display: block !important;\n }\n\n .d-xxl-grid {\n display: grid !important;\n }\n\n .d-xxl-table {\n display: table !important;\n }\n\n .d-xxl-table-row {\n display: table-row !important;\n }\n\n .d-xxl-table-cell {\n display: table-cell !important;\n }\n\n .d-xxl-flex {\n display: flex !important;\n }\n\n .d-xxl-inline-flex {\n display: inline-flex !important;\n }\n\n .d-xxl-none {\n display: none !important;\n }\n\n .flex-xxl-fill {\n flex: 1 1 auto !important;\n }\n\n .flex-xxl-row {\n flex-direction: row !important;\n }\n\n .flex-xxl-column {\n flex-direction: column !important;\n }\n\n .flex-xxl-row-reverse {\n flex-direction: row-reverse !important;\n }\n\n .flex-xxl-column-reverse {\n flex-direction: column-reverse !important;\n }\n\n .flex-xxl-grow-0 {\n flex-grow: 0 !important;\n }\n\n .flex-xxl-grow-1 {\n flex-grow: 1 !important;\n }\n\n .flex-xxl-shrink-0 {\n flex-shrink: 0 !important;\n }\n\n .flex-xxl-shrink-1 {\n flex-shrink: 1 !important;\n }\n\n .flex-xxl-wrap {\n flex-wrap: wrap !important;\n }\n\n .flex-xxl-nowrap {\n flex-wrap: nowrap !important;\n }\n\n .flex-xxl-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n\n .justify-content-xxl-start {\n justify-content: flex-start !important;\n }\n\n .justify-content-xxl-end {\n justify-content: flex-end !important;\n }\n\n .justify-content-xxl-center {\n justify-content: center !important;\n }\n\n .justify-content-xxl-between {\n justify-content: space-between !important;\n }\n\n .justify-content-xxl-around {\n justify-content: space-around !important;\n }\n\n .justify-content-xxl-evenly {\n justify-content: space-evenly !important;\n }\n\n .align-items-xxl-start {\n align-items: flex-start !important;\n }\n\n .align-items-xxl-end {\n align-items: flex-end !important;\n }\n\n .align-items-xxl-center {\n align-items: center !important;\n }\n\n .align-items-xxl-baseline {\n align-items: baseline !important;\n }\n\n .align-items-xxl-stretch {\n align-items: stretch !important;\n }\n\n .align-content-xxl-start {\n align-content: flex-start !important;\n }\n\n .align-content-xxl-end {\n align-content: flex-end !important;\n }\n\n .align-content-xxl-center {\n align-content: center !important;\n }\n\n .align-content-xxl-between {\n align-content: space-between !important;\n }\n\n .align-content-xxl-around {\n align-content: space-around !important;\n }\n\n .align-content-xxl-stretch {\n align-content: stretch !important;\n }\n\n .align-self-xxl-auto {\n align-self: auto !important;\n }\n\n .align-self-xxl-start {\n align-self: flex-start !important;\n }\n\n .align-self-xxl-end {\n align-self: flex-end !important;\n }\n\n .align-self-xxl-center {\n align-self: center !important;\n }\n\n .align-self-xxl-baseline {\n align-self: baseline !important;\n }\n\n .align-self-xxl-stretch {\n align-self: stretch !important;\n }\n\n .order-xxl-first {\n order: -1 !important;\n }\n\n .order-xxl-0 {\n order: 0 !important;\n }\n\n .order-xxl-1 {\n order: 1 !important;\n }\n\n .order-xxl-2 {\n order: 2 !important;\n }\n\n .order-xxl-3 {\n order: 3 !important;\n }\n\n .order-xxl-4 {\n order: 4 !important;\n }\n\n .order-xxl-5 {\n order: 5 !important;\n }\n\n .order-xxl-last {\n order: 6 !important;\n }\n\n .m-xxl-0 {\n margin: 0 !important;\n }\n\n .m-xxl-1 {\n margin: 0.25rem !important;\n }\n\n .m-xxl-2 {\n margin: 0.5rem !important;\n }\n\n .m-xxl-3 {\n margin: 1rem !important;\n }\n\n .m-xxl-4 {\n margin: 1.5rem !important;\n }\n\n .m-xxl-5 {\n margin: 3rem !important;\n }\n\n .m-xxl-auto {\n margin: auto !important;\n }\n\n .mx-xxl-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n\n .mx-xxl-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n }\n\n .mx-xxl-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n }\n\n .mx-xxl-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n }\n\n .mx-xxl-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n }\n\n .mx-xxl-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n }\n\n .mx-xxl-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n\n .my-xxl-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n\n .my-xxl-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n\n .my-xxl-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n\n .my-xxl-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n\n .my-xxl-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n\n .my-xxl-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n\n .my-xxl-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n\n .mt-xxl-0 {\n margin-top: 0 !important;\n }\n\n .mt-xxl-1 {\n margin-top: 0.25rem !important;\n }\n\n .mt-xxl-2 {\n margin-top: 0.5rem !important;\n }\n\n .mt-xxl-3 {\n margin-top: 1rem !important;\n }\n\n .mt-xxl-4 {\n margin-top: 1.5rem !important;\n }\n\n .mt-xxl-5 {\n margin-top: 3rem !important;\n }\n\n .mt-xxl-auto {\n margin-top: auto !important;\n }\n\n .me-xxl-0 {\n margin-right: 0 !important;\n }\n\n .me-xxl-1 {\n margin-right: 0.25rem !important;\n }\n\n .me-xxl-2 {\n margin-right: 0.5rem !important;\n }\n\n .me-xxl-3 {\n margin-right: 1rem !important;\n }\n\n .me-xxl-4 {\n margin-right: 1.5rem !important;\n }\n\n .me-xxl-5 {\n margin-right: 3rem !important;\n }\n\n .me-xxl-auto {\n margin-right: auto !important;\n }\n\n .mb-xxl-0 {\n margin-bottom: 0 !important;\n }\n\n .mb-xxl-1 {\n margin-bottom: 0.25rem !important;\n }\n\n .mb-xxl-2 {\n margin-bottom: 0.5rem !important;\n }\n\n .mb-xxl-3 {\n margin-bottom: 1rem !important;\n }\n\n .mb-xxl-4 {\n margin-bottom: 1.5rem !important;\n }\n\n .mb-xxl-5 {\n margin-bottom: 3rem !important;\n }\n\n .mb-xxl-auto {\n margin-bottom: auto !important;\n }\n\n .ms-xxl-0 {\n margin-left: 0 !important;\n }\n\n .ms-xxl-1 {\n margin-left: 0.25rem !important;\n }\n\n .ms-xxl-2 {\n margin-left: 0.5rem !important;\n }\n\n .ms-xxl-3 {\n margin-left: 1rem !important;\n }\n\n .ms-xxl-4 {\n margin-left: 1.5rem !important;\n }\n\n .ms-xxl-5 {\n margin-left: 3rem !important;\n }\n\n .ms-xxl-auto {\n margin-left: auto !important;\n }\n\n .p-xxl-0 {\n padding: 0 !important;\n }\n\n .p-xxl-1 {\n padding: 0.25rem !important;\n }\n\n .p-xxl-2 {\n padding: 0.5rem !important;\n }\n\n .p-xxl-3 {\n padding: 1rem !important;\n }\n\n .p-xxl-4 {\n padding: 1.5rem !important;\n }\n\n .p-xxl-5 {\n padding: 3rem !important;\n }\n\n .px-xxl-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n\n .px-xxl-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n }\n\n .px-xxl-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n }\n\n .px-xxl-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n }\n\n .px-xxl-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n }\n\n .px-xxl-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n }\n\n .py-xxl-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n\n .py-xxl-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n\n .py-xxl-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n\n .py-xxl-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n\n .py-xxl-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n\n .py-xxl-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n\n .pt-xxl-0 {\n padding-top: 0 !important;\n }\n\n .pt-xxl-1 {\n padding-top: 0.25rem !important;\n }\n\n .pt-xxl-2 {\n padding-top: 0.5rem !important;\n }\n\n .pt-xxl-3 {\n padding-top: 1rem !important;\n }\n\n .pt-xxl-4 {\n padding-top: 1.5rem !important;\n }\n\n .pt-xxl-5 {\n padding-top: 3rem !important;\n }\n\n .pe-xxl-0 {\n padding-right: 0 !important;\n }\n\n .pe-xxl-1 {\n padding-right: 0.25rem !important;\n }\n\n .pe-xxl-2 {\n padding-right: 0.5rem !important;\n }\n\n .pe-xxl-3 {\n padding-right: 1rem !important;\n }\n\n .pe-xxl-4 {\n padding-right: 1.5rem !important;\n }\n\n .pe-xxl-5 {\n padding-right: 3rem !important;\n }\n\n .pb-xxl-0 {\n padding-bottom: 0 !important;\n }\n\n .pb-xxl-1 {\n padding-bottom: 0.25rem !important;\n }\n\n .pb-xxl-2 {\n padding-bottom: 0.5rem !important;\n }\n\n .pb-xxl-3 {\n padding-bottom: 1rem !important;\n }\n\n .pb-xxl-4 {\n padding-bottom: 1.5rem !important;\n }\n\n .pb-xxl-5 {\n padding-bottom: 3rem !important;\n }\n\n .ps-xxl-0 {\n padding-left: 0 !important;\n }\n\n .ps-xxl-1 {\n padding-left: 0.25rem !important;\n }\n\n .ps-xxl-2 {\n padding-left: 0.5rem !important;\n }\n\n .ps-xxl-3 {\n padding-left: 1rem !important;\n }\n\n .ps-xxl-4 {\n padding-left: 1.5rem !important;\n }\n\n .ps-xxl-5 {\n padding-left: 3rem !important;\n }\n}\n@media print {\n .d-print-inline {\n display: inline !important;\n }\n\n .d-print-inline-block {\n display: inline-block !important;\n }\n\n .d-print-block {\n display: block !important;\n }\n\n .d-print-grid {\n display: grid !important;\n }\n\n .d-print-table {\n display: table !important;\n }\n\n .d-print-table-row {\n display: table-row !important;\n }\n\n .d-print-table-cell {\n display: table-cell !important;\n }\n\n .d-print-flex {\n display: flex !important;\n }\n\n .d-print-inline-flex {\n display: inline-flex !important;\n }\n\n .d-print-none {\n display: none !important;\n }\n}\n\n/*# sourceMappingURL=bootstrap-grid.css.map */\n","// Container widths\n//\n// Set the container width, and override it for fixed navbars in media queries.\n\n@if $enable-grid-classes {\n // Single container class with breakpoint max-widths\n .container,\n // 100% wide container at all breakpoints\n .container-fluid {\n @include make-container();\n }\n\n // Responsive containers that are 100% wide until a breakpoint\n @each $breakpoint, $container-max-width in $container-max-widths {\n .container-#{$breakpoint} {\n @extend .container-fluid;\n }\n\n @include media-breakpoint-up($breakpoint, $grid-breakpoints) {\n %responsive-container-#{$breakpoint} {\n max-width: $container-max-width;\n }\n\n // Extend each breakpoint which is smaller or equal to the current breakpoint\n $extend-breakpoint: true;\n\n @each $name, $width in $grid-breakpoints {\n @if ($extend-breakpoint) {\n .container#{breakpoint-infix($name, $grid-breakpoints)} {\n @extend %responsive-container-#{$breakpoint};\n }\n\n // Once the current breakpoint is reached, stop extending\n @if ($breakpoint == $name) {\n $extend-breakpoint: false;\n }\n }\n }\n }\n }\n}\n","// Container mixins\n\n@mixin make-container($gutter: $container-padding-x) {\n width: 100%;\n padding-right: var(--#{$variable-prefix}gutter-x, #{$gutter});\n padding-left: var(--#{$variable-prefix}gutter-x, #{$gutter});\n margin-right: auto;\n margin-left: auto;\n}\n","// Breakpoint viewport sizes and media queries.\n//\n// Breakpoints are defined as a map of (name: minimum width), order from small to large:\n//\n// (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px)\n//\n// The map defined in the `$grid-breakpoints` global variable is used as the `$breakpoints` argument by default.\n\n// Name of the next breakpoint, or null for the last breakpoint.\n//\n// >> breakpoint-next(sm)\n// md\n// >> breakpoint-next(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// md\n// >> breakpoint-next(sm, $breakpoint-names: (xs sm md lg xl))\n// md\n@function breakpoint-next($name, $breakpoints: $grid-breakpoints, $breakpoint-names: map-keys($breakpoints)) {\n $n: index($breakpoint-names, $name);\n @if not $n {\n @error \"breakpoint `#{$name}` not found in `#{$breakpoints}`\";\n }\n @return if($n < length($breakpoint-names), nth($breakpoint-names, $n + 1), null);\n}\n\n// Minimum breakpoint width. Null for the smallest (first) breakpoint.\n//\n// >> breakpoint-min(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// 576px\n@function breakpoint-min($name, $breakpoints: $grid-breakpoints) {\n $min: map-get($breakpoints, $name);\n @return if($min != 0, $min, null);\n}\n\n// Maximum breakpoint width.\n// The maximum value is reduced by 0.02px to work around the limitations of\n// `min-` and `max-` prefixes and viewports with fractional widths.\n// See https://www.w3.org/TR/mediaqueries-4/#mq-min-max\n// Uses 0.02px rather than 0.01px to work around a current rounding bug in Safari.\n// See https://bugs.webkit.org/show_bug.cgi?id=178261\n//\n// >> breakpoint-max(md, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// 767.98px\n@function breakpoint-max($name, $breakpoints: $grid-breakpoints) {\n $max: map-get($breakpoints, $name);\n @return if($max and $max > 0, $max - .02, null);\n}\n\n// Returns a blank string if smallest breakpoint, otherwise returns the name with a dash in front.\n// Useful for making responsive utilities.\n//\n// >> breakpoint-infix(xs, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// \"\" (Returns a blank string)\n// >> breakpoint-infix(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// \"-sm\"\n@function breakpoint-infix($name, $breakpoints: $grid-breakpoints) {\n @return if(breakpoint-min($name, $breakpoints) == null, \"\", \"-#{$name}\");\n}\n\n// Media of at least the minimum breakpoint width. No query for the smallest breakpoint.\n// Makes the @content apply to the given breakpoint and wider.\n@mixin media-breakpoint-up($name, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($name, $breakpoints);\n @if $min {\n @media (min-width: $min) {\n @content;\n }\n } @else {\n @content;\n }\n}\n\n// Media of at most the maximum breakpoint width. No query for the largest breakpoint.\n// Makes the @content apply to the given breakpoint and narrower.\n@mixin media-breakpoint-down($name, $breakpoints: $grid-breakpoints) {\n $max: breakpoint-max($name, $breakpoints);\n @if $max {\n @media (max-width: $max) {\n @content;\n }\n } @else {\n @content;\n }\n}\n\n// Media that spans multiple breakpoint widths.\n// Makes the @content apply between the min and max breakpoints\n@mixin media-breakpoint-between($lower, $upper, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($lower, $breakpoints);\n $max: breakpoint-max($upper, $breakpoints);\n\n @if $min != null and $max != null {\n @media (min-width: $min) and (max-width: $max) {\n @content;\n }\n } @else if $max == null {\n @include media-breakpoint-up($lower, $breakpoints) {\n @content;\n }\n } @else if $min == null {\n @include media-breakpoint-down($upper, $breakpoints) {\n @content;\n }\n }\n}\n\n// Media between the breakpoint's minimum and maximum widths.\n// No minimum for the smallest breakpoint, and no maximum for the largest one.\n// Makes the @content apply only to the given breakpoint, not viewports any wider or narrower.\n@mixin media-breakpoint-only($name, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($name, $breakpoints);\n $next: breakpoint-next($name, $breakpoints);\n $max: breakpoint-max($next);\n\n @if $min != null and $max != null {\n @media (min-width: $min) and (max-width: $max) {\n @content;\n }\n } @else if $max == null {\n @include media-breakpoint-up($name, $breakpoints) {\n @content;\n }\n } @else if $min == null {\n @include media-breakpoint-down($next, $breakpoints) {\n @content;\n }\n }\n}\n","// Variables\n//\n// Variables should follow the `$component-state-property-size` formula for\n// consistent naming. Ex: $nav-link-disabled-color and $modal-content-box-shadow-xs.\n\n// Color system\n\n// scss-docs-start gray-color-variables\n$white: #fff !default;\n$gray-100: #f8f9fa !default;\n$gray-200: #e9ecef !default;\n$gray-300: #dee2e6 !default;\n$gray-400: #ced4da !default;\n$gray-500: #adb5bd !default;\n$gray-600: #6c757d !default;\n$gray-700: #495057 !default;\n$gray-800: #343a40 !default;\n$gray-900: #212529 !default;\n$black: #000 !default;\n// scss-docs-end gray-color-variables\n\n// fusv-disable\n// scss-docs-start gray-colors-map\n$grays: (\n \"100\": $gray-100,\n \"200\": $gray-200,\n \"300\": $gray-300,\n \"400\": $gray-400,\n \"500\": $gray-500,\n \"600\": $gray-600,\n \"700\": $gray-700,\n \"800\": $gray-800,\n \"900\": $gray-900\n) !default;\n// scss-docs-end gray-colors-map\n// fusv-enable\n\n// scss-docs-start color-variables\n$blue: #0d6efd !default;\n$indigo: #6610f2 !default;\n$purple: #6f42c1 !default;\n$pink: #d63384 !default;\n$red: #dc3545 !default;\n$orange: #fd7e14 !default;\n$yellow: #ffc107 !default;\n$green: #198754 !default;\n$teal: #20c997 !default;\n$cyan: #0dcaf0 !default;\n// scss-docs-end color-variables\n\n// scss-docs-start colors-map\n$colors: (\n \"blue\": $blue,\n \"indigo\": $indigo,\n \"purple\": $purple,\n \"pink\": $pink,\n \"red\": $red,\n \"orange\": $orange,\n \"yellow\": $yellow,\n \"green\": $green,\n \"teal\": $teal,\n \"cyan\": $cyan,\n \"white\": $white,\n \"gray\": $gray-600,\n \"gray-dark\": $gray-800\n) !default;\n// scss-docs-end colors-map\n\n// scss-docs-start theme-color-variables\n$primary: $blue !default;\n$secondary: $gray-600 !default;\n$success: $green !default;\n$info: $cyan !default;\n$warning: $yellow !default;\n$danger: $red !default;\n$light: $gray-100 !default;\n$dark: $gray-900 !default;\n// scss-docs-end theme-color-variables\n\n// scss-docs-start theme-colors-map\n$theme-colors: (\n \"primary\": $primary,\n \"secondary\": $secondary,\n \"success\": $success,\n \"info\": $info,\n \"warning\": $warning,\n \"danger\": $danger,\n \"light\": $light,\n \"dark\": $dark\n) !default;\n// scss-docs-end theme-colors-map\n\n// scss-docs-start theme-colors-rgb\n$theme-colors-rgb: map-loop($theme-colors, to-rgb, \"$value\") !default;\n// scss-docs-end theme-colors-rgb\n\n// The contrast ratio to reach against white, to determine if color changes from \"light\" to \"dark\". Acceptable values for WCAG 2.0 are 3, 4.5 and 7.\n// See https://www.w3.org/TR/WCAG20/#visual-audio-contrast-contrast\n$min-contrast-ratio: 4.5 !default;\n\n// Customize the light and dark text colors for use in our color contrast function.\n$color-contrast-dark: $black !default;\n$color-contrast-light: $white !default;\n\n// fusv-disable\n$blue-100: tint-color($blue, 80%) !default;\n$blue-200: tint-color($blue, 60%) !default;\n$blue-300: tint-color($blue, 40%) !default;\n$blue-400: tint-color($blue, 20%) !default;\n$blue-500: $blue !default;\n$blue-600: shade-color($blue, 20%) !default;\n$blue-700: shade-color($blue, 40%) !default;\n$blue-800: shade-color($blue, 60%) !default;\n$blue-900: shade-color($blue, 80%) !default;\n\n$indigo-100: tint-color($indigo, 80%) !default;\n$indigo-200: tint-color($indigo, 60%) !default;\n$indigo-300: tint-color($indigo, 40%) !default;\n$indigo-400: tint-color($indigo, 20%) !default;\n$indigo-500: $indigo !default;\n$indigo-600: shade-color($indigo, 20%) !default;\n$indigo-700: shade-color($indigo, 40%) !default;\n$indigo-800: shade-color($indigo, 60%) !default;\n$indigo-900: shade-color($indigo, 80%) !default;\n\n$purple-100: tint-color($purple, 80%) !default;\n$purple-200: tint-color($purple, 60%) !default;\n$purple-300: tint-color($purple, 40%) !default;\n$purple-400: tint-color($purple, 20%) !default;\n$purple-500: $purple !default;\n$purple-600: shade-color($purple, 20%) !default;\n$purple-700: shade-color($purple, 40%) !default;\n$purple-800: shade-color($purple, 60%) !default;\n$purple-900: shade-color($purple, 80%) !default;\n\n$pink-100: tint-color($pink, 80%) !default;\n$pink-200: tint-color($pink, 60%) !default;\n$pink-300: tint-color($pink, 40%) !default;\n$pink-400: tint-color($pink, 20%) !default;\n$pink-500: $pink !default;\n$pink-600: shade-color($pink, 20%) !default;\n$pink-700: shade-color($pink, 40%) !default;\n$pink-800: shade-color($pink, 60%) !default;\n$pink-900: shade-color($pink, 80%) !default;\n\n$red-100: tint-color($red, 80%) !default;\n$red-200: tint-color($red, 60%) !default;\n$red-300: tint-color($red, 40%) !default;\n$red-400: tint-color($red, 20%) !default;\n$red-500: $red !default;\n$red-600: shade-color($red, 20%) !default;\n$red-700: shade-color($red, 40%) !default;\n$red-800: shade-color($red, 60%) !default;\n$red-900: shade-color($red, 80%) !default;\n\n$orange-100: tint-color($orange, 80%) !default;\n$orange-200: tint-color($orange, 60%) !default;\n$orange-300: tint-color($orange, 40%) !default;\n$orange-400: tint-color($orange, 20%) !default;\n$orange-500: $orange !default;\n$orange-600: shade-color($orange, 20%) !default;\n$orange-700: shade-color($orange, 40%) !default;\n$orange-800: shade-color($orange, 60%) !default;\n$orange-900: shade-color($orange, 80%) !default;\n\n$yellow-100: tint-color($yellow, 80%) !default;\n$yellow-200: tint-color($yellow, 60%) !default;\n$yellow-300: tint-color($yellow, 40%) !default;\n$yellow-400: tint-color($yellow, 20%) !default;\n$yellow-500: $yellow !default;\n$yellow-600: shade-color($yellow, 20%) !default;\n$yellow-700: shade-color($yellow, 40%) !default;\n$yellow-800: shade-color($yellow, 60%) !default;\n$yellow-900: shade-color($yellow, 80%) !default;\n\n$green-100: tint-color($green, 80%) !default;\n$green-200: tint-color($green, 60%) !default;\n$green-300: tint-color($green, 40%) !default;\n$green-400: tint-color($green, 20%) !default;\n$green-500: $green !default;\n$green-600: shade-color($green, 20%) !default;\n$green-700: shade-color($green, 40%) !default;\n$green-800: shade-color($green, 60%) !default;\n$green-900: shade-color($green, 80%) !default;\n\n$teal-100: tint-color($teal, 80%) !default;\n$teal-200: tint-color($teal, 60%) !default;\n$teal-300: tint-color($teal, 40%) !default;\n$teal-400: tint-color($teal, 20%) !default;\n$teal-500: $teal !default;\n$teal-600: shade-color($teal, 20%) !default;\n$teal-700: shade-color($teal, 40%) !default;\n$teal-800: shade-color($teal, 60%) !default;\n$teal-900: shade-color($teal, 80%) !default;\n\n$cyan-100: tint-color($cyan, 80%) !default;\n$cyan-200: tint-color($cyan, 60%) !default;\n$cyan-300: tint-color($cyan, 40%) !default;\n$cyan-400: tint-color($cyan, 20%) !default;\n$cyan-500: $cyan !default;\n$cyan-600: shade-color($cyan, 20%) !default;\n$cyan-700: shade-color($cyan, 40%) !default;\n$cyan-800: shade-color($cyan, 60%) !default;\n$cyan-900: shade-color($cyan, 80%) !default;\n\n$blues: (\n \"blue-100\": $blue-100,\n \"blue-200\": $blue-200,\n \"blue-300\": $blue-300,\n \"blue-400\": $blue-400,\n \"blue-500\": $blue-500,\n \"blue-600\": $blue-600,\n \"blue-700\": $blue-700,\n \"blue-800\": $blue-800,\n \"blue-900\": $blue-900\n) !default;\n\n$indigos: (\n \"indigo-100\": $indigo-100,\n \"indigo-200\": $indigo-200,\n \"indigo-300\": $indigo-300,\n \"indigo-400\": $indigo-400,\n \"indigo-500\": $indigo-500,\n \"indigo-600\": $indigo-600,\n \"indigo-700\": $indigo-700,\n \"indigo-800\": $indigo-800,\n \"indigo-900\": $indigo-900\n) !default;\n\n$purples: (\n \"purple-100\": $purple-200,\n \"purple-200\": $purple-100,\n \"purple-300\": $purple-300,\n \"purple-400\": $purple-400,\n \"purple-500\": $purple-500,\n \"purple-600\": $purple-600,\n \"purple-700\": $purple-700,\n \"purple-800\": $purple-800,\n \"purple-900\": $purple-900\n) !default;\n\n$pinks: (\n \"pink-100\": $pink-100,\n \"pink-200\": $pink-200,\n \"pink-300\": $pink-300,\n \"pink-400\": $pink-400,\n \"pink-500\": $pink-500,\n \"pink-600\": $pink-600,\n \"pink-700\": $pink-700,\n \"pink-800\": $pink-800,\n \"pink-900\": $pink-900\n) !default;\n\n$reds: (\n \"red-100\": $red-100,\n \"red-200\": $red-200,\n \"red-300\": $red-300,\n \"red-400\": $red-400,\n \"red-500\": $red-500,\n \"red-600\": $red-600,\n \"red-700\": $red-700,\n \"red-800\": $red-800,\n \"red-900\": $red-900\n) !default;\n\n$oranges: (\n \"orange-100\": $orange-100,\n \"orange-200\": $orange-200,\n \"orange-300\": $orange-300,\n \"orange-400\": $orange-400,\n \"orange-500\": $orange-500,\n \"orange-600\": $orange-600,\n \"orange-700\": $orange-700,\n \"orange-800\": $orange-800,\n \"orange-900\": $orange-900\n) !default;\n\n$yellows: (\n \"yellow-100\": $yellow-100,\n \"yellow-200\": $yellow-200,\n \"yellow-300\": $yellow-300,\n \"yellow-400\": $yellow-400,\n \"yellow-500\": $yellow-500,\n \"yellow-600\": $yellow-600,\n \"yellow-700\": $yellow-700,\n \"yellow-800\": $yellow-800,\n \"yellow-900\": $yellow-900\n) !default;\n\n$greens: (\n \"green-100\": $green-100,\n \"green-200\": $green-200,\n \"green-300\": $green-300,\n \"green-400\": $green-400,\n \"green-500\": $green-500,\n \"green-600\": $green-600,\n \"green-700\": $green-700,\n \"green-800\": $green-800,\n \"green-900\": $green-900\n) !default;\n\n$teals: (\n \"teal-100\": $teal-100,\n \"teal-200\": $teal-200,\n \"teal-300\": $teal-300,\n \"teal-400\": $teal-400,\n \"teal-500\": $teal-500,\n \"teal-600\": $teal-600,\n \"teal-700\": $teal-700,\n \"teal-800\": $teal-800,\n \"teal-900\": $teal-900\n) !default;\n\n$cyans: (\n \"cyan-100\": $cyan-100,\n \"cyan-200\": $cyan-200,\n \"cyan-300\": $cyan-300,\n \"cyan-400\": $cyan-400,\n \"cyan-500\": $cyan-500,\n \"cyan-600\": $cyan-600,\n \"cyan-700\": $cyan-700,\n \"cyan-800\": $cyan-800,\n \"cyan-900\": $cyan-900\n) !default;\n// fusv-enable\n\n// Characters which are escaped by the escape-svg function\n$escaped-characters: (\n (\"<\", \"%3c\"),\n (\">\", \"%3e\"),\n (\"#\", \"%23\"),\n (\"(\", \"%28\"),\n (\")\", \"%29\"),\n) !default;\n\n// Options\n//\n// Quickly modify global styling by enabling or disabling optional features.\n\n$enable-caret: true !default;\n$enable-rounded: true !default;\n$enable-shadows: false !default;\n$enable-gradients: false !default;\n$enable-transitions: true !default;\n$enable-reduced-motion: true !default;\n$enable-smooth-scroll: true !default;\n$enable-grid-classes: true !default;\n$enable-cssgrid: false !default;\n$enable-button-pointers: true !default;\n$enable-rfs: true !default;\n$enable-validation-icons: true !default;\n$enable-negative-margins: false !default;\n$enable-deprecation-messages: true !default;\n$enable-important-utilities: true !default;\n\n// Prefix for :root CSS variables\n\n$variable-prefix: bs- !default;\n\n// Gradient\n//\n// The gradient which is added to components if `$enable-gradients` is `true`\n// This gradient is also added to elements with `.bg-gradient`\n// scss-docs-start variable-gradient\n$gradient: linear-gradient(180deg, rgba($white, .15), rgba($white, 0)) !default;\n// scss-docs-end variable-gradient\n\n// Spacing\n//\n// Control the default styling of most Bootstrap elements by modifying these\n// variables. Mostly focused on spacing.\n// You can add more entries to the $spacers map, should you need more variation.\n\n// scss-docs-start spacer-variables-maps\n$spacer: 1rem !default;\n$spacers: (\n 0: 0,\n 1: $spacer * .25,\n 2: $spacer * .5,\n 3: $spacer,\n 4: $spacer * 1.5,\n 5: $spacer * 3,\n) !default;\n\n$negative-spacers: if($enable-negative-margins, negativify-map($spacers), null) !default;\n// scss-docs-end spacer-variables-maps\n\n// Position\n//\n// Define the edge positioning anchors of the position utilities.\n\n// scss-docs-start position-map\n$position-values: (\n 0: 0,\n 50: 50%,\n 100: 100%\n) !default;\n// scss-docs-end position-map\n\n// Body\n//\n// Settings for the `` element.\n\n$body-bg: $white !default;\n$body-color: $gray-900 !default;\n$body-text-align: null !default;\n\n// Utilities maps\n//\n// Extends the default `$theme-colors` maps to help create our utilities.\n\n// Come v6, we'll de-dupe these variables. Until then, for backward compatibility, we keep them to reassign.\n// scss-docs-start utilities-colors\n$utilities-colors: $theme-colors-rgb !default;\n// scss-docs-end utilities-colors\n\n// scss-docs-start utilities-text-colors\n$utilities-text: map-merge(\n $utilities-colors,\n (\n \"black\": to-rgb($black),\n \"white\": to-rgb($white),\n \"body\": to-rgb($body-color)\n )\n) !default;\n$utilities-text-colors: map-loop($utilities-text, rgba-css-var, \"$key\", \"text\") !default;\n// scss-docs-end utilities-text-colors\n\n// scss-docs-start utilities-bg-colors\n$utilities-bg: map-merge(\n $utilities-colors,\n (\n \"black\": to-rgb($black),\n \"white\": to-rgb($white),\n \"body\": to-rgb($body-bg)\n )\n) !default;\n$utilities-bg-colors: map-loop($utilities-bg, rgba-css-var, \"$key\", \"bg\") !default;\n// scss-docs-end utilities-bg-colors\n\n// Links\n//\n// Style anchor elements.\n\n$link-color: $primary !default;\n$link-decoration: underline !default;\n$link-shade-percentage: 20% !default;\n$link-hover-color: shift-color($link-color, $link-shade-percentage) !default;\n$link-hover-decoration: null !default;\n\n$stretched-link-pseudo-element: after !default;\n$stretched-link-z-index: 1 !default;\n\n// Paragraphs\n//\n// Style p element.\n\n$paragraph-margin-bottom: 1rem !default;\n\n\n// Grid breakpoints\n//\n// Define the minimum dimensions at which your layout will change,\n// adapting to different screen sizes, for use in media queries.\n\n// scss-docs-start grid-breakpoints\n$grid-breakpoints: (\n xs: 0,\n sm: 576px,\n md: 768px,\n lg: 992px,\n xl: 1200px,\n xxl: 1400px\n) !default;\n// scss-docs-end grid-breakpoints\n\n@include _assert-ascending($grid-breakpoints, \"$grid-breakpoints\");\n@include _assert-starts-at-zero($grid-breakpoints, \"$grid-breakpoints\");\n\n\n// Grid containers\n//\n// Define the maximum width of `.container` for different screen sizes.\n\n// scss-docs-start container-max-widths\n$container-max-widths: (\n sm: 540px,\n md: 720px,\n lg: 960px,\n xl: 1140px,\n xxl: 1320px\n) !default;\n// scss-docs-end container-max-widths\n\n@include _assert-ascending($container-max-widths, \"$container-max-widths\");\n\n\n// Grid columns\n//\n// Set the number of columns and specify the width of the gutters.\n\n$grid-columns: 12 !default;\n$grid-gutter-width: 1.5rem !default;\n$grid-row-columns: 6 !default;\n\n$gutters: $spacers !default;\n\n// Container padding\n\n$container-padding-x: $grid-gutter-width * .5 !default;\n\n\n// Components\n//\n// Define common padding and border radius sizes and more.\n\n// scss-docs-start border-variables\n$border-width: 1px !default;\n$border-widths: (\n 1: 1px,\n 2: 2px,\n 3: 3px,\n 4: 4px,\n 5: 5px\n) !default;\n\n$border-color: $gray-300 !default;\n// scss-docs-end border-variables\n\n// scss-docs-start border-radius-variables\n$border-radius: .25rem !default;\n$border-radius-sm: .2rem !default;\n$border-radius-lg: .3rem !default;\n$border-radius-pill: 50rem !default;\n// scss-docs-end border-radius-variables\n\n// scss-docs-start box-shadow-variables\n$box-shadow: 0 .5rem 1rem rgba($black, .15) !default;\n$box-shadow-sm: 0 .125rem .25rem rgba($black, .075) !default;\n$box-shadow-lg: 0 1rem 3rem rgba($black, .175) !default;\n$box-shadow-inset: inset 0 1px 2px rgba($black, .075) !default;\n// scss-docs-end box-shadow-variables\n\n$component-active-color: $white !default;\n$component-active-bg: $primary !default;\n\n// scss-docs-start caret-variables\n$caret-width: .3em !default;\n$caret-vertical-align: $caret-width * .85 !default;\n$caret-spacing: $caret-width * .85 !default;\n// scss-docs-end caret-variables\n\n$transition-base: all .2s ease-in-out !default;\n$transition-fade: opacity .15s linear !default;\n// scss-docs-start collapse-transition\n$transition-collapse: height .35s ease !default;\n$transition-collapse-width: width .35s ease !default;\n// scss-docs-end collapse-transition\n\n// stylelint-disable function-disallowed-list\n// scss-docs-start aspect-ratios\n$aspect-ratios: (\n \"1x1\": 100%,\n \"4x3\": calc(3 / 4 * 100%),\n \"16x9\": calc(9 / 16 * 100%),\n \"21x9\": calc(9 / 21 * 100%)\n) !default;\n// scss-docs-end aspect-ratios\n// stylelint-enable function-disallowed-list\n\n// Typography\n//\n// Font, line-height, and color for body text, headings, and more.\n\n// scss-docs-start font-variables\n// stylelint-disable value-keyword-case\n$font-family-sans-serif: system-ui, -apple-system, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", \"Liberation Sans\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\" !default;\n$font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace !default;\n// stylelint-enable value-keyword-case\n$font-family-base: var(--#{$variable-prefix}font-sans-serif) !default;\n$font-family-code: var(--#{$variable-prefix}font-monospace) !default;\n\n// $font-size-root affects the value of `rem`, which is used for as well font sizes, paddings, and margins\n// $font-size-base affects the font size of the body text\n$font-size-root: null !default;\n$font-size-base: 1rem !default; // Assumes the browser default, typically `16px`\n$font-size-sm: $font-size-base * .875 !default;\n$font-size-lg: $font-size-base * 1.25 !default;\n\n$font-weight-lighter: lighter !default;\n$font-weight-light: 300 !default;\n$font-weight-normal: 400 !default;\n$font-weight-bold: 700 !default;\n$font-weight-bolder: bolder !default;\n\n$font-weight-base: $font-weight-normal !default;\n\n$line-height-base: 1.5 !default;\n$line-height-sm: 1.25 !default;\n$line-height-lg: 2 !default;\n\n$h1-font-size: $font-size-base * 2.5 !default;\n$h2-font-size: $font-size-base * 2 !default;\n$h3-font-size: $font-size-base * 1.75 !default;\n$h4-font-size: $font-size-base * 1.5 !default;\n$h5-font-size: $font-size-base * 1.25 !default;\n$h6-font-size: $font-size-base !default;\n// scss-docs-end font-variables\n\n// scss-docs-start font-sizes\n$font-sizes: (\n 1: $h1-font-size,\n 2: $h2-font-size,\n 3: $h3-font-size,\n 4: $h4-font-size,\n 5: $h5-font-size,\n 6: $h6-font-size\n) !default;\n// scss-docs-end font-sizes\n\n// scss-docs-start headings-variables\n$headings-margin-bottom: $spacer * .5 !default;\n$headings-font-family: null !default;\n$headings-font-style: null !default;\n$headings-font-weight: 500 !default;\n$headings-line-height: 1.2 !default;\n$headings-color: null !default;\n// scss-docs-end headings-variables\n\n// scss-docs-start display-headings\n$display-font-sizes: (\n 1: 5rem,\n 2: 4.5rem,\n 3: 4rem,\n 4: 3.5rem,\n 5: 3rem,\n 6: 2.5rem\n) !default;\n\n$display-font-weight: 300 !default;\n$display-line-height: $headings-line-height !default;\n// scss-docs-end display-headings\n\n// scss-docs-start type-variables\n$lead-font-size: $font-size-base * 1.25 !default;\n$lead-font-weight: 300 !default;\n\n$small-font-size: .875em !default;\n\n$sub-sup-font-size: .75em !default;\n\n$text-muted: $gray-600 !default;\n\n$initialism-font-size: $small-font-size !default;\n\n$blockquote-margin-y: $spacer !default;\n$blockquote-font-size: $font-size-base * 1.25 !default;\n$blockquote-footer-color: $gray-600 !default;\n$blockquote-footer-font-size: $small-font-size !default;\n\n$hr-margin-y: $spacer !default;\n$hr-color: inherit !default;\n$hr-height: $border-width !default;\n$hr-opacity: .25 !default;\n\n$legend-margin-bottom: .5rem !default;\n$legend-font-size: 1.5rem !default;\n$legend-font-weight: null !default;\n\n$mark-padding: .2em !default;\n\n$dt-font-weight: $font-weight-bold !default;\n\n$nested-kbd-font-weight: $font-weight-bold !default;\n\n$list-inline-padding: .5rem !default;\n\n$mark-bg: #fcf8e3 !default;\n// scss-docs-end type-variables\n\n\n// Tables\n//\n// Customizes the `.table` component with basic values, each used across all table variations.\n\n// scss-docs-start table-variables\n$table-cell-padding-y: .5rem !default;\n$table-cell-padding-x: .5rem !default;\n$table-cell-padding-y-sm: .25rem !default;\n$table-cell-padding-x-sm: .25rem !default;\n\n$table-cell-vertical-align: top !default;\n\n$table-color: $body-color !default;\n$table-bg: transparent !default;\n$table-accent-bg: transparent !default;\n\n$table-th-font-weight: null !default;\n\n$table-striped-color: $table-color !default;\n$table-striped-bg-factor: .05 !default;\n$table-striped-bg: rgba($black, $table-striped-bg-factor) !default;\n\n$table-active-color: $table-color !default;\n$table-active-bg-factor: .1 !default;\n$table-active-bg: rgba($black, $table-active-bg-factor) !default;\n\n$table-hover-color: $table-color !default;\n$table-hover-bg-factor: .075 !default;\n$table-hover-bg: rgba($black, $table-hover-bg-factor) !default;\n\n$table-border-factor: .1 !default;\n$table-border-width: $border-width !default;\n$table-border-color: $border-color !default;\n\n$table-striped-order: odd !default;\n\n$table-group-separator-color: currentColor !default;\n\n$table-caption-color: $text-muted !default;\n\n$table-bg-scale: -80% !default;\n// scss-docs-end table-variables\n\n// scss-docs-start table-loop\n$table-variants: (\n \"primary\": shift-color($primary, $table-bg-scale),\n \"secondary\": shift-color($secondary, $table-bg-scale),\n \"success\": shift-color($success, $table-bg-scale),\n \"info\": shift-color($info, $table-bg-scale),\n \"warning\": shift-color($warning, $table-bg-scale),\n \"danger\": shift-color($danger, $table-bg-scale),\n \"light\": $light,\n \"dark\": $dark,\n) !default;\n// scss-docs-end table-loop\n\n\n// Buttons + Forms\n//\n// Shared variables that are reassigned to `$input-` and `$btn-` specific variables.\n\n// scss-docs-start input-btn-variables\n$input-btn-padding-y: .375rem !default;\n$input-btn-padding-x: .75rem !default;\n$input-btn-font-family: null !default;\n$input-btn-font-size: $font-size-base !default;\n$input-btn-line-height: $line-height-base !default;\n\n$input-btn-focus-width: .25rem !default;\n$input-btn-focus-color-opacity: .25 !default;\n$input-btn-focus-color: rgba($component-active-bg, $input-btn-focus-color-opacity) !default;\n$input-btn-focus-blur: 0 !default;\n$input-btn-focus-box-shadow: 0 0 $input-btn-focus-blur $input-btn-focus-width $input-btn-focus-color !default;\n\n$input-btn-padding-y-sm: .25rem !default;\n$input-btn-padding-x-sm: .5rem !default;\n$input-btn-font-size-sm: $font-size-sm !default;\n\n$input-btn-padding-y-lg: .5rem !default;\n$input-btn-padding-x-lg: 1rem !default;\n$input-btn-font-size-lg: $font-size-lg !default;\n\n$input-btn-border-width: $border-width !default;\n// scss-docs-end input-btn-variables\n\n\n// Buttons\n//\n// For each of Bootstrap's buttons, define text, background, and border color.\n\n// scss-docs-start btn-variables\n$btn-padding-y: $input-btn-padding-y !default;\n$btn-padding-x: $input-btn-padding-x !default;\n$btn-font-family: $input-btn-font-family !default;\n$btn-font-size: $input-btn-font-size !default;\n$btn-line-height: $input-btn-line-height !default;\n$btn-white-space: null !default; // Set to `nowrap` to prevent text wrapping\n\n$btn-padding-y-sm: $input-btn-padding-y-sm !default;\n$btn-padding-x-sm: $input-btn-padding-x-sm !default;\n$btn-font-size-sm: $input-btn-font-size-sm !default;\n\n$btn-padding-y-lg: $input-btn-padding-y-lg !default;\n$btn-padding-x-lg: $input-btn-padding-x-lg !default;\n$btn-font-size-lg: $input-btn-font-size-lg !default;\n\n$btn-border-width: $input-btn-border-width !default;\n\n$btn-font-weight: $font-weight-normal !default;\n$btn-box-shadow: inset 0 1px 0 rgba($white, .15), 0 1px 1px rgba($black, .075) !default;\n$btn-focus-width: $input-btn-focus-width !default;\n$btn-focus-box-shadow: $input-btn-focus-box-shadow !default;\n$btn-disabled-opacity: .65 !default;\n$btn-active-box-shadow: inset 0 3px 5px rgba($black, .125) !default;\n\n$btn-link-color: $link-color !default;\n$btn-link-hover-color: $link-hover-color !default;\n$btn-link-disabled-color: $gray-600 !default;\n\n// Allows for customizing button radius independently from global border radius\n$btn-border-radius: $border-radius !default;\n$btn-border-radius-sm: $border-radius-sm !default;\n$btn-border-radius-lg: $border-radius-lg !default;\n\n$btn-transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n\n$btn-hover-bg-shade-amount: 15% !default;\n$btn-hover-bg-tint-amount: 15% !default;\n$btn-hover-border-shade-amount: 20% !default;\n$btn-hover-border-tint-amount: 10% !default;\n$btn-active-bg-shade-amount: 20% !default;\n$btn-active-bg-tint-amount: 20% !default;\n$btn-active-border-shade-amount: 25% !default;\n$btn-active-border-tint-amount: 10% !default;\n// scss-docs-end btn-variables\n\n\n// Forms\n\n// scss-docs-start form-text-variables\n$form-text-margin-top: .25rem !default;\n$form-text-font-size: $small-font-size !default;\n$form-text-font-style: null !default;\n$form-text-font-weight: null !default;\n$form-text-color: $text-muted !default;\n// scss-docs-end form-text-variables\n\n// scss-docs-start form-label-variables\n$form-label-margin-bottom: .5rem !default;\n$form-label-font-size: null !default;\n$form-label-font-style: null !default;\n$form-label-font-weight: null !default;\n$form-label-color: null !default;\n// scss-docs-end form-label-variables\n\n// scss-docs-start form-input-variables\n$input-padding-y: $input-btn-padding-y !default;\n$input-padding-x: $input-btn-padding-x !default;\n$input-font-family: $input-btn-font-family !default;\n$input-font-size: $input-btn-font-size !default;\n$input-font-weight: $font-weight-base !default;\n$input-line-height: $input-btn-line-height !default;\n\n$input-padding-y-sm: $input-btn-padding-y-sm !default;\n$input-padding-x-sm: $input-btn-padding-x-sm !default;\n$input-font-size-sm: $input-btn-font-size-sm !default;\n\n$input-padding-y-lg: $input-btn-padding-y-lg !default;\n$input-padding-x-lg: $input-btn-padding-x-lg !default;\n$input-font-size-lg: $input-btn-font-size-lg !default;\n\n$input-bg: $body-bg !default;\n$input-disabled-bg: $gray-200 !default;\n$input-disabled-border-color: null !default;\n\n$input-color: $body-color !default;\n$input-border-color: $gray-400 !default;\n$input-border-width: $input-btn-border-width !default;\n$input-box-shadow: $box-shadow-inset !default;\n\n$input-border-radius: $border-radius !default;\n$input-border-radius-sm: $border-radius-sm !default;\n$input-border-radius-lg: $border-radius-lg !default;\n\n$input-focus-bg: $input-bg !default;\n$input-focus-border-color: tint-color($component-active-bg, 50%) !default;\n$input-focus-color: $input-color !default;\n$input-focus-width: $input-btn-focus-width !default;\n$input-focus-box-shadow: $input-btn-focus-box-shadow !default;\n\n$input-placeholder-color: $gray-600 !default;\n$input-plaintext-color: $body-color !default;\n\n$input-height-border: $input-border-width * 2 !default;\n\n$input-height-inner: add($input-line-height * 1em, $input-padding-y * 2) !default;\n$input-height-inner-half: add($input-line-height * .5em, $input-padding-y) !default;\n$input-height-inner-quarter: add($input-line-height * .25em, $input-padding-y * .5) !default;\n\n$input-height: add($input-line-height * 1em, add($input-padding-y * 2, $input-height-border, false)) !default;\n$input-height-sm: add($input-line-height * 1em, add($input-padding-y-sm * 2, $input-height-border, false)) !default;\n$input-height-lg: add($input-line-height * 1em, add($input-padding-y-lg * 2, $input-height-border, false)) !default;\n\n$input-transition: border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n\n$form-color-width: 3rem !default;\n// scss-docs-end form-input-variables\n\n// scss-docs-start form-check-variables\n$form-check-input-width: 1em !default;\n$form-check-min-height: $font-size-base * $line-height-base !default;\n$form-check-padding-start: $form-check-input-width + .5em !default;\n$form-check-margin-bottom: .125rem !default;\n$form-check-label-color: null !default;\n$form-check-label-cursor: null !default;\n$form-check-transition: null !default;\n\n$form-check-input-active-filter: brightness(90%) !default;\n\n$form-check-input-bg: $input-bg !default;\n$form-check-input-border: 1px solid rgba($black, .25) !default;\n$form-check-input-border-radius: .25em !default;\n$form-check-radio-border-radius: 50% !default;\n$form-check-input-focus-border: $input-focus-border-color !default;\n$form-check-input-focus-box-shadow: $input-btn-focus-box-shadow !default;\n\n$form-check-input-checked-color: $component-active-color !default;\n$form-check-input-checked-bg-color: $component-active-bg !default;\n$form-check-input-checked-border-color: $form-check-input-checked-bg-color !default;\n$form-check-input-checked-bg-image: url(\"data:image/svg+xml,\") !default;\n$form-check-radio-checked-bg-image: url(\"data:image/svg+xml,\") !default;\n\n$form-check-input-indeterminate-color: $component-active-color !default;\n$form-check-input-indeterminate-bg-color: $component-active-bg !default;\n$form-check-input-indeterminate-border-color: $form-check-input-indeterminate-bg-color !default;\n$form-check-input-indeterminate-bg-image: url(\"data:image/svg+xml,\") !default;\n\n$form-check-input-disabled-opacity: .5 !default;\n$form-check-label-disabled-opacity: $form-check-input-disabled-opacity !default;\n$form-check-btn-check-disabled-opacity: $btn-disabled-opacity !default;\n\n$form-check-inline-margin-end: 1rem !default;\n// scss-docs-end form-check-variables\n\n// scss-docs-start form-switch-variables\n$form-switch-color: rgba($black, .25) !default;\n$form-switch-width: 2em !default;\n$form-switch-padding-start: $form-switch-width + .5em !default;\n$form-switch-bg-image: url(\"data:image/svg+xml,\") !default;\n$form-switch-border-radius: $form-switch-width !default;\n$form-switch-transition: background-position .15s ease-in-out !default;\n\n$form-switch-focus-color: $input-focus-border-color !default;\n$form-switch-focus-bg-image: url(\"data:image/svg+xml,\") !default;\n\n$form-switch-checked-color: $component-active-color !default;\n$form-switch-checked-bg-image: url(\"data:image/svg+xml,\") !default;\n$form-switch-checked-bg-position: right center !default;\n// scss-docs-end form-switch-variables\n\n// scss-docs-start input-group-variables\n$input-group-addon-padding-y: $input-padding-y !default;\n$input-group-addon-padding-x: $input-padding-x !default;\n$input-group-addon-font-weight: $input-font-weight !default;\n$input-group-addon-color: $input-color !default;\n$input-group-addon-bg: $gray-200 !default;\n$input-group-addon-border-color: $input-border-color !default;\n// scss-docs-end input-group-variables\n\n// scss-docs-start form-select-variables\n$form-select-padding-y: $input-padding-y !default;\n$form-select-padding-x: $input-padding-x !default;\n$form-select-font-family: $input-font-family !default;\n$form-select-font-size: $input-font-size !default;\n$form-select-indicator-padding: $form-select-padding-x * 3 !default; // Extra padding for background-image\n$form-select-font-weight: $input-font-weight !default;\n$form-select-line-height: $input-line-height !default;\n$form-select-color: $input-color !default;\n$form-select-bg: $input-bg !default;\n$form-select-disabled-color: null !default;\n$form-select-disabled-bg: $gray-200 !default;\n$form-select-disabled-border-color: $input-disabled-border-color !default;\n$form-select-bg-position: right $form-select-padding-x center !default;\n$form-select-bg-size: 16px 12px !default; // In pixels because image dimensions\n$form-select-indicator-color: $gray-800 !default;\n$form-select-indicator: url(\"data:image/svg+xml,\") !default;\n\n$form-select-feedback-icon-padding-end: $form-select-padding-x * 2.5 + $form-select-indicator-padding !default;\n$form-select-feedback-icon-position: center right $form-select-indicator-padding !default;\n$form-select-feedback-icon-size: $input-height-inner-half $input-height-inner-half !default;\n\n$form-select-border-width: $input-border-width !default;\n$form-select-border-color: $input-border-color !default;\n$form-select-border-radius: $input-border-radius !default;\n$form-select-box-shadow: $box-shadow-inset !default;\n\n$form-select-focus-border-color: $input-focus-border-color !default;\n$form-select-focus-width: $input-focus-width !default;\n$form-select-focus-box-shadow: 0 0 0 $form-select-focus-width $input-btn-focus-color !default;\n\n$form-select-padding-y-sm: $input-padding-y-sm !default;\n$form-select-padding-x-sm: $input-padding-x-sm !default;\n$form-select-font-size-sm: $input-font-size-sm !default;\n$form-select-border-radius-sm: $input-border-radius-sm !default;\n\n$form-select-padding-y-lg: $input-padding-y-lg !default;\n$form-select-padding-x-lg: $input-padding-x-lg !default;\n$form-select-font-size-lg: $input-font-size-lg !default;\n$form-select-border-radius-lg: $input-border-radius-lg !default;\n\n$form-select-transition: $input-transition !default;\n// scss-docs-end form-select-variables\n\n// scss-docs-start form-range-variables\n$form-range-track-width: 100% !default;\n$form-range-track-height: .5rem !default;\n$form-range-track-cursor: pointer !default;\n$form-range-track-bg: $gray-300 !default;\n$form-range-track-border-radius: 1rem !default;\n$form-range-track-box-shadow: $box-shadow-inset !default;\n\n$form-range-thumb-width: 1rem !default;\n$form-range-thumb-height: $form-range-thumb-width !default;\n$form-range-thumb-bg: $component-active-bg !default;\n$form-range-thumb-border: 0 !default;\n$form-range-thumb-border-radius: 1rem !default;\n$form-range-thumb-box-shadow: 0 .1rem .25rem rgba($black, .1) !default;\n$form-range-thumb-focus-box-shadow: 0 0 0 1px $body-bg, $input-focus-box-shadow !default;\n$form-range-thumb-focus-box-shadow-width: $input-focus-width !default; // For focus box shadow issue in Edge\n$form-range-thumb-active-bg: tint-color($component-active-bg, 70%) !default;\n$form-range-thumb-disabled-bg: $gray-500 !default;\n$form-range-thumb-transition: background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n// scss-docs-end form-range-variables\n\n// scss-docs-start form-file-variables\n$form-file-button-color: $input-color !default;\n$form-file-button-bg: $input-group-addon-bg !default;\n$form-file-button-hover-bg: shade-color($form-file-button-bg, 5%) !default;\n// scss-docs-end form-file-variables\n\n// scss-docs-start form-floating-variables\n$form-floating-height: add(3.5rem, $input-height-border) !default;\n$form-floating-line-height: 1.25 !default;\n$form-floating-padding-x: $input-padding-x !default;\n$form-floating-padding-y: 1rem !default;\n$form-floating-input-padding-t: 1.625rem !default;\n$form-floating-input-padding-b: .625rem !default;\n$form-floating-label-opacity: .65 !default;\n$form-floating-label-transform: scale(.85) translateY(-.5rem) translateX(.15rem) !default;\n$form-floating-transition: opacity .1s ease-in-out, transform .1s ease-in-out !default;\n// scss-docs-end form-floating-variables\n\n// Form validation\n\n// scss-docs-start form-feedback-variables\n$form-feedback-margin-top: $form-text-margin-top !default;\n$form-feedback-font-size: $form-text-font-size !default;\n$form-feedback-font-style: $form-text-font-style !default;\n$form-feedback-valid-color: $success !default;\n$form-feedback-invalid-color: $danger !default;\n\n$form-feedback-icon-valid-color: $form-feedback-valid-color !default;\n$form-feedback-icon-valid: url(\"data:image/svg+xml,\") !default;\n$form-feedback-icon-invalid-color: $form-feedback-invalid-color !default;\n$form-feedback-icon-invalid: url(\"data:image/svg+xml,\") !default;\n// scss-docs-end form-feedback-variables\n\n// scss-docs-start form-validation-states\n$form-validation-states: (\n \"valid\": (\n \"color\": $form-feedback-valid-color,\n \"icon\": $form-feedback-icon-valid\n ),\n \"invalid\": (\n \"color\": $form-feedback-invalid-color,\n \"icon\": $form-feedback-icon-invalid\n )\n) !default;\n// scss-docs-end form-validation-states\n\n// Z-index master list\n//\n// Warning: Avoid customizing these values. They're used for a bird's eye view\n// of components dependent on the z-axis and are designed to all work together.\n\n// scss-docs-start zindex-stack\n$zindex-dropdown: 1000 !default;\n$zindex-sticky: 1020 !default;\n$zindex-fixed: 1030 !default;\n$zindex-offcanvas-backdrop: 1040 !default;\n$zindex-offcanvas: 1045 !default;\n$zindex-modal-backdrop: 1050 !default;\n$zindex-modal: 1055 !default;\n$zindex-popover: 1070 !default;\n$zindex-tooltip: 1080 !default;\n// scss-docs-end zindex-stack\n\n\n// Navs\n\n// scss-docs-start nav-variables\n$nav-link-padding-y: .5rem !default;\n$nav-link-padding-x: 1rem !default;\n$nav-link-font-size: null !default;\n$nav-link-font-weight: null !default;\n$nav-link-color: $link-color !default;\n$nav-link-hover-color: $link-hover-color !default;\n$nav-link-transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out !default;\n$nav-link-disabled-color: $gray-600 !default;\n\n$nav-tabs-border-color: $gray-300 !default;\n$nav-tabs-border-width: $border-width !default;\n$nav-tabs-border-radius: $border-radius !default;\n$nav-tabs-link-hover-border-color: $gray-200 $gray-200 $nav-tabs-border-color !default;\n$nav-tabs-link-active-color: $gray-700 !default;\n$nav-tabs-link-active-bg: $body-bg !default;\n$nav-tabs-link-active-border-color: $gray-300 $gray-300 $nav-tabs-link-active-bg !default;\n\n$nav-pills-border-radius: $border-radius !default;\n$nav-pills-link-active-color: $component-active-color !default;\n$nav-pills-link-active-bg: $component-active-bg !default;\n// scss-docs-end nav-variables\n\n\n// Navbar\n\n// scss-docs-start navbar-variables\n$navbar-padding-y: $spacer * .5 !default;\n$navbar-padding-x: null !default;\n\n$navbar-nav-link-padding-x: .5rem !default;\n\n$navbar-brand-font-size: $font-size-lg !default;\n// Compute the navbar-brand padding-y so the navbar-brand will have the same height as navbar-text and nav-link\n$nav-link-height: $font-size-base * $line-height-base + $nav-link-padding-y * 2 !default;\n$navbar-brand-height: $navbar-brand-font-size * $line-height-base !default;\n$navbar-brand-padding-y: ($nav-link-height - $navbar-brand-height) * .5 !default;\n$navbar-brand-margin-end: 1rem !default;\n\n$navbar-toggler-padding-y: .25rem !default;\n$navbar-toggler-padding-x: .75rem !default;\n$navbar-toggler-font-size: $font-size-lg !default;\n$navbar-toggler-border-radius: $btn-border-radius !default;\n$navbar-toggler-focus-width: $btn-focus-width !default;\n$navbar-toggler-transition: box-shadow .15s ease-in-out !default;\n// scss-docs-end navbar-variables\n\n// scss-docs-start navbar-theme-variables\n$navbar-dark-color: rgba($white, .55) !default;\n$navbar-dark-hover-color: rgba($white, .75) !default;\n$navbar-dark-active-color: $white !default;\n$navbar-dark-disabled-color: rgba($white, .25) !default;\n$navbar-dark-toggler-icon-bg: url(\"data:image/svg+xml,\") !default;\n$navbar-dark-toggler-border-color: rgba($white, .1) !default;\n\n$navbar-light-color: rgba($black, .55) !default;\n$navbar-light-hover-color: rgba($black, .7) !default;\n$navbar-light-active-color: rgba($black, .9) !default;\n$navbar-light-disabled-color: rgba($black, .3) !default;\n$navbar-light-toggler-icon-bg: url(\"data:image/svg+xml,\") !default;\n$navbar-light-toggler-border-color: rgba($black, .1) !default;\n\n$navbar-light-brand-color: $navbar-light-active-color !default;\n$navbar-light-brand-hover-color: $navbar-light-active-color !default;\n$navbar-dark-brand-color: $navbar-dark-active-color !default;\n$navbar-dark-brand-hover-color: $navbar-dark-active-color !default;\n// scss-docs-end navbar-theme-variables\n\n\n// Dropdowns\n//\n// Dropdown menu container and contents.\n\n// scss-docs-start dropdown-variables\n$dropdown-min-width: 10rem !default;\n$dropdown-padding-x: 0 !default;\n$dropdown-padding-y: .5rem !default;\n$dropdown-spacer: .125rem !default;\n$dropdown-font-size: $font-size-base !default;\n$dropdown-color: $body-color !default;\n$dropdown-bg: $white !default;\n$dropdown-border-color: rgba($black, .15) !default;\n$dropdown-border-radius: $border-radius !default;\n$dropdown-border-width: $border-width !default;\n$dropdown-inner-border-radius: subtract($dropdown-border-radius, $dropdown-border-width) !default;\n$dropdown-divider-bg: $dropdown-border-color !default;\n$dropdown-divider-margin-y: $spacer * .5 !default;\n$dropdown-box-shadow: $box-shadow !default;\n\n$dropdown-link-color: $gray-900 !default;\n$dropdown-link-hover-color: shade-color($dropdown-link-color, 10%) !default;\n$dropdown-link-hover-bg: $gray-200 !default;\n\n$dropdown-link-active-color: $component-active-color !default;\n$dropdown-link-active-bg: $component-active-bg !default;\n\n$dropdown-link-disabled-color: $gray-500 !default;\n\n$dropdown-item-padding-y: $spacer * .25 !default;\n$dropdown-item-padding-x: $spacer !default;\n\n$dropdown-header-color: $gray-600 !default;\n$dropdown-header-padding: $dropdown-padding-y $dropdown-item-padding-x !default;\n// scss-docs-end dropdown-variables\n\n// scss-docs-start dropdown-dark-variables\n$dropdown-dark-color: $gray-300 !default;\n$dropdown-dark-bg: $gray-800 !default;\n$dropdown-dark-border-color: $dropdown-border-color !default;\n$dropdown-dark-divider-bg: $dropdown-divider-bg !default;\n$dropdown-dark-box-shadow: null !default;\n$dropdown-dark-link-color: $dropdown-dark-color !default;\n$dropdown-dark-link-hover-color: $white !default;\n$dropdown-dark-link-hover-bg: rgba($white, .15) !default;\n$dropdown-dark-link-active-color: $dropdown-link-active-color !default;\n$dropdown-dark-link-active-bg: $dropdown-link-active-bg !default;\n$dropdown-dark-link-disabled-color: $gray-500 !default;\n$dropdown-dark-header-color: $gray-500 !default;\n// scss-docs-end dropdown-dark-variables\n\n\n// Pagination\n\n// scss-docs-start pagination-variables\n$pagination-padding-y: .375rem !default;\n$pagination-padding-x: .75rem !default;\n$pagination-padding-y-sm: .25rem !default;\n$pagination-padding-x-sm: .5rem !default;\n$pagination-padding-y-lg: .75rem !default;\n$pagination-padding-x-lg: 1.5rem !default;\n\n$pagination-color: $link-color !default;\n$pagination-bg: $white !default;\n$pagination-border-width: $border-width !default;\n$pagination-border-radius: $border-radius !default;\n$pagination-margin-start: -$pagination-border-width !default;\n$pagination-border-color: $gray-300 !default;\n\n$pagination-focus-color: $link-hover-color !default;\n$pagination-focus-bg: $gray-200 !default;\n$pagination-focus-box-shadow: $input-btn-focus-box-shadow !default;\n$pagination-focus-outline: 0 !default;\n\n$pagination-hover-color: $link-hover-color !default;\n$pagination-hover-bg: $gray-200 !default;\n$pagination-hover-border-color: $gray-300 !default;\n\n$pagination-active-color: $component-active-color !default;\n$pagination-active-bg: $component-active-bg !default;\n$pagination-active-border-color: $pagination-active-bg !default;\n\n$pagination-disabled-color: $gray-600 !default;\n$pagination-disabled-bg: $white !default;\n$pagination-disabled-border-color: $gray-300 !default;\n\n$pagination-transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n\n$pagination-border-radius-sm: $border-radius-sm !default;\n$pagination-border-radius-lg: $border-radius-lg !default;\n// scss-docs-end pagination-variables\n\n\n// Placeholders\n\n// scss-docs-start placeholders\n$placeholder-opacity-max: .5 !default;\n$placeholder-opacity-min: .2 !default;\n// scss-docs-end placeholders\n\n// Cards\n\n// scss-docs-start card-variables\n$card-spacer-y: $spacer !default;\n$card-spacer-x: $spacer !default;\n$card-title-spacer-y: $spacer * .5 !default;\n$card-border-width: $border-width !default;\n$card-border-color: rgba($black, .125) !default;\n$card-border-radius: $border-radius !default;\n$card-box-shadow: null !default;\n$card-inner-border-radius: subtract($card-border-radius, $card-border-width) !default;\n$card-cap-padding-y: $card-spacer-y * .5 !default;\n$card-cap-padding-x: $card-spacer-x !default;\n$card-cap-bg: rgba($black, .03) !default;\n$card-cap-color: null !default;\n$card-height: null !default;\n$card-color: null !default;\n$card-bg: $white !default;\n$card-img-overlay-padding: $spacer !default;\n$card-group-margin: $grid-gutter-width * .5 !default;\n// scss-docs-end card-variables\n\n// Accordion\n\n// scss-docs-start accordion-variables\n$accordion-padding-y: 1rem !default;\n$accordion-padding-x: 1.25rem !default;\n$accordion-color: $body-color !default;\n$accordion-bg: $body-bg !default;\n$accordion-border-width: $border-width !default;\n$accordion-border-color: rgba($black, .125) !default;\n$accordion-border-radius: $border-radius !default;\n$accordion-inner-border-radius: subtract($accordion-border-radius, $accordion-border-width) !default;\n\n$accordion-body-padding-y: $accordion-padding-y !default;\n$accordion-body-padding-x: $accordion-padding-x !default;\n\n$accordion-button-padding-y: $accordion-padding-y !default;\n$accordion-button-padding-x: $accordion-padding-x !default;\n$accordion-button-color: $accordion-color !default;\n$accordion-button-bg: $accordion-bg !default;\n$accordion-transition: $btn-transition, border-radius .15s ease !default;\n$accordion-button-active-bg: tint-color($component-active-bg, 90%) !default;\n$accordion-button-active-color: shade-color($primary, 10%) !default;\n\n$accordion-button-focus-border-color: $input-focus-border-color !default;\n$accordion-button-focus-box-shadow: $btn-focus-box-shadow !default;\n\n$accordion-icon-width: 1.25rem !default;\n$accordion-icon-color: $accordion-button-color !default;\n$accordion-icon-active-color: $accordion-button-active-color !default;\n$accordion-icon-transition: transform .2s ease-in-out !default;\n$accordion-icon-transform: rotate(-180deg) !default;\n\n$accordion-button-icon: url(\"data:image/svg+xml,\") !default;\n$accordion-button-active-icon: url(\"data:image/svg+xml,\") !default;\n// scss-docs-end accordion-variables\n\n// Tooltips\n\n// scss-docs-start tooltip-variables\n$tooltip-font-size: $font-size-sm !default;\n$tooltip-max-width: 200px !default;\n$tooltip-color: $white !default;\n$tooltip-bg: $black !default;\n$tooltip-border-radius: $border-radius !default;\n$tooltip-opacity: .9 !default;\n$tooltip-padding-y: $spacer * .25 !default;\n$tooltip-padding-x: $spacer * .5 !default;\n$tooltip-margin: 0 !default;\n\n$tooltip-arrow-width: .8rem !default;\n$tooltip-arrow-height: .4rem !default;\n$tooltip-arrow-color: $tooltip-bg !default;\n// scss-docs-end tooltip-variables\n\n// Form tooltips must come after regular tooltips\n// scss-docs-start tooltip-feedback-variables\n$form-feedback-tooltip-padding-y: $tooltip-padding-y !default;\n$form-feedback-tooltip-padding-x: $tooltip-padding-x !default;\n$form-feedback-tooltip-font-size: $tooltip-font-size !default;\n$form-feedback-tooltip-line-height: null !default;\n$form-feedback-tooltip-opacity: $tooltip-opacity !default;\n$form-feedback-tooltip-border-radius: $tooltip-border-radius !default;\n// scss-docs-end tooltip-feedback-variables\n\n\n// Popovers\n\n// scss-docs-start popover-variables\n$popover-font-size: $font-size-sm !default;\n$popover-bg: $white !default;\n$popover-max-width: 276px !default;\n$popover-border-width: $border-width !default;\n$popover-border-color: rgba($black, .2) !default;\n$popover-border-radius: $border-radius-lg !default;\n$popover-inner-border-radius: subtract($popover-border-radius, $popover-border-width) !default;\n$popover-box-shadow: $box-shadow !default;\n\n$popover-header-bg: shade-color($popover-bg, 6%) !default;\n$popover-header-color: $headings-color !default;\n$popover-header-padding-y: .5rem !default;\n$popover-header-padding-x: $spacer !default;\n\n$popover-body-color: $body-color !default;\n$popover-body-padding-y: $spacer !default;\n$popover-body-padding-x: $spacer !default;\n\n$popover-arrow-width: 1rem !default;\n$popover-arrow-height: .5rem !default;\n$popover-arrow-color: $popover-bg !default;\n\n$popover-arrow-outer-color: fade-in($popover-border-color, .05) !default;\n// scss-docs-end popover-variables\n\n\n// Toasts\n\n// scss-docs-start toast-variables\n$toast-max-width: 350px !default;\n$toast-padding-x: .75rem !default;\n$toast-padding-y: .5rem !default;\n$toast-font-size: .875rem !default;\n$toast-color: null !default;\n$toast-background-color: rgba($white, .85) !default;\n$toast-border-width: 1px !default;\n$toast-border-color: rgba($black, .1) !default;\n$toast-border-radius: $border-radius !default;\n$toast-box-shadow: $box-shadow !default;\n$toast-spacing: $container-padding-x !default;\n\n$toast-header-color: $gray-600 !default;\n$toast-header-background-color: rgba($white, .85) !default;\n$toast-header-border-color: rgba($black, .05) !default;\n// scss-docs-end toast-variables\n\n\n// Badges\n\n// scss-docs-start badge-variables\n$badge-font-size: .75em !default;\n$badge-font-weight: $font-weight-bold !default;\n$badge-color: $white !default;\n$badge-padding-y: .35em !default;\n$badge-padding-x: .65em !default;\n$badge-border-radius: $border-radius !default;\n// scss-docs-end badge-variables\n\n\n// Modals\n\n// scss-docs-start modal-variables\n$modal-inner-padding: $spacer !default;\n\n$modal-footer-margin-between: .5rem !default;\n\n$modal-dialog-margin: .5rem !default;\n$modal-dialog-margin-y-sm-up: 1.75rem !default;\n\n$modal-title-line-height: $line-height-base !default;\n\n$modal-content-color: null !default;\n$modal-content-bg: $white !default;\n$modal-content-border-color: rgba($black, .2) !default;\n$modal-content-border-width: $border-width !default;\n$modal-content-border-radius: $border-radius-lg !default;\n$modal-content-inner-border-radius: subtract($modal-content-border-radius, $modal-content-border-width) !default;\n$modal-content-box-shadow-xs: $box-shadow-sm !default;\n$modal-content-box-shadow-sm-up: $box-shadow !default;\n\n$modal-backdrop-bg: $black !default;\n$modal-backdrop-opacity: .5 !default;\n$modal-header-border-color: $border-color !default;\n$modal-footer-border-color: $modal-header-border-color !default;\n$modal-header-border-width: $modal-content-border-width !default;\n$modal-footer-border-width: $modal-header-border-width !default;\n$modal-header-padding-y: $modal-inner-padding !default;\n$modal-header-padding-x: $modal-inner-padding !default;\n$modal-header-padding: $modal-header-padding-y $modal-header-padding-x !default; // Keep this for backwards compatibility\n\n$modal-sm: 300px !default;\n$modal-md: 500px !default;\n$modal-lg: 800px !default;\n$modal-xl: 1140px !default;\n\n$modal-fade-transform: translate(0, -50px) !default;\n$modal-show-transform: none !default;\n$modal-transition: transform .3s ease-out !default;\n$modal-scale-transform: scale(1.02) !default;\n// scss-docs-end modal-variables\n\n\n// Alerts\n//\n// Define alert colors, border radius, and padding.\n\n// scss-docs-start alert-variables\n$alert-padding-y: $spacer !default;\n$alert-padding-x: $spacer !default;\n$alert-margin-bottom: 1rem !default;\n$alert-border-radius: $border-radius !default;\n$alert-link-font-weight: $font-weight-bold !default;\n$alert-border-width: $border-width !default;\n$alert-bg-scale: -80% !default;\n$alert-border-scale: -70% !default;\n$alert-color-scale: 40% !default;\n$alert-dismissible-padding-r: $alert-padding-x * 3 !default; // 3x covers width of x plus default padding on either side\n// scss-docs-end alert-variables\n\n\n// Progress bars\n\n// scss-docs-start progress-variables\n$progress-height: 1rem !default;\n$progress-font-size: $font-size-base * .75 !default;\n$progress-bg: $gray-200 !default;\n$progress-border-radius: $border-radius !default;\n$progress-box-shadow: $box-shadow-inset !default;\n$progress-bar-color: $white !default;\n$progress-bar-bg: $primary !default;\n$progress-bar-animation-timing: 1s linear infinite !default;\n$progress-bar-transition: width .6s ease !default;\n// scss-docs-end progress-variables\n\n\n// List group\n\n// scss-docs-start list-group-variables\n$list-group-color: $gray-900 !default;\n$list-group-bg: $white !default;\n$list-group-border-color: rgba($black, .125) !default;\n$list-group-border-width: $border-width !default;\n$list-group-border-radius: $border-radius !default;\n\n$list-group-item-padding-y: $spacer * .5 !default;\n$list-group-item-padding-x: $spacer !default;\n$list-group-item-bg-scale: -80% !default;\n$list-group-item-color-scale: 40% !default;\n\n$list-group-hover-bg: $gray-100 !default;\n$list-group-active-color: $component-active-color !default;\n$list-group-active-bg: $component-active-bg !default;\n$list-group-active-border-color: $list-group-active-bg !default;\n\n$list-group-disabled-color: $gray-600 !default;\n$list-group-disabled-bg: $list-group-bg !default;\n\n$list-group-action-color: $gray-700 !default;\n$list-group-action-hover-color: $list-group-action-color !default;\n\n$list-group-action-active-color: $body-color !default;\n$list-group-action-active-bg: $gray-200 !default;\n// scss-docs-end list-group-variables\n\n\n// Image thumbnails\n\n// scss-docs-start thumbnail-variables\n$thumbnail-padding: .25rem !default;\n$thumbnail-bg: $body-bg !default;\n$thumbnail-border-width: $border-width !default;\n$thumbnail-border-color: $gray-300 !default;\n$thumbnail-border-radius: $border-radius !default;\n$thumbnail-box-shadow: $box-shadow-sm !default;\n// scss-docs-end thumbnail-variables\n\n\n// Figures\n\n// scss-docs-start figure-variables\n$figure-caption-font-size: $small-font-size !default;\n$figure-caption-color: $gray-600 !default;\n// scss-docs-end figure-variables\n\n\n// Breadcrumbs\n\n// scss-docs-start breadcrumb-variables\n$breadcrumb-font-size: null !default;\n$breadcrumb-padding-y: 0 !default;\n$breadcrumb-padding-x: 0 !default;\n$breadcrumb-item-padding-x: .5rem !default;\n$breadcrumb-margin-bottom: 1rem !default;\n$breadcrumb-bg: null !default;\n$breadcrumb-divider-color: $gray-600 !default;\n$breadcrumb-active-color: $gray-600 !default;\n$breadcrumb-divider: quote(\"/\") !default;\n$breadcrumb-divider-flipped: $breadcrumb-divider !default;\n$breadcrumb-border-radius: null !default;\n// scss-docs-end breadcrumb-variables\n\n// Carousel\n\n// scss-docs-start carousel-variables\n$carousel-control-color: $white !default;\n$carousel-control-width: 15% !default;\n$carousel-control-opacity: .5 !default;\n$carousel-control-hover-opacity: .9 !default;\n$carousel-control-transition: opacity .15s ease !default;\n\n$carousel-indicator-width: 30px !default;\n$carousel-indicator-height: 3px !default;\n$carousel-indicator-hit-area-height: 10px !default;\n$carousel-indicator-spacer: 3px !default;\n$carousel-indicator-opacity: .5 !default;\n$carousel-indicator-active-bg: $white !default;\n$carousel-indicator-active-opacity: 1 !default;\n$carousel-indicator-transition: opacity .6s ease !default;\n\n$carousel-caption-width: 70% !default;\n$carousel-caption-color: $white !default;\n$carousel-caption-padding-y: 1.25rem !default;\n$carousel-caption-spacer: 1.25rem !default;\n\n$carousel-control-icon-width: 2rem !default;\n\n$carousel-control-prev-icon-bg: url(\"data:image/svg+xml,\") !default;\n$carousel-control-next-icon-bg: url(\"data:image/svg+xml,\") !default;\n\n$carousel-transition-duration: .6s !default;\n$carousel-transition: transform $carousel-transition-duration ease-in-out !default; // Define transform transition first if using multiple transitions (e.g., `transform 2s ease, opacity .5s ease-out`)\n\n$carousel-dark-indicator-active-bg: $black !default;\n$carousel-dark-caption-color: $black !default;\n$carousel-dark-control-icon-filter: invert(1) grayscale(100) !default;\n// scss-docs-end carousel-variables\n\n\n// Spinners\n\n// scss-docs-start spinner-variables\n$spinner-width: 2rem !default;\n$spinner-height: $spinner-width !default;\n$spinner-vertical-align: -.125em !default;\n$spinner-border-width: .25em !default;\n$spinner-animation-speed: .75s !default;\n\n$spinner-width-sm: 1rem !default;\n$spinner-height-sm: $spinner-width-sm !default;\n$spinner-border-width-sm: .2em !default;\n// scss-docs-end spinner-variables\n\n\n// Close\n\n// scss-docs-start close-variables\n$btn-close-width: 1em !default;\n$btn-close-height: $btn-close-width !default;\n$btn-close-padding-x: .25em !default;\n$btn-close-padding-y: $btn-close-padding-x !default;\n$btn-close-color: $black !default;\n$btn-close-bg: url(\"data:image/svg+xml,\") !default;\n$btn-close-focus-shadow: $input-btn-focus-box-shadow !default;\n$btn-close-opacity: .5 !default;\n$btn-close-hover-opacity: .75 !default;\n$btn-close-focus-opacity: 1 !default;\n$btn-close-disabled-opacity: .25 !default;\n$btn-close-white-filter: invert(1) grayscale(100%) brightness(200%) !default;\n// scss-docs-end close-variables\n\n\n// Offcanvas\n\n// scss-docs-start offcanvas-variables\n$offcanvas-padding-y: $modal-inner-padding !default;\n$offcanvas-padding-x: $modal-inner-padding !default;\n$offcanvas-horizontal-width: 400px !default;\n$offcanvas-vertical-height: 30vh !default;\n$offcanvas-transition-duration: .3s !default;\n$offcanvas-border-color: $modal-content-border-color !default;\n$offcanvas-border-width: $modal-content-border-width !default;\n$offcanvas-title-line-height: $modal-title-line-height !default;\n$offcanvas-bg-color: $modal-content-bg !default;\n$offcanvas-color: $modal-content-color !default;\n$offcanvas-box-shadow: $modal-content-box-shadow-xs !default;\n$offcanvas-backdrop-bg: $modal-backdrop-bg !default;\n$offcanvas-backdrop-opacity: $modal-backdrop-opacity !default;\n// scss-docs-end offcanvas-variables\n\n// Code\n\n$code-font-size: $small-font-size !default;\n$code-color: $pink !default;\n\n$kbd-padding-y: .2rem !default;\n$kbd-padding-x: .4rem !default;\n$kbd-font-size: $code-font-size !default;\n$kbd-color: $white !default;\n$kbd-bg: $gray-900 !default;\n\n$pre-color: null !default;\n","// Row\n//\n// Rows contain your columns.\n\n@if $enable-grid-classes {\n .row {\n @include make-row();\n\n > * {\n @include make-col-ready();\n }\n }\n}\n\n@if $enable-cssgrid {\n .grid {\n display: grid;\n grid-template-rows: repeat(var(--#{$variable-prefix}rows, 1), 1fr);\n grid-template-columns: repeat(var(--#{$variable-prefix}columns, #{$grid-columns}), 1fr);\n gap: var(--#{$variable-prefix}gap, #{$grid-gutter-width});\n\n @include make-cssgrid();\n }\n}\n\n\n// Columns\n//\n// Common styles for small and large grid columns\n\n@if $enable-grid-classes {\n @include make-grid-columns();\n}\n","// Grid system\n//\n// Generate semantic grid columns with these mixins.\n\n@mixin make-row($gutter: $grid-gutter-width) {\n --#{$variable-prefix}gutter-x: #{$gutter};\n --#{$variable-prefix}gutter-y: 0;\n display: flex;\n flex-wrap: wrap;\n // TODO: Revisit calc order after https://github.com/react-bootstrap/react-bootstrap/issues/6039 is fixed\n margin-top: calc(-1 * var(--#{$variable-prefix}gutter-y)); // stylelint-disable-line function-disallowed-list\n margin-right: calc(-.5 * var(--#{$variable-prefix}gutter-x)); // stylelint-disable-line function-disallowed-list\n margin-left: calc(-.5 * var(--#{$variable-prefix}gutter-x)); // stylelint-disable-line function-disallowed-list\n}\n\n@mixin make-col-ready($gutter: $grid-gutter-width) {\n // Add box sizing if only the grid is loaded\n box-sizing: if(variable-exists(include-column-box-sizing) and $include-column-box-sizing, border-box, null);\n // Prevent columns from becoming too narrow when at smaller grid tiers by\n // always setting `width: 100%;`. This works because we set the width\n // later on to override this initial width.\n flex-shrink: 0;\n width: 100%;\n max-width: 100%; // Prevent `.col-auto`, `.col` (& responsive variants) from breaking out the grid\n padding-right: calc(var(--#{$variable-prefix}gutter-x) * .5); // stylelint-disable-line function-disallowed-list\n padding-left: calc(var(--#{$variable-prefix}gutter-x) * .5); // stylelint-disable-line function-disallowed-list\n margin-top: var(--#{$variable-prefix}gutter-y);\n}\n\n@mixin make-col($size: false, $columns: $grid-columns) {\n @if $size {\n flex: 0 0 auto;\n width: percentage(divide($size, $columns));\n\n } @else {\n flex: 1 1 0;\n max-width: 100%;\n }\n}\n\n@mixin make-col-auto() {\n flex: 0 0 auto;\n width: auto;\n}\n\n@mixin make-col-offset($size, $columns: $grid-columns) {\n $num: divide($size, $columns);\n margin-left: if($num == 0, 0, percentage($num));\n}\n\n// Row columns\n//\n// Specify on a parent element(e.g., .row) to force immediate children into NN\n// numberof columns. Supports wrapping to new lines, but does not do a Masonry\n// style grid.\n@mixin row-cols($count) {\n > * {\n flex: 0 0 auto;\n width: divide(100%, $count);\n }\n}\n\n// Framework grid generation\n//\n// Used only by Bootstrap to generate the correct number of grid classes given\n// any value of `$grid-columns`.\n\n@mixin make-grid-columns($columns: $grid-columns, $gutter: $grid-gutter-width, $breakpoints: $grid-breakpoints) {\n @each $breakpoint in map-keys($breakpoints) {\n $infix: breakpoint-infix($breakpoint, $breakpoints);\n\n @include media-breakpoint-up($breakpoint, $breakpoints) {\n // Provide basic `.col-{bp}` classes for equal-width flexbox columns\n .col#{$infix} {\n flex: 1 0 0%; // Flexbugs #4: https://github.com/philipwalton/flexbugs#flexbug-4\n }\n\n .row-cols#{$infix}-auto > * {\n @include make-col-auto();\n }\n\n @if $grid-row-columns > 0 {\n @for $i from 1 through $grid-row-columns {\n .row-cols#{$infix}-#{$i} {\n @include row-cols($i);\n }\n }\n }\n\n .col#{$infix}-auto {\n @include make-col-auto();\n }\n\n @if $columns > 0 {\n @for $i from 1 through $columns {\n .col#{$infix}-#{$i} {\n @include make-col($i, $columns);\n }\n }\n\n // `$columns - 1` because offsetting by the width of an entire row isn't possible\n @for $i from 0 through ($columns - 1) {\n @if not ($infix == \"\" and $i == 0) { // Avoid emitting useless .offset-0\n .offset#{$infix}-#{$i} {\n @include make-col-offset($i, $columns);\n }\n }\n }\n }\n\n // Gutters\n //\n // Make use of `.g-*`, `.gx-*` or `.gy-*` utilities to change spacing between the columns.\n @each $key, $value in $gutters {\n .g#{$infix}-#{$key},\n .gx#{$infix}-#{$key} {\n --#{$variable-prefix}gutter-x: #{$value};\n }\n\n .g#{$infix}-#{$key},\n .gy#{$infix}-#{$key} {\n --#{$variable-prefix}gutter-y: #{$value};\n }\n }\n }\n }\n}\n\n@mixin make-cssgrid($columns: $grid-columns, $breakpoints: $grid-breakpoints) {\n @each $breakpoint in map-keys($breakpoints) {\n $infix: breakpoint-infix($breakpoint, $breakpoints);\n\n @include media-breakpoint-up($breakpoint, $breakpoints) {\n @if $columns > 0 {\n @for $i from 1 through $columns {\n .g-col#{$infix}-#{$i} {\n grid-column: auto / span $i;\n }\n }\n\n // Start with `1` because `0` is and invalid value.\n // Ends with `$columns - 1` because offsetting by the width of an entire row isn't possible.\n @for $i from 1 through ($columns - 1) {\n .g-start#{$infix}-#{$i} {\n grid-column-start: $i;\n }\n }\n }\n }\n }\n}\n","// Utility generator\n// Used to generate utilities & print utilities\n@mixin generate-utility($utility, $infix, $is-rfs-media-query: false) {\n $values: map-get($utility, values);\n\n // If the values are a list or string, convert it into a map\n @if type-of($values) == \"string\" or type-of(nth($values, 1)) != \"list\" {\n $values: zip($values, $values);\n }\n\n @each $key, $value in $values {\n $properties: map-get($utility, property);\n\n // Multiple properties are possible, for example with vertical or horizontal margins or paddings\n @if type-of($properties) == \"string\" {\n $properties: append((), $properties);\n }\n\n // Use custom class if present\n $property-class: if(map-has-key($utility, class), map-get($utility, class), nth($properties, 1));\n $property-class: if($property-class == null, \"\", $property-class);\n\n // State params to generate pseudo-classes\n $state: if(map-has-key($utility, state), map-get($utility, state), ());\n\n $infix: if($property-class == \"\" and str-slice($infix, 1, 1) == \"-\", str-slice($infix, 2), $infix);\n\n // Don't prefix if value key is null (eg. with shadow class)\n $property-class-modifier: if($key, if($property-class == \"\" and $infix == \"\", \"\", \"-\") + $key, \"\");\n\n @if map-get($utility, rfs) {\n // Inside the media query\n @if $is-rfs-media-query {\n $val: rfs-value($value);\n\n // Do not render anything if fluid and non fluid values are the same\n $value: if($val == rfs-fluid-value($value), null, $val);\n }\n @else {\n $value: rfs-fluid-value($value);\n }\n }\n\n $is-css-var: map-get($utility, css-var);\n $is-local-vars: map-get($utility, local-vars);\n $is-rtl: map-get($utility, rtl);\n\n @if $value != null {\n @if $is-rtl == false {\n /* rtl:begin:remove */\n }\n\n @if $is-css-var {\n .#{$property-class + $infix + $property-class-modifier} {\n --#{$variable-prefix}#{$property-class}: #{$value};\n }\n\n @each $pseudo in $state {\n .#{$property-class + $infix + $property-class-modifier}-#{$pseudo}:#{$pseudo} {\n --#{$variable-prefix}#{$property-class}: #{$value};\n }\n }\n } @else {\n .#{$property-class + $infix + $property-class-modifier} {\n @each $property in $properties {\n @if $is-local-vars {\n @each $local-var, $value in $is-local-vars {\n --#{$variable-prefix}#{$local-var}: #{$value};\n }\n }\n #{$property}: $value if($enable-important-utilities, !important, null);\n }\n }\n\n @each $pseudo in $state {\n .#{$property-class + $infix + $property-class-modifier}-#{$pseudo}:#{$pseudo} {\n @each $property in $properties {\n #{$property}: $value if($enable-important-utilities, !important, null);\n }\n }\n }\n }\n\n @if $is-rtl == false {\n /* rtl:end:remove */\n }\n }\n }\n}\n","// Loop over each breakpoint\n@each $breakpoint in map-keys($grid-breakpoints) {\n\n // Generate media query if needed\n @include media-breakpoint-up($breakpoint) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n // Loop over each utility property\n @each $key, $utility in $utilities {\n // The utility can be disabled with `false`, thus check if the utility is a map first\n // Only proceed if responsive media queries are enabled or if it's the base media query\n @if type-of($utility) == \"map\" and (map-get($utility, responsive) or $infix == \"\") {\n @include generate-utility($utility, $infix);\n }\n }\n }\n}\n\n// RFS rescaling\n@media (min-width: $rfs-mq-value) {\n @each $breakpoint in map-keys($grid-breakpoints) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n @if (map-get($grid-breakpoints, $breakpoint) < $rfs-breakpoint) {\n // Loop over each utility property\n @each $key, $utility in $utilities {\n // The utility can be disabled with `false`, thus check if the utility is a map first\n // Only proceed if responsive media queries are enabled or if it's the base media query\n @if type-of($utility) == \"map\" and map-get($utility, rfs) and (map-get($utility, responsive) or $infix == \"\") {\n @include generate-utility($utility, $infix, true);\n }\n }\n }\n }\n}\n\n\n// Print utilities\n@media print {\n @each $key, $utility in $utilities {\n // The utility can be disabled with `false`, thus check if the utility is a map first\n // Then check if the utility needs print styles\n @if type-of($utility) == \"map\" and map-get($utility, print) == true {\n @include generate-utility($utility, \"-print\");\n }\n }\n}\n"]} \ No newline at end of file diff --git a/samples/web-app-file-storage/src/static/bootstrap/css/bootstrap-grid.min.css b/samples/web-app-file-storage/src/static/bootstrap/css/bootstrap-grid.min.css new file mode 100644 index 0000000..16649a6 --- /dev/null +++ b/samples/web-app-file-storage/src/static/bootstrap/css/bootstrap-grid.min.css @@ -0,0 +1,7 @@ +/*! + * Bootstrap Grid v5.1.3 (https://getbootstrap.com/) + * Copyright 2011-2021 The Bootstrap Authors + * Copyright 2011-2021 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) + */:root{--bs-blue:#0d6efd;--bs-indigo:#6610f2;--bs-purple:#6f42c1;--bs-pink:#d63384;--bs-red:#dc3545;--bs-orange:#fd7e14;--bs-yellow:#ffc107;--bs-green:#198754;--bs-teal:#20c997;--bs-cyan:#0dcaf0;--bs-white:#fff;--bs-gray:#6c757d;--bs-gray-dark:#343a40;--bs-gray-100:#f8f9fa;--bs-gray-200:#e9ecef;--bs-gray-300:#dee2e6;--bs-gray-400:#ced4da;--bs-gray-500:#adb5bd;--bs-gray-600:#6c757d;--bs-gray-700:#495057;--bs-gray-800:#343a40;--bs-gray-900:#212529;--bs-primary:#0d6efd;--bs-secondary:#6c757d;--bs-success:#198754;--bs-info:#0dcaf0;--bs-warning:#ffc107;--bs-danger:#dc3545;--bs-light:#f8f9fa;--bs-dark:#212529;--bs-primary-rgb:13,110,253;--bs-secondary-rgb:108,117,125;--bs-success-rgb:25,135,84;--bs-info-rgb:13,202,240;--bs-warning-rgb:255,193,7;--bs-danger-rgb:220,53,69;--bs-light-rgb:248,249,250;--bs-dark-rgb:33,37,41;--bs-white-rgb:255,255,255;--bs-black-rgb:0,0,0;--bs-body-color-rgb:33,37,41;--bs-body-bg-rgb:255,255,255;--bs-font-sans-serif:system-ui,-apple-system,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans","Liberation Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--bs-font-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--bs-gradient:linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));--bs-body-font-family:var(--bs-font-sans-serif);--bs-body-font-size:1rem;--bs-body-font-weight:400;--bs-body-line-height:1.5;--bs-body-color:#212529;--bs-body-bg:#fff}.container,.container-fluid,.container-lg,.container-md,.container-sm,.container-xl,.container-xxl{width:100%;padding-right:var(--bs-gutter-x,.75rem);padding-left:var(--bs-gutter-x,.75rem);margin-right:auto;margin-left:auto}@media (min-width:576px){.container,.container-sm{max-width:540px}}@media (min-width:768px){.container,.container-md,.container-sm{max-width:720px}}@media (min-width:992px){.container,.container-lg,.container-md,.container-sm{max-width:960px}}@media (min-width:1200px){.container,.container-lg,.container-md,.container-sm,.container-xl{max-width:1140px}}@media (min-width:1400px){.container,.container-lg,.container-md,.container-sm,.container-xl,.container-xxl{max-width:1320px}}.row{--bs-gutter-x:1.5rem;--bs-gutter-y:0;display:flex;flex-wrap:wrap;margin-top:calc(-1 * var(--bs-gutter-y));margin-right:calc(-.5 * var(--bs-gutter-x));margin-left:calc(-.5 * var(--bs-gutter-x))}.row>*{box-sizing:border-box;flex-shrink:0;width:100%;max-width:100%;padding-right:calc(var(--bs-gutter-x) * .5);padding-left:calc(var(--bs-gutter-x) * .5);margin-top:var(--bs-gutter-y)}.col{flex:1 0 0%}.row-cols-auto>*{flex:0 0 auto;width:auto}.row-cols-1>*{flex:0 0 auto;width:100%}.row-cols-2>*{flex:0 0 auto;width:50%}.row-cols-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-4>*{flex:0 0 auto;width:25%}.row-cols-5>*{flex:0 0 auto;width:20%}.row-cols-6>*{flex:0 0 auto;width:16.6666666667%}.col-auto{flex:0 0 auto;width:auto}.col-1{flex:0 0 auto;width:8.33333333%}.col-2{flex:0 0 auto;width:16.66666667%}.col-3{flex:0 0 auto;width:25%}.col-4{flex:0 0 auto;width:33.33333333%}.col-5{flex:0 0 auto;width:41.66666667%}.col-6{flex:0 0 auto;width:50%}.col-7{flex:0 0 auto;width:58.33333333%}.col-8{flex:0 0 auto;width:66.66666667%}.col-9{flex:0 0 auto;width:75%}.col-10{flex:0 0 auto;width:83.33333333%}.col-11{flex:0 0 auto;width:91.66666667%}.col-12{flex:0 0 auto;width:100%}.offset-1{margin-left:8.33333333%}.offset-2{margin-left:16.66666667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.33333333%}.offset-5{margin-left:41.66666667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.33333333%}.offset-8{margin-left:66.66666667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.33333333%}.offset-11{margin-left:91.66666667%}.g-0,.gx-0{--bs-gutter-x:0}.g-0,.gy-0{--bs-gutter-y:0}.g-1,.gx-1{--bs-gutter-x:0.25rem}.g-1,.gy-1{--bs-gutter-y:0.25rem}.g-2,.gx-2{--bs-gutter-x:0.5rem}.g-2,.gy-2{--bs-gutter-y:0.5rem}.g-3,.gx-3{--bs-gutter-x:1rem}.g-3,.gy-3{--bs-gutter-y:1rem}.g-4,.gx-4{--bs-gutter-x:1.5rem}.g-4,.gy-4{--bs-gutter-y:1.5rem}.g-5,.gx-5{--bs-gutter-x:3rem}.g-5,.gy-5{--bs-gutter-y:3rem}@media (min-width:576px){.col-sm{flex:1 0 0%}.row-cols-sm-auto>*{flex:0 0 auto;width:auto}.row-cols-sm-1>*{flex:0 0 auto;width:100%}.row-cols-sm-2>*{flex:0 0 auto;width:50%}.row-cols-sm-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-sm-4>*{flex:0 0 auto;width:25%}.row-cols-sm-5>*{flex:0 0 auto;width:20%}.row-cols-sm-6>*{flex:0 0 auto;width:16.6666666667%}.col-sm-auto{flex:0 0 auto;width:auto}.col-sm-1{flex:0 0 auto;width:8.33333333%}.col-sm-2{flex:0 0 auto;width:16.66666667%}.col-sm-3{flex:0 0 auto;width:25%}.col-sm-4{flex:0 0 auto;width:33.33333333%}.col-sm-5{flex:0 0 auto;width:41.66666667%}.col-sm-6{flex:0 0 auto;width:50%}.col-sm-7{flex:0 0 auto;width:58.33333333%}.col-sm-8{flex:0 0 auto;width:66.66666667%}.col-sm-9{flex:0 0 auto;width:75%}.col-sm-10{flex:0 0 auto;width:83.33333333%}.col-sm-11{flex:0 0 auto;width:91.66666667%}.col-sm-12{flex:0 0 auto;width:100%}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.33333333%}.offset-sm-2{margin-left:16.66666667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.33333333%}.offset-sm-5{margin-left:41.66666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.33333333%}.offset-sm-8{margin-left:66.66666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.33333333%}.offset-sm-11{margin-left:91.66666667%}.g-sm-0,.gx-sm-0{--bs-gutter-x:0}.g-sm-0,.gy-sm-0{--bs-gutter-y:0}.g-sm-1,.gx-sm-1{--bs-gutter-x:0.25rem}.g-sm-1,.gy-sm-1{--bs-gutter-y:0.25rem}.g-sm-2,.gx-sm-2{--bs-gutter-x:0.5rem}.g-sm-2,.gy-sm-2{--bs-gutter-y:0.5rem}.g-sm-3,.gx-sm-3{--bs-gutter-x:1rem}.g-sm-3,.gy-sm-3{--bs-gutter-y:1rem}.g-sm-4,.gx-sm-4{--bs-gutter-x:1.5rem}.g-sm-4,.gy-sm-4{--bs-gutter-y:1.5rem}.g-sm-5,.gx-sm-5{--bs-gutter-x:3rem}.g-sm-5,.gy-sm-5{--bs-gutter-y:3rem}}@media (min-width:768px){.col-md{flex:1 0 0%}.row-cols-md-auto>*{flex:0 0 auto;width:auto}.row-cols-md-1>*{flex:0 0 auto;width:100%}.row-cols-md-2>*{flex:0 0 auto;width:50%}.row-cols-md-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-md-4>*{flex:0 0 auto;width:25%}.row-cols-md-5>*{flex:0 0 auto;width:20%}.row-cols-md-6>*{flex:0 0 auto;width:16.6666666667%}.col-md-auto{flex:0 0 auto;width:auto}.col-md-1{flex:0 0 auto;width:8.33333333%}.col-md-2{flex:0 0 auto;width:16.66666667%}.col-md-3{flex:0 0 auto;width:25%}.col-md-4{flex:0 0 auto;width:33.33333333%}.col-md-5{flex:0 0 auto;width:41.66666667%}.col-md-6{flex:0 0 auto;width:50%}.col-md-7{flex:0 0 auto;width:58.33333333%}.col-md-8{flex:0 0 auto;width:66.66666667%}.col-md-9{flex:0 0 auto;width:75%}.col-md-10{flex:0 0 auto;width:83.33333333%}.col-md-11{flex:0 0 auto;width:91.66666667%}.col-md-12{flex:0 0 auto;width:100%}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.33333333%}.offset-md-2{margin-left:16.66666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.33333333%}.offset-md-5{margin-left:41.66666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.33333333%}.offset-md-8{margin-left:66.66666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.33333333%}.offset-md-11{margin-left:91.66666667%}.g-md-0,.gx-md-0{--bs-gutter-x:0}.g-md-0,.gy-md-0{--bs-gutter-y:0}.g-md-1,.gx-md-1{--bs-gutter-x:0.25rem}.g-md-1,.gy-md-1{--bs-gutter-y:0.25rem}.g-md-2,.gx-md-2{--bs-gutter-x:0.5rem}.g-md-2,.gy-md-2{--bs-gutter-y:0.5rem}.g-md-3,.gx-md-3{--bs-gutter-x:1rem}.g-md-3,.gy-md-3{--bs-gutter-y:1rem}.g-md-4,.gx-md-4{--bs-gutter-x:1.5rem}.g-md-4,.gy-md-4{--bs-gutter-y:1.5rem}.g-md-5,.gx-md-5{--bs-gutter-x:3rem}.g-md-5,.gy-md-5{--bs-gutter-y:3rem}}@media (min-width:992px){.col-lg{flex:1 0 0%}.row-cols-lg-auto>*{flex:0 0 auto;width:auto}.row-cols-lg-1>*{flex:0 0 auto;width:100%}.row-cols-lg-2>*{flex:0 0 auto;width:50%}.row-cols-lg-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-lg-4>*{flex:0 0 auto;width:25%}.row-cols-lg-5>*{flex:0 0 auto;width:20%}.row-cols-lg-6>*{flex:0 0 auto;width:16.6666666667%}.col-lg-auto{flex:0 0 auto;width:auto}.col-lg-1{flex:0 0 auto;width:8.33333333%}.col-lg-2{flex:0 0 auto;width:16.66666667%}.col-lg-3{flex:0 0 auto;width:25%}.col-lg-4{flex:0 0 auto;width:33.33333333%}.col-lg-5{flex:0 0 auto;width:41.66666667%}.col-lg-6{flex:0 0 auto;width:50%}.col-lg-7{flex:0 0 auto;width:58.33333333%}.col-lg-8{flex:0 0 auto;width:66.66666667%}.col-lg-9{flex:0 0 auto;width:75%}.col-lg-10{flex:0 0 auto;width:83.33333333%}.col-lg-11{flex:0 0 auto;width:91.66666667%}.col-lg-12{flex:0 0 auto;width:100%}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.33333333%}.offset-lg-2{margin-left:16.66666667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.33333333%}.offset-lg-5{margin-left:41.66666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.33333333%}.offset-lg-8{margin-left:66.66666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.33333333%}.offset-lg-11{margin-left:91.66666667%}.g-lg-0,.gx-lg-0{--bs-gutter-x:0}.g-lg-0,.gy-lg-0{--bs-gutter-y:0}.g-lg-1,.gx-lg-1{--bs-gutter-x:0.25rem}.g-lg-1,.gy-lg-1{--bs-gutter-y:0.25rem}.g-lg-2,.gx-lg-2{--bs-gutter-x:0.5rem}.g-lg-2,.gy-lg-2{--bs-gutter-y:0.5rem}.g-lg-3,.gx-lg-3{--bs-gutter-x:1rem}.g-lg-3,.gy-lg-3{--bs-gutter-y:1rem}.g-lg-4,.gx-lg-4{--bs-gutter-x:1.5rem}.g-lg-4,.gy-lg-4{--bs-gutter-y:1.5rem}.g-lg-5,.gx-lg-5{--bs-gutter-x:3rem}.g-lg-5,.gy-lg-5{--bs-gutter-y:3rem}}@media (min-width:1200px){.col-xl{flex:1 0 0%}.row-cols-xl-auto>*{flex:0 0 auto;width:auto}.row-cols-xl-1>*{flex:0 0 auto;width:100%}.row-cols-xl-2>*{flex:0 0 auto;width:50%}.row-cols-xl-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-xl-4>*{flex:0 0 auto;width:25%}.row-cols-xl-5>*{flex:0 0 auto;width:20%}.row-cols-xl-6>*{flex:0 0 auto;width:16.6666666667%}.col-xl-auto{flex:0 0 auto;width:auto}.col-xl-1{flex:0 0 auto;width:8.33333333%}.col-xl-2{flex:0 0 auto;width:16.66666667%}.col-xl-3{flex:0 0 auto;width:25%}.col-xl-4{flex:0 0 auto;width:33.33333333%}.col-xl-5{flex:0 0 auto;width:41.66666667%}.col-xl-6{flex:0 0 auto;width:50%}.col-xl-7{flex:0 0 auto;width:58.33333333%}.col-xl-8{flex:0 0 auto;width:66.66666667%}.col-xl-9{flex:0 0 auto;width:75%}.col-xl-10{flex:0 0 auto;width:83.33333333%}.col-xl-11{flex:0 0 auto;width:91.66666667%}.col-xl-12{flex:0 0 auto;width:100%}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.33333333%}.offset-xl-2{margin-left:16.66666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.33333333%}.offset-xl-5{margin-left:41.66666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.33333333%}.offset-xl-8{margin-left:66.66666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.33333333%}.offset-xl-11{margin-left:91.66666667%}.g-xl-0,.gx-xl-0{--bs-gutter-x:0}.g-xl-0,.gy-xl-0{--bs-gutter-y:0}.g-xl-1,.gx-xl-1{--bs-gutter-x:0.25rem}.g-xl-1,.gy-xl-1{--bs-gutter-y:0.25rem}.g-xl-2,.gx-xl-2{--bs-gutter-x:0.5rem}.g-xl-2,.gy-xl-2{--bs-gutter-y:0.5rem}.g-xl-3,.gx-xl-3{--bs-gutter-x:1rem}.g-xl-3,.gy-xl-3{--bs-gutter-y:1rem}.g-xl-4,.gx-xl-4{--bs-gutter-x:1.5rem}.g-xl-4,.gy-xl-4{--bs-gutter-y:1.5rem}.g-xl-5,.gx-xl-5{--bs-gutter-x:3rem}.g-xl-5,.gy-xl-5{--bs-gutter-y:3rem}}@media (min-width:1400px){.col-xxl{flex:1 0 0%}.row-cols-xxl-auto>*{flex:0 0 auto;width:auto}.row-cols-xxl-1>*{flex:0 0 auto;width:100%}.row-cols-xxl-2>*{flex:0 0 auto;width:50%}.row-cols-xxl-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-xxl-4>*{flex:0 0 auto;width:25%}.row-cols-xxl-5>*{flex:0 0 auto;width:20%}.row-cols-xxl-6>*{flex:0 0 auto;width:16.6666666667%}.col-xxl-auto{flex:0 0 auto;width:auto}.col-xxl-1{flex:0 0 auto;width:8.33333333%}.col-xxl-2{flex:0 0 auto;width:16.66666667%}.col-xxl-3{flex:0 0 auto;width:25%}.col-xxl-4{flex:0 0 auto;width:33.33333333%}.col-xxl-5{flex:0 0 auto;width:41.66666667%}.col-xxl-6{flex:0 0 auto;width:50%}.col-xxl-7{flex:0 0 auto;width:58.33333333%}.col-xxl-8{flex:0 0 auto;width:66.66666667%}.col-xxl-9{flex:0 0 auto;width:75%}.col-xxl-10{flex:0 0 auto;width:83.33333333%}.col-xxl-11{flex:0 0 auto;width:91.66666667%}.col-xxl-12{flex:0 0 auto;width:100%}.offset-xxl-0{margin-left:0}.offset-xxl-1{margin-left:8.33333333%}.offset-xxl-2{margin-left:16.66666667%}.offset-xxl-3{margin-left:25%}.offset-xxl-4{margin-left:33.33333333%}.offset-xxl-5{margin-left:41.66666667%}.offset-xxl-6{margin-left:50%}.offset-xxl-7{margin-left:58.33333333%}.offset-xxl-8{margin-left:66.66666667%}.offset-xxl-9{margin-left:75%}.offset-xxl-10{margin-left:83.33333333%}.offset-xxl-11{margin-left:91.66666667%}.g-xxl-0,.gx-xxl-0{--bs-gutter-x:0}.g-xxl-0,.gy-xxl-0{--bs-gutter-y:0}.g-xxl-1,.gx-xxl-1{--bs-gutter-x:0.25rem}.g-xxl-1,.gy-xxl-1{--bs-gutter-y:0.25rem}.g-xxl-2,.gx-xxl-2{--bs-gutter-x:0.5rem}.g-xxl-2,.gy-xxl-2{--bs-gutter-y:0.5rem}.g-xxl-3,.gx-xxl-3{--bs-gutter-x:1rem}.g-xxl-3,.gy-xxl-3{--bs-gutter-y:1rem}.g-xxl-4,.gx-xxl-4{--bs-gutter-x:1.5rem}.g-xxl-4,.gy-xxl-4{--bs-gutter-y:1.5rem}.g-xxl-5,.gx-xxl-5{--bs-gutter-x:3rem}.g-xxl-5,.gy-xxl-5{--bs-gutter-y:3rem}}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.d-block{display:block!important}.d-grid{display:grid!important}.d-table{display:table!important}.d-table-row{display:table-row!important}.d-table-cell{display:table-cell!important}.d-flex{display:flex!important}.d-inline-flex{display:inline-flex!important}.d-none{display:none!important}.flex-fill{flex:1 1 auto!important}.flex-row{flex-direction:row!important}.flex-column{flex-direction:column!important}.flex-row-reverse{flex-direction:row-reverse!important}.flex-column-reverse{flex-direction:column-reverse!important}.flex-grow-0{flex-grow:0!important}.flex-grow-1{flex-grow:1!important}.flex-shrink-0{flex-shrink:0!important}.flex-shrink-1{flex-shrink:1!important}.flex-wrap{flex-wrap:wrap!important}.flex-nowrap{flex-wrap:nowrap!important}.flex-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-start{justify-content:flex-start!important}.justify-content-end{justify-content:flex-end!important}.justify-content-center{justify-content:center!important}.justify-content-between{justify-content:space-between!important}.justify-content-around{justify-content:space-around!important}.justify-content-evenly{justify-content:space-evenly!important}.align-items-start{align-items:flex-start!important}.align-items-end{align-items:flex-end!important}.align-items-center{align-items:center!important}.align-items-baseline{align-items:baseline!important}.align-items-stretch{align-items:stretch!important}.align-content-start{align-content:flex-start!important}.align-content-end{align-content:flex-end!important}.align-content-center{align-content:center!important}.align-content-between{align-content:space-between!important}.align-content-around{align-content:space-around!important}.align-content-stretch{align-content:stretch!important}.align-self-auto{align-self:auto!important}.align-self-start{align-self:flex-start!important}.align-self-end{align-self:flex-end!important}.align-self-center{align-self:center!important}.align-self-baseline{align-self:baseline!important}.align-self-stretch{align-self:stretch!important}.order-first{order:-1!important}.order-0{order:0!important}.order-1{order:1!important}.order-2{order:2!important}.order-3{order:3!important}.order-4{order:4!important}.order-5{order:5!important}.order-last{order:6!important}.m-0{margin:0!important}.m-1{margin:.25rem!important}.m-2{margin:.5rem!important}.m-3{margin:1rem!important}.m-4{margin:1.5rem!important}.m-5{margin:3rem!important}.m-auto{margin:auto!important}.mx-0{margin-right:0!important;margin-left:0!important}.mx-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-3{margin-right:1rem!important;margin-left:1rem!important}.mx-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-5{margin-right:3rem!important;margin-left:3rem!important}.mx-auto{margin-right:auto!important;margin-left:auto!important}.my-0{margin-top:0!important;margin-bottom:0!important}.my-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-0{margin-top:0!important}.mt-1{margin-top:.25rem!important}.mt-2{margin-top:.5rem!important}.mt-3{margin-top:1rem!important}.mt-4{margin-top:1.5rem!important}.mt-5{margin-top:3rem!important}.mt-auto{margin-top:auto!important}.me-0{margin-right:0!important}.me-1{margin-right:.25rem!important}.me-2{margin-right:.5rem!important}.me-3{margin-right:1rem!important}.me-4{margin-right:1.5rem!important}.me-5{margin-right:3rem!important}.me-auto{margin-right:auto!important}.mb-0{margin-bottom:0!important}.mb-1{margin-bottom:.25rem!important}.mb-2{margin-bottom:.5rem!important}.mb-3{margin-bottom:1rem!important}.mb-4{margin-bottom:1.5rem!important}.mb-5{margin-bottom:3rem!important}.mb-auto{margin-bottom:auto!important}.ms-0{margin-left:0!important}.ms-1{margin-left:.25rem!important}.ms-2{margin-left:.5rem!important}.ms-3{margin-left:1rem!important}.ms-4{margin-left:1.5rem!important}.ms-5{margin-left:3rem!important}.ms-auto{margin-left:auto!important}.p-0{padding:0!important}.p-1{padding:.25rem!important}.p-2{padding:.5rem!important}.p-3{padding:1rem!important}.p-4{padding:1.5rem!important}.p-5{padding:3rem!important}.px-0{padding-right:0!important;padding-left:0!important}.px-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-3{padding-right:1rem!important;padding-left:1rem!important}.px-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-5{padding-right:3rem!important;padding-left:3rem!important}.py-0{padding-top:0!important;padding-bottom:0!important}.py-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-0{padding-top:0!important}.pt-1{padding-top:.25rem!important}.pt-2{padding-top:.5rem!important}.pt-3{padding-top:1rem!important}.pt-4{padding-top:1.5rem!important}.pt-5{padding-top:3rem!important}.pe-0{padding-right:0!important}.pe-1{padding-right:.25rem!important}.pe-2{padding-right:.5rem!important}.pe-3{padding-right:1rem!important}.pe-4{padding-right:1.5rem!important}.pe-5{padding-right:3rem!important}.pb-0{padding-bottom:0!important}.pb-1{padding-bottom:.25rem!important}.pb-2{padding-bottom:.5rem!important}.pb-3{padding-bottom:1rem!important}.pb-4{padding-bottom:1.5rem!important}.pb-5{padding-bottom:3rem!important}.ps-0{padding-left:0!important}.ps-1{padding-left:.25rem!important}.ps-2{padding-left:.5rem!important}.ps-3{padding-left:1rem!important}.ps-4{padding-left:1.5rem!important}.ps-5{padding-left:3rem!important}@media (min-width:576px){.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!important}.d-sm-grid{display:grid!important}.d-sm-table{display:table!important}.d-sm-table-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:flex!important}.d-sm-inline-flex{display:inline-flex!important}.d-sm-none{display:none!important}.flex-sm-fill{flex:1 1 auto!important}.flex-sm-row{flex-direction:row!important}.flex-sm-column{flex-direction:column!important}.flex-sm-row-reverse{flex-direction:row-reverse!important}.flex-sm-column-reverse{flex-direction:column-reverse!important}.flex-sm-grow-0{flex-grow:0!important}.flex-sm-grow-1{flex-grow:1!important}.flex-sm-shrink-0{flex-shrink:0!important}.flex-sm-shrink-1{flex-shrink:1!important}.flex-sm-wrap{flex-wrap:wrap!important}.flex-sm-nowrap{flex-wrap:nowrap!important}.flex-sm-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-sm-start{justify-content:flex-start!important}.justify-content-sm-end{justify-content:flex-end!important}.justify-content-sm-center{justify-content:center!important}.justify-content-sm-between{justify-content:space-between!important}.justify-content-sm-around{justify-content:space-around!important}.justify-content-sm-evenly{justify-content:space-evenly!important}.align-items-sm-start{align-items:flex-start!important}.align-items-sm-end{align-items:flex-end!important}.align-items-sm-center{align-items:center!important}.align-items-sm-baseline{align-items:baseline!important}.align-items-sm-stretch{align-items:stretch!important}.align-content-sm-start{align-content:flex-start!important}.align-content-sm-end{align-content:flex-end!important}.align-content-sm-center{align-content:center!important}.align-content-sm-between{align-content:space-between!important}.align-content-sm-around{align-content:space-around!important}.align-content-sm-stretch{align-content:stretch!important}.align-self-sm-auto{align-self:auto!important}.align-self-sm-start{align-self:flex-start!important}.align-self-sm-end{align-self:flex-end!important}.align-self-sm-center{align-self:center!important}.align-self-sm-baseline{align-self:baseline!important}.align-self-sm-stretch{align-self:stretch!important}.order-sm-first{order:-1!important}.order-sm-0{order:0!important}.order-sm-1{order:1!important}.order-sm-2{order:2!important}.order-sm-3{order:3!important}.order-sm-4{order:4!important}.order-sm-5{order:5!important}.order-sm-last{order:6!important}.m-sm-0{margin:0!important}.m-sm-1{margin:.25rem!important}.m-sm-2{margin:.5rem!important}.m-sm-3{margin:1rem!important}.m-sm-4{margin:1.5rem!important}.m-sm-5{margin:3rem!important}.m-sm-auto{margin:auto!important}.mx-sm-0{margin-right:0!important;margin-left:0!important}.mx-sm-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-sm-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-sm-3{margin-right:1rem!important;margin-left:1rem!important}.mx-sm-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-sm-5{margin-right:3rem!important;margin-left:3rem!important}.mx-sm-auto{margin-right:auto!important;margin-left:auto!important}.my-sm-0{margin-top:0!important;margin-bottom:0!important}.my-sm-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-sm-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-sm-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-sm-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-sm-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-sm-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-sm-0{margin-top:0!important}.mt-sm-1{margin-top:.25rem!important}.mt-sm-2{margin-top:.5rem!important}.mt-sm-3{margin-top:1rem!important}.mt-sm-4{margin-top:1.5rem!important}.mt-sm-5{margin-top:3rem!important}.mt-sm-auto{margin-top:auto!important}.me-sm-0{margin-right:0!important}.me-sm-1{margin-right:.25rem!important}.me-sm-2{margin-right:.5rem!important}.me-sm-3{margin-right:1rem!important}.me-sm-4{margin-right:1.5rem!important}.me-sm-5{margin-right:3rem!important}.me-sm-auto{margin-right:auto!important}.mb-sm-0{margin-bottom:0!important}.mb-sm-1{margin-bottom:.25rem!important}.mb-sm-2{margin-bottom:.5rem!important}.mb-sm-3{margin-bottom:1rem!important}.mb-sm-4{margin-bottom:1.5rem!important}.mb-sm-5{margin-bottom:3rem!important}.mb-sm-auto{margin-bottom:auto!important}.ms-sm-0{margin-left:0!important}.ms-sm-1{margin-left:.25rem!important}.ms-sm-2{margin-left:.5rem!important}.ms-sm-3{margin-left:1rem!important}.ms-sm-4{margin-left:1.5rem!important}.ms-sm-5{margin-left:3rem!important}.ms-sm-auto{margin-left:auto!important}.p-sm-0{padding:0!important}.p-sm-1{padding:.25rem!important}.p-sm-2{padding:.5rem!important}.p-sm-3{padding:1rem!important}.p-sm-4{padding:1.5rem!important}.p-sm-5{padding:3rem!important}.px-sm-0{padding-right:0!important;padding-left:0!important}.px-sm-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-sm-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-sm-3{padding-right:1rem!important;padding-left:1rem!important}.px-sm-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-sm-5{padding-right:3rem!important;padding-left:3rem!important}.py-sm-0{padding-top:0!important;padding-bottom:0!important}.py-sm-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-sm-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-sm-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-sm-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-sm-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-sm-0{padding-top:0!important}.pt-sm-1{padding-top:.25rem!important}.pt-sm-2{padding-top:.5rem!important}.pt-sm-3{padding-top:1rem!important}.pt-sm-4{padding-top:1.5rem!important}.pt-sm-5{padding-top:3rem!important}.pe-sm-0{padding-right:0!important}.pe-sm-1{padding-right:.25rem!important}.pe-sm-2{padding-right:.5rem!important}.pe-sm-3{padding-right:1rem!important}.pe-sm-4{padding-right:1.5rem!important}.pe-sm-5{padding-right:3rem!important}.pb-sm-0{padding-bottom:0!important}.pb-sm-1{padding-bottom:.25rem!important}.pb-sm-2{padding-bottom:.5rem!important}.pb-sm-3{padding-bottom:1rem!important}.pb-sm-4{padding-bottom:1.5rem!important}.pb-sm-5{padding-bottom:3rem!important}.ps-sm-0{padding-left:0!important}.ps-sm-1{padding-left:.25rem!important}.ps-sm-2{padding-left:.5rem!important}.ps-sm-3{padding-left:1rem!important}.ps-sm-4{padding-left:1.5rem!important}.ps-sm-5{padding-left:3rem!important}}@media (min-width:768px){.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!important}.d-md-grid{display:grid!important}.d-md-table{display:table!important}.d-md-table-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:flex!important}.d-md-inline-flex{display:inline-flex!important}.d-md-none{display:none!important}.flex-md-fill{flex:1 1 auto!important}.flex-md-row{flex-direction:row!important}.flex-md-column{flex-direction:column!important}.flex-md-row-reverse{flex-direction:row-reverse!important}.flex-md-column-reverse{flex-direction:column-reverse!important}.flex-md-grow-0{flex-grow:0!important}.flex-md-grow-1{flex-grow:1!important}.flex-md-shrink-0{flex-shrink:0!important}.flex-md-shrink-1{flex-shrink:1!important}.flex-md-wrap{flex-wrap:wrap!important}.flex-md-nowrap{flex-wrap:nowrap!important}.flex-md-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-md-start{justify-content:flex-start!important}.justify-content-md-end{justify-content:flex-end!important}.justify-content-md-center{justify-content:center!important}.justify-content-md-between{justify-content:space-between!important}.justify-content-md-around{justify-content:space-around!important}.justify-content-md-evenly{justify-content:space-evenly!important}.align-items-md-start{align-items:flex-start!important}.align-items-md-end{align-items:flex-end!important}.align-items-md-center{align-items:center!important}.align-items-md-baseline{align-items:baseline!important}.align-items-md-stretch{align-items:stretch!important}.align-content-md-start{align-content:flex-start!important}.align-content-md-end{align-content:flex-end!important}.align-content-md-center{align-content:center!important}.align-content-md-between{align-content:space-between!important}.align-content-md-around{align-content:space-around!important}.align-content-md-stretch{align-content:stretch!important}.align-self-md-auto{align-self:auto!important}.align-self-md-start{align-self:flex-start!important}.align-self-md-end{align-self:flex-end!important}.align-self-md-center{align-self:center!important}.align-self-md-baseline{align-self:baseline!important}.align-self-md-stretch{align-self:stretch!important}.order-md-first{order:-1!important}.order-md-0{order:0!important}.order-md-1{order:1!important}.order-md-2{order:2!important}.order-md-3{order:3!important}.order-md-4{order:4!important}.order-md-5{order:5!important}.order-md-last{order:6!important}.m-md-0{margin:0!important}.m-md-1{margin:.25rem!important}.m-md-2{margin:.5rem!important}.m-md-3{margin:1rem!important}.m-md-4{margin:1.5rem!important}.m-md-5{margin:3rem!important}.m-md-auto{margin:auto!important}.mx-md-0{margin-right:0!important;margin-left:0!important}.mx-md-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-md-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-md-3{margin-right:1rem!important;margin-left:1rem!important}.mx-md-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-md-5{margin-right:3rem!important;margin-left:3rem!important}.mx-md-auto{margin-right:auto!important;margin-left:auto!important}.my-md-0{margin-top:0!important;margin-bottom:0!important}.my-md-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-md-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-md-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-md-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-md-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-md-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-md-0{margin-top:0!important}.mt-md-1{margin-top:.25rem!important}.mt-md-2{margin-top:.5rem!important}.mt-md-3{margin-top:1rem!important}.mt-md-4{margin-top:1.5rem!important}.mt-md-5{margin-top:3rem!important}.mt-md-auto{margin-top:auto!important}.me-md-0{margin-right:0!important}.me-md-1{margin-right:.25rem!important}.me-md-2{margin-right:.5rem!important}.me-md-3{margin-right:1rem!important}.me-md-4{margin-right:1.5rem!important}.me-md-5{margin-right:3rem!important}.me-md-auto{margin-right:auto!important}.mb-md-0{margin-bottom:0!important}.mb-md-1{margin-bottom:.25rem!important}.mb-md-2{margin-bottom:.5rem!important}.mb-md-3{margin-bottom:1rem!important}.mb-md-4{margin-bottom:1.5rem!important}.mb-md-5{margin-bottom:3rem!important}.mb-md-auto{margin-bottom:auto!important}.ms-md-0{margin-left:0!important}.ms-md-1{margin-left:.25rem!important}.ms-md-2{margin-left:.5rem!important}.ms-md-3{margin-left:1rem!important}.ms-md-4{margin-left:1.5rem!important}.ms-md-5{margin-left:3rem!important}.ms-md-auto{margin-left:auto!important}.p-md-0{padding:0!important}.p-md-1{padding:.25rem!important}.p-md-2{padding:.5rem!important}.p-md-3{padding:1rem!important}.p-md-4{padding:1.5rem!important}.p-md-5{padding:3rem!important}.px-md-0{padding-right:0!important;padding-left:0!important}.px-md-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-md-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-md-3{padding-right:1rem!important;padding-left:1rem!important}.px-md-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-md-5{padding-right:3rem!important;padding-left:3rem!important}.py-md-0{padding-top:0!important;padding-bottom:0!important}.py-md-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-md-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-md-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-md-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-md-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-md-0{padding-top:0!important}.pt-md-1{padding-top:.25rem!important}.pt-md-2{padding-top:.5rem!important}.pt-md-3{padding-top:1rem!important}.pt-md-4{padding-top:1.5rem!important}.pt-md-5{padding-top:3rem!important}.pe-md-0{padding-right:0!important}.pe-md-1{padding-right:.25rem!important}.pe-md-2{padding-right:.5rem!important}.pe-md-3{padding-right:1rem!important}.pe-md-4{padding-right:1.5rem!important}.pe-md-5{padding-right:3rem!important}.pb-md-0{padding-bottom:0!important}.pb-md-1{padding-bottom:.25rem!important}.pb-md-2{padding-bottom:.5rem!important}.pb-md-3{padding-bottom:1rem!important}.pb-md-4{padding-bottom:1.5rem!important}.pb-md-5{padding-bottom:3rem!important}.ps-md-0{padding-left:0!important}.ps-md-1{padding-left:.25rem!important}.ps-md-2{padding-left:.5rem!important}.ps-md-3{padding-left:1rem!important}.ps-md-4{padding-left:1.5rem!important}.ps-md-5{padding-left:3rem!important}}@media (min-width:992px){.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!important}.d-lg-grid{display:grid!important}.d-lg-table{display:table!important}.d-lg-table-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:flex!important}.d-lg-inline-flex{display:inline-flex!important}.d-lg-none{display:none!important}.flex-lg-fill{flex:1 1 auto!important}.flex-lg-row{flex-direction:row!important}.flex-lg-column{flex-direction:column!important}.flex-lg-row-reverse{flex-direction:row-reverse!important}.flex-lg-column-reverse{flex-direction:column-reverse!important}.flex-lg-grow-0{flex-grow:0!important}.flex-lg-grow-1{flex-grow:1!important}.flex-lg-shrink-0{flex-shrink:0!important}.flex-lg-shrink-1{flex-shrink:1!important}.flex-lg-wrap{flex-wrap:wrap!important}.flex-lg-nowrap{flex-wrap:nowrap!important}.flex-lg-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-lg-start{justify-content:flex-start!important}.justify-content-lg-end{justify-content:flex-end!important}.justify-content-lg-center{justify-content:center!important}.justify-content-lg-between{justify-content:space-between!important}.justify-content-lg-around{justify-content:space-around!important}.justify-content-lg-evenly{justify-content:space-evenly!important}.align-items-lg-start{align-items:flex-start!important}.align-items-lg-end{align-items:flex-end!important}.align-items-lg-center{align-items:center!important}.align-items-lg-baseline{align-items:baseline!important}.align-items-lg-stretch{align-items:stretch!important}.align-content-lg-start{align-content:flex-start!important}.align-content-lg-end{align-content:flex-end!important}.align-content-lg-center{align-content:center!important}.align-content-lg-between{align-content:space-between!important}.align-content-lg-around{align-content:space-around!important}.align-content-lg-stretch{align-content:stretch!important}.align-self-lg-auto{align-self:auto!important}.align-self-lg-start{align-self:flex-start!important}.align-self-lg-end{align-self:flex-end!important}.align-self-lg-center{align-self:center!important}.align-self-lg-baseline{align-self:baseline!important}.align-self-lg-stretch{align-self:stretch!important}.order-lg-first{order:-1!important}.order-lg-0{order:0!important}.order-lg-1{order:1!important}.order-lg-2{order:2!important}.order-lg-3{order:3!important}.order-lg-4{order:4!important}.order-lg-5{order:5!important}.order-lg-last{order:6!important}.m-lg-0{margin:0!important}.m-lg-1{margin:.25rem!important}.m-lg-2{margin:.5rem!important}.m-lg-3{margin:1rem!important}.m-lg-4{margin:1.5rem!important}.m-lg-5{margin:3rem!important}.m-lg-auto{margin:auto!important}.mx-lg-0{margin-right:0!important;margin-left:0!important}.mx-lg-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-lg-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-lg-3{margin-right:1rem!important;margin-left:1rem!important}.mx-lg-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-lg-5{margin-right:3rem!important;margin-left:3rem!important}.mx-lg-auto{margin-right:auto!important;margin-left:auto!important}.my-lg-0{margin-top:0!important;margin-bottom:0!important}.my-lg-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-lg-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-lg-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-lg-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-lg-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-lg-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-lg-0{margin-top:0!important}.mt-lg-1{margin-top:.25rem!important}.mt-lg-2{margin-top:.5rem!important}.mt-lg-3{margin-top:1rem!important}.mt-lg-4{margin-top:1.5rem!important}.mt-lg-5{margin-top:3rem!important}.mt-lg-auto{margin-top:auto!important}.me-lg-0{margin-right:0!important}.me-lg-1{margin-right:.25rem!important}.me-lg-2{margin-right:.5rem!important}.me-lg-3{margin-right:1rem!important}.me-lg-4{margin-right:1.5rem!important}.me-lg-5{margin-right:3rem!important}.me-lg-auto{margin-right:auto!important}.mb-lg-0{margin-bottom:0!important}.mb-lg-1{margin-bottom:.25rem!important}.mb-lg-2{margin-bottom:.5rem!important}.mb-lg-3{margin-bottom:1rem!important}.mb-lg-4{margin-bottom:1.5rem!important}.mb-lg-5{margin-bottom:3rem!important}.mb-lg-auto{margin-bottom:auto!important}.ms-lg-0{margin-left:0!important}.ms-lg-1{margin-left:.25rem!important}.ms-lg-2{margin-left:.5rem!important}.ms-lg-3{margin-left:1rem!important}.ms-lg-4{margin-left:1.5rem!important}.ms-lg-5{margin-left:3rem!important}.ms-lg-auto{margin-left:auto!important}.p-lg-0{padding:0!important}.p-lg-1{padding:.25rem!important}.p-lg-2{padding:.5rem!important}.p-lg-3{padding:1rem!important}.p-lg-4{padding:1.5rem!important}.p-lg-5{padding:3rem!important}.px-lg-0{padding-right:0!important;padding-left:0!important}.px-lg-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-lg-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-lg-3{padding-right:1rem!important;padding-left:1rem!important}.px-lg-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-lg-5{padding-right:3rem!important;padding-left:3rem!important}.py-lg-0{padding-top:0!important;padding-bottom:0!important}.py-lg-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-lg-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-lg-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-lg-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-lg-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-lg-0{padding-top:0!important}.pt-lg-1{padding-top:.25rem!important}.pt-lg-2{padding-top:.5rem!important}.pt-lg-3{padding-top:1rem!important}.pt-lg-4{padding-top:1.5rem!important}.pt-lg-5{padding-top:3rem!important}.pe-lg-0{padding-right:0!important}.pe-lg-1{padding-right:.25rem!important}.pe-lg-2{padding-right:.5rem!important}.pe-lg-3{padding-right:1rem!important}.pe-lg-4{padding-right:1.5rem!important}.pe-lg-5{padding-right:3rem!important}.pb-lg-0{padding-bottom:0!important}.pb-lg-1{padding-bottom:.25rem!important}.pb-lg-2{padding-bottom:.5rem!important}.pb-lg-3{padding-bottom:1rem!important}.pb-lg-4{padding-bottom:1.5rem!important}.pb-lg-5{padding-bottom:3rem!important}.ps-lg-0{padding-left:0!important}.ps-lg-1{padding-left:.25rem!important}.ps-lg-2{padding-left:.5rem!important}.ps-lg-3{padding-left:1rem!important}.ps-lg-4{padding-left:1.5rem!important}.ps-lg-5{padding-left:3rem!important}}@media (min-width:1200px){.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!important}.d-xl-grid{display:grid!important}.d-xl-table{display:table!important}.d-xl-table-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:flex!important}.d-xl-inline-flex{display:inline-flex!important}.d-xl-none{display:none!important}.flex-xl-fill{flex:1 1 auto!important}.flex-xl-row{flex-direction:row!important}.flex-xl-column{flex-direction:column!important}.flex-xl-row-reverse{flex-direction:row-reverse!important}.flex-xl-column-reverse{flex-direction:column-reverse!important}.flex-xl-grow-0{flex-grow:0!important}.flex-xl-grow-1{flex-grow:1!important}.flex-xl-shrink-0{flex-shrink:0!important}.flex-xl-shrink-1{flex-shrink:1!important}.flex-xl-wrap{flex-wrap:wrap!important}.flex-xl-nowrap{flex-wrap:nowrap!important}.flex-xl-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-xl-start{justify-content:flex-start!important}.justify-content-xl-end{justify-content:flex-end!important}.justify-content-xl-center{justify-content:center!important}.justify-content-xl-between{justify-content:space-between!important}.justify-content-xl-around{justify-content:space-around!important}.justify-content-xl-evenly{justify-content:space-evenly!important}.align-items-xl-start{align-items:flex-start!important}.align-items-xl-end{align-items:flex-end!important}.align-items-xl-center{align-items:center!important}.align-items-xl-baseline{align-items:baseline!important}.align-items-xl-stretch{align-items:stretch!important}.align-content-xl-start{align-content:flex-start!important}.align-content-xl-end{align-content:flex-end!important}.align-content-xl-center{align-content:center!important}.align-content-xl-between{align-content:space-between!important}.align-content-xl-around{align-content:space-around!important}.align-content-xl-stretch{align-content:stretch!important}.align-self-xl-auto{align-self:auto!important}.align-self-xl-start{align-self:flex-start!important}.align-self-xl-end{align-self:flex-end!important}.align-self-xl-center{align-self:center!important}.align-self-xl-baseline{align-self:baseline!important}.align-self-xl-stretch{align-self:stretch!important}.order-xl-first{order:-1!important}.order-xl-0{order:0!important}.order-xl-1{order:1!important}.order-xl-2{order:2!important}.order-xl-3{order:3!important}.order-xl-4{order:4!important}.order-xl-5{order:5!important}.order-xl-last{order:6!important}.m-xl-0{margin:0!important}.m-xl-1{margin:.25rem!important}.m-xl-2{margin:.5rem!important}.m-xl-3{margin:1rem!important}.m-xl-4{margin:1.5rem!important}.m-xl-5{margin:3rem!important}.m-xl-auto{margin:auto!important}.mx-xl-0{margin-right:0!important;margin-left:0!important}.mx-xl-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-xl-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-xl-3{margin-right:1rem!important;margin-left:1rem!important}.mx-xl-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-xl-5{margin-right:3rem!important;margin-left:3rem!important}.mx-xl-auto{margin-right:auto!important;margin-left:auto!important}.my-xl-0{margin-top:0!important;margin-bottom:0!important}.my-xl-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-xl-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-xl-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-xl-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-xl-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-xl-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-xl-0{margin-top:0!important}.mt-xl-1{margin-top:.25rem!important}.mt-xl-2{margin-top:.5rem!important}.mt-xl-3{margin-top:1rem!important}.mt-xl-4{margin-top:1.5rem!important}.mt-xl-5{margin-top:3rem!important}.mt-xl-auto{margin-top:auto!important}.me-xl-0{margin-right:0!important}.me-xl-1{margin-right:.25rem!important}.me-xl-2{margin-right:.5rem!important}.me-xl-3{margin-right:1rem!important}.me-xl-4{margin-right:1.5rem!important}.me-xl-5{margin-right:3rem!important}.me-xl-auto{margin-right:auto!important}.mb-xl-0{margin-bottom:0!important}.mb-xl-1{margin-bottom:.25rem!important}.mb-xl-2{margin-bottom:.5rem!important}.mb-xl-3{margin-bottom:1rem!important}.mb-xl-4{margin-bottom:1.5rem!important}.mb-xl-5{margin-bottom:3rem!important}.mb-xl-auto{margin-bottom:auto!important}.ms-xl-0{margin-left:0!important}.ms-xl-1{margin-left:.25rem!important}.ms-xl-2{margin-left:.5rem!important}.ms-xl-3{margin-left:1rem!important}.ms-xl-4{margin-left:1.5rem!important}.ms-xl-5{margin-left:3rem!important}.ms-xl-auto{margin-left:auto!important}.p-xl-0{padding:0!important}.p-xl-1{padding:.25rem!important}.p-xl-2{padding:.5rem!important}.p-xl-3{padding:1rem!important}.p-xl-4{padding:1.5rem!important}.p-xl-5{padding:3rem!important}.px-xl-0{padding-right:0!important;padding-left:0!important}.px-xl-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-xl-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-xl-3{padding-right:1rem!important;padding-left:1rem!important}.px-xl-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-xl-5{padding-right:3rem!important;padding-left:3rem!important}.py-xl-0{padding-top:0!important;padding-bottom:0!important}.py-xl-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-xl-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-xl-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-xl-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-xl-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-xl-0{padding-top:0!important}.pt-xl-1{padding-top:.25rem!important}.pt-xl-2{padding-top:.5rem!important}.pt-xl-3{padding-top:1rem!important}.pt-xl-4{padding-top:1.5rem!important}.pt-xl-5{padding-top:3rem!important}.pe-xl-0{padding-right:0!important}.pe-xl-1{padding-right:.25rem!important}.pe-xl-2{padding-right:.5rem!important}.pe-xl-3{padding-right:1rem!important}.pe-xl-4{padding-right:1.5rem!important}.pe-xl-5{padding-right:3rem!important}.pb-xl-0{padding-bottom:0!important}.pb-xl-1{padding-bottom:.25rem!important}.pb-xl-2{padding-bottom:.5rem!important}.pb-xl-3{padding-bottom:1rem!important}.pb-xl-4{padding-bottom:1.5rem!important}.pb-xl-5{padding-bottom:3rem!important}.ps-xl-0{padding-left:0!important}.ps-xl-1{padding-left:.25rem!important}.ps-xl-2{padding-left:.5rem!important}.ps-xl-3{padding-left:1rem!important}.ps-xl-4{padding-left:1.5rem!important}.ps-xl-5{padding-left:3rem!important}}@media (min-width:1400px){.d-xxl-inline{display:inline!important}.d-xxl-inline-block{display:inline-block!important}.d-xxl-block{display:block!important}.d-xxl-grid{display:grid!important}.d-xxl-table{display:table!important}.d-xxl-table-row{display:table-row!important}.d-xxl-table-cell{display:table-cell!important}.d-xxl-flex{display:flex!important}.d-xxl-inline-flex{display:inline-flex!important}.d-xxl-none{display:none!important}.flex-xxl-fill{flex:1 1 auto!important}.flex-xxl-row{flex-direction:row!important}.flex-xxl-column{flex-direction:column!important}.flex-xxl-row-reverse{flex-direction:row-reverse!important}.flex-xxl-column-reverse{flex-direction:column-reverse!important}.flex-xxl-grow-0{flex-grow:0!important}.flex-xxl-grow-1{flex-grow:1!important}.flex-xxl-shrink-0{flex-shrink:0!important}.flex-xxl-shrink-1{flex-shrink:1!important}.flex-xxl-wrap{flex-wrap:wrap!important}.flex-xxl-nowrap{flex-wrap:nowrap!important}.flex-xxl-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-xxl-start{justify-content:flex-start!important}.justify-content-xxl-end{justify-content:flex-end!important}.justify-content-xxl-center{justify-content:center!important}.justify-content-xxl-between{justify-content:space-between!important}.justify-content-xxl-around{justify-content:space-around!important}.justify-content-xxl-evenly{justify-content:space-evenly!important}.align-items-xxl-start{align-items:flex-start!important}.align-items-xxl-end{align-items:flex-end!important}.align-items-xxl-center{align-items:center!important}.align-items-xxl-baseline{align-items:baseline!important}.align-items-xxl-stretch{align-items:stretch!important}.align-content-xxl-start{align-content:flex-start!important}.align-content-xxl-end{align-content:flex-end!important}.align-content-xxl-center{align-content:center!important}.align-content-xxl-between{align-content:space-between!important}.align-content-xxl-around{align-content:space-around!important}.align-content-xxl-stretch{align-content:stretch!important}.align-self-xxl-auto{align-self:auto!important}.align-self-xxl-start{align-self:flex-start!important}.align-self-xxl-end{align-self:flex-end!important}.align-self-xxl-center{align-self:center!important}.align-self-xxl-baseline{align-self:baseline!important}.align-self-xxl-stretch{align-self:stretch!important}.order-xxl-first{order:-1!important}.order-xxl-0{order:0!important}.order-xxl-1{order:1!important}.order-xxl-2{order:2!important}.order-xxl-3{order:3!important}.order-xxl-4{order:4!important}.order-xxl-5{order:5!important}.order-xxl-last{order:6!important}.m-xxl-0{margin:0!important}.m-xxl-1{margin:.25rem!important}.m-xxl-2{margin:.5rem!important}.m-xxl-3{margin:1rem!important}.m-xxl-4{margin:1.5rem!important}.m-xxl-5{margin:3rem!important}.m-xxl-auto{margin:auto!important}.mx-xxl-0{margin-right:0!important;margin-left:0!important}.mx-xxl-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-xxl-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-xxl-3{margin-right:1rem!important;margin-left:1rem!important}.mx-xxl-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-xxl-5{margin-right:3rem!important;margin-left:3rem!important}.mx-xxl-auto{margin-right:auto!important;margin-left:auto!important}.my-xxl-0{margin-top:0!important;margin-bottom:0!important}.my-xxl-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-xxl-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-xxl-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-xxl-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-xxl-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-xxl-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-xxl-0{margin-top:0!important}.mt-xxl-1{margin-top:.25rem!important}.mt-xxl-2{margin-top:.5rem!important}.mt-xxl-3{margin-top:1rem!important}.mt-xxl-4{margin-top:1.5rem!important}.mt-xxl-5{margin-top:3rem!important}.mt-xxl-auto{margin-top:auto!important}.me-xxl-0{margin-right:0!important}.me-xxl-1{margin-right:.25rem!important}.me-xxl-2{margin-right:.5rem!important}.me-xxl-3{margin-right:1rem!important}.me-xxl-4{margin-right:1.5rem!important}.me-xxl-5{margin-right:3rem!important}.me-xxl-auto{margin-right:auto!important}.mb-xxl-0{margin-bottom:0!important}.mb-xxl-1{margin-bottom:.25rem!important}.mb-xxl-2{margin-bottom:.5rem!important}.mb-xxl-3{margin-bottom:1rem!important}.mb-xxl-4{margin-bottom:1.5rem!important}.mb-xxl-5{margin-bottom:3rem!important}.mb-xxl-auto{margin-bottom:auto!important}.ms-xxl-0{margin-left:0!important}.ms-xxl-1{margin-left:.25rem!important}.ms-xxl-2{margin-left:.5rem!important}.ms-xxl-3{margin-left:1rem!important}.ms-xxl-4{margin-left:1.5rem!important}.ms-xxl-5{margin-left:3rem!important}.ms-xxl-auto{margin-left:auto!important}.p-xxl-0{padding:0!important}.p-xxl-1{padding:.25rem!important}.p-xxl-2{padding:.5rem!important}.p-xxl-3{padding:1rem!important}.p-xxl-4{padding:1.5rem!important}.p-xxl-5{padding:3rem!important}.px-xxl-0{padding-right:0!important;padding-left:0!important}.px-xxl-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-xxl-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-xxl-3{padding-right:1rem!important;padding-left:1rem!important}.px-xxl-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-xxl-5{padding-right:3rem!important;padding-left:3rem!important}.py-xxl-0{padding-top:0!important;padding-bottom:0!important}.py-xxl-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-xxl-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-xxl-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-xxl-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-xxl-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-xxl-0{padding-top:0!important}.pt-xxl-1{padding-top:.25rem!important}.pt-xxl-2{padding-top:.5rem!important}.pt-xxl-3{padding-top:1rem!important}.pt-xxl-4{padding-top:1.5rem!important}.pt-xxl-5{padding-top:3rem!important}.pe-xxl-0{padding-right:0!important}.pe-xxl-1{padding-right:.25rem!important}.pe-xxl-2{padding-right:.5rem!important}.pe-xxl-3{padding-right:1rem!important}.pe-xxl-4{padding-right:1.5rem!important}.pe-xxl-5{padding-right:3rem!important}.pb-xxl-0{padding-bottom:0!important}.pb-xxl-1{padding-bottom:.25rem!important}.pb-xxl-2{padding-bottom:.5rem!important}.pb-xxl-3{padding-bottom:1rem!important}.pb-xxl-4{padding-bottom:1.5rem!important}.pb-xxl-5{padding-bottom:3rem!important}.ps-xxl-0{padding-left:0!important}.ps-xxl-1{padding-left:.25rem!important}.ps-xxl-2{padding-left:.5rem!important}.ps-xxl-3{padding-left:1rem!important}.ps-xxl-4{padding-left:1.5rem!important}.ps-xxl-5{padding-left:3rem!important}}@media print{.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!important}.d-print-grid{display:grid!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:flex!important}.d-print-inline-flex{display:inline-flex!important}.d-print-none{display:none!important}} +/*# sourceMappingURL=bootstrap-grid.min.css.map */ \ No newline at end of file diff --git a/samples/web-app-file-storage/src/static/bootstrap/css/bootstrap-grid.min.css.map b/samples/web-app-file-storage/src/static/bootstrap/css/bootstrap-grid.min.css.map new file mode 100644 index 0000000..1e0621c --- /dev/null +++ b/samples/web-app-file-storage/src/static/bootstrap/css/bootstrap-grid.min.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["../../scss/bootstrap-grid.scss","../../scss/_root.scss","../../scss/_containers.scss","dist/css/bootstrap-grid.css","../../scss/mixins/_container.scss","../../scss/mixins/_breakpoints.scss","../../scss/_grid.scss","../../scss/mixins/_grid.scss","../../scss/mixins/_utilities.scss","../../scss/utilities/_api.scss"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Bootstrap Grid v5.1.3 (https://getbootstrap.com/)\n * Copyright 2011-2021 The Bootstrap Authors\n * Copyright 2011-2021 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n\n$include-column-box-sizing: true !default;\n\n@import \"functions\";\n@import \"variables\";\n\n@import \"mixins/lists\";\n@import \"mixins/breakpoints\";\n@import \"mixins/container\";\n@import \"mixins/grid\";\n@import \"mixins/utilities\";\n\n@import \"vendor/rfs\";\n\n@import \"root\";\n\n@import \"containers\";\n@import \"grid\";\n\n@import \"utilities\";\n// Only use the utilities we need\n// stylelint-disable-next-line scss/dollar-variable-default\n$utilities: map-get-multiple(\n $utilities,\n (\n \"display\",\n \"order\",\n \"flex\",\n \"flex-direction\",\n \"flex-grow\",\n \"flex-shrink\",\n \"flex-wrap\",\n \"justify-content\",\n \"align-items\",\n \"align-content\",\n \"align-self\",\n \"margin\",\n \"margin-x\",\n \"margin-y\",\n \"margin-top\",\n \"margin-end\",\n \"margin-bottom\",\n \"margin-start\",\n \"negative-margin\",\n \"negative-margin-x\",\n \"negative-margin-y\",\n \"negative-margin-top\",\n \"negative-margin-end\",\n \"negative-margin-bottom\",\n \"negative-margin-start\",\n \"padding\",\n \"padding-x\",\n \"padding-y\",\n \"padding-top\",\n \"padding-end\",\n \"padding-bottom\",\n \"padding-start\",\n )\n);\n\n@import \"utilities/api\";\n",":root {\n // Note: Custom variable values only support SassScript inside `#{}`.\n\n // Colors\n //\n // Generate palettes for full colors, grays, and theme colors.\n\n @each $color, $value in $colors {\n --#{$variable-prefix}#{$color}: #{$value};\n }\n\n @each $color, $value in $grays {\n --#{$variable-prefix}gray-#{$color}: #{$value};\n }\n\n @each $color, $value in $theme-colors {\n --#{$variable-prefix}#{$color}: #{$value};\n }\n\n @each $color, $value in $theme-colors-rgb {\n --#{$variable-prefix}#{$color}-rgb: #{$value};\n }\n\n --#{$variable-prefix}white-rgb: #{to-rgb($white)};\n --#{$variable-prefix}black-rgb: #{to-rgb($black)};\n --#{$variable-prefix}body-color-rgb: #{to-rgb($body-color)};\n --#{$variable-prefix}body-bg-rgb: #{to-rgb($body-bg)};\n\n // Fonts\n\n // Note: Use `inspect` for lists so that quoted items keep the quotes.\n // See https://github.com/sass/sass/issues/2383#issuecomment-336349172\n --#{$variable-prefix}font-sans-serif: #{inspect($font-family-sans-serif)};\n --#{$variable-prefix}font-monospace: #{inspect($font-family-monospace)};\n --#{$variable-prefix}gradient: #{$gradient};\n\n // Root and body\n // stylelint-disable custom-property-empty-line-before\n // scss-docs-start root-body-variables\n @if $font-size-root != null {\n --#{$variable-prefix}root-font-size: #{$font-size-root};\n }\n --#{$variable-prefix}body-font-family: #{$font-family-base};\n --#{$variable-prefix}body-font-size: #{$font-size-base};\n --#{$variable-prefix}body-font-weight: #{$font-weight-base};\n --#{$variable-prefix}body-line-height: #{$line-height-base};\n --#{$variable-prefix}body-color: #{$body-color};\n @if $body-text-align != null {\n --#{$variable-prefix}body-text-align: #{$body-text-align};\n }\n --#{$variable-prefix}body-bg: #{$body-bg};\n // scss-docs-end root-body-variables\n // stylelint-enable custom-property-empty-line-before\n}\n","// Container widths\n//\n// Set the container width, and override it for fixed navbars in media queries.\n\n@if $enable-grid-classes {\n // Single container class with breakpoint max-widths\n .container,\n // 100% wide container at all breakpoints\n .container-fluid {\n @include make-container();\n }\n\n // Responsive containers that are 100% wide until a breakpoint\n @each $breakpoint, $container-max-width in $container-max-widths {\n .container-#{$breakpoint} {\n @extend .container-fluid;\n }\n\n @include media-breakpoint-up($breakpoint, $grid-breakpoints) {\n %responsive-container-#{$breakpoint} {\n max-width: $container-max-width;\n }\n\n // Extend each breakpoint which is smaller or equal to the current breakpoint\n $extend-breakpoint: true;\n\n @each $name, $width in $grid-breakpoints {\n @if ($extend-breakpoint) {\n .container#{breakpoint-infix($name, $grid-breakpoints)} {\n @extend %responsive-container-#{$breakpoint};\n }\n\n // Once the current breakpoint is reached, stop extending\n @if ($breakpoint == $name) {\n $extend-breakpoint: false;\n }\n }\n }\n }\n }\n}\n","/*!\n * Bootstrap Grid v5.1.3 (https://getbootstrap.com/)\n * Copyright 2011-2021 The Bootstrap Authors\n * Copyright 2011-2021 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n:root {\n --bs-blue: #0d6efd;\n --bs-indigo: #6610f2;\n --bs-purple: #6f42c1;\n --bs-pink: #d63384;\n --bs-red: #dc3545;\n --bs-orange: #fd7e14;\n --bs-yellow: #ffc107;\n --bs-green: #198754;\n --bs-teal: #20c997;\n --bs-cyan: #0dcaf0;\n --bs-white: #fff;\n --bs-gray: #6c757d;\n --bs-gray-dark: #343a40;\n --bs-gray-100: #f8f9fa;\n --bs-gray-200: #e9ecef;\n --bs-gray-300: #dee2e6;\n --bs-gray-400: #ced4da;\n --bs-gray-500: #adb5bd;\n --bs-gray-600: #6c757d;\n --bs-gray-700: #495057;\n --bs-gray-800: #343a40;\n --bs-gray-900: #212529;\n --bs-primary: #0d6efd;\n --bs-secondary: #6c757d;\n --bs-success: #198754;\n --bs-info: #0dcaf0;\n --bs-warning: #ffc107;\n --bs-danger: #dc3545;\n --bs-light: #f8f9fa;\n --bs-dark: #212529;\n --bs-primary-rgb: 13, 110, 253;\n --bs-secondary-rgb: 108, 117, 125;\n --bs-success-rgb: 25, 135, 84;\n --bs-info-rgb: 13, 202, 240;\n --bs-warning-rgb: 255, 193, 7;\n --bs-danger-rgb: 220, 53, 69;\n --bs-light-rgb: 248, 249, 250;\n --bs-dark-rgb: 33, 37, 41;\n --bs-white-rgb: 255, 255, 255;\n --bs-black-rgb: 0, 0, 0;\n --bs-body-color-rgb: 33, 37, 41;\n --bs-body-bg-rgb: 255, 255, 255;\n --bs-font-sans-serif: system-ui, -apple-system, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", \"Liberation Sans\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n --bs-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n --bs-gradient: linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));\n --bs-body-font-family: var(--bs-font-sans-serif);\n --bs-body-font-size: 1rem;\n --bs-body-font-weight: 400;\n --bs-body-line-height: 1.5;\n --bs-body-color: #212529;\n --bs-body-bg: #fff;\n}\n\n.container,\n.container-fluid,\n.container-xxl,\n.container-xl,\n.container-lg,\n.container-md,\n.container-sm {\n width: 100%;\n padding-right: var(--bs-gutter-x, 0.75rem);\n padding-left: var(--bs-gutter-x, 0.75rem);\n margin-right: auto;\n margin-left: auto;\n}\n\n@media (min-width: 576px) {\n .container-sm, .container {\n max-width: 540px;\n }\n}\n@media (min-width: 768px) {\n .container-md, .container-sm, .container {\n max-width: 720px;\n }\n}\n@media (min-width: 992px) {\n .container-lg, .container-md, .container-sm, .container {\n max-width: 960px;\n }\n}\n@media (min-width: 1200px) {\n .container-xl, .container-lg, .container-md, .container-sm, .container {\n max-width: 1140px;\n }\n}\n@media (min-width: 1400px) {\n .container-xxl, .container-xl, .container-lg, .container-md, .container-sm, .container {\n max-width: 1320px;\n }\n}\n.row {\n --bs-gutter-x: 1.5rem;\n --bs-gutter-y: 0;\n display: flex;\n flex-wrap: wrap;\n margin-top: calc(-1 * var(--bs-gutter-y));\n margin-right: calc(-0.5 * var(--bs-gutter-x));\n margin-left: calc(-0.5 * var(--bs-gutter-x));\n}\n.row > * {\n box-sizing: border-box;\n flex-shrink: 0;\n width: 100%;\n max-width: 100%;\n padding-right: calc(var(--bs-gutter-x) * 0.5);\n padding-left: calc(var(--bs-gutter-x) * 0.5);\n margin-top: var(--bs-gutter-y);\n}\n\n.col {\n flex: 1 0 0%;\n}\n\n.row-cols-auto > * {\n flex: 0 0 auto;\n width: auto;\n}\n\n.row-cols-1 > * {\n flex: 0 0 auto;\n width: 100%;\n}\n\n.row-cols-2 > * {\n flex: 0 0 auto;\n width: 50%;\n}\n\n.row-cols-3 > * {\n flex: 0 0 auto;\n width: 33.3333333333%;\n}\n\n.row-cols-4 > * {\n flex: 0 0 auto;\n width: 25%;\n}\n\n.row-cols-5 > * {\n flex: 0 0 auto;\n width: 20%;\n}\n\n.row-cols-6 > * {\n flex: 0 0 auto;\n width: 16.6666666667%;\n}\n\n.col-auto {\n flex: 0 0 auto;\n width: auto;\n}\n\n.col-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n}\n\n.col-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n}\n\n.col-3 {\n flex: 0 0 auto;\n width: 25%;\n}\n\n.col-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n}\n\n.col-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n}\n\n.col-6 {\n flex: 0 0 auto;\n width: 50%;\n}\n\n.col-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n}\n\n.col-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n}\n\n.col-9 {\n flex: 0 0 auto;\n width: 75%;\n}\n\n.col-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n}\n\n.col-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n}\n\n.col-12 {\n flex: 0 0 auto;\n width: 100%;\n}\n\n.offset-1 {\n margin-left: 8.33333333%;\n}\n\n.offset-2 {\n margin-left: 16.66666667%;\n}\n\n.offset-3 {\n margin-left: 25%;\n}\n\n.offset-4 {\n margin-left: 33.33333333%;\n}\n\n.offset-5 {\n margin-left: 41.66666667%;\n}\n\n.offset-6 {\n margin-left: 50%;\n}\n\n.offset-7 {\n margin-left: 58.33333333%;\n}\n\n.offset-8 {\n margin-left: 66.66666667%;\n}\n\n.offset-9 {\n margin-left: 75%;\n}\n\n.offset-10 {\n margin-left: 83.33333333%;\n}\n\n.offset-11 {\n margin-left: 91.66666667%;\n}\n\n.g-0,\n.gx-0 {\n --bs-gutter-x: 0;\n}\n\n.g-0,\n.gy-0 {\n --bs-gutter-y: 0;\n}\n\n.g-1,\n.gx-1 {\n --bs-gutter-x: 0.25rem;\n}\n\n.g-1,\n.gy-1 {\n --bs-gutter-y: 0.25rem;\n}\n\n.g-2,\n.gx-2 {\n --bs-gutter-x: 0.5rem;\n}\n\n.g-2,\n.gy-2 {\n --bs-gutter-y: 0.5rem;\n}\n\n.g-3,\n.gx-3 {\n --bs-gutter-x: 1rem;\n}\n\n.g-3,\n.gy-3 {\n --bs-gutter-y: 1rem;\n}\n\n.g-4,\n.gx-4 {\n --bs-gutter-x: 1.5rem;\n}\n\n.g-4,\n.gy-4 {\n --bs-gutter-y: 1.5rem;\n}\n\n.g-5,\n.gx-5 {\n --bs-gutter-x: 3rem;\n}\n\n.g-5,\n.gy-5 {\n --bs-gutter-y: 3rem;\n}\n\n@media (min-width: 576px) {\n .col-sm {\n flex: 1 0 0%;\n }\n\n .row-cols-sm-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n\n .row-cols-sm-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n\n .row-cols-sm-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n\n .row-cols-sm-3 > * {\n flex: 0 0 auto;\n width: 33.3333333333%;\n }\n\n .row-cols-sm-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n\n .row-cols-sm-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n\n .row-cols-sm-6 > * {\n flex: 0 0 auto;\n width: 16.6666666667%;\n }\n\n .col-sm-auto {\n flex: 0 0 auto;\n width: auto;\n }\n\n .col-sm-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n\n .col-sm-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n\n .col-sm-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n\n .col-sm-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n\n .col-sm-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n\n .col-sm-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n\n .col-sm-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n\n .col-sm-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n\n .col-sm-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n\n .col-sm-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n\n .col-sm-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n\n .col-sm-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n\n .offset-sm-0 {\n margin-left: 0;\n }\n\n .offset-sm-1 {\n margin-left: 8.33333333%;\n }\n\n .offset-sm-2 {\n margin-left: 16.66666667%;\n }\n\n .offset-sm-3 {\n margin-left: 25%;\n }\n\n .offset-sm-4 {\n margin-left: 33.33333333%;\n }\n\n .offset-sm-5 {\n margin-left: 41.66666667%;\n }\n\n .offset-sm-6 {\n margin-left: 50%;\n }\n\n .offset-sm-7 {\n margin-left: 58.33333333%;\n }\n\n .offset-sm-8 {\n margin-left: 66.66666667%;\n }\n\n .offset-sm-9 {\n margin-left: 75%;\n }\n\n .offset-sm-10 {\n margin-left: 83.33333333%;\n }\n\n .offset-sm-11 {\n margin-left: 91.66666667%;\n }\n\n .g-sm-0,\n.gx-sm-0 {\n --bs-gutter-x: 0;\n }\n\n .g-sm-0,\n.gy-sm-0 {\n --bs-gutter-y: 0;\n }\n\n .g-sm-1,\n.gx-sm-1 {\n --bs-gutter-x: 0.25rem;\n }\n\n .g-sm-1,\n.gy-sm-1 {\n --bs-gutter-y: 0.25rem;\n }\n\n .g-sm-2,\n.gx-sm-2 {\n --bs-gutter-x: 0.5rem;\n }\n\n .g-sm-2,\n.gy-sm-2 {\n --bs-gutter-y: 0.5rem;\n }\n\n .g-sm-3,\n.gx-sm-3 {\n --bs-gutter-x: 1rem;\n }\n\n .g-sm-3,\n.gy-sm-3 {\n --bs-gutter-y: 1rem;\n }\n\n .g-sm-4,\n.gx-sm-4 {\n --bs-gutter-x: 1.5rem;\n }\n\n .g-sm-4,\n.gy-sm-4 {\n --bs-gutter-y: 1.5rem;\n }\n\n .g-sm-5,\n.gx-sm-5 {\n --bs-gutter-x: 3rem;\n }\n\n .g-sm-5,\n.gy-sm-5 {\n --bs-gutter-y: 3rem;\n }\n}\n@media (min-width: 768px) {\n .col-md {\n flex: 1 0 0%;\n }\n\n .row-cols-md-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n\n .row-cols-md-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n\n .row-cols-md-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n\n .row-cols-md-3 > * {\n flex: 0 0 auto;\n width: 33.3333333333%;\n }\n\n .row-cols-md-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n\n .row-cols-md-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n\n .row-cols-md-6 > * {\n flex: 0 0 auto;\n width: 16.6666666667%;\n }\n\n .col-md-auto {\n flex: 0 0 auto;\n width: auto;\n }\n\n .col-md-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n\n .col-md-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n\n .col-md-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n\n .col-md-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n\n .col-md-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n\n .col-md-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n\n .col-md-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n\n .col-md-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n\n .col-md-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n\n .col-md-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n\n .col-md-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n\n .col-md-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n\n .offset-md-0 {\n margin-left: 0;\n }\n\n .offset-md-1 {\n margin-left: 8.33333333%;\n }\n\n .offset-md-2 {\n margin-left: 16.66666667%;\n }\n\n .offset-md-3 {\n margin-left: 25%;\n }\n\n .offset-md-4 {\n margin-left: 33.33333333%;\n }\n\n .offset-md-5 {\n margin-left: 41.66666667%;\n }\n\n .offset-md-6 {\n margin-left: 50%;\n }\n\n .offset-md-7 {\n margin-left: 58.33333333%;\n }\n\n .offset-md-8 {\n margin-left: 66.66666667%;\n }\n\n .offset-md-9 {\n margin-left: 75%;\n }\n\n .offset-md-10 {\n margin-left: 83.33333333%;\n }\n\n .offset-md-11 {\n margin-left: 91.66666667%;\n }\n\n .g-md-0,\n.gx-md-0 {\n --bs-gutter-x: 0;\n }\n\n .g-md-0,\n.gy-md-0 {\n --bs-gutter-y: 0;\n }\n\n .g-md-1,\n.gx-md-1 {\n --bs-gutter-x: 0.25rem;\n }\n\n .g-md-1,\n.gy-md-1 {\n --bs-gutter-y: 0.25rem;\n }\n\n .g-md-2,\n.gx-md-2 {\n --bs-gutter-x: 0.5rem;\n }\n\n .g-md-2,\n.gy-md-2 {\n --bs-gutter-y: 0.5rem;\n }\n\n .g-md-3,\n.gx-md-3 {\n --bs-gutter-x: 1rem;\n }\n\n .g-md-3,\n.gy-md-3 {\n --bs-gutter-y: 1rem;\n }\n\n .g-md-4,\n.gx-md-4 {\n --bs-gutter-x: 1.5rem;\n }\n\n .g-md-4,\n.gy-md-4 {\n --bs-gutter-y: 1.5rem;\n }\n\n .g-md-5,\n.gx-md-5 {\n --bs-gutter-x: 3rem;\n }\n\n .g-md-5,\n.gy-md-5 {\n --bs-gutter-y: 3rem;\n }\n}\n@media (min-width: 992px) {\n .col-lg {\n flex: 1 0 0%;\n }\n\n .row-cols-lg-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n\n .row-cols-lg-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n\n .row-cols-lg-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n\n .row-cols-lg-3 > * {\n flex: 0 0 auto;\n width: 33.3333333333%;\n }\n\n .row-cols-lg-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n\n .row-cols-lg-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n\n .row-cols-lg-6 > * {\n flex: 0 0 auto;\n width: 16.6666666667%;\n }\n\n .col-lg-auto {\n flex: 0 0 auto;\n width: auto;\n }\n\n .col-lg-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n\n .col-lg-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n\n .col-lg-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n\n .col-lg-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n\n .col-lg-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n\n .col-lg-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n\n .col-lg-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n\n .col-lg-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n\n .col-lg-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n\n .col-lg-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n\n .col-lg-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n\n .col-lg-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n\n .offset-lg-0 {\n margin-left: 0;\n }\n\n .offset-lg-1 {\n margin-left: 8.33333333%;\n }\n\n .offset-lg-2 {\n margin-left: 16.66666667%;\n }\n\n .offset-lg-3 {\n margin-left: 25%;\n }\n\n .offset-lg-4 {\n margin-left: 33.33333333%;\n }\n\n .offset-lg-5 {\n margin-left: 41.66666667%;\n }\n\n .offset-lg-6 {\n margin-left: 50%;\n }\n\n .offset-lg-7 {\n margin-left: 58.33333333%;\n }\n\n .offset-lg-8 {\n margin-left: 66.66666667%;\n }\n\n .offset-lg-9 {\n margin-left: 75%;\n }\n\n .offset-lg-10 {\n margin-left: 83.33333333%;\n }\n\n .offset-lg-11 {\n margin-left: 91.66666667%;\n }\n\n .g-lg-0,\n.gx-lg-0 {\n --bs-gutter-x: 0;\n }\n\n .g-lg-0,\n.gy-lg-0 {\n --bs-gutter-y: 0;\n }\n\n .g-lg-1,\n.gx-lg-1 {\n --bs-gutter-x: 0.25rem;\n }\n\n .g-lg-1,\n.gy-lg-1 {\n --bs-gutter-y: 0.25rem;\n }\n\n .g-lg-2,\n.gx-lg-2 {\n --bs-gutter-x: 0.5rem;\n }\n\n .g-lg-2,\n.gy-lg-2 {\n --bs-gutter-y: 0.5rem;\n }\n\n .g-lg-3,\n.gx-lg-3 {\n --bs-gutter-x: 1rem;\n }\n\n .g-lg-3,\n.gy-lg-3 {\n --bs-gutter-y: 1rem;\n }\n\n .g-lg-4,\n.gx-lg-4 {\n --bs-gutter-x: 1.5rem;\n }\n\n .g-lg-4,\n.gy-lg-4 {\n --bs-gutter-y: 1.5rem;\n }\n\n .g-lg-5,\n.gx-lg-5 {\n --bs-gutter-x: 3rem;\n }\n\n .g-lg-5,\n.gy-lg-5 {\n --bs-gutter-y: 3rem;\n }\n}\n@media (min-width: 1200px) {\n .col-xl {\n flex: 1 0 0%;\n }\n\n .row-cols-xl-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n\n .row-cols-xl-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n\n .row-cols-xl-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n\n .row-cols-xl-3 > * {\n flex: 0 0 auto;\n width: 33.3333333333%;\n }\n\n .row-cols-xl-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n\n .row-cols-xl-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n\n .row-cols-xl-6 > * {\n flex: 0 0 auto;\n width: 16.6666666667%;\n }\n\n .col-xl-auto {\n flex: 0 0 auto;\n width: auto;\n }\n\n .col-xl-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n\n .col-xl-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n\n .col-xl-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n\n .col-xl-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n\n .col-xl-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n\n .col-xl-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n\n .col-xl-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n\n .col-xl-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n\n .col-xl-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n\n .col-xl-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n\n .col-xl-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n\n .col-xl-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n\n .offset-xl-0 {\n margin-left: 0;\n }\n\n .offset-xl-1 {\n margin-left: 8.33333333%;\n }\n\n .offset-xl-2 {\n margin-left: 16.66666667%;\n }\n\n .offset-xl-3 {\n margin-left: 25%;\n }\n\n .offset-xl-4 {\n margin-left: 33.33333333%;\n }\n\n .offset-xl-5 {\n margin-left: 41.66666667%;\n }\n\n .offset-xl-6 {\n margin-left: 50%;\n }\n\n .offset-xl-7 {\n margin-left: 58.33333333%;\n }\n\n .offset-xl-8 {\n margin-left: 66.66666667%;\n }\n\n .offset-xl-9 {\n margin-left: 75%;\n }\n\n .offset-xl-10 {\n margin-left: 83.33333333%;\n }\n\n .offset-xl-11 {\n margin-left: 91.66666667%;\n }\n\n .g-xl-0,\n.gx-xl-0 {\n --bs-gutter-x: 0;\n }\n\n .g-xl-0,\n.gy-xl-0 {\n --bs-gutter-y: 0;\n }\n\n .g-xl-1,\n.gx-xl-1 {\n --bs-gutter-x: 0.25rem;\n }\n\n .g-xl-1,\n.gy-xl-1 {\n --bs-gutter-y: 0.25rem;\n }\n\n .g-xl-2,\n.gx-xl-2 {\n --bs-gutter-x: 0.5rem;\n }\n\n .g-xl-2,\n.gy-xl-2 {\n --bs-gutter-y: 0.5rem;\n }\n\n .g-xl-3,\n.gx-xl-3 {\n --bs-gutter-x: 1rem;\n }\n\n .g-xl-3,\n.gy-xl-3 {\n --bs-gutter-y: 1rem;\n }\n\n .g-xl-4,\n.gx-xl-4 {\n --bs-gutter-x: 1.5rem;\n }\n\n .g-xl-4,\n.gy-xl-4 {\n --bs-gutter-y: 1.5rem;\n }\n\n .g-xl-5,\n.gx-xl-5 {\n --bs-gutter-x: 3rem;\n }\n\n .g-xl-5,\n.gy-xl-5 {\n --bs-gutter-y: 3rem;\n }\n}\n@media (min-width: 1400px) {\n .col-xxl {\n flex: 1 0 0%;\n }\n\n .row-cols-xxl-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n\n .row-cols-xxl-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n\n .row-cols-xxl-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n\n .row-cols-xxl-3 > * {\n flex: 0 0 auto;\n width: 33.3333333333%;\n }\n\n .row-cols-xxl-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n\n .row-cols-xxl-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n\n .row-cols-xxl-6 > * {\n flex: 0 0 auto;\n width: 16.6666666667%;\n }\n\n .col-xxl-auto {\n flex: 0 0 auto;\n width: auto;\n }\n\n .col-xxl-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n\n .col-xxl-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n\n .col-xxl-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n\n .col-xxl-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n\n .col-xxl-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n\n .col-xxl-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n\n .col-xxl-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n\n .col-xxl-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n\n .col-xxl-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n\n .col-xxl-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n\n .col-xxl-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n\n .col-xxl-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n\n .offset-xxl-0 {\n margin-left: 0;\n }\n\n .offset-xxl-1 {\n margin-left: 8.33333333%;\n }\n\n .offset-xxl-2 {\n margin-left: 16.66666667%;\n }\n\n .offset-xxl-3 {\n margin-left: 25%;\n }\n\n .offset-xxl-4 {\n margin-left: 33.33333333%;\n }\n\n .offset-xxl-5 {\n margin-left: 41.66666667%;\n }\n\n .offset-xxl-6 {\n margin-left: 50%;\n }\n\n .offset-xxl-7 {\n margin-left: 58.33333333%;\n }\n\n .offset-xxl-8 {\n margin-left: 66.66666667%;\n }\n\n .offset-xxl-9 {\n margin-left: 75%;\n }\n\n .offset-xxl-10 {\n margin-left: 83.33333333%;\n }\n\n .offset-xxl-11 {\n margin-left: 91.66666667%;\n }\n\n .g-xxl-0,\n.gx-xxl-0 {\n --bs-gutter-x: 0;\n }\n\n .g-xxl-0,\n.gy-xxl-0 {\n --bs-gutter-y: 0;\n }\n\n .g-xxl-1,\n.gx-xxl-1 {\n --bs-gutter-x: 0.25rem;\n }\n\n .g-xxl-1,\n.gy-xxl-1 {\n --bs-gutter-y: 0.25rem;\n }\n\n .g-xxl-2,\n.gx-xxl-2 {\n --bs-gutter-x: 0.5rem;\n }\n\n .g-xxl-2,\n.gy-xxl-2 {\n --bs-gutter-y: 0.5rem;\n }\n\n .g-xxl-3,\n.gx-xxl-3 {\n --bs-gutter-x: 1rem;\n }\n\n .g-xxl-3,\n.gy-xxl-3 {\n --bs-gutter-y: 1rem;\n }\n\n .g-xxl-4,\n.gx-xxl-4 {\n --bs-gutter-x: 1.5rem;\n }\n\n .g-xxl-4,\n.gy-xxl-4 {\n --bs-gutter-y: 1.5rem;\n }\n\n .g-xxl-5,\n.gx-xxl-5 {\n --bs-gutter-x: 3rem;\n }\n\n .g-xxl-5,\n.gy-xxl-5 {\n --bs-gutter-y: 3rem;\n }\n}\n.d-inline {\n display: inline !important;\n}\n\n.d-inline-block {\n display: inline-block !important;\n}\n\n.d-block {\n display: block !important;\n}\n\n.d-grid {\n display: grid !important;\n}\n\n.d-table {\n display: table !important;\n}\n\n.d-table-row {\n display: table-row !important;\n}\n\n.d-table-cell {\n display: table-cell !important;\n}\n\n.d-flex {\n display: flex !important;\n}\n\n.d-inline-flex {\n display: inline-flex !important;\n}\n\n.d-none {\n display: none !important;\n}\n\n.flex-fill {\n flex: 1 1 auto !important;\n}\n\n.flex-row {\n flex-direction: row !important;\n}\n\n.flex-column {\n flex-direction: column !important;\n}\n\n.flex-row-reverse {\n flex-direction: row-reverse !important;\n}\n\n.flex-column-reverse {\n flex-direction: column-reverse !important;\n}\n\n.flex-grow-0 {\n flex-grow: 0 !important;\n}\n\n.flex-grow-1 {\n flex-grow: 1 !important;\n}\n\n.flex-shrink-0 {\n flex-shrink: 0 !important;\n}\n\n.flex-shrink-1 {\n flex-shrink: 1 !important;\n}\n\n.flex-wrap {\n flex-wrap: wrap !important;\n}\n\n.flex-nowrap {\n flex-wrap: nowrap !important;\n}\n\n.flex-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n}\n\n.justify-content-start {\n justify-content: flex-start !important;\n}\n\n.justify-content-end {\n justify-content: flex-end !important;\n}\n\n.justify-content-center {\n justify-content: center !important;\n}\n\n.justify-content-between {\n justify-content: space-between !important;\n}\n\n.justify-content-around {\n justify-content: space-around !important;\n}\n\n.justify-content-evenly {\n justify-content: space-evenly !important;\n}\n\n.align-items-start {\n align-items: flex-start !important;\n}\n\n.align-items-end {\n align-items: flex-end !important;\n}\n\n.align-items-center {\n align-items: center !important;\n}\n\n.align-items-baseline {\n align-items: baseline !important;\n}\n\n.align-items-stretch {\n align-items: stretch !important;\n}\n\n.align-content-start {\n align-content: flex-start !important;\n}\n\n.align-content-end {\n align-content: flex-end !important;\n}\n\n.align-content-center {\n align-content: center !important;\n}\n\n.align-content-between {\n align-content: space-between !important;\n}\n\n.align-content-around {\n align-content: space-around !important;\n}\n\n.align-content-stretch {\n align-content: stretch !important;\n}\n\n.align-self-auto {\n align-self: auto !important;\n}\n\n.align-self-start {\n align-self: flex-start !important;\n}\n\n.align-self-end {\n align-self: flex-end !important;\n}\n\n.align-self-center {\n align-self: center !important;\n}\n\n.align-self-baseline {\n align-self: baseline !important;\n}\n\n.align-self-stretch {\n align-self: stretch !important;\n}\n\n.order-first {\n order: -1 !important;\n}\n\n.order-0 {\n order: 0 !important;\n}\n\n.order-1 {\n order: 1 !important;\n}\n\n.order-2 {\n order: 2 !important;\n}\n\n.order-3 {\n order: 3 !important;\n}\n\n.order-4 {\n order: 4 !important;\n}\n\n.order-5 {\n order: 5 !important;\n}\n\n.order-last {\n order: 6 !important;\n}\n\n.m-0 {\n margin: 0 !important;\n}\n\n.m-1 {\n margin: 0.25rem !important;\n}\n\n.m-2 {\n margin: 0.5rem !important;\n}\n\n.m-3 {\n margin: 1rem !important;\n}\n\n.m-4 {\n margin: 1.5rem !important;\n}\n\n.m-5 {\n margin: 3rem !important;\n}\n\n.m-auto {\n margin: auto !important;\n}\n\n.mx-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n}\n\n.mx-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n}\n\n.mx-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n}\n\n.mx-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n}\n\n.mx-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n}\n\n.mx-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n}\n\n.mx-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n}\n\n.my-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n}\n\n.my-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n}\n\n.my-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n}\n\n.my-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n}\n\n.my-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n}\n\n.my-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n}\n\n.my-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n}\n\n.mt-0 {\n margin-top: 0 !important;\n}\n\n.mt-1 {\n margin-top: 0.25rem !important;\n}\n\n.mt-2 {\n margin-top: 0.5rem !important;\n}\n\n.mt-3 {\n margin-top: 1rem !important;\n}\n\n.mt-4 {\n margin-top: 1.5rem !important;\n}\n\n.mt-5 {\n margin-top: 3rem !important;\n}\n\n.mt-auto {\n margin-top: auto !important;\n}\n\n.me-0 {\n margin-right: 0 !important;\n}\n\n.me-1 {\n margin-right: 0.25rem !important;\n}\n\n.me-2 {\n margin-right: 0.5rem !important;\n}\n\n.me-3 {\n margin-right: 1rem !important;\n}\n\n.me-4 {\n margin-right: 1.5rem !important;\n}\n\n.me-5 {\n margin-right: 3rem !important;\n}\n\n.me-auto {\n margin-right: auto !important;\n}\n\n.mb-0 {\n margin-bottom: 0 !important;\n}\n\n.mb-1 {\n margin-bottom: 0.25rem !important;\n}\n\n.mb-2 {\n margin-bottom: 0.5rem !important;\n}\n\n.mb-3 {\n margin-bottom: 1rem !important;\n}\n\n.mb-4 {\n margin-bottom: 1.5rem !important;\n}\n\n.mb-5 {\n margin-bottom: 3rem !important;\n}\n\n.mb-auto {\n margin-bottom: auto !important;\n}\n\n.ms-0 {\n margin-left: 0 !important;\n}\n\n.ms-1 {\n margin-left: 0.25rem !important;\n}\n\n.ms-2 {\n margin-left: 0.5rem !important;\n}\n\n.ms-3 {\n margin-left: 1rem !important;\n}\n\n.ms-4 {\n margin-left: 1.5rem !important;\n}\n\n.ms-5 {\n margin-left: 3rem !important;\n}\n\n.ms-auto {\n margin-left: auto !important;\n}\n\n.p-0 {\n padding: 0 !important;\n}\n\n.p-1 {\n padding: 0.25rem !important;\n}\n\n.p-2 {\n padding: 0.5rem !important;\n}\n\n.p-3 {\n padding: 1rem !important;\n}\n\n.p-4 {\n padding: 1.5rem !important;\n}\n\n.p-5 {\n padding: 3rem !important;\n}\n\n.px-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n}\n\n.px-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n}\n\n.px-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n}\n\n.px-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n}\n\n.px-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n}\n\n.px-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n}\n\n.py-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n}\n\n.py-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n}\n\n.py-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n}\n\n.py-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n}\n\n.py-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n}\n\n.py-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n}\n\n.pt-0 {\n padding-top: 0 !important;\n}\n\n.pt-1 {\n padding-top: 0.25rem !important;\n}\n\n.pt-2 {\n padding-top: 0.5rem !important;\n}\n\n.pt-3 {\n padding-top: 1rem !important;\n}\n\n.pt-4 {\n padding-top: 1.5rem !important;\n}\n\n.pt-5 {\n padding-top: 3rem !important;\n}\n\n.pe-0 {\n padding-right: 0 !important;\n}\n\n.pe-1 {\n padding-right: 0.25rem !important;\n}\n\n.pe-2 {\n padding-right: 0.5rem !important;\n}\n\n.pe-3 {\n padding-right: 1rem !important;\n}\n\n.pe-4 {\n padding-right: 1.5rem !important;\n}\n\n.pe-5 {\n padding-right: 3rem !important;\n}\n\n.pb-0 {\n padding-bottom: 0 !important;\n}\n\n.pb-1 {\n padding-bottom: 0.25rem !important;\n}\n\n.pb-2 {\n padding-bottom: 0.5rem !important;\n}\n\n.pb-3 {\n padding-bottom: 1rem !important;\n}\n\n.pb-4 {\n padding-bottom: 1.5rem !important;\n}\n\n.pb-5 {\n padding-bottom: 3rem !important;\n}\n\n.ps-0 {\n padding-left: 0 !important;\n}\n\n.ps-1 {\n padding-left: 0.25rem !important;\n}\n\n.ps-2 {\n padding-left: 0.5rem !important;\n}\n\n.ps-3 {\n padding-left: 1rem !important;\n}\n\n.ps-4 {\n padding-left: 1.5rem !important;\n}\n\n.ps-5 {\n padding-left: 3rem !important;\n}\n\n@media (min-width: 576px) {\n .d-sm-inline {\n display: inline !important;\n }\n\n .d-sm-inline-block {\n display: inline-block !important;\n }\n\n .d-sm-block {\n display: block !important;\n }\n\n .d-sm-grid {\n display: grid !important;\n }\n\n .d-sm-table {\n display: table !important;\n }\n\n .d-sm-table-row {\n display: table-row !important;\n }\n\n .d-sm-table-cell {\n display: table-cell !important;\n }\n\n .d-sm-flex {\n display: flex !important;\n }\n\n .d-sm-inline-flex {\n display: inline-flex !important;\n }\n\n .d-sm-none {\n display: none !important;\n }\n\n .flex-sm-fill {\n flex: 1 1 auto !important;\n }\n\n .flex-sm-row {\n flex-direction: row !important;\n }\n\n .flex-sm-column {\n flex-direction: column !important;\n }\n\n .flex-sm-row-reverse {\n flex-direction: row-reverse !important;\n }\n\n .flex-sm-column-reverse {\n flex-direction: column-reverse !important;\n }\n\n .flex-sm-grow-0 {\n flex-grow: 0 !important;\n }\n\n .flex-sm-grow-1 {\n flex-grow: 1 !important;\n }\n\n .flex-sm-shrink-0 {\n flex-shrink: 0 !important;\n }\n\n .flex-sm-shrink-1 {\n flex-shrink: 1 !important;\n }\n\n .flex-sm-wrap {\n flex-wrap: wrap !important;\n }\n\n .flex-sm-nowrap {\n flex-wrap: nowrap !important;\n }\n\n .flex-sm-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n\n .justify-content-sm-start {\n justify-content: flex-start !important;\n }\n\n .justify-content-sm-end {\n justify-content: flex-end !important;\n }\n\n .justify-content-sm-center {\n justify-content: center !important;\n }\n\n .justify-content-sm-between {\n justify-content: space-between !important;\n }\n\n .justify-content-sm-around {\n justify-content: space-around !important;\n }\n\n .justify-content-sm-evenly {\n justify-content: space-evenly !important;\n }\n\n .align-items-sm-start {\n align-items: flex-start !important;\n }\n\n .align-items-sm-end {\n align-items: flex-end !important;\n }\n\n .align-items-sm-center {\n align-items: center !important;\n }\n\n .align-items-sm-baseline {\n align-items: baseline !important;\n }\n\n .align-items-sm-stretch {\n align-items: stretch !important;\n }\n\n .align-content-sm-start {\n align-content: flex-start !important;\n }\n\n .align-content-sm-end {\n align-content: flex-end !important;\n }\n\n .align-content-sm-center {\n align-content: center !important;\n }\n\n .align-content-sm-between {\n align-content: space-between !important;\n }\n\n .align-content-sm-around {\n align-content: space-around !important;\n }\n\n .align-content-sm-stretch {\n align-content: stretch !important;\n }\n\n .align-self-sm-auto {\n align-self: auto !important;\n }\n\n .align-self-sm-start {\n align-self: flex-start !important;\n }\n\n .align-self-sm-end {\n align-self: flex-end !important;\n }\n\n .align-self-sm-center {\n align-self: center !important;\n }\n\n .align-self-sm-baseline {\n align-self: baseline !important;\n }\n\n .align-self-sm-stretch {\n align-self: stretch !important;\n }\n\n .order-sm-first {\n order: -1 !important;\n }\n\n .order-sm-0 {\n order: 0 !important;\n }\n\n .order-sm-1 {\n order: 1 !important;\n }\n\n .order-sm-2 {\n order: 2 !important;\n }\n\n .order-sm-3 {\n order: 3 !important;\n }\n\n .order-sm-4 {\n order: 4 !important;\n }\n\n .order-sm-5 {\n order: 5 !important;\n }\n\n .order-sm-last {\n order: 6 !important;\n }\n\n .m-sm-0 {\n margin: 0 !important;\n }\n\n .m-sm-1 {\n margin: 0.25rem !important;\n }\n\n .m-sm-2 {\n margin: 0.5rem !important;\n }\n\n .m-sm-3 {\n margin: 1rem !important;\n }\n\n .m-sm-4 {\n margin: 1.5rem !important;\n }\n\n .m-sm-5 {\n margin: 3rem !important;\n }\n\n .m-sm-auto {\n margin: auto !important;\n }\n\n .mx-sm-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n\n .mx-sm-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n }\n\n .mx-sm-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n }\n\n .mx-sm-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n }\n\n .mx-sm-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n }\n\n .mx-sm-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n }\n\n .mx-sm-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n\n .my-sm-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n\n .my-sm-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n\n .my-sm-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n\n .my-sm-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n\n .my-sm-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n\n .my-sm-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n\n .my-sm-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n\n .mt-sm-0 {\n margin-top: 0 !important;\n }\n\n .mt-sm-1 {\n margin-top: 0.25rem !important;\n }\n\n .mt-sm-2 {\n margin-top: 0.5rem !important;\n }\n\n .mt-sm-3 {\n margin-top: 1rem !important;\n }\n\n .mt-sm-4 {\n margin-top: 1.5rem !important;\n }\n\n .mt-sm-5 {\n margin-top: 3rem !important;\n }\n\n .mt-sm-auto {\n margin-top: auto !important;\n }\n\n .me-sm-0 {\n margin-right: 0 !important;\n }\n\n .me-sm-1 {\n margin-right: 0.25rem !important;\n }\n\n .me-sm-2 {\n margin-right: 0.5rem !important;\n }\n\n .me-sm-3 {\n margin-right: 1rem !important;\n }\n\n .me-sm-4 {\n margin-right: 1.5rem !important;\n }\n\n .me-sm-5 {\n margin-right: 3rem !important;\n }\n\n .me-sm-auto {\n margin-right: auto !important;\n }\n\n .mb-sm-0 {\n margin-bottom: 0 !important;\n }\n\n .mb-sm-1 {\n margin-bottom: 0.25rem !important;\n }\n\n .mb-sm-2 {\n margin-bottom: 0.5rem !important;\n }\n\n .mb-sm-3 {\n margin-bottom: 1rem !important;\n }\n\n .mb-sm-4 {\n margin-bottom: 1.5rem !important;\n }\n\n .mb-sm-5 {\n margin-bottom: 3rem !important;\n }\n\n .mb-sm-auto {\n margin-bottom: auto !important;\n }\n\n .ms-sm-0 {\n margin-left: 0 !important;\n }\n\n .ms-sm-1 {\n margin-left: 0.25rem !important;\n }\n\n .ms-sm-2 {\n margin-left: 0.5rem !important;\n }\n\n .ms-sm-3 {\n margin-left: 1rem !important;\n }\n\n .ms-sm-4 {\n margin-left: 1.5rem !important;\n }\n\n .ms-sm-5 {\n margin-left: 3rem !important;\n }\n\n .ms-sm-auto {\n margin-left: auto !important;\n }\n\n .p-sm-0 {\n padding: 0 !important;\n }\n\n .p-sm-1 {\n padding: 0.25rem !important;\n }\n\n .p-sm-2 {\n padding: 0.5rem !important;\n }\n\n .p-sm-3 {\n padding: 1rem !important;\n }\n\n .p-sm-4 {\n padding: 1.5rem !important;\n }\n\n .p-sm-5 {\n padding: 3rem !important;\n }\n\n .px-sm-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n\n .px-sm-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n }\n\n .px-sm-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n }\n\n .px-sm-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n }\n\n .px-sm-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n }\n\n .px-sm-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n }\n\n .py-sm-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n\n .py-sm-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n\n .py-sm-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n\n .py-sm-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n\n .py-sm-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n\n .py-sm-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n\n .pt-sm-0 {\n padding-top: 0 !important;\n }\n\n .pt-sm-1 {\n padding-top: 0.25rem !important;\n }\n\n .pt-sm-2 {\n padding-top: 0.5rem !important;\n }\n\n .pt-sm-3 {\n padding-top: 1rem !important;\n }\n\n .pt-sm-4 {\n padding-top: 1.5rem !important;\n }\n\n .pt-sm-5 {\n padding-top: 3rem !important;\n }\n\n .pe-sm-0 {\n padding-right: 0 !important;\n }\n\n .pe-sm-1 {\n padding-right: 0.25rem !important;\n }\n\n .pe-sm-2 {\n padding-right: 0.5rem !important;\n }\n\n .pe-sm-3 {\n padding-right: 1rem !important;\n }\n\n .pe-sm-4 {\n padding-right: 1.5rem !important;\n }\n\n .pe-sm-5 {\n padding-right: 3rem !important;\n }\n\n .pb-sm-0 {\n padding-bottom: 0 !important;\n }\n\n .pb-sm-1 {\n padding-bottom: 0.25rem !important;\n }\n\n .pb-sm-2 {\n padding-bottom: 0.5rem !important;\n }\n\n .pb-sm-3 {\n padding-bottom: 1rem !important;\n }\n\n .pb-sm-4 {\n padding-bottom: 1.5rem !important;\n }\n\n .pb-sm-5 {\n padding-bottom: 3rem !important;\n }\n\n .ps-sm-0 {\n padding-left: 0 !important;\n }\n\n .ps-sm-1 {\n padding-left: 0.25rem !important;\n }\n\n .ps-sm-2 {\n padding-left: 0.5rem !important;\n }\n\n .ps-sm-3 {\n padding-left: 1rem !important;\n }\n\n .ps-sm-4 {\n padding-left: 1.5rem !important;\n }\n\n .ps-sm-5 {\n padding-left: 3rem !important;\n }\n}\n@media (min-width: 768px) {\n .d-md-inline {\n display: inline !important;\n }\n\n .d-md-inline-block {\n display: inline-block !important;\n }\n\n .d-md-block {\n display: block !important;\n }\n\n .d-md-grid {\n display: grid !important;\n }\n\n .d-md-table {\n display: table !important;\n }\n\n .d-md-table-row {\n display: table-row !important;\n }\n\n .d-md-table-cell {\n display: table-cell !important;\n }\n\n .d-md-flex {\n display: flex !important;\n }\n\n .d-md-inline-flex {\n display: inline-flex !important;\n }\n\n .d-md-none {\n display: none !important;\n }\n\n .flex-md-fill {\n flex: 1 1 auto !important;\n }\n\n .flex-md-row {\n flex-direction: row !important;\n }\n\n .flex-md-column {\n flex-direction: column !important;\n }\n\n .flex-md-row-reverse {\n flex-direction: row-reverse !important;\n }\n\n .flex-md-column-reverse {\n flex-direction: column-reverse !important;\n }\n\n .flex-md-grow-0 {\n flex-grow: 0 !important;\n }\n\n .flex-md-grow-1 {\n flex-grow: 1 !important;\n }\n\n .flex-md-shrink-0 {\n flex-shrink: 0 !important;\n }\n\n .flex-md-shrink-1 {\n flex-shrink: 1 !important;\n }\n\n .flex-md-wrap {\n flex-wrap: wrap !important;\n }\n\n .flex-md-nowrap {\n flex-wrap: nowrap !important;\n }\n\n .flex-md-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n\n .justify-content-md-start {\n justify-content: flex-start !important;\n }\n\n .justify-content-md-end {\n justify-content: flex-end !important;\n }\n\n .justify-content-md-center {\n justify-content: center !important;\n }\n\n .justify-content-md-between {\n justify-content: space-between !important;\n }\n\n .justify-content-md-around {\n justify-content: space-around !important;\n }\n\n .justify-content-md-evenly {\n justify-content: space-evenly !important;\n }\n\n .align-items-md-start {\n align-items: flex-start !important;\n }\n\n .align-items-md-end {\n align-items: flex-end !important;\n }\n\n .align-items-md-center {\n align-items: center !important;\n }\n\n .align-items-md-baseline {\n align-items: baseline !important;\n }\n\n .align-items-md-stretch {\n align-items: stretch !important;\n }\n\n .align-content-md-start {\n align-content: flex-start !important;\n }\n\n .align-content-md-end {\n align-content: flex-end !important;\n }\n\n .align-content-md-center {\n align-content: center !important;\n }\n\n .align-content-md-between {\n align-content: space-between !important;\n }\n\n .align-content-md-around {\n align-content: space-around !important;\n }\n\n .align-content-md-stretch {\n align-content: stretch !important;\n }\n\n .align-self-md-auto {\n align-self: auto !important;\n }\n\n .align-self-md-start {\n align-self: flex-start !important;\n }\n\n .align-self-md-end {\n align-self: flex-end !important;\n }\n\n .align-self-md-center {\n align-self: center !important;\n }\n\n .align-self-md-baseline {\n align-self: baseline !important;\n }\n\n .align-self-md-stretch {\n align-self: stretch !important;\n }\n\n .order-md-first {\n order: -1 !important;\n }\n\n .order-md-0 {\n order: 0 !important;\n }\n\n .order-md-1 {\n order: 1 !important;\n }\n\n .order-md-2 {\n order: 2 !important;\n }\n\n .order-md-3 {\n order: 3 !important;\n }\n\n .order-md-4 {\n order: 4 !important;\n }\n\n .order-md-5 {\n order: 5 !important;\n }\n\n .order-md-last {\n order: 6 !important;\n }\n\n .m-md-0 {\n margin: 0 !important;\n }\n\n .m-md-1 {\n margin: 0.25rem !important;\n }\n\n .m-md-2 {\n margin: 0.5rem !important;\n }\n\n .m-md-3 {\n margin: 1rem !important;\n }\n\n .m-md-4 {\n margin: 1.5rem !important;\n }\n\n .m-md-5 {\n margin: 3rem !important;\n }\n\n .m-md-auto {\n margin: auto !important;\n }\n\n .mx-md-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n\n .mx-md-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n }\n\n .mx-md-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n }\n\n .mx-md-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n }\n\n .mx-md-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n }\n\n .mx-md-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n }\n\n .mx-md-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n\n .my-md-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n\n .my-md-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n\n .my-md-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n\n .my-md-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n\n .my-md-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n\n .my-md-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n\n .my-md-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n\n .mt-md-0 {\n margin-top: 0 !important;\n }\n\n .mt-md-1 {\n margin-top: 0.25rem !important;\n }\n\n .mt-md-2 {\n margin-top: 0.5rem !important;\n }\n\n .mt-md-3 {\n margin-top: 1rem !important;\n }\n\n .mt-md-4 {\n margin-top: 1.5rem !important;\n }\n\n .mt-md-5 {\n margin-top: 3rem !important;\n }\n\n .mt-md-auto {\n margin-top: auto !important;\n }\n\n .me-md-0 {\n margin-right: 0 !important;\n }\n\n .me-md-1 {\n margin-right: 0.25rem !important;\n }\n\n .me-md-2 {\n margin-right: 0.5rem !important;\n }\n\n .me-md-3 {\n margin-right: 1rem !important;\n }\n\n .me-md-4 {\n margin-right: 1.5rem !important;\n }\n\n .me-md-5 {\n margin-right: 3rem !important;\n }\n\n .me-md-auto {\n margin-right: auto !important;\n }\n\n .mb-md-0 {\n margin-bottom: 0 !important;\n }\n\n .mb-md-1 {\n margin-bottom: 0.25rem !important;\n }\n\n .mb-md-2 {\n margin-bottom: 0.5rem !important;\n }\n\n .mb-md-3 {\n margin-bottom: 1rem !important;\n }\n\n .mb-md-4 {\n margin-bottom: 1.5rem !important;\n }\n\n .mb-md-5 {\n margin-bottom: 3rem !important;\n }\n\n .mb-md-auto {\n margin-bottom: auto !important;\n }\n\n .ms-md-0 {\n margin-left: 0 !important;\n }\n\n .ms-md-1 {\n margin-left: 0.25rem !important;\n }\n\n .ms-md-2 {\n margin-left: 0.5rem !important;\n }\n\n .ms-md-3 {\n margin-left: 1rem !important;\n }\n\n .ms-md-4 {\n margin-left: 1.5rem !important;\n }\n\n .ms-md-5 {\n margin-left: 3rem !important;\n }\n\n .ms-md-auto {\n margin-left: auto !important;\n }\n\n .p-md-0 {\n padding: 0 !important;\n }\n\n .p-md-1 {\n padding: 0.25rem !important;\n }\n\n .p-md-2 {\n padding: 0.5rem !important;\n }\n\n .p-md-3 {\n padding: 1rem !important;\n }\n\n .p-md-4 {\n padding: 1.5rem !important;\n }\n\n .p-md-5 {\n padding: 3rem !important;\n }\n\n .px-md-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n\n .px-md-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n }\n\n .px-md-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n }\n\n .px-md-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n }\n\n .px-md-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n }\n\n .px-md-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n }\n\n .py-md-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n\n .py-md-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n\n .py-md-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n\n .py-md-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n\n .py-md-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n\n .py-md-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n\n .pt-md-0 {\n padding-top: 0 !important;\n }\n\n .pt-md-1 {\n padding-top: 0.25rem !important;\n }\n\n .pt-md-2 {\n padding-top: 0.5rem !important;\n }\n\n .pt-md-3 {\n padding-top: 1rem !important;\n }\n\n .pt-md-4 {\n padding-top: 1.5rem !important;\n }\n\n .pt-md-5 {\n padding-top: 3rem !important;\n }\n\n .pe-md-0 {\n padding-right: 0 !important;\n }\n\n .pe-md-1 {\n padding-right: 0.25rem !important;\n }\n\n .pe-md-2 {\n padding-right: 0.5rem !important;\n }\n\n .pe-md-3 {\n padding-right: 1rem !important;\n }\n\n .pe-md-4 {\n padding-right: 1.5rem !important;\n }\n\n .pe-md-5 {\n padding-right: 3rem !important;\n }\n\n .pb-md-0 {\n padding-bottom: 0 !important;\n }\n\n .pb-md-1 {\n padding-bottom: 0.25rem !important;\n }\n\n .pb-md-2 {\n padding-bottom: 0.5rem !important;\n }\n\n .pb-md-3 {\n padding-bottom: 1rem !important;\n }\n\n .pb-md-4 {\n padding-bottom: 1.5rem !important;\n }\n\n .pb-md-5 {\n padding-bottom: 3rem !important;\n }\n\n .ps-md-0 {\n padding-left: 0 !important;\n }\n\n .ps-md-1 {\n padding-left: 0.25rem !important;\n }\n\n .ps-md-2 {\n padding-left: 0.5rem !important;\n }\n\n .ps-md-3 {\n padding-left: 1rem !important;\n }\n\n .ps-md-4 {\n padding-left: 1.5rem !important;\n }\n\n .ps-md-5 {\n padding-left: 3rem !important;\n }\n}\n@media (min-width: 992px) {\n .d-lg-inline {\n display: inline !important;\n }\n\n .d-lg-inline-block {\n display: inline-block !important;\n }\n\n .d-lg-block {\n display: block !important;\n }\n\n .d-lg-grid {\n display: grid !important;\n }\n\n .d-lg-table {\n display: table !important;\n }\n\n .d-lg-table-row {\n display: table-row !important;\n }\n\n .d-lg-table-cell {\n display: table-cell !important;\n }\n\n .d-lg-flex {\n display: flex !important;\n }\n\n .d-lg-inline-flex {\n display: inline-flex !important;\n }\n\n .d-lg-none {\n display: none !important;\n }\n\n .flex-lg-fill {\n flex: 1 1 auto !important;\n }\n\n .flex-lg-row {\n flex-direction: row !important;\n }\n\n .flex-lg-column {\n flex-direction: column !important;\n }\n\n .flex-lg-row-reverse {\n flex-direction: row-reverse !important;\n }\n\n .flex-lg-column-reverse {\n flex-direction: column-reverse !important;\n }\n\n .flex-lg-grow-0 {\n flex-grow: 0 !important;\n }\n\n .flex-lg-grow-1 {\n flex-grow: 1 !important;\n }\n\n .flex-lg-shrink-0 {\n flex-shrink: 0 !important;\n }\n\n .flex-lg-shrink-1 {\n flex-shrink: 1 !important;\n }\n\n .flex-lg-wrap {\n flex-wrap: wrap !important;\n }\n\n .flex-lg-nowrap {\n flex-wrap: nowrap !important;\n }\n\n .flex-lg-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n\n .justify-content-lg-start {\n justify-content: flex-start !important;\n }\n\n .justify-content-lg-end {\n justify-content: flex-end !important;\n }\n\n .justify-content-lg-center {\n justify-content: center !important;\n }\n\n .justify-content-lg-between {\n justify-content: space-between !important;\n }\n\n .justify-content-lg-around {\n justify-content: space-around !important;\n }\n\n .justify-content-lg-evenly {\n justify-content: space-evenly !important;\n }\n\n .align-items-lg-start {\n align-items: flex-start !important;\n }\n\n .align-items-lg-end {\n align-items: flex-end !important;\n }\n\n .align-items-lg-center {\n align-items: center !important;\n }\n\n .align-items-lg-baseline {\n align-items: baseline !important;\n }\n\n .align-items-lg-stretch {\n align-items: stretch !important;\n }\n\n .align-content-lg-start {\n align-content: flex-start !important;\n }\n\n .align-content-lg-end {\n align-content: flex-end !important;\n }\n\n .align-content-lg-center {\n align-content: center !important;\n }\n\n .align-content-lg-between {\n align-content: space-between !important;\n }\n\n .align-content-lg-around {\n align-content: space-around !important;\n }\n\n .align-content-lg-stretch {\n align-content: stretch !important;\n }\n\n .align-self-lg-auto {\n align-self: auto !important;\n }\n\n .align-self-lg-start {\n align-self: flex-start !important;\n }\n\n .align-self-lg-end {\n align-self: flex-end !important;\n }\n\n .align-self-lg-center {\n align-self: center !important;\n }\n\n .align-self-lg-baseline {\n align-self: baseline !important;\n }\n\n .align-self-lg-stretch {\n align-self: stretch !important;\n }\n\n .order-lg-first {\n order: -1 !important;\n }\n\n .order-lg-0 {\n order: 0 !important;\n }\n\n .order-lg-1 {\n order: 1 !important;\n }\n\n .order-lg-2 {\n order: 2 !important;\n }\n\n .order-lg-3 {\n order: 3 !important;\n }\n\n .order-lg-4 {\n order: 4 !important;\n }\n\n .order-lg-5 {\n order: 5 !important;\n }\n\n .order-lg-last {\n order: 6 !important;\n }\n\n .m-lg-0 {\n margin: 0 !important;\n }\n\n .m-lg-1 {\n margin: 0.25rem !important;\n }\n\n .m-lg-2 {\n margin: 0.5rem !important;\n }\n\n .m-lg-3 {\n margin: 1rem !important;\n }\n\n .m-lg-4 {\n margin: 1.5rem !important;\n }\n\n .m-lg-5 {\n margin: 3rem !important;\n }\n\n .m-lg-auto {\n margin: auto !important;\n }\n\n .mx-lg-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n\n .mx-lg-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n }\n\n .mx-lg-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n }\n\n .mx-lg-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n }\n\n .mx-lg-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n }\n\n .mx-lg-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n }\n\n .mx-lg-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n\n .my-lg-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n\n .my-lg-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n\n .my-lg-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n\n .my-lg-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n\n .my-lg-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n\n .my-lg-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n\n .my-lg-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n\n .mt-lg-0 {\n margin-top: 0 !important;\n }\n\n .mt-lg-1 {\n margin-top: 0.25rem !important;\n }\n\n .mt-lg-2 {\n margin-top: 0.5rem !important;\n }\n\n .mt-lg-3 {\n margin-top: 1rem !important;\n }\n\n .mt-lg-4 {\n margin-top: 1.5rem !important;\n }\n\n .mt-lg-5 {\n margin-top: 3rem !important;\n }\n\n .mt-lg-auto {\n margin-top: auto !important;\n }\n\n .me-lg-0 {\n margin-right: 0 !important;\n }\n\n .me-lg-1 {\n margin-right: 0.25rem !important;\n }\n\n .me-lg-2 {\n margin-right: 0.5rem !important;\n }\n\n .me-lg-3 {\n margin-right: 1rem !important;\n }\n\n .me-lg-4 {\n margin-right: 1.5rem !important;\n }\n\n .me-lg-5 {\n margin-right: 3rem !important;\n }\n\n .me-lg-auto {\n margin-right: auto !important;\n }\n\n .mb-lg-0 {\n margin-bottom: 0 !important;\n }\n\n .mb-lg-1 {\n margin-bottom: 0.25rem !important;\n }\n\n .mb-lg-2 {\n margin-bottom: 0.5rem !important;\n }\n\n .mb-lg-3 {\n margin-bottom: 1rem !important;\n }\n\n .mb-lg-4 {\n margin-bottom: 1.5rem !important;\n }\n\n .mb-lg-5 {\n margin-bottom: 3rem !important;\n }\n\n .mb-lg-auto {\n margin-bottom: auto !important;\n }\n\n .ms-lg-0 {\n margin-left: 0 !important;\n }\n\n .ms-lg-1 {\n margin-left: 0.25rem !important;\n }\n\n .ms-lg-2 {\n margin-left: 0.5rem !important;\n }\n\n .ms-lg-3 {\n margin-left: 1rem !important;\n }\n\n .ms-lg-4 {\n margin-left: 1.5rem !important;\n }\n\n .ms-lg-5 {\n margin-left: 3rem !important;\n }\n\n .ms-lg-auto {\n margin-left: auto !important;\n }\n\n .p-lg-0 {\n padding: 0 !important;\n }\n\n .p-lg-1 {\n padding: 0.25rem !important;\n }\n\n .p-lg-2 {\n padding: 0.5rem !important;\n }\n\n .p-lg-3 {\n padding: 1rem !important;\n }\n\n .p-lg-4 {\n padding: 1.5rem !important;\n }\n\n .p-lg-5 {\n padding: 3rem !important;\n }\n\n .px-lg-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n\n .px-lg-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n }\n\n .px-lg-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n }\n\n .px-lg-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n }\n\n .px-lg-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n }\n\n .px-lg-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n }\n\n .py-lg-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n\n .py-lg-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n\n .py-lg-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n\n .py-lg-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n\n .py-lg-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n\n .py-lg-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n\n .pt-lg-0 {\n padding-top: 0 !important;\n }\n\n .pt-lg-1 {\n padding-top: 0.25rem !important;\n }\n\n .pt-lg-2 {\n padding-top: 0.5rem !important;\n }\n\n .pt-lg-3 {\n padding-top: 1rem !important;\n }\n\n .pt-lg-4 {\n padding-top: 1.5rem !important;\n }\n\n .pt-lg-5 {\n padding-top: 3rem !important;\n }\n\n .pe-lg-0 {\n padding-right: 0 !important;\n }\n\n .pe-lg-1 {\n padding-right: 0.25rem !important;\n }\n\n .pe-lg-2 {\n padding-right: 0.5rem !important;\n }\n\n .pe-lg-3 {\n padding-right: 1rem !important;\n }\n\n .pe-lg-4 {\n padding-right: 1.5rem !important;\n }\n\n .pe-lg-5 {\n padding-right: 3rem !important;\n }\n\n .pb-lg-0 {\n padding-bottom: 0 !important;\n }\n\n .pb-lg-1 {\n padding-bottom: 0.25rem !important;\n }\n\n .pb-lg-2 {\n padding-bottom: 0.5rem !important;\n }\n\n .pb-lg-3 {\n padding-bottom: 1rem !important;\n }\n\n .pb-lg-4 {\n padding-bottom: 1.5rem !important;\n }\n\n .pb-lg-5 {\n padding-bottom: 3rem !important;\n }\n\n .ps-lg-0 {\n padding-left: 0 !important;\n }\n\n .ps-lg-1 {\n padding-left: 0.25rem !important;\n }\n\n .ps-lg-2 {\n padding-left: 0.5rem !important;\n }\n\n .ps-lg-3 {\n padding-left: 1rem !important;\n }\n\n .ps-lg-4 {\n padding-left: 1.5rem !important;\n }\n\n .ps-lg-5 {\n padding-left: 3rem !important;\n }\n}\n@media (min-width: 1200px) {\n .d-xl-inline {\n display: inline !important;\n }\n\n .d-xl-inline-block {\n display: inline-block !important;\n }\n\n .d-xl-block {\n display: block !important;\n }\n\n .d-xl-grid {\n display: grid !important;\n }\n\n .d-xl-table {\n display: table !important;\n }\n\n .d-xl-table-row {\n display: table-row !important;\n }\n\n .d-xl-table-cell {\n display: table-cell !important;\n }\n\n .d-xl-flex {\n display: flex !important;\n }\n\n .d-xl-inline-flex {\n display: inline-flex !important;\n }\n\n .d-xl-none {\n display: none !important;\n }\n\n .flex-xl-fill {\n flex: 1 1 auto !important;\n }\n\n .flex-xl-row {\n flex-direction: row !important;\n }\n\n .flex-xl-column {\n flex-direction: column !important;\n }\n\n .flex-xl-row-reverse {\n flex-direction: row-reverse !important;\n }\n\n .flex-xl-column-reverse {\n flex-direction: column-reverse !important;\n }\n\n .flex-xl-grow-0 {\n flex-grow: 0 !important;\n }\n\n .flex-xl-grow-1 {\n flex-grow: 1 !important;\n }\n\n .flex-xl-shrink-0 {\n flex-shrink: 0 !important;\n }\n\n .flex-xl-shrink-1 {\n flex-shrink: 1 !important;\n }\n\n .flex-xl-wrap {\n flex-wrap: wrap !important;\n }\n\n .flex-xl-nowrap {\n flex-wrap: nowrap !important;\n }\n\n .flex-xl-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n\n .justify-content-xl-start {\n justify-content: flex-start !important;\n }\n\n .justify-content-xl-end {\n justify-content: flex-end !important;\n }\n\n .justify-content-xl-center {\n justify-content: center !important;\n }\n\n .justify-content-xl-between {\n justify-content: space-between !important;\n }\n\n .justify-content-xl-around {\n justify-content: space-around !important;\n }\n\n .justify-content-xl-evenly {\n justify-content: space-evenly !important;\n }\n\n .align-items-xl-start {\n align-items: flex-start !important;\n }\n\n .align-items-xl-end {\n align-items: flex-end !important;\n }\n\n .align-items-xl-center {\n align-items: center !important;\n }\n\n .align-items-xl-baseline {\n align-items: baseline !important;\n }\n\n .align-items-xl-stretch {\n align-items: stretch !important;\n }\n\n .align-content-xl-start {\n align-content: flex-start !important;\n }\n\n .align-content-xl-end {\n align-content: flex-end !important;\n }\n\n .align-content-xl-center {\n align-content: center !important;\n }\n\n .align-content-xl-between {\n align-content: space-between !important;\n }\n\n .align-content-xl-around {\n align-content: space-around !important;\n }\n\n .align-content-xl-stretch {\n align-content: stretch !important;\n }\n\n .align-self-xl-auto {\n align-self: auto !important;\n }\n\n .align-self-xl-start {\n align-self: flex-start !important;\n }\n\n .align-self-xl-end {\n align-self: flex-end !important;\n }\n\n .align-self-xl-center {\n align-self: center !important;\n }\n\n .align-self-xl-baseline {\n align-self: baseline !important;\n }\n\n .align-self-xl-stretch {\n align-self: stretch !important;\n }\n\n .order-xl-first {\n order: -1 !important;\n }\n\n .order-xl-0 {\n order: 0 !important;\n }\n\n .order-xl-1 {\n order: 1 !important;\n }\n\n .order-xl-2 {\n order: 2 !important;\n }\n\n .order-xl-3 {\n order: 3 !important;\n }\n\n .order-xl-4 {\n order: 4 !important;\n }\n\n .order-xl-5 {\n order: 5 !important;\n }\n\n .order-xl-last {\n order: 6 !important;\n }\n\n .m-xl-0 {\n margin: 0 !important;\n }\n\n .m-xl-1 {\n margin: 0.25rem !important;\n }\n\n .m-xl-2 {\n margin: 0.5rem !important;\n }\n\n .m-xl-3 {\n margin: 1rem !important;\n }\n\n .m-xl-4 {\n margin: 1.5rem !important;\n }\n\n .m-xl-5 {\n margin: 3rem !important;\n }\n\n .m-xl-auto {\n margin: auto !important;\n }\n\n .mx-xl-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n\n .mx-xl-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n }\n\n .mx-xl-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n }\n\n .mx-xl-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n }\n\n .mx-xl-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n }\n\n .mx-xl-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n }\n\n .mx-xl-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n\n .my-xl-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n\n .my-xl-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n\n .my-xl-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n\n .my-xl-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n\n .my-xl-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n\n .my-xl-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n\n .my-xl-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n\n .mt-xl-0 {\n margin-top: 0 !important;\n }\n\n .mt-xl-1 {\n margin-top: 0.25rem !important;\n }\n\n .mt-xl-2 {\n margin-top: 0.5rem !important;\n }\n\n .mt-xl-3 {\n margin-top: 1rem !important;\n }\n\n .mt-xl-4 {\n margin-top: 1.5rem !important;\n }\n\n .mt-xl-5 {\n margin-top: 3rem !important;\n }\n\n .mt-xl-auto {\n margin-top: auto !important;\n }\n\n .me-xl-0 {\n margin-right: 0 !important;\n }\n\n .me-xl-1 {\n margin-right: 0.25rem !important;\n }\n\n .me-xl-2 {\n margin-right: 0.5rem !important;\n }\n\n .me-xl-3 {\n margin-right: 1rem !important;\n }\n\n .me-xl-4 {\n margin-right: 1.5rem !important;\n }\n\n .me-xl-5 {\n margin-right: 3rem !important;\n }\n\n .me-xl-auto {\n margin-right: auto !important;\n }\n\n .mb-xl-0 {\n margin-bottom: 0 !important;\n }\n\n .mb-xl-1 {\n margin-bottom: 0.25rem !important;\n }\n\n .mb-xl-2 {\n margin-bottom: 0.5rem !important;\n }\n\n .mb-xl-3 {\n margin-bottom: 1rem !important;\n }\n\n .mb-xl-4 {\n margin-bottom: 1.5rem !important;\n }\n\n .mb-xl-5 {\n margin-bottom: 3rem !important;\n }\n\n .mb-xl-auto {\n margin-bottom: auto !important;\n }\n\n .ms-xl-0 {\n margin-left: 0 !important;\n }\n\n .ms-xl-1 {\n margin-left: 0.25rem !important;\n }\n\n .ms-xl-2 {\n margin-left: 0.5rem !important;\n }\n\n .ms-xl-3 {\n margin-left: 1rem !important;\n }\n\n .ms-xl-4 {\n margin-left: 1.5rem !important;\n }\n\n .ms-xl-5 {\n margin-left: 3rem !important;\n }\n\n .ms-xl-auto {\n margin-left: auto !important;\n }\n\n .p-xl-0 {\n padding: 0 !important;\n }\n\n .p-xl-1 {\n padding: 0.25rem !important;\n }\n\n .p-xl-2 {\n padding: 0.5rem !important;\n }\n\n .p-xl-3 {\n padding: 1rem !important;\n }\n\n .p-xl-4 {\n padding: 1.5rem !important;\n }\n\n .p-xl-5 {\n padding: 3rem !important;\n }\n\n .px-xl-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n\n .px-xl-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n }\n\n .px-xl-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n }\n\n .px-xl-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n }\n\n .px-xl-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n }\n\n .px-xl-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n }\n\n .py-xl-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n\n .py-xl-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n\n .py-xl-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n\n .py-xl-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n\n .py-xl-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n\n .py-xl-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n\n .pt-xl-0 {\n padding-top: 0 !important;\n }\n\n .pt-xl-1 {\n padding-top: 0.25rem !important;\n }\n\n .pt-xl-2 {\n padding-top: 0.5rem !important;\n }\n\n .pt-xl-3 {\n padding-top: 1rem !important;\n }\n\n .pt-xl-4 {\n padding-top: 1.5rem !important;\n }\n\n .pt-xl-5 {\n padding-top: 3rem !important;\n }\n\n .pe-xl-0 {\n padding-right: 0 !important;\n }\n\n .pe-xl-1 {\n padding-right: 0.25rem !important;\n }\n\n .pe-xl-2 {\n padding-right: 0.5rem !important;\n }\n\n .pe-xl-3 {\n padding-right: 1rem !important;\n }\n\n .pe-xl-4 {\n padding-right: 1.5rem !important;\n }\n\n .pe-xl-5 {\n padding-right: 3rem !important;\n }\n\n .pb-xl-0 {\n padding-bottom: 0 !important;\n }\n\n .pb-xl-1 {\n padding-bottom: 0.25rem !important;\n }\n\n .pb-xl-2 {\n padding-bottom: 0.5rem !important;\n }\n\n .pb-xl-3 {\n padding-bottom: 1rem !important;\n }\n\n .pb-xl-4 {\n padding-bottom: 1.5rem !important;\n }\n\n .pb-xl-5 {\n padding-bottom: 3rem !important;\n }\n\n .ps-xl-0 {\n padding-left: 0 !important;\n }\n\n .ps-xl-1 {\n padding-left: 0.25rem !important;\n }\n\n .ps-xl-2 {\n padding-left: 0.5rem !important;\n }\n\n .ps-xl-3 {\n padding-left: 1rem !important;\n }\n\n .ps-xl-4 {\n padding-left: 1.5rem !important;\n }\n\n .ps-xl-5 {\n padding-left: 3rem !important;\n }\n}\n@media (min-width: 1400px) {\n .d-xxl-inline {\n display: inline !important;\n }\n\n .d-xxl-inline-block {\n display: inline-block !important;\n }\n\n .d-xxl-block {\n display: block !important;\n }\n\n .d-xxl-grid {\n display: grid !important;\n }\n\n .d-xxl-table {\n display: table !important;\n }\n\n .d-xxl-table-row {\n display: table-row !important;\n }\n\n .d-xxl-table-cell {\n display: table-cell !important;\n }\n\n .d-xxl-flex {\n display: flex !important;\n }\n\n .d-xxl-inline-flex {\n display: inline-flex !important;\n }\n\n .d-xxl-none {\n display: none !important;\n }\n\n .flex-xxl-fill {\n flex: 1 1 auto !important;\n }\n\n .flex-xxl-row {\n flex-direction: row !important;\n }\n\n .flex-xxl-column {\n flex-direction: column !important;\n }\n\n .flex-xxl-row-reverse {\n flex-direction: row-reverse !important;\n }\n\n .flex-xxl-column-reverse {\n flex-direction: column-reverse !important;\n }\n\n .flex-xxl-grow-0 {\n flex-grow: 0 !important;\n }\n\n .flex-xxl-grow-1 {\n flex-grow: 1 !important;\n }\n\n .flex-xxl-shrink-0 {\n flex-shrink: 0 !important;\n }\n\n .flex-xxl-shrink-1 {\n flex-shrink: 1 !important;\n }\n\n .flex-xxl-wrap {\n flex-wrap: wrap !important;\n }\n\n .flex-xxl-nowrap {\n flex-wrap: nowrap !important;\n }\n\n .flex-xxl-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n\n .justify-content-xxl-start {\n justify-content: flex-start !important;\n }\n\n .justify-content-xxl-end {\n justify-content: flex-end !important;\n }\n\n .justify-content-xxl-center {\n justify-content: center !important;\n }\n\n .justify-content-xxl-between {\n justify-content: space-between !important;\n }\n\n .justify-content-xxl-around {\n justify-content: space-around !important;\n }\n\n .justify-content-xxl-evenly {\n justify-content: space-evenly !important;\n }\n\n .align-items-xxl-start {\n align-items: flex-start !important;\n }\n\n .align-items-xxl-end {\n align-items: flex-end !important;\n }\n\n .align-items-xxl-center {\n align-items: center !important;\n }\n\n .align-items-xxl-baseline {\n align-items: baseline !important;\n }\n\n .align-items-xxl-stretch {\n align-items: stretch !important;\n }\n\n .align-content-xxl-start {\n align-content: flex-start !important;\n }\n\n .align-content-xxl-end {\n align-content: flex-end !important;\n }\n\n .align-content-xxl-center {\n align-content: center !important;\n }\n\n .align-content-xxl-between {\n align-content: space-between !important;\n }\n\n .align-content-xxl-around {\n align-content: space-around !important;\n }\n\n .align-content-xxl-stretch {\n align-content: stretch !important;\n }\n\n .align-self-xxl-auto {\n align-self: auto !important;\n }\n\n .align-self-xxl-start {\n align-self: flex-start !important;\n }\n\n .align-self-xxl-end {\n align-self: flex-end !important;\n }\n\n .align-self-xxl-center {\n align-self: center !important;\n }\n\n .align-self-xxl-baseline {\n align-self: baseline !important;\n }\n\n .align-self-xxl-stretch {\n align-self: stretch !important;\n }\n\n .order-xxl-first {\n order: -1 !important;\n }\n\n .order-xxl-0 {\n order: 0 !important;\n }\n\n .order-xxl-1 {\n order: 1 !important;\n }\n\n .order-xxl-2 {\n order: 2 !important;\n }\n\n .order-xxl-3 {\n order: 3 !important;\n }\n\n .order-xxl-4 {\n order: 4 !important;\n }\n\n .order-xxl-5 {\n order: 5 !important;\n }\n\n .order-xxl-last {\n order: 6 !important;\n }\n\n .m-xxl-0 {\n margin: 0 !important;\n }\n\n .m-xxl-1 {\n margin: 0.25rem !important;\n }\n\n .m-xxl-2 {\n margin: 0.5rem !important;\n }\n\n .m-xxl-3 {\n margin: 1rem !important;\n }\n\n .m-xxl-4 {\n margin: 1.5rem !important;\n }\n\n .m-xxl-5 {\n margin: 3rem !important;\n }\n\n .m-xxl-auto {\n margin: auto !important;\n }\n\n .mx-xxl-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n\n .mx-xxl-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n }\n\n .mx-xxl-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n }\n\n .mx-xxl-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n }\n\n .mx-xxl-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n }\n\n .mx-xxl-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n }\n\n .mx-xxl-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n\n .my-xxl-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n\n .my-xxl-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n\n .my-xxl-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n\n .my-xxl-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n\n .my-xxl-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n\n .my-xxl-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n\n .my-xxl-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n\n .mt-xxl-0 {\n margin-top: 0 !important;\n }\n\n .mt-xxl-1 {\n margin-top: 0.25rem !important;\n }\n\n .mt-xxl-2 {\n margin-top: 0.5rem !important;\n }\n\n .mt-xxl-3 {\n margin-top: 1rem !important;\n }\n\n .mt-xxl-4 {\n margin-top: 1.5rem !important;\n }\n\n .mt-xxl-5 {\n margin-top: 3rem !important;\n }\n\n .mt-xxl-auto {\n margin-top: auto !important;\n }\n\n .me-xxl-0 {\n margin-right: 0 !important;\n }\n\n .me-xxl-1 {\n margin-right: 0.25rem !important;\n }\n\n .me-xxl-2 {\n margin-right: 0.5rem !important;\n }\n\n .me-xxl-3 {\n margin-right: 1rem !important;\n }\n\n .me-xxl-4 {\n margin-right: 1.5rem !important;\n }\n\n .me-xxl-5 {\n margin-right: 3rem !important;\n }\n\n .me-xxl-auto {\n margin-right: auto !important;\n }\n\n .mb-xxl-0 {\n margin-bottom: 0 !important;\n }\n\n .mb-xxl-1 {\n margin-bottom: 0.25rem !important;\n }\n\n .mb-xxl-2 {\n margin-bottom: 0.5rem !important;\n }\n\n .mb-xxl-3 {\n margin-bottom: 1rem !important;\n }\n\n .mb-xxl-4 {\n margin-bottom: 1.5rem !important;\n }\n\n .mb-xxl-5 {\n margin-bottom: 3rem !important;\n }\n\n .mb-xxl-auto {\n margin-bottom: auto !important;\n }\n\n .ms-xxl-0 {\n margin-left: 0 !important;\n }\n\n .ms-xxl-1 {\n margin-left: 0.25rem !important;\n }\n\n .ms-xxl-2 {\n margin-left: 0.5rem !important;\n }\n\n .ms-xxl-3 {\n margin-left: 1rem !important;\n }\n\n .ms-xxl-4 {\n margin-left: 1.5rem !important;\n }\n\n .ms-xxl-5 {\n margin-left: 3rem !important;\n }\n\n .ms-xxl-auto {\n margin-left: auto !important;\n }\n\n .p-xxl-0 {\n padding: 0 !important;\n }\n\n .p-xxl-1 {\n padding: 0.25rem !important;\n }\n\n .p-xxl-2 {\n padding: 0.5rem !important;\n }\n\n .p-xxl-3 {\n padding: 1rem !important;\n }\n\n .p-xxl-4 {\n padding: 1.5rem !important;\n }\n\n .p-xxl-5 {\n padding: 3rem !important;\n }\n\n .px-xxl-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n\n .px-xxl-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n }\n\n .px-xxl-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n }\n\n .px-xxl-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n }\n\n .px-xxl-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n }\n\n .px-xxl-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n }\n\n .py-xxl-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n\n .py-xxl-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n\n .py-xxl-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n\n .py-xxl-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n\n .py-xxl-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n\n .py-xxl-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n\n .pt-xxl-0 {\n padding-top: 0 !important;\n }\n\n .pt-xxl-1 {\n padding-top: 0.25rem !important;\n }\n\n .pt-xxl-2 {\n padding-top: 0.5rem !important;\n }\n\n .pt-xxl-3 {\n padding-top: 1rem !important;\n }\n\n .pt-xxl-4 {\n padding-top: 1.5rem !important;\n }\n\n .pt-xxl-5 {\n padding-top: 3rem !important;\n }\n\n .pe-xxl-0 {\n padding-right: 0 !important;\n }\n\n .pe-xxl-1 {\n padding-right: 0.25rem !important;\n }\n\n .pe-xxl-2 {\n padding-right: 0.5rem !important;\n }\n\n .pe-xxl-3 {\n padding-right: 1rem !important;\n }\n\n .pe-xxl-4 {\n padding-right: 1.5rem !important;\n }\n\n .pe-xxl-5 {\n padding-right: 3rem !important;\n }\n\n .pb-xxl-0 {\n padding-bottom: 0 !important;\n }\n\n .pb-xxl-1 {\n padding-bottom: 0.25rem !important;\n }\n\n .pb-xxl-2 {\n padding-bottom: 0.5rem !important;\n }\n\n .pb-xxl-3 {\n padding-bottom: 1rem !important;\n }\n\n .pb-xxl-4 {\n padding-bottom: 1.5rem !important;\n }\n\n .pb-xxl-5 {\n padding-bottom: 3rem !important;\n }\n\n .ps-xxl-0 {\n padding-left: 0 !important;\n }\n\n .ps-xxl-1 {\n padding-left: 0.25rem !important;\n }\n\n .ps-xxl-2 {\n padding-left: 0.5rem !important;\n }\n\n .ps-xxl-3 {\n padding-left: 1rem !important;\n }\n\n .ps-xxl-4 {\n padding-left: 1.5rem !important;\n }\n\n .ps-xxl-5 {\n padding-left: 3rem !important;\n }\n}\n@media print {\n .d-print-inline {\n display: inline !important;\n }\n\n .d-print-inline-block {\n display: inline-block !important;\n }\n\n .d-print-block {\n display: block !important;\n }\n\n .d-print-grid {\n display: grid !important;\n }\n\n .d-print-table {\n display: table !important;\n }\n\n .d-print-table-row {\n display: table-row !important;\n }\n\n .d-print-table-cell {\n display: table-cell !important;\n }\n\n .d-print-flex {\n display: flex !important;\n }\n\n .d-print-inline-flex {\n display: inline-flex !important;\n }\n\n .d-print-none {\n display: none !important;\n }\n}\n\n/*# sourceMappingURL=bootstrap-grid.css.map */","// Container mixins\n\n@mixin make-container($gutter: $container-padding-x) {\n width: 100%;\n padding-right: var(--#{$variable-prefix}gutter-x, #{$gutter});\n padding-left: var(--#{$variable-prefix}gutter-x, #{$gutter});\n margin-right: auto;\n margin-left: auto;\n}\n","// Breakpoint viewport sizes and media queries.\n//\n// Breakpoints are defined as a map of (name: minimum width), order from small to large:\n//\n// (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px)\n//\n// The map defined in the `$grid-breakpoints` global variable is used as the `$breakpoints` argument by default.\n\n// Name of the next breakpoint, or null for the last breakpoint.\n//\n// >> breakpoint-next(sm)\n// md\n// >> breakpoint-next(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// md\n// >> breakpoint-next(sm, $breakpoint-names: (xs sm md lg xl))\n// md\n@function breakpoint-next($name, $breakpoints: $grid-breakpoints, $breakpoint-names: map-keys($breakpoints)) {\n $n: index($breakpoint-names, $name);\n @if not $n {\n @error \"breakpoint `#{$name}` not found in `#{$breakpoints}`\";\n }\n @return if($n < length($breakpoint-names), nth($breakpoint-names, $n + 1), null);\n}\n\n// Minimum breakpoint width. Null for the smallest (first) breakpoint.\n//\n// >> breakpoint-min(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// 576px\n@function breakpoint-min($name, $breakpoints: $grid-breakpoints) {\n $min: map-get($breakpoints, $name);\n @return if($min != 0, $min, null);\n}\n\n// Maximum breakpoint width.\n// The maximum value is reduced by 0.02px to work around the limitations of\n// `min-` and `max-` prefixes and viewports with fractional widths.\n// See https://www.w3.org/TR/mediaqueries-4/#mq-min-max\n// Uses 0.02px rather than 0.01px to work around a current rounding bug in Safari.\n// See https://bugs.webkit.org/show_bug.cgi?id=178261\n//\n// >> breakpoint-max(md, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// 767.98px\n@function breakpoint-max($name, $breakpoints: $grid-breakpoints) {\n $max: map-get($breakpoints, $name);\n @return if($max and $max > 0, $max - .02, null);\n}\n\n// Returns a blank string if smallest breakpoint, otherwise returns the name with a dash in front.\n// Useful for making responsive utilities.\n//\n// >> breakpoint-infix(xs, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// \"\" (Returns a blank string)\n// >> breakpoint-infix(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// \"-sm\"\n@function breakpoint-infix($name, $breakpoints: $grid-breakpoints) {\n @return if(breakpoint-min($name, $breakpoints) == null, \"\", \"-#{$name}\");\n}\n\n// Media of at least the minimum breakpoint width. No query for the smallest breakpoint.\n// Makes the @content apply to the given breakpoint and wider.\n@mixin media-breakpoint-up($name, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($name, $breakpoints);\n @if $min {\n @media (min-width: $min) {\n @content;\n }\n } @else {\n @content;\n }\n}\n\n// Media of at most the maximum breakpoint width. No query for the largest breakpoint.\n// Makes the @content apply to the given breakpoint and narrower.\n@mixin media-breakpoint-down($name, $breakpoints: $grid-breakpoints) {\n $max: breakpoint-max($name, $breakpoints);\n @if $max {\n @media (max-width: $max) {\n @content;\n }\n } @else {\n @content;\n }\n}\n\n// Media that spans multiple breakpoint widths.\n// Makes the @content apply between the min and max breakpoints\n@mixin media-breakpoint-between($lower, $upper, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($lower, $breakpoints);\n $max: breakpoint-max($upper, $breakpoints);\n\n @if $min != null and $max != null {\n @media (min-width: $min) and (max-width: $max) {\n @content;\n }\n } @else if $max == null {\n @include media-breakpoint-up($lower, $breakpoints) {\n @content;\n }\n } @else if $min == null {\n @include media-breakpoint-down($upper, $breakpoints) {\n @content;\n }\n }\n}\n\n// Media between the breakpoint's minimum and maximum widths.\n// No minimum for the smallest breakpoint, and no maximum for the largest one.\n// Makes the @content apply only to the given breakpoint, not viewports any wider or narrower.\n@mixin media-breakpoint-only($name, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($name, $breakpoints);\n $next: breakpoint-next($name, $breakpoints);\n $max: breakpoint-max($next);\n\n @if $min != null and $max != null {\n @media (min-width: $min) and (max-width: $max) {\n @content;\n }\n } @else if $max == null {\n @include media-breakpoint-up($name, $breakpoints) {\n @content;\n }\n } @else if $min == null {\n @include media-breakpoint-down($next, $breakpoints) {\n @content;\n }\n }\n}\n","// Row\n//\n// Rows contain your columns.\n\n@if $enable-grid-classes {\n .row {\n @include make-row();\n\n > * {\n @include make-col-ready();\n }\n }\n}\n\n@if $enable-cssgrid {\n .grid {\n display: grid;\n grid-template-rows: repeat(var(--#{$variable-prefix}rows, 1), 1fr);\n grid-template-columns: repeat(var(--#{$variable-prefix}columns, #{$grid-columns}), 1fr);\n gap: var(--#{$variable-prefix}gap, #{$grid-gutter-width});\n\n @include make-cssgrid();\n }\n}\n\n\n// Columns\n//\n// Common styles for small and large grid columns\n\n@if $enable-grid-classes {\n @include make-grid-columns();\n}\n","// Grid system\n//\n// Generate semantic grid columns with these mixins.\n\n@mixin make-row($gutter: $grid-gutter-width) {\n --#{$variable-prefix}gutter-x: #{$gutter};\n --#{$variable-prefix}gutter-y: 0;\n display: flex;\n flex-wrap: wrap;\n // TODO: Revisit calc order after https://github.com/react-bootstrap/react-bootstrap/issues/6039 is fixed\n margin-top: calc(-1 * var(--#{$variable-prefix}gutter-y)); // stylelint-disable-line function-disallowed-list\n margin-right: calc(-.5 * var(--#{$variable-prefix}gutter-x)); // stylelint-disable-line function-disallowed-list\n margin-left: calc(-.5 * var(--#{$variable-prefix}gutter-x)); // stylelint-disable-line function-disallowed-list\n}\n\n@mixin make-col-ready($gutter: $grid-gutter-width) {\n // Add box sizing if only the grid is loaded\n box-sizing: if(variable-exists(include-column-box-sizing) and $include-column-box-sizing, border-box, null);\n // Prevent columns from becoming too narrow when at smaller grid tiers by\n // always setting `width: 100%;`. This works because we set the width\n // later on to override this initial width.\n flex-shrink: 0;\n width: 100%;\n max-width: 100%; // Prevent `.col-auto`, `.col` (& responsive variants) from breaking out the grid\n padding-right: calc(var(--#{$variable-prefix}gutter-x) * .5); // stylelint-disable-line function-disallowed-list\n padding-left: calc(var(--#{$variable-prefix}gutter-x) * .5); // stylelint-disable-line function-disallowed-list\n margin-top: var(--#{$variable-prefix}gutter-y);\n}\n\n@mixin make-col($size: false, $columns: $grid-columns) {\n @if $size {\n flex: 0 0 auto;\n width: percentage(divide($size, $columns));\n\n } @else {\n flex: 1 1 0;\n max-width: 100%;\n }\n}\n\n@mixin make-col-auto() {\n flex: 0 0 auto;\n width: auto;\n}\n\n@mixin make-col-offset($size, $columns: $grid-columns) {\n $num: divide($size, $columns);\n margin-left: if($num == 0, 0, percentage($num));\n}\n\n// Row columns\n//\n// Specify on a parent element(e.g., .row) to force immediate children into NN\n// numberof columns. Supports wrapping to new lines, but does not do a Masonry\n// style grid.\n@mixin row-cols($count) {\n > * {\n flex: 0 0 auto;\n width: divide(100%, $count);\n }\n}\n\n// Framework grid generation\n//\n// Used only by Bootstrap to generate the correct number of grid classes given\n// any value of `$grid-columns`.\n\n@mixin make-grid-columns($columns: $grid-columns, $gutter: $grid-gutter-width, $breakpoints: $grid-breakpoints) {\n @each $breakpoint in map-keys($breakpoints) {\n $infix: breakpoint-infix($breakpoint, $breakpoints);\n\n @include media-breakpoint-up($breakpoint, $breakpoints) {\n // Provide basic `.col-{bp}` classes for equal-width flexbox columns\n .col#{$infix} {\n flex: 1 0 0%; // Flexbugs #4: https://github.com/philipwalton/flexbugs#flexbug-4\n }\n\n .row-cols#{$infix}-auto > * {\n @include make-col-auto();\n }\n\n @if $grid-row-columns > 0 {\n @for $i from 1 through $grid-row-columns {\n .row-cols#{$infix}-#{$i} {\n @include row-cols($i);\n }\n }\n }\n\n .col#{$infix}-auto {\n @include make-col-auto();\n }\n\n @if $columns > 0 {\n @for $i from 1 through $columns {\n .col#{$infix}-#{$i} {\n @include make-col($i, $columns);\n }\n }\n\n // `$columns - 1` because offsetting by the width of an entire row isn't possible\n @for $i from 0 through ($columns - 1) {\n @if not ($infix == \"\" and $i == 0) { // Avoid emitting useless .offset-0\n .offset#{$infix}-#{$i} {\n @include make-col-offset($i, $columns);\n }\n }\n }\n }\n\n // Gutters\n //\n // Make use of `.g-*`, `.gx-*` or `.gy-*` utilities to change spacing between the columns.\n @each $key, $value in $gutters {\n .g#{$infix}-#{$key},\n .gx#{$infix}-#{$key} {\n --#{$variable-prefix}gutter-x: #{$value};\n }\n\n .g#{$infix}-#{$key},\n .gy#{$infix}-#{$key} {\n --#{$variable-prefix}gutter-y: #{$value};\n }\n }\n }\n }\n}\n\n@mixin make-cssgrid($columns: $grid-columns, $breakpoints: $grid-breakpoints) {\n @each $breakpoint in map-keys($breakpoints) {\n $infix: breakpoint-infix($breakpoint, $breakpoints);\n\n @include media-breakpoint-up($breakpoint, $breakpoints) {\n @if $columns > 0 {\n @for $i from 1 through $columns {\n .g-col#{$infix}-#{$i} {\n grid-column: auto / span $i;\n }\n }\n\n // Start with `1` because `0` is and invalid value.\n // Ends with `$columns - 1` because offsetting by the width of an entire row isn't possible.\n @for $i from 1 through ($columns - 1) {\n .g-start#{$infix}-#{$i} {\n grid-column-start: $i;\n }\n }\n }\n }\n }\n}\n","// Utility generator\n// Used to generate utilities & print utilities\n@mixin generate-utility($utility, $infix, $is-rfs-media-query: false) {\n $values: map-get($utility, values);\n\n // If the values are a list or string, convert it into a map\n @if type-of($values) == \"string\" or type-of(nth($values, 1)) != \"list\" {\n $values: zip($values, $values);\n }\n\n @each $key, $value in $values {\n $properties: map-get($utility, property);\n\n // Multiple properties are possible, for example with vertical or horizontal margins or paddings\n @if type-of($properties) == \"string\" {\n $properties: append((), $properties);\n }\n\n // Use custom class if present\n $property-class: if(map-has-key($utility, class), map-get($utility, class), nth($properties, 1));\n $property-class: if($property-class == null, \"\", $property-class);\n\n // State params to generate pseudo-classes\n $state: if(map-has-key($utility, state), map-get($utility, state), ());\n\n $infix: if($property-class == \"\" and str-slice($infix, 1, 1) == \"-\", str-slice($infix, 2), $infix);\n\n // Don't prefix if value key is null (eg. with shadow class)\n $property-class-modifier: if($key, if($property-class == \"\" and $infix == \"\", \"\", \"-\") + $key, \"\");\n\n @if map-get($utility, rfs) {\n // Inside the media query\n @if $is-rfs-media-query {\n $val: rfs-value($value);\n\n // Do not render anything if fluid and non fluid values are the same\n $value: if($val == rfs-fluid-value($value), null, $val);\n }\n @else {\n $value: rfs-fluid-value($value);\n }\n }\n\n $is-css-var: map-get($utility, css-var);\n $is-local-vars: map-get($utility, local-vars);\n $is-rtl: map-get($utility, rtl);\n\n @if $value != null {\n @if $is-rtl == false {\n /* rtl:begin:remove */\n }\n\n @if $is-css-var {\n .#{$property-class + $infix + $property-class-modifier} {\n --#{$variable-prefix}#{$property-class}: #{$value};\n }\n\n @each $pseudo in $state {\n .#{$property-class + $infix + $property-class-modifier}-#{$pseudo}:#{$pseudo} {\n --#{$variable-prefix}#{$property-class}: #{$value};\n }\n }\n } @else {\n .#{$property-class + $infix + $property-class-modifier} {\n @each $property in $properties {\n @if $is-local-vars {\n @each $local-var, $value in $is-local-vars {\n --#{$variable-prefix}#{$local-var}: #{$value};\n }\n }\n #{$property}: $value if($enable-important-utilities, !important, null);\n }\n }\n\n @each $pseudo in $state {\n .#{$property-class + $infix + $property-class-modifier}-#{$pseudo}:#{$pseudo} {\n @each $property in $properties {\n #{$property}: $value if($enable-important-utilities, !important, null);\n }\n }\n }\n }\n\n @if $is-rtl == false {\n /* rtl:end:remove */\n }\n }\n }\n}\n","// Loop over each breakpoint\n@each $breakpoint in map-keys($grid-breakpoints) {\n\n // Generate media query if needed\n @include media-breakpoint-up($breakpoint) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n // Loop over each utility property\n @each $key, $utility in $utilities {\n // The utility can be disabled with `false`, thus check if the utility is a map first\n // Only proceed if responsive media queries are enabled or if it's the base media query\n @if type-of($utility) == \"map\" and (map-get($utility, responsive) or $infix == \"\") {\n @include generate-utility($utility, $infix);\n }\n }\n }\n}\n\n// RFS rescaling\n@media (min-width: $rfs-mq-value) {\n @each $breakpoint in map-keys($grid-breakpoints) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n @if (map-get($grid-breakpoints, $breakpoint) < $rfs-breakpoint) {\n // Loop over each utility property\n @each $key, $utility in $utilities {\n // The utility can be disabled with `false`, thus check if the utility is a map first\n // Only proceed if responsive media queries are enabled or if it's the base media query\n @if type-of($utility) == \"map\" and map-get($utility, rfs) and (map-get($utility, responsive) or $infix == \"\") {\n @include generate-utility($utility, $infix, true);\n }\n }\n }\n }\n}\n\n\n// Print utilities\n@media print {\n @each $key, $utility in $utilities {\n // The utility can be disabled with `false`, thus check if the utility is a map first\n // Then check if the utility needs print styles\n @if type-of($utility) == \"map\" and map-get($utility, print) == true {\n @include generate-utility($utility, \"-print\");\n }\n }\n}\n"]} \ No newline at end of file diff --git a/samples/web-app-file-storage/src/static/bootstrap/css/bootstrap-grid.rtl.css b/samples/web-app-file-storage/src/static/bootstrap/css/bootstrap-grid.rtl.css new file mode 100644 index 0000000..b5b17d7 --- /dev/null +++ b/samples/web-app-file-storage/src/static/bootstrap/css/bootstrap-grid.rtl.css @@ -0,0 +1,5050 @@ +/*! + * Bootstrap Grid v5.1.3 (https://getbootstrap.com/) + * Copyright 2011-2021 The Bootstrap Authors + * Copyright 2011-2021 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) + */ +:root { + --bs-blue: #0d6efd; + --bs-indigo: #6610f2; + --bs-purple: #6f42c1; + --bs-pink: #d63384; + --bs-red: #dc3545; + --bs-orange: #fd7e14; + --bs-yellow: #ffc107; + --bs-green: #198754; + --bs-teal: #20c997; + --bs-cyan: #0dcaf0; + --bs-white: #fff; + --bs-gray: #6c757d; + --bs-gray-dark: #343a40; + --bs-gray-100: #f8f9fa; + --bs-gray-200: #e9ecef; + --bs-gray-300: #dee2e6; + --bs-gray-400: #ced4da; + --bs-gray-500: #adb5bd; + --bs-gray-600: #6c757d; + --bs-gray-700: #495057; + --bs-gray-800: #343a40; + --bs-gray-900: #212529; + --bs-primary: #0d6efd; + --bs-secondary: #6c757d; + --bs-success: #198754; + --bs-info: #0dcaf0; + --bs-warning: #ffc107; + --bs-danger: #dc3545; + --bs-light: #f8f9fa; + --bs-dark: #212529; + --bs-primary-rgb: 13, 110, 253; + --bs-secondary-rgb: 108, 117, 125; + --bs-success-rgb: 25, 135, 84; + --bs-info-rgb: 13, 202, 240; + --bs-warning-rgb: 255, 193, 7; + --bs-danger-rgb: 220, 53, 69; + --bs-light-rgb: 248, 249, 250; + --bs-dark-rgb: 33, 37, 41; + --bs-white-rgb: 255, 255, 255; + --bs-black-rgb: 0, 0, 0; + --bs-body-color-rgb: 33, 37, 41; + --bs-body-bg-rgb: 255, 255, 255; + --bs-font-sans-serif: system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", "Liberation Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; + --bs-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; + --bs-gradient: linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0)); + --bs-body-font-family: var(--bs-font-sans-serif); + --bs-body-font-size: 1rem; + --bs-body-font-weight: 400; + --bs-body-line-height: 1.5; + --bs-body-color: #212529; + --bs-body-bg: #fff; +} + +.container, +.container-fluid, +.container-xxl, +.container-xl, +.container-lg, +.container-md, +.container-sm { + width: 100%; + padding-left: var(--bs-gutter-x, 0.75rem); + padding-right: var(--bs-gutter-x, 0.75rem); + margin-left: auto; + margin-right: auto; +} + +@media (min-width: 576px) { + .container-sm, .container { + max-width: 540px; + } +} +@media (min-width: 768px) { + .container-md, .container-sm, .container { + max-width: 720px; + } +} +@media (min-width: 992px) { + .container-lg, .container-md, .container-sm, .container { + max-width: 960px; + } +} +@media (min-width: 1200px) { + .container-xl, .container-lg, .container-md, .container-sm, .container { + max-width: 1140px; + } +} +@media (min-width: 1400px) { + .container-xxl, .container-xl, .container-lg, .container-md, .container-sm, .container { + max-width: 1320px; + } +} +.row { + --bs-gutter-x: 1.5rem; + --bs-gutter-y: 0; + display: flex; + flex-wrap: wrap; + margin-top: calc(-1 * var(--bs-gutter-y)); + margin-left: calc(-0.5 * var(--bs-gutter-x)); + margin-right: calc(-0.5 * var(--bs-gutter-x)); +} +.row > * { + box-sizing: border-box; + flex-shrink: 0; + width: 100%; + max-width: 100%; + padding-left: calc(var(--bs-gutter-x) * 0.5); + padding-right: calc(var(--bs-gutter-x) * 0.5); + margin-top: var(--bs-gutter-y); +} + +.col { + flex: 1 0 0%; +} + +.row-cols-auto > * { + flex: 0 0 auto; + width: auto; +} + +.row-cols-1 > * { + flex: 0 0 auto; + width: 100%; +} + +.row-cols-2 > * { + flex: 0 0 auto; + width: 50%; +} + +.row-cols-3 > * { + flex: 0 0 auto; + width: 33.3333333333%; +} + +.row-cols-4 > * { + flex: 0 0 auto; + width: 25%; +} + +.row-cols-5 > * { + flex: 0 0 auto; + width: 20%; +} + +.row-cols-6 > * { + flex: 0 0 auto; + width: 16.6666666667%; +} + +.col-auto { + flex: 0 0 auto; + width: auto; +} + +.col-1 { + flex: 0 0 auto; + width: 8.33333333%; +} + +.col-2 { + flex: 0 0 auto; + width: 16.66666667%; +} + +.col-3 { + flex: 0 0 auto; + width: 25%; +} + +.col-4 { + flex: 0 0 auto; + width: 33.33333333%; +} + +.col-5 { + flex: 0 0 auto; + width: 41.66666667%; +} + +.col-6 { + flex: 0 0 auto; + width: 50%; +} + +.col-7 { + flex: 0 0 auto; + width: 58.33333333%; +} + +.col-8 { + flex: 0 0 auto; + width: 66.66666667%; +} + +.col-9 { + flex: 0 0 auto; + width: 75%; +} + +.col-10 { + flex: 0 0 auto; + width: 83.33333333%; +} + +.col-11 { + flex: 0 0 auto; + width: 91.66666667%; +} + +.col-12 { + flex: 0 0 auto; + width: 100%; +} + +.offset-1 { + margin-right: 8.33333333%; +} + +.offset-2 { + margin-right: 16.66666667%; +} + +.offset-3 { + margin-right: 25%; +} + +.offset-4 { + margin-right: 33.33333333%; +} + +.offset-5 { + margin-right: 41.66666667%; +} + +.offset-6 { + margin-right: 50%; +} + +.offset-7 { + margin-right: 58.33333333%; +} + +.offset-8 { + margin-right: 66.66666667%; +} + +.offset-9 { + margin-right: 75%; +} + +.offset-10 { + margin-right: 83.33333333%; +} + +.offset-11 { + margin-right: 91.66666667%; +} + +.g-0, +.gx-0 { + --bs-gutter-x: 0; +} + +.g-0, +.gy-0 { + --bs-gutter-y: 0; +} + +.g-1, +.gx-1 { + --bs-gutter-x: 0.25rem; +} + +.g-1, +.gy-1 { + --bs-gutter-y: 0.25rem; +} + +.g-2, +.gx-2 { + --bs-gutter-x: 0.5rem; +} + +.g-2, +.gy-2 { + --bs-gutter-y: 0.5rem; +} + +.g-3, +.gx-3 { + --bs-gutter-x: 1rem; +} + +.g-3, +.gy-3 { + --bs-gutter-y: 1rem; +} + +.g-4, +.gx-4 { + --bs-gutter-x: 1.5rem; +} + +.g-4, +.gy-4 { + --bs-gutter-y: 1.5rem; +} + +.g-5, +.gx-5 { + --bs-gutter-x: 3rem; +} + +.g-5, +.gy-5 { + --bs-gutter-y: 3rem; +} + +@media (min-width: 576px) { + .col-sm { + flex: 1 0 0%; + } + + .row-cols-sm-auto > * { + flex: 0 0 auto; + width: auto; + } + + .row-cols-sm-1 > * { + flex: 0 0 auto; + width: 100%; + } + + .row-cols-sm-2 > * { + flex: 0 0 auto; + width: 50%; + } + + .row-cols-sm-3 > * { + flex: 0 0 auto; + width: 33.3333333333%; + } + + .row-cols-sm-4 > * { + flex: 0 0 auto; + width: 25%; + } + + .row-cols-sm-5 > * { + flex: 0 0 auto; + width: 20%; + } + + .row-cols-sm-6 > * { + flex: 0 0 auto; + width: 16.6666666667%; + } + + .col-sm-auto { + flex: 0 0 auto; + width: auto; + } + + .col-sm-1 { + flex: 0 0 auto; + width: 8.33333333%; + } + + .col-sm-2 { + flex: 0 0 auto; + width: 16.66666667%; + } + + .col-sm-3 { + flex: 0 0 auto; + width: 25%; + } + + .col-sm-4 { + flex: 0 0 auto; + width: 33.33333333%; + } + + .col-sm-5 { + flex: 0 0 auto; + width: 41.66666667%; + } + + .col-sm-6 { + flex: 0 0 auto; + width: 50%; + } + + .col-sm-7 { + flex: 0 0 auto; + width: 58.33333333%; + } + + .col-sm-8 { + flex: 0 0 auto; + width: 66.66666667%; + } + + .col-sm-9 { + flex: 0 0 auto; + width: 75%; + } + + .col-sm-10 { + flex: 0 0 auto; + width: 83.33333333%; + } + + .col-sm-11 { + flex: 0 0 auto; + width: 91.66666667%; + } + + .col-sm-12 { + flex: 0 0 auto; + width: 100%; + } + + .offset-sm-0 { + margin-right: 0; + } + + .offset-sm-1 { + margin-right: 8.33333333%; + } + + .offset-sm-2 { + margin-right: 16.66666667%; + } + + .offset-sm-3 { + margin-right: 25%; + } + + .offset-sm-4 { + margin-right: 33.33333333%; + } + + .offset-sm-5 { + margin-right: 41.66666667%; + } + + .offset-sm-6 { + margin-right: 50%; + } + + .offset-sm-7 { + margin-right: 58.33333333%; + } + + .offset-sm-8 { + margin-right: 66.66666667%; + } + + .offset-sm-9 { + margin-right: 75%; + } + + .offset-sm-10 { + margin-right: 83.33333333%; + } + + .offset-sm-11 { + margin-right: 91.66666667%; + } + + .g-sm-0, +.gx-sm-0 { + --bs-gutter-x: 0; + } + + .g-sm-0, +.gy-sm-0 { + --bs-gutter-y: 0; + } + + .g-sm-1, +.gx-sm-1 { + --bs-gutter-x: 0.25rem; + } + + .g-sm-1, +.gy-sm-1 { + --bs-gutter-y: 0.25rem; + } + + .g-sm-2, +.gx-sm-2 { + --bs-gutter-x: 0.5rem; + } + + .g-sm-2, +.gy-sm-2 { + --bs-gutter-y: 0.5rem; + } + + .g-sm-3, +.gx-sm-3 { + --bs-gutter-x: 1rem; + } + + .g-sm-3, +.gy-sm-3 { + --bs-gutter-y: 1rem; + } + + .g-sm-4, +.gx-sm-4 { + --bs-gutter-x: 1.5rem; + } + + .g-sm-4, +.gy-sm-4 { + --bs-gutter-y: 1.5rem; + } + + .g-sm-5, +.gx-sm-5 { + --bs-gutter-x: 3rem; + } + + .g-sm-5, +.gy-sm-5 { + --bs-gutter-y: 3rem; + } +} +@media (min-width: 768px) { + .col-md { + flex: 1 0 0%; + } + + .row-cols-md-auto > * { + flex: 0 0 auto; + width: auto; + } + + .row-cols-md-1 > * { + flex: 0 0 auto; + width: 100%; + } + + .row-cols-md-2 > * { + flex: 0 0 auto; + width: 50%; + } + + .row-cols-md-3 > * { + flex: 0 0 auto; + width: 33.3333333333%; + } + + .row-cols-md-4 > * { + flex: 0 0 auto; + width: 25%; + } + + .row-cols-md-5 > * { + flex: 0 0 auto; + width: 20%; + } + + .row-cols-md-6 > * { + flex: 0 0 auto; + width: 16.6666666667%; + } + + .col-md-auto { + flex: 0 0 auto; + width: auto; + } + + .col-md-1 { + flex: 0 0 auto; + width: 8.33333333%; + } + + .col-md-2 { + flex: 0 0 auto; + width: 16.66666667%; + } + + .col-md-3 { + flex: 0 0 auto; + width: 25%; + } + + .col-md-4 { + flex: 0 0 auto; + width: 33.33333333%; + } + + .col-md-5 { + flex: 0 0 auto; + width: 41.66666667%; + } + + .col-md-6 { + flex: 0 0 auto; + width: 50%; + } + + .col-md-7 { + flex: 0 0 auto; + width: 58.33333333%; + } + + .col-md-8 { + flex: 0 0 auto; + width: 66.66666667%; + } + + .col-md-9 { + flex: 0 0 auto; + width: 75%; + } + + .col-md-10 { + flex: 0 0 auto; + width: 83.33333333%; + } + + .col-md-11 { + flex: 0 0 auto; + width: 91.66666667%; + } + + .col-md-12 { + flex: 0 0 auto; + width: 100%; + } + + .offset-md-0 { + margin-right: 0; + } + + .offset-md-1 { + margin-right: 8.33333333%; + } + + .offset-md-2 { + margin-right: 16.66666667%; + } + + .offset-md-3 { + margin-right: 25%; + } + + .offset-md-4 { + margin-right: 33.33333333%; + } + + .offset-md-5 { + margin-right: 41.66666667%; + } + + .offset-md-6 { + margin-right: 50%; + } + + .offset-md-7 { + margin-right: 58.33333333%; + } + + .offset-md-8 { + margin-right: 66.66666667%; + } + + .offset-md-9 { + margin-right: 75%; + } + + .offset-md-10 { + margin-right: 83.33333333%; + } + + .offset-md-11 { + margin-right: 91.66666667%; + } + + .g-md-0, +.gx-md-0 { + --bs-gutter-x: 0; + } + + .g-md-0, +.gy-md-0 { + --bs-gutter-y: 0; + } + + .g-md-1, +.gx-md-1 { + --bs-gutter-x: 0.25rem; + } + + .g-md-1, +.gy-md-1 { + --bs-gutter-y: 0.25rem; + } + + .g-md-2, +.gx-md-2 { + --bs-gutter-x: 0.5rem; + } + + .g-md-2, +.gy-md-2 { + --bs-gutter-y: 0.5rem; + } + + .g-md-3, +.gx-md-3 { + --bs-gutter-x: 1rem; + } + + .g-md-3, +.gy-md-3 { + --bs-gutter-y: 1rem; + } + + .g-md-4, +.gx-md-4 { + --bs-gutter-x: 1.5rem; + } + + .g-md-4, +.gy-md-4 { + --bs-gutter-y: 1.5rem; + } + + .g-md-5, +.gx-md-5 { + --bs-gutter-x: 3rem; + } + + .g-md-5, +.gy-md-5 { + --bs-gutter-y: 3rem; + } +} +@media (min-width: 992px) { + .col-lg { + flex: 1 0 0%; + } + + .row-cols-lg-auto > * { + flex: 0 0 auto; + width: auto; + } + + .row-cols-lg-1 > * { + flex: 0 0 auto; + width: 100%; + } + + .row-cols-lg-2 > * { + flex: 0 0 auto; + width: 50%; + } + + .row-cols-lg-3 > * { + flex: 0 0 auto; + width: 33.3333333333%; + } + + .row-cols-lg-4 > * { + flex: 0 0 auto; + width: 25%; + } + + .row-cols-lg-5 > * { + flex: 0 0 auto; + width: 20%; + } + + .row-cols-lg-6 > * { + flex: 0 0 auto; + width: 16.6666666667%; + } + + .col-lg-auto { + flex: 0 0 auto; + width: auto; + } + + .col-lg-1 { + flex: 0 0 auto; + width: 8.33333333%; + } + + .col-lg-2 { + flex: 0 0 auto; + width: 16.66666667%; + } + + .col-lg-3 { + flex: 0 0 auto; + width: 25%; + } + + .col-lg-4 { + flex: 0 0 auto; + width: 33.33333333%; + } + + .col-lg-5 { + flex: 0 0 auto; + width: 41.66666667%; + } + + .col-lg-6 { + flex: 0 0 auto; + width: 50%; + } + + .col-lg-7 { + flex: 0 0 auto; + width: 58.33333333%; + } + + .col-lg-8 { + flex: 0 0 auto; + width: 66.66666667%; + } + + .col-lg-9 { + flex: 0 0 auto; + width: 75%; + } + + .col-lg-10 { + flex: 0 0 auto; + width: 83.33333333%; + } + + .col-lg-11 { + flex: 0 0 auto; + width: 91.66666667%; + } + + .col-lg-12 { + flex: 0 0 auto; + width: 100%; + } + + .offset-lg-0 { + margin-right: 0; + } + + .offset-lg-1 { + margin-right: 8.33333333%; + } + + .offset-lg-2 { + margin-right: 16.66666667%; + } + + .offset-lg-3 { + margin-right: 25%; + } + + .offset-lg-4 { + margin-right: 33.33333333%; + } + + .offset-lg-5 { + margin-right: 41.66666667%; + } + + .offset-lg-6 { + margin-right: 50%; + } + + .offset-lg-7 { + margin-right: 58.33333333%; + } + + .offset-lg-8 { + margin-right: 66.66666667%; + } + + .offset-lg-9 { + margin-right: 75%; + } + + .offset-lg-10 { + margin-right: 83.33333333%; + } + + .offset-lg-11 { + margin-right: 91.66666667%; + } + + .g-lg-0, +.gx-lg-0 { + --bs-gutter-x: 0; + } + + .g-lg-0, +.gy-lg-0 { + --bs-gutter-y: 0; + } + + .g-lg-1, +.gx-lg-1 { + --bs-gutter-x: 0.25rem; + } + + .g-lg-1, +.gy-lg-1 { + --bs-gutter-y: 0.25rem; + } + + .g-lg-2, +.gx-lg-2 { + --bs-gutter-x: 0.5rem; + } + + .g-lg-2, +.gy-lg-2 { + --bs-gutter-y: 0.5rem; + } + + .g-lg-3, +.gx-lg-3 { + --bs-gutter-x: 1rem; + } + + .g-lg-3, +.gy-lg-3 { + --bs-gutter-y: 1rem; + } + + .g-lg-4, +.gx-lg-4 { + --bs-gutter-x: 1.5rem; + } + + .g-lg-4, +.gy-lg-4 { + --bs-gutter-y: 1.5rem; + } + + .g-lg-5, +.gx-lg-5 { + --bs-gutter-x: 3rem; + } + + .g-lg-5, +.gy-lg-5 { + --bs-gutter-y: 3rem; + } +} +@media (min-width: 1200px) { + .col-xl { + flex: 1 0 0%; + } + + .row-cols-xl-auto > * { + flex: 0 0 auto; + width: auto; + } + + .row-cols-xl-1 > * { + flex: 0 0 auto; + width: 100%; + } + + .row-cols-xl-2 > * { + flex: 0 0 auto; + width: 50%; + } + + .row-cols-xl-3 > * { + flex: 0 0 auto; + width: 33.3333333333%; + } + + .row-cols-xl-4 > * { + flex: 0 0 auto; + width: 25%; + } + + .row-cols-xl-5 > * { + flex: 0 0 auto; + width: 20%; + } + + .row-cols-xl-6 > * { + flex: 0 0 auto; + width: 16.6666666667%; + } + + .col-xl-auto { + flex: 0 0 auto; + width: auto; + } + + .col-xl-1 { + flex: 0 0 auto; + width: 8.33333333%; + } + + .col-xl-2 { + flex: 0 0 auto; + width: 16.66666667%; + } + + .col-xl-3 { + flex: 0 0 auto; + width: 25%; + } + + .col-xl-4 { + flex: 0 0 auto; + width: 33.33333333%; + } + + .col-xl-5 { + flex: 0 0 auto; + width: 41.66666667%; + } + + .col-xl-6 { + flex: 0 0 auto; + width: 50%; + } + + .col-xl-7 { + flex: 0 0 auto; + width: 58.33333333%; + } + + .col-xl-8 { + flex: 0 0 auto; + width: 66.66666667%; + } + + .col-xl-9 { + flex: 0 0 auto; + width: 75%; + } + + .col-xl-10 { + flex: 0 0 auto; + width: 83.33333333%; + } + + .col-xl-11 { + flex: 0 0 auto; + width: 91.66666667%; + } + + .col-xl-12 { + flex: 0 0 auto; + width: 100%; + } + + .offset-xl-0 { + margin-right: 0; + } + + .offset-xl-1 { + margin-right: 8.33333333%; + } + + .offset-xl-2 { + margin-right: 16.66666667%; + } + + .offset-xl-3 { + margin-right: 25%; + } + + .offset-xl-4 { + margin-right: 33.33333333%; + } + + .offset-xl-5 { + margin-right: 41.66666667%; + } + + .offset-xl-6 { + margin-right: 50%; + } + + .offset-xl-7 { + margin-right: 58.33333333%; + } + + .offset-xl-8 { + margin-right: 66.66666667%; + } + + .offset-xl-9 { + margin-right: 75%; + } + + .offset-xl-10 { + margin-right: 83.33333333%; + } + + .offset-xl-11 { + margin-right: 91.66666667%; + } + + .g-xl-0, +.gx-xl-0 { + --bs-gutter-x: 0; + } + + .g-xl-0, +.gy-xl-0 { + --bs-gutter-y: 0; + } + + .g-xl-1, +.gx-xl-1 { + --bs-gutter-x: 0.25rem; + } + + .g-xl-1, +.gy-xl-1 { + --bs-gutter-y: 0.25rem; + } + + .g-xl-2, +.gx-xl-2 { + --bs-gutter-x: 0.5rem; + } + + .g-xl-2, +.gy-xl-2 { + --bs-gutter-y: 0.5rem; + } + + .g-xl-3, +.gx-xl-3 { + --bs-gutter-x: 1rem; + } + + .g-xl-3, +.gy-xl-3 { + --bs-gutter-y: 1rem; + } + + .g-xl-4, +.gx-xl-4 { + --bs-gutter-x: 1.5rem; + } + + .g-xl-4, +.gy-xl-4 { + --bs-gutter-y: 1.5rem; + } + + .g-xl-5, +.gx-xl-5 { + --bs-gutter-x: 3rem; + } + + .g-xl-5, +.gy-xl-5 { + --bs-gutter-y: 3rem; + } +} +@media (min-width: 1400px) { + .col-xxl { + flex: 1 0 0%; + } + + .row-cols-xxl-auto > * { + flex: 0 0 auto; + width: auto; + } + + .row-cols-xxl-1 > * { + flex: 0 0 auto; + width: 100%; + } + + .row-cols-xxl-2 > * { + flex: 0 0 auto; + width: 50%; + } + + .row-cols-xxl-3 > * { + flex: 0 0 auto; + width: 33.3333333333%; + } + + .row-cols-xxl-4 > * { + flex: 0 0 auto; + width: 25%; + } + + .row-cols-xxl-5 > * { + flex: 0 0 auto; + width: 20%; + } + + .row-cols-xxl-6 > * { + flex: 0 0 auto; + width: 16.6666666667%; + } + + .col-xxl-auto { + flex: 0 0 auto; + width: auto; + } + + .col-xxl-1 { + flex: 0 0 auto; + width: 8.33333333%; + } + + .col-xxl-2 { + flex: 0 0 auto; + width: 16.66666667%; + } + + .col-xxl-3 { + flex: 0 0 auto; + width: 25%; + } + + .col-xxl-4 { + flex: 0 0 auto; + width: 33.33333333%; + } + + .col-xxl-5 { + flex: 0 0 auto; + width: 41.66666667%; + } + + .col-xxl-6 { + flex: 0 0 auto; + width: 50%; + } + + .col-xxl-7 { + flex: 0 0 auto; + width: 58.33333333%; + } + + .col-xxl-8 { + flex: 0 0 auto; + width: 66.66666667%; + } + + .col-xxl-9 { + flex: 0 0 auto; + width: 75%; + } + + .col-xxl-10 { + flex: 0 0 auto; + width: 83.33333333%; + } + + .col-xxl-11 { + flex: 0 0 auto; + width: 91.66666667%; + } + + .col-xxl-12 { + flex: 0 0 auto; + width: 100%; + } + + .offset-xxl-0 { + margin-right: 0; + } + + .offset-xxl-1 { + margin-right: 8.33333333%; + } + + .offset-xxl-2 { + margin-right: 16.66666667%; + } + + .offset-xxl-3 { + margin-right: 25%; + } + + .offset-xxl-4 { + margin-right: 33.33333333%; + } + + .offset-xxl-5 { + margin-right: 41.66666667%; + } + + .offset-xxl-6 { + margin-right: 50%; + } + + .offset-xxl-7 { + margin-right: 58.33333333%; + } + + .offset-xxl-8 { + margin-right: 66.66666667%; + } + + .offset-xxl-9 { + margin-right: 75%; + } + + .offset-xxl-10 { + margin-right: 83.33333333%; + } + + .offset-xxl-11 { + margin-right: 91.66666667%; + } + + .g-xxl-0, +.gx-xxl-0 { + --bs-gutter-x: 0; + } + + .g-xxl-0, +.gy-xxl-0 { + --bs-gutter-y: 0; + } + + .g-xxl-1, +.gx-xxl-1 { + --bs-gutter-x: 0.25rem; + } + + .g-xxl-1, +.gy-xxl-1 { + --bs-gutter-y: 0.25rem; + } + + .g-xxl-2, +.gx-xxl-2 { + --bs-gutter-x: 0.5rem; + } + + .g-xxl-2, +.gy-xxl-2 { + --bs-gutter-y: 0.5rem; + } + + .g-xxl-3, +.gx-xxl-3 { + --bs-gutter-x: 1rem; + } + + .g-xxl-3, +.gy-xxl-3 { + --bs-gutter-y: 1rem; + } + + .g-xxl-4, +.gx-xxl-4 { + --bs-gutter-x: 1.5rem; + } + + .g-xxl-4, +.gy-xxl-4 { + --bs-gutter-y: 1.5rem; + } + + .g-xxl-5, +.gx-xxl-5 { + --bs-gutter-x: 3rem; + } + + .g-xxl-5, +.gy-xxl-5 { + --bs-gutter-y: 3rem; + } +} +.d-inline { + display: inline !important; +} + +.d-inline-block { + display: inline-block !important; +} + +.d-block { + display: block !important; +} + +.d-grid { + display: grid !important; +} + +.d-table { + display: table !important; +} + +.d-table-row { + display: table-row !important; +} + +.d-table-cell { + display: table-cell !important; +} + +.d-flex { + display: flex !important; +} + +.d-inline-flex { + display: inline-flex !important; +} + +.d-none { + display: none !important; +} + +.flex-fill { + flex: 1 1 auto !important; +} + +.flex-row { + flex-direction: row !important; +} + +.flex-column { + flex-direction: column !important; +} + +.flex-row-reverse { + flex-direction: row-reverse !important; +} + +.flex-column-reverse { + flex-direction: column-reverse !important; +} + +.flex-grow-0 { + flex-grow: 0 !important; +} + +.flex-grow-1 { + flex-grow: 1 !important; +} + +.flex-shrink-0 { + flex-shrink: 0 !important; +} + +.flex-shrink-1 { + flex-shrink: 1 !important; +} + +.flex-wrap { + flex-wrap: wrap !important; +} + +.flex-nowrap { + flex-wrap: nowrap !important; +} + +.flex-wrap-reverse { + flex-wrap: wrap-reverse !important; +} + +.justify-content-start { + justify-content: flex-start !important; +} + +.justify-content-end { + justify-content: flex-end !important; +} + +.justify-content-center { + justify-content: center !important; +} + +.justify-content-between { + justify-content: space-between !important; +} + +.justify-content-around { + justify-content: space-around !important; +} + +.justify-content-evenly { + justify-content: space-evenly !important; +} + +.align-items-start { + align-items: flex-start !important; +} + +.align-items-end { + align-items: flex-end !important; +} + +.align-items-center { + align-items: center !important; +} + +.align-items-baseline { + align-items: baseline !important; +} + +.align-items-stretch { + align-items: stretch !important; +} + +.align-content-start { + align-content: flex-start !important; +} + +.align-content-end { + align-content: flex-end !important; +} + +.align-content-center { + align-content: center !important; +} + +.align-content-between { + align-content: space-between !important; +} + +.align-content-around { + align-content: space-around !important; +} + +.align-content-stretch { + align-content: stretch !important; +} + +.align-self-auto { + align-self: auto !important; +} + +.align-self-start { + align-self: flex-start !important; +} + +.align-self-end { + align-self: flex-end !important; +} + +.align-self-center { + align-self: center !important; +} + +.align-self-baseline { + align-self: baseline !important; +} + +.align-self-stretch { + align-self: stretch !important; +} + +.order-first { + order: -1 !important; +} + +.order-0 { + order: 0 !important; +} + +.order-1 { + order: 1 !important; +} + +.order-2 { + order: 2 !important; +} + +.order-3 { + order: 3 !important; +} + +.order-4 { + order: 4 !important; +} + +.order-5 { + order: 5 !important; +} + +.order-last { + order: 6 !important; +} + +.m-0 { + margin: 0 !important; +} + +.m-1 { + margin: 0.25rem !important; +} + +.m-2 { + margin: 0.5rem !important; +} + +.m-3 { + margin: 1rem !important; +} + +.m-4 { + margin: 1.5rem !important; +} + +.m-5 { + margin: 3rem !important; +} + +.m-auto { + margin: auto !important; +} + +.mx-0 { + margin-left: 0 !important; + margin-right: 0 !important; +} + +.mx-1 { + margin-left: 0.25rem !important; + margin-right: 0.25rem !important; +} + +.mx-2 { + margin-left: 0.5rem !important; + margin-right: 0.5rem !important; +} + +.mx-3 { + margin-left: 1rem !important; + margin-right: 1rem !important; +} + +.mx-4 { + margin-left: 1.5rem !important; + margin-right: 1.5rem !important; +} + +.mx-5 { + margin-left: 3rem !important; + margin-right: 3rem !important; +} + +.mx-auto { + margin-left: auto !important; + margin-right: auto !important; +} + +.my-0 { + margin-top: 0 !important; + margin-bottom: 0 !important; +} + +.my-1 { + margin-top: 0.25rem !important; + margin-bottom: 0.25rem !important; +} + +.my-2 { + margin-top: 0.5rem !important; + margin-bottom: 0.5rem !important; +} + +.my-3 { + margin-top: 1rem !important; + margin-bottom: 1rem !important; +} + +.my-4 { + margin-top: 1.5rem !important; + margin-bottom: 1.5rem !important; +} + +.my-5 { + margin-top: 3rem !important; + margin-bottom: 3rem !important; +} + +.my-auto { + margin-top: auto !important; + margin-bottom: auto !important; +} + +.mt-0 { + margin-top: 0 !important; +} + +.mt-1 { + margin-top: 0.25rem !important; +} + +.mt-2 { + margin-top: 0.5rem !important; +} + +.mt-3 { + margin-top: 1rem !important; +} + +.mt-4 { + margin-top: 1.5rem !important; +} + +.mt-5 { + margin-top: 3rem !important; +} + +.mt-auto { + margin-top: auto !important; +} + +.me-0 { + margin-left: 0 !important; +} + +.me-1 { + margin-left: 0.25rem !important; +} + +.me-2 { + margin-left: 0.5rem !important; +} + +.me-3 { + margin-left: 1rem !important; +} + +.me-4 { + margin-left: 1.5rem !important; +} + +.me-5 { + margin-left: 3rem !important; +} + +.me-auto { + margin-left: auto !important; +} + +.mb-0 { + margin-bottom: 0 !important; +} + +.mb-1 { + margin-bottom: 0.25rem !important; +} + +.mb-2 { + margin-bottom: 0.5rem !important; +} + +.mb-3 { + margin-bottom: 1rem !important; +} + +.mb-4 { + margin-bottom: 1.5rem !important; +} + +.mb-5 { + margin-bottom: 3rem !important; +} + +.mb-auto { + margin-bottom: auto !important; +} + +.ms-0 { + margin-right: 0 !important; +} + +.ms-1 { + margin-right: 0.25rem !important; +} + +.ms-2 { + margin-right: 0.5rem !important; +} + +.ms-3 { + margin-right: 1rem !important; +} + +.ms-4 { + margin-right: 1.5rem !important; +} + +.ms-5 { + margin-right: 3rem !important; +} + +.ms-auto { + margin-right: auto !important; +} + +.p-0 { + padding: 0 !important; +} + +.p-1 { + padding: 0.25rem !important; +} + +.p-2 { + padding: 0.5rem !important; +} + +.p-3 { + padding: 1rem !important; +} + +.p-4 { + padding: 1.5rem !important; +} + +.p-5 { + padding: 3rem !important; +} + +.px-0 { + padding-left: 0 !important; + padding-right: 0 !important; +} + +.px-1 { + padding-left: 0.25rem !important; + padding-right: 0.25rem !important; +} + +.px-2 { + padding-left: 0.5rem !important; + padding-right: 0.5rem !important; +} + +.px-3 { + padding-left: 1rem !important; + padding-right: 1rem !important; +} + +.px-4 { + padding-left: 1.5rem !important; + padding-right: 1.5rem !important; +} + +.px-5 { + padding-left: 3rem !important; + padding-right: 3rem !important; +} + +.py-0 { + padding-top: 0 !important; + padding-bottom: 0 !important; +} + +.py-1 { + padding-top: 0.25rem !important; + padding-bottom: 0.25rem !important; +} + +.py-2 { + padding-top: 0.5rem !important; + padding-bottom: 0.5rem !important; +} + +.py-3 { + padding-top: 1rem !important; + padding-bottom: 1rem !important; +} + +.py-4 { + padding-top: 1.5rem !important; + padding-bottom: 1.5rem !important; +} + +.py-5 { + padding-top: 3rem !important; + padding-bottom: 3rem !important; +} + +.pt-0 { + padding-top: 0 !important; +} + +.pt-1 { + padding-top: 0.25rem !important; +} + +.pt-2 { + padding-top: 0.5rem !important; +} + +.pt-3 { + padding-top: 1rem !important; +} + +.pt-4 { + padding-top: 1.5rem !important; +} + +.pt-5 { + padding-top: 3rem !important; +} + +.pe-0 { + padding-left: 0 !important; +} + +.pe-1 { + padding-left: 0.25rem !important; +} + +.pe-2 { + padding-left: 0.5rem !important; +} + +.pe-3 { + padding-left: 1rem !important; +} + +.pe-4 { + padding-left: 1.5rem !important; +} + +.pe-5 { + padding-left: 3rem !important; +} + +.pb-0 { + padding-bottom: 0 !important; +} + +.pb-1 { + padding-bottom: 0.25rem !important; +} + +.pb-2 { + padding-bottom: 0.5rem !important; +} + +.pb-3 { + padding-bottom: 1rem !important; +} + +.pb-4 { + padding-bottom: 1.5rem !important; +} + +.pb-5 { + padding-bottom: 3rem !important; +} + +.ps-0 { + padding-right: 0 !important; +} + +.ps-1 { + padding-right: 0.25rem !important; +} + +.ps-2 { + padding-right: 0.5rem !important; +} + +.ps-3 { + padding-right: 1rem !important; +} + +.ps-4 { + padding-right: 1.5rem !important; +} + +.ps-5 { + padding-right: 3rem !important; +} + +@media (min-width: 576px) { + .d-sm-inline { + display: inline !important; + } + + .d-sm-inline-block { + display: inline-block !important; + } + + .d-sm-block { + display: block !important; + } + + .d-sm-grid { + display: grid !important; + } + + .d-sm-table { + display: table !important; + } + + .d-sm-table-row { + display: table-row !important; + } + + .d-sm-table-cell { + display: table-cell !important; + } + + .d-sm-flex { + display: flex !important; + } + + .d-sm-inline-flex { + display: inline-flex !important; + } + + .d-sm-none { + display: none !important; + } + + .flex-sm-fill { + flex: 1 1 auto !important; + } + + .flex-sm-row { + flex-direction: row !important; + } + + .flex-sm-column { + flex-direction: column !important; + } + + .flex-sm-row-reverse { + flex-direction: row-reverse !important; + } + + .flex-sm-column-reverse { + flex-direction: column-reverse !important; + } + + .flex-sm-grow-0 { + flex-grow: 0 !important; + } + + .flex-sm-grow-1 { + flex-grow: 1 !important; + } + + .flex-sm-shrink-0 { + flex-shrink: 0 !important; + } + + .flex-sm-shrink-1 { + flex-shrink: 1 !important; + } + + .flex-sm-wrap { + flex-wrap: wrap !important; + } + + .flex-sm-nowrap { + flex-wrap: nowrap !important; + } + + .flex-sm-wrap-reverse { + flex-wrap: wrap-reverse !important; + } + + .justify-content-sm-start { + justify-content: flex-start !important; + } + + .justify-content-sm-end { + justify-content: flex-end !important; + } + + .justify-content-sm-center { + justify-content: center !important; + } + + .justify-content-sm-between { + justify-content: space-between !important; + } + + .justify-content-sm-around { + justify-content: space-around !important; + } + + .justify-content-sm-evenly { + justify-content: space-evenly !important; + } + + .align-items-sm-start { + align-items: flex-start !important; + } + + .align-items-sm-end { + align-items: flex-end !important; + } + + .align-items-sm-center { + align-items: center !important; + } + + .align-items-sm-baseline { + align-items: baseline !important; + } + + .align-items-sm-stretch { + align-items: stretch !important; + } + + .align-content-sm-start { + align-content: flex-start !important; + } + + .align-content-sm-end { + align-content: flex-end !important; + } + + .align-content-sm-center { + align-content: center !important; + } + + .align-content-sm-between { + align-content: space-between !important; + } + + .align-content-sm-around { + align-content: space-around !important; + } + + .align-content-sm-stretch { + align-content: stretch !important; + } + + .align-self-sm-auto { + align-self: auto !important; + } + + .align-self-sm-start { + align-self: flex-start !important; + } + + .align-self-sm-end { + align-self: flex-end !important; + } + + .align-self-sm-center { + align-self: center !important; + } + + .align-self-sm-baseline { + align-self: baseline !important; + } + + .align-self-sm-stretch { + align-self: stretch !important; + } + + .order-sm-first { + order: -1 !important; + } + + .order-sm-0 { + order: 0 !important; + } + + .order-sm-1 { + order: 1 !important; + } + + .order-sm-2 { + order: 2 !important; + } + + .order-sm-3 { + order: 3 !important; + } + + .order-sm-4 { + order: 4 !important; + } + + .order-sm-5 { + order: 5 !important; + } + + .order-sm-last { + order: 6 !important; + } + + .m-sm-0 { + margin: 0 !important; + } + + .m-sm-1 { + margin: 0.25rem !important; + } + + .m-sm-2 { + margin: 0.5rem !important; + } + + .m-sm-3 { + margin: 1rem !important; + } + + .m-sm-4 { + margin: 1.5rem !important; + } + + .m-sm-5 { + margin: 3rem !important; + } + + .m-sm-auto { + margin: auto !important; + } + + .mx-sm-0 { + margin-left: 0 !important; + margin-right: 0 !important; + } + + .mx-sm-1 { + margin-left: 0.25rem !important; + margin-right: 0.25rem !important; + } + + .mx-sm-2 { + margin-left: 0.5rem !important; + margin-right: 0.5rem !important; + } + + .mx-sm-3 { + margin-left: 1rem !important; + margin-right: 1rem !important; + } + + .mx-sm-4 { + margin-left: 1.5rem !important; + margin-right: 1.5rem !important; + } + + .mx-sm-5 { + margin-left: 3rem !important; + margin-right: 3rem !important; + } + + .mx-sm-auto { + margin-left: auto !important; + margin-right: auto !important; + } + + .my-sm-0 { + margin-top: 0 !important; + margin-bottom: 0 !important; + } + + .my-sm-1 { + margin-top: 0.25rem !important; + margin-bottom: 0.25rem !important; + } + + .my-sm-2 { + margin-top: 0.5rem !important; + margin-bottom: 0.5rem !important; + } + + .my-sm-3 { + margin-top: 1rem !important; + margin-bottom: 1rem !important; + } + + .my-sm-4 { + margin-top: 1.5rem !important; + margin-bottom: 1.5rem !important; + } + + .my-sm-5 { + margin-top: 3rem !important; + margin-bottom: 3rem !important; + } + + .my-sm-auto { + margin-top: auto !important; + margin-bottom: auto !important; + } + + .mt-sm-0 { + margin-top: 0 !important; + } + + .mt-sm-1 { + margin-top: 0.25rem !important; + } + + .mt-sm-2 { + margin-top: 0.5rem !important; + } + + .mt-sm-3 { + margin-top: 1rem !important; + } + + .mt-sm-4 { + margin-top: 1.5rem !important; + } + + .mt-sm-5 { + margin-top: 3rem !important; + } + + .mt-sm-auto { + margin-top: auto !important; + } + + .me-sm-0 { + margin-left: 0 !important; + } + + .me-sm-1 { + margin-left: 0.25rem !important; + } + + .me-sm-2 { + margin-left: 0.5rem !important; + } + + .me-sm-3 { + margin-left: 1rem !important; + } + + .me-sm-4 { + margin-left: 1.5rem !important; + } + + .me-sm-5 { + margin-left: 3rem !important; + } + + .me-sm-auto { + margin-left: auto !important; + } + + .mb-sm-0 { + margin-bottom: 0 !important; + } + + .mb-sm-1 { + margin-bottom: 0.25rem !important; + } + + .mb-sm-2 { + margin-bottom: 0.5rem !important; + } + + .mb-sm-3 { + margin-bottom: 1rem !important; + } + + .mb-sm-4 { + margin-bottom: 1.5rem !important; + } + + .mb-sm-5 { + margin-bottom: 3rem !important; + } + + .mb-sm-auto { + margin-bottom: auto !important; + } + + .ms-sm-0 { + margin-right: 0 !important; + } + + .ms-sm-1 { + margin-right: 0.25rem !important; + } + + .ms-sm-2 { + margin-right: 0.5rem !important; + } + + .ms-sm-3 { + margin-right: 1rem !important; + } + + .ms-sm-4 { + margin-right: 1.5rem !important; + } + + .ms-sm-5 { + margin-right: 3rem !important; + } + + .ms-sm-auto { + margin-right: auto !important; + } + + .p-sm-0 { + padding: 0 !important; + } + + .p-sm-1 { + padding: 0.25rem !important; + } + + .p-sm-2 { + padding: 0.5rem !important; + } + + .p-sm-3 { + padding: 1rem !important; + } + + .p-sm-4 { + padding: 1.5rem !important; + } + + .p-sm-5 { + padding: 3rem !important; + } + + .px-sm-0 { + padding-left: 0 !important; + padding-right: 0 !important; + } + + .px-sm-1 { + padding-left: 0.25rem !important; + padding-right: 0.25rem !important; + } + + .px-sm-2 { + padding-left: 0.5rem !important; + padding-right: 0.5rem !important; + } + + .px-sm-3 { + padding-left: 1rem !important; + padding-right: 1rem !important; + } + + .px-sm-4 { + padding-left: 1.5rem !important; + padding-right: 1.5rem !important; + } + + .px-sm-5 { + padding-left: 3rem !important; + padding-right: 3rem !important; + } + + .py-sm-0 { + padding-top: 0 !important; + padding-bottom: 0 !important; + } + + .py-sm-1 { + padding-top: 0.25rem !important; + padding-bottom: 0.25rem !important; + } + + .py-sm-2 { + padding-top: 0.5rem !important; + padding-bottom: 0.5rem !important; + } + + .py-sm-3 { + padding-top: 1rem !important; + padding-bottom: 1rem !important; + } + + .py-sm-4 { + padding-top: 1.5rem !important; + padding-bottom: 1.5rem !important; + } + + .py-sm-5 { + padding-top: 3rem !important; + padding-bottom: 3rem !important; + } + + .pt-sm-0 { + padding-top: 0 !important; + } + + .pt-sm-1 { + padding-top: 0.25rem !important; + } + + .pt-sm-2 { + padding-top: 0.5rem !important; + } + + .pt-sm-3 { + padding-top: 1rem !important; + } + + .pt-sm-4 { + padding-top: 1.5rem !important; + } + + .pt-sm-5 { + padding-top: 3rem !important; + } + + .pe-sm-0 { + padding-left: 0 !important; + } + + .pe-sm-1 { + padding-left: 0.25rem !important; + } + + .pe-sm-2 { + padding-left: 0.5rem !important; + } + + .pe-sm-3 { + padding-left: 1rem !important; + } + + .pe-sm-4 { + padding-left: 1.5rem !important; + } + + .pe-sm-5 { + padding-left: 3rem !important; + } + + .pb-sm-0 { + padding-bottom: 0 !important; + } + + .pb-sm-1 { + padding-bottom: 0.25rem !important; + } + + .pb-sm-2 { + padding-bottom: 0.5rem !important; + } + + .pb-sm-3 { + padding-bottom: 1rem !important; + } + + .pb-sm-4 { + padding-bottom: 1.5rem !important; + } + + .pb-sm-5 { + padding-bottom: 3rem !important; + } + + .ps-sm-0 { + padding-right: 0 !important; + } + + .ps-sm-1 { + padding-right: 0.25rem !important; + } + + .ps-sm-2 { + padding-right: 0.5rem !important; + } + + .ps-sm-3 { + padding-right: 1rem !important; + } + + .ps-sm-4 { + padding-right: 1.5rem !important; + } + + .ps-sm-5 { + padding-right: 3rem !important; + } +} +@media (min-width: 768px) { + .d-md-inline { + display: inline !important; + } + + .d-md-inline-block { + display: inline-block !important; + } + + .d-md-block { + display: block !important; + } + + .d-md-grid { + display: grid !important; + } + + .d-md-table { + display: table !important; + } + + .d-md-table-row { + display: table-row !important; + } + + .d-md-table-cell { + display: table-cell !important; + } + + .d-md-flex { + display: flex !important; + } + + .d-md-inline-flex { + display: inline-flex !important; + } + + .d-md-none { + display: none !important; + } + + .flex-md-fill { + flex: 1 1 auto !important; + } + + .flex-md-row { + flex-direction: row !important; + } + + .flex-md-column { + flex-direction: column !important; + } + + .flex-md-row-reverse { + flex-direction: row-reverse !important; + } + + .flex-md-column-reverse { + flex-direction: column-reverse !important; + } + + .flex-md-grow-0 { + flex-grow: 0 !important; + } + + .flex-md-grow-1 { + flex-grow: 1 !important; + } + + .flex-md-shrink-0 { + flex-shrink: 0 !important; + } + + .flex-md-shrink-1 { + flex-shrink: 1 !important; + } + + .flex-md-wrap { + flex-wrap: wrap !important; + } + + .flex-md-nowrap { + flex-wrap: nowrap !important; + } + + .flex-md-wrap-reverse { + flex-wrap: wrap-reverse !important; + } + + .justify-content-md-start { + justify-content: flex-start !important; + } + + .justify-content-md-end { + justify-content: flex-end !important; + } + + .justify-content-md-center { + justify-content: center !important; + } + + .justify-content-md-between { + justify-content: space-between !important; + } + + .justify-content-md-around { + justify-content: space-around !important; + } + + .justify-content-md-evenly { + justify-content: space-evenly !important; + } + + .align-items-md-start { + align-items: flex-start !important; + } + + .align-items-md-end { + align-items: flex-end !important; + } + + .align-items-md-center { + align-items: center !important; + } + + .align-items-md-baseline { + align-items: baseline !important; + } + + .align-items-md-stretch { + align-items: stretch !important; + } + + .align-content-md-start { + align-content: flex-start !important; + } + + .align-content-md-end { + align-content: flex-end !important; + } + + .align-content-md-center { + align-content: center !important; + } + + .align-content-md-between { + align-content: space-between !important; + } + + .align-content-md-around { + align-content: space-around !important; + } + + .align-content-md-stretch { + align-content: stretch !important; + } + + .align-self-md-auto { + align-self: auto !important; + } + + .align-self-md-start { + align-self: flex-start !important; + } + + .align-self-md-end { + align-self: flex-end !important; + } + + .align-self-md-center { + align-self: center !important; + } + + .align-self-md-baseline { + align-self: baseline !important; + } + + .align-self-md-stretch { + align-self: stretch !important; + } + + .order-md-first { + order: -1 !important; + } + + .order-md-0 { + order: 0 !important; + } + + .order-md-1 { + order: 1 !important; + } + + .order-md-2 { + order: 2 !important; + } + + .order-md-3 { + order: 3 !important; + } + + .order-md-4 { + order: 4 !important; + } + + .order-md-5 { + order: 5 !important; + } + + .order-md-last { + order: 6 !important; + } + + .m-md-0 { + margin: 0 !important; + } + + .m-md-1 { + margin: 0.25rem !important; + } + + .m-md-2 { + margin: 0.5rem !important; + } + + .m-md-3 { + margin: 1rem !important; + } + + .m-md-4 { + margin: 1.5rem !important; + } + + .m-md-5 { + margin: 3rem !important; + } + + .m-md-auto { + margin: auto !important; + } + + .mx-md-0 { + margin-left: 0 !important; + margin-right: 0 !important; + } + + .mx-md-1 { + margin-left: 0.25rem !important; + margin-right: 0.25rem !important; + } + + .mx-md-2 { + margin-left: 0.5rem !important; + margin-right: 0.5rem !important; + } + + .mx-md-3 { + margin-left: 1rem !important; + margin-right: 1rem !important; + } + + .mx-md-4 { + margin-left: 1.5rem !important; + margin-right: 1.5rem !important; + } + + .mx-md-5 { + margin-left: 3rem !important; + margin-right: 3rem !important; + } + + .mx-md-auto { + margin-left: auto !important; + margin-right: auto !important; + } + + .my-md-0 { + margin-top: 0 !important; + margin-bottom: 0 !important; + } + + .my-md-1 { + margin-top: 0.25rem !important; + margin-bottom: 0.25rem !important; + } + + .my-md-2 { + margin-top: 0.5rem !important; + margin-bottom: 0.5rem !important; + } + + .my-md-3 { + margin-top: 1rem !important; + margin-bottom: 1rem !important; + } + + .my-md-4 { + margin-top: 1.5rem !important; + margin-bottom: 1.5rem !important; + } + + .my-md-5 { + margin-top: 3rem !important; + margin-bottom: 3rem !important; + } + + .my-md-auto { + margin-top: auto !important; + margin-bottom: auto !important; + } + + .mt-md-0 { + margin-top: 0 !important; + } + + .mt-md-1 { + margin-top: 0.25rem !important; + } + + .mt-md-2 { + margin-top: 0.5rem !important; + } + + .mt-md-3 { + margin-top: 1rem !important; + } + + .mt-md-4 { + margin-top: 1.5rem !important; + } + + .mt-md-5 { + margin-top: 3rem !important; + } + + .mt-md-auto { + margin-top: auto !important; + } + + .me-md-0 { + margin-left: 0 !important; + } + + .me-md-1 { + margin-left: 0.25rem !important; + } + + .me-md-2 { + margin-left: 0.5rem !important; + } + + .me-md-3 { + margin-left: 1rem !important; + } + + .me-md-4 { + margin-left: 1.5rem !important; + } + + .me-md-5 { + margin-left: 3rem !important; + } + + .me-md-auto { + margin-left: auto !important; + } + + .mb-md-0 { + margin-bottom: 0 !important; + } + + .mb-md-1 { + margin-bottom: 0.25rem !important; + } + + .mb-md-2 { + margin-bottom: 0.5rem !important; + } + + .mb-md-3 { + margin-bottom: 1rem !important; + } + + .mb-md-4 { + margin-bottom: 1.5rem !important; + } + + .mb-md-5 { + margin-bottom: 3rem !important; + } + + .mb-md-auto { + margin-bottom: auto !important; + } + + .ms-md-0 { + margin-right: 0 !important; + } + + .ms-md-1 { + margin-right: 0.25rem !important; + } + + .ms-md-2 { + margin-right: 0.5rem !important; + } + + .ms-md-3 { + margin-right: 1rem !important; + } + + .ms-md-4 { + margin-right: 1.5rem !important; + } + + .ms-md-5 { + margin-right: 3rem !important; + } + + .ms-md-auto { + margin-right: auto !important; + } + + .p-md-0 { + padding: 0 !important; + } + + .p-md-1 { + padding: 0.25rem !important; + } + + .p-md-2 { + padding: 0.5rem !important; + } + + .p-md-3 { + padding: 1rem !important; + } + + .p-md-4 { + padding: 1.5rem !important; + } + + .p-md-5 { + padding: 3rem !important; + } + + .px-md-0 { + padding-left: 0 !important; + padding-right: 0 !important; + } + + .px-md-1 { + padding-left: 0.25rem !important; + padding-right: 0.25rem !important; + } + + .px-md-2 { + padding-left: 0.5rem !important; + padding-right: 0.5rem !important; + } + + .px-md-3 { + padding-left: 1rem !important; + padding-right: 1rem !important; + } + + .px-md-4 { + padding-left: 1.5rem !important; + padding-right: 1.5rem !important; + } + + .px-md-5 { + padding-left: 3rem !important; + padding-right: 3rem !important; + } + + .py-md-0 { + padding-top: 0 !important; + padding-bottom: 0 !important; + } + + .py-md-1 { + padding-top: 0.25rem !important; + padding-bottom: 0.25rem !important; + } + + .py-md-2 { + padding-top: 0.5rem !important; + padding-bottom: 0.5rem !important; + } + + .py-md-3 { + padding-top: 1rem !important; + padding-bottom: 1rem !important; + } + + .py-md-4 { + padding-top: 1.5rem !important; + padding-bottom: 1.5rem !important; + } + + .py-md-5 { + padding-top: 3rem !important; + padding-bottom: 3rem !important; + } + + .pt-md-0 { + padding-top: 0 !important; + } + + .pt-md-1 { + padding-top: 0.25rem !important; + } + + .pt-md-2 { + padding-top: 0.5rem !important; + } + + .pt-md-3 { + padding-top: 1rem !important; + } + + .pt-md-4 { + padding-top: 1.5rem !important; + } + + .pt-md-5 { + padding-top: 3rem !important; + } + + .pe-md-0 { + padding-left: 0 !important; + } + + .pe-md-1 { + padding-left: 0.25rem !important; + } + + .pe-md-2 { + padding-left: 0.5rem !important; + } + + .pe-md-3 { + padding-left: 1rem !important; + } + + .pe-md-4 { + padding-left: 1.5rem !important; + } + + .pe-md-5 { + padding-left: 3rem !important; + } + + .pb-md-0 { + padding-bottom: 0 !important; + } + + .pb-md-1 { + padding-bottom: 0.25rem !important; + } + + .pb-md-2 { + padding-bottom: 0.5rem !important; + } + + .pb-md-3 { + padding-bottom: 1rem !important; + } + + .pb-md-4 { + padding-bottom: 1.5rem !important; + } + + .pb-md-5 { + padding-bottom: 3rem !important; + } + + .ps-md-0 { + padding-right: 0 !important; + } + + .ps-md-1 { + padding-right: 0.25rem !important; + } + + .ps-md-2 { + padding-right: 0.5rem !important; + } + + .ps-md-3 { + padding-right: 1rem !important; + } + + .ps-md-4 { + padding-right: 1.5rem !important; + } + + .ps-md-5 { + padding-right: 3rem !important; + } +} +@media (min-width: 992px) { + .d-lg-inline { + display: inline !important; + } + + .d-lg-inline-block { + display: inline-block !important; + } + + .d-lg-block { + display: block !important; + } + + .d-lg-grid { + display: grid !important; + } + + .d-lg-table { + display: table !important; + } + + .d-lg-table-row { + display: table-row !important; + } + + .d-lg-table-cell { + display: table-cell !important; + } + + .d-lg-flex { + display: flex !important; + } + + .d-lg-inline-flex { + display: inline-flex !important; + } + + .d-lg-none { + display: none !important; + } + + .flex-lg-fill { + flex: 1 1 auto !important; + } + + .flex-lg-row { + flex-direction: row !important; + } + + .flex-lg-column { + flex-direction: column !important; + } + + .flex-lg-row-reverse { + flex-direction: row-reverse !important; + } + + .flex-lg-column-reverse { + flex-direction: column-reverse !important; + } + + .flex-lg-grow-0 { + flex-grow: 0 !important; + } + + .flex-lg-grow-1 { + flex-grow: 1 !important; + } + + .flex-lg-shrink-0 { + flex-shrink: 0 !important; + } + + .flex-lg-shrink-1 { + flex-shrink: 1 !important; + } + + .flex-lg-wrap { + flex-wrap: wrap !important; + } + + .flex-lg-nowrap { + flex-wrap: nowrap !important; + } + + .flex-lg-wrap-reverse { + flex-wrap: wrap-reverse !important; + } + + .justify-content-lg-start { + justify-content: flex-start !important; + } + + .justify-content-lg-end { + justify-content: flex-end !important; + } + + .justify-content-lg-center { + justify-content: center !important; + } + + .justify-content-lg-between { + justify-content: space-between !important; + } + + .justify-content-lg-around { + justify-content: space-around !important; + } + + .justify-content-lg-evenly { + justify-content: space-evenly !important; + } + + .align-items-lg-start { + align-items: flex-start !important; + } + + .align-items-lg-end { + align-items: flex-end !important; + } + + .align-items-lg-center { + align-items: center !important; + } + + .align-items-lg-baseline { + align-items: baseline !important; + } + + .align-items-lg-stretch { + align-items: stretch !important; + } + + .align-content-lg-start { + align-content: flex-start !important; + } + + .align-content-lg-end { + align-content: flex-end !important; + } + + .align-content-lg-center { + align-content: center !important; + } + + .align-content-lg-between { + align-content: space-between !important; + } + + .align-content-lg-around { + align-content: space-around !important; + } + + .align-content-lg-stretch { + align-content: stretch !important; + } + + .align-self-lg-auto { + align-self: auto !important; + } + + .align-self-lg-start { + align-self: flex-start !important; + } + + .align-self-lg-end { + align-self: flex-end !important; + } + + .align-self-lg-center { + align-self: center !important; + } + + .align-self-lg-baseline { + align-self: baseline !important; + } + + .align-self-lg-stretch { + align-self: stretch !important; + } + + .order-lg-first { + order: -1 !important; + } + + .order-lg-0 { + order: 0 !important; + } + + .order-lg-1 { + order: 1 !important; + } + + .order-lg-2 { + order: 2 !important; + } + + .order-lg-3 { + order: 3 !important; + } + + .order-lg-4 { + order: 4 !important; + } + + .order-lg-5 { + order: 5 !important; + } + + .order-lg-last { + order: 6 !important; + } + + .m-lg-0 { + margin: 0 !important; + } + + .m-lg-1 { + margin: 0.25rem !important; + } + + .m-lg-2 { + margin: 0.5rem !important; + } + + .m-lg-3 { + margin: 1rem !important; + } + + .m-lg-4 { + margin: 1.5rem !important; + } + + .m-lg-5 { + margin: 3rem !important; + } + + .m-lg-auto { + margin: auto !important; + } + + .mx-lg-0 { + margin-left: 0 !important; + margin-right: 0 !important; + } + + .mx-lg-1 { + margin-left: 0.25rem !important; + margin-right: 0.25rem !important; + } + + .mx-lg-2 { + margin-left: 0.5rem !important; + margin-right: 0.5rem !important; + } + + .mx-lg-3 { + margin-left: 1rem !important; + margin-right: 1rem !important; + } + + .mx-lg-4 { + margin-left: 1.5rem !important; + margin-right: 1.5rem !important; + } + + .mx-lg-5 { + margin-left: 3rem !important; + margin-right: 3rem !important; + } + + .mx-lg-auto { + margin-left: auto !important; + margin-right: auto !important; + } + + .my-lg-0 { + margin-top: 0 !important; + margin-bottom: 0 !important; + } + + .my-lg-1 { + margin-top: 0.25rem !important; + margin-bottom: 0.25rem !important; + } + + .my-lg-2 { + margin-top: 0.5rem !important; + margin-bottom: 0.5rem !important; + } + + .my-lg-3 { + margin-top: 1rem !important; + margin-bottom: 1rem !important; + } + + .my-lg-4 { + margin-top: 1.5rem !important; + margin-bottom: 1.5rem !important; + } + + .my-lg-5 { + margin-top: 3rem !important; + margin-bottom: 3rem !important; + } + + .my-lg-auto { + margin-top: auto !important; + margin-bottom: auto !important; + } + + .mt-lg-0 { + margin-top: 0 !important; + } + + .mt-lg-1 { + margin-top: 0.25rem !important; + } + + .mt-lg-2 { + margin-top: 0.5rem !important; + } + + .mt-lg-3 { + margin-top: 1rem !important; + } + + .mt-lg-4 { + margin-top: 1.5rem !important; + } + + .mt-lg-5 { + margin-top: 3rem !important; + } + + .mt-lg-auto { + margin-top: auto !important; + } + + .me-lg-0 { + margin-left: 0 !important; + } + + .me-lg-1 { + margin-left: 0.25rem !important; + } + + .me-lg-2 { + margin-left: 0.5rem !important; + } + + .me-lg-3 { + margin-left: 1rem !important; + } + + .me-lg-4 { + margin-left: 1.5rem !important; + } + + .me-lg-5 { + margin-left: 3rem !important; + } + + .me-lg-auto { + margin-left: auto !important; + } + + .mb-lg-0 { + margin-bottom: 0 !important; + } + + .mb-lg-1 { + margin-bottom: 0.25rem !important; + } + + .mb-lg-2 { + margin-bottom: 0.5rem !important; + } + + .mb-lg-3 { + margin-bottom: 1rem !important; + } + + .mb-lg-4 { + margin-bottom: 1.5rem !important; + } + + .mb-lg-5 { + margin-bottom: 3rem !important; + } + + .mb-lg-auto { + margin-bottom: auto !important; + } + + .ms-lg-0 { + margin-right: 0 !important; + } + + .ms-lg-1 { + margin-right: 0.25rem !important; + } + + .ms-lg-2 { + margin-right: 0.5rem !important; + } + + .ms-lg-3 { + margin-right: 1rem !important; + } + + .ms-lg-4 { + margin-right: 1.5rem !important; + } + + .ms-lg-5 { + margin-right: 3rem !important; + } + + .ms-lg-auto { + margin-right: auto !important; + } + + .p-lg-0 { + padding: 0 !important; + } + + .p-lg-1 { + padding: 0.25rem !important; + } + + .p-lg-2 { + padding: 0.5rem !important; + } + + .p-lg-3 { + padding: 1rem !important; + } + + .p-lg-4 { + padding: 1.5rem !important; + } + + .p-lg-5 { + padding: 3rem !important; + } + + .px-lg-0 { + padding-left: 0 !important; + padding-right: 0 !important; + } + + .px-lg-1 { + padding-left: 0.25rem !important; + padding-right: 0.25rem !important; + } + + .px-lg-2 { + padding-left: 0.5rem !important; + padding-right: 0.5rem !important; + } + + .px-lg-3 { + padding-left: 1rem !important; + padding-right: 1rem !important; + } + + .px-lg-4 { + padding-left: 1.5rem !important; + padding-right: 1.5rem !important; + } + + .px-lg-5 { + padding-left: 3rem !important; + padding-right: 3rem !important; + } + + .py-lg-0 { + padding-top: 0 !important; + padding-bottom: 0 !important; + } + + .py-lg-1 { + padding-top: 0.25rem !important; + padding-bottom: 0.25rem !important; + } + + .py-lg-2 { + padding-top: 0.5rem !important; + padding-bottom: 0.5rem !important; + } + + .py-lg-3 { + padding-top: 1rem !important; + padding-bottom: 1rem !important; + } + + .py-lg-4 { + padding-top: 1.5rem !important; + padding-bottom: 1.5rem !important; + } + + .py-lg-5 { + padding-top: 3rem !important; + padding-bottom: 3rem !important; + } + + .pt-lg-0 { + padding-top: 0 !important; + } + + .pt-lg-1 { + padding-top: 0.25rem !important; + } + + .pt-lg-2 { + padding-top: 0.5rem !important; + } + + .pt-lg-3 { + padding-top: 1rem !important; + } + + .pt-lg-4 { + padding-top: 1.5rem !important; + } + + .pt-lg-5 { + padding-top: 3rem !important; + } + + .pe-lg-0 { + padding-left: 0 !important; + } + + .pe-lg-1 { + padding-left: 0.25rem !important; + } + + .pe-lg-2 { + padding-left: 0.5rem !important; + } + + .pe-lg-3 { + padding-left: 1rem !important; + } + + .pe-lg-4 { + padding-left: 1.5rem !important; + } + + .pe-lg-5 { + padding-left: 3rem !important; + } + + .pb-lg-0 { + padding-bottom: 0 !important; + } + + .pb-lg-1 { + padding-bottom: 0.25rem !important; + } + + .pb-lg-2 { + padding-bottom: 0.5rem !important; + } + + .pb-lg-3 { + padding-bottom: 1rem !important; + } + + .pb-lg-4 { + padding-bottom: 1.5rem !important; + } + + .pb-lg-5 { + padding-bottom: 3rem !important; + } + + .ps-lg-0 { + padding-right: 0 !important; + } + + .ps-lg-1 { + padding-right: 0.25rem !important; + } + + .ps-lg-2 { + padding-right: 0.5rem !important; + } + + .ps-lg-3 { + padding-right: 1rem !important; + } + + .ps-lg-4 { + padding-right: 1.5rem !important; + } + + .ps-lg-5 { + padding-right: 3rem !important; + } +} +@media (min-width: 1200px) { + .d-xl-inline { + display: inline !important; + } + + .d-xl-inline-block { + display: inline-block !important; + } + + .d-xl-block { + display: block !important; + } + + .d-xl-grid { + display: grid !important; + } + + .d-xl-table { + display: table !important; + } + + .d-xl-table-row { + display: table-row !important; + } + + .d-xl-table-cell { + display: table-cell !important; + } + + .d-xl-flex { + display: flex !important; + } + + .d-xl-inline-flex { + display: inline-flex !important; + } + + .d-xl-none { + display: none !important; + } + + .flex-xl-fill { + flex: 1 1 auto !important; + } + + .flex-xl-row { + flex-direction: row !important; + } + + .flex-xl-column { + flex-direction: column !important; + } + + .flex-xl-row-reverse { + flex-direction: row-reverse !important; + } + + .flex-xl-column-reverse { + flex-direction: column-reverse !important; + } + + .flex-xl-grow-0 { + flex-grow: 0 !important; + } + + .flex-xl-grow-1 { + flex-grow: 1 !important; + } + + .flex-xl-shrink-0 { + flex-shrink: 0 !important; + } + + .flex-xl-shrink-1 { + flex-shrink: 1 !important; + } + + .flex-xl-wrap { + flex-wrap: wrap !important; + } + + .flex-xl-nowrap { + flex-wrap: nowrap !important; + } + + .flex-xl-wrap-reverse { + flex-wrap: wrap-reverse !important; + } + + .justify-content-xl-start { + justify-content: flex-start !important; + } + + .justify-content-xl-end { + justify-content: flex-end !important; + } + + .justify-content-xl-center { + justify-content: center !important; + } + + .justify-content-xl-between { + justify-content: space-between !important; + } + + .justify-content-xl-around { + justify-content: space-around !important; + } + + .justify-content-xl-evenly { + justify-content: space-evenly !important; + } + + .align-items-xl-start { + align-items: flex-start !important; + } + + .align-items-xl-end { + align-items: flex-end !important; + } + + .align-items-xl-center { + align-items: center !important; + } + + .align-items-xl-baseline { + align-items: baseline !important; + } + + .align-items-xl-stretch { + align-items: stretch !important; + } + + .align-content-xl-start { + align-content: flex-start !important; + } + + .align-content-xl-end { + align-content: flex-end !important; + } + + .align-content-xl-center { + align-content: center !important; + } + + .align-content-xl-between { + align-content: space-between !important; + } + + .align-content-xl-around { + align-content: space-around !important; + } + + .align-content-xl-stretch { + align-content: stretch !important; + } + + .align-self-xl-auto { + align-self: auto !important; + } + + .align-self-xl-start { + align-self: flex-start !important; + } + + .align-self-xl-end { + align-self: flex-end !important; + } + + .align-self-xl-center { + align-self: center !important; + } + + .align-self-xl-baseline { + align-self: baseline !important; + } + + .align-self-xl-stretch { + align-self: stretch !important; + } + + .order-xl-first { + order: -1 !important; + } + + .order-xl-0 { + order: 0 !important; + } + + .order-xl-1 { + order: 1 !important; + } + + .order-xl-2 { + order: 2 !important; + } + + .order-xl-3 { + order: 3 !important; + } + + .order-xl-4 { + order: 4 !important; + } + + .order-xl-5 { + order: 5 !important; + } + + .order-xl-last { + order: 6 !important; + } + + .m-xl-0 { + margin: 0 !important; + } + + .m-xl-1 { + margin: 0.25rem !important; + } + + .m-xl-2 { + margin: 0.5rem !important; + } + + .m-xl-3 { + margin: 1rem !important; + } + + .m-xl-4 { + margin: 1.5rem !important; + } + + .m-xl-5 { + margin: 3rem !important; + } + + .m-xl-auto { + margin: auto !important; + } + + .mx-xl-0 { + margin-left: 0 !important; + margin-right: 0 !important; + } + + .mx-xl-1 { + margin-left: 0.25rem !important; + margin-right: 0.25rem !important; + } + + .mx-xl-2 { + margin-left: 0.5rem !important; + margin-right: 0.5rem !important; + } + + .mx-xl-3 { + margin-left: 1rem !important; + margin-right: 1rem !important; + } + + .mx-xl-4 { + margin-left: 1.5rem !important; + margin-right: 1.5rem !important; + } + + .mx-xl-5 { + margin-left: 3rem !important; + margin-right: 3rem !important; + } + + .mx-xl-auto { + margin-left: auto !important; + margin-right: auto !important; + } + + .my-xl-0 { + margin-top: 0 !important; + margin-bottom: 0 !important; + } + + .my-xl-1 { + margin-top: 0.25rem !important; + margin-bottom: 0.25rem !important; + } + + .my-xl-2 { + margin-top: 0.5rem !important; + margin-bottom: 0.5rem !important; + } + + .my-xl-3 { + margin-top: 1rem !important; + margin-bottom: 1rem !important; + } + + .my-xl-4 { + margin-top: 1.5rem !important; + margin-bottom: 1.5rem !important; + } + + .my-xl-5 { + margin-top: 3rem !important; + margin-bottom: 3rem !important; + } + + .my-xl-auto { + margin-top: auto !important; + margin-bottom: auto !important; + } + + .mt-xl-0 { + margin-top: 0 !important; + } + + .mt-xl-1 { + margin-top: 0.25rem !important; + } + + .mt-xl-2 { + margin-top: 0.5rem !important; + } + + .mt-xl-3 { + margin-top: 1rem !important; + } + + .mt-xl-4 { + margin-top: 1.5rem !important; + } + + .mt-xl-5 { + margin-top: 3rem !important; + } + + .mt-xl-auto { + margin-top: auto !important; + } + + .me-xl-0 { + margin-left: 0 !important; + } + + .me-xl-1 { + margin-left: 0.25rem !important; + } + + .me-xl-2 { + margin-left: 0.5rem !important; + } + + .me-xl-3 { + margin-left: 1rem !important; + } + + .me-xl-4 { + margin-left: 1.5rem !important; + } + + .me-xl-5 { + margin-left: 3rem !important; + } + + .me-xl-auto { + margin-left: auto !important; + } + + .mb-xl-0 { + margin-bottom: 0 !important; + } + + .mb-xl-1 { + margin-bottom: 0.25rem !important; + } + + .mb-xl-2 { + margin-bottom: 0.5rem !important; + } + + .mb-xl-3 { + margin-bottom: 1rem !important; + } + + .mb-xl-4 { + margin-bottom: 1.5rem !important; + } + + .mb-xl-5 { + margin-bottom: 3rem !important; + } + + .mb-xl-auto { + margin-bottom: auto !important; + } + + .ms-xl-0 { + margin-right: 0 !important; + } + + .ms-xl-1 { + margin-right: 0.25rem !important; + } + + .ms-xl-2 { + margin-right: 0.5rem !important; + } + + .ms-xl-3 { + margin-right: 1rem !important; + } + + .ms-xl-4 { + margin-right: 1.5rem !important; + } + + .ms-xl-5 { + margin-right: 3rem !important; + } + + .ms-xl-auto { + margin-right: auto !important; + } + + .p-xl-0 { + padding: 0 !important; + } + + .p-xl-1 { + padding: 0.25rem !important; + } + + .p-xl-2 { + padding: 0.5rem !important; + } + + .p-xl-3 { + padding: 1rem !important; + } + + .p-xl-4 { + padding: 1.5rem !important; + } + + .p-xl-5 { + padding: 3rem !important; + } + + .px-xl-0 { + padding-left: 0 !important; + padding-right: 0 !important; + } + + .px-xl-1 { + padding-left: 0.25rem !important; + padding-right: 0.25rem !important; + } + + .px-xl-2 { + padding-left: 0.5rem !important; + padding-right: 0.5rem !important; + } + + .px-xl-3 { + padding-left: 1rem !important; + padding-right: 1rem !important; + } + + .px-xl-4 { + padding-left: 1.5rem !important; + padding-right: 1.5rem !important; + } + + .px-xl-5 { + padding-left: 3rem !important; + padding-right: 3rem !important; + } + + .py-xl-0 { + padding-top: 0 !important; + padding-bottom: 0 !important; + } + + .py-xl-1 { + padding-top: 0.25rem !important; + padding-bottom: 0.25rem !important; + } + + .py-xl-2 { + padding-top: 0.5rem !important; + padding-bottom: 0.5rem !important; + } + + .py-xl-3 { + padding-top: 1rem !important; + padding-bottom: 1rem !important; + } + + .py-xl-4 { + padding-top: 1.5rem !important; + padding-bottom: 1.5rem !important; + } + + .py-xl-5 { + padding-top: 3rem !important; + padding-bottom: 3rem !important; + } + + .pt-xl-0 { + padding-top: 0 !important; + } + + .pt-xl-1 { + padding-top: 0.25rem !important; + } + + .pt-xl-2 { + padding-top: 0.5rem !important; + } + + .pt-xl-3 { + padding-top: 1rem !important; + } + + .pt-xl-4 { + padding-top: 1.5rem !important; + } + + .pt-xl-5 { + padding-top: 3rem !important; + } + + .pe-xl-0 { + padding-left: 0 !important; + } + + .pe-xl-1 { + padding-left: 0.25rem !important; + } + + .pe-xl-2 { + padding-left: 0.5rem !important; + } + + .pe-xl-3 { + padding-left: 1rem !important; + } + + .pe-xl-4 { + padding-left: 1.5rem !important; + } + + .pe-xl-5 { + padding-left: 3rem !important; + } + + .pb-xl-0 { + padding-bottom: 0 !important; + } + + .pb-xl-1 { + padding-bottom: 0.25rem !important; + } + + .pb-xl-2 { + padding-bottom: 0.5rem !important; + } + + .pb-xl-3 { + padding-bottom: 1rem !important; + } + + .pb-xl-4 { + padding-bottom: 1.5rem !important; + } + + .pb-xl-5 { + padding-bottom: 3rem !important; + } + + .ps-xl-0 { + padding-right: 0 !important; + } + + .ps-xl-1 { + padding-right: 0.25rem !important; + } + + .ps-xl-2 { + padding-right: 0.5rem !important; + } + + .ps-xl-3 { + padding-right: 1rem !important; + } + + .ps-xl-4 { + padding-right: 1.5rem !important; + } + + .ps-xl-5 { + padding-right: 3rem !important; + } +} +@media (min-width: 1400px) { + .d-xxl-inline { + display: inline !important; + } + + .d-xxl-inline-block { + display: inline-block !important; + } + + .d-xxl-block { + display: block !important; + } + + .d-xxl-grid { + display: grid !important; + } + + .d-xxl-table { + display: table !important; + } + + .d-xxl-table-row { + display: table-row !important; + } + + .d-xxl-table-cell { + display: table-cell !important; + } + + .d-xxl-flex { + display: flex !important; + } + + .d-xxl-inline-flex { + display: inline-flex !important; + } + + .d-xxl-none { + display: none !important; + } + + .flex-xxl-fill { + flex: 1 1 auto !important; + } + + .flex-xxl-row { + flex-direction: row !important; + } + + .flex-xxl-column { + flex-direction: column !important; + } + + .flex-xxl-row-reverse { + flex-direction: row-reverse !important; + } + + .flex-xxl-column-reverse { + flex-direction: column-reverse !important; + } + + .flex-xxl-grow-0 { + flex-grow: 0 !important; + } + + .flex-xxl-grow-1 { + flex-grow: 1 !important; + } + + .flex-xxl-shrink-0 { + flex-shrink: 0 !important; + } + + .flex-xxl-shrink-1 { + flex-shrink: 1 !important; + } + + .flex-xxl-wrap { + flex-wrap: wrap !important; + } + + .flex-xxl-nowrap { + flex-wrap: nowrap !important; + } + + .flex-xxl-wrap-reverse { + flex-wrap: wrap-reverse !important; + } + + .justify-content-xxl-start { + justify-content: flex-start !important; + } + + .justify-content-xxl-end { + justify-content: flex-end !important; + } + + .justify-content-xxl-center { + justify-content: center !important; + } + + .justify-content-xxl-between { + justify-content: space-between !important; + } + + .justify-content-xxl-around { + justify-content: space-around !important; + } + + .justify-content-xxl-evenly { + justify-content: space-evenly !important; + } + + .align-items-xxl-start { + align-items: flex-start !important; + } + + .align-items-xxl-end { + align-items: flex-end !important; + } + + .align-items-xxl-center { + align-items: center !important; + } + + .align-items-xxl-baseline { + align-items: baseline !important; + } + + .align-items-xxl-stretch { + align-items: stretch !important; + } + + .align-content-xxl-start { + align-content: flex-start !important; + } + + .align-content-xxl-end { + align-content: flex-end !important; + } + + .align-content-xxl-center { + align-content: center !important; + } + + .align-content-xxl-between { + align-content: space-between !important; + } + + .align-content-xxl-around { + align-content: space-around !important; + } + + .align-content-xxl-stretch { + align-content: stretch !important; + } + + .align-self-xxl-auto { + align-self: auto !important; + } + + .align-self-xxl-start { + align-self: flex-start !important; + } + + .align-self-xxl-end { + align-self: flex-end !important; + } + + .align-self-xxl-center { + align-self: center !important; + } + + .align-self-xxl-baseline { + align-self: baseline !important; + } + + .align-self-xxl-stretch { + align-self: stretch !important; + } + + .order-xxl-first { + order: -1 !important; + } + + .order-xxl-0 { + order: 0 !important; + } + + .order-xxl-1 { + order: 1 !important; + } + + .order-xxl-2 { + order: 2 !important; + } + + .order-xxl-3 { + order: 3 !important; + } + + .order-xxl-4 { + order: 4 !important; + } + + .order-xxl-5 { + order: 5 !important; + } + + .order-xxl-last { + order: 6 !important; + } + + .m-xxl-0 { + margin: 0 !important; + } + + .m-xxl-1 { + margin: 0.25rem !important; + } + + .m-xxl-2 { + margin: 0.5rem !important; + } + + .m-xxl-3 { + margin: 1rem !important; + } + + .m-xxl-4 { + margin: 1.5rem !important; + } + + .m-xxl-5 { + margin: 3rem !important; + } + + .m-xxl-auto { + margin: auto !important; + } + + .mx-xxl-0 { + margin-left: 0 !important; + margin-right: 0 !important; + } + + .mx-xxl-1 { + margin-left: 0.25rem !important; + margin-right: 0.25rem !important; + } + + .mx-xxl-2 { + margin-left: 0.5rem !important; + margin-right: 0.5rem !important; + } + + .mx-xxl-3 { + margin-left: 1rem !important; + margin-right: 1rem !important; + } + + .mx-xxl-4 { + margin-left: 1.5rem !important; + margin-right: 1.5rem !important; + } + + .mx-xxl-5 { + margin-left: 3rem !important; + margin-right: 3rem !important; + } + + .mx-xxl-auto { + margin-left: auto !important; + margin-right: auto !important; + } + + .my-xxl-0 { + margin-top: 0 !important; + margin-bottom: 0 !important; + } + + .my-xxl-1 { + margin-top: 0.25rem !important; + margin-bottom: 0.25rem !important; + } + + .my-xxl-2 { + margin-top: 0.5rem !important; + margin-bottom: 0.5rem !important; + } + + .my-xxl-3 { + margin-top: 1rem !important; + margin-bottom: 1rem !important; + } + + .my-xxl-4 { + margin-top: 1.5rem !important; + margin-bottom: 1.5rem !important; + } + + .my-xxl-5 { + margin-top: 3rem !important; + margin-bottom: 3rem !important; + } + + .my-xxl-auto { + margin-top: auto !important; + margin-bottom: auto !important; + } + + .mt-xxl-0 { + margin-top: 0 !important; + } + + .mt-xxl-1 { + margin-top: 0.25rem !important; + } + + .mt-xxl-2 { + margin-top: 0.5rem !important; + } + + .mt-xxl-3 { + margin-top: 1rem !important; + } + + .mt-xxl-4 { + margin-top: 1.5rem !important; + } + + .mt-xxl-5 { + margin-top: 3rem !important; + } + + .mt-xxl-auto { + margin-top: auto !important; + } + + .me-xxl-0 { + margin-left: 0 !important; + } + + .me-xxl-1 { + margin-left: 0.25rem !important; + } + + .me-xxl-2 { + margin-left: 0.5rem !important; + } + + .me-xxl-3 { + margin-left: 1rem !important; + } + + .me-xxl-4 { + margin-left: 1.5rem !important; + } + + .me-xxl-5 { + margin-left: 3rem !important; + } + + .me-xxl-auto { + margin-left: auto !important; + } + + .mb-xxl-0 { + margin-bottom: 0 !important; + } + + .mb-xxl-1 { + margin-bottom: 0.25rem !important; + } + + .mb-xxl-2 { + margin-bottom: 0.5rem !important; + } + + .mb-xxl-3 { + margin-bottom: 1rem !important; + } + + .mb-xxl-4 { + margin-bottom: 1.5rem !important; + } + + .mb-xxl-5 { + margin-bottom: 3rem !important; + } + + .mb-xxl-auto { + margin-bottom: auto !important; + } + + .ms-xxl-0 { + margin-right: 0 !important; + } + + .ms-xxl-1 { + margin-right: 0.25rem !important; + } + + .ms-xxl-2 { + margin-right: 0.5rem !important; + } + + .ms-xxl-3 { + margin-right: 1rem !important; + } + + .ms-xxl-4 { + margin-right: 1.5rem !important; + } + + .ms-xxl-5 { + margin-right: 3rem !important; + } + + .ms-xxl-auto { + margin-right: auto !important; + } + + .p-xxl-0 { + padding: 0 !important; + } + + .p-xxl-1 { + padding: 0.25rem !important; + } + + .p-xxl-2 { + padding: 0.5rem !important; + } + + .p-xxl-3 { + padding: 1rem !important; + } + + .p-xxl-4 { + padding: 1.5rem !important; + } + + .p-xxl-5 { + padding: 3rem !important; + } + + .px-xxl-0 { + padding-left: 0 !important; + padding-right: 0 !important; + } + + .px-xxl-1 { + padding-left: 0.25rem !important; + padding-right: 0.25rem !important; + } + + .px-xxl-2 { + padding-left: 0.5rem !important; + padding-right: 0.5rem !important; + } + + .px-xxl-3 { + padding-left: 1rem !important; + padding-right: 1rem !important; + } + + .px-xxl-4 { + padding-left: 1.5rem !important; + padding-right: 1.5rem !important; + } + + .px-xxl-5 { + padding-left: 3rem !important; + padding-right: 3rem !important; + } + + .py-xxl-0 { + padding-top: 0 !important; + padding-bottom: 0 !important; + } + + .py-xxl-1 { + padding-top: 0.25rem !important; + padding-bottom: 0.25rem !important; + } + + .py-xxl-2 { + padding-top: 0.5rem !important; + padding-bottom: 0.5rem !important; + } + + .py-xxl-3 { + padding-top: 1rem !important; + padding-bottom: 1rem !important; + } + + .py-xxl-4 { + padding-top: 1.5rem !important; + padding-bottom: 1.5rem !important; + } + + .py-xxl-5 { + padding-top: 3rem !important; + padding-bottom: 3rem !important; + } + + .pt-xxl-0 { + padding-top: 0 !important; + } + + .pt-xxl-1 { + padding-top: 0.25rem !important; + } + + .pt-xxl-2 { + padding-top: 0.5rem !important; + } + + .pt-xxl-3 { + padding-top: 1rem !important; + } + + .pt-xxl-4 { + padding-top: 1.5rem !important; + } + + .pt-xxl-5 { + padding-top: 3rem !important; + } + + .pe-xxl-0 { + padding-left: 0 !important; + } + + .pe-xxl-1 { + padding-left: 0.25rem !important; + } + + .pe-xxl-2 { + padding-left: 0.5rem !important; + } + + .pe-xxl-3 { + padding-left: 1rem !important; + } + + .pe-xxl-4 { + padding-left: 1.5rem !important; + } + + .pe-xxl-5 { + padding-left: 3rem !important; + } + + .pb-xxl-0 { + padding-bottom: 0 !important; + } + + .pb-xxl-1 { + padding-bottom: 0.25rem !important; + } + + .pb-xxl-2 { + padding-bottom: 0.5rem !important; + } + + .pb-xxl-3 { + padding-bottom: 1rem !important; + } + + .pb-xxl-4 { + padding-bottom: 1.5rem !important; + } + + .pb-xxl-5 { + padding-bottom: 3rem !important; + } + + .ps-xxl-0 { + padding-right: 0 !important; + } + + .ps-xxl-1 { + padding-right: 0.25rem !important; + } + + .ps-xxl-2 { + padding-right: 0.5rem !important; + } + + .ps-xxl-3 { + padding-right: 1rem !important; + } + + .ps-xxl-4 { + padding-right: 1.5rem !important; + } + + .ps-xxl-5 { + padding-right: 3rem !important; + } +} +@media print { + .d-print-inline { + display: inline !important; + } + + .d-print-inline-block { + display: inline-block !important; + } + + .d-print-block { + display: block !important; + } + + .d-print-grid { + display: grid !important; + } + + .d-print-table { + display: table !important; + } + + .d-print-table-row { + display: table-row !important; + } + + .d-print-table-cell { + display: table-cell !important; + } + + .d-print-flex { + display: flex !important; + } + + .d-print-inline-flex { + display: inline-flex !important; + } + + .d-print-none { + display: none !important; + } +} +/*# sourceMappingURL=bootstrap-grid.rtl.css.map */ \ No newline at end of file diff --git a/samples/web-app-file-storage/src/static/bootstrap/css/bootstrap-grid.rtl.css.map b/samples/web-app-file-storage/src/static/bootstrap/css/bootstrap-grid.rtl.css.map new file mode 100644 index 0000000..d9b546b --- /dev/null +++ b/samples/web-app-file-storage/src/static/bootstrap/css/bootstrap-grid.rtl.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["../../scss/bootstrap-grid.scss","../../scss/_root.scss","bootstrap-grid.css","../../scss/_containers.scss","../../scss/mixins/_container.scss","../../scss/mixins/_breakpoints.scss","../../scss/_variables.scss","../../scss/_grid.scss","../../scss/mixins/_grid.scss","../../scss/mixins/_utilities.scss","../../scss/utilities/_api.scss"],"names":[],"mappings":"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CAAA;AP63DZ;;AOp4DQ;EAOI,8BAAA;APi4DZ;;AGx4DI;EIAI;IAOI,0BAAA;EPs4DV;;EO74DM;IAOI,gCAAA;EP04DV;;EOj5DM;IAOI,yBAAA;EP84DV;;EOr5DM;IAOI,wBAAA;EPk5DV;;EOz5DM;IAOI,yBAAA;EPs5DV;;EO75DM;IAOI,6BAAA;EP05DV;;EOj6DM;IAOI,8BAAA;EP85DV;;EOr6DM;IAOI,wBAAA;EPk6DV;;EOz6DM;IAOI,+BAAA;EPs6DV;;EO76DM;IAOI,wBAAA;EP06DV;;EOj7DM;IAOI,yBAAA;EP86DV;;EOr7DM;IAOI,8BAAA;EPk7DV;;EOz7DM;IAOI,iCAAA;EPs7DV;;EO77DM;IAOI,sCAAA;EP07DV;;EOj8DM;IAOI,yCAAA;EP87DV;;EOr8DM;IAOI,uBAAA;EPk8DV;;EOz8DM;IAOI,uBAAA;EPs8DV;;EO78DM;IAOI,yBAAA;EP08DV;;EOj9DM;IAOI,yBAAA;EP88DV;;EOr9DM;IAOI,0BAAA;EPk9DV;;EOz9DM;IAOI,4BAAA;EPs9DV;;EO79DM;IAOI,kCAAA;EP09DV;;EOj+DM;IAOI,sCAAA;EP89DV;;EOr+DM;IAOI,oCAAA;EPk+DV;;EOz+DM;IAOI,kCAAA;EPs+DV;;EO7+DM;IAOI,yCAAA;EP0+DV;;EOj/DM;IAOI,wCAAA;EP8+DV;;EOr/DM;IAOI,wCAAA;EPk/DV;;EOz/DM;IAOI,kCAAA;EPs/DV;;EO7/DM;IAOI,gCAAA;EP0/DV;;EOjgEM;IAOI,8BAAA;EP8/DV;;EOrgEM;IAOI,gCAAA;EPkgEV;;EOzgEM;IAOI,+BAAA;EPsgEV;;EO7gEM;IAOI,oCAAA;EP0gEV;;EOjhEM;IAOI,kCAAA;EP8gEV;;EOrhEM;IAOI,gCAAA;EPkhEV;;EOzhEM;IAOI,uCAAA;EPshEV;;EO7hEM;IAOI,sCAAA;EP0hEV;;EOjiEM;IAOI,iCAAA;EP8hEV;;EOriEM;IAOI,2BAAA;EPkiEV;;EOziEM;IAOI,iCAAA;EPsiEV;;EO7iEM;IAOI,+BAAA;EP0iEV;;EOjjEM;IAOI,6BAAA;EP8iEV;;EOrjEM;IAOI,+BAAA;EPkjEV;;EOzjEM;IAOI,8BAAA;EPsjEV;;EO7jEM;IAOI,oBAAA;EP0jEV;;EOjkEM;IAOI,mBAAA;EP8jEV;;EOrkEM;IAOI,mBAAA;EPkkEV;;EOzkEM;IAOI,mBAAA;EPskEV;;EO7kEM;IAOI,mBAAA;EP0kEV;;EOjlEM;IAOI,mBAAA;EP8kEV;;EOrlEM;IAOI,mBAAA;EPklEV;;EOzlEM;IAOI,mBAAA;EPslEV;;EO7lEM;IAOI,oBAAA;EP0lEV;;EOjmEM;IAOI,0BAAA;EP8lEV;;EOrmEM;IAOI,yBAAA;EPkmEV;;EOzmEM;IAOI,uBAAA;EPsmEV;;EO7mEM;IAOI,yBAAA;EP0mEV;;EOjnEM;IAOI,uBAAA;EP8mEV;;EOrnEM;IAOI,uBAAA;EPknEV;;EOznEM;IAOI,yBAAA;IAAA,0BAAA;EPunEV;;EO9nEM;IAOI,+BAAA;IAAA,gCAAA;EP4nEV;;EOnoEM;IAOI,8BAAA;IAAA,+BAAA;EPioEV;;EOxoEM;IAOI,4BAAA;IAAA,6BAAA;EPsoEV;;EO7oEM;IAOI,8BAAA;IAAA,+BAAA;EP2oEV;;EOlpEM;IAOI,4BAAA;IAAA,6BAAA;EPgpEV;;EOvpEM;IAOI,4BAAA;IAAA,6BAAA;EPqpEV;;EO5pEM;IAOI,wBAAA;IAAA,2BAAA;EP0pEV;;EOjqEM;IAOI,8BAAA;IAAA,iCAAA;EP+pEV;;EOtqEM;IAOI,6BAAA;IAAA,gCAAA;EPoqEV;;EO3qEM;IAOI,2BAAA;IAAA,8BAAA;EPyqEV;;EOhrEM;IAOI,6BAAA;IAAA,gCAAA;EP8qEV;;EOrrEM;IAOI,2BAAA;IAAA,8BAAA;EPmrEV;;EO1rEM;IAOI,2BAAA;IAAA,8BAAA;EPwrEV;;EO/rEM;IAOI,wBAAA;EP4rEV;;EOnsEM;IAOI,8BAAA;EPgsEV;;EOvsEM;IAOI,6BAAA;EPosEV;;EO3sEM;IAOI,2BAAA;EPwsEV;;EO/sEM;IAOI,6BAAA;EP4sEV;;EOntEM;IAOI,2BAAA;EPgtEV;;EOvtEM;IAOI,2BAAA;EPotEV;;EO3tEM;IAOI,yBAAA;EPwtEV;;EO/tEM;IAOI,+BAAA;EP4tEV;;EOnuEM;IAOI,8BAAA;EPguEV;;EOvuEM;IAOI,4BAAA;EPouEV;;EO3uEM;IAOI,8BAAA;EPwuEV;;EO/uEM;IAOI,4BAAA;EP4uEV;;EOnvEM;IAOI,4BAAA;EPgvEV;;EOvvEM;IAOI,2BAAA;EPovEV;;EO3vEM;IAOI,iCAAA;EPwvEV;;EO/vEM;IAOI,gCAAA;EP4vEV;;EOnwEM;IAOI,8BAAA;EPgwEV;;EOvwEM;IAOI,gCAAA;EPowEV;;EO3wEM;IAOI,8BAAA;EPwwEV;;EO/wEM;IAOI,8BAAA;EP4wEV;;EOnxEM;IAOI,0BAAA;EPgxEV;;EOvxEM;IAOI,gCAAA;EPoxEV;;EO3xEM;IAOI,+BAAA;EPwxEV;;EO/xEM;IAOI,6BAAA;EP4xEV;;EOnyEM;IAOI,+BAAA;EPgyEV;;EOvyEM;IAOI,6BAAA;EPoyEV;;EO3yEM;IAOI,6BAAA;EPwyEV;;EO/yEM;IAOI,qBAAA;EP4yEV;;EOnzEM;IAOI,2BAAA;EPgzEV;;EOvzEM;IAOI,0BAAA;EPozEV;;EO3zEM;IAOI,wBAAA;EPwzEV;;EO/zEM;IAOI,0BAAA;EP4zEV;;EOn0EM;IAOI,wBAAA;EPg0EV;;EOv0EM;IAOI,0BAAA;IAAA,2BAAA;EPq0EV;;EO50EM;IAOI,gCAAA;IAAA,iCAAA;EP00EV;;EOj1EM;IAOI,+BAAA;IAAA,gCAAA;EP+0EV;;EOt1EM;IAOI,6BAAA;IAAA,8BAAA;EPo1EV;;EO31EM;IAOI,+BAAA;IAAA,gCAAA;EPy1EV;;EOh2EM;IAOI,6BAAA;IAAA,8BAAA;EP81EV;;EOr2EM;IAOI,yBAAA;IAAA,4BAAA;EPm2EV;;EO12EM;IAOI,+BAAA;IAAA,kCAAA;EPw2EV;;EO/2EM;IAOI,8BAAA;IAAA,iCAAA;EP62EV;;EOp3EM;IAOI,4BAAA;IAAA,+BAAA;EPk3EV;;EOz3EM;IAOI,8BAAA;IAAA,iCAAA;EPu3EV;;EO93EM;IAOI,4BAAA;IAAA,+BAAA;EP43EV;;EOn4EM;IAOI,yBAAA;EPg4EV;;EOv4EM;IAOI,+BAAA;EPo4EV;;EO34EM;IAOI,8BAAA;EPw4EV;;EO/4EM;IAOI,4BAAA;EP44EV;;EOn5EM;IAOI,8BAAA;EPg5EV;;EOv5EM;IAOI,4BAAA;EPo5EV;;EO35EM;IAOI,0BAAA;EPw5EV;;EO/5EM;IAOI,gCAAA;EP45EV;;EOn6EM;IAOI,+BAAA;EPg6EV;;EOv6EM;IAOI,6BAAA;EPo6EV;;EO36EM;IAOI,+BAAA;EPw6EV;;EO/6EM;IAOI,6BAAA;EP46EV;;EOn7EM;IAOI,4BAAA;EPg7EV;;EOv7EM;IAOI,kCAAA;EPo7EV;;EO37EM;IAOI,iCAAA;EPw7EV;;EO/7EM;IAOI,+BAAA;EP47EV;;EOn8EM;IAOI,iCAAA;EPg8EV;;EOv8EM;IAOI,+BAAA;EPo8EV;;EO38EM;IAOI,2BAAA;EPw8EV;;EO/8EM;IAOI,iCAAA;EP48EV;;EOn9EM;IAOI,gCAAA;EPg9EV;;EOv9EM;IAOI,8BAAA;EPo9EV;;EO39EM;IAOI,gCAAA;EPw9EV;;EO/9EM;IAOI,8BAAA;EP49EV;AACF;AGp+EI;EIAI;IAOI,0BAAA;EPi+EV;;EOx+EM;IAOI,gCAAA;EPq+EV;;EO5+EM;IAOI,yBAAA;EPy+EV;;EOh/EM;IAOI,wBAAA;EP6+EV;;EOp/EM;IAOI,yBAAA;EPi/EV;;EOx/EM;IAOI,6BAAA;EPq/EV;;EO5/EM;IAOI,8BAAA;EPy/EV;;EOhgFM;IAOI,wBAAA;EP6/EV;;EOpgFM;IAOI,+BAAA;EPigFV;;EOxgFM;IAOI,wBAAA;EPqgFV;;EO5gFM;IAOI,yBAAA;EPygFV;;EOhhFM;IAOI,8BAAA;EP6gFV;;EOphFM;IAOI,iCAAA;EPihFV;;EOxhFM;IAOI,sCAAA;EPqhFV;;EO5hFM;IAOI,yCAAA;EPyhFV;;EOhiFM;IAOI,uBAAA;EP6hFV;;EOpiFM;IAOI,uBAAA;EPiiFV;;EOxiFM;IAOI,yBAAA;EPqiFV;;EO5iFM;IAOI,yBAAA;EPyiFV;;EOhjFM;IAOI,0BAAA;EP6iFV;;EOpjFM;IAOI,4BAAA;EPijFV;;EOxjFM;IAOI,kCAAA;EPqjFV;;EO5jFM;IAOI,sCAAA;EPyjFV;;EOhkFM;IAOI,oCAAA;EP6jFV;;EOpkFM;IAOI,kCAAA;EPikFV;;EOxkFM;IAOI,yCAAA;EPqkFV;;EO5kFM;IAOI,wCAAA;EPykFV;;EOhlFM;IAOI,wCA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EPomGV;;EO3mGM;IAOI,8BAAA;EPwmGV;;EO/mGM;IAOI,iCAAA;EP4mGV;;EOnnGM;IAOI,sCAAA;EPgnGV;;EOvnGM;IAOI,yCAAA;EPonGV;;EO3nGM;IAOI,uBAAA;EPwnGV;;EO/nGM;IAOI,uBAAA;EP4nGV;;EOnoGM;IAOI,yBAAA;EPgoGV;;EOvoGM;IAOI,yBAAA;EPooGV;;EO3oGM;IAOI,0BAAA;EPwoGV;;EO/oGM;IAOI,4BAAA;EP4oGV;;EOnpGM;IAOI,kCAAA;EPgpGV;;EOvpGM;IAOI,sCAAA;EPopGV;;EO3pGM;IAOI,oCAAA;EPwpGV;;EO/pGM;IAOI,kCAAA;EP4pGV;;EOnqGM;IAOI,yCAAA;EPgqGV;;EOvqGM;IAOI,wCAAA;EPoqGV;;EO3qGM;IAOI,wCAAA;EPwqGV;;EO/qGM;IAOI,kCAAA;EP4qGV;;EOnrGM;IAOI,gCAAA;EPgrGV;;EOvrGM;IAOI,8BAAA;EPorGV;;EO3rGM;IAOI,gCAAA;EPwrGV;;EO/rGM;IAOI,+BAAA;EP4rGV;;EOnsGM;IAOI,oCAAA;EPgsGV;;EOvsGM;IAOI,kCAAA;EPosGV;;EO3sGM;IAOI,gCAAA;EPwsGV;;EO/sGM;IAOI,uCAAA;EP4sGV;;EOntGM;IAOI,sCAAA;EPgtGV;;EOvtGM;IAOI,iCAAA;EPotGV;;EO3tGM;IAOI,2BAAA;EPwtGV;;EO/tGM;IAOI,iCAAA;EP4tGV;;EOnuGM;IAOI,+BAAA;EPguGV;;EOvuGM;IAOI,6BAAA;EPouGV;;EO3uGM;IAOI,+BAAA;EPwuGV;;EO/uGM;IAOI,8BAAA;EP4uGV;;EOnvGM;IAOI,oBAAA;EPgvGV;;EOvvGM;IAOI,mBAAA;EPovGV;;EO3vGM;IAOI,mBAAA;EPwvGV;;EO/vGM;IAOI,mBAAA;EP4vGV;;EOnwGM;IAOI,mBAAA;EPgwGV;;EOvwGM;IAOI,mBAAA;EPowGV;;EO3wGM;IAOI,mBAAA;EPwwGV;;EO/wGM;IAOI,mBAAA;EP4wGV;;EOnxGM;IAOI,oBAAA;EPgxGV;;EOvxGM;IAOI,0BAAA;EPoxGV;;EO3xGM;IAOI,yBAAA;EPwxGV;;EO/xGM;IAOI,uBAAA;EP4x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HM;IAOI,2BAAA;EP8nHV;;EOroHM;IAOI,iCAAA;EPkoHV;;EOzoHM;IAOI,gCAAA;EPsoHV;;EO7oHM;IAOI,8BAAA;EP0oHV;;EOjpHM;IAOI,gCAAA;EP8oHV;;EOrpHM;IAOI,8BAAA;EPkpHV;AACF;AG1pHI;EIAI;IAOI,0BAAA;EPupHV;;EO9pHM;IAOI,gCAAA;EP2pHV;;EOlqHM;IAOI,yBAAA;EP+pHV;;EOtqHM;IAOI,wBAAA;EPmqHV;;EO1qHM;IAOI,yBAAA;EPuqHV;;EO9qHM;IAOI,6BAAA;EP2qHV;;EOlrHM;IAOI,8BAAA;EP+qHV;;EOtrHM;IAOI,wBAAA;EPmrHV;;EO1rHM;IAOI,+BAAA;EPurHV;;EO9rHM;IAOI,wBAAA;EP2rHV;;EOlsHM;IAOI,yBAAA;EP+rHV;;EOtsHM;IAOI,8BAAA;EPmsHV;;EO1sHM;IAOI,iCAAA;EPusHV;;EO9sHM;IAOI,sCAAA;EP2sHV;;EOltHM;IAOI,yCAAA;EP+sHV;;EOttHM;IAOI,uBAAA;EPmtHV;;EO1tHM;IAOI,uBAAA;EPutHV;;EO9tHM;IAOI,yBAAA;EP2tHV;;EOluHM;IAOI,yBAAA;EP+tHV;;EOtuHM;IAOI,0BAAA;EPmuHV;;EO1uHM;IAOI,4BAAA;EPuuHV;;EO9uHM;IAOI,kCAAA;EP2uHV;;EOlvHM;IAOI,sCAAA;EP+uHV;;EOtvHM;IAOI,oCAAA;EPmvHV;;EO1vHM;IAOI,kCAAA;EPuvHV;;EO9vHM;IAOI,yCAAA;EP2vHV;;EOlwHM;IAOI,wCAAA;EP+vHV;;EOtwHM;IAOI,wCAAA;EPmwHV;;EO1wHM;IAOI,kCAAA;EPuwHV;;EO9wHM;IAOI,gCAAA;EP2wHV;;EOlxHM;IAOI,8BAAA;EP+wHV;;EOtxHM;IAOI,gCAAA;EPmxHV;;EO1xHM;IAOI,+BAAA;EPuxHV;;EO9xHM;IAOI,oCAAA;EP2xHV;;EOlyHM;IAOI,kCAAA;EP+xHV;;EOtyHM;IAOI,gCAAA;EPmyHV;;EO1yHM;IAOI,uCAAA;EPuyHV;;EO9yHM;IAOI,sCAAA;EP2yHV;;EOlzHM;IAOI,iCAAA;EP+yHV;;EOtzHM;IAOI,2BAAA;EPmzHV;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IAOI,+BAAA;EPqpIV;;EO5pIM;IAOI,8BAAA;EPypIV;;EOhqIM;IAOI,4BAAA;EP6pIV;;EOpqIM;IAOI,8BAAA;EPiqIV;;EOxqIM;IAOI,4BAAA;EPqqIV;;EO5qIM;IAOI,0BAAA;EPyqIV;;EOhrIM;IAOI,gCAAA;EP6qIV;;EOprIM;IAOI,+BAAA;EPirIV;;EOxrIM;IAOI,6BAAA;EPqrIV;;EO5rIM;IAOI,+BAAA;EPyrIV;;EOhsIM;IAOI,6BAAA;EP6rIV;;EOpsIM;IAOI,4BAAA;EPisIV;;EOxsIM;IAOI,kCAAA;EPqsIV;;EO5sIM;IAOI,iCAAA;EPysIV;;EOhtIM;IAOI,+BAAA;EP6sIV;;EOptIM;IAOI,iCAAA;EPitIV;;EOxtIM;IAOI,+BAAA;EPqtIV;;EO5tIM;IAOI,2BAAA;EPytIV;;EOhuIM;IAOI,iCAAA;EP6tIV;;EOpuIM;IAOI,gCAAA;EPiuIV;;EOxuIM;IAOI,8BAAA;EPquIV;;EO5uIM;IAOI,gCAAA;EPyuIV;;EOhvIM;IAOI,8BAAA;EP6uIV;AACF;AGrvII;EIAI;IAOI,0BAAA;EPkvIV;;EOzvIM;IAOI,gCAAA;EPsvIV;;EO7vIM;IAOI,yBAAA;EP0vIV;;EOjwIM;IAOI,wBAAA;EP8vIV;;EOrwIM;IAOI,yBAAA;EPkwIV;;EOzwIM;IAOI,6BAAA;EPswIV;;EO7wIM;IAOI,8BAAA;EP0wIV;;EOjxIM;IAOI,wBAAA;EP8wIV;;EOrxIM;IAOI,+BAAA;EPkxIV;;EOzxIM;IAOI,wBAAA;EPsxIV;;EO7xIM;IAOI,yBAAA;EP0xIV;;EOjyIM;IAOI,8BAAA;EP8xIV;;EOryIM;IAOI,iCAAA;EPkyIV;;EOzyIM;IAOI,sCAAA;EPsyIV;;EO7yIM;IAOI,yCAAA;EP0yIV;;EOjzIM;IAOI,uBAAA;EP8yIV;;EOrzIM;IAOI,uBAAA;EPkzIV;;EOzzIM;IAOI,yBAAA;EPszIV;;EO7zIM;IAOI,yBAAA;EP0zIV;;EOj0IM;IAOI,0BAAA;EP8zIV;;EOr0IM;IAOI,4BAAA;EPk0IV;;EOz0IM;IAOI,kCAAA;EPs0IV;;EO70IM;IAOI,sCAAA;EP00IV;;EO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","file":"bootstrap-grid.rtl.css","sourcesContent":["/*!\n * Bootstrap Grid v5.1.3 (https://getbootstrap.com/)\n * Copyright 2011-2021 The Bootstrap Authors\n * Copyright 2011-2021 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n\n$include-column-box-sizing: true !default;\n\n@import \"functions\";\n@import \"variables\";\n\n@import \"mixins/lists\";\n@import \"mixins/breakpoints\";\n@import \"mixins/container\";\n@import \"mixins/grid\";\n@import \"mixins/utilities\";\n\n@import \"vendor/rfs\";\n\n@import \"root\";\n\n@import \"containers\";\n@import \"grid\";\n\n@import \"utilities\";\n// Only use the utilities we need\n// stylelint-disable-next-line scss/dollar-variable-default\n$utilities: map-get-multiple(\n $utilities,\n (\n \"display\",\n \"order\",\n \"flex\",\n \"flex-direction\",\n \"flex-grow\",\n \"flex-shrink\",\n \"flex-wrap\",\n \"justify-content\",\n \"align-items\",\n \"align-content\",\n \"align-self\",\n \"margin\",\n \"margin-x\",\n \"margin-y\",\n \"margin-top\",\n \"margin-end\",\n \"margin-bottom\",\n \"margin-start\",\n \"negative-margin\",\n \"negative-margin-x\",\n \"negative-margin-y\",\n \"negative-margin-top\",\n \"negative-margin-end\",\n \"negative-margin-bottom\",\n \"negative-margin-start\",\n \"padding\",\n \"padding-x\",\n \"padding-y\",\n \"padding-top\",\n \"padding-end\",\n \"padding-bottom\",\n \"padding-start\",\n )\n);\n\n@import \"utilities/api\";\n",":root {\n // Note: Custom variable values only support SassScript inside `#{}`.\n\n // Colors\n //\n // Generate palettes for full colors, grays, and theme colors.\n\n @each $color, $value in $colors {\n --#{$variable-prefix}#{$color}: #{$value};\n }\n\n @each $color, $value in $grays {\n --#{$variable-prefix}gray-#{$color}: #{$value};\n }\n\n @each $color, $value in $theme-colors {\n --#{$variable-prefix}#{$color}: #{$value};\n }\n\n @each $color, $value in $theme-colors-rgb {\n --#{$variable-prefix}#{$color}-rgb: #{$value};\n }\n\n --#{$variable-prefix}white-rgb: #{to-rgb($white)};\n --#{$variable-prefix}black-rgb: #{to-rgb($black)};\n --#{$variable-prefix}body-color-rgb: #{to-rgb($body-color)};\n --#{$variable-prefix}body-bg-rgb: #{to-rgb($body-bg)};\n\n // Fonts\n\n // Note: Use `inspect` for lists so that quoted items keep the quotes.\n // See https://github.com/sass/sass/issues/2383#issuecomment-336349172\n --#{$variable-prefix}font-sans-serif: #{inspect($font-family-sans-serif)};\n --#{$variable-prefix}font-monospace: #{inspect($font-family-monospace)};\n --#{$variable-prefix}gradient: #{$gradient};\n\n // Root and body\n // stylelint-disable custom-property-empty-line-before\n // scss-docs-start root-body-variables\n @if $font-size-root != null {\n --#{$variable-prefix}root-font-size: #{$font-size-root};\n }\n --#{$variable-prefix}body-font-family: #{$font-family-base};\n --#{$variable-prefix}body-font-size: #{$font-size-base};\n --#{$variable-prefix}body-font-weight: #{$font-weight-base};\n --#{$variable-prefix}body-line-height: #{$line-height-base};\n --#{$variable-prefix}body-color: #{$body-color};\n @if $body-text-align != null {\n --#{$variable-prefix}body-text-align: #{$body-text-align};\n }\n --#{$variable-prefix}body-bg: #{$body-bg};\n // scss-docs-end root-body-variables\n // stylelint-enable custom-property-empty-line-before\n}\n","/*!\n * Bootstrap Grid v5.1.3 (https://getbootstrap.com/)\n * Copyright 2011-2021 The Bootstrap Authors\n * Copyright 2011-2021 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n:root {\n --bs-blue: #0d6efd;\n --bs-indigo: #6610f2;\n --bs-purple: #6f42c1;\n --bs-pink: #d63384;\n --bs-red: #dc3545;\n --bs-orange: #fd7e14;\n --bs-yellow: #ffc107;\n --bs-green: #198754;\n --bs-teal: #20c997;\n --bs-cyan: #0dcaf0;\n --bs-white: #fff;\n --bs-gray: #6c757d;\n --bs-gray-dark: #343a40;\n --bs-gray-100: #f8f9fa;\n --bs-gray-200: #e9ecef;\n --bs-gray-300: #dee2e6;\n --bs-gray-400: #ced4da;\n --bs-gray-500: #adb5bd;\n --bs-gray-600: #6c757d;\n --bs-gray-700: #495057;\n --bs-gray-800: #343a40;\n --bs-gray-900: #212529;\n --bs-primary: #0d6efd;\n --bs-secondary: #6c757d;\n --bs-success: #198754;\n --bs-info: #0dcaf0;\n --bs-warning: #ffc107;\n --bs-danger: #dc3545;\n --bs-light: #f8f9fa;\n --bs-dark: #212529;\n --bs-primary-rgb: 13, 110, 253;\n --bs-secondary-rgb: 108, 117, 125;\n --bs-success-rgb: 25, 135, 84;\n --bs-info-rgb: 13, 202, 240;\n --bs-warning-rgb: 255, 193, 7;\n --bs-danger-rgb: 220, 53, 69;\n --bs-light-rgb: 248, 249, 250;\n --bs-dark-rgb: 33, 37, 41;\n --bs-white-rgb: 255, 255, 255;\n --bs-black-rgb: 0, 0, 0;\n --bs-body-color-rgb: 33, 37, 41;\n --bs-body-bg-rgb: 255, 255, 255;\n --bs-font-sans-serif: system-ui, -apple-system, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", \"Liberation Sans\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n --bs-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n --bs-gradient: linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));\n --bs-body-font-family: var(--bs-font-sans-serif);\n --bs-body-font-size: 1rem;\n --bs-body-font-weight: 400;\n --bs-body-line-height: 1.5;\n --bs-body-color: #212529;\n --bs-body-bg: #fff;\n}\n\n.container,\n.container-fluid,\n.container-xxl,\n.container-xl,\n.container-lg,\n.container-md,\n.container-sm {\n width: 100%;\n padding-right: var(--bs-gutter-x, 0.75rem);\n padding-left: var(--bs-gutter-x, 0.75rem);\n margin-right: auto;\n margin-left: auto;\n}\n\n@media (min-width: 576px) {\n .container-sm, .container {\n max-width: 540px;\n }\n}\n@media (min-width: 768px) {\n .container-md, .container-sm, .container {\n max-width: 720px;\n }\n}\n@media (min-width: 992px) {\n .container-lg, .container-md, .container-sm, .container {\n max-width: 960px;\n }\n}\n@media (min-width: 1200px) {\n .container-xl, .container-lg, .container-md, .container-sm, .container {\n max-width: 1140px;\n }\n}\n@media (min-width: 1400px) {\n .container-xxl, .container-xl, .container-lg, .container-md, .container-sm, .container {\n max-width: 1320px;\n }\n}\n.row {\n --bs-gutter-x: 1.5rem;\n --bs-gutter-y: 0;\n display: flex;\n flex-wrap: wrap;\n margin-top: calc(-1 * var(--bs-gutter-y));\n margin-right: calc(-0.5 * var(--bs-gutter-x));\n margin-left: calc(-0.5 * var(--bs-gutter-x));\n}\n.row > * {\n box-sizing: border-box;\n flex-shrink: 0;\n width: 100%;\n max-width: 100%;\n padding-right: calc(var(--bs-gutter-x) * 0.5);\n padding-left: calc(var(--bs-gutter-x) * 0.5);\n margin-top: var(--bs-gutter-y);\n}\n\n.col {\n flex: 1 0 0%;\n}\n\n.row-cols-auto > * {\n flex: 0 0 auto;\n width: auto;\n}\n\n.row-cols-1 > * {\n flex: 0 0 auto;\n width: 100%;\n}\n\n.row-cols-2 > * {\n flex: 0 0 auto;\n width: 50%;\n}\n\n.row-cols-3 > * {\n flex: 0 0 auto;\n width: 33.3333333333%;\n}\n\n.row-cols-4 > * {\n flex: 0 0 auto;\n width: 25%;\n}\n\n.row-cols-5 > * {\n flex: 0 0 auto;\n width: 20%;\n}\n\n.row-cols-6 > * {\n flex: 0 0 auto;\n width: 16.6666666667%;\n}\n\n.col-auto {\n flex: 0 0 auto;\n width: auto;\n}\n\n.col-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n}\n\n.col-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n}\n\n.col-3 {\n flex: 0 0 auto;\n width: 25%;\n}\n\n.col-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n}\n\n.col-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n}\n\n.col-6 {\n flex: 0 0 auto;\n width: 50%;\n}\n\n.col-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n}\n\n.col-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n}\n\n.col-9 {\n flex: 0 0 auto;\n width: 75%;\n}\n\n.col-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n}\n\n.col-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n}\n\n.col-12 {\n flex: 0 0 auto;\n width: 100%;\n}\n\n.offset-1 {\n margin-left: 8.33333333%;\n}\n\n.offset-2 {\n margin-left: 16.66666667%;\n}\n\n.offset-3 {\n margin-left: 25%;\n}\n\n.offset-4 {\n margin-left: 33.33333333%;\n}\n\n.offset-5 {\n margin-left: 41.66666667%;\n}\n\n.offset-6 {\n margin-left: 50%;\n}\n\n.offset-7 {\n margin-left: 58.33333333%;\n}\n\n.offset-8 {\n margin-left: 66.66666667%;\n}\n\n.offset-9 {\n margin-left: 75%;\n}\n\n.offset-10 {\n margin-left: 83.33333333%;\n}\n\n.offset-11 {\n margin-left: 91.66666667%;\n}\n\n.g-0,\n.gx-0 {\n --bs-gutter-x: 0;\n}\n\n.g-0,\n.gy-0 {\n --bs-gutter-y: 0;\n}\n\n.g-1,\n.gx-1 {\n --bs-gutter-x: 0.25rem;\n}\n\n.g-1,\n.gy-1 {\n --bs-gutter-y: 0.25rem;\n}\n\n.g-2,\n.gx-2 {\n --bs-gutter-x: 0.5rem;\n}\n\n.g-2,\n.gy-2 {\n --bs-gutter-y: 0.5rem;\n}\n\n.g-3,\n.gx-3 {\n --bs-gutter-x: 1rem;\n}\n\n.g-3,\n.gy-3 {\n --bs-gutter-y: 1rem;\n}\n\n.g-4,\n.gx-4 {\n --bs-gutter-x: 1.5rem;\n}\n\n.g-4,\n.gy-4 {\n --bs-gutter-y: 1.5rem;\n}\n\n.g-5,\n.gx-5 {\n --bs-gutter-x: 3rem;\n}\n\n.g-5,\n.gy-5 {\n --bs-gutter-y: 3rem;\n}\n\n@media (min-width: 576px) {\n .col-sm {\n flex: 1 0 0%;\n }\n\n .row-cols-sm-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n\n .row-cols-sm-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n\n .row-cols-sm-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n\n .row-cols-sm-3 > * {\n flex: 0 0 auto;\n width: 33.3333333333%;\n }\n\n .row-cols-sm-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n\n .row-cols-sm-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n\n .row-cols-sm-6 > * {\n flex: 0 0 auto;\n width: 16.6666666667%;\n }\n\n .col-sm-auto {\n flex: 0 0 auto;\n width: auto;\n }\n\n .col-sm-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n\n .col-sm-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n\n .col-sm-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n\n .col-sm-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n\n .col-sm-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n\n .col-sm-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n\n .col-sm-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n\n .col-sm-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n\n .col-sm-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n\n .col-sm-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n\n .col-sm-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n\n .col-sm-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n\n .offset-sm-0 {\n margin-left: 0;\n }\n\n .offset-sm-1 {\n margin-left: 8.33333333%;\n }\n\n .offset-sm-2 {\n margin-left: 16.66666667%;\n }\n\n .offset-sm-3 {\n margin-left: 25%;\n }\n\n .offset-sm-4 {\n margin-left: 33.33333333%;\n }\n\n .offset-sm-5 {\n margin-left: 41.66666667%;\n }\n\n .offset-sm-6 {\n margin-left: 50%;\n }\n\n .offset-sm-7 {\n margin-left: 58.33333333%;\n }\n\n .offset-sm-8 {\n margin-left: 66.66666667%;\n }\n\n .offset-sm-9 {\n margin-left: 75%;\n }\n\n .offset-sm-10 {\n margin-left: 83.33333333%;\n }\n\n .offset-sm-11 {\n margin-left: 91.66666667%;\n }\n\n .g-sm-0,\n.gx-sm-0 {\n --bs-gutter-x: 0;\n }\n\n .g-sm-0,\n.gy-sm-0 {\n --bs-gutter-y: 0;\n }\n\n .g-sm-1,\n.gx-sm-1 {\n --bs-gutter-x: 0.25rem;\n }\n\n .g-sm-1,\n.gy-sm-1 {\n --bs-gutter-y: 0.25rem;\n }\n\n .g-sm-2,\n.gx-sm-2 {\n --bs-gutter-x: 0.5rem;\n }\n\n .g-sm-2,\n.gy-sm-2 {\n --bs-gutter-y: 0.5rem;\n }\n\n .g-sm-3,\n.gx-sm-3 {\n --bs-gutter-x: 1rem;\n }\n\n .g-sm-3,\n.gy-sm-3 {\n --bs-gutter-y: 1rem;\n }\n\n .g-sm-4,\n.gx-sm-4 {\n --bs-gutter-x: 1.5rem;\n }\n\n .g-sm-4,\n.gy-sm-4 {\n --bs-gutter-y: 1.5rem;\n }\n\n .g-sm-5,\n.gx-sm-5 {\n --bs-gutter-x: 3rem;\n }\n\n .g-sm-5,\n.gy-sm-5 {\n --bs-gutter-y: 3rem;\n }\n}\n@media (min-width: 768px) {\n .col-md {\n flex: 1 0 0%;\n }\n\n .row-cols-md-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n\n .row-cols-md-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n\n .row-cols-md-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n\n .row-cols-md-3 > * {\n flex: 0 0 auto;\n width: 33.3333333333%;\n }\n\n .row-cols-md-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n\n .row-cols-md-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n\n .row-cols-md-6 > * {\n flex: 0 0 auto;\n width: 16.6666666667%;\n }\n\n .col-md-auto {\n flex: 0 0 auto;\n width: auto;\n }\n\n .col-md-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n\n .col-md-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n\n .col-md-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n\n .col-md-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n\n .col-md-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n\n .col-md-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n\n .col-md-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n\n .col-md-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n\n .col-md-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n\n .col-md-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n\n .col-md-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n\n .col-md-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n\n .offset-md-0 {\n margin-left: 0;\n }\n\n .offset-md-1 {\n margin-left: 8.33333333%;\n }\n\n .offset-md-2 {\n margin-left: 16.66666667%;\n }\n\n .offset-md-3 {\n margin-left: 25%;\n }\n\n .offset-md-4 {\n margin-left: 33.33333333%;\n }\n\n .offset-md-5 {\n margin-left: 41.66666667%;\n }\n\n .offset-md-6 {\n margin-left: 50%;\n }\n\n .offset-md-7 {\n margin-left: 58.33333333%;\n }\n\n .offset-md-8 {\n margin-left: 66.66666667%;\n }\n\n .offset-md-9 {\n margin-left: 75%;\n }\n\n .offset-md-10 {\n margin-left: 83.33333333%;\n }\n\n .offset-md-11 {\n margin-left: 91.66666667%;\n }\n\n .g-md-0,\n.gx-md-0 {\n --bs-gutter-x: 0;\n }\n\n .g-md-0,\n.gy-md-0 {\n --bs-gutter-y: 0;\n }\n\n .g-md-1,\n.gx-md-1 {\n --bs-gutter-x: 0.25rem;\n }\n\n .g-md-1,\n.gy-md-1 {\n --bs-gutter-y: 0.25rem;\n }\n\n .g-md-2,\n.gx-md-2 {\n --bs-gutter-x: 0.5rem;\n }\n\n .g-md-2,\n.gy-md-2 {\n --bs-gutter-y: 0.5rem;\n }\n\n .g-md-3,\n.gx-md-3 {\n --bs-gutter-x: 1rem;\n }\n\n .g-md-3,\n.gy-md-3 {\n --bs-gutter-y: 1rem;\n }\n\n .g-md-4,\n.gx-md-4 {\n --bs-gutter-x: 1.5rem;\n }\n\n .g-md-4,\n.gy-md-4 {\n --bs-gutter-y: 1.5rem;\n }\n\n .g-md-5,\n.gx-md-5 {\n --bs-gutter-x: 3rem;\n }\n\n .g-md-5,\n.gy-md-5 {\n --bs-gutter-y: 3rem;\n }\n}\n@media (min-width: 992px) {\n .col-lg {\n flex: 1 0 0%;\n }\n\n .row-cols-lg-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n\n .row-cols-lg-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n\n .row-cols-lg-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n\n .row-cols-lg-3 > * {\n flex: 0 0 auto;\n width: 33.3333333333%;\n }\n\n .row-cols-lg-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n\n .row-cols-lg-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n\n .row-cols-lg-6 > * {\n flex: 0 0 auto;\n width: 16.6666666667%;\n }\n\n .col-lg-auto {\n flex: 0 0 auto;\n width: auto;\n }\n\n .col-lg-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n\n .col-lg-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n\n .col-lg-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n\n .col-lg-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n\n .col-lg-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n\n .col-lg-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n\n .col-lg-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n\n .col-lg-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n\n .col-lg-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n\n .col-lg-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n\n .col-lg-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n\n .col-lg-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n\n .offset-lg-0 {\n margin-left: 0;\n }\n\n .offset-lg-1 {\n margin-left: 8.33333333%;\n }\n\n .offset-lg-2 {\n margin-left: 16.66666667%;\n }\n\n .offset-lg-3 {\n margin-left: 25%;\n }\n\n .offset-lg-4 {\n margin-left: 33.33333333%;\n }\n\n .offset-lg-5 {\n margin-left: 41.66666667%;\n }\n\n .offset-lg-6 {\n margin-left: 50%;\n }\n\n .offset-lg-7 {\n margin-left: 58.33333333%;\n }\n\n .offset-lg-8 {\n margin-left: 66.66666667%;\n }\n\n .offset-lg-9 {\n margin-left: 75%;\n }\n\n .offset-lg-10 {\n margin-left: 83.33333333%;\n }\n\n .offset-lg-11 {\n margin-left: 91.66666667%;\n }\n\n .g-lg-0,\n.gx-lg-0 {\n --bs-gutter-x: 0;\n }\n\n .g-lg-0,\n.gy-lg-0 {\n --bs-gutter-y: 0;\n }\n\n .g-lg-1,\n.gx-lg-1 {\n --bs-gutter-x: 0.25rem;\n }\n\n .g-lg-1,\n.gy-lg-1 {\n --bs-gutter-y: 0.25rem;\n }\n\n .g-lg-2,\n.gx-lg-2 {\n --bs-gutter-x: 0.5rem;\n }\n\n .g-lg-2,\n.gy-lg-2 {\n --bs-gutter-y: 0.5rem;\n }\n\n .g-lg-3,\n.gx-lg-3 {\n --bs-gutter-x: 1rem;\n }\n\n .g-lg-3,\n.gy-lg-3 {\n --bs-gutter-y: 1rem;\n }\n\n .g-lg-4,\n.gx-lg-4 {\n --bs-gutter-x: 1.5rem;\n }\n\n .g-lg-4,\n.gy-lg-4 {\n --bs-gutter-y: 1.5rem;\n }\n\n .g-lg-5,\n.gx-lg-5 {\n --bs-gutter-x: 3rem;\n }\n\n .g-lg-5,\n.gy-lg-5 {\n --bs-gutter-y: 3rem;\n }\n}\n@media (min-width: 1200px) {\n .col-xl {\n flex: 1 0 0%;\n }\n\n .row-cols-xl-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n\n .row-cols-xl-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n\n .row-cols-xl-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n\n .row-cols-xl-3 > * {\n flex: 0 0 auto;\n width: 33.3333333333%;\n }\n\n .row-cols-xl-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n\n .row-cols-xl-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n\n .row-cols-xl-6 > * {\n flex: 0 0 auto;\n width: 16.6666666667%;\n }\n\n .col-xl-auto {\n flex: 0 0 auto;\n width: auto;\n }\n\n .col-xl-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n\n .col-xl-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n\n .col-xl-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n\n .col-xl-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n\n .col-xl-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n\n .col-xl-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n\n .col-xl-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n\n .col-xl-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n\n .col-xl-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n\n .col-xl-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n\n .col-xl-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n\n .col-xl-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n\n .offset-xl-0 {\n margin-left: 0;\n }\n\n .offset-xl-1 {\n margin-left: 8.33333333%;\n }\n\n .offset-xl-2 {\n margin-left: 16.66666667%;\n }\n\n .offset-xl-3 {\n margin-left: 25%;\n }\n\n .offset-xl-4 {\n margin-left: 33.33333333%;\n }\n\n .offset-xl-5 {\n margin-left: 41.66666667%;\n }\n\n .offset-xl-6 {\n margin-left: 50%;\n }\n\n .offset-xl-7 {\n margin-left: 58.33333333%;\n }\n\n .offset-xl-8 {\n margin-left: 66.66666667%;\n }\n\n .offset-xl-9 {\n margin-left: 75%;\n }\n\n .offset-xl-10 {\n margin-left: 83.33333333%;\n }\n\n .offset-xl-11 {\n margin-left: 91.66666667%;\n }\n\n .g-xl-0,\n.gx-xl-0 {\n --bs-gutter-x: 0;\n }\n\n .g-xl-0,\n.gy-xl-0 {\n --bs-gutter-y: 0;\n }\n\n .g-xl-1,\n.gx-xl-1 {\n --bs-gutter-x: 0.25rem;\n }\n\n .g-xl-1,\n.gy-xl-1 {\n --bs-gutter-y: 0.25rem;\n }\n\n .g-xl-2,\n.gx-xl-2 {\n --bs-gutter-x: 0.5rem;\n }\n\n .g-xl-2,\n.gy-xl-2 {\n --bs-gutter-y: 0.5rem;\n }\n\n .g-xl-3,\n.gx-xl-3 {\n --bs-gutter-x: 1rem;\n }\n\n .g-xl-3,\n.gy-xl-3 {\n --bs-gutter-y: 1rem;\n }\n\n .g-xl-4,\n.gx-xl-4 {\n --bs-gutter-x: 1.5rem;\n }\n\n .g-xl-4,\n.gy-xl-4 {\n --bs-gutter-y: 1.5rem;\n }\n\n .g-xl-5,\n.gx-xl-5 {\n --bs-gutter-x: 3rem;\n }\n\n .g-xl-5,\n.gy-xl-5 {\n --bs-gutter-y: 3rem;\n }\n}\n@media (min-width: 1400px) {\n .col-xxl {\n flex: 1 0 0%;\n }\n\n .row-cols-xxl-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n\n .row-cols-xxl-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n\n .row-cols-xxl-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n\n .row-cols-xxl-3 > * {\n flex: 0 0 auto;\n width: 33.3333333333%;\n }\n\n .row-cols-xxl-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n\n .row-cols-xxl-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n\n .row-cols-xxl-6 > * {\n flex: 0 0 auto;\n width: 16.6666666667%;\n }\n\n .col-xxl-auto {\n flex: 0 0 auto;\n width: auto;\n }\n\n .col-xxl-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n\n .col-xxl-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n\n .col-xxl-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n\n .col-xxl-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n\n .col-xxl-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n\n .col-xxl-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n\n .col-xxl-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n\n .col-xxl-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n\n .col-xxl-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n\n .col-xxl-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n\n .col-xxl-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n\n .col-xxl-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n\n .offset-xxl-0 {\n margin-left: 0;\n }\n\n .offset-xxl-1 {\n margin-left: 8.33333333%;\n }\n\n .offset-xxl-2 {\n margin-left: 16.66666667%;\n }\n\n .offset-xxl-3 {\n margin-left: 25%;\n }\n\n .offset-xxl-4 {\n margin-left: 33.33333333%;\n }\n\n .offset-xxl-5 {\n margin-left: 41.66666667%;\n }\n\n .offset-xxl-6 {\n margin-left: 50%;\n }\n\n .offset-xxl-7 {\n margin-left: 58.33333333%;\n }\n\n .offset-xxl-8 {\n margin-left: 66.66666667%;\n }\n\n .offset-xxl-9 {\n margin-left: 75%;\n }\n\n .offset-xxl-10 {\n margin-left: 83.33333333%;\n }\n\n .offset-xxl-11 {\n margin-left: 91.66666667%;\n }\n\n .g-xxl-0,\n.gx-xxl-0 {\n --bs-gutter-x: 0;\n }\n\n .g-xxl-0,\n.gy-xxl-0 {\n --bs-gutter-y: 0;\n }\n\n .g-xxl-1,\n.gx-xxl-1 {\n --bs-gutter-x: 0.25rem;\n }\n\n .g-xxl-1,\n.gy-xxl-1 {\n --bs-gutter-y: 0.25rem;\n }\n\n .g-xxl-2,\n.gx-xxl-2 {\n --bs-gutter-x: 0.5rem;\n }\n\n .g-xxl-2,\n.gy-xxl-2 {\n --bs-gutter-y: 0.5rem;\n }\n\n .g-xxl-3,\n.gx-xxl-3 {\n --bs-gutter-x: 1rem;\n }\n\n .g-xxl-3,\n.gy-xxl-3 {\n --bs-gutter-y: 1rem;\n }\n\n .g-xxl-4,\n.gx-xxl-4 {\n --bs-gutter-x: 1.5rem;\n }\n\n .g-xxl-4,\n.gy-xxl-4 {\n --bs-gutter-y: 1.5rem;\n }\n\n .g-xxl-5,\n.gx-xxl-5 {\n --bs-gutter-x: 3rem;\n }\n\n .g-xxl-5,\n.gy-xxl-5 {\n --bs-gutter-y: 3rem;\n }\n}\n.d-inline {\n display: inline !important;\n}\n\n.d-inline-block {\n display: inline-block !important;\n}\n\n.d-block {\n display: block !important;\n}\n\n.d-grid {\n display: grid !important;\n}\n\n.d-table {\n display: table !important;\n}\n\n.d-table-row {\n display: table-row !important;\n}\n\n.d-table-cell {\n display: table-cell !important;\n}\n\n.d-flex {\n display: flex !important;\n}\n\n.d-inline-flex {\n display: inline-flex !important;\n}\n\n.d-none {\n display: none !important;\n}\n\n.flex-fill {\n flex: 1 1 auto !important;\n}\n\n.flex-row {\n flex-direction: row !important;\n}\n\n.flex-column {\n flex-direction: column !important;\n}\n\n.flex-row-reverse {\n flex-direction: row-reverse !important;\n}\n\n.flex-column-reverse {\n flex-direction: column-reverse !important;\n}\n\n.flex-grow-0 {\n flex-grow: 0 !important;\n}\n\n.flex-grow-1 {\n flex-grow: 1 !important;\n}\n\n.flex-shrink-0 {\n flex-shrink: 0 !important;\n}\n\n.flex-shrink-1 {\n flex-shrink: 1 !important;\n}\n\n.flex-wrap {\n flex-wrap: wrap !important;\n}\n\n.flex-nowrap {\n flex-wrap: nowrap !important;\n}\n\n.flex-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n}\n\n.justify-content-start {\n justify-content: flex-start !important;\n}\n\n.justify-content-end {\n justify-content: flex-end !important;\n}\n\n.justify-content-center {\n justify-content: center !important;\n}\n\n.justify-content-between {\n justify-content: space-between !important;\n}\n\n.justify-content-around {\n justify-content: space-around !important;\n}\n\n.justify-content-evenly {\n justify-content: space-evenly !important;\n}\n\n.align-items-start {\n align-items: flex-start !important;\n}\n\n.align-items-end {\n align-items: flex-end !important;\n}\n\n.align-items-center {\n align-items: center !important;\n}\n\n.align-items-baseline {\n align-items: baseline !important;\n}\n\n.align-items-stretch {\n align-items: stretch !important;\n}\n\n.align-content-start {\n align-content: flex-start !important;\n}\n\n.align-content-end {\n align-content: flex-end !important;\n}\n\n.align-content-center {\n align-content: center !important;\n}\n\n.align-content-between {\n align-content: space-between !important;\n}\n\n.align-content-around {\n align-content: space-around !important;\n}\n\n.align-content-stretch {\n align-content: stretch !important;\n}\n\n.align-self-auto {\n align-self: auto !important;\n}\n\n.align-self-start {\n align-self: flex-start !important;\n}\n\n.align-self-end {\n align-self: flex-end !important;\n}\n\n.align-self-center {\n align-self: center !important;\n}\n\n.align-self-baseline {\n align-self: baseline !important;\n}\n\n.align-self-stretch {\n align-self: stretch !important;\n}\n\n.order-first {\n order: -1 !important;\n}\n\n.order-0 {\n order: 0 !important;\n}\n\n.order-1 {\n order: 1 !important;\n}\n\n.order-2 {\n order: 2 !important;\n}\n\n.order-3 {\n order: 3 !important;\n}\n\n.order-4 {\n order: 4 !important;\n}\n\n.order-5 {\n order: 5 !important;\n}\n\n.order-last {\n order: 6 !important;\n}\n\n.m-0 {\n margin: 0 !important;\n}\n\n.m-1 {\n margin: 0.25rem !important;\n}\n\n.m-2 {\n margin: 0.5rem !important;\n}\n\n.m-3 {\n margin: 1rem !important;\n}\n\n.m-4 {\n margin: 1.5rem !important;\n}\n\n.m-5 {\n margin: 3rem !important;\n}\n\n.m-auto {\n margin: auto !important;\n}\n\n.mx-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n}\n\n.mx-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n}\n\n.mx-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n}\n\n.mx-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n}\n\n.mx-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n}\n\n.mx-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n}\n\n.mx-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n}\n\n.my-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n}\n\n.my-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n}\n\n.my-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n}\n\n.my-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n}\n\n.my-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n}\n\n.my-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n}\n\n.my-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n}\n\n.mt-0 {\n margin-top: 0 !important;\n}\n\n.mt-1 {\n margin-top: 0.25rem !important;\n}\n\n.mt-2 {\n margin-top: 0.5rem !important;\n}\n\n.mt-3 {\n margin-top: 1rem !important;\n}\n\n.mt-4 {\n margin-top: 1.5rem !important;\n}\n\n.mt-5 {\n margin-top: 3rem !important;\n}\n\n.mt-auto {\n margin-top: auto !important;\n}\n\n.me-0 {\n margin-right: 0 !important;\n}\n\n.me-1 {\n margin-right: 0.25rem !important;\n}\n\n.me-2 {\n margin-right: 0.5rem !important;\n}\n\n.me-3 {\n margin-right: 1rem !important;\n}\n\n.me-4 {\n margin-right: 1.5rem !important;\n}\n\n.me-5 {\n margin-right: 3rem !important;\n}\n\n.me-auto {\n margin-right: auto !important;\n}\n\n.mb-0 {\n margin-bottom: 0 !important;\n}\n\n.mb-1 {\n margin-bottom: 0.25rem !important;\n}\n\n.mb-2 {\n margin-bottom: 0.5rem !important;\n}\n\n.mb-3 {\n margin-bottom: 1rem !important;\n}\n\n.mb-4 {\n margin-bottom: 1.5rem !important;\n}\n\n.mb-5 {\n margin-bottom: 3rem !important;\n}\n\n.mb-auto {\n margin-bottom: auto !important;\n}\n\n.ms-0 {\n margin-left: 0 !important;\n}\n\n.ms-1 {\n margin-left: 0.25rem !important;\n}\n\n.ms-2 {\n margin-left: 0.5rem !important;\n}\n\n.ms-3 {\n margin-left: 1rem !important;\n}\n\n.ms-4 {\n margin-left: 1.5rem !important;\n}\n\n.ms-5 {\n margin-left: 3rem !important;\n}\n\n.ms-auto {\n margin-left: auto !important;\n}\n\n.p-0 {\n padding: 0 !important;\n}\n\n.p-1 {\n padding: 0.25rem !important;\n}\n\n.p-2 {\n padding: 0.5rem !important;\n}\n\n.p-3 {\n padding: 1rem !important;\n}\n\n.p-4 {\n padding: 1.5rem !important;\n}\n\n.p-5 {\n padding: 3rem !important;\n}\n\n.px-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n}\n\n.px-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n}\n\n.px-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n}\n\n.px-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n}\n\n.px-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n}\n\n.px-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n}\n\n.py-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n}\n\n.py-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n}\n\n.py-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n}\n\n.py-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n}\n\n.py-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n}\n\n.py-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n}\n\n.pt-0 {\n padding-top: 0 !important;\n}\n\n.pt-1 {\n padding-top: 0.25rem !important;\n}\n\n.pt-2 {\n padding-top: 0.5rem !important;\n}\n\n.pt-3 {\n padding-top: 1rem !important;\n}\n\n.pt-4 {\n padding-top: 1.5rem !important;\n}\n\n.pt-5 {\n padding-top: 3rem !important;\n}\n\n.pe-0 {\n padding-right: 0 !important;\n}\n\n.pe-1 {\n padding-right: 0.25rem !important;\n}\n\n.pe-2 {\n padding-right: 0.5rem !important;\n}\n\n.pe-3 {\n padding-right: 1rem !important;\n}\n\n.pe-4 {\n padding-right: 1.5rem !important;\n}\n\n.pe-5 {\n padding-right: 3rem !important;\n}\n\n.pb-0 {\n padding-bottom: 0 !important;\n}\n\n.pb-1 {\n padding-bottom: 0.25rem !important;\n}\n\n.pb-2 {\n padding-bottom: 0.5rem !important;\n}\n\n.pb-3 {\n padding-bottom: 1rem !important;\n}\n\n.pb-4 {\n padding-bottom: 1.5rem !important;\n}\n\n.pb-5 {\n padding-bottom: 3rem !important;\n}\n\n.ps-0 {\n padding-left: 0 !important;\n}\n\n.ps-1 {\n padding-left: 0.25rem !important;\n}\n\n.ps-2 {\n padding-left: 0.5rem !important;\n}\n\n.ps-3 {\n padding-left: 1rem !important;\n}\n\n.ps-4 {\n padding-left: 1.5rem !important;\n}\n\n.ps-5 {\n padding-left: 3rem !important;\n}\n\n@media (min-width: 576px) {\n .d-sm-inline {\n display: inline !important;\n }\n\n .d-sm-inline-block {\n display: inline-block !important;\n }\n\n .d-sm-block {\n display: block !important;\n }\n\n .d-sm-grid {\n display: grid !important;\n }\n\n .d-sm-table {\n display: table !important;\n }\n\n .d-sm-table-row {\n display: table-row !important;\n }\n\n .d-sm-table-cell {\n display: table-cell !important;\n }\n\n .d-sm-flex {\n display: flex !important;\n }\n\n .d-sm-inline-flex {\n display: inline-flex !important;\n }\n\n .d-sm-none {\n display: none !important;\n }\n\n .flex-sm-fill {\n flex: 1 1 auto !important;\n }\n\n .flex-sm-row {\n flex-direction: row !important;\n }\n\n .flex-sm-column {\n flex-direction: column !important;\n }\n\n .flex-sm-row-reverse {\n flex-direction: row-reverse !important;\n }\n\n .flex-sm-column-reverse {\n flex-direction: column-reverse !important;\n }\n\n .flex-sm-grow-0 {\n flex-grow: 0 !important;\n }\n\n .flex-sm-grow-1 {\n flex-grow: 1 !important;\n }\n\n .flex-sm-shrink-0 {\n flex-shrink: 0 !important;\n }\n\n .flex-sm-shrink-1 {\n flex-shrink: 1 !important;\n }\n\n .flex-sm-wrap {\n flex-wrap: wrap !important;\n }\n\n .flex-sm-nowrap {\n flex-wrap: nowrap !important;\n }\n\n .flex-sm-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n\n .justify-content-sm-start {\n justify-content: flex-start !important;\n }\n\n .justify-content-sm-end {\n justify-content: flex-end !important;\n }\n\n .justify-content-sm-center {\n justify-content: center !important;\n }\n\n .justify-content-sm-between {\n justify-content: space-between !important;\n }\n\n .justify-content-sm-around {\n justify-content: space-around !important;\n }\n\n .justify-content-sm-evenly {\n justify-content: space-evenly !important;\n }\n\n .align-items-sm-start {\n align-items: flex-start !important;\n }\n\n .align-items-sm-end {\n align-items: flex-end !important;\n }\n\n .align-items-sm-center {\n align-items: center !important;\n }\n\n .align-items-sm-baseline {\n align-items: baseline !important;\n }\n\n .align-items-sm-stretch {\n align-items: stretch !important;\n }\n\n .align-content-sm-start {\n align-content: flex-start !important;\n }\n\n .align-content-sm-end {\n align-content: flex-end !important;\n }\n\n .align-content-sm-center {\n align-content: center !important;\n }\n\n .align-content-sm-between {\n align-content: space-between !important;\n }\n\n .align-content-sm-around {\n align-content: space-around !important;\n }\n\n .align-content-sm-stretch {\n align-content: stretch !important;\n }\n\n .align-self-sm-auto {\n align-self: auto !important;\n }\n\n .align-self-sm-start {\n align-self: flex-start !important;\n }\n\n .align-self-sm-end {\n align-self: flex-end !important;\n }\n\n .align-self-sm-center {\n align-self: center !important;\n }\n\n .align-self-sm-baseline {\n align-self: baseline !important;\n }\n\n .align-self-sm-stretch {\n align-self: stretch !important;\n }\n\n .order-sm-first {\n order: -1 !important;\n }\n\n .order-sm-0 {\n order: 0 !important;\n }\n\n .order-sm-1 {\n order: 1 !important;\n }\n\n .order-sm-2 {\n order: 2 !important;\n }\n\n .order-sm-3 {\n order: 3 !important;\n }\n\n .order-sm-4 {\n order: 4 !important;\n }\n\n .order-sm-5 {\n order: 5 !important;\n }\n\n .order-sm-last {\n order: 6 !important;\n }\n\n .m-sm-0 {\n margin: 0 !important;\n }\n\n .m-sm-1 {\n margin: 0.25rem !important;\n }\n\n .m-sm-2 {\n margin: 0.5rem !important;\n }\n\n .m-sm-3 {\n margin: 1rem !important;\n }\n\n .m-sm-4 {\n margin: 1.5rem !important;\n }\n\n .m-sm-5 {\n margin: 3rem !important;\n }\n\n .m-sm-auto {\n margin: auto !important;\n }\n\n .mx-sm-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n\n .mx-sm-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n }\n\n .mx-sm-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n }\n\n .mx-sm-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n }\n\n .mx-sm-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n }\n\n .mx-sm-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n }\n\n .mx-sm-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n\n .my-sm-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n\n .my-sm-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n\n .my-sm-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n\n .my-sm-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n\n .my-sm-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n\n .my-sm-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n\n .my-sm-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n\n .mt-sm-0 {\n margin-top: 0 !important;\n }\n\n .mt-sm-1 {\n margin-top: 0.25rem !important;\n }\n\n .mt-sm-2 {\n margin-top: 0.5rem !important;\n }\n\n .mt-sm-3 {\n margin-top: 1rem !important;\n }\n\n .mt-sm-4 {\n margin-top: 1.5rem !important;\n }\n\n .mt-sm-5 {\n margin-top: 3rem !important;\n }\n\n .mt-sm-auto {\n margin-top: auto !important;\n }\n\n .me-sm-0 {\n margin-right: 0 !important;\n }\n\n .me-sm-1 {\n margin-right: 0.25rem !important;\n }\n\n .me-sm-2 {\n margin-right: 0.5rem !important;\n }\n\n .me-sm-3 {\n margin-right: 1rem !important;\n }\n\n .me-sm-4 {\n margin-right: 1.5rem !important;\n }\n\n .me-sm-5 {\n margin-right: 3rem !important;\n }\n\n .me-sm-auto {\n margin-right: auto !important;\n }\n\n .mb-sm-0 {\n margin-bottom: 0 !important;\n }\n\n .mb-sm-1 {\n margin-bottom: 0.25rem !important;\n }\n\n .mb-sm-2 {\n margin-bottom: 0.5rem !important;\n }\n\n .mb-sm-3 {\n margin-bottom: 1rem !important;\n }\n\n .mb-sm-4 {\n margin-bottom: 1.5rem !important;\n }\n\n .mb-sm-5 {\n margin-bottom: 3rem !important;\n }\n\n .mb-sm-auto {\n margin-bottom: auto !important;\n }\n\n .ms-sm-0 {\n margin-left: 0 !important;\n }\n\n .ms-sm-1 {\n margin-left: 0.25rem !important;\n }\n\n .ms-sm-2 {\n margin-left: 0.5rem !important;\n }\n\n .ms-sm-3 {\n margin-left: 1rem !important;\n }\n\n .ms-sm-4 {\n margin-left: 1.5rem !important;\n }\n\n .ms-sm-5 {\n margin-left: 3rem !important;\n }\n\n .ms-sm-auto {\n margin-left: auto !important;\n }\n\n .p-sm-0 {\n padding: 0 !important;\n }\n\n .p-sm-1 {\n padding: 0.25rem !important;\n }\n\n .p-sm-2 {\n padding: 0.5rem !important;\n }\n\n .p-sm-3 {\n padding: 1rem !important;\n }\n\n .p-sm-4 {\n padding: 1.5rem !important;\n }\n\n .p-sm-5 {\n padding: 3rem !important;\n }\n\n .px-sm-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n\n .px-sm-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n }\n\n .px-sm-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n }\n\n .px-sm-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n }\n\n .px-sm-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n }\n\n .px-sm-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n }\n\n .py-sm-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n\n .py-sm-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n\n .py-sm-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n\n .py-sm-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n\n .py-sm-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n\n .py-sm-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n\n .pt-sm-0 {\n padding-top: 0 !important;\n }\n\n .pt-sm-1 {\n padding-top: 0.25rem !important;\n }\n\n .pt-sm-2 {\n padding-top: 0.5rem !important;\n }\n\n .pt-sm-3 {\n padding-top: 1rem !important;\n }\n\n .pt-sm-4 {\n padding-top: 1.5rem !important;\n }\n\n .pt-sm-5 {\n padding-top: 3rem !important;\n }\n\n .pe-sm-0 {\n padding-right: 0 !important;\n }\n\n .pe-sm-1 {\n padding-right: 0.25rem !important;\n }\n\n .pe-sm-2 {\n padding-right: 0.5rem !important;\n }\n\n .pe-sm-3 {\n padding-right: 1rem !important;\n }\n\n .pe-sm-4 {\n padding-right: 1.5rem !important;\n }\n\n .pe-sm-5 {\n padding-right: 3rem !important;\n }\n\n .pb-sm-0 {\n padding-bottom: 0 !important;\n }\n\n .pb-sm-1 {\n padding-bottom: 0.25rem !important;\n }\n\n .pb-sm-2 {\n padding-bottom: 0.5rem !important;\n }\n\n .pb-sm-3 {\n padding-bottom: 1rem !important;\n }\n\n .pb-sm-4 {\n padding-bottom: 1.5rem !important;\n }\n\n .pb-sm-5 {\n padding-bottom: 3rem !important;\n }\n\n .ps-sm-0 {\n padding-left: 0 !important;\n }\n\n .ps-sm-1 {\n padding-left: 0.25rem !important;\n }\n\n .ps-sm-2 {\n padding-left: 0.5rem !important;\n }\n\n .ps-sm-3 {\n padding-left: 1rem !important;\n }\n\n .ps-sm-4 {\n padding-left: 1.5rem !important;\n }\n\n .ps-sm-5 {\n padding-left: 3rem !important;\n }\n}\n@media (min-width: 768px) {\n .d-md-inline {\n display: inline !important;\n }\n\n .d-md-inline-block {\n display: inline-block !important;\n }\n\n .d-md-block {\n display: block !important;\n }\n\n .d-md-grid {\n display: grid !important;\n }\n\n .d-md-table {\n display: table !important;\n }\n\n .d-md-table-row {\n display: table-row !important;\n }\n\n .d-md-table-cell {\n display: table-cell !important;\n }\n\n .d-md-flex {\n display: flex !important;\n }\n\n .d-md-inline-flex {\n display: inline-flex !important;\n }\n\n .d-md-none {\n display: none !important;\n }\n\n .flex-md-fill {\n flex: 1 1 auto !important;\n }\n\n .flex-md-row {\n flex-direction: row !important;\n }\n\n .flex-md-column {\n flex-direction: column !important;\n }\n\n .flex-md-row-reverse {\n flex-direction: row-reverse !important;\n }\n\n .flex-md-column-reverse {\n flex-direction: column-reverse !important;\n }\n\n .flex-md-grow-0 {\n flex-grow: 0 !important;\n }\n\n .flex-md-grow-1 {\n flex-grow: 1 !important;\n }\n\n .flex-md-shrink-0 {\n flex-shrink: 0 !important;\n }\n\n .flex-md-shrink-1 {\n flex-shrink: 1 !important;\n }\n\n .flex-md-wrap {\n flex-wrap: wrap !important;\n }\n\n .flex-md-nowrap {\n flex-wrap: nowrap !important;\n }\n\n .flex-md-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n\n .justify-content-md-start {\n justify-content: flex-start !important;\n }\n\n .justify-content-md-end {\n justify-content: flex-end !important;\n }\n\n .justify-content-md-center {\n justify-content: center !important;\n }\n\n .justify-content-md-between {\n justify-content: space-between !important;\n }\n\n .justify-content-md-around {\n justify-content: space-around !important;\n }\n\n .justify-content-md-evenly {\n justify-content: space-evenly !important;\n }\n\n .align-items-md-start {\n align-items: flex-start !important;\n }\n\n .align-items-md-end {\n align-items: flex-end !important;\n }\n\n .align-items-md-center {\n align-items: center !important;\n }\n\n .align-items-md-baseline {\n align-items: baseline !important;\n }\n\n .align-items-md-stretch {\n align-items: stretch !important;\n }\n\n .align-content-md-start {\n align-content: flex-start !important;\n }\n\n .align-content-md-end {\n align-content: flex-end !important;\n }\n\n .align-content-md-center {\n align-content: center !important;\n }\n\n .align-content-md-between {\n align-content: space-between !important;\n }\n\n .align-content-md-around {\n align-content: space-around !important;\n }\n\n .align-content-md-stretch {\n align-content: stretch !important;\n }\n\n .align-self-md-auto {\n align-self: auto !important;\n }\n\n .align-self-md-start {\n align-self: flex-start !important;\n }\n\n .align-self-md-end {\n align-self: flex-end !important;\n }\n\n .align-self-md-center {\n align-self: center !important;\n }\n\n .align-self-md-baseline {\n align-self: baseline !important;\n }\n\n .align-self-md-stretch {\n align-self: stretch !important;\n }\n\n .order-md-first {\n order: -1 !important;\n }\n\n .order-md-0 {\n order: 0 !important;\n }\n\n .order-md-1 {\n order: 1 !important;\n }\n\n .order-md-2 {\n order: 2 !important;\n }\n\n .order-md-3 {\n order: 3 !important;\n }\n\n .order-md-4 {\n order: 4 !important;\n }\n\n .order-md-5 {\n order: 5 !important;\n }\n\n .order-md-last {\n order: 6 !important;\n }\n\n .m-md-0 {\n margin: 0 !important;\n }\n\n .m-md-1 {\n margin: 0.25rem !important;\n }\n\n .m-md-2 {\n margin: 0.5rem !important;\n }\n\n .m-md-3 {\n margin: 1rem !important;\n }\n\n .m-md-4 {\n margin: 1.5rem !important;\n }\n\n .m-md-5 {\n margin: 3rem !important;\n }\n\n .m-md-auto {\n margin: auto !important;\n }\n\n .mx-md-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n\n .mx-md-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n }\n\n .mx-md-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n }\n\n .mx-md-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n }\n\n .mx-md-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n }\n\n .mx-md-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n }\n\n .mx-md-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n\n .my-md-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n\n .my-md-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n\n .my-md-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n\n .my-md-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n\n .my-md-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n\n .my-md-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n\n .my-md-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n\n .mt-md-0 {\n margin-top: 0 !important;\n }\n\n .mt-md-1 {\n margin-top: 0.25rem !important;\n }\n\n .mt-md-2 {\n margin-top: 0.5rem !important;\n }\n\n .mt-md-3 {\n margin-top: 1rem !important;\n }\n\n .mt-md-4 {\n margin-top: 1.5rem !important;\n }\n\n .mt-md-5 {\n margin-top: 3rem !important;\n }\n\n .mt-md-auto {\n margin-top: auto !important;\n }\n\n .me-md-0 {\n margin-right: 0 !important;\n }\n\n .me-md-1 {\n margin-right: 0.25rem !important;\n }\n\n .me-md-2 {\n margin-right: 0.5rem !important;\n }\n\n .me-md-3 {\n margin-right: 1rem !important;\n }\n\n .me-md-4 {\n margin-right: 1.5rem !important;\n }\n\n .me-md-5 {\n margin-right: 3rem !important;\n }\n\n .me-md-auto {\n margin-right: auto !important;\n }\n\n .mb-md-0 {\n margin-bottom: 0 !important;\n }\n\n .mb-md-1 {\n margin-bottom: 0.25rem !important;\n }\n\n .mb-md-2 {\n margin-bottom: 0.5rem !important;\n }\n\n .mb-md-3 {\n margin-bottom: 1rem !important;\n }\n\n .mb-md-4 {\n margin-bottom: 1.5rem !important;\n }\n\n .mb-md-5 {\n margin-bottom: 3rem !important;\n }\n\n .mb-md-auto {\n margin-bottom: auto !important;\n }\n\n .ms-md-0 {\n margin-left: 0 !important;\n }\n\n .ms-md-1 {\n margin-left: 0.25rem !important;\n }\n\n .ms-md-2 {\n margin-left: 0.5rem !important;\n }\n\n .ms-md-3 {\n margin-left: 1rem !important;\n }\n\n .ms-md-4 {\n margin-left: 1.5rem !important;\n }\n\n .ms-md-5 {\n margin-left: 3rem !important;\n }\n\n .ms-md-auto {\n margin-left: auto !important;\n }\n\n .p-md-0 {\n padding: 0 !important;\n }\n\n .p-md-1 {\n padding: 0.25rem !important;\n }\n\n .p-md-2 {\n padding: 0.5rem !important;\n }\n\n .p-md-3 {\n padding: 1rem !important;\n }\n\n .p-md-4 {\n padding: 1.5rem !important;\n }\n\n .p-md-5 {\n padding: 3rem !important;\n }\n\n .px-md-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n\n .px-md-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n }\n\n .px-md-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n }\n\n .px-md-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n }\n\n .px-md-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n }\n\n .px-md-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n }\n\n .py-md-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n\n .py-md-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n\n .py-md-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n\n .py-md-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n\n .py-md-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n\n .py-md-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n\n .pt-md-0 {\n padding-top: 0 !important;\n }\n\n .pt-md-1 {\n padding-top: 0.25rem !important;\n }\n\n .pt-md-2 {\n padding-top: 0.5rem !important;\n }\n\n .pt-md-3 {\n padding-top: 1rem !important;\n }\n\n .pt-md-4 {\n padding-top: 1.5rem !important;\n }\n\n .pt-md-5 {\n padding-top: 3rem !important;\n }\n\n .pe-md-0 {\n padding-right: 0 !important;\n }\n\n .pe-md-1 {\n padding-right: 0.25rem !important;\n }\n\n .pe-md-2 {\n padding-right: 0.5rem !important;\n }\n\n .pe-md-3 {\n padding-right: 1rem !important;\n }\n\n .pe-md-4 {\n padding-right: 1.5rem !important;\n }\n\n .pe-md-5 {\n padding-right: 3rem !important;\n }\n\n .pb-md-0 {\n padding-bottom: 0 !important;\n }\n\n .pb-md-1 {\n padding-bottom: 0.25rem !important;\n }\n\n .pb-md-2 {\n padding-bottom: 0.5rem !important;\n }\n\n .pb-md-3 {\n padding-bottom: 1rem !important;\n }\n\n .pb-md-4 {\n padding-bottom: 1.5rem !important;\n }\n\n .pb-md-5 {\n padding-bottom: 3rem !important;\n }\n\n .ps-md-0 {\n padding-left: 0 !important;\n }\n\n .ps-md-1 {\n padding-left: 0.25rem !important;\n }\n\n .ps-md-2 {\n padding-left: 0.5rem !important;\n }\n\n .ps-md-3 {\n padding-left: 1rem !important;\n }\n\n .ps-md-4 {\n padding-left: 1.5rem !important;\n }\n\n .ps-md-5 {\n padding-left: 3rem !important;\n }\n}\n@media (min-width: 992px) {\n .d-lg-inline {\n display: inline !important;\n }\n\n .d-lg-inline-block {\n display: inline-block !important;\n }\n\n .d-lg-block {\n display: block !important;\n }\n\n .d-lg-grid {\n display: grid !important;\n }\n\n .d-lg-table {\n display: table !important;\n }\n\n .d-lg-table-row {\n display: table-row !important;\n }\n\n .d-lg-table-cell {\n display: table-cell !important;\n }\n\n .d-lg-flex {\n display: flex !important;\n }\n\n .d-lg-inline-flex {\n display: inline-flex !important;\n }\n\n .d-lg-none {\n display: none !important;\n }\n\n .flex-lg-fill {\n flex: 1 1 auto !important;\n }\n\n .flex-lg-row {\n flex-direction: row !important;\n }\n\n .flex-lg-column {\n flex-direction: column !important;\n }\n\n .flex-lg-row-reverse {\n flex-direction: row-reverse !important;\n }\n\n .flex-lg-column-reverse {\n flex-direction: column-reverse !important;\n }\n\n .flex-lg-grow-0 {\n flex-grow: 0 !important;\n }\n\n .flex-lg-grow-1 {\n flex-grow: 1 !important;\n }\n\n .flex-lg-shrink-0 {\n flex-shrink: 0 !important;\n }\n\n .flex-lg-shrink-1 {\n flex-shrink: 1 !important;\n }\n\n .flex-lg-wrap {\n flex-wrap: wrap !important;\n }\n\n .flex-lg-nowrap {\n flex-wrap: nowrap !important;\n }\n\n .flex-lg-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n\n .justify-content-lg-start {\n justify-content: flex-start !important;\n }\n\n .justify-content-lg-end {\n justify-content: flex-end !important;\n }\n\n .justify-content-lg-center {\n justify-content: center !important;\n }\n\n .justify-content-lg-between {\n justify-content: space-between !important;\n }\n\n .justify-content-lg-around {\n justify-content: space-around !important;\n }\n\n .justify-content-lg-evenly {\n justify-content: space-evenly !important;\n }\n\n .align-items-lg-start {\n align-items: flex-start !important;\n }\n\n .align-items-lg-end {\n align-items: flex-end !important;\n }\n\n .align-items-lg-center {\n align-items: center !important;\n }\n\n .align-items-lg-baseline {\n align-items: baseline !important;\n }\n\n .align-items-lg-stretch {\n align-items: stretch !important;\n }\n\n .align-content-lg-start {\n align-content: flex-start !important;\n }\n\n .align-content-lg-end {\n align-content: flex-end !important;\n }\n\n .align-content-lg-center {\n align-content: center !important;\n }\n\n .align-content-lg-between {\n align-content: space-between !important;\n }\n\n .align-content-lg-around {\n align-content: space-around !important;\n }\n\n .align-content-lg-stretch {\n align-content: stretch !important;\n }\n\n .align-self-lg-auto {\n align-self: auto !important;\n }\n\n .align-self-lg-start {\n align-self: flex-start !important;\n }\n\n .align-self-lg-end {\n align-self: flex-end !important;\n }\n\n .align-self-lg-center {\n align-self: center !important;\n }\n\n .align-self-lg-baseline {\n align-self: baseline !important;\n }\n\n .align-self-lg-stretch {\n align-self: stretch !important;\n }\n\n .order-lg-first {\n order: -1 !important;\n }\n\n .order-lg-0 {\n order: 0 !important;\n }\n\n .order-lg-1 {\n order: 1 !important;\n }\n\n .order-lg-2 {\n order: 2 !important;\n }\n\n .order-lg-3 {\n order: 3 !important;\n }\n\n .order-lg-4 {\n order: 4 !important;\n }\n\n .order-lg-5 {\n order: 5 !important;\n }\n\n .order-lg-last {\n order: 6 !important;\n }\n\n .m-lg-0 {\n margin: 0 !important;\n }\n\n .m-lg-1 {\n margin: 0.25rem !important;\n }\n\n .m-lg-2 {\n margin: 0.5rem !important;\n }\n\n .m-lg-3 {\n margin: 1rem !important;\n }\n\n .m-lg-4 {\n margin: 1.5rem !important;\n }\n\n .m-lg-5 {\n margin: 3rem !important;\n }\n\n .m-lg-auto {\n margin: auto !important;\n }\n\n .mx-lg-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n\n .mx-lg-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n }\n\n .mx-lg-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n }\n\n .mx-lg-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n }\n\n .mx-lg-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n }\n\n .mx-lg-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n }\n\n .mx-lg-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n\n .my-lg-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n\n .my-lg-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n\n .my-lg-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n\n .my-lg-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n\n .my-lg-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n\n .my-lg-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n\n .my-lg-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n\n .mt-lg-0 {\n margin-top: 0 !important;\n }\n\n .mt-lg-1 {\n margin-top: 0.25rem !important;\n }\n\n .mt-lg-2 {\n margin-top: 0.5rem !important;\n }\n\n .mt-lg-3 {\n margin-top: 1rem !important;\n }\n\n .mt-lg-4 {\n margin-top: 1.5rem !important;\n }\n\n .mt-lg-5 {\n margin-top: 3rem !important;\n }\n\n .mt-lg-auto {\n margin-top: auto !important;\n }\n\n .me-lg-0 {\n margin-right: 0 !important;\n }\n\n .me-lg-1 {\n margin-right: 0.25rem !important;\n }\n\n .me-lg-2 {\n margin-right: 0.5rem !important;\n }\n\n .me-lg-3 {\n margin-right: 1rem !important;\n }\n\n .me-lg-4 {\n margin-right: 1.5rem !important;\n }\n\n .me-lg-5 {\n margin-right: 3rem !important;\n }\n\n .me-lg-auto {\n margin-right: auto !important;\n }\n\n .mb-lg-0 {\n margin-bottom: 0 !important;\n }\n\n .mb-lg-1 {\n margin-bottom: 0.25rem !important;\n }\n\n .mb-lg-2 {\n margin-bottom: 0.5rem !important;\n }\n\n .mb-lg-3 {\n margin-bottom: 1rem !important;\n }\n\n .mb-lg-4 {\n margin-bottom: 1.5rem !important;\n }\n\n .mb-lg-5 {\n margin-bottom: 3rem !important;\n }\n\n .mb-lg-auto {\n margin-bottom: auto !important;\n }\n\n .ms-lg-0 {\n margin-left: 0 !important;\n }\n\n .ms-lg-1 {\n margin-left: 0.25rem !important;\n }\n\n .ms-lg-2 {\n margin-left: 0.5rem !important;\n }\n\n .ms-lg-3 {\n margin-left: 1rem !important;\n }\n\n .ms-lg-4 {\n margin-left: 1.5rem !important;\n }\n\n .ms-lg-5 {\n margin-left: 3rem !important;\n }\n\n .ms-lg-auto {\n margin-left: auto !important;\n }\n\n .p-lg-0 {\n padding: 0 !important;\n }\n\n .p-lg-1 {\n padding: 0.25rem !important;\n }\n\n .p-lg-2 {\n padding: 0.5rem !important;\n }\n\n .p-lg-3 {\n padding: 1rem !important;\n }\n\n .p-lg-4 {\n padding: 1.5rem !important;\n }\n\n .p-lg-5 {\n padding: 3rem !important;\n }\n\n .px-lg-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n\n .px-lg-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n }\n\n .px-lg-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n }\n\n .px-lg-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n }\n\n .px-lg-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n }\n\n .px-lg-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n }\n\n .py-lg-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n\n .py-lg-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n\n .py-lg-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n\n .py-lg-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n\n .py-lg-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n\n .py-lg-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n\n .pt-lg-0 {\n padding-top: 0 !important;\n }\n\n .pt-lg-1 {\n padding-top: 0.25rem !important;\n }\n\n .pt-lg-2 {\n padding-top: 0.5rem !important;\n }\n\n .pt-lg-3 {\n padding-top: 1rem !important;\n }\n\n .pt-lg-4 {\n padding-top: 1.5rem !important;\n }\n\n .pt-lg-5 {\n padding-top: 3rem !important;\n }\n\n .pe-lg-0 {\n padding-right: 0 !important;\n }\n\n .pe-lg-1 {\n padding-right: 0.25rem !important;\n }\n\n .pe-lg-2 {\n padding-right: 0.5rem !important;\n }\n\n .pe-lg-3 {\n padding-right: 1rem !important;\n }\n\n .pe-lg-4 {\n padding-right: 1.5rem !important;\n }\n\n .pe-lg-5 {\n padding-right: 3rem !important;\n }\n\n .pb-lg-0 {\n padding-bottom: 0 !important;\n }\n\n .pb-lg-1 {\n padding-bottom: 0.25rem !important;\n }\n\n .pb-lg-2 {\n padding-bottom: 0.5rem !important;\n }\n\n .pb-lg-3 {\n padding-bottom: 1rem !important;\n }\n\n .pb-lg-4 {\n padding-bottom: 1.5rem !important;\n }\n\n .pb-lg-5 {\n padding-bottom: 3rem !important;\n }\n\n .ps-lg-0 {\n padding-left: 0 !important;\n }\n\n .ps-lg-1 {\n padding-left: 0.25rem !important;\n }\n\n .ps-lg-2 {\n padding-left: 0.5rem !important;\n }\n\n .ps-lg-3 {\n padding-left: 1rem !important;\n }\n\n .ps-lg-4 {\n padding-left: 1.5rem !important;\n }\n\n .ps-lg-5 {\n padding-left: 3rem !important;\n }\n}\n@media (min-width: 1200px) {\n .d-xl-inline {\n display: inline !important;\n }\n\n .d-xl-inline-block {\n display: inline-block !important;\n }\n\n .d-xl-block {\n display: block !important;\n }\n\n .d-xl-grid {\n display: grid !important;\n }\n\n .d-xl-table {\n display: table !important;\n }\n\n .d-xl-table-row {\n display: table-row !important;\n }\n\n .d-xl-table-cell {\n display: table-cell !important;\n }\n\n .d-xl-flex {\n display: flex !important;\n }\n\n .d-xl-inline-flex {\n display: inline-flex !important;\n }\n\n .d-xl-none {\n display: none !important;\n }\n\n .flex-xl-fill {\n flex: 1 1 auto !important;\n }\n\n .flex-xl-row {\n flex-direction: row !important;\n }\n\n .flex-xl-column {\n flex-direction: column !important;\n }\n\n .flex-xl-row-reverse {\n flex-direction: row-reverse !important;\n }\n\n .flex-xl-column-reverse {\n flex-direction: column-reverse !important;\n }\n\n .flex-xl-grow-0 {\n flex-grow: 0 !important;\n }\n\n .flex-xl-grow-1 {\n flex-grow: 1 !important;\n }\n\n .flex-xl-shrink-0 {\n flex-shrink: 0 !important;\n }\n\n .flex-xl-shrink-1 {\n flex-shrink: 1 !important;\n }\n\n .flex-xl-wrap {\n flex-wrap: wrap !important;\n }\n\n .flex-xl-nowrap {\n flex-wrap: nowrap !important;\n }\n\n .flex-xl-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n\n .justify-content-xl-start {\n justify-content: flex-start !important;\n }\n\n .justify-content-xl-end {\n justify-content: flex-end !important;\n }\n\n .justify-content-xl-center {\n justify-content: center !important;\n }\n\n .justify-content-xl-between {\n justify-content: space-between !important;\n }\n\n .justify-content-xl-around {\n justify-content: space-around !important;\n }\n\n .justify-content-xl-evenly {\n justify-content: space-evenly !important;\n }\n\n .align-items-xl-start {\n align-items: flex-start !important;\n }\n\n .align-items-xl-end {\n align-items: flex-end !important;\n }\n\n .align-items-xl-center {\n align-items: center !important;\n }\n\n .align-items-xl-baseline {\n align-items: baseline !important;\n }\n\n .align-items-xl-stretch {\n align-items: stretch !important;\n }\n\n .align-content-xl-start {\n align-content: flex-start !important;\n }\n\n .align-content-xl-end {\n align-content: flex-end !important;\n }\n\n .align-content-xl-center {\n align-content: center !important;\n }\n\n .align-content-xl-between {\n align-content: space-between !important;\n }\n\n .align-content-xl-around {\n align-content: space-around !important;\n }\n\n .align-content-xl-stretch {\n align-content: stretch !important;\n }\n\n .align-self-xl-auto {\n align-self: auto !important;\n }\n\n .align-self-xl-start {\n align-self: flex-start !important;\n }\n\n .align-self-xl-end {\n align-self: flex-end !important;\n }\n\n .align-self-xl-center {\n align-self: center !important;\n }\n\n .align-self-xl-baseline {\n align-self: baseline !important;\n }\n\n .align-self-xl-stretch {\n align-self: stretch !important;\n }\n\n .order-xl-first {\n order: -1 !important;\n }\n\n .order-xl-0 {\n order: 0 !important;\n }\n\n .order-xl-1 {\n order: 1 !important;\n }\n\n .order-xl-2 {\n order: 2 !important;\n }\n\n .order-xl-3 {\n order: 3 !important;\n }\n\n .order-xl-4 {\n order: 4 !important;\n }\n\n .order-xl-5 {\n order: 5 !important;\n }\n\n .order-xl-last {\n order: 6 !important;\n }\n\n .m-xl-0 {\n margin: 0 !important;\n }\n\n .m-xl-1 {\n margin: 0.25rem !important;\n }\n\n .m-xl-2 {\n margin: 0.5rem !important;\n }\n\n .m-xl-3 {\n margin: 1rem !important;\n }\n\n .m-xl-4 {\n margin: 1.5rem !important;\n }\n\n .m-xl-5 {\n margin: 3rem !important;\n }\n\n .m-xl-auto {\n margin: auto !important;\n }\n\n .mx-xl-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n\n .mx-xl-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n }\n\n .mx-xl-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n }\n\n .mx-xl-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n }\n\n .mx-xl-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n }\n\n .mx-xl-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n }\n\n .mx-xl-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n\n .my-xl-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n\n .my-xl-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n\n .my-xl-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n\n .my-xl-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n\n .my-xl-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n\n .my-xl-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n\n .my-xl-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n\n .mt-xl-0 {\n margin-top: 0 !important;\n }\n\n .mt-xl-1 {\n margin-top: 0.25rem !important;\n }\n\n .mt-xl-2 {\n margin-top: 0.5rem !important;\n }\n\n .mt-xl-3 {\n margin-top: 1rem !important;\n }\n\n .mt-xl-4 {\n margin-top: 1.5rem !important;\n }\n\n .mt-xl-5 {\n margin-top: 3rem !important;\n }\n\n .mt-xl-auto {\n margin-top: auto !important;\n }\n\n .me-xl-0 {\n margin-right: 0 !important;\n }\n\n .me-xl-1 {\n margin-right: 0.25rem !important;\n }\n\n .me-xl-2 {\n margin-right: 0.5rem !important;\n }\n\n .me-xl-3 {\n margin-right: 1rem !important;\n }\n\n .me-xl-4 {\n margin-right: 1.5rem !important;\n }\n\n .me-xl-5 {\n margin-right: 3rem !important;\n }\n\n .me-xl-auto {\n margin-right: auto !important;\n }\n\n .mb-xl-0 {\n margin-bottom: 0 !important;\n }\n\n .mb-xl-1 {\n margin-bottom: 0.25rem !important;\n }\n\n .mb-xl-2 {\n margin-bottom: 0.5rem !important;\n }\n\n .mb-xl-3 {\n margin-bottom: 1rem !important;\n }\n\n .mb-xl-4 {\n margin-bottom: 1.5rem !important;\n }\n\n .mb-xl-5 {\n margin-bottom: 3rem !important;\n }\n\n .mb-xl-auto {\n margin-bottom: auto !important;\n }\n\n .ms-xl-0 {\n margin-left: 0 !important;\n }\n\n .ms-xl-1 {\n margin-left: 0.25rem !important;\n }\n\n .ms-xl-2 {\n margin-left: 0.5rem !important;\n }\n\n .ms-xl-3 {\n margin-left: 1rem !important;\n }\n\n .ms-xl-4 {\n margin-left: 1.5rem !important;\n }\n\n .ms-xl-5 {\n margin-left: 3rem !important;\n }\n\n .ms-xl-auto {\n margin-left: auto !important;\n }\n\n .p-xl-0 {\n padding: 0 !important;\n }\n\n .p-xl-1 {\n padding: 0.25rem !important;\n }\n\n .p-xl-2 {\n padding: 0.5rem !important;\n }\n\n .p-xl-3 {\n padding: 1rem !important;\n }\n\n .p-xl-4 {\n padding: 1.5rem !important;\n }\n\n .p-xl-5 {\n padding: 3rem !important;\n }\n\n .px-xl-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n\n .px-xl-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n }\n\n .px-xl-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n }\n\n .px-xl-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n }\n\n .px-xl-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n }\n\n .px-xl-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n }\n\n .py-xl-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n\n .py-xl-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n\n .py-xl-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n\n .py-xl-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n\n .py-xl-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n\n .py-xl-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n\n .pt-xl-0 {\n padding-top: 0 !important;\n }\n\n .pt-xl-1 {\n padding-top: 0.25rem !important;\n }\n\n .pt-xl-2 {\n padding-top: 0.5rem !important;\n }\n\n .pt-xl-3 {\n padding-top: 1rem !important;\n }\n\n .pt-xl-4 {\n padding-top: 1.5rem !important;\n }\n\n .pt-xl-5 {\n padding-top: 3rem !important;\n }\n\n .pe-xl-0 {\n padding-right: 0 !important;\n }\n\n .pe-xl-1 {\n padding-right: 0.25rem !important;\n }\n\n .pe-xl-2 {\n padding-right: 0.5rem !important;\n }\n\n .pe-xl-3 {\n padding-right: 1rem !important;\n }\n\n .pe-xl-4 {\n padding-right: 1.5rem !important;\n }\n\n .pe-xl-5 {\n padding-right: 3rem !important;\n }\n\n .pb-xl-0 {\n padding-bottom: 0 !important;\n }\n\n .pb-xl-1 {\n padding-bottom: 0.25rem !important;\n }\n\n .pb-xl-2 {\n padding-bottom: 0.5rem !important;\n }\n\n .pb-xl-3 {\n padding-bottom: 1rem !important;\n }\n\n .pb-xl-4 {\n padding-bottom: 1.5rem !important;\n }\n\n .pb-xl-5 {\n padding-bottom: 3rem !important;\n }\n\n .ps-xl-0 {\n padding-left: 0 !important;\n }\n\n .ps-xl-1 {\n padding-left: 0.25rem !important;\n }\n\n .ps-xl-2 {\n padding-left: 0.5rem !important;\n }\n\n .ps-xl-3 {\n padding-left: 1rem !important;\n }\n\n .ps-xl-4 {\n padding-left: 1.5rem !important;\n }\n\n .ps-xl-5 {\n padding-left: 3rem !important;\n }\n}\n@media (min-width: 1400px) {\n .d-xxl-inline {\n display: inline !important;\n }\n\n .d-xxl-inline-block {\n display: inline-block !important;\n }\n\n .d-xxl-block {\n display: block !important;\n }\n\n .d-xxl-grid {\n display: grid !important;\n }\n\n .d-xxl-table {\n display: table !important;\n }\n\n .d-xxl-table-row {\n display: table-row !important;\n }\n\n .d-xxl-table-cell {\n display: table-cell !important;\n }\n\n .d-xxl-flex {\n display: flex !important;\n }\n\n .d-xxl-inline-flex {\n display: inline-flex !important;\n }\n\n .d-xxl-none {\n display: none !important;\n }\n\n .flex-xxl-fill {\n flex: 1 1 auto !important;\n }\n\n .flex-xxl-row {\n flex-direction: row !important;\n }\n\n .flex-xxl-column {\n flex-direction: column !important;\n }\n\n .flex-xxl-row-reverse {\n flex-direction: row-reverse !important;\n }\n\n .flex-xxl-column-reverse {\n flex-direction: column-reverse !important;\n }\n\n .flex-xxl-grow-0 {\n flex-grow: 0 !important;\n }\n\n .flex-xxl-grow-1 {\n flex-grow: 1 !important;\n }\n\n .flex-xxl-shrink-0 {\n flex-shrink: 0 !important;\n }\n\n .flex-xxl-shrink-1 {\n flex-shrink: 1 !important;\n }\n\n .flex-xxl-wrap {\n flex-wrap: wrap !important;\n }\n\n .flex-xxl-nowrap {\n flex-wrap: nowrap !important;\n }\n\n .flex-xxl-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n\n .justify-content-xxl-start {\n justify-content: flex-start !important;\n }\n\n .justify-content-xxl-end {\n justify-content: flex-end !important;\n }\n\n .justify-content-xxl-center {\n justify-content: center !important;\n }\n\n .justify-content-xxl-between {\n justify-content: space-between !important;\n }\n\n .justify-content-xxl-around {\n justify-content: space-around !important;\n }\n\n .justify-content-xxl-evenly {\n justify-content: space-evenly !important;\n }\n\n .align-items-xxl-start {\n align-items: flex-start !important;\n }\n\n .align-items-xxl-end {\n align-items: flex-end !important;\n }\n\n .align-items-xxl-center {\n align-items: center !important;\n }\n\n .align-items-xxl-baseline {\n align-items: baseline !important;\n }\n\n .align-items-xxl-stretch {\n align-items: stretch !important;\n }\n\n .align-content-xxl-start {\n align-content: flex-start !important;\n }\n\n .align-content-xxl-end {\n align-content: flex-end !important;\n }\n\n .align-content-xxl-center {\n align-content: center !important;\n }\n\n .align-content-xxl-between {\n align-content: space-between !important;\n }\n\n .align-content-xxl-around {\n align-content: space-around !important;\n }\n\n .align-content-xxl-stretch {\n align-content: stretch !important;\n }\n\n .align-self-xxl-auto {\n align-self: auto !important;\n }\n\n .align-self-xxl-start {\n align-self: flex-start !important;\n }\n\n .align-self-xxl-end {\n align-self: flex-end !important;\n }\n\n .align-self-xxl-center {\n align-self: center !important;\n }\n\n .align-self-xxl-baseline {\n align-self: baseline !important;\n }\n\n .align-self-xxl-stretch {\n align-self: stretch !important;\n }\n\n .order-xxl-first {\n order: -1 !important;\n }\n\n .order-xxl-0 {\n order: 0 !important;\n }\n\n .order-xxl-1 {\n order: 1 !important;\n }\n\n .order-xxl-2 {\n order: 2 !important;\n }\n\n .order-xxl-3 {\n order: 3 !important;\n }\n\n .order-xxl-4 {\n order: 4 !important;\n }\n\n .order-xxl-5 {\n order: 5 !important;\n }\n\n .order-xxl-last {\n order: 6 !important;\n }\n\n .m-xxl-0 {\n margin: 0 !important;\n }\n\n .m-xxl-1 {\n margin: 0.25rem !important;\n }\n\n .m-xxl-2 {\n margin: 0.5rem !important;\n }\n\n .m-xxl-3 {\n margin: 1rem !important;\n }\n\n .m-xxl-4 {\n margin: 1.5rem !important;\n }\n\n .m-xxl-5 {\n margin: 3rem !important;\n }\n\n .m-xxl-auto {\n margin: auto !important;\n }\n\n .mx-xxl-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n\n .mx-xxl-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n }\n\n .mx-xxl-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n }\n\n .mx-xxl-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n }\n\n .mx-xxl-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n }\n\n .mx-xxl-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n }\n\n .mx-xxl-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n\n .my-xxl-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n\n .my-xxl-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n\n .my-xxl-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n\n .my-xxl-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n\n .my-xxl-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n\n .my-xxl-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n\n .my-xxl-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n\n .mt-xxl-0 {\n margin-top: 0 !important;\n }\n\n .mt-xxl-1 {\n margin-top: 0.25rem !important;\n }\n\n .mt-xxl-2 {\n margin-top: 0.5rem !important;\n }\n\n .mt-xxl-3 {\n margin-top: 1rem !important;\n }\n\n .mt-xxl-4 {\n margin-top: 1.5rem !important;\n }\n\n .mt-xxl-5 {\n margin-top: 3rem !important;\n }\n\n .mt-xxl-auto {\n margin-top: auto !important;\n }\n\n .me-xxl-0 {\n margin-right: 0 !important;\n }\n\n .me-xxl-1 {\n margin-right: 0.25rem !important;\n }\n\n .me-xxl-2 {\n margin-right: 0.5rem !important;\n }\n\n .me-xxl-3 {\n margin-right: 1rem !important;\n }\n\n .me-xxl-4 {\n margin-right: 1.5rem !important;\n }\n\n .me-xxl-5 {\n margin-right: 3rem !important;\n }\n\n .me-xxl-auto {\n margin-right: auto !important;\n }\n\n .mb-xxl-0 {\n margin-bottom: 0 !important;\n }\n\n .mb-xxl-1 {\n margin-bottom: 0.25rem !important;\n }\n\n .mb-xxl-2 {\n margin-bottom: 0.5rem !important;\n }\n\n .mb-xxl-3 {\n margin-bottom: 1rem !important;\n }\n\n .mb-xxl-4 {\n margin-bottom: 1.5rem !important;\n }\n\n .mb-xxl-5 {\n margin-bottom: 3rem !important;\n }\n\n .mb-xxl-auto {\n margin-bottom: auto !important;\n }\n\n .ms-xxl-0 {\n margin-left: 0 !important;\n }\n\n .ms-xxl-1 {\n margin-left: 0.25rem !important;\n }\n\n .ms-xxl-2 {\n margin-left: 0.5rem !important;\n }\n\n .ms-xxl-3 {\n margin-left: 1rem !important;\n }\n\n .ms-xxl-4 {\n margin-left: 1.5rem !important;\n }\n\n .ms-xxl-5 {\n margin-left: 3rem !important;\n }\n\n .ms-xxl-auto {\n margin-left: auto !important;\n }\n\n .p-xxl-0 {\n padding: 0 !important;\n }\n\n .p-xxl-1 {\n padding: 0.25rem !important;\n }\n\n .p-xxl-2 {\n padding: 0.5rem !important;\n }\n\n .p-xxl-3 {\n padding: 1rem !important;\n }\n\n .p-xxl-4 {\n padding: 1.5rem !important;\n }\n\n .p-xxl-5 {\n padding: 3rem !important;\n }\n\n .px-xxl-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n\n .px-xxl-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n }\n\n .px-xxl-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n }\n\n .px-xxl-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n }\n\n .px-xxl-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n }\n\n .px-xxl-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n }\n\n .py-xxl-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n\n .py-xxl-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n\n .py-xxl-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n\n .py-xxl-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n\n .py-xxl-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n\n .py-xxl-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n\n .pt-xxl-0 {\n padding-top: 0 !important;\n }\n\n .pt-xxl-1 {\n padding-top: 0.25rem !important;\n }\n\n .pt-xxl-2 {\n padding-top: 0.5rem !important;\n }\n\n .pt-xxl-3 {\n padding-top: 1rem !important;\n }\n\n .pt-xxl-4 {\n padding-top: 1.5rem !important;\n }\n\n .pt-xxl-5 {\n padding-top: 3rem !important;\n }\n\n .pe-xxl-0 {\n padding-right: 0 !important;\n }\n\n .pe-xxl-1 {\n padding-right: 0.25rem !important;\n }\n\n .pe-xxl-2 {\n padding-right: 0.5rem !important;\n }\n\n .pe-xxl-3 {\n padding-right: 1rem !important;\n }\n\n .pe-xxl-4 {\n padding-right: 1.5rem !important;\n }\n\n .pe-xxl-5 {\n padding-right: 3rem !important;\n }\n\n .pb-xxl-0 {\n padding-bottom: 0 !important;\n }\n\n .pb-xxl-1 {\n padding-bottom: 0.25rem !important;\n }\n\n .pb-xxl-2 {\n padding-bottom: 0.5rem !important;\n }\n\n .pb-xxl-3 {\n padding-bottom: 1rem !important;\n }\n\n .pb-xxl-4 {\n padding-bottom: 1.5rem !important;\n }\n\n .pb-xxl-5 {\n padding-bottom: 3rem !important;\n }\n\n .ps-xxl-0 {\n padding-left: 0 !important;\n }\n\n .ps-xxl-1 {\n padding-left: 0.25rem !important;\n }\n\n .ps-xxl-2 {\n padding-left: 0.5rem !important;\n }\n\n .ps-xxl-3 {\n padding-left: 1rem !important;\n }\n\n .ps-xxl-4 {\n padding-left: 1.5rem !important;\n }\n\n .ps-xxl-5 {\n padding-left: 3rem !important;\n }\n}\n@media print {\n .d-print-inline {\n display: inline !important;\n }\n\n .d-print-inline-block {\n display: inline-block !important;\n }\n\n .d-print-block {\n display: block !important;\n }\n\n .d-print-grid {\n display: grid !important;\n }\n\n .d-print-table {\n display: table !important;\n }\n\n .d-print-table-row {\n display: table-row !important;\n }\n\n .d-print-table-cell {\n display: table-cell !important;\n }\n\n .d-print-flex {\n display: flex !important;\n }\n\n .d-print-inline-flex {\n display: inline-flex !important;\n }\n\n .d-print-none {\n display: none !important;\n }\n}\n\n/*# sourceMappingURL=bootstrap-grid.css.map */\n","// Container widths\n//\n// Set the container width, and override it for fixed navbars in media queries.\n\n@if $enable-grid-classes {\n // Single container class with breakpoint max-widths\n .container,\n // 100% wide container at all breakpoints\n .container-fluid {\n @include make-container();\n }\n\n // Responsive containers that are 100% wide until a breakpoint\n @each $breakpoint, $container-max-width in $container-max-widths {\n .container-#{$breakpoint} {\n @extend .container-fluid;\n }\n\n @include media-breakpoint-up($breakpoint, $grid-breakpoints) {\n %responsive-container-#{$breakpoint} {\n max-width: $container-max-width;\n }\n\n // Extend each breakpoint which is smaller or equal to the current breakpoint\n $extend-breakpoint: true;\n\n @each $name, $width in $grid-breakpoints {\n @if ($extend-breakpoint) {\n .container#{breakpoint-infix($name, $grid-breakpoints)} {\n @extend %responsive-container-#{$breakpoint};\n }\n\n // Once the current breakpoint is reached, stop extending\n @if ($breakpoint == $name) {\n $extend-breakpoint: false;\n }\n }\n }\n }\n }\n}\n","// Container mixins\n\n@mixin make-container($gutter: $container-padding-x) {\n width: 100%;\n padding-right: var(--#{$variable-prefix}gutter-x, #{$gutter});\n padding-left: var(--#{$variable-prefix}gutter-x, #{$gutter});\n margin-right: auto;\n margin-left: auto;\n}\n","// Breakpoint viewport sizes and media queries.\n//\n// Breakpoints are defined as a map of (name: minimum width), order from small to large:\n//\n// (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px)\n//\n// The map defined in the `$grid-breakpoints` global variable is used as the `$breakpoints` argument by default.\n\n// Name of the next breakpoint, or null for the last breakpoint.\n//\n// >> breakpoint-next(sm)\n// md\n// >> breakpoint-next(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// md\n// >> breakpoint-next(sm, $breakpoint-names: (xs sm md lg xl))\n// md\n@function breakpoint-next($name, $breakpoints: $grid-breakpoints, $breakpoint-names: map-keys($breakpoints)) {\n $n: index($breakpoint-names, $name);\n @if not $n {\n @error \"breakpoint `#{$name}` not found in `#{$breakpoints}`\";\n }\n @return if($n < length($breakpoint-names), nth($breakpoint-names, $n + 1), null);\n}\n\n// Minimum breakpoint width. Null for the smallest (first) breakpoint.\n//\n// >> breakpoint-min(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// 576px\n@function breakpoint-min($name, $breakpoints: $grid-breakpoints) {\n $min: map-get($breakpoints, $name);\n @return if($min != 0, $min, null);\n}\n\n// Maximum breakpoint width.\n// The maximum value is reduced by 0.02px to work around the limitations of\n// `min-` and `max-` prefixes and viewports with fractional widths.\n// See https://www.w3.org/TR/mediaqueries-4/#mq-min-max\n// Uses 0.02px rather than 0.01px to work around a current rounding bug in Safari.\n// See https://bugs.webkit.org/show_bug.cgi?id=178261\n//\n// >> breakpoint-max(md, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// 767.98px\n@function breakpoint-max($name, $breakpoints: $grid-breakpoints) {\n $max: map-get($breakpoints, $name);\n @return if($max and $max > 0, $max - .02, null);\n}\n\n// Returns a blank string if smallest breakpoint, otherwise returns the name with a dash in front.\n// Useful for making responsive utilities.\n//\n// >> breakpoint-infix(xs, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// \"\" (Returns a blank string)\n// >> breakpoint-infix(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// \"-sm\"\n@function breakpoint-infix($name, $breakpoints: $grid-breakpoints) {\n @return if(breakpoint-min($name, $breakpoints) == null, \"\", \"-#{$name}\");\n}\n\n// Media of at least the minimum breakpoint width. No query for the smallest breakpoint.\n// Makes the @content apply to the given breakpoint and wider.\n@mixin media-breakpoint-up($name, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($name, $breakpoints);\n @if $min {\n @media (min-width: $min) {\n @content;\n }\n } @else {\n @content;\n }\n}\n\n// Media of at most the maximum breakpoint width. No query for the largest breakpoint.\n// Makes the @content apply to the given breakpoint and narrower.\n@mixin media-breakpoint-down($name, $breakpoints: $grid-breakpoints) {\n $max: breakpoint-max($name, $breakpoints);\n @if $max {\n @media (max-width: $max) {\n @content;\n }\n } @else {\n @content;\n }\n}\n\n// Media that spans multiple breakpoint widths.\n// Makes the @content apply between the min and max breakpoints\n@mixin media-breakpoint-between($lower, $upper, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($lower, $breakpoints);\n $max: breakpoint-max($upper, $breakpoints);\n\n @if $min != null and $max != null {\n @media (min-width: $min) and (max-width: $max) {\n @content;\n }\n } @else if $max == null {\n @include media-breakpoint-up($lower, $breakpoints) {\n @content;\n }\n } @else if $min == null {\n @include media-breakpoint-down($upper, $breakpoints) {\n @content;\n }\n }\n}\n\n// Media between the breakpoint's minimum and maximum widths.\n// No minimum for the smallest breakpoint, and no maximum for the largest one.\n// Makes the @content apply only to the given breakpoint, not viewports any wider or narrower.\n@mixin media-breakpoint-only($name, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($name, $breakpoints);\n $next: breakpoint-next($name, $breakpoints);\n $max: breakpoint-max($next);\n\n @if $min != null and $max != null {\n @media (min-width: $min) and (max-width: $max) {\n @content;\n }\n } @else if $max == null {\n @include media-breakpoint-up($name, $breakpoints) {\n @content;\n }\n } @else if $min == null {\n @include media-breakpoint-down($next, $breakpoints) {\n @content;\n }\n }\n}\n","// Variables\n//\n// Variables should follow the `$component-state-property-size` formula for\n// consistent naming. Ex: $nav-link-disabled-color and $modal-content-box-shadow-xs.\n\n// Color system\n\n// scss-docs-start gray-color-variables\n$white: #fff !default;\n$gray-100: #f8f9fa !default;\n$gray-200: #e9ecef !default;\n$gray-300: #dee2e6 !default;\n$gray-400: #ced4da !default;\n$gray-500: #adb5bd !default;\n$gray-600: #6c757d !default;\n$gray-700: #495057 !default;\n$gray-800: #343a40 !default;\n$gray-900: #212529 !default;\n$black: #000 !default;\n// scss-docs-end gray-color-variables\n\n// fusv-disable\n// scss-docs-start gray-colors-map\n$grays: (\n \"100\": $gray-100,\n \"200\": $gray-200,\n \"300\": $gray-300,\n \"400\": $gray-400,\n \"500\": $gray-500,\n \"600\": $gray-600,\n \"700\": $gray-700,\n \"800\": $gray-800,\n \"900\": $gray-900\n) !default;\n// scss-docs-end gray-colors-map\n// fusv-enable\n\n// scss-docs-start color-variables\n$blue: #0d6efd !default;\n$indigo: #6610f2 !default;\n$purple: #6f42c1 !default;\n$pink: #d63384 !default;\n$red: #dc3545 !default;\n$orange: #fd7e14 !default;\n$yellow: #ffc107 !default;\n$green: #198754 !default;\n$teal: #20c997 !default;\n$cyan: #0dcaf0 !default;\n// scss-docs-end color-variables\n\n// scss-docs-start colors-map\n$colors: (\n \"blue\": $blue,\n \"indigo\": $indigo,\n \"purple\": $purple,\n \"pink\": $pink,\n \"red\": $red,\n \"orange\": $orange,\n \"yellow\": $yellow,\n \"green\": $green,\n \"teal\": $teal,\n \"cyan\": $cyan,\n \"white\": $white,\n \"gray\": $gray-600,\n \"gray-dark\": $gray-800\n) !default;\n// scss-docs-end colors-map\n\n// scss-docs-start theme-color-variables\n$primary: $blue !default;\n$secondary: $gray-600 !default;\n$success: $green !default;\n$info: $cyan !default;\n$warning: $yellow !default;\n$danger: $red !default;\n$light: $gray-100 !default;\n$dark: $gray-900 !default;\n// scss-docs-end theme-color-variables\n\n// scss-docs-start theme-colors-map\n$theme-colors: (\n \"primary\": $primary,\n \"secondary\": $secondary,\n \"success\": $success,\n \"info\": $info,\n \"warning\": $warning,\n \"danger\": $danger,\n \"light\": $light,\n \"dark\": $dark\n) !default;\n// scss-docs-end theme-colors-map\n\n// scss-docs-start theme-colors-rgb\n$theme-colors-rgb: map-loop($theme-colors, to-rgb, \"$value\") !default;\n// scss-docs-end theme-colors-rgb\n\n// The contrast ratio to reach against white, to determine if color changes from \"light\" to \"dark\". Acceptable values for WCAG 2.0 are 3, 4.5 and 7.\n// See https://www.w3.org/TR/WCAG20/#visual-audio-contrast-contrast\n$min-contrast-ratio: 4.5 !default;\n\n// Customize the light and dark text colors for use in our color contrast function.\n$color-contrast-dark: $black !default;\n$color-contrast-light: $white !default;\n\n// fusv-disable\n$blue-100: tint-color($blue, 80%) !default;\n$blue-200: tint-color($blue, 60%) !default;\n$blue-300: tint-color($blue, 40%) !default;\n$blue-400: tint-color($blue, 20%) !default;\n$blue-500: $blue !default;\n$blue-600: shade-color($blue, 20%) !default;\n$blue-700: shade-color($blue, 40%) !default;\n$blue-800: shade-color($blue, 60%) !default;\n$blue-900: shade-color($blue, 80%) !default;\n\n$indigo-100: tint-color($indigo, 80%) !default;\n$indigo-200: tint-color($indigo, 60%) !default;\n$indigo-300: tint-color($indigo, 40%) !default;\n$indigo-400: tint-color($indigo, 20%) !default;\n$indigo-500: $indigo !default;\n$indigo-600: shade-color($indigo, 20%) !default;\n$indigo-700: shade-color($indigo, 40%) !default;\n$indigo-800: shade-color($indigo, 60%) !default;\n$indigo-900: shade-color($indigo, 80%) !default;\n\n$purple-100: tint-color($purple, 80%) !default;\n$purple-200: tint-color($purple, 60%) !default;\n$purple-300: tint-color($purple, 40%) !default;\n$purple-400: tint-color($purple, 20%) !default;\n$purple-500: $purple !default;\n$purple-600: shade-color($purple, 20%) !default;\n$purple-700: shade-color($purple, 40%) !default;\n$purple-800: shade-color($purple, 60%) !default;\n$purple-900: shade-color($purple, 80%) !default;\n\n$pink-100: tint-color($pink, 80%) !default;\n$pink-200: tint-color($pink, 60%) !default;\n$pink-300: tint-color($pink, 40%) !default;\n$pink-400: tint-color($pink, 20%) !default;\n$pink-500: $pink !default;\n$pink-600: shade-color($pink, 20%) !default;\n$pink-700: shade-color($pink, 40%) !default;\n$pink-800: shade-color($pink, 60%) !default;\n$pink-900: shade-color($pink, 80%) !default;\n\n$red-100: tint-color($red, 80%) !default;\n$red-200: tint-color($red, 60%) !default;\n$red-300: tint-color($red, 40%) !default;\n$red-400: tint-color($red, 20%) !default;\n$red-500: $red !default;\n$red-600: shade-color($red, 20%) !default;\n$red-700: shade-color($red, 40%) !default;\n$red-800: shade-color($red, 60%) !default;\n$red-900: shade-color($red, 80%) !default;\n\n$orange-100: tint-color($orange, 80%) !default;\n$orange-200: tint-color($orange, 60%) !default;\n$orange-300: tint-color($orange, 40%) !default;\n$orange-400: tint-color($orange, 20%) !default;\n$orange-500: $orange !default;\n$orange-600: shade-color($orange, 20%) !default;\n$orange-700: shade-color($orange, 40%) !default;\n$orange-800: shade-color($orange, 60%) !default;\n$orange-900: shade-color($orange, 80%) !default;\n\n$yellow-100: tint-color($yellow, 80%) !default;\n$yellow-200: tint-color($yellow, 60%) !default;\n$yellow-300: tint-color($yellow, 40%) !default;\n$yellow-400: tint-color($yellow, 20%) !default;\n$yellow-500: $yellow !default;\n$yellow-600: shade-color($yellow, 20%) !default;\n$yellow-700: shade-color($yellow, 40%) !default;\n$yellow-800: shade-color($yellow, 60%) !default;\n$yellow-900: shade-color($yellow, 80%) !default;\n\n$green-100: tint-color($green, 80%) !default;\n$green-200: tint-color($green, 60%) !default;\n$green-300: tint-color($green, 40%) !default;\n$green-400: tint-color($green, 20%) !default;\n$green-500: $green !default;\n$green-600: shade-color($green, 20%) !default;\n$green-700: shade-color($green, 40%) !default;\n$green-800: shade-color($green, 60%) !default;\n$green-900: shade-color($green, 80%) !default;\n\n$teal-100: tint-color($teal, 80%) !default;\n$teal-200: tint-color($teal, 60%) !default;\n$teal-300: tint-color($teal, 40%) !default;\n$teal-400: tint-color($teal, 20%) !default;\n$teal-500: $teal !default;\n$teal-600: shade-color($teal, 20%) !default;\n$teal-700: shade-color($teal, 40%) !default;\n$teal-800: shade-color($teal, 60%) !default;\n$teal-900: shade-color($teal, 80%) !default;\n\n$cyan-100: tint-color($cyan, 80%) !default;\n$cyan-200: tint-color($cyan, 60%) !default;\n$cyan-300: tint-color($cyan, 40%) !default;\n$cyan-400: tint-color($cyan, 20%) !default;\n$cyan-500: $cyan !default;\n$cyan-600: shade-color($cyan, 20%) !default;\n$cyan-700: shade-color($cyan, 40%) !default;\n$cyan-800: shade-color($cyan, 60%) !default;\n$cyan-900: shade-color($cyan, 80%) !default;\n\n$blues: (\n \"blue-100\": $blue-100,\n \"blue-200\": $blue-200,\n \"blue-300\": $blue-300,\n \"blue-400\": $blue-400,\n \"blue-500\": $blue-500,\n \"blue-600\": $blue-600,\n \"blue-700\": $blue-700,\n \"blue-800\": $blue-800,\n \"blue-900\": $blue-900\n) !default;\n\n$indigos: (\n \"indigo-100\": $indigo-100,\n \"indigo-200\": $indigo-200,\n \"indigo-300\": $indigo-300,\n \"indigo-400\": $indigo-400,\n \"indigo-500\": $indigo-500,\n \"indigo-600\": $indigo-600,\n \"indigo-700\": $indigo-700,\n \"indigo-800\": $indigo-800,\n \"indigo-900\": $indigo-900\n) !default;\n\n$purples: (\n \"purple-100\": $purple-200,\n \"purple-200\": $purple-100,\n \"purple-300\": $purple-300,\n \"purple-400\": $purple-400,\n \"purple-500\": $purple-500,\n \"purple-600\": $purple-600,\n \"purple-700\": $purple-700,\n \"purple-800\": $purple-800,\n \"purple-900\": $purple-900\n) !default;\n\n$pinks: (\n \"pink-100\": $pink-100,\n \"pink-200\": $pink-200,\n \"pink-300\": $pink-300,\n \"pink-400\": $pink-400,\n \"pink-500\": $pink-500,\n \"pink-600\": $pink-600,\n \"pink-700\": $pink-700,\n \"pink-800\": $pink-800,\n \"pink-900\": $pink-900\n) !default;\n\n$reds: (\n \"red-100\": $red-100,\n \"red-200\": $red-200,\n \"red-300\": $red-300,\n \"red-400\": $red-400,\n \"red-500\": $red-500,\n \"red-600\": $red-600,\n \"red-700\": $red-700,\n \"red-800\": $red-800,\n \"red-900\": $red-900\n) !default;\n\n$oranges: (\n \"orange-100\": $orange-100,\n \"orange-200\": $orange-200,\n \"orange-300\": $orange-300,\n \"orange-400\": $orange-400,\n \"orange-500\": $orange-500,\n \"orange-600\": $orange-600,\n \"orange-700\": $orange-700,\n \"orange-800\": $orange-800,\n \"orange-900\": $orange-900\n) !default;\n\n$yellows: (\n \"yellow-100\": $yellow-100,\n \"yellow-200\": $yellow-200,\n \"yellow-300\": $yellow-300,\n \"yellow-400\": $yellow-400,\n \"yellow-500\": $yellow-500,\n \"yellow-600\": $yellow-600,\n \"yellow-700\": $yellow-700,\n \"yellow-800\": $yellow-800,\n \"yellow-900\": $yellow-900\n) !default;\n\n$greens: (\n \"green-100\": $green-100,\n \"green-200\": $green-200,\n \"green-300\": $green-300,\n \"green-400\": $green-400,\n \"green-500\": $green-500,\n \"green-600\": $green-600,\n \"green-700\": $green-700,\n \"green-800\": $green-800,\n \"green-900\": $green-900\n) !default;\n\n$teals: (\n \"teal-100\": $teal-100,\n \"teal-200\": $teal-200,\n \"teal-300\": $teal-300,\n \"teal-400\": $teal-400,\n \"teal-500\": $teal-500,\n \"teal-600\": $teal-600,\n \"teal-700\": $teal-700,\n \"teal-800\": $teal-800,\n \"teal-900\": $teal-900\n) !default;\n\n$cyans: (\n \"cyan-100\": $cyan-100,\n \"cyan-200\": $cyan-200,\n \"cyan-300\": $cyan-300,\n \"cyan-400\": $cyan-400,\n \"cyan-500\": $cyan-500,\n \"cyan-600\": $cyan-600,\n \"cyan-700\": $cyan-700,\n \"cyan-800\": $cyan-800,\n \"cyan-900\": $cyan-900\n) !default;\n// fusv-enable\n\n// Characters which are escaped by the escape-svg function\n$escaped-characters: (\n (\"<\", \"%3c\"),\n (\">\", \"%3e\"),\n (\"#\", \"%23\"),\n (\"(\", \"%28\"),\n (\")\", \"%29\"),\n) !default;\n\n// Options\n//\n// Quickly modify global styling by enabling or disabling optional features.\n\n$enable-caret: true !default;\n$enable-rounded: true !default;\n$enable-shadows: false !default;\n$enable-gradients: false !default;\n$enable-transitions: true !default;\n$enable-reduced-motion: true !default;\n$enable-smooth-scroll: true !default;\n$enable-grid-classes: true !default;\n$enable-cssgrid: false !default;\n$enable-button-pointers: true !default;\n$enable-rfs: true !default;\n$enable-validation-icons: true !default;\n$enable-negative-margins: false !default;\n$enable-deprecation-messages: true !default;\n$enable-important-utilities: true !default;\n\n// Prefix for :root CSS variables\n\n$variable-prefix: bs- !default;\n\n// Gradient\n//\n// The gradient which is added to components if `$enable-gradients` is `true`\n// This gradient is also added to elements with `.bg-gradient`\n// scss-docs-start variable-gradient\n$gradient: linear-gradient(180deg, rgba($white, .15), rgba($white, 0)) !default;\n// scss-docs-end variable-gradient\n\n// Spacing\n//\n// Control the default styling of most Bootstrap elements by modifying these\n// variables. Mostly focused on spacing.\n// You can add more entries to the $spacers map, should you need more variation.\n\n// scss-docs-start spacer-variables-maps\n$spacer: 1rem !default;\n$spacers: (\n 0: 0,\n 1: $spacer * .25,\n 2: $spacer * .5,\n 3: $spacer,\n 4: $spacer * 1.5,\n 5: $spacer * 3,\n) !default;\n\n$negative-spacers: if($enable-negative-margins, negativify-map($spacers), null) !default;\n// scss-docs-end spacer-variables-maps\n\n// Position\n//\n// Define the edge positioning anchors of the position utilities.\n\n// scss-docs-start position-map\n$position-values: (\n 0: 0,\n 50: 50%,\n 100: 100%\n) !default;\n// scss-docs-end position-map\n\n// Body\n//\n// Settings for the `` element.\n\n$body-bg: $white !default;\n$body-color: $gray-900 !default;\n$body-text-align: null !default;\n\n// Utilities maps\n//\n// Extends the default `$theme-colors` maps to help create our utilities.\n\n// Come v6, we'll de-dupe these variables. Until then, for backward compatibility, we keep them to reassign.\n// scss-docs-start utilities-colors\n$utilities-colors: $theme-colors-rgb !default;\n// scss-docs-end utilities-colors\n\n// scss-docs-start utilities-text-colors\n$utilities-text: map-merge(\n $utilities-colors,\n (\n \"black\": to-rgb($black),\n \"white\": to-rgb($white),\n \"body\": to-rgb($body-color)\n )\n) !default;\n$utilities-text-colors: map-loop($utilities-text, rgba-css-var, \"$key\", \"text\") !default;\n// scss-docs-end utilities-text-colors\n\n// scss-docs-start utilities-bg-colors\n$utilities-bg: map-merge(\n $utilities-colors,\n (\n \"black\": to-rgb($black),\n \"white\": to-rgb($white),\n \"body\": to-rgb($body-bg)\n )\n) !default;\n$utilities-bg-colors: map-loop($utilities-bg, rgba-css-var, \"$key\", \"bg\") !default;\n// scss-docs-end utilities-bg-colors\n\n// Links\n//\n// Style anchor elements.\n\n$link-color: $primary !default;\n$link-decoration: underline !default;\n$link-shade-percentage: 20% !default;\n$link-hover-color: shift-color($link-color, $link-shade-percentage) !default;\n$link-hover-decoration: null !default;\n\n$stretched-link-pseudo-element: after !default;\n$stretched-link-z-index: 1 !default;\n\n// Paragraphs\n//\n// Style p element.\n\n$paragraph-margin-bottom: 1rem !default;\n\n\n// Grid breakpoints\n//\n// Define the minimum dimensions at which your layout will change,\n// adapting to different screen sizes, for use in media queries.\n\n// scss-docs-start grid-breakpoints\n$grid-breakpoints: (\n xs: 0,\n sm: 576px,\n md: 768px,\n lg: 992px,\n xl: 1200px,\n xxl: 1400px\n) !default;\n// scss-docs-end grid-breakpoints\n\n@include _assert-ascending($grid-breakpoints, \"$grid-breakpoints\");\n@include _assert-starts-at-zero($grid-breakpoints, \"$grid-breakpoints\");\n\n\n// Grid containers\n//\n// Define the maximum width of `.container` for different screen sizes.\n\n// scss-docs-start container-max-widths\n$container-max-widths: (\n sm: 540px,\n md: 720px,\n lg: 960px,\n xl: 1140px,\n xxl: 1320px\n) !default;\n// scss-docs-end container-max-widths\n\n@include _assert-ascending($container-max-widths, \"$container-max-widths\");\n\n\n// Grid columns\n//\n// Set the number of columns and specify the width of the gutters.\n\n$grid-columns: 12 !default;\n$grid-gutter-width: 1.5rem !default;\n$grid-row-columns: 6 !default;\n\n$gutters: $spacers !default;\n\n// Container padding\n\n$container-padding-x: $grid-gutter-width * .5 !default;\n\n\n// Components\n//\n// Define common padding and border radius sizes and more.\n\n// scss-docs-start border-variables\n$border-width: 1px !default;\n$border-widths: (\n 1: 1px,\n 2: 2px,\n 3: 3px,\n 4: 4px,\n 5: 5px\n) !default;\n\n$border-color: $gray-300 !default;\n// scss-docs-end border-variables\n\n// scss-docs-start border-radius-variables\n$border-radius: .25rem !default;\n$border-radius-sm: .2rem !default;\n$border-radius-lg: .3rem !default;\n$border-radius-pill: 50rem !default;\n// scss-docs-end border-radius-variables\n\n// scss-docs-start box-shadow-variables\n$box-shadow: 0 .5rem 1rem rgba($black, .15) !default;\n$box-shadow-sm: 0 .125rem .25rem rgba($black, .075) !default;\n$box-shadow-lg: 0 1rem 3rem rgba($black, .175) !default;\n$box-shadow-inset: inset 0 1px 2px rgba($black, .075) !default;\n// scss-docs-end box-shadow-variables\n\n$component-active-color: $white !default;\n$component-active-bg: $primary !default;\n\n// scss-docs-start caret-variables\n$caret-width: .3em !default;\n$caret-vertical-align: $caret-width * .85 !default;\n$caret-spacing: $caret-width * .85 !default;\n// scss-docs-end caret-variables\n\n$transition-base: all .2s ease-in-out !default;\n$transition-fade: opacity .15s linear !default;\n// scss-docs-start collapse-transition\n$transition-collapse: height .35s ease !default;\n$transition-collapse-width: width .35s ease !default;\n// scss-docs-end collapse-transition\n\n// stylelint-disable function-disallowed-list\n// scss-docs-start aspect-ratios\n$aspect-ratios: (\n \"1x1\": 100%,\n \"4x3\": calc(3 / 4 * 100%),\n \"16x9\": calc(9 / 16 * 100%),\n \"21x9\": calc(9 / 21 * 100%)\n) !default;\n// scss-docs-end aspect-ratios\n// stylelint-enable function-disallowed-list\n\n// Typography\n//\n// Font, line-height, and color for body text, headings, and more.\n\n// scss-docs-start font-variables\n// stylelint-disable value-keyword-case\n$font-family-sans-serif: system-ui, -apple-system, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", \"Liberation Sans\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\" !default;\n$font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace !default;\n// stylelint-enable value-keyword-case\n$font-family-base: var(--#{$variable-prefix}font-sans-serif) !default;\n$font-family-code: var(--#{$variable-prefix}font-monospace) !default;\n\n// $font-size-root affects the value of `rem`, which is used for as well font sizes, paddings, and margins\n// $font-size-base affects the font size of the body text\n$font-size-root: null !default;\n$font-size-base: 1rem !default; // Assumes the browser default, typically `16px`\n$font-size-sm: $font-size-base * .875 !default;\n$font-size-lg: $font-size-base * 1.25 !default;\n\n$font-weight-lighter: lighter !default;\n$font-weight-light: 300 !default;\n$font-weight-normal: 400 !default;\n$font-weight-bold: 700 !default;\n$font-weight-bolder: bolder !default;\n\n$font-weight-base: $font-weight-normal !default;\n\n$line-height-base: 1.5 !default;\n$line-height-sm: 1.25 !default;\n$line-height-lg: 2 !default;\n\n$h1-font-size: $font-size-base * 2.5 !default;\n$h2-font-size: $font-size-base * 2 !default;\n$h3-font-size: $font-size-base * 1.75 !default;\n$h4-font-size: $font-size-base * 1.5 !default;\n$h5-font-size: $font-size-base * 1.25 !default;\n$h6-font-size: $font-size-base !default;\n// scss-docs-end font-variables\n\n// scss-docs-start font-sizes\n$font-sizes: (\n 1: $h1-font-size,\n 2: $h2-font-size,\n 3: $h3-font-size,\n 4: $h4-font-size,\n 5: $h5-font-size,\n 6: $h6-font-size\n) !default;\n// scss-docs-end font-sizes\n\n// scss-docs-start headings-variables\n$headings-margin-bottom: $spacer * .5 !default;\n$headings-font-family: null !default;\n$headings-font-style: null !default;\n$headings-font-weight: 500 !default;\n$headings-line-height: 1.2 !default;\n$headings-color: null !default;\n// scss-docs-end headings-variables\n\n// scss-docs-start display-headings\n$display-font-sizes: (\n 1: 5rem,\n 2: 4.5rem,\n 3: 4rem,\n 4: 3.5rem,\n 5: 3rem,\n 6: 2.5rem\n) !default;\n\n$display-font-weight: 300 !default;\n$display-line-height: $headings-line-height !default;\n// scss-docs-end display-headings\n\n// scss-docs-start type-variables\n$lead-font-size: $font-size-base * 1.25 !default;\n$lead-font-weight: 300 !default;\n\n$small-font-size: .875em !default;\n\n$sub-sup-font-size: .75em !default;\n\n$text-muted: $gray-600 !default;\n\n$initialism-font-size: $small-font-size !default;\n\n$blockquote-margin-y: $spacer !default;\n$blockquote-font-size: $font-size-base * 1.25 !default;\n$blockquote-footer-color: $gray-600 !default;\n$blockquote-footer-font-size: $small-font-size !default;\n\n$hr-margin-y: $spacer !default;\n$hr-color: inherit !default;\n$hr-height: $border-width !default;\n$hr-opacity: .25 !default;\n\n$legend-margin-bottom: .5rem !default;\n$legend-font-size: 1.5rem !default;\n$legend-font-weight: null !default;\n\n$mark-padding: .2em !default;\n\n$dt-font-weight: $font-weight-bold !default;\n\n$nested-kbd-font-weight: $font-weight-bold !default;\n\n$list-inline-padding: .5rem !default;\n\n$mark-bg: #fcf8e3 !default;\n// scss-docs-end type-variables\n\n\n// Tables\n//\n// Customizes the `.table` component with basic values, each used across all table variations.\n\n// scss-docs-start table-variables\n$table-cell-padding-y: .5rem !default;\n$table-cell-padding-x: .5rem !default;\n$table-cell-padding-y-sm: .25rem !default;\n$table-cell-padding-x-sm: .25rem !default;\n\n$table-cell-vertical-align: top !default;\n\n$table-color: $body-color !default;\n$table-bg: transparent !default;\n$table-accent-bg: transparent !default;\n\n$table-th-font-weight: null !default;\n\n$table-striped-color: $table-color !default;\n$table-striped-bg-factor: .05 !default;\n$table-striped-bg: rgba($black, $table-striped-bg-factor) !default;\n\n$table-active-color: $table-color !default;\n$table-active-bg-factor: .1 !default;\n$table-active-bg: rgba($black, $table-active-bg-factor) !default;\n\n$table-hover-color: $table-color !default;\n$table-hover-bg-factor: .075 !default;\n$table-hover-bg: rgba($black, $table-hover-bg-factor) !default;\n\n$table-border-factor: .1 !default;\n$table-border-width: $border-width !default;\n$table-border-color: $border-color !default;\n\n$table-striped-order: odd !default;\n\n$table-group-separator-color: currentColor !default;\n\n$table-caption-color: $text-muted !default;\n\n$table-bg-scale: -80% !default;\n// scss-docs-end table-variables\n\n// scss-docs-start table-loop\n$table-variants: (\n \"primary\": shift-color($primary, $table-bg-scale),\n \"secondary\": shift-color($secondary, $table-bg-scale),\n \"success\": shift-color($success, $table-bg-scale),\n \"info\": shift-color($info, $table-bg-scale),\n \"warning\": shift-color($warning, $table-bg-scale),\n \"danger\": shift-color($danger, $table-bg-scale),\n \"light\": $light,\n \"dark\": $dark,\n) !default;\n// scss-docs-end table-loop\n\n\n// Buttons + Forms\n//\n// Shared variables that are reassigned to `$input-` and `$btn-` specific variables.\n\n// scss-docs-start input-btn-variables\n$input-btn-padding-y: .375rem !default;\n$input-btn-padding-x: .75rem !default;\n$input-btn-font-family: null !default;\n$input-btn-font-size: $font-size-base !default;\n$input-btn-line-height: $line-height-base !default;\n\n$input-btn-focus-width: .25rem !default;\n$input-btn-focus-color-opacity: .25 !default;\n$input-btn-focus-color: rgba($component-active-bg, $input-btn-focus-color-opacity) !default;\n$input-btn-focus-blur: 0 !default;\n$input-btn-focus-box-shadow: 0 0 $input-btn-focus-blur $input-btn-focus-width $input-btn-focus-color !default;\n\n$input-btn-padding-y-sm: .25rem !default;\n$input-btn-padding-x-sm: .5rem !default;\n$input-btn-font-size-sm: $font-size-sm !default;\n\n$input-btn-padding-y-lg: .5rem !default;\n$input-btn-padding-x-lg: 1rem !default;\n$input-btn-font-size-lg: $font-size-lg !default;\n\n$input-btn-border-width: $border-width !default;\n// scss-docs-end input-btn-variables\n\n\n// Buttons\n//\n// For each of Bootstrap's buttons, define text, background, and border color.\n\n// scss-docs-start btn-variables\n$btn-padding-y: $input-btn-padding-y !default;\n$btn-padding-x: $input-btn-padding-x !default;\n$btn-font-family: $input-btn-font-family !default;\n$btn-font-size: $input-btn-font-size !default;\n$btn-line-height: $input-btn-line-height !default;\n$btn-white-space: null !default; // Set to `nowrap` to prevent text wrapping\n\n$btn-padding-y-sm: $input-btn-padding-y-sm !default;\n$btn-padding-x-sm: $input-btn-padding-x-sm !default;\n$btn-font-size-sm: $input-btn-font-size-sm !default;\n\n$btn-padding-y-lg: $input-btn-padding-y-lg !default;\n$btn-padding-x-lg: $input-btn-padding-x-lg !default;\n$btn-font-size-lg: $input-btn-font-size-lg !default;\n\n$btn-border-width: $input-btn-border-width !default;\n\n$btn-font-weight: $font-weight-normal !default;\n$btn-box-shadow: inset 0 1px 0 rgba($white, .15), 0 1px 1px rgba($black, .075) !default;\n$btn-focus-width: $input-btn-focus-width !default;\n$btn-focus-box-shadow: $input-btn-focus-box-shadow !default;\n$btn-disabled-opacity: .65 !default;\n$btn-active-box-shadow: inset 0 3px 5px rgba($black, .125) !default;\n\n$btn-link-color: $link-color !default;\n$btn-link-hover-color: $link-hover-color !default;\n$btn-link-disabled-color: $gray-600 !default;\n\n// Allows for customizing button radius independently from global border radius\n$btn-border-radius: $border-radius !default;\n$btn-border-radius-sm: $border-radius-sm !default;\n$btn-border-radius-lg: $border-radius-lg !default;\n\n$btn-transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n\n$btn-hover-bg-shade-amount: 15% !default;\n$btn-hover-bg-tint-amount: 15% !default;\n$btn-hover-border-shade-amount: 20% !default;\n$btn-hover-border-tint-amount: 10% !default;\n$btn-active-bg-shade-amount: 20% !default;\n$btn-active-bg-tint-amount: 20% !default;\n$btn-active-border-shade-amount: 25% !default;\n$btn-active-border-tint-amount: 10% !default;\n// scss-docs-end btn-variables\n\n\n// Forms\n\n// scss-docs-start form-text-variables\n$form-text-margin-top: .25rem !default;\n$form-text-font-size: $small-font-size !default;\n$form-text-font-style: null !default;\n$form-text-font-weight: null !default;\n$form-text-color: $text-muted !default;\n// scss-docs-end form-text-variables\n\n// scss-docs-start form-label-variables\n$form-label-margin-bottom: .5rem !default;\n$form-label-font-size: null !default;\n$form-label-font-style: null !default;\n$form-label-font-weight: null !default;\n$form-label-color: null !default;\n// scss-docs-end form-label-variables\n\n// scss-docs-start form-input-variables\n$input-padding-y: $input-btn-padding-y !default;\n$input-padding-x: $input-btn-padding-x !default;\n$input-font-family: $input-btn-font-family !default;\n$input-font-size: $input-btn-font-size !default;\n$input-font-weight: $font-weight-base !default;\n$input-line-height: $input-btn-line-height !default;\n\n$input-padding-y-sm: $input-btn-padding-y-sm !default;\n$input-padding-x-sm: $input-btn-padding-x-sm !default;\n$input-font-size-sm: $input-btn-font-size-sm !default;\n\n$input-padding-y-lg: $input-btn-padding-y-lg !default;\n$input-padding-x-lg: $input-btn-padding-x-lg !default;\n$input-font-size-lg: $input-btn-font-size-lg !default;\n\n$input-bg: $body-bg !default;\n$input-disabled-bg: $gray-200 !default;\n$input-disabled-border-color: null !default;\n\n$input-color: $body-color !default;\n$input-border-color: $gray-400 !default;\n$input-border-width: $input-btn-border-width !default;\n$input-box-shadow: $box-shadow-inset !default;\n\n$input-border-radius: $border-radius !default;\n$input-border-radius-sm: $border-radius-sm !default;\n$input-border-radius-lg: $border-radius-lg !default;\n\n$input-focus-bg: $input-bg !default;\n$input-focus-border-color: tint-color($component-active-bg, 50%) !default;\n$input-focus-color: $input-color !default;\n$input-focus-width: $input-btn-focus-width !default;\n$input-focus-box-shadow: $input-btn-focus-box-shadow !default;\n\n$input-placeholder-color: $gray-600 !default;\n$input-plaintext-color: $body-color !default;\n\n$input-height-border: $input-border-width * 2 !default;\n\n$input-height-inner: add($input-line-height * 1em, $input-padding-y * 2) !default;\n$input-height-inner-half: add($input-line-height * .5em, $input-padding-y) !default;\n$input-height-inner-quarter: add($input-line-height * .25em, $input-padding-y * .5) !default;\n\n$input-height: add($input-line-height * 1em, add($input-padding-y * 2, $input-height-border, false)) !default;\n$input-height-sm: add($input-line-height * 1em, add($input-padding-y-sm * 2, $input-height-border, false)) !default;\n$input-height-lg: add($input-line-height * 1em, add($input-padding-y-lg * 2, $input-height-border, false)) !default;\n\n$input-transition: border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n\n$form-color-width: 3rem !default;\n// scss-docs-end form-input-variables\n\n// scss-docs-start form-check-variables\n$form-check-input-width: 1em !default;\n$form-check-min-height: $font-size-base * $line-height-base !default;\n$form-check-padding-start: $form-check-input-width + .5em !default;\n$form-check-margin-bottom: .125rem !default;\n$form-check-label-color: null !default;\n$form-check-label-cursor: null !default;\n$form-check-transition: null !default;\n\n$form-check-input-active-filter: brightness(90%) !default;\n\n$form-check-input-bg: $input-bg !default;\n$form-check-input-border: 1px solid rgba($black, .25) !default;\n$form-check-input-border-radius: .25em !default;\n$form-check-radio-border-radius: 50% !default;\n$form-check-input-focus-border: $input-focus-border-color !default;\n$form-check-input-focus-box-shadow: $input-btn-focus-box-shadow !default;\n\n$form-check-input-checked-color: $component-active-color !default;\n$form-check-input-checked-bg-color: $component-active-bg !default;\n$form-check-input-checked-border-color: $form-check-input-checked-bg-color !default;\n$form-check-input-checked-bg-image: url(\"data:image/svg+xml,\") !default;\n$form-check-radio-checked-bg-image: url(\"data:image/svg+xml,\") !default;\n\n$form-check-input-indeterminate-color: $component-active-color !default;\n$form-check-input-indeterminate-bg-color: $component-active-bg !default;\n$form-check-input-indeterminate-border-color: $form-check-input-indeterminate-bg-color !default;\n$form-check-input-indeterminate-bg-image: url(\"data:image/svg+xml,\") !default;\n\n$form-check-input-disabled-opacity: .5 !default;\n$form-check-label-disabled-opacity: $form-check-input-disabled-opacity !default;\n$form-check-btn-check-disabled-opacity: $btn-disabled-opacity !default;\n\n$form-check-inline-margin-end: 1rem !default;\n// scss-docs-end form-check-variables\n\n// scss-docs-start form-switch-variables\n$form-switch-color: rgba($black, .25) !default;\n$form-switch-width: 2em !default;\n$form-switch-padding-start: $form-switch-width + .5em !default;\n$form-switch-bg-image: url(\"data:image/svg+xml,\") !default;\n$form-switch-border-radius: $form-switch-width !default;\n$form-switch-transition: background-position .15s ease-in-out !default;\n\n$form-switch-focus-color: $input-focus-border-color !default;\n$form-switch-focus-bg-image: url(\"data:image/svg+xml,\") !default;\n\n$form-switch-checked-color: $component-active-color !default;\n$form-switch-checked-bg-image: url(\"data:image/svg+xml,\") !default;\n$form-switch-checked-bg-position: right center !default;\n// scss-docs-end form-switch-variables\n\n// scss-docs-start input-group-variables\n$input-group-addon-padding-y: $input-padding-y !default;\n$input-group-addon-padding-x: $input-padding-x !default;\n$input-group-addon-font-weight: $input-font-weight !default;\n$input-group-addon-color: $input-color !default;\n$input-group-addon-bg: $gray-200 !default;\n$input-group-addon-border-color: $input-border-color !default;\n// scss-docs-end input-group-variables\n\n// scss-docs-start form-select-variables\n$form-select-padding-y: $input-padding-y !default;\n$form-select-padding-x: $input-padding-x !default;\n$form-select-font-family: $input-font-family !default;\n$form-select-font-size: $input-font-size !default;\n$form-select-indicator-padding: $form-select-padding-x * 3 !default; // Extra padding for background-image\n$form-select-font-weight: $input-font-weight !default;\n$form-select-line-height: $input-line-height !default;\n$form-select-color: $input-color !default;\n$form-select-bg: $input-bg !default;\n$form-select-disabled-color: null !default;\n$form-select-disabled-bg: $gray-200 !default;\n$form-select-disabled-border-color: $input-disabled-border-color !default;\n$form-select-bg-position: right $form-select-padding-x center !default;\n$form-select-bg-size: 16px 12px !default; // In pixels because image dimensions\n$form-select-indicator-color: $gray-800 !default;\n$form-select-indicator: url(\"data:image/svg+xml,\") !default;\n\n$form-select-feedback-icon-padding-end: $form-select-padding-x * 2.5 + $form-select-indicator-padding !default;\n$form-select-feedback-icon-position: center right $form-select-indicator-padding !default;\n$form-select-feedback-icon-size: $input-height-inner-half $input-height-inner-half !default;\n\n$form-select-border-width: $input-border-width !default;\n$form-select-border-color: $input-border-color !default;\n$form-select-border-radius: $input-border-radius !default;\n$form-select-box-shadow: $box-shadow-inset !default;\n\n$form-select-focus-border-color: $input-focus-border-color !default;\n$form-select-focus-width: $input-focus-width !default;\n$form-select-focus-box-shadow: 0 0 0 $form-select-focus-width $input-btn-focus-color !default;\n\n$form-select-padding-y-sm: $input-padding-y-sm !default;\n$form-select-padding-x-sm: $input-padding-x-sm !default;\n$form-select-font-size-sm: $input-font-size-sm !default;\n$form-select-border-radius-sm: $input-border-radius-sm !default;\n\n$form-select-padding-y-lg: $input-padding-y-lg !default;\n$form-select-padding-x-lg: $input-padding-x-lg !default;\n$form-select-font-size-lg: $input-font-size-lg !default;\n$form-select-border-radius-lg: $input-border-radius-lg !default;\n\n$form-select-transition: $input-transition !default;\n// scss-docs-end form-select-variables\n\n// scss-docs-start form-range-variables\n$form-range-track-width: 100% !default;\n$form-range-track-height: .5rem !default;\n$form-range-track-cursor: pointer !default;\n$form-range-track-bg: $gray-300 !default;\n$form-range-track-border-radius: 1rem !default;\n$form-range-track-box-shadow: $box-shadow-inset !default;\n\n$form-range-thumb-width: 1rem !default;\n$form-range-thumb-height: $form-range-thumb-width !default;\n$form-range-thumb-bg: $component-active-bg !default;\n$form-range-thumb-border: 0 !default;\n$form-range-thumb-border-radius: 1rem !default;\n$form-range-thumb-box-shadow: 0 .1rem .25rem rgba($black, .1) !default;\n$form-range-thumb-focus-box-shadow: 0 0 0 1px $body-bg, $input-focus-box-shadow !default;\n$form-range-thumb-focus-box-shadow-width: $input-focus-width !default; // For focus box shadow issue in Edge\n$form-range-thumb-active-bg: tint-color($component-active-bg, 70%) !default;\n$form-range-thumb-disabled-bg: $gray-500 !default;\n$form-range-thumb-transition: background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n// scss-docs-end form-range-variables\n\n// scss-docs-start form-file-variables\n$form-file-button-color: $input-color !default;\n$form-file-button-bg: $input-group-addon-bg !default;\n$form-file-button-hover-bg: shade-color($form-file-button-bg, 5%) !default;\n// scss-docs-end form-file-variables\n\n// scss-docs-start form-floating-variables\n$form-floating-height: add(3.5rem, $input-height-border) !default;\n$form-floating-line-height: 1.25 !default;\n$form-floating-padding-x: $input-padding-x !default;\n$form-floating-padding-y: 1rem !default;\n$form-floating-input-padding-t: 1.625rem !default;\n$form-floating-input-padding-b: .625rem !default;\n$form-floating-label-opacity: .65 !default;\n$form-floating-label-transform: scale(.85) translateY(-.5rem) translateX(.15rem) !default;\n$form-floating-transition: opacity .1s ease-in-out, transform .1s ease-in-out !default;\n// scss-docs-end form-floating-variables\n\n// Form validation\n\n// scss-docs-start form-feedback-variables\n$form-feedback-margin-top: $form-text-margin-top !default;\n$form-feedback-font-size: $form-text-font-size !default;\n$form-feedback-font-style: $form-text-font-style !default;\n$form-feedback-valid-color: $success !default;\n$form-feedback-invalid-color: $danger !default;\n\n$form-feedback-icon-valid-color: $form-feedback-valid-color !default;\n$form-feedback-icon-valid: url(\"data:image/svg+xml,\") !default;\n$form-feedback-icon-invalid-color: $form-feedback-invalid-color !default;\n$form-feedback-icon-invalid: url(\"data:image/svg+xml,\") !default;\n// scss-docs-end form-feedback-variables\n\n// scss-docs-start form-validation-states\n$form-validation-states: (\n \"valid\": (\n \"color\": $form-feedback-valid-color,\n \"icon\": $form-feedback-icon-valid\n ),\n \"invalid\": (\n \"color\": $form-feedback-invalid-color,\n \"icon\": $form-feedback-icon-invalid\n )\n) !default;\n// scss-docs-end form-validation-states\n\n// Z-index master list\n//\n// Warning: Avoid customizing these values. They're used for a bird's eye view\n// of components dependent on the z-axis and are designed to all work together.\n\n// scss-docs-start zindex-stack\n$zindex-dropdown: 1000 !default;\n$zindex-sticky: 1020 !default;\n$zindex-fixed: 1030 !default;\n$zindex-offcanvas-backdrop: 1040 !default;\n$zindex-offcanvas: 1045 !default;\n$zindex-modal-backdrop: 1050 !default;\n$zindex-modal: 1055 !default;\n$zindex-popover: 1070 !default;\n$zindex-tooltip: 1080 !default;\n// scss-docs-end zindex-stack\n\n\n// Navs\n\n// scss-docs-start nav-variables\n$nav-link-padding-y: .5rem !default;\n$nav-link-padding-x: 1rem !default;\n$nav-link-font-size: null !default;\n$nav-link-font-weight: null !default;\n$nav-link-color: $link-color !default;\n$nav-link-hover-color: $link-hover-color !default;\n$nav-link-transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out !default;\n$nav-link-disabled-color: $gray-600 !default;\n\n$nav-tabs-border-color: $gray-300 !default;\n$nav-tabs-border-width: $border-width !default;\n$nav-tabs-border-radius: $border-radius !default;\n$nav-tabs-link-hover-border-color: $gray-200 $gray-200 $nav-tabs-border-color !default;\n$nav-tabs-link-active-color: $gray-700 !default;\n$nav-tabs-link-active-bg: $body-bg !default;\n$nav-tabs-link-active-border-color: $gray-300 $gray-300 $nav-tabs-link-active-bg !default;\n\n$nav-pills-border-radius: $border-radius !default;\n$nav-pills-link-active-color: $component-active-color !default;\n$nav-pills-link-active-bg: $component-active-bg !default;\n// scss-docs-end nav-variables\n\n\n// Navbar\n\n// scss-docs-start navbar-variables\n$navbar-padding-y: $spacer * .5 !default;\n$navbar-padding-x: null !default;\n\n$navbar-nav-link-padding-x: .5rem !default;\n\n$navbar-brand-font-size: $font-size-lg !default;\n// Compute the navbar-brand padding-y so the navbar-brand will have the same height as navbar-text and nav-link\n$nav-link-height: $font-size-base * $line-height-base + $nav-link-padding-y * 2 !default;\n$navbar-brand-height: $navbar-brand-font-size * $line-height-base !default;\n$navbar-brand-padding-y: ($nav-link-height - $navbar-brand-height) * .5 !default;\n$navbar-brand-margin-end: 1rem !default;\n\n$navbar-toggler-padding-y: .25rem !default;\n$navbar-toggler-padding-x: .75rem !default;\n$navbar-toggler-font-size: $font-size-lg !default;\n$navbar-toggler-border-radius: $btn-border-radius !default;\n$navbar-toggler-focus-width: $btn-focus-width !default;\n$navbar-toggler-transition: box-shadow .15s ease-in-out !default;\n// scss-docs-end navbar-variables\n\n// scss-docs-start navbar-theme-variables\n$navbar-dark-color: rgba($white, .55) !default;\n$navbar-dark-hover-color: rgba($white, .75) !default;\n$navbar-dark-active-color: $white !default;\n$navbar-dark-disabled-color: rgba($white, .25) !default;\n$navbar-dark-toggler-icon-bg: url(\"data:image/svg+xml,\") !default;\n$navbar-dark-toggler-border-color: rgba($white, .1) !default;\n\n$navbar-light-color: rgba($black, .55) !default;\n$navbar-light-hover-color: rgba($black, .7) !default;\n$navbar-light-active-color: rgba($black, .9) !default;\n$navbar-light-disabled-color: rgba($black, .3) !default;\n$navbar-light-toggler-icon-bg: url(\"data:image/svg+xml,\") !default;\n$navbar-light-toggler-border-color: rgba($black, .1) !default;\n\n$navbar-light-brand-color: $navbar-light-active-color !default;\n$navbar-light-brand-hover-color: $navbar-light-active-color !default;\n$navbar-dark-brand-color: $navbar-dark-active-color !default;\n$navbar-dark-brand-hover-color: $navbar-dark-active-color !default;\n// scss-docs-end navbar-theme-variables\n\n\n// Dropdowns\n//\n// Dropdown menu container and contents.\n\n// scss-docs-start dropdown-variables\n$dropdown-min-width: 10rem !default;\n$dropdown-padding-x: 0 !default;\n$dropdown-padding-y: .5rem !default;\n$dropdown-spacer: .125rem !default;\n$dropdown-font-size: $font-size-base !default;\n$dropdown-color: $body-color !default;\n$dropdown-bg: $white !default;\n$dropdown-border-color: rgba($black, .15) !default;\n$dropdown-border-radius: $border-radius !default;\n$dropdown-border-width: $border-width !default;\n$dropdown-inner-border-radius: subtract($dropdown-border-radius, $dropdown-border-width) !default;\n$dropdown-divider-bg: $dropdown-border-color !default;\n$dropdown-divider-margin-y: $spacer * .5 !default;\n$dropdown-box-shadow: $box-shadow !default;\n\n$dropdown-link-color: $gray-900 !default;\n$dropdown-link-hover-color: shade-color($dropdown-link-color, 10%) !default;\n$dropdown-link-hover-bg: $gray-200 !default;\n\n$dropdown-link-active-color: $component-active-color !default;\n$dropdown-link-active-bg: $component-active-bg !default;\n\n$dropdown-link-disabled-color: $gray-500 !default;\n\n$dropdown-item-padding-y: $spacer * .25 !default;\n$dropdown-item-padding-x: $spacer !default;\n\n$dropdown-header-color: $gray-600 !default;\n$dropdown-header-padding: $dropdown-padding-y $dropdown-item-padding-x !default;\n// scss-docs-end dropdown-variables\n\n// scss-docs-start dropdown-dark-variables\n$dropdown-dark-color: $gray-300 !default;\n$dropdown-dark-bg: $gray-800 !default;\n$dropdown-dark-border-color: $dropdown-border-color !default;\n$dropdown-dark-divider-bg: $dropdown-divider-bg !default;\n$dropdown-dark-box-shadow: null !default;\n$dropdown-dark-link-color: $dropdown-dark-color !default;\n$dropdown-dark-link-hover-color: $white !default;\n$dropdown-dark-link-hover-bg: rgba($white, .15) !default;\n$dropdown-dark-link-active-color: $dropdown-link-active-color !default;\n$dropdown-dark-link-active-bg: $dropdown-link-active-bg !default;\n$dropdown-dark-link-disabled-color: $gray-500 !default;\n$dropdown-dark-header-color: $gray-500 !default;\n// scss-docs-end dropdown-dark-variables\n\n\n// Pagination\n\n// scss-docs-start pagination-variables\n$pagination-padding-y: .375rem !default;\n$pagination-padding-x: .75rem !default;\n$pagination-padding-y-sm: .25rem !default;\n$pagination-padding-x-sm: .5rem !default;\n$pagination-padding-y-lg: .75rem !default;\n$pagination-padding-x-lg: 1.5rem !default;\n\n$pagination-color: $link-color !default;\n$pagination-bg: $white !default;\n$pagination-border-width: $border-width !default;\n$pagination-border-radius: $border-radius !default;\n$pagination-margin-start: -$pagination-border-width !default;\n$pagination-border-color: $gray-300 !default;\n\n$pagination-focus-color: $link-hover-color !default;\n$pagination-focus-bg: $gray-200 !default;\n$pagination-focus-box-shadow: $input-btn-focus-box-shadow !default;\n$pagination-focus-outline: 0 !default;\n\n$pagination-hover-color: $link-hover-color !default;\n$pagination-hover-bg: $gray-200 !default;\n$pagination-hover-border-color: $gray-300 !default;\n\n$pagination-active-color: $component-active-color !default;\n$pagination-active-bg: $component-active-bg !default;\n$pagination-active-border-color: $pagination-active-bg !default;\n\n$pagination-disabled-color: $gray-600 !default;\n$pagination-disabled-bg: $white !default;\n$pagination-disabled-border-color: $gray-300 !default;\n\n$pagination-transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n\n$pagination-border-radius-sm: $border-radius-sm !default;\n$pagination-border-radius-lg: $border-radius-lg !default;\n// scss-docs-end pagination-variables\n\n\n// Placeholders\n\n// scss-docs-start placeholders\n$placeholder-opacity-max: .5 !default;\n$placeholder-opacity-min: .2 !default;\n// scss-docs-end placeholders\n\n// Cards\n\n// scss-docs-start card-variables\n$card-spacer-y: $spacer !default;\n$card-spacer-x: $spacer !default;\n$card-title-spacer-y: $spacer * .5 !default;\n$card-border-width: $border-width !default;\n$card-border-color: rgba($black, .125) !default;\n$card-border-radius: $border-radius !default;\n$card-box-shadow: null !default;\n$card-inner-border-radius: subtract($card-border-radius, $card-border-width) !default;\n$card-cap-padding-y: $card-spacer-y * .5 !default;\n$card-cap-padding-x: $card-spacer-x !default;\n$card-cap-bg: rgba($black, .03) !default;\n$card-cap-color: null !default;\n$card-height: null !default;\n$card-color: null !default;\n$card-bg: $white !default;\n$card-img-overlay-padding: $spacer !default;\n$card-group-margin: $grid-gutter-width * .5 !default;\n// scss-docs-end card-variables\n\n// Accordion\n\n// scss-docs-start accordion-variables\n$accordion-padding-y: 1rem !default;\n$accordion-padding-x: 1.25rem !default;\n$accordion-color: $body-color !default;\n$accordion-bg: $body-bg !default;\n$accordion-border-width: $border-width !default;\n$accordion-border-color: rgba($black, .125) !default;\n$accordion-border-radius: $border-radius !default;\n$accordion-inner-border-radius: subtract($accordion-border-radius, $accordion-border-width) !default;\n\n$accordion-body-padding-y: $accordion-padding-y !default;\n$accordion-body-padding-x: $accordion-padding-x !default;\n\n$accordion-button-padding-y: $accordion-padding-y !default;\n$accordion-button-padding-x: $accordion-padding-x !default;\n$accordion-button-color: $accordion-color !default;\n$accordion-button-bg: $accordion-bg !default;\n$accordion-transition: $btn-transition, border-radius .15s ease !default;\n$accordion-button-active-bg: tint-color($component-active-bg, 90%) !default;\n$accordion-button-active-color: shade-color($primary, 10%) !default;\n\n$accordion-button-focus-border-color: $input-focus-border-color !default;\n$accordion-button-focus-box-shadow: $btn-focus-box-shadow !default;\n\n$accordion-icon-width: 1.25rem !default;\n$accordion-icon-color: $accordion-button-color !default;\n$accordion-icon-active-color: $accordion-button-active-color !default;\n$accordion-icon-transition: transform .2s ease-in-out !default;\n$accordion-icon-transform: rotate(-180deg) !default;\n\n$accordion-button-icon: url(\"data:image/svg+xml,\") !default;\n$accordion-button-active-icon: url(\"data:image/svg+xml,\") !default;\n// scss-docs-end accordion-variables\n\n// Tooltips\n\n// scss-docs-start tooltip-variables\n$tooltip-font-size: $font-size-sm !default;\n$tooltip-max-width: 200px !default;\n$tooltip-color: $white !default;\n$tooltip-bg: $black !default;\n$tooltip-border-radius: $border-radius !default;\n$tooltip-opacity: .9 !default;\n$tooltip-padding-y: $spacer * .25 !default;\n$tooltip-padding-x: $spacer * .5 !default;\n$tooltip-margin: 0 !default;\n\n$tooltip-arrow-width: .8rem !default;\n$tooltip-arrow-height: .4rem !default;\n$tooltip-arrow-color: $tooltip-bg !default;\n// scss-docs-end tooltip-variables\n\n// Form tooltips must come after regular tooltips\n// scss-docs-start tooltip-feedback-variables\n$form-feedback-tooltip-padding-y: $tooltip-padding-y !default;\n$form-feedback-tooltip-padding-x: $tooltip-padding-x !default;\n$form-feedback-tooltip-font-size: $tooltip-font-size !default;\n$form-feedback-tooltip-line-height: null !default;\n$form-feedback-tooltip-opacity: $tooltip-opacity !default;\n$form-feedback-tooltip-border-radius: $tooltip-border-radius !default;\n// scss-docs-end tooltip-feedback-variables\n\n\n// Popovers\n\n// scss-docs-start popover-variables\n$popover-font-size: $font-size-sm !default;\n$popover-bg: $white !default;\n$popover-max-width: 276px !default;\n$popover-border-width: $border-width !default;\n$popover-border-color: rgba($black, .2) !default;\n$popover-border-radius: $border-radius-lg !default;\n$popover-inner-border-radius: subtract($popover-border-radius, $popover-border-width) !default;\n$popover-box-shadow: $box-shadow !default;\n\n$popover-header-bg: shade-color($popover-bg, 6%) !default;\n$popover-header-color: $headings-color !default;\n$popover-header-padding-y: .5rem !default;\n$popover-header-padding-x: $spacer !default;\n\n$popover-body-color: $body-color !default;\n$popover-body-padding-y: $spacer !default;\n$popover-body-padding-x: $spacer !default;\n\n$popover-arrow-width: 1rem !default;\n$popover-arrow-height: .5rem !default;\n$popover-arrow-color: $popover-bg !default;\n\n$popover-arrow-outer-color: fade-in($popover-border-color, .05) !default;\n// scss-docs-end popover-variables\n\n\n// Toasts\n\n// scss-docs-start toast-variables\n$toast-max-width: 350px !default;\n$toast-padding-x: .75rem !default;\n$toast-padding-y: .5rem !default;\n$toast-font-size: .875rem !default;\n$toast-color: null !default;\n$toast-background-color: rgba($white, .85) !default;\n$toast-border-width: 1px !default;\n$toast-border-color: rgba($black, .1) !default;\n$toast-border-radius: $border-radius !default;\n$toast-box-shadow: $box-shadow !default;\n$toast-spacing: $container-padding-x !default;\n\n$toast-header-color: $gray-600 !default;\n$toast-header-background-color: rgba($white, .85) !default;\n$toast-header-border-color: rgba($black, .05) !default;\n// scss-docs-end toast-variables\n\n\n// Badges\n\n// scss-docs-start badge-variables\n$badge-font-size: .75em !default;\n$badge-font-weight: $font-weight-bold !default;\n$badge-color: $white !default;\n$badge-padding-y: .35em !default;\n$badge-padding-x: .65em !default;\n$badge-border-radius: $border-radius !default;\n// scss-docs-end badge-variables\n\n\n// Modals\n\n// scss-docs-start modal-variables\n$modal-inner-padding: $spacer !default;\n\n$modal-footer-margin-between: .5rem !default;\n\n$modal-dialog-margin: .5rem !default;\n$modal-dialog-margin-y-sm-up: 1.75rem !default;\n\n$modal-title-line-height: $line-height-base !default;\n\n$modal-content-color: null !default;\n$modal-content-bg: $white !default;\n$modal-content-border-color: rgba($black, .2) !default;\n$modal-content-border-width: $border-width !default;\n$modal-content-border-radius: $border-radius-lg !default;\n$modal-content-inner-border-radius: subtract($modal-content-border-radius, $modal-content-border-width) !default;\n$modal-content-box-shadow-xs: $box-shadow-sm !default;\n$modal-content-box-shadow-sm-up: $box-shadow !default;\n\n$modal-backdrop-bg: $black !default;\n$modal-backdrop-opacity: .5 !default;\n$modal-header-border-color: $border-color !default;\n$modal-footer-border-color: $modal-header-border-color !default;\n$modal-header-border-width: $modal-content-border-width !default;\n$modal-footer-border-width: $modal-header-border-width !default;\n$modal-header-padding-y: $modal-inner-padding !default;\n$modal-header-padding-x: $modal-inner-padding !default;\n$modal-header-padding: $modal-header-padding-y $modal-header-padding-x !default; // Keep this for backwards compatibility\n\n$modal-sm: 300px !default;\n$modal-md: 500px !default;\n$modal-lg: 800px !default;\n$modal-xl: 1140px !default;\n\n$modal-fade-transform: translate(0, -50px) !default;\n$modal-show-transform: none !default;\n$modal-transition: transform .3s ease-out !default;\n$modal-scale-transform: scale(1.02) !default;\n// scss-docs-end modal-variables\n\n\n// Alerts\n//\n// Define alert colors, border radius, and padding.\n\n// scss-docs-start alert-variables\n$alert-padding-y: $spacer !default;\n$alert-padding-x: $spacer !default;\n$alert-margin-bottom: 1rem !default;\n$alert-border-radius: $border-radius !default;\n$alert-link-font-weight: $font-weight-bold !default;\n$alert-border-width: $border-width !default;\n$alert-bg-scale: -80% !default;\n$alert-border-scale: -70% !default;\n$alert-color-scale: 40% !default;\n$alert-dismissible-padding-r: $alert-padding-x * 3 !default; // 3x covers width of x plus default padding on either side\n// scss-docs-end alert-variables\n\n\n// Progress bars\n\n// scss-docs-start progress-variables\n$progress-height: 1rem !default;\n$progress-font-size: $font-size-base * .75 !default;\n$progress-bg: $gray-200 !default;\n$progress-border-radius: $border-radius !default;\n$progress-box-shadow: $box-shadow-inset !default;\n$progress-bar-color: $white !default;\n$progress-bar-bg: $primary !default;\n$progress-bar-animation-timing: 1s linear infinite !default;\n$progress-bar-transition: width .6s ease !default;\n// scss-docs-end progress-variables\n\n\n// List group\n\n// scss-docs-start list-group-variables\n$list-group-color: $gray-900 !default;\n$list-group-bg: $white !default;\n$list-group-border-color: rgba($black, .125) !default;\n$list-group-border-width: $border-width !default;\n$list-group-border-radius: $border-radius !default;\n\n$list-group-item-padding-y: $spacer * .5 !default;\n$list-group-item-padding-x: $spacer !default;\n$list-group-item-bg-scale: -80% !default;\n$list-group-item-color-scale: 40% !default;\n\n$list-group-hover-bg: $gray-100 !default;\n$list-group-active-color: $component-active-color !default;\n$list-group-active-bg: $component-active-bg !default;\n$list-group-active-border-color: $list-group-active-bg !default;\n\n$list-group-disabled-color: $gray-600 !default;\n$list-group-disabled-bg: $list-group-bg !default;\n\n$list-group-action-color: $gray-700 !default;\n$list-group-action-hover-color: $list-group-action-color !default;\n\n$list-group-action-active-color: $body-color !default;\n$list-group-action-active-bg: $gray-200 !default;\n// scss-docs-end list-group-variables\n\n\n// Image thumbnails\n\n// scss-docs-start thumbnail-variables\n$thumbnail-padding: .25rem !default;\n$thumbnail-bg: $body-bg !default;\n$thumbnail-border-width: $border-width !default;\n$thumbnail-border-color: $gray-300 !default;\n$thumbnail-border-radius: $border-radius !default;\n$thumbnail-box-shadow: $box-shadow-sm !default;\n// scss-docs-end thumbnail-variables\n\n\n// Figures\n\n// scss-docs-start figure-variables\n$figure-caption-font-size: $small-font-size !default;\n$figure-caption-color: $gray-600 !default;\n// scss-docs-end figure-variables\n\n\n// Breadcrumbs\n\n// scss-docs-start breadcrumb-variables\n$breadcrumb-font-size: null !default;\n$breadcrumb-padding-y: 0 !default;\n$breadcrumb-padding-x: 0 !default;\n$breadcrumb-item-padding-x: .5rem !default;\n$breadcrumb-margin-bottom: 1rem !default;\n$breadcrumb-bg: null !default;\n$breadcrumb-divider-color: $gray-600 !default;\n$breadcrumb-active-color: $gray-600 !default;\n$breadcrumb-divider: quote(\"/\") !default;\n$breadcrumb-divider-flipped: $breadcrumb-divider !default;\n$breadcrumb-border-radius: null !default;\n// scss-docs-end breadcrumb-variables\n\n// Carousel\n\n// scss-docs-start carousel-variables\n$carousel-control-color: $white !default;\n$carousel-control-width: 15% !default;\n$carousel-control-opacity: .5 !default;\n$carousel-control-hover-opacity: .9 !default;\n$carousel-control-transition: opacity .15s ease !default;\n\n$carousel-indicator-width: 30px !default;\n$carousel-indicator-height: 3px !default;\n$carousel-indicator-hit-area-height: 10px !default;\n$carousel-indicator-spacer: 3px !default;\n$carousel-indicator-opacity: .5 !default;\n$carousel-indicator-active-bg: $white !default;\n$carousel-indicator-active-opacity: 1 !default;\n$carousel-indicator-transition: opacity .6s ease !default;\n\n$carousel-caption-width: 70% !default;\n$carousel-caption-color: $white !default;\n$carousel-caption-padding-y: 1.25rem !default;\n$carousel-caption-spacer: 1.25rem !default;\n\n$carousel-control-icon-width: 2rem !default;\n\n$carousel-control-prev-icon-bg: url(\"data:image/svg+xml,\") !default;\n$carousel-control-next-icon-bg: url(\"data:image/svg+xml,\") !default;\n\n$carousel-transition-duration: .6s !default;\n$carousel-transition: transform $carousel-transition-duration ease-in-out !default; // Define transform transition first if using multiple transitions (e.g., `transform 2s ease, opacity .5s ease-out`)\n\n$carousel-dark-indicator-active-bg: $black !default;\n$carousel-dark-caption-color: $black !default;\n$carousel-dark-control-icon-filter: invert(1) grayscale(100) !default;\n// scss-docs-end carousel-variables\n\n\n// Spinners\n\n// scss-docs-start spinner-variables\n$spinner-width: 2rem !default;\n$spinner-height: $spinner-width !default;\n$spinner-vertical-align: -.125em !default;\n$spinner-border-width: .25em !default;\n$spinner-animation-speed: .75s !default;\n\n$spinner-width-sm: 1rem !default;\n$spinner-height-sm: $spinner-width-sm !default;\n$spinner-border-width-sm: .2em !default;\n// scss-docs-end spinner-variables\n\n\n// Close\n\n// scss-docs-start close-variables\n$btn-close-width: 1em !default;\n$btn-close-height: $btn-close-width !default;\n$btn-close-padding-x: .25em !default;\n$btn-close-padding-y: $btn-close-padding-x !default;\n$btn-close-color: $black !default;\n$btn-close-bg: url(\"data:image/svg+xml,\") !default;\n$btn-close-focus-shadow: $input-btn-focus-box-shadow !default;\n$btn-close-opacity: .5 !default;\n$btn-close-hover-opacity: .75 !default;\n$btn-close-focus-opacity: 1 !default;\n$btn-close-disabled-opacity: .25 !default;\n$btn-close-white-filter: invert(1) grayscale(100%) brightness(200%) !default;\n// scss-docs-end close-variables\n\n\n// Offcanvas\n\n// scss-docs-start offcanvas-variables\n$offcanvas-padding-y: $modal-inner-padding !default;\n$offcanvas-padding-x: $modal-inner-padding !default;\n$offcanvas-horizontal-width: 400px !default;\n$offcanvas-vertical-height: 30vh !default;\n$offcanvas-transition-duration: .3s !default;\n$offcanvas-border-color: $modal-content-border-color !default;\n$offcanvas-border-width: $modal-content-border-width !default;\n$offcanvas-title-line-height: $modal-title-line-height !default;\n$offcanvas-bg-color: $modal-content-bg !default;\n$offcanvas-color: $modal-content-color !default;\n$offcanvas-box-shadow: $modal-content-box-shadow-xs !default;\n$offcanvas-backdrop-bg: $modal-backdrop-bg !default;\n$offcanvas-backdrop-opacity: $modal-backdrop-opacity !default;\n// scss-docs-end offcanvas-variables\n\n// Code\n\n$code-font-size: $small-font-size !default;\n$code-color: $pink !default;\n\n$kbd-padding-y: .2rem !default;\n$kbd-padding-x: .4rem !default;\n$kbd-font-size: $code-font-size !default;\n$kbd-color: $white !default;\n$kbd-bg: $gray-900 !default;\n\n$pre-color: null !default;\n","// Row\n//\n// Rows contain your columns.\n\n@if $enable-grid-classes {\n .row {\n @include make-row();\n\n > * {\n @include make-col-ready();\n }\n }\n}\n\n@if $enable-cssgrid {\n .grid {\n display: grid;\n grid-template-rows: repeat(var(--#{$variable-prefix}rows, 1), 1fr);\n grid-template-columns: repeat(var(--#{$variable-prefix}columns, #{$grid-columns}), 1fr);\n gap: var(--#{$variable-prefix}gap, #{$grid-gutter-width});\n\n @include make-cssgrid();\n }\n}\n\n\n// Columns\n//\n// Common styles for small and large grid columns\n\n@if $enable-grid-classes {\n @include make-grid-columns();\n}\n","// Grid system\n//\n// Generate semantic grid columns with these mixins.\n\n@mixin make-row($gutter: $grid-gutter-width) {\n --#{$variable-prefix}gutter-x: #{$gutter};\n --#{$variable-prefix}gutter-y: 0;\n display: flex;\n flex-wrap: wrap;\n // TODO: Revisit calc order after https://github.com/react-bootstrap/react-bootstrap/issues/6039 is fixed\n margin-top: calc(-1 * var(--#{$variable-prefix}gutter-y)); // stylelint-disable-line function-disallowed-list\n margin-right: calc(-.5 * var(--#{$variable-prefix}gutter-x)); // stylelint-disable-line function-disallowed-list\n margin-left: calc(-.5 * var(--#{$variable-prefix}gutter-x)); // stylelint-disable-line function-disallowed-list\n}\n\n@mixin make-col-ready($gutter: $grid-gutter-width) {\n // Add box sizing if only the grid is loaded\n box-sizing: if(variable-exists(include-column-box-sizing) and $include-column-box-sizing, border-box, null);\n // Prevent columns from becoming too narrow when at smaller grid tiers by\n // always setting `width: 100%;`. This works because we set the width\n // later on to override this initial width.\n flex-shrink: 0;\n width: 100%;\n max-width: 100%; // Prevent `.col-auto`, `.col` (& responsive variants) from breaking out the grid\n padding-right: calc(var(--#{$variable-prefix}gutter-x) * .5); // stylelint-disable-line function-disallowed-list\n padding-left: calc(var(--#{$variable-prefix}gutter-x) * .5); // stylelint-disable-line function-disallowed-list\n margin-top: var(--#{$variable-prefix}gutter-y);\n}\n\n@mixin make-col($size: false, $columns: $grid-columns) {\n @if $size {\n flex: 0 0 auto;\n width: percentage(divide($size, $columns));\n\n } @else {\n flex: 1 1 0;\n max-width: 100%;\n }\n}\n\n@mixin make-col-auto() {\n flex: 0 0 auto;\n width: auto;\n}\n\n@mixin make-col-offset($size, $columns: $grid-columns) {\n $num: divide($size, $columns);\n margin-left: if($num == 0, 0, percentage($num));\n}\n\n// Row columns\n//\n// Specify on a parent element(e.g., .row) to force immediate children into NN\n// numberof columns. Supports wrapping to new lines, but does not do a Masonry\n// style grid.\n@mixin row-cols($count) {\n > * {\n flex: 0 0 auto;\n width: divide(100%, $count);\n }\n}\n\n// Framework grid generation\n//\n// Used only by Bootstrap to generate the correct number of grid classes given\n// any value of `$grid-columns`.\n\n@mixin make-grid-columns($columns: $grid-columns, $gutter: $grid-gutter-width, $breakpoints: $grid-breakpoints) {\n @each $breakpoint in map-keys($breakpoints) {\n $infix: breakpoint-infix($breakpoint, $breakpoints);\n\n @include media-breakpoint-up($breakpoint, $breakpoints) {\n // Provide basic `.col-{bp}` classes for equal-width flexbox columns\n .col#{$infix} {\n flex: 1 0 0%; // Flexbugs #4: https://github.com/philipwalton/flexbugs#flexbug-4\n }\n\n .row-cols#{$infix}-auto > * {\n @include make-col-auto();\n }\n\n @if $grid-row-columns > 0 {\n @for $i from 1 through $grid-row-columns {\n .row-cols#{$infix}-#{$i} {\n @include row-cols($i);\n }\n }\n }\n\n .col#{$infix}-auto {\n @include make-col-auto();\n }\n\n @if $columns > 0 {\n @for $i from 1 through $columns {\n .col#{$infix}-#{$i} {\n @include make-col($i, $columns);\n }\n }\n\n // `$columns - 1` because offsetting by the width of an entire row isn't possible\n @for $i from 0 through ($columns - 1) {\n @if not ($infix == \"\" and $i == 0) { // Avoid emitting useless .offset-0\n .offset#{$infix}-#{$i} {\n @include make-col-offset($i, $columns);\n }\n }\n }\n }\n\n // Gutters\n //\n // Make use of `.g-*`, `.gx-*` or `.gy-*` utilities to change spacing between the columns.\n @each $key, $value in $gutters {\n .g#{$infix}-#{$key},\n .gx#{$infix}-#{$key} {\n --#{$variable-prefix}gutter-x: #{$value};\n }\n\n .g#{$infix}-#{$key},\n .gy#{$infix}-#{$key} {\n --#{$variable-prefix}gutter-y: #{$value};\n }\n }\n }\n }\n}\n\n@mixin make-cssgrid($columns: $grid-columns, $breakpoints: $grid-breakpoints) {\n @each $breakpoint in map-keys($breakpoints) {\n $infix: breakpoint-infix($breakpoint, $breakpoints);\n\n @include media-breakpoint-up($breakpoint, $breakpoints) {\n @if $columns > 0 {\n @for $i from 1 through $columns {\n .g-col#{$infix}-#{$i} {\n grid-column: auto / span $i;\n }\n }\n\n // Start with `1` because `0` is and invalid value.\n // Ends with `$columns - 1` because offsetting by the width of an entire row isn't possible.\n @for $i from 1 through ($columns - 1) {\n .g-start#{$infix}-#{$i} {\n grid-column-start: $i;\n }\n }\n }\n }\n }\n}\n","// Utility generator\n// Used to generate utilities & print utilities\n@mixin generate-utility($utility, $infix, $is-rfs-media-query: false) {\n $values: map-get($utility, values);\n\n // If the values are a list or string, convert it into a map\n @if type-of($values) == \"string\" or type-of(nth($values, 1)) != \"list\" {\n $values: zip($values, $values);\n }\n\n @each $key, $value in $values {\n $properties: map-get($utility, property);\n\n // Multiple properties are possible, for example with vertical or horizontal margins or paddings\n @if type-of($properties) == \"string\" {\n $properties: append((), $properties);\n }\n\n // Use custom class if present\n $property-class: if(map-has-key($utility, class), map-get($utility, class), nth($properties, 1));\n $property-class: if($property-class == null, \"\", $property-class);\n\n // State params to generate pseudo-classes\n $state: if(map-has-key($utility, state), map-get($utility, state), ());\n\n $infix: if($property-class == \"\" and str-slice($infix, 1, 1) == \"-\", str-slice($infix, 2), $infix);\n\n // Don't prefix if value key is null (eg. with shadow class)\n $property-class-modifier: if($key, if($property-class == \"\" and $infix == \"\", \"\", \"-\") + $key, \"\");\n\n @if map-get($utility, rfs) {\n // Inside the media query\n @if $is-rfs-media-query {\n $val: rfs-value($value);\n\n // Do not render anything if fluid and non fluid values are the same\n $value: if($val == rfs-fluid-value($value), null, $val);\n }\n @else {\n $value: rfs-fluid-value($value);\n }\n }\n\n $is-css-var: map-get($utility, css-var);\n $is-local-vars: map-get($utility, local-vars);\n $is-rtl: map-get($utility, rtl);\n\n @if $value != null {\n @if $is-rtl == false {\n /* rtl:begin:remove */\n }\n\n @if $is-css-var {\n .#{$property-class + $infix + $property-class-modifier} {\n --#{$variable-prefix}#{$property-class}: #{$value};\n }\n\n @each $pseudo in $state {\n .#{$property-class + $infix + $property-class-modifier}-#{$pseudo}:#{$pseudo} {\n --#{$variable-prefix}#{$property-class}: #{$value};\n }\n }\n } @else {\n .#{$property-class + $infix + $property-class-modifier} {\n @each $property in $properties {\n @if $is-local-vars {\n @each $local-var, $value in $is-local-vars {\n --#{$variable-prefix}#{$local-var}: #{$value};\n }\n }\n #{$property}: $value if($enable-important-utilities, !important, null);\n }\n }\n\n @each $pseudo in $state {\n .#{$property-class + $infix + $property-class-modifier}-#{$pseudo}:#{$pseudo} {\n @each $property in $properties {\n #{$property}: $value if($enable-important-utilities, !important, null);\n }\n }\n }\n }\n\n @if $is-rtl == false {\n /* rtl:end:remove */\n }\n }\n }\n}\n","// Loop over each breakpoint\n@each $breakpoint in map-keys($grid-breakpoints) {\n\n // Generate media query if needed\n @include media-breakpoint-up($breakpoint) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n // Loop over each utility property\n @each $key, $utility in $utilities {\n // The utility can be disabled with `false`, thus check if the utility is a map first\n // Only proceed if responsive media queries are enabled or if it's the base media query\n @if type-of($utility) == \"map\" and (map-get($utility, responsive) or $infix == \"\") {\n @include generate-utility($utility, $infix);\n }\n }\n }\n}\n\n// RFS rescaling\n@media (min-width: $rfs-mq-value) {\n @each $breakpoint in map-keys($grid-breakpoints) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n @if (map-get($grid-breakpoints, $breakpoint) < $rfs-breakpoint) {\n // Loop over each utility property\n @each $key, $utility in $utilities {\n // The utility can be disabled with `false`, thus check if the utility is a map first\n // Only proceed if responsive media queries are enabled or if it's the base media query\n @if type-of($utility) == \"map\" and map-get($utility, rfs) and (map-get($utility, responsive) or $infix == \"\") {\n @include generate-utility($utility, $infix, true);\n }\n }\n }\n }\n}\n\n\n// Print utilities\n@media print {\n @each $key, $utility in $utilities {\n // The utility can be disabled with `false`, thus check if the utility is a map first\n // Then check if the utility needs print styles\n @if type-of($utility) == \"map\" and map-get($utility, print) == true {\n @include generate-utility($utility, \"-print\");\n }\n }\n}\n"]} \ No newline at end of file diff --git a/samples/web-app-file-storage/src/static/bootstrap/css/bootstrap-grid.rtl.min.css b/samples/web-app-file-storage/src/static/bootstrap/css/bootstrap-grid.rtl.min.css new file mode 100644 index 0000000..8ec49c7 --- /dev/null +++ b/samples/web-app-file-storage/src/static/bootstrap/css/bootstrap-grid.rtl.min.css @@ -0,0 +1,7 @@ +/*! + * Bootstrap Grid v5.1.3 (https://getbootstrap.com/) + * Copyright 2011-2021 The Bootstrap Authors + * Copyright 2011-2021 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) + */:root{--bs-blue:#0d6efd;--bs-indigo:#6610f2;--bs-purple:#6f42c1;--bs-pink:#d63384;--bs-red:#dc3545;--bs-orange:#fd7e14;--bs-yellow:#ffc107;--bs-green:#198754;--bs-teal:#20c997;--bs-cyan:#0dcaf0;--bs-white:#fff;--bs-gray:#6c757d;--bs-gray-dark:#343a40;--bs-gray-100:#f8f9fa;--bs-gray-200:#e9ecef;--bs-gray-300:#dee2e6;--bs-gray-400:#ced4da;--bs-gray-500:#adb5bd;--bs-gray-600:#6c757d;--bs-gray-700:#495057;--bs-gray-800:#343a40;--bs-gray-900:#212529;--bs-primary:#0d6efd;--bs-secondary:#6c757d;--bs-success:#198754;--bs-info:#0dcaf0;--bs-warning:#ffc107;--bs-danger:#dc3545;--bs-light:#f8f9fa;--bs-dark:#212529;--bs-primary-rgb:13,110,253;--bs-secondary-rgb:108,117,125;--bs-success-rgb:25,135,84;--bs-info-rgb:13,202,240;--bs-warning-rgb:255,193,7;--bs-danger-rgb:220,53,69;--bs-light-rgb:248,249,250;--bs-dark-rgb:33,37,41;--bs-white-rgb:255,255,255;--bs-black-rgb:0,0,0;--bs-body-color-rgb:33,37,41;--bs-body-bg-rgb:255,255,255;--bs-font-sans-serif:system-ui,-apple-system,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans","Liberation Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--bs-font-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--bs-gradient:linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));--bs-body-font-family:var(--bs-font-sans-serif);--bs-body-font-size:1rem;--bs-body-font-weight:400;--bs-body-line-height:1.5;--bs-body-color:#212529;--bs-body-bg:#fff}.container,.container-fluid,.container-lg,.container-md,.container-sm,.container-xl,.container-xxl{width:100%;padding-left:var(--bs-gutter-x,.75rem);padding-right:var(--bs-gutter-x,.75rem);margin-left:auto;margin-right:auto}@media (min-width:576px){.container,.container-sm{max-width:540px}}@media (min-width:768px){.container,.container-md,.container-sm{max-width:720px}}@media (min-width:992px){.container,.container-lg,.container-md,.container-sm{max-width:960px}}@media (min-width:1200px){.container,.container-lg,.container-md,.container-sm,.container-xl{max-width:1140px}}@media (min-width:1400px){.container,.container-lg,.container-md,.container-sm,.container-xl,.container-xxl{max-width:1320px}}.row{--bs-gutter-x:1.5rem;--bs-gutter-y:0;display:flex;flex-wrap:wrap;margin-top:calc(-1 * var(--bs-gutter-y));margin-left:calc(-.5 * var(--bs-gutter-x));margin-right:calc(-.5 * var(--bs-gutter-x))}.row>*{box-sizing:border-box;flex-shrink:0;width:100%;max-width:100%;padding-left:calc(var(--bs-gutter-x) * .5);padding-right:calc(var(--bs-gutter-x) * .5);margin-top:var(--bs-gutter-y)}.col{flex:1 0 0%}.row-cols-auto>*{flex:0 0 auto;width:auto}.row-cols-1>*{flex:0 0 auto;width:100%}.row-cols-2>*{flex:0 0 auto;width:50%}.row-cols-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-4>*{flex:0 0 auto;width:25%}.row-cols-5>*{flex:0 0 auto;width:20%}.row-cols-6>*{flex:0 0 auto;width:16.6666666667%}.col-auto{flex:0 0 auto;width:auto}.col-1{flex:0 0 auto;width:8.33333333%}.col-2{flex:0 0 auto;width:16.66666667%}.col-3{flex:0 0 auto;width:25%}.col-4{flex:0 0 auto;width:33.33333333%}.col-5{flex:0 0 auto;width:41.66666667%}.col-6{flex:0 0 auto;width:50%}.col-7{flex:0 0 auto;width:58.33333333%}.col-8{flex:0 0 auto;width:66.66666667%}.col-9{flex:0 0 auto;width:75%}.col-10{flex:0 0 auto;width:83.33333333%}.col-11{flex:0 0 auto;width:91.66666667%}.col-12{flex:0 0 auto;width:100%}.offset-1{margin-right:8.33333333%}.offset-2{margin-right:16.66666667%}.offset-3{margin-right:25%}.offset-4{margin-right:33.33333333%}.offset-5{margin-right:41.66666667%}.offset-6{margin-right:50%}.offset-7{margin-right:58.33333333%}.offset-8{margin-right:66.66666667%}.offset-9{margin-right:75%}.offset-10{margin-right:83.33333333%}.offset-11{margin-right:91.66666667%}.g-0,.gx-0{--bs-gutter-x:0}.g-0,.gy-0{--bs-gutter-y:0}.g-1,.gx-1{--bs-gutter-x:0.25rem}.g-1,.gy-1{--bs-gutter-y:0.25rem}.g-2,.gx-2{--bs-gutter-x:0.5rem}.g-2,.gy-2{--bs-gutter-y:0.5rem}.g-3,.gx-3{--bs-gutter-x:1rem}.g-3,.gy-3{--bs-gutter-y:1rem}.g-4,.gx-4{--bs-gutter-x:1.5rem}.g-4,.gy-4{--bs-gutter-y:1.5rem}.g-5,.gx-5{--bs-gutter-x:3rem}.g-5,.gy-5{--bs-gutter-y:3rem}@media (min-width:576px){.col-sm{flex:1 0 0%}.row-cols-sm-auto>*{flex:0 0 auto;width:auto}.row-cols-sm-1>*{flex:0 0 auto;width:100%}.row-cols-sm-2>*{flex:0 0 auto;width:50%}.row-cols-sm-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-sm-4>*{flex:0 0 auto;width:25%}.row-cols-sm-5>*{flex:0 0 auto;width:20%}.row-cols-sm-6>*{flex:0 0 auto;width:16.6666666667%}.col-sm-auto{flex:0 0 auto;width:auto}.col-sm-1{flex:0 0 auto;width:8.33333333%}.col-sm-2{flex:0 0 auto;width:16.66666667%}.col-sm-3{flex:0 0 auto;width:25%}.col-sm-4{flex:0 0 auto;width:33.33333333%}.col-sm-5{flex:0 0 auto;width:41.66666667%}.col-sm-6{flex:0 0 auto;width:50%}.col-sm-7{flex:0 0 auto;width:58.33333333%}.col-sm-8{flex:0 0 auto;width:66.66666667%}.col-sm-9{flex:0 0 auto;width:75%}.col-sm-10{flex:0 0 auto;width:83.33333333%}.col-sm-11{flex:0 0 auto;width:91.66666667%}.col-sm-12{flex:0 0 auto;width:100%}.offset-sm-0{margin-right:0}.offset-sm-1{margin-right:8.33333333%}.offset-sm-2{margin-right:16.66666667%}.offset-sm-3{margin-right:25%}.offset-sm-4{margin-right:33.33333333%}.offset-sm-5{margin-right:41.66666667%}.offset-sm-6{margin-right:50%}.offset-sm-7{margin-right:58.33333333%}.offset-sm-8{margin-right:66.66666667%}.offset-sm-9{margin-right:75%}.offset-sm-10{margin-right:83.33333333%}.offset-sm-11{margin-right:91.66666667%}.g-sm-0,.gx-sm-0{--bs-gutter-x:0}.g-sm-0,.gy-sm-0{--bs-gutter-y:0}.g-sm-1,.gx-sm-1{--bs-gutter-x:0.25rem}.g-sm-1,.gy-sm-1{--bs-gutter-y:0.25rem}.g-sm-2,.gx-sm-2{--bs-gutter-x:0.5rem}.g-sm-2,.gy-sm-2{--bs-gutter-y:0.5rem}.g-sm-3,.gx-sm-3{--bs-gutter-x:1rem}.g-sm-3,.gy-sm-3{--bs-gutter-y:1rem}.g-sm-4,.gx-sm-4{--bs-gutter-x:1.5rem}.g-sm-4,.gy-sm-4{--bs-gutter-y:1.5rem}.g-sm-5,.gx-sm-5{--bs-gutter-x:3rem}.g-sm-5,.gy-sm-5{--bs-gutter-y:3rem}}@media (min-width:768px){.col-md{flex:1 0 0%}.row-cols-md-auto>*{flex:0 0 auto;width:auto}.row-cols-md-1>*{flex:0 0 auto;width:100%}.row-cols-md-2>*{flex:0 0 auto;width:50%}.row-cols-md-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-md-4>*{flex:0 0 auto;width:25%}.row-cols-md-5>*{flex:0 0 auto;width:20%}.row-cols-md-6>*{flex:0 0 auto;width:16.6666666667%}.col-md-auto{flex:0 0 auto;width:auto}.col-md-1{flex:0 0 auto;width:8.33333333%}.col-md-2{flex:0 0 auto;width:16.66666667%}.col-md-3{flex:0 0 auto;width:25%}.col-md-4{flex:0 0 auto;width:33.33333333%}.col-md-5{flex:0 0 auto;width:41.66666667%}.col-md-6{flex:0 0 auto;width:50%}.col-md-7{flex:0 0 auto;width:58.33333333%}.col-md-8{flex:0 0 auto;width:66.66666667%}.col-md-9{flex:0 0 auto;width:75%}.col-md-10{flex:0 0 auto;width:83.33333333%}.col-md-11{flex:0 0 auto;width:91.66666667%}.col-md-12{flex:0 0 auto;width:100%}.offset-md-0{margin-right:0}.offset-md-1{margin-right:8.33333333%}.offset-md-2{margin-right:16.66666667%}.offset-md-3{margin-right:25%}.offset-md-4{margin-right:33.33333333%}.offset-md-5{margin-right:41.66666667%}.offset-md-6{margin-right:50%}.offset-md-7{margin-right:58.33333333%}.offset-md-8{margin-right:66.66666667%}.offset-md-9{margin-right:75%}.offset-md-10{margin-right:83.33333333%}.offset-md-11{margin-right:91.66666667%}.g-md-0,.gx-md-0{--bs-gutter-x:0}.g-md-0,.gy-md-0{--bs-gutter-y:0}.g-md-1,.gx-md-1{--bs-gutter-x:0.25rem}.g-md-1,.gy-md-1{--bs-gutter-y:0.25rem}.g-md-2,.gx-md-2{--bs-gutter-x:0.5rem}.g-md-2,.gy-md-2{--bs-gutter-y:0.5rem}.g-md-3,.gx-md-3{--bs-gutter-x:1rem}.g-md-3,.gy-md-3{--bs-gutter-y:1rem}.g-md-4,.gx-md-4{--bs-gutter-x:1.5rem}.g-md-4,.gy-md-4{--bs-gutter-y:1.5rem}.g-md-5,.gx-md-5{--bs-gutter-x:3rem}.g-md-5,.gy-md-5{--bs-gutter-y:3rem}}@media (min-width:992px){.col-lg{flex:1 0 0%}.row-cols-lg-auto>*{flex:0 0 auto;width:auto}.row-cols-lg-1>*{flex:0 0 auto;width:100%}.row-cols-lg-2>*{flex:0 0 auto;width:50%}.row-cols-lg-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-lg-4>*{flex:0 0 auto;width:25%}.row-cols-lg-5>*{flex:0 0 auto;width:20%}.row-cols-lg-6>*{flex:0 0 auto;width:16.6666666667%}.col-lg-auto{flex:0 0 auto;width:auto}.col-lg-1{flex:0 0 auto;width:8.33333333%}.col-lg-2{flex:0 0 auto;width:16.66666667%}.col-lg-3{flex:0 0 auto;width:25%}.col-lg-4{flex:0 0 auto;width:33.33333333%}.col-lg-5{flex:0 0 auto;width:41.66666667%}.col-lg-6{flex:0 0 auto;width:50%}.col-lg-7{flex:0 0 auto;width:58.33333333%}.col-lg-8{flex:0 0 auto;width:66.66666667%}.col-lg-9{flex:0 0 auto;width:75%}.col-lg-10{flex:0 0 auto;width:83.33333333%}.col-lg-11{flex:0 0 auto;width:91.66666667%}.col-lg-12{flex:0 0 auto;width:100%}.offset-lg-0{margin-right:0}.offset-lg-1{margin-right:8.33333333%}.offset-lg-2{margin-right:16.66666667%}.offset-lg-3{margin-right:25%}.offset-lg-4{margin-right:33.33333333%}.offset-lg-5{margin-right:41.66666667%}.offset-lg-6{margin-right:50%}.offset-lg-7{margin-right:58.33333333%}.offset-lg-8{margin-right:66.66666667%}.offset-lg-9{margin-right:75%}.offset-lg-10{margin-right:83.33333333%}.offset-lg-11{margin-right:91.66666667%}.g-lg-0,.gx-lg-0{--bs-gutter-x:0}.g-lg-0,.gy-lg-0{--bs-gutter-y:0}.g-lg-1,.gx-lg-1{--bs-gutter-x:0.25rem}.g-lg-1,.gy-lg-1{--bs-gutter-y:0.25rem}.g-lg-2,.gx-lg-2{--bs-gutter-x:0.5rem}.g-lg-2,.gy-lg-2{--bs-gutter-y:0.5rem}.g-lg-3,.gx-lg-3{--bs-gutter-x:1rem}.g-lg-3,.gy-lg-3{--bs-gutter-y:1rem}.g-lg-4,.gx-lg-4{--bs-gutter-x:1.5rem}.g-lg-4,.gy-lg-4{--bs-gutter-y:1.5rem}.g-lg-5,.gx-lg-5{--bs-gutter-x:3rem}.g-lg-5,.gy-lg-5{--bs-gutter-y:3rem}}@media (min-width:1200px){.col-xl{flex:1 0 0%}.row-cols-xl-auto>*{flex:0 0 auto;width:auto}.row-cols-xl-1>*{flex:0 0 auto;width:100%}.row-cols-xl-2>*{flex:0 0 auto;width:50%}.row-cols-xl-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-xl-4>*{flex:0 0 auto;width:25%}.row-cols-xl-5>*{flex:0 0 auto;width:20%}.row-cols-xl-6>*{flex:0 0 auto;width:16.6666666667%}.col-xl-auto{flex:0 0 auto;width:auto}.col-xl-1{flex:0 0 auto;width:8.33333333%}.col-xl-2{flex:0 0 auto;width:16.66666667%}.col-xl-3{flex:0 0 auto;width:25%}.col-xl-4{flex:0 0 auto;width:33.33333333%}.col-xl-5{flex:0 0 auto;width:41.66666667%}.col-xl-6{flex:0 0 auto;width:50%}.col-xl-7{flex:0 0 auto;width:58.33333333%}.col-xl-8{flex:0 0 auto;width:66.66666667%}.col-xl-9{flex:0 0 auto;width:75%}.col-xl-10{flex:0 0 auto;width:83.33333333%}.col-xl-11{flex:0 0 auto;width:91.66666667%}.col-xl-12{flex:0 0 auto;width:100%}.offset-xl-0{margin-right:0}.offset-xl-1{margin-right:8.33333333%}.offset-xl-2{margin-right:16.66666667%}.offset-xl-3{margin-right:25%}.offset-xl-4{margin-right:33.33333333%}.offset-xl-5{margin-right:41.66666667%}.offset-xl-6{margin-right:50%}.offset-xl-7{margin-right:58.33333333%}.offset-xl-8{margin-right:66.66666667%}.offset-xl-9{margin-right:75%}.offset-xl-10{margin-right:83.33333333%}.offset-xl-11{margin-right:91.66666667%}.g-xl-0,.gx-xl-0{--bs-gutter-x:0}.g-xl-0,.gy-xl-0{--bs-gutter-y:0}.g-xl-1,.gx-xl-1{--bs-gutter-x:0.25rem}.g-xl-1,.gy-xl-1{--bs-gutter-y:0.25rem}.g-xl-2,.gx-xl-2{--bs-gutter-x:0.5rem}.g-xl-2,.gy-xl-2{--bs-gutter-y:0.5rem}.g-xl-3,.gx-xl-3{--bs-gutter-x:1rem}.g-xl-3,.gy-xl-3{--bs-gutter-y:1rem}.g-xl-4,.gx-xl-4{--bs-gutter-x:1.5rem}.g-xl-4,.gy-xl-4{--bs-gutter-y:1.5rem}.g-xl-5,.gx-xl-5{--bs-gutter-x:3rem}.g-xl-5,.gy-xl-5{--bs-gutter-y:3rem}}@media (min-width:1400px){.col-xxl{flex:1 0 0%}.row-cols-xxl-auto>*{flex:0 0 auto;width:auto}.row-cols-xxl-1>*{flex:0 0 auto;width:100%}.row-cols-xxl-2>*{flex:0 0 auto;width:50%}.row-cols-xxl-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-xxl-4>*{flex:0 0 auto;width:25%}.row-cols-xxl-5>*{flex:0 0 auto;width:20%}.row-cols-xxl-6>*{flex:0 0 auto;width:16.6666666667%}.col-xxl-auto{flex:0 0 auto;width:auto}.col-xxl-1{flex:0 0 auto;width:8.33333333%}.col-xxl-2{flex:0 0 auto;width:16.66666667%}.col-xxl-3{flex:0 0 auto;width:25%}.col-xxl-4{flex:0 0 auto;width:33.33333333%}.col-xxl-5{flex:0 0 auto;width:41.66666667%}.col-xxl-6{flex:0 0 auto;width:50%}.col-xxl-7{flex:0 0 auto;width:58.33333333%}.col-xxl-8{flex:0 0 auto;width:66.66666667%}.col-xxl-9{flex:0 0 auto;width:75%}.col-xxl-10{flex:0 0 auto;width:83.33333333%}.col-xxl-11{flex:0 0 auto;width:91.66666667%}.col-xxl-12{flex:0 0 auto;width:100%}.offset-xxl-0{margin-right:0}.offset-xxl-1{margin-right:8.33333333%}.offset-xxl-2{margin-right:16.66666667%}.offset-xxl-3{margin-right:25%}.offset-xxl-4{margin-right:33.33333333%}.offset-xxl-5{margin-right:41.66666667%}.offset-xxl-6{margin-right:50%}.offset-xxl-7{margin-right:58.33333333%}.offset-xxl-8{margin-right:66.66666667%}.offset-xxl-9{margin-right:75%}.offset-xxl-10{margin-right:83.33333333%}.offset-xxl-11{margin-right:91.66666667%}.g-xxl-0,.gx-xxl-0{--bs-gutter-x:0}.g-xxl-0,.gy-xxl-0{--bs-gutter-y:0}.g-xxl-1,.gx-xxl-1{--bs-gutter-x:0.25rem}.g-xxl-1,.gy-xxl-1{--bs-gutter-y:0.25rem}.g-xxl-2,.gx-xxl-2{--bs-gutter-x:0.5rem}.g-xxl-2,.gy-xxl-2{--bs-gutter-y:0.5rem}.g-xxl-3,.gx-xxl-3{--bs-gutter-x:1rem}.g-xxl-3,.gy-xxl-3{--bs-gutter-y:1rem}.g-xxl-4,.gx-xxl-4{--bs-gutter-x:1.5rem}.g-xxl-4,.gy-xxl-4{--bs-gutter-y:1.5rem}.g-xxl-5,.gx-xxl-5{--bs-gutter-x:3rem}.g-xxl-5,.gy-xxl-5{--bs-gutter-y:3rem}}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.d-block{display:block!important}.d-grid{display:grid!important}.d-table{display:table!important}.d-table-row{display:table-row!important}.d-table-cell{display:table-cell!important}.d-flex{display:flex!important}.d-inline-flex{display:inline-flex!important}.d-none{display:none!important}.flex-fill{flex:1 1 auto!important}.flex-row{flex-direction:row!important}.flex-column{flex-direction:column!important}.flex-row-reverse{flex-direction:row-reverse!important}.flex-column-reverse{flex-direction:column-reverse!important}.flex-grow-0{flex-grow:0!important}.flex-grow-1{flex-grow:1!important}.flex-shrink-0{flex-shrink:0!important}.flex-shrink-1{flex-shrink:1!important}.flex-wrap{flex-wrap:wrap!important}.flex-nowrap{flex-wrap:nowrap!important}.flex-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-start{justify-content:flex-start!important}.justify-content-end{justify-content:flex-end!important}.justify-content-center{justify-content:center!important}.justify-content-between{justify-content:space-between!important}.justify-content-around{justify-content:space-around!important}.justify-content-evenly{justify-content:space-evenly!important}.align-items-start{align-items:flex-start!important}.align-items-end{align-items:flex-end!important}.align-items-center{align-items:center!important}.align-items-baseline{align-items:baseline!important}.align-items-stretch{align-items:stretch!important}.align-content-start{align-content:flex-start!important}.align-content-end{align-content:flex-end!important}.align-content-center{align-content:center!important}.align-content-between{align-content:space-between!important}.align-content-around{align-content:space-around!important}.align-content-stretch{align-content:stretch!important}.align-self-auto{align-self:auto!important}.align-self-start{align-self:flex-start!important}.align-self-end{align-self:flex-end!important}.align-self-center{align-self:center!important}.align-self-baseline{align-self:baseline!important}.align-self-stretch{align-self:stretch!important}.order-first{order:-1!important}.order-0{order:0!important}.order-1{order:1!important}.order-2{order:2!important}.order-3{order:3!important}.order-4{order:4!important}.order-5{order:5!important}.order-last{order:6!important}.m-0{margin:0!important}.m-1{margin:.25rem!important}.m-2{margin:.5rem!important}.m-3{margin:1rem!important}.m-4{margin:1.5rem!important}.m-5{margin:3rem!important}.m-auto{margin:auto!important}.mx-0{margin-left:0!important;margin-right:0!important}.mx-1{margin-left:.25rem!important;margin-right:.25rem!important}.mx-2{margin-left:.5rem!important;margin-right:.5rem!important}.mx-3{margin-left:1rem!important;margin-right:1rem!important}.mx-4{margin-left:1.5rem!important;margin-right:1.5rem!important}.mx-5{margin-left:3rem!important;margin-right:3rem!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:1rem!important;margin-bottom:1rem!important}.my-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-0{margin-top:0!important}.mt-1{margin-top:.25rem!important}.mt-2{margin-top:.5rem!important}.mt-3{margin-top:1rem!important}.mt-4{margin-top:1.5rem!important}.mt-5{margin-top:3rem!important}.mt-auto{margin-top:auto!important}.me-0{margin-left:0!important}.me-1{margin-left:.25rem!important}.me-2{margin-left:.5rem!important}.me-3{margin-left:1rem!important}.me-4{margin-left:1.5rem!important}.me-5{margin-left:3rem!important}.me-auto{margin-left:auto!important}.mb-0{margin-bottom:0!important}.mb-1{margin-bottom:.25rem!important}.mb-2{margin-bottom:.5rem!important}.mb-3{margin-bottom:1rem!important}.mb-4{margin-bottom:1.5rem!important}.mb-5{margin-bottom:3rem!important}.mb-auto{margin-bottom:auto!important}.ms-0{margin-right:0!important}.ms-1{margin-right:.25rem!important}.ms-2{margin-right:.5rem!important}.ms-3{margin-right:1rem!important}.ms-4{margin-right:1.5rem!important}.ms-5{margin-right:3rem!important}.ms-auto{margin-right:auto!important}.p-0{padding:0!important}.p-1{padding:.25rem!important}.p-2{padding:.5rem!important}.p-3{padding:1rem!important}.p-4{padding:1.5rem!important}.p-5{padding:3rem!important}.px-0{padding-left:0!important;padding-right:0!important}.px-1{padding-left:.25rem!important;padding-right:.25rem!important}.px-2{padding-left:.5rem!important;padding-right:.5rem!important}.px-3{padding-left:1rem!important;padding-right:1rem!important}.px-4{padding-left:1.5rem!important;padding-right:1.5rem!important}.px-5{padding-left:3rem!important;padding-right:3rem!important}.py-0{padding-top:0!important;padding-bottom:0!important}.py-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-0{padding-top:0!important}.pt-1{padding-top:.25rem!important}.pt-2{padding-top:.5rem!important}.pt-3{padding-top:1rem!important}.pt-4{padding-top:1.5rem!important}.pt-5{padding-top:3rem!important}.pe-0{padding-left:0!important}.pe-1{padding-left:.25rem!important}.pe-2{padding-left:.5rem!important}.pe-3{padding-left:1rem!important}.pe-4{padding-left:1.5rem!important}.pe-5{padding-left:3rem!important}.pb-0{padding-bottom:0!important}.pb-1{padding-bottom:.25rem!important}.pb-2{padding-bottom:.5rem!important}.pb-3{padding-bottom:1rem!important}.pb-4{padding-bottom:1.5rem!important}.pb-5{padding-bottom:3rem!important}.ps-0{padding-right:0!important}.ps-1{padding-right:.25rem!important}.ps-2{padding-right:.5rem!important}.ps-3{padding-right:1rem!important}.ps-4{padding-right:1.5rem!important}.ps-5{padding-right:3rem!important}@media (min-width:576px){.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!important}.d-sm-grid{display:grid!important}.d-sm-table{display:table!important}.d-sm-table-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:flex!important}.d-sm-inline-flex{display:inline-flex!important}.d-sm-none{display:none!important}.flex-sm-fill{flex:1 1 auto!important}.flex-sm-row{flex-direction:row!important}.flex-sm-column{flex-direction:column!important}.flex-sm-row-reverse{flex-direction:row-reverse!important}.flex-sm-column-reverse{flex-direction:column-reverse!important}.flex-sm-grow-0{flex-grow:0!important}.flex-sm-grow-1{flex-grow:1!important}.flex-sm-shrink-0{flex-shrink:0!important}.flex-sm-shrink-1{flex-shrink:1!important}.flex-sm-wrap{flex-wrap:wrap!important}.flex-sm-nowrap{flex-wrap:nowrap!important}.flex-sm-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-sm-start{justify-content:flex-start!important}.justify-content-sm-end{justify-content:flex-end!important}.justify-content-sm-center{justify-content:center!important}.justify-content-sm-between{justify-content:space-between!important}.justify-content-sm-around{justify-content:space-around!important}.justify-content-sm-evenly{justify-content:space-evenly!important}.align-items-sm-start{align-items:flex-start!important}.align-items-sm-end{align-items:flex-end!important}.align-items-sm-center{align-items:center!important}.align-items-sm-baseline{align-items:baseline!important}.align-items-sm-stretch{align-items:stretch!important}.align-content-sm-start{align-content:flex-start!important}.align-content-sm-end{align-content:flex-end!important}.align-content-sm-center{align-content:center!important}.align-content-sm-between{align-content:space-between!important}.align-content-sm-around{align-content:space-around!important}.align-content-sm-stretch{align-content:stretch!important}.align-self-sm-auto{align-self:auto!important}.align-self-sm-start{align-self:flex-start!important}.align-self-sm-end{align-self:flex-end!important}.align-self-sm-center{align-self:center!important}.align-self-sm-baseline{align-self:baseline!important}.align-self-sm-stretch{align-self:stretch!important}.order-sm-first{order:-1!important}.order-sm-0{order:0!important}.order-sm-1{order:1!important}.order-sm-2{order:2!important}.order-sm-3{order:3!important}.order-sm-4{order:4!important}.order-sm-5{order:5!important}.order-sm-last{order:6!important}.m-sm-0{margin:0!important}.m-sm-1{margin:.25rem!important}.m-sm-2{margin:.5rem!important}.m-sm-3{margin:1rem!important}.m-sm-4{margin:1.5rem!important}.m-sm-5{margin:3rem!important}.m-sm-auto{margin:auto!important}.mx-sm-0{margin-left:0!important;margin-right:0!important}.mx-sm-1{margin-left:.25rem!important;margin-right:.25rem!important}.mx-sm-2{margin-left:.5rem!important;margin-right:.5rem!important}.mx-sm-3{margin-left:1rem!important;margin-right:1rem!important}.mx-sm-4{margin-left:1.5rem!important;margin-right:1.5rem!important}.mx-sm-5{margin-left:3rem!important;margin-right:3rem!important}.mx-sm-auto{margin-left:auto!important;margin-right:auto!important}.my-sm-0{margin-top:0!important;margin-bottom:0!important}.my-sm-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-sm-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-sm-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-sm-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-sm-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-sm-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-sm-0{margin-top:0!important}.mt-sm-1{margin-top:.25rem!important}.mt-sm-2{margin-top:.5rem!important}.mt-sm-3{margin-top:1rem!important}.mt-sm-4{margin-top:1.5rem!important}.mt-sm-5{margin-top:3rem!important}.mt-sm-auto{margin-top:auto!important}.me-sm-0{margin-left:0!important}.me-sm-1{margin-left:.25rem!important}.me-sm-2{margin-left:.5rem!important}.me-sm-3{margin-left:1rem!important}.me-sm-4{margin-left:1.5rem!important}.me-sm-5{margin-left:3rem!important}.me-sm-auto{margin-left:auto!important}.mb-sm-0{margin-bottom:0!important}.mb-sm-1{margin-bottom:.25rem!important}.mb-sm-2{margin-bottom:.5rem!important}.mb-sm-3{margin-bottom:1rem!important}.mb-sm-4{margin-bottom:1.5rem!important}.mb-sm-5{margin-bottom:3rem!important}.mb-sm-auto{margin-bottom:auto!important}.ms-sm-0{margin-right:0!important}.ms-sm-1{margin-right:.25rem!important}.ms-sm-2{margin-right:.5rem!important}.ms-sm-3{margin-right:1rem!important}.ms-sm-4{margin-right:1.5rem!important}.ms-sm-5{margin-right:3rem!important}.ms-sm-auto{margin-right:auto!important}.p-sm-0{padding:0!important}.p-sm-1{padding:.25rem!important}.p-sm-2{padding:.5rem!important}.p-sm-3{padding:1rem!important}.p-sm-4{padding:1.5rem!important}.p-sm-5{padding:3rem!important}.px-sm-0{padding-left:0!important;padding-right:0!important}.px-sm-1{padding-left:.25rem!important;padding-right:.25rem!important}.px-sm-2{padding-left:.5rem!important;padding-right:.5rem!important}.px-sm-3{padding-left:1rem!important;padding-right:1rem!important}.px-sm-4{padding-left:1.5rem!important;padding-right:1.5rem!important}.px-sm-5{padding-left:3rem!important;padding-right:3rem!important}.py-sm-0{padding-top:0!important;padding-bottom:0!important}.py-sm-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-sm-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-sm-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-sm-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-sm-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-sm-0{padding-top:0!important}.pt-sm-1{padding-top:.25rem!important}.pt-sm-2{padding-top:.5rem!important}.pt-sm-3{padding-top:1rem!important}.pt-sm-4{padding-top:1.5rem!important}.pt-sm-5{padding-top:3rem!important}.pe-sm-0{padding-left:0!important}.pe-sm-1{padding-left:.25rem!important}.pe-sm-2{padding-left:.5rem!important}.pe-sm-3{padding-left:1rem!important}.pe-sm-4{padding-left:1.5rem!important}.pe-sm-5{padding-left:3rem!important}.pb-sm-0{padding-bottom:0!important}.pb-sm-1{padding-bottom:.25rem!important}.pb-sm-2{padding-bottom:.5rem!important}.pb-sm-3{padding-bottom:1rem!important}.pb-sm-4{padding-bottom:1.5rem!important}.pb-sm-5{padding-bottom:3rem!important}.ps-sm-0{padding-right:0!important}.ps-sm-1{padding-right:.25rem!important}.ps-sm-2{padding-right:.5rem!important}.ps-sm-3{padding-right:1rem!important}.ps-sm-4{padding-right:1.5rem!important}.ps-sm-5{padding-right:3rem!important}}@media (min-width:768px){.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!important}.d-md-grid{display:grid!important}.d-md-table{display:table!important}.d-md-table-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:flex!important}.d-md-inline-flex{display:inline-flex!important}.d-md-none{display:none!important}.flex-md-fill{flex:1 1 auto!important}.flex-md-row{flex-direction:row!important}.flex-md-column{flex-direction:column!important}.flex-md-row-reverse{flex-direction:row-reverse!important}.flex-md-column-reverse{flex-direction:column-reverse!important}.flex-md-grow-0{flex-grow:0!important}.flex-md-grow-1{flex-grow:1!important}.flex-md-shrink-0{flex-shrink:0!important}.flex-md-shrink-1{flex-shrink:1!important}.flex-md-wrap{flex-wrap:wrap!important}.flex-md-nowrap{flex-wrap:nowrap!important}.flex-md-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-md-start{justify-content:flex-start!important}.justify-content-md-end{justify-content:flex-end!important}.justify-content-md-center{justify-content:center!important}.justify-content-md-between{justify-content:space-between!important}.justify-content-md-around{justify-content:space-around!important}.justify-content-md-evenly{justify-content:space-evenly!important}.align-items-md-start{align-items:flex-start!important}.align-items-md-end{align-items:flex-end!important}.align-items-md-center{align-items:center!important}.align-items-md-baseline{align-items:baseline!important}.align-items-md-stretch{align-items:stretch!important}.align-content-md-start{align-content:flex-start!important}.align-content-md-end{align-content:flex-end!important}.align-content-md-center{align-content:center!important}.align-content-md-between{align-content:space-between!important}.align-content-md-around{align-content:space-around!important}.align-content-md-stretch{align-content:stretch!important}.align-self-md-auto{align-self:auto!important}.align-self-md-start{align-self:flex-start!important}.align-self-md-end{align-self:flex-end!important}.align-self-md-center{align-self:center!important}.align-self-md-baseline{align-self:baseline!important}.align-self-md-stretch{align-self:stretch!important}.order-md-first{order:-1!important}.order-md-0{order:0!important}.order-md-1{order:1!important}.order-md-2{order:2!important}.order-md-3{order:3!important}.order-md-4{order:4!important}.order-md-5{order:5!important}.order-md-last{order:6!important}.m-md-0{margin:0!important}.m-md-1{margin:.25rem!important}.m-md-2{margin:.5rem!important}.m-md-3{margin:1rem!important}.m-md-4{margin:1.5rem!important}.m-md-5{margin:3rem!important}.m-md-auto{margin:auto!important}.mx-md-0{margin-left:0!important;margin-right:0!important}.mx-md-1{margin-left:.25rem!important;margin-right:.25rem!important}.mx-md-2{margin-left:.5rem!important;margin-right:.5rem!important}.mx-md-3{margin-left:1rem!important;margin-right:1rem!important}.mx-md-4{margin-left:1.5rem!important;margin-right:1.5rem!important}.mx-md-5{margin-left:3rem!important;margin-right:3rem!important}.mx-md-auto{margin-left:auto!important;margin-right:auto!important}.my-md-0{margin-top:0!important;margin-bottom:0!important}.my-md-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-md-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-md-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-md-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-md-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-md-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-md-0{margin-top:0!important}.mt-md-1{margin-top:.25rem!important}.mt-md-2{margin-top:.5rem!important}.mt-md-3{margin-top:1rem!important}.mt-md-4{margin-top:1.5rem!important}.mt-md-5{margin-top:3rem!important}.mt-md-auto{margin-top:auto!important}.me-md-0{margin-left:0!important}.me-md-1{margin-left:.25rem!important}.me-md-2{margin-left:.5rem!important}.me-md-3{margin-left:1rem!important}.me-md-4{margin-left:1.5rem!important}.me-md-5{margin-left:3rem!important}.me-md-auto{margin-left:auto!important}.mb-md-0{margin-bottom:0!important}.mb-md-1{margin-bottom:.25rem!important}.mb-md-2{margin-bottom:.5rem!important}.mb-md-3{margin-bottom:1rem!important}.mb-md-4{margin-bottom:1.5rem!important}.mb-md-5{margin-bottom:3rem!important}.mb-md-auto{margin-bottom:auto!important}.ms-md-0{margin-right:0!important}.ms-md-1{margin-right:.25rem!important}.ms-md-2{margin-right:.5rem!important}.ms-md-3{margin-right:1rem!important}.ms-md-4{margin-right:1.5rem!important}.ms-md-5{margin-right:3rem!important}.ms-md-auto{margin-right:auto!important}.p-md-0{padding:0!important}.p-md-1{padding:.25rem!important}.p-md-2{padding:.5rem!important}.p-md-3{padding:1rem!important}.p-md-4{padding:1.5rem!important}.p-md-5{padding:3rem!important}.px-md-0{padding-left:0!important;padding-right:0!important}.px-md-1{padding-left:.25rem!important;padding-right:.25rem!important}.px-md-2{padding-left:.5rem!important;padding-right:.5rem!important}.px-md-3{padding-left:1rem!important;padding-right:1rem!important}.px-md-4{padding-left:1.5rem!important;padding-right:1.5rem!important}.px-md-5{padding-left:3rem!important;padding-right:3rem!important}.py-md-0{padding-top:0!important;padding-bottom:0!important}.py-md-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-md-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-md-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-md-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-md-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-md-0{padding-top:0!important}.pt-md-1{padding-top:.25rem!important}.pt-md-2{padding-top:.5rem!important}.pt-md-3{padding-top:1rem!important}.pt-md-4{padding-top:1.5rem!important}.pt-md-5{padding-top:3rem!important}.pe-md-0{padding-left:0!important}.pe-md-1{padding-left:.25rem!important}.pe-md-2{padding-left:.5rem!important}.pe-md-3{padding-left:1rem!important}.pe-md-4{padding-left:1.5rem!important}.pe-md-5{padding-left:3rem!important}.pb-md-0{padding-bottom:0!important}.pb-md-1{padding-bottom:.25rem!important}.pb-md-2{padding-bottom:.5rem!important}.pb-md-3{padding-bottom:1rem!important}.pb-md-4{padding-bottom:1.5rem!important}.pb-md-5{padding-bottom:3rem!important}.ps-md-0{padding-right:0!important}.ps-md-1{padding-right:.25rem!important}.ps-md-2{padding-right:.5rem!important}.ps-md-3{padding-right:1rem!important}.ps-md-4{padding-right:1.5rem!important}.ps-md-5{padding-right:3rem!important}}@media (min-width:992px){.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!important}.d-lg-grid{display:grid!important}.d-lg-table{display:table!important}.d-lg-table-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:flex!important}.d-lg-inline-flex{display:inline-flex!important}.d-lg-none{display:none!important}.flex-lg-fill{flex:1 1 auto!important}.flex-lg-row{flex-direction:row!important}.flex-lg-column{flex-direction:column!important}.flex-lg-row-reverse{flex-direction:row-reverse!important}.flex-lg-column-reverse{flex-direction:column-reverse!important}.flex-lg-grow-0{flex-grow:0!important}.flex-lg-grow-1{flex-grow:1!important}.flex-lg-shrink-0{flex-shrink:0!important}.flex-lg-shrink-1{flex-shrink:1!important}.flex-lg-wrap{flex-wrap:wrap!important}.flex-lg-nowrap{flex-wrap:nowrap!important}.flex-lg-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-lg-start{justify-content:flex-start!important}.justify-content-lg-end{justify-content:flex-end!important}.justify-content-lg-center{justify-content:center!important}.justify-content-lg-between{justify-content:space-between!important}.justify-content-lg-around{justify-content:space-around!important}.justify-content-lg-evenly{justify-content:space-evenly!important}.align-items-lg-start{align-items:flex-start!important}.align-items-lg-end{align-items:flex-end!important}.align-items-lg-center{align-items:center!important}.align-items-lg-baseline{align-items:baseline!important}.align-items-lg-stretch{align-items:stretch!important}.align-content-lg-start{align-content:flex-start!important}.align-content-lg-end{align-content:flex-end!important}.align-content-lg-center{align-content:center!important}.align-content-lg-between{align-content:space-between!important}.align-content-lg-around{align-content:space-around!important}.align-content-lg-stretch{align-content:stretch!important}.align-self-lg-auto{align-self:auto!important}.align-self-lg-start{align-self:flex-start!important}.align-self-lg-end{align-self:flex-end!important}.align-self-lg-center{align-self:center!important}.align-self-lg-baseline{align-self:baseline!important}.align-self-lg-stretch{align-self:stretch!important}.order-lg-first{order:-1!important}.order-lg-0{order:0!important}.order-lg-1{order:1!important}.order-lg-2{order:2!important}.order-lg-3{order:3!important}.order-lg-4{order:4!important}.order-lg-5{order:5!important}.order-lg-last{order:6!important}.m-lg-0{margin:0!important}.m-lg-1{margin:.25rem!important}.m-lg-2{margin:.5rem!important}.m-lg-3{margin:1rem!important}.m-lg-4{margin:1.5rem!important}.m-lg-5{margin:3rem!important}.m-lg-auto{margin:auto!important}.mx-lg-0{margin-left:0!important;margin-right:0!important}.mx-lg-1{margin-left:.25rem!important;margin-right:.25rem!important}.mx-lg-2{margin-left:.5rem!important;margin-right:.5rem!important}.mx-lg-3{margin-left:1rem!important;margin-right:1rem!important}.mx-lg-4{margin-left:1.5rem!important;margin-right:1.5rem!important}.mx-lg-5{margin-left:3rem!important;margin-right:3rem!important}.mx-lg-auto{margin-left:auto!important;margin-right:auto!important}.my-lg-0{margin-top:0!important;margin-bottom:0!important}.my-lg-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-lg-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-lg-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-lg-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-lg-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-lg-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-lg-0{margin-top:0!important}.mt-lg-1{margin-top:.25rem!important}.mt-lg-2{margin-top:.5rem!important}.mt-lg-3{margin-top:1rem!important}.mt-lg-4{margin-top:1.5rem!important}.mt-lg-5{margin-top:3rem!important}.mt-lg-auto{margin-top:auto!important}.me-lg-0{margin-left:0!important}.me-lg-1{margin-left:.25rem!important}.me-lg-2{margin-left:.5rem!important}.me-lg-3{margin-left:1rem!important}.me-lg-4{margin-left:1.5rem!important}.me-lg-5{margin-left:3rem!important}.me-lg-auto{margin-left:auto!important}.mb-lg-0{margin-bottom:0!important}.mb-lg-1{margin-bottom:.25rem!important}.mb-lg-2{margin-bottom:.5rem!important}.mb-lg-3{margin-bottom:1rem!important}.mb-lg-4{margin-bottom:1.5rem!important}.mb-lg-5{margin-bottom:3rem!important}.mb-lg-auto{margin-bottom:auto!important}.ms-lg-0{margin-right:0!important}.ms-lg-1{margin-right:.25rem!important}.ms-lg-2{margin-right:.5rem!important}.ms-lg-3{margin-right:1rem!important}.ms-lg-4{margin-right:1.5rem!important}.ms-lg-5{margin-right:3rem!important}.ms-lg-auto{margin-right:auto!important}.p-lg-0{padding:0!important}.p-lg-1{padding:.25rem!important}.p-lg-2{padding:.5rem!important}.p-lg-3{padding:1rem!important}.p-lg-4{padding:1.5rem!important}.p-lg-5{padding:3rem!important}.px-lg-0{padding-left:0!important;padding-right:0!important}.px-lg-1{padding-left:.25rem!important;padding-right:.25rem!important}.px-lg-2{padding-left:.5rem!important;padding-right:.5rem!important}.px-lg-3{padding-left:1rem!important;padding-right:1rem!important}.px-lg-4{padding-left:1.5rem!important;padding-right:1.5rem!important}.px-lg-5{padding-left:3rem!important;padding-right:3rem!important}.py-lg-0{padding-top:0!important;padding-bottom:0!important}.py-lg-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-lg-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-lg-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-lg-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-lg-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-lg-0{padding-top:0!important}.pt-lg-1{padding-top:.25rem!important}.pt-lg-2{padding-top:.5rem!important}.pt-lg-3{padding-top:1rem!important}.pt-lg-4{padding-top:1.5rem!important}.pt-lg-5{padding-top:3rem!important}.pe-lg-0{padding-left:0!important}.pe-lg-1{padding-left:.25rem!important}.pe-lg-2{padding-left:.5rem!important}.pe-lg-3{padding-left:1rem!important}.pe-lg-4{padding-left:1.5rem!important}.pe-lg-5{padding-left:3rem!important}.pb-lg-0{padding-bottom:0!important}.pb-lg-1{padding-bottom:.25rem!important}.pb-lg-2{padding-bottom:.5rem!important}.pb-lg-3{padding-bottom:1rem!important}.pb-lg-4{padding-bottom:1.5rem!important}.pb-lg-5{padding-bottom:3rem!important}.ps-lg-0{padding-right:0!important}.ps-lg-1{padding-right:.25rem!important}.ps-lg-2{padding-right:.5rem!important}.ps-lg-3{padding-right:1rem!important}.ps-lg-4{padding-right:1.5rem!important}.ps-lg-5{padding-right:3rem!important}}@media (min-width:1200px){.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!important}.d-xl-grid{display:grid!important}.d-xl-table{display:table!important}.d-xl-table-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:flex!important}.d-xl-inline-flex{display:inline-flex!important}.d-xl-none{display:none!important}.flex-xl-fill{flex:1 1 auto!important}.flex-xl-row{flex-direction:row!important}.flex-xl-column{flex-direction:column!important}.flex-xl-row-reverse{flex-direction:row-reverse!important}.flex-xl-column-reverse{flex-direction:column-reverse!important}.flex-xl-grow-0{flex-grow:0!important}.flex-xl-grow-1{flex-grow:1!important}.flex-xl-shrink-0{flex-shrink:0!important}.flex-xl-shrink-1{flex-shrink:1!important}.flex-xl-wrap{flex-wrap:wrap!important}.flex-xl-nowrap{flex-wrap:nowrap!important}.flex-xl-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-xl-start{justify-content:flex-start!important}.justify-content-xl-end{justify-content:flex-end!important}.justify-content-xl-center{justify-content:center!important}.justify-content-xl-between{justify-content:space-between!important}.justify-content-xl-around{justify-content:space-around!important}.justify-content-xl-evenly{justify-content:space-evenly!important}.align-items-xl-start{align-items:flex-start!important}.align-items-xl-end{align-items:flex-end!important}.align-items-xl-center{align-items:center!important}.align-items-xl-baseline{align-items:baseline!important}.align-items-xl-stretch{align-items:stretch!important}.align-content-xl-start{align-content:flex-start!important}.align-content-xl-end{align-content:flex-end!important}.align-content-xl-center{align-content:center!important}.align-content-xl-between{align-content:space-between!important}.align-content-xl-around{align-content:space-around!important}.align-content-xl-stretch{align-content:stretch!important}.align-self-xl-auto{align-self:auto!important}.align-self-xl-start{align-self:flex-start!important}.align-self-xl-end{align-self:flex-end!important}.align-self-xl-center{align-self:center!important}.align-self-xl-baseline{align-self:baseline!important}.align-self-xl-stretch{align-self:stretch!important}.order-xl-first{order:-1!important}.order-xl-0{order:0!important}.order-xl-1{order:1!important}.order-xl-2{order:2!important}.order-xl-3{order:3!important}.order-xl-4{order:4!important}.order-xl-5{order:5!important}.order-xl-last{order:6!important}.m-xl-0{margin:0!important}.m-xl-1{margin:.25rem!important}.m-xl-2{margin:.5rem!important}.m-xl-3{margin:1rem!important}.m-xl-4{margin:1.5rem!important}.m-xl-5{margin:3rem!important}.m-xl-auto{margin:auto!important}.mx-xl-0{margin-left:0!important;margin-right:0!important}.mx-xl-1{margin-left:.25rem!important;margin-right:.25rem!important}.mx-xl-2{margin-left:.5rem!important;margin-right:.5rem!important}.mx-xl-3{margin-left:1rem!important;margin-right:1rem!important}.mx-xl-4{margin-left:1.5rem!important;margin-right:1.5rem!important}.mx-xl-5{margin-left:3rem!important;margin-right:3rem!important}.mx-xl-auto{margin-left:auto!important;margin-right:auto!important}.my-xl-0{margin-top:0!important;margin-bottom:0!important}.my-xl-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-xl-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-xl-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-xl-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-xl-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-xl-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-xl-0{margin-top:0!important}.mt-xl-1{margin-top:.25rem!important}.mt-xl-2{margin-top:.5rem!important}.mt-xl-3{margin-top:1rem!important}.mt-xl-4{margin-top:1.5rem!important}.mt-xl-5{margin-top:3rem!important}.mt-xl-auto{margin-top:auto!important}.me-xl-0{margin-left:0!important}.me-xl-1{margin-left:.25rem!important}.me-xl-2{margin-left:.5rem!important}.me-xl-3{margin-left:1rem!important}.me-xl-4{margin-left:1.5rem!important}.me-xl-5{margin-left:3rem!important}.me-xl-auto{margin-left:auto!important}.mb-xl-0{margin-bottom:0!important}.mb-xl-1{margin-bottom:.25rem!important}.mb-xl-2{margin-bottom:.5rem!important}.mb-xl-3{margin-bottom:1rem!important}.mb-xl-4{margin-bottom:1.5rem!important}.mb-xl-5{margin-bottom:3rem!important}.mb-xl-auto{margin-bottom:auto!important}.ms-xl-0{margin-right:0!important}.ms-xl-1{margin-right:.25rem!important}.ms-xl-2{margin-right:.5rem!important}.ms-xl-3{margin-right:1rem!important}.ms-xl-4{margin-right:1.5rem!important}.ms-xl-5{margin-right:3rem!important}.ms-xl-auto{margin-right:auto!important}.p-xl-0{padding:0!important}.p-xl-1{padding:.25rem!important}.p-xl-2{padding:.5rem!important}.p-xl-3{padding:1rem!important}.p-xl-4{padding:1.5rem!important}.p-xl-5{padding:3rem!important}.px-xl-0{padding-left:0!important;padding-right:0!important}.px-xl-1{padding-left:.25rem!important;padding-right:.25rem!important}.px-xl-2{padding-left:.5rem!important;padding-right:.5rem!important}.px-xl-3{padding-left:1rem!important;padding-right:1rem!important}.px-xl-4{padding-left:1.5rem!important;padding-right:1.5rem!important}.px-xl-5{padding-left:3rem!important;padding-right:3rem!important}.py-xl-0{padding-top:0!important;padding-bottom:0!important}.py-xl-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-xl-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-xl-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-xl-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-xl-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-xl-0{padding-top:0!important}.pt-xl-1{padding-top:.25rem!important}.pt-xl-2{padding-top:.5rem!important}.pt-xl-3{padding-top:1rem!important}.pt-xl-4{padding-top:1.5rem!important}.pt-xl-5{padding-top:3rem!important}.pe-xl-0{padding-left:0!important}.pe-xl-1{padding-left:.25rem!important}.pe-xl-2{padding-left:.5rem!important}.pe-xl-3{padding-left:1rem!important}.pe-xl-4{padding-left:1.5rem!important}.pe-xl-5{padding-left:3rem!important}.pb-xl-0{padding-bottom:0!important}.pb-xl-1{padding-bottom:.25rem!important}.pb-xl-2{padding-bottom:.5rem!important}.pb-xl-3{padding-bottom:1rem!important}.pb-xl-4{padding-bottom:1.5rem!important}.pb-xl-5{padding-bottom:3rem!important}.ps-xl-0{padding-right:0!important}.ps-xl-1{padding-right:.25rem!important}.ps-xl-2{padding-right:.5rem!important}.ps-xl-3{padding-right:1rem!important}.ps-xl-4{padding-right:1.5rem!important}.ps-xl-5{padding-right:3rem!important}}@media (min-width:1400px){.d-xxl-inline{display:inline!important}.d-xxl-inline-block{display:inline-block!important}.d-xxl-block{display:block!important}.d-xxl-grid{display:grid!important}.d-xxl-table{display:table!important}.d-xxl-table-row{display:table-row!important}.d-xxl-table-cell{display:table-cell!important}.d-xxl-flex{display:flex!important}.d-xxl-inline-flex{display:inline-flex!important}.d-xxl-none{display:none!important}.flex-xxl-fill{flex:1 1 auto!important}.flex-xxl-row{flex-direction:row!important}.flex-xxl-column{flex-direction:column!important}.flex-xxl-row-reverse{flex-direction:row-reverse!important}.flex-xxl-column-reverse{flex-direction:column-reverse!important}.flex-xxl-grow-0{flex-grow:0!important}.flex-xxl-grow-1{flex-grow:1!important}.flex-xxl-shrink-0{flex-shrink:0!important}.flex-xxl-shrink-1{flex-shrink:1!important}.flex-xxl-wrap{flex-wrap:wrap!important}.flex-xxl-nowrap{flex-wrap:nowrap!important}.flex-xxl-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-xxl-start{justify-content:flex-start!important}.justify-content-xxl-end{justify-content:flex-end!important}.justify-content-xxl-center{justify-content:center!important}.justify-content-xxl-between{justify-content:space-between!important}.justify-content-xxl-around{justify-content:space-around!important}.justify-content-xxl-evenly{justify-content:space-evenly!important}.align-items-xxl-start{align-items:flex-start!important}.align-items-xxl-end{align-items:flex-end!important}.align-items-xxl-center{align-items:center!important}.align-items-xxl-baseline{align-items:baseline!important}.align-items-xxl-stretch{align-items:stretch!important}.align-content-xxl-start{align-content:flex-start!important}.align-content-xxl-end{align-content:flex-end!important}.align-content-xxl-center{align-content:center!important}.align-content-xxl-between{align-content:space-between!important}.align-content-xxl-around{align-content:space-around!important}.align-content-xxl-stretch{align-content:stretch!important}.align-self-xxl-auto{align-self:auto!important}.align-self-xxl-start{align-self:flex-start!important}.align-self-xxl-end{align-self:flex-end!important}.align-self-xxl-center{align-self:center!important}.align-self-xxl-baseline{align-self:baseline!important}.align-self-xxl-stretch{align-self:stretch!important}.order-xxl-first{order:-1!important}.order-xxl-0{order:0!important}.order-xxl-1{order:1!important}.order-xxl-2{order:2!important}.order-xxl-3{order:3!important}.order-xxl-4{order:4!important}.order-xxl-5{order:5!important}.order-xxl-last{order:6!important}.m-xxl-0{margin:0!important}.m-xxl-1{margin:.25rem!important}.m-xxl-2{margin:.5rem!important}.m-xxl-3{margin:1rem!important}.m-xxl-4{margin:1.5rem!important}.m-xxl-5{margin:3rem!important}.m-xxl-auto{margin:auto!important}.mx-xxl-0{margin-left:0!important;margin-right:0!important}.mx-xxl-1{margin-left:.25rem!important;margin-right:.25rem!important}.mx-xxl-2{margin-left:.5rem!important;margin-right:.5rem!important}.mx-xxl-3{margin-left:1rem!important;margin-right:1rem!important}.mx-xxl-4{margin-left:1.5rem!important;margin-right:1.5rem!important}.mx-xxl-5{margin-left:3rem!important;margin-right:3rem!important}.mx-xxl-auto{margin-left:auto!important;margin-right:auto!important}.my-xxl-0{margin-top:0!important;margin-bottom:0!important}.my-xxl-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-xxl-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-xxl-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-xxl-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-xxl-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-xxl-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-xxl-0{margin-top:0!important}.mt-xxl-1{margin-top:.25rem!important}.mt-xxl-2{margin-top:.5rem!important}.mt-xxl-3{margin-top:1rem!important}.mt-xxl-4{margin-top:1.5rem!important}.mt-xxl-5{margin-top:3rem!important}.mt-xxl-auto{margin-top:auto!important}.me-xxl-0{margin-left:0!important}.me-xxl-1{margin-left:.25rem!important}.me-xxl-2{margin-left:.5rem!important}.me-xxl-3{margin-left:1rem!important}.me-xxl-4{margin-left:1.5rem!important}.me-xxl-5{margin-left:3rem!important}.me-xxl-auto{margin-left:auto!important}.mb-xxl-0{margin-bottom:0!important}.mb-xxl-1{margin-bottom:.25rem!important}.mb-xxl-2{margin-bottom:.5rem!important}.mb-xxl-3{margin-bottom:1rem!important}.mb-xxl-4{margin-bottom:1.5rem!important}.mb-xxl-5{margin-bottom:3rem!important}.mb-xxl-auto{margin-bottom:auto!important}.ms-xxl-0{margin-right:0!important}.ms-xxl-1{margin-right:.25rem!important}.ms-xxl-2{margin-right:.5rem!important}.ms-xxl-3{margin-right:1rem!important}.ms-xxl-4{margin-right:1.5rem!important}.ms-xxl-5{margin-right:3rem!important}.ms-xxl-auto{margin-right:auto!important}.p-xxl-0{padding:0!important}.p-xxl-1{padding:.25rem!important}.p-xxl-2{padding:.5rem!important}.p-xxl-3{padding:1rem!important}.p-xxl-4{padding:1.5rem!important}.p-xxl-5{padding:3rem!important}.px-xxl-0{padding-left:0!important;padding-right:0!important}.px-xxl-1{padding-left:.25rem!important;padding-right:.25rem!important}.px-xxl-2{padding-left:.5rem!important;padding-right:.5rem!important}.px-xxl-3{padding-left:1rem!important;padding-right:1rem!important}.px-xxl-4{padding-left:1.5rem!important;padding-right:1.5rem!important}.px-xxl-5{padding-left:3rem!important;padding-right:3rem!important}.py-xxl-0{padding-top:0!important;padding-bottom:0!important}.py-xxl-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-xxl-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-xxl-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-xxl-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-xxl-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-xxl-0{padding-top:0!important}.pt-xxl-1{padding-top:.25rem!important}.pt-xxl-2{padding-top:.5rem!important}.pt-xxl-3{padding-top:1rem!important}.pt-xxl-4{padding-top:1.5rem!important}.pt-xxl-5{padding-top:3rem!important}.pe-xxl-0{padding-left:0!important}.pe-xxl-1{padding-left:.25rem!important}.pe-xxl-2{padding-left:.5rem!important}.pe-xxl-3{padding-left:1rem!important}.pe-xxl-4{padding-left:1.5rem!important}.pe-xxl-5{padding-left:3rem!important}.pb-xxl-0{padding-bottom:0!important}.pb-xxl-1{padding-bottom:.25rem!important}.pb-xxl-2{padding-bottom:.5rem!important}.pb-xxl-3{padding-bottom:1rem!important}.pb-xxl-4{padding-bottom:1.5rem!important}.pb-xxl-5{padding-bottom:3rem!important}.ps-xxl-0{padding-right:0!important}.ps-xxl-1{padding-right:.25rem!important}.ps-xxl-2{padding-right:.5rem!important}.ps-xxl-3{padding-right:1rem!important}.ps-xxl-4{padding-right:1.5rem!important}.ps-xxl-5{padding-right:3rem!important}}@media print{.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!important}.d-print-grid{display:grid!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:flex!important}.d-print-inline-flex{display:inline-flex!important}.d-print-none{display:none!important}} +/*# sourceMappingURL=bootstrap-grid.rtl.min.css.map */ \ No newline at end of file diff --git a/samples/web-app-file-storage/src/static/bootstrap/css/bootstrap-grid.rtl.min.css.map b/samples/web-app-file-storage/src/static/bootstrap/css/bootstrap-grid.rtl.min.css.map new file mode 100644 index 0000000..fbf1d00 --- /dev/null +++ b/samples/web-app-file-storage/src/static/bootstrap/css/bootstrap-grid.rtl.min.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["../../scss/bootstrap-grid.scss","../../scss/_root.scss","../../scss/_containers.scss","dist/css/bootstrap-grid.rtl.css","../../scss/mixins/_container.scss","../../scss/mixins/_breakpoints.scss","../../scss/_grid.scss","../../scss/mixins/_grid.scss","../../scss/mixins/_utilities.scss","../../scss/utilities/_api.scss"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Bootstrap Grid v5.1.3 (https://getbootstrap.com/)\n * Copyright 2011-2021 The Bootstrap Authors\n * Copyright 2011-2021 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n\n$include-column-box-sizing: true !default;\n\n@import \"functions\";\n@import \"variables\";\n\n@import \"mixins/lists\";\n@import \"mixins/breakpoints\";\n@import \"mixins/container\";\n@import \"mixins/grid\";\n@import \"mixins/utilities\";\n\n@import \"vendor/rfs\";\n\n@import \"root\";\n\n@import \"containers\";\n@import \"grid\";\n\n@import \"utilities\";\n// Only use the utilities we need\n// stylelint-disable-next-line scss/dollar-variable-default\n$utilities: map-get-multiple(\n $utilities,\n (\n \"display\",\n \"order\",\n \"flex\",\n \"flex-direction\",\n \"flex-grow\",\n \"flex-shrink\",\n \"flex-wrap\",\n \"justify-content\",\n \"align-items\",\n \"align-content\",\n \"align-self\",\n \"margin\",\n \"margin-x\",\n \"margin-y\",\n \"margin-top\",\n \"margin-end\",\n \"margin-bottom\",\n \"margin-start\",\n \"negative-margin\",\n \"negative-margin-x\",\n \"negative-margin-y\",\n \"negative-margin-top\",\n \"negative-margin-end\",\n \"negative-margin-bottom\",\n \"negative-margin-start\",\n \"padding\",\n \"padding-x\",\n \"padding-y\",\n \"padding-top\",\n \"padding-end\",\n \"padding-bottom\",\n \"padding-start\",\n )\n);\n\n@import \"utilities/api\";\n",":root {\n // Note: Custom variable values only support SassScript inside `#{}`.\n\n // Colors\n //\n // Generate palettes for full colors, grays, and theme colors.\n\n @each $color, $value in $colors {\n --#{$variable-prefix}#{$color}: #{$value};\n }\n\n @each $color, $value in $grays {\n --#{$variable-prefix}gray-#{$color}: #{$value};\n }\n\n @each $color, $value in $theme-colors {\n --#{$variable-prefix}#{$color}: #{$value};\n }\n\n @each $color, $value in $theme-colors-rgb {\n --#{$variable-prefix}#{$color}-rgb: #{$value};\n }\n\n --#{$variable-prefix}white-rgb: #{to-rgb($white)};\n --#{$variable-prefix}black-rgb: #{to-rgb($black)};\n --#{$variable-prefix}body-color-rgb: #{to-rgb($body-color)};\n --#{$variable-prefix}body-bg-rgb: #{to-rgb($body-bg)};\n\n // Fonts\n\n // Note: Use `inspect` for lists so that quoted items keep the quotes.\n // See https://github.com/sass/sass/issues/2383#issuecomment-336349172\n --#{$variable-prefix}font-sans-serif: #{inspect($font-family-sans-serif)};\n --#{$variable-prefix}font-monospace: #{inspect($font-family-monospace)};\n --#{$variable-prefix}gradient: #{$gradient};\n\n // Root and body\n // stylelint-disable custom-property-empty-line-before\n // scss-docs-start root-body-variables\n @if $font-size-root != null {\n --#{$variable-prefix}root-font-size: #{$font-size-root};\n }\n --#{$variable-prefix}body-font-family: #{$font-family-base};\n --#{$variable-prefix}body-font-size: #{$font-size-base};\n --#{$variable-prefix}body-font-weight: #{$font-weight-base};\n --#{$variable-prefix}body-line-height: #{$line-height-base};\n --#{$variable-prefix}body-color: #{$body-color};\n @if $body-text-align != null {\n --#{$variable-prefix}body-text-align: #{$body-text-align};\n }\n --#{$variable-prefix}body-bg: #{$body-bg};\n // scss-docs-end root-body-variables\n // stylelint-enable custom-property-empty-line-before\n}\n","// Container widths\n//\n// Set the container width, and override it for fixed navbars in media queries.\n\n@if $enable-grid-classes {\n // Single container class with breakpoint max-widths\n .container,\n // 100% wide container at all breakpoints\n .container-fluid {\n @include make-container();\n }\n\n // Responsive containers that are 100% wide until a breakpoint\n @each $breakpoint, $container-max-width in $container-max-widths {\n .container-#{$breakpoint} {\n @extend .container-fluid;\n }\n\n @include media-breakpoint-up($breakpoint, $grid-breakpoints) {\n %responsive-container-#{$breakpoint} {\n max-width: $container-max-width;\n }\n\n // Extend each breakpoint which is smaller or equal to the current breakpoint\n $extend-breakpoint: true;\n\n @each $name, $width in $grid-breakpoints {\n @if ($extend-breakpoint) {\n .container#{breakpoint-infix($name, $grid-breakpoints)} {\n @extend %responsive-container-#{$breakpoint};\n }\n\n // Once the current breakpoint is reached, stop extending\n @if ($breakpoint == $name) {\n $extend-breakpoint: false;\n }\n }\n }\n }\n }\n}\n","/*!\n * Bootstrap Grid v5.1.3 (https://getbootstrap.com/)\n * Copyright 2011-2021 The Bootstrap Authors\n * Copyright 2011-2021 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n:root {\n --bs-blue: #0d6efd;\n --bs-indigo: #6610f2;\n --bs-purple: #6f42c1;\n --bs-pink: #d63384;\n --bs-red: #dc3545;\n --bs-orange: #fd7e14;\n --bs-yellow: #ffc107;\n --bs-green: #198754;\n --bs-teal: #20c997;\n --bs-cyan: #0dcaf0;\n --bs-white: #fff;\n --bs-gray: #6c757d;\n --bs-gray-dark: #343a40;\n --bs-gray-100: #f8f9fa;\n --bs-gray-200: #e9ecef;\n --bs-gray-300: #dee2e6;\n --bs-gray-400: #ced4da;\n --bs-gray-500: #adb5bd;\n --bs-gray-600: #6c757d;\n --bs-gray-700: #495057;\n --bs-gray-800: #343a40;\n --bs-gray-900: #212529;\n --bs-primary: #0d6efd;\n --bs-secondary: #6c757d;\n --bs-success: #198754;\n --bs-info: #0dcaf0;\n --bs-warning: #ffc107;\n --bs-danger: #dc3545;\n --bs-light: #f8f9fa;\n --bs-dark: #212529;\n --bs-primary-rgb: 13, 110, 253;\n --bs-secondary-rgb: 108, 117, 125;\n --bs-success-rgb: 25, 135, 84;\n --bs-info-rgb: 13, 202, 240;\n --bs-warning-rgb: 255, 193, 7;\n --bs-danger-rgb: 220, 53, 69;\n --bs-light-rgb: 248, 249, 250;\n --bs-dark-rgb: 33, 37, 41;\n --bs-white-rgb: 255, 255, 255;\n --bs-black-rgb: 0, 0, 0;\n --bs-body-color-rgb: 33, 37, 41;\n --bs-body-bg-rgb: 255, 255, 255;\n --bs-font-sans-serif: system-ui, -apple-system, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", \"Liberation Sans\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n --bs-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n --bs-gradient: linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));\n --bs-body-font-family: var(--bs-font-sans-serif);\n --bs-body-font-size: 1rem;\n --bs-body-font-weight: 400;\n --bs-body-line-height: 1.5;\n --bs-body-color: #212529;\n --bs-body-bg: #fff;\n}\n\n.container,\n.container-fluid,\n.container-xxl,\n.container-xl,\n.container-lg,\n.container-md,\n.container-sm {\n width: 100%;\n padding-left: var(--bs-gutter-x, 0.75rem);\n padding-right: var(--bs-gutter-x, 0.75rem);\n margin-left: auto;\n margin-right: auto;\n}\n\n@media (min-width: 576px) {\n .container-sm, .container {\n max-width: 540px;\n }\n}\n@media (min-width: 768px) {\n .container-md, .container-sm, .container {\n max-width: 720px;\n }\n}\n@media (min-width: 992px) {\n .container-lg, .container-md, .container-sm, .container {\n max-width: 960px;\n }\n}\n@media (min-width: 1200px) {\n .container-xl, .container-lg, .container-md, .container-sm, .container {\n max-width: 1140px;\n }\n}\n@media (min-width: 1400px) {\n .container-xxl, .container-xl, .container-lg, .container-md, .container-sm, .container {\n max-width: 1320px;\n }\n}\n.row {\n --bs-gutter-x: 1.5rem;\n --bs-gutter-y: 0;\n display: flex;\n flex-wrap: wrap;\n margin-top: calc(-1 * var(--bs-gutter-y));\n margin-left: calc(-0.5 * var(--bs-gutter-x));\n margin-right: calc(-0.5 * var(--bs-gutter-x));\n}\n.row > * {\n box-sizing: border-box;\n flex-shrink: 0;\n width: 100%;\n max-width: 100%;\n padding-left: calc(var(--bs-gutter-x) * 0.5);\n padding-right: calc(var(--bs-gutter-x) * 0.5);\n margin-top: var(--bs-gutter-y);\n}\n\n.col {\n flex: 1 0 0%;\n}\n\n.row-cols-auto > * {\n flex: 0 0 auto;\n width: auto;\n}\n\n.row-cols-1 > * {\n flex: 0 0 auto;\n width: 100%;\n}\n\n.row-cols-2 > * {\n flex: 0 0 auto;\n width: 50%;\n}\n\n.row-cols-3 > * {\n flex: 0 0 auto;\n width: 33.3333333333%;\n}\n\n.row-cols-4 > * {\n flex: 0 0 auto;\n width: 25%;\n}\n\n.row-cols-5 > * {\n flex: 0 0 auto;\n width: 20%;\n}\n\n.row-cols-6 > * {\n flex: 0 0 auto;\n width: 16.6666666667%;\n}\n\n.col-auto {\n flex: 0 0 auto;\n width: auto;\n}\n\n.col-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n}\n\n.col-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n}\n\n.col-3 {\n flex: 0 0 auto;\n width: 25%;\n}\n\n.col-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n}\n\n.col-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n}\n\n.col-6 {\n flex: 0 0 auto;\n width: 50%;\n}\n\n.col-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n}\n\n.col-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n}\n\n.col-9 {\n flex: 0 0 auto;\n width: 75%;\n}\n\n.col-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n}\n\n.col-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n}\n\n.col-12 {\n flex: 0 0 auto;\n width: 100%;\n}\n\n.offset-1 {\n margin-right: 8.33333333%;\n}\n\n.offset-2 {\n margin-right: 16.66666667%;\n}\n\n.offset-3 {\n margin-right: 25%;\n}\n\n.offset-4 {\n margin-right: 33.33333333%;\n}\n\n.offset-5 {\n margin-right: 41.66666667%;\n}\n\n.offset-6 {\n margin-right: 50%;\n}\n\n.offset-7 {\n margin-right: 58.33333333%;\n}\n\n.offset-8 {\n margin-right: 66.66666667%;\n}\n\n.offset-9 {\n margin-right: 75%;\n}\n\n.offset-10 {\n margin-right: 83.33333333%;\n}\n\n.offset-11 {\n margin-right: 91.66666667%;\n}\n\n.g-0,\n.gx-0 {\n --bs-gutter-x: 0;\n}\n\n.g-0,\n.gy-0 {\n --bs-gutter-y: 0;\n}\n\n.g-1,\n.gx-1 {\n --bs-gutter-x: 0.25rem;\n}\n\n.g-1,\n.gy-1 {\n --bs-gutter-y: 0.25rem;\n}\n\n.g-2,\n.gx-2 {\n --bs-gutter-x: 0.5rem;\n}\n\n.g-2,\n.gy-2 {\n --bs-gutter-y: 0.5rem;\n}\n\n.g-3,\n.gx-3 {\n --bs-gutter-x: 1rem;\n}\n\n.g-3,\n.gy-3 {\n --bs-gutter-y: 1rem;\n}\n\n.g-4,\n.gx-4 {\n --bs-gutter-x: 1.5rem;\n}\n\n.g-4,\n.gy-4 {\n --bs-gutter-y: 1.5rem;\n}\n\n.g-5,\n.gx-5 {\n --bs-gutter-x: 3rem;\n}\n\n.g-5,\n.gy-5 {\n --bs-gutter-y: 3rem;\n}\n\n@media (min-width: 576px) {\n .col-sm {\n flex: 1 0 0%;\n }\n\n .row-cols-sm-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n\n .row-cols-sm-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n\n .row-cols-sm-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n\n .row-cols-sm-3 > * {\n flex: 0 0 auto;\n width: 33.3333333333%;\n }\n\n .row-cols-sm-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n\n .row-cols-sm-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n\n .row-cols-sm-6 > * {\n flex: 0 0 auto;\n width: 16.6666666667%;\n }\n\n .col-sm-auto {\n flex: 0 0 auto;\n width: auto;\n }\n\n .col-sm-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n\n .col-sm-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n\n .col-sm-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n\n .col-sm-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n\n .col-sm-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n\n .col-sm-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n\n .col-sm-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n\n .col-sm-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n\n .col-sm-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n\n .col-sm-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n\n .col-sm-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n\n .col-sm-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n\n .offset-sm-0 {\n margin-right: 0;\n }\n\n .offset-sm-1 {\n margin-right: 8.33333333%;\n }\n\n .offset-sm-2 {\n margin-right: 16.66666667%;\n }\n\n .offset-sm-3 {\n margin-right: 25%;\n }\n\n .offset-sm-4 {\n margin-right: 33.33333333%;\n }\n\n .offset-sm-5 {\n margin-right: 41.66666667%;\n }\n\n .offset-sm-6 {\n margin-right: 50%;\n }\n\n .offset-sm-7 {\n margin-right: 58.33333333%;\n }\n\n .offset-sm-8 {\n margin-right: 66.66666667%;\n }\n\n .offset-sm-9 {\n margin-right: 75%;\n }\n\n .offset-sm-10 {\n margin-right: 83.33333333%;\n }\n\n .offset-sm-11 {\n margin-right: 91.66666667%;\n }\n\n .g-sm-0,\n.gx-sm-0 {\n --bs-gutter-x: 0;\n }\n\n .g-sm-0,\n.gy-sm-0 {\n --bs-gutter-y: 0;\n }\n\n .g-sm-1,\n.gx-sm-1 {\n --bs-gutter-x: 0.25rem;\n }\n\n .g-sm-1,\n.gy-sm-1 {\n --bs-gutter-y: 0.25rem;\n }\n\n .g-sm-2,\n.gx-sm-2 {\n --bs-gutter-x: 0.5rem;\n }\n\n .g-sm-2,\n.gy-sm-2 {\n --bs-gutter-y: 0.5rem;\n }\n\n .g-sm-3,\n.gx-sm-3 {\n --bs-gutter-x: 1rem;\n }\n\n .g-sm-3,\n.gy-sm-3 {\n --bs-gutter-y: 1rem;\n }\n\n .g-sm-4,\n.gx-sm-4 {\n --bs-gutter-x: 1.5rem;\n }\n\n .g-sm-4,\n.gy-sm-4 {\n --bs-gutter-y: 1.5rem;\n }\n\n .g-sm-5,\n.gx-sm-5 {\n --bs-gutter-x: 3rem;\n }\n\n .g-sm-5,\n.gy-sm-5 {\n --bs-gutter-y: 3rem;\n }\n}\n@media (min-width: 768px) {\n .col-md {\n flex: 1 0 0%;\n }\n\n .row-cols-md-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n\n .row-cols-md-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n\n .row-cols-md-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n\n .row-cols-md-3 > * {\n flex: 0 0 auto;\n width: 33.3333333333%;\n }\n\n .row-cols-md-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n\n .row-cols-md-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n\n .row-cols-md-6 > * {\n flex: 0 0 auto;\n width: 16.6666666667%;\n }\n\n .col-md-auto {\n flex: 0 0 auto;\n width: auto;\n }\n\n .col-md-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n\n .col-md-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n\n .col-md-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n\n .col-md-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n\n .col-md-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n\n .col-md-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n\n .col-md-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n\n .col-md-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n\n .col-md-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n\n .col-md-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n\n .col-md-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n\n .col-md-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n\n .offset-md-0 {\n margin-right: 0;\n }\n\n .offset-md-1 {\n margin-right: 8.33333333%;\n }\n\n .offset-md-2 {\n margin-right: 16.66666667%;\n }\n\n .offset-md-3 {\n margin-right: 25%;\n }\n\n .offset-md-4 {\n margin-right: 33.33333333%;\n }\n\n .offset-md-5 {\n margin-right: 41.66666667%;\n }\n\n .offset-md-6 {\n margin-right: 50%;\n }\n\n .offset-md-7 {\n margin-right: 58.33333333%;\n }\n\n .offset-md-8 {\n margin-right: 66.66666667%;\n }\n\n .offset-md-9 {\n margin-right: 75%;\n }\n\n .offset-md-10 {\n margin-right: 83.33333333%;\n }\n\n .offset-md-11 {\n margin-right: 91.66666667%;\n }\n\n .g-md-0,\n.gx-md-0 {\n --bs-gutter-x: 0;\n }\n\n .g-md-0,\n.gy-md-0 {\n --bs-gutter-y: 0;\n }\n\n .g-md-1,\n.gx-md-1 {\n --bs-gutter-x: 0.25rem;\n }\n\n .g-md-1,\n.gy-md-1 {\n --bs-gutter-y: 0.25rem;\n }\n\n .g-md-2,\n.gx-md-2 {\n --bs-gutter-x: 0.5rem;\n }\n\n .g-md-2,\n.gy-md-2 {\n --bs-gutter-y: 0.5rem;\n }\n\n .g-md-3,\n.gx-md-3 {\n --bs-gutter-x: 1rem;\n }\n\n .g-md-3,\n.gy-md-3 {\n --bs-gutter-y: 1rem;\n }\n\n .g-md-4,\n.gx-md-4 {\n --bs-gutter-x: 1.5rem;\n }\n\n .g-md-4,\n.gy-md-4 {\n --bs-gutter-y: 1.5rem;\n }\n\n .g-md-5,\n.gx-md-5 {\n --bs-gutter-x: 3rem;\n }\n\n .g-md-5,\n.gy-md-5 {\n --bs-gutter-y: 3rem;\n }\n}\n@media (min-width: 992px) {\n .col-lg {\n flex: 1 0 0%;\n }\n\n .row-cols-lg-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n\n .row-cols-lg-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n\n .row-cols-lg-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n\n .row-cols-lg-3 > * {\n flex: 0 0 auto;\n width: 33.3333333333%;\n }\n\n .row-cols-lg-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n\n .row-cols-lg-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n\n .row-cols-lg-6 > * {\n flex: 0 0 auto;\n width: 16.6666666667%;\n }\n\n .col-lg-auto {\n flex: 0 0 auto;\n width: auto;\n }\n\n .col-lg-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n\n .col-lg-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n\n .col-lg-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n\n .col-lg-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n\n .col-lg-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n\n .col-lg-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n\n .col-lg-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n\n .col-lg-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n\n .col-lg-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n\n .col-lg-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n\n .col-lg-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n\n .col-lg-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n\n .offset-lg-0 {\n margin-right: 0;\n }\n\n .offset-lg-1 {\n margin-right: 8.33333333%;\n }\n\n .offset-lg-2 {\n margin-right: 16.66666667%;\n }\n\n .offset-lg-3 {\n margin-right: 25%;\n }\n\n .offset-lg-4 {\n margin-right: 33.33333333%;\n }\n\n .offset-lg-5 {\n margin-right: 41.66666667%;\n }\n\n .offset-lg-6 {\n margin-right: 50%;\n }\n\n .offset-lg-7 {\n margin-right: 58.33333333%;\n }\n\n .offset-lg-8 {\n margin-right: 66.66666667%;\n }\n\n .offset-lg-9 {\n margin-right: 75%;\n }\n\n .offset-lg-10 {\n margin-right: 83.33333333%;\n }\n\n .offset-lg-11 {\n margin-right: 91.66666667%;\n }\n\n .g-lg-0,\n.gx-lg-0 {\n --bs-gutter-x: 0;\n }\n\n .g-lg-0,\n.gy-lg-0 {\n --bs-gutter-y: 0;\n }\n\n .g-lg-1,\n.gx-lg-1 {\n --bs-gutter-x: 0.25rem;\n }\n\n .g-lg-1,\n.gy-lg-1 {\n --bs-gutter-y: 0.25rem;\n }\n\n .g-lg-2,\n.gx-lg-2 {\n --bs-gutter-x: 0.5rem;\n }\n\n .g-lg-2,\n.gy-lg-2 {\n --bs-gutter-y: 0.5rem;\n }\n\n .g-lg-3,\n.gx-lg-3 {\n --bs-gutter-x: 1rem;\n }\n\n .g-lg-3,\n.gy-lg-3 {\n --bs-gutter-y: 1rem;\n }\n\n .g-lg-4,\n.gx-lg-4 {\n --bs-gutter-x: 1.5rem;\n }\n\n .g-lg-4,\n.gy-lg-4 {\n --bs-gutter-y: 1.5rem;\n }\n\n .g-lg-5,\n.gx-lg-5 {\n --bs-gutter-x: 3rem;\n }\n\n .g-lg-5,\n.gy-lg-5 {\n --bs-gutter-y: 3rem;\n }\n}\n@media (min-width: 1200px) {\n .col-xl {\n flex: 1 0 0%;\n }\n\n .row-cols-xl-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n\n .row-cols-xl-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n\n .row-cols-xl-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n\n .row-cols-xl-3 > * {\n flex: 0 0 auto;\n width: 33.3333333333%;\n }\n\n .row-cols-xl-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n\n .row-cols-xl-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n\n .row-cols-xl-6 > * {\n flex: 0 0 auto;\n width: 16.6666666667%;\n }\n\n .col-xl-auto {\n flex: 0 0 auto;\n width: auto;\n }\n\n .col-xl-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n\n .col-xl-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n\n .col-xl-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n\n .col-xl-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n\n .col-xl-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n\n .col-xl-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n\n .col-xl-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n\n .col-xl-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n\n .col-xl-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n\n .col-xl-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n\n .col-xl-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n\n .col-xl-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n\n .offset-xl-0 {\n margin-right: 0;\n }\n\n .offset-xl-1 {\n margin-right: 8.33333333%;\n }\n\n .offset-xl-2 {\n margin-right: 16.66666667%;\n }\n\n .offset-xl-3 {\n margin-right: 25%;\n }\n\n .offset-xl-4 {\n margin-right: 33.33333333%;\n }\n\n .offset-xl-5 {\n margin-right: 41.66666667%;\n }\n\n .offset-xl-6 {\n margin-right: 50%;\n }\n\n .offset-xl-7 {\n margin-right: 58.33333333%;\n }\n\n .offset-xl-8 {\n margin-right: 66.66666667%;\n }\n\n .offset-xl-9 {\n margin-right: 75%;\n }\n\n .offset-xl-10 {\n margin-right: 83.33333333%;\n }\n\n .offset-xl-11 {\n margin-right: 91.66666667%;\n }\n\n .g-xl-0,\n.gx-xl-0 {\n --bs-gutter-x: 0;\n }\n\n .g-xl-0,\n.gy-xl-0 {\n --bs-gutter-y: 0;\n }\n\n .g-xl-1,\n.gx-xl-1 {\n --bs-gutter-x: 0.25rem;\n }\n\n .g-xl-1,\n.gy-xl-1 {\n --bs-gutter-y: 0.25rem;\n }\n\n .g-xl-2,\n.gx-xl-2 {\n --bs-gutter-x: 0.5rem;\n }\n\n .g-xl-2,\n.gy-xl-2 {\n --bs-gutter-y: 0.5rem;\n }\n\n .g-xl-3,\n.gx-xl-3 {\n --bs-gutter-x: 1rem;\n }\n\n .g-xl-3,\n.gy-xl-3 {\n --bs-gutter-y: 1rem;\n }\n\n .g-xl-4,\n.gx-xl-4 {\n --bs-gutter-x: 1.5rem;\n }\n\n .g-xl-4,\n.gy-xl-4 {\n --bs-gutter-y: 1.5rem;\n }\n\n .g-xl-5,\n.gx-xl-5 {\n --bs-gutter-x: 3rem;\n }\n\n .g-xl-5,\n.gy-xl-5 {\n --bs-gutter-y: 3rem;\n }\n}\n@media (min-width: 1400px) {\n .col-xxl {\n flex: 1 0 0%;\n }\n\n .row-cols-xxl-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n\n .row-cols-xxl-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n\n .row-cols-xxl-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n\n .row-cols-xxl-3 > * {\n flex: 0 0 auto;\n width: 33.3333333333%;\n }\n\n .row-cols-xxl-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n\n .row-cols-xxl-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n\n .row-cols-xxl-6 > * {\n flex: 0 0 auto;\n width: 16.6666666667%;\n }\n\n .col-xxl-auto {\n flex: 0 0 auto;\n width: auto;\n }\n\n .col-xxl-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n\n .col-xxl-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n\n .col-xxl-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n\n .col-xxl-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n\n .col-xxl-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n\n .col-xxl-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n\n .col-xxl-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n\n .col-xxl-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n\n .col-xxl-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n\n .col-xxl-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n\n .col-xxl-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n\n .col-xxl-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n\n .offset-xxl-0 {\n margin-right: 0;\n }\n\n .offset-xxl-1 {\n margin-right: 8.33333333%;\n }\n\n .offset-xxl-2 {\n margin-right: 16.66666667%;\n }\n\n .offset-xxl-3 {\n margin-right: 25%;\n }\n\n .offset-xxl-4 {\n margin-right: 33.33333333%;\n }\n\n .offset-xxl-5 {\n margin-right: 41.66666667%;\n }\n\n .offset-xxl-6 {\n margin-right: 50%;\n }\n\n .offset-xxl-7 {\n margin-right: 58.33333333%;\n }\n\n .offset-xxl-8 {\n margin-right: 66.66666667%;\n }\n\n .offset-xxl-9 {\n margin-right: 75%;\n }\n\n .offset-xxl-10 {\n margin-right: 83.33333333%;\n }\n\n .offset-xxl-11 {\n margin-right: 91.66666667%;\n }\n\n .g-xxl-0,\n.gx-xxl-0 {\n --bs-gutter-x: 0;\n }\n\n .g-xxl-0,\n.gy-xxl-0 {\n --bs-gutter-y: 0;\n }\n\n .g-xxl-1,\n.gx-xxl-1 {\n --bs-gutter-x: 0.25rem;\n }\n\n .g-xxl-1,\n.gy-xxl-1 {\n --bs-gutter-y: 0.25rem;\n }\n\n .g-xxl-2,\n.gx-xxl-2 {\n --bs-gutter-x: 0.5rem;\n }\n\n .g-xxl-2,\n.gy-xxl-2 {\n --bs-gutter-y: 0.5rem;\n }\n\n .g-xxl-3,\n.gx-xxl-3 {\n --bs-gutter-x: 1rem;\n }\n\n .g-xxl-3,\n.gy-xxl-3 {\n --bs-gutter-y: 1rem;\n }\n\n .g-xxl-4,\n.gx-xxl-4 {\n --bs-gutter-x: 1.5rem;\n }\n\n .g-xxl-4,\n.gy-xxl-4 {\n --bs-gutter-y: 1.5rem;\n }\n\n .g-xxl-5,\n.gx-xxl-5 {\n --bs-gutter-x: 3rem;\n }\n\n .g-xxl-5,\n.gy-xxl-5 {\n --bs-gutter-y: 3rem;\n }\n}\n.d-inline {\n display: inline !important;\n}\n\n.d-inline-block {\n display: inline-block !important;\n}\n\n.d-block {\n display: block !important;\n}\n\n.d-grid {\n display: grid !important;\n}\n\n.d-table {\n display: table !important;\n}\n\n.d-table-row {\n display: table-row !important;\n}\n\n.d-table-cell {\n display: table-cell !important;\n}\n\n.d-flex {\n display: flex !important;\n}\n\n.d-inline-flex {\n display: inline-flex !important;\n}\n\n.d-none {\n display: none !important;\n}\n\n.flex-fill {\n flex: 1 1 auto !important;\n}\n\n.flex-row {\n flex-direction: row !important;\n}\n\n.flex-column {\n flex-direction: column !important;\n}\n\n.flex-row-reverse {\n flex-direction: row-reverse !important;\n}\n\n.flex-column-reverse {\n flex-direction: column-reverse !important;\n}\n\n.flex-grow-0 {\n flex-grow: 0 !important;\n}\n\n.flex-grow-1 {\n flex-grow: 1 !important;\n}\n\n.flex-shrink-0 {\n flex-shrink: 0 !important;\n}\n\n.flex-shrink-1 {\n flex-shrink: 1 !important;\n}\n\n.flex-wrap {\n flex-wrap: wrap !important;\n}\n\n.flex-nowrap {\n flex-wrap: nowrap !important;\n}\n\n.flex-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n}\n\n.justify-content-start {\n justify-content: flex-start !important;\n}\n\n.justify-content-end {\n justify-content: flex-end !important;\n}\n\n.justify-content-center {\n justify-content: center !important;\n}\n\n.justify-content-between {\n justify-content: space-between !important;\n}\n\n.justify-content-around {\n justify-content: space-around !important;\n}\n\n.justify-content-evenly {\n justify-content: space-evenly !important;\n}\n\n.align-items-start {\n align-items: flex-start !important;\n}\n\n.align-items-end {\n align-items: flex-end !important;\n}\n\n.align-items-center {\n align-items: center !important;\n}\n\n.align-items-baseline {\n align-items: baseline !important;\n}\n\n.align-items-stretch {\n align-items: stretch !important;\n}\n\n.align-content-start {\n align-content: flex-start !important;\n}\n\n.align-content-end {\n align-content: flex-end !important;\n}\n\n.align-content-center {\n align-content: center !important;\n}\n\n.align-content-between {\n align-content: space-between !important;\n}\n\n.align-content-around {\n align-content: space-around !important;\n}\n\n.align-content-stretch {\n align-content: stretch !important;\n}\n\n.align-self-auto {\n align-self: auto !important;\n}\n\n.align-self-start {\n align-self: flex-start !important;\n}\n\n.align-self-end {\n align-self: flex-end !important;\n}\n\n.align-self-center {\n align-self: center !important;\n}\n\n.align-self-baseline {\n align-self: baseline !important;\n}\n\n.align-self-stretch {\n align-self: stretch !important;\n}\n\n.order-first {\n order: -1 !important;\n}\n\n.order-0 {\n order: 0 !important;\n}\n\n.order-1 {\n order: 1 !important;\n}\n\n.order-2 {\n order: 2 !important;\n}\n\n.order-3 {\n order: 3 !important;\n}\n\n.order-4 {\n order: 4 !important;\n}\n\n.order-5 {\n order: 5 !important;\n}\n\n.order-last {\n order: 6 !important;\n}\n\n.m-0 {\n margin: 0 !important;\n}\n\n.m-1 {\n margin: 0.25rem !important;\n}\n\n.m-2 {\n margin: 0.5rem !important;\n}\n\n.m-3 {\n margin: 1rem !important;\n}\n\n.m-4 {\n margin: 1.5rem !important;\n}\n\n.m-5 {\n margin: 3rem !important;\n}\n\n.m-auto {\n margin: auto !important;\n}\n\n.mx-0 {\n margin-left: 0 !important;\n margin-right: 0 !important;\n}\n\n.mx-1 {\n margin-left: 0.25rem !important;\n margin-right: 0.25rem !important;\n}\n\n.mx-2 {\n margin-left: 0.5rem !important;\n margin-right: 0.5rem !important;\n}\n\n.mx-3 {\n margin-left: 1rem !important;\n margin-right: 1rem !important;\n}\n\n.mx-4 {\n margin-left: 1.5rem !important;\n margin-right: 1.5rem !important;\n}\n\n.mx-5 {\n margin-left: 3rem !important;\n margin-right: 3rem !important;\n}\n\n.mx-auto {\n margin-left: auto !important;\n margin-right: auto !important;\n}\n\n.my-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n}\n\n.my-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n}\n\n.my-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n}\n\n.my-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n}\n\n.my-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n}\n\n.my-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n}\n\n.my-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n}\n\n.mt-0 {\n margin-top: 0 !important;\n}\n\n.mt-1 {\n margin-top: 0.25rem !important;\n}\n\n.mt-2 {\n margin-top: 0.5rem !important;\n}\n\n.mt-3 {\n margin-top: 1rem !important;\n}\n\n.mt-4 {\n margin-top: 1.5rem !important;\n}\n\n.mt-5 {\n margin-top: 3rem !important;\n}\n\n.mt-auto {\n margin-top: auto !important;\n}\n\n.me-0 {\n margin-left: 0 !important;\n}\n\n.me-1 {\n margin-left: 0.25rem !important;\n}\n\n.me-2 {\n margin-left: 0.5rem !important;\n}\n\n.me-3 {\n margin-left: 1rem !important;\n}\n\n.me-4 {\n margin-left: 1.5rem !important;\n}\n\n.me-5 {\n margin-left: 3rem !important;\n}\n\n.me-auto {\n margin-left: auto !important;\n}\n\n.mb-0 {\n margin-bottom: 0 !important;\n}\n\n.mb-1 {\n margin-bottom: 0.25rem !important;\n}\n\n.mb-2 {\n margin-bottom: 0.5rem !important;\n}\n\n.mb-3 {\n margin-bottom: 1rem !important;\n}\n\n.mb-4 {\n margin-bottom: 1.5rem !important;\n}\n\n.mb-5 {\n margin-bottom: 3rem !important;\n}\n\n.mb-auto {\n margin-bottom: auto !important;\n}\n\n.ms-0 {\n margin-right: 0 !important;\n}\n\n.ms-1 {\n margin-right: 0.25rem !important;\n}\n\n.ms-2 {\n margin-right: 0.5rem !important;\n}\n\n.ms-3 {\n margin-right: 1rem !important;\n}\n\n.ms-4 {\n margin-right: 1.5rem !important;\n}\n\n.ms-5 {\n margin-right: 3rem !important;\n}\n\n.ms-auto {\n margin-right: auto !important;\n}\n\n.p-0 {\n padding: 0 !important;\n}\n\n.p-1 {\n padding: 0.25rem !important;\n}\n\n.p-2 {\n padding: 0.5rem !important;\n}\n\n.p-3 {\n padding: 1rem !important;\n}\n\n.p-4 {\n padding: 1.5rem !important;\n}\n\n.p-5 {\n padding: 3rem !important;\n}\n\n.px-0 {\n padding-left: 0 !important;\n padding-right: 0 !important;\n}\n\n.px-1 {\n padding-left: 0.25rem !important;\n padding-right: 0.25rem !important;\n}\n\n.px-2 {\n padding-left: 0.5rem !important;\n padding-right: 0.5rem !important;\n}\n\n.px-3 {\n padding-left: 1rem !important;\n padding-right: 1rem !important;\n}\n\n.px-4 {\n padding-left: 1.5rem !important;\n padding-right: 1.5rem !important;\n}\n\n.px-5 {\n padding-left: 3rem !important;\n padding-right: 3rem !important;\n}\n\n.py-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n}\n\n.py-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n}\n\n.py-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n}\n\n.py-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n}\n\n.py-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n}\n\n.py-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n}\n\n.pt-0 {\n padding-top: 0 !important;\n}\n\n.pt-1 {\n padding-top: 0.25rem !important;\n}\n\n.pt-2 {\n padding-top: 0.5rem !important;\n}\n\n.pt-3 {\n padding-top: 1rem !important;\n}\n\n.pt-4 {\n padding-top: 1.5rem !important;\n}\n\n.pt-5 {\n padding-top: 3rem !important;\n}\n\n.pe-0 {\n padding-left: 0 !important;\n}\n\n.pe-1 {\n padding-left: 0.25rem !important;\n}\n\n.pe-2 {\n padding-left: 0.5rem !important;\n}\n\n.pe-3 {\n padding-left: 1rem !important;\n}\n\n.pe-4 {\n padding-left: 1.5rem !important;\n}\n\n.pe-5 {\n padding-left: 3rem !important;\n}\n\n.pb-0 {\n padding-bottom: 0 !important;\n}\n\n.pb-1 {\n padding-bottom: 0.25rem !important;\n}\n\n.pb-2 {\n padding-bottom: 0.5rem !important;\n}\n\n.pb-3 {\n padding-bottom: 1rem !important;\n}\n\n.pb-4 {\n padding-bottom: 1.5rem !important;\n}\n\n.pb-5 {\n padding-bottom: 3rem !important;\n}\n\n.ps-0 {\n padding-right: 0 !important;\n}\n\n.ps-1 {\n padding-right: 0.25rem !important;\n}\n\n.ps-2 {\n padding-right: 0.5rem !important;\n}\n\n.ps-3 {\n padding-right: 1rem !important;\n}\n\n.ps-4 {\n padding-right: 1.5rem !important;\n}\n\n.ps-5 {\n padding-right: 3rem !important;\n}\n\n@media (min-width: 576px) {\n .d-sm-inline {\n display: inline !important;\n }\n\n .d-sm-inline-block {\n display: inline-block !important;\n }\n\n .d-sm-block {\n display: block !important;\n }\n\n .d-sm-grid {\n display: grid !important;\n }\n\n .d-sm-table {\n display: table !important;\n }\n\n .d-sm-table-row {\n display: table-row !important;\n }\n\n .d-sm-table-cell {\n display: table-cell !important;\n }\n\n .d-sm-flex {\n display: flex !important;\n }\n\n .d-sm-inline-flex {\n display: inline-flex !important;\n }\n\n .d-sm-none {\n display: none !important;\n }\n\n .flex-sm-fill {\n flex: 1 1 auto !important;\n }\n\n .flex-sm-row {\n flex-direction: row !important;\n }\n\n .flex-sm-column {\n flex-direction: column !important;\n }\n\n .flex-sm-row-reverse {\n flex-direction: row-reverse !important;\n }\n\n .flex-sm-column-reverse {\n flex-direction: column-reverse !important;\n }\n\n .flex-sm-grow-0 {\n flex-grow: 0 !important;\n }\n\n .flex-sm-grow-1 {\n flex-grow: 1 !important;\n }\n\n .flex-sm-shrink-0 {\n flex-shrink: 0 !important;\n }\n\n .flex-sm-shrink-1 {\n flex-shrink: 1 !important;\n }\n\n .flex-sm-wrap {\n flex-wrap: wrap !important;\n }\n\n .flex-sm-nowrap {\n flex-wrap: nowrap !important;\n }\n\n .flex-sm-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n\n .justify-content-sm-start {\n justify-content: flex-start !important;\n }\n\n .justify-content-sm-end {\n justify-content: flex-end !important;\n }\n\n .justify-content-sm-center {\n justify-content: center !important;\n }\n\n .justify-content-sm-between {\n justify-content: space-between !important;\n }\n\n .justify-content-sm-around {\n justify-content: space-around !important;\n }\n\n .justify-content-sm-evenly {\n justify-content: space-evenly !important;\n }\n\n .align-items-sm-start {\n align-items: flex-start !important;\n }\n\n .align-items-sm-end {\n align-items: flex-end !important;\n }\n\n .align-items-sm-center {\n align-items: center !important;\n }\n\n .align-items-sm-baseline {\n align-items: baseline !important;\n }\n\n .align-items-sm-stretch {\n align-items: stretch !important;\n }\n\n .align-content-sm-start {\n align-content: flex-start !important;\n }\n\n .align-content-sm-end {\n align-content: flex-end !important;\n }\n\n .align-content-sm-center {\n align-content: center !important;\n }\n\n .align-content-sm-between {\n align-content: space-between !important;\n }\n\n .align-content-sm-around {\n align-content: space-around !important;\n }\n\n .align-content-sm-stretch {\n align-content: stretch !important;\n }\n\n .align-self-sm-auto {\n align-self: auto !important;\n }\n\n .align-self-sm-start {\n align-self: flex-start !important;\n }\n\n .align-self-sm-end {\n align-self: flex-end !important;\n }\n\n .align-self-sm-center {\n align-self: center !important;\n }\n\n .align-self-sm-baseline {\n align-self: baseline !important;\n }\n\n .align-self-sm-stretch {\n align-self: stretch !important;\n }\n\n .order-sm-first {\n order: -1 !important;\n }\n\n .order-sm-0 {\n order: 0 !important;\n }\n\n .order-sm-1 {\n order: 1 !important;\n }\n\n .order-sm-2 {\n order: 2 !important;\n }\n\n .order-sm-3 {\n order: 3 !important;\n }\n\n .order-sm-4 {\n order: 4 !important;\n }\n\n .order-sm-5 {\n order: 5 !important;\n }\n\n .order-sm-last {\n order: 6 !important;\n }\n\n .m-sm-0 {\n margin: 0 !important;\n }\n\n .m-sm-1 {\n margin: 0.25rem !important;\n }\n\n .m-sm-2 {\n margin: 0.5rem !important;\n }\n\n .m-sm-3 {\n margin: 1rem !important;\n }\n\n .m-sm-4 {\n margin: 1.5rem !important;\n }\n\n .m-sm-5 {\n margin: 3rem !important;\n }\n\n .m-sm-auto {\n margin: auto !important;\n }\n\n .mx-sm-0 {\n margin-left: 0 !important;\n margin-right: 0 !important;\n }\n\n .mx-sm-1 {\n margin-left: 0.25rem !important;\n margin-right: 0.25rem !important;\n }\n\n .mx-sm-2 {\n margin-left: 0.5rem !important;\n margin-right: 0.5rem !important;\n }\n\n .mx-sm-3 {\n margin-left: 1rem !important;\n margin-right: 1rem !important;\n }\n\n .mx-sm-4 {\n margin-left: 1.5rem !important;\n margin-right: 1.5rem !important;\n }\n\n .mx-sm-5 {\n margin-left: 3rem !important;\n margin-right: 3rem !important;\n }\n\n .mx-sm-auto {\n margin-left: auto !important;\n margin-right: auto !important;\n }\n\n .my-sm-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n\n .my-sm-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n\n .my-sm-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n\n .my-sm-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n\n .my-sm-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n\n .my-sm-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n\n .my-sm-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n\n .mt-sm-0 {\n margin-top: 0 !important;\n }\n\n .mt-sm-1 {\n margin-top: 0.25rem !important;\n }\n\n .mt-sm-2 {\n margin-top: 0.5rem !important;\n }\n\n .mt-sm-3 {\n margin-top: 1rem !important;\n }\n\n .mt-sm-4 {\n margin-top: 1.5rem !important;\n }\n\n .mt-sm-5 {\n margin-top: 3rem !important;\n }\n\n .mt-sm-auto {\n margin-top: auto !important;\n }\n\n .me-sm-0 {\n margin-left: 0 !important;\n }\n\n .me-sm-1 {\n margin-left: 0.25rem !important;\n }\n\n .me-sm-2 {\n margin-left: 0.5rem !important;\n }\n\n .me-sm-3 {\n margin-left: 1rem !important;\n }\n\n .me-sm-4 {\n margin-left: 1.5rem !important;\n }\n\n .me-sm-5 {\n margin-left: 3rem !important;\n }\n\n .me-sm-auto {\n margin-left: auto !important;\n }\n\n .mb-sm-0 {\n margin-bottom: 0 !important;\n }\n\n .mb-sm-1 {\n margin-bottom: 0.25rem !important;\n }\n\n .mb-sm-2 {\n margin-bottom: 0.5rem !important;\n }\n\n .mb-sm-3 {\n margin-bottom: 1rem !important;\n }\n\n .mb-sm-4 {\n margin-bottom: 1.5rem !important;\n }\n\n .mb-sm-5 {\n margin-bottom: 3rem !important;\n }\n\n .mb-sm-auto {\n margin-bottom: auto !important;\n }\n\n .ms-sm-0 {\n margin-right: 0 !important;\n }\n\n .ms-sm-1 {\n margin-right: 0.25rem !important;\n }\n\n .ms-sm-2 {\n margin-right: 0.5rem !important;\n }\n\n .ms-sm-3 {\n margin-right: 1rem !important;\n }\n\n .ms-sm-4 {\n margin-right: 1.5rem !important;\n }\n\n .ms-sm-5 {\n margin-right: 3rem !important;\n }\n\n .ms-sm-auto {\n margin-right: auto !important;\n }\n\n .p-sm-0 {\n padding: 0 !important;\n }\n\n .p-sm-1 {\n padding: 0.25rem !important;\n }\n\n .p-sm-2 {\n padding: 0.5rem !important;\n }\n\n .p-sm-3 {\n padding: 1rem !important;\n }\n\n .p-sm-4 {\n padding: 1.5rem !important;\n }\n\n .p-sm-5 {\n padding: 3rem !important;\n }\n\n .px-sm-0 {\n padding-left: 0 !important;\n padding-right: 0 !important;\n }\n\n .px-sm-1 {\n padding-left: 0.25rem !important;\n padding-right: 0.25rem !important;\n }\n\n .px-sm-2 {\n padding-left: 0.5rem !important;\n padding-right: 0.5rem !important;\n }\n\n .px-sm-3 {\n padding-left: 1rem !important;\n padding-right: 1rem !important;\n }\n\n .px-sm-4 {\n padding-left: 1.5rem !important;\n padding-right: 1.5rem !important;\n }\n\n .px-sm-5 {\n padding-left: 3rem !important;\n padding-right: 3rem !important;\n }\n\n .py-sm-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n\n .py-sm-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n\n .py-sm-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n\n .py-sm-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n\n .py-sm-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n\n .py-sm-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n\n .pt-sm-0 {\n padding-top: 0 !important;\n }\n\n .pt-sm-1 {\n padding-top: 0.25rem !important;\n }\n\n .pt-sm-2 {\n padding-top: 0.5rem !important;\n }\n\n .pt-sm-3 {\n padding-top: 1rem !important;\n }\n\n .pt-sm-4 {\n padding-top: 1.5rem !important;\n }\n\n .pt-sm-5 {\n padding-top: 3rem !important;\n }\n\n .pe-sm-0 {\n padding-left: 0 !important;\n }\n\n .pe-sm-1 {\n padding-left: 0.25rem !important;\n }\n\n .pe-sm-2 {\n padding-left: 0.5rem !important;\n }\n\n .pe-sm-3 {\n padding-left: 1rem !important;\n }\n\n .pe-sm-4 {\n padding-left: 1.5rem !important;\n }\n\n .pe-sm-5 {\n padding-left: 3rem !important;\n }\n\n .pb-sm-0 {\n padding-bottom: 0 !important;\n }\n\n .pb-sm-1 {\n padding-bottom: 0.25rem !important;\n }\n\n .pb-sm-2 {\n padding-bottom: 0.5rem !important;\n }\n\n .pb-sm-3 {\n padding-bottom: 1rem !important;\n }\n\n .pb-sm-4 {\n padding-bottom: 1.5rem !important;\n }\n\n .pb-sm-5 {\n padding-bottom: 3rem !important;\n }\n\n .ps-sm-0 {\n padding-right: 0 !important;\n }\n\n .ps-sm-1 {\n padding-right: 0.25rem !important;\n }\n\n .ps-sm-2 {\n padding-right: 0.5rem !important;\n }\n\n .ps-sm-3 {\n padding-right: 1rem !important;\n }\n\n .ps-sm-4 {\n padding-right: 1.5rem !important;\n }\n\n .ps-sm-5 {\n padding-right: 3rem !important;\n }\n}\n@media (min-width: 768px) {\n .d-md-inline {\n display: inline !important;\n }\n\n .d-md-inline-block {\n display: inline-block !important;\n }\n\n .d-md-block {\n display: block !important;\n }\n\n .d-md-grid {\n display: grid !important;\n }\n\n .d-md-table {\n display: table !important;\n }\n\n .d-md-table-row {\n display: table-row !important;\n }\n\n .d-md-table-cell {\n display: table-cell !important;\n }\n\n .d-md-flex {\n display: flex !important;\n }\n\n .d-md-inline-flex {\n display: inline-flex !important;\n }\n\n .d-md-none {\n display: none !important;\n }\n\n .flex-md-fill {\n flex: 1 1 auto !important;\n }\n\n .flex-md-row {\n flex-direction: row !important;\n }\n\n .flex-md-column {\n flex-direction: column !important;\n }\n\n .flex-md-row-reverse {\n flex-direction: row-reverse !important;\n }\n\n .flex-md-column-reverse {\n flex-direction: column-reverse !important;\n }\n\n .flex-md-grow-0 {\n flex-grow: 0 !important;\n }\n\n .flex-md-grow-1 {\n flex-grow: 1 !important;\n }\n\n .flex-md-shrink-0 {\n flex-shrink: 0 !important;\n }\n\n .flex-md-shrink-1 {\n flex-shrink: 1 !important;\n }\n\n .flex-md-wrap {\n flex-wrap: wrap !important;\n }\n\n .flex-md-nowrap {\n flex-wrap: nowrap !important;\n }\n\n .flex-md-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n\n .justify-content-md-start {\n justify-content: flex-start !important;\n }\n\n .justify-content-md-end {\n justify-content: flex-end !important;\n }\n\n .justify-content-md-center {\n justify-content: center !important;\n }\n\n .justify-content-md-between {\n justify-content: space-between !important;\n }\n\n .justify-content-md-around {\n justify-content: space-around !important;\n }\n\n .justify-content-md-evenly {\n justify-content: space-evenly !important;\n }\n\n .align-items-md-start {\n align-items: flex-start !important;\n }\n\n .align-items-md-end {\n align-items: flex-end !important;\n }\n\n .align-items-md-center {\n align-items: center !important;\n }\n\n .align-items-md-baseline {\n align-items: baseline !important;\n }\n\n .align-items-md-stretch {\n align-items: stretch !important;\n }\n\n .align-content-md-start {\n align-content: flex-start !important;\n }\n\n .align-content-md-end {\n align-content: flex-end !important;\n }\n\n .align-content-md-center {\n align-content: center !important;\n }\n\n .align-content-md-between {\n align-content: space-between !important;\n }\n\n .align-content-md-around {\n align-content: space-around !important;\n }\n\n .align-content-md-stretch {\n align-content: stretch !important;\n }\n\n .align-self-md-auto {\n align-self: auto !important;\n }\n\n .align-self-md-start {\n align-self: flex-start !important;\n }\n\n .align-self-md-end {\n align-self: flex-end !important;\n }\n\n .align-self-md-center {\n align-self: center !important;\n }\n\n .align-self-md-baseline {\n align-self: baseline !important;\n }\n\n .align-self-md-stretch {\n align-self: stretch !important;\n }\n\n .order-md-first {\n order: -1 !important;\n }\n\n .order-md-0 {\n order: 0 !important;\n }\n\n .order-md-1 {\n order: 1 !important;\n }\n\n .order-md-2 {\n order: 2 !important;\n }\n\n .order-md-3 {\n order: 3 !important;\n }\n\n .order-md-4 {\n order: 4 !important;\n }\n\n .order-md-5 {\n order: 5 !important;\n }\n\n .order-md-last {\n order: 6 !important;\n }\n\n .m-md-0 {\n margin: 0 !important;\n }\n\n .m-md-1 {\n margin: 0.25rem !important;\n }\n\n .m-md-2 {\n margin: 0.5rem !important;\n }\n\n .m-md-3 {\n margin: 1rem !important;\n }\n\n .m-md-4 {\n margin: 1.5rem !important;\n }\n\n .m-md-5 {\n margin: 3rem !important;\n }\n\n .m-md-auto {\n margin: auto !important;\n }\n\n .mx-md-0 {\n margin-left: 0 !important;\n margin-right: 0 !important;\n }\n\n .mx-md-1 {\n margin-left: 0.25rem !important;\n margin-right: 0.25rem !important;\n }\n\n .mx-md-2 {\n margin-left: 0.5rem !important;\n margin-right: 0.5rem !important;\n }\n\n .mx-md-3 {\n margin-left: 1rem !important;\n margin-right: 1rem !important;\n }\n\n .mx-md-4 {\n margin-left: 1.5rem !important;\n margin-right: 1.5rem !important;\n }\n\n .mx-md-5 {\n margin-left: 3rem !important;\n margin-right: 3rem !important;\n }\n\n .mx-md-auto {\n margin-left: auto !important;\n margin-right: auto !important;\n }\n\n .my-md-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n\n .my-md-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n\n .my-md-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n\n .my-md-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n\n .my-md-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n\n .my-md-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n\n .my-md-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n\n .mt-md-0 {\n margin-top: 0 !important;\n }\n\n .mt-md-1 {\n margin-top: 0.25rem !important;\n }\n\n .mt-md-2 {\n margin-top: 0.5rem !important;\n }\n\n .mt-md-3 {\n margin-top: 1rem !important;\n }\n\n .mt-md-4 {\n margin-top: 1.5rem !important;\n }\n\n .mt-md-5 {\n margin-top: 3rem !important;\n }\n\n .mt-md-auto {\n margin-top: auto !important;\n }\n\n .me-md-0 {\n margin-left: 0 !important;\n }\n\n .me-md-1 {\n margin-left: 0.25rem !important;\n }\n\n .me-md-2 {\n margin-left: 0.5rem !important;\n }\n\n .me-md-3 {\n margin-left: 1rem !important;\n }\n\n .me-md-4 {\n margin-left: 1.5rem !important;\n }\n\n .me-md-5 {\n margin-left: 3rem !important;\n }\n\n .me-md-auto {\n margin-left: auto !important;\n }\n\n .mb-md-0 {\n margin-bottom: 0 !important;\n }\n\n .mb-md-1 {\n margin-bottom: 0.25rem !important;\n }\n\n .mb-md-2 {\n margin-bottom: 0.5rem !important;\n }\n\n .mb-md-3 {\n margin-bottom: 1rem !important;\n }\n\n .mb-md-4 {\n margin-bottom: 1.5rem !important;\n }\n\n .mb-md-5 {\n margin-bottom: 3rem !important;\n }\n\n .mb-md-auto {\n margin-bottom: auto !important;\n }\n\n .ms-md-0 {\n margin-right: 0 !important;\n }\n\n .ms-md-1 {\n margin-right: 0.25rem !important;\n }\n\n .ms-md-2 {\n margin-right: 0.5rem !important;\n }\n\n .ms-md-3 {\n margin-right: 1rem !important;\n }\n\n .ms-md-4 {\n margin-right: 1.5rem !important;\n }\n\n .ms-md-5 {\n margin-right: 3rem !important;\n }\n\n .ms-md-auto {\n margin-right: auto !important;\n }\n\n .p-md-0 {\n padding: 0 !important;\n }\n\n .p-md-1 {\n padding: 0.25rem !important;\n }\n\n .p-md-2 {\n padding: 0.5rem !important;\n }\n\n .p-md-3 {\n padding: 1rem !important;\n }\n\n .p-md-4 {\n padding: 1.5rem !important;\n }\n\n .p-md-5 {\n padding: 3rem !important;\n }\n\n .px-md-0 {\n padding-left: 0 !important;\n padding-right: 0 !important;\n }\n\n .px-md-1 {\n padding-left: 0.25rem !important;\n padding-right: 0.25rem !important;\n }\n\n .px-md-2 {\n padding-left: 0.5rem !important;\n padding-right: 0.5rem !important;\n }\n\n .px-md-3 {\n padding-left: 1rem !important;\n padding-right: 1rem !important;\n }\n\n .px-md-4 {\n padding-left: 1.5rem !important;\n padding-right: 1.5rem !important;\n }\n\n .px-md-5 {\n padding-left: 3rem !important;\n padding-right: 3rem !important;\n }\n\n .py-md-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n\n .py-md-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n\n .py-md-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n\n .py-md-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n\n .py-md-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n\n .py-md-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n\n .pt-md-0 {\n padding-top: 0 !important;\n }\n\n .pt-md-1 {\n padding-top: 0.25rem !important;\n }\n\n .pt-md-2 {\n padding-top: 0.5rem !important;\n }\n\n .pt-md-3 {\n padding-top: 1rem !important;\n }\n\n .pt-md-4 {\n padding-top: 1.5rem !important;\n }\n\n .pt-md-5 {\n padding-top: 3rem !important;\n }\n\n .pe-md-0 {\n padding-left: 0 !important;\n }\n\n .pe-md-1 {\n padding-left: 0.25rem !important;\n }\n\n .pe-md-2 {\n padding-left: 0.5rem !important;\n }\n\n .pe-md-3 {\n padding-left: 1rem !important;\n }\n\n .pe-md-4 {\n padding-left: 1.5rem !important;\n }\n\n .pe-md-5 {\n padding-left: 3rem !important;\n }\n\n .pb-md-0 {\n padding-bottom: 0 !important;\n }\n\n .pb-md-1 {\n padding-bottom: 0.25rem !important;\n }\n\n .pb-md-2 {\n padding-bottom: 0.5rem !important;\n }\n\n .pb-md-3 {\n padding-bottom: 1rem !important;\n }\n\n .pb-md-4 {\n padding-bottom: 1.5rem !important;\n }\n\n .pb-md-5 {\n padding-bottom: 3rem !important;\n }\n\n .ps-md-0 {\n padding-right: 0 !important;\n }\n\n .ps-md-1 {\n padding-right: 0.25rem !important;\n }\n\n .ps-md-2 {\n padding-right: 0.5rem !important;\n }\n\n .ps-md-3 {\n padding-right: 1rem !important;\n }\n\n .ps-md-4 {\n padding-right: 1.5rem !important;\n }\n\n .ps-md-5 {\n padding-right: 3rem !important;\n }\n}\n@media (min-width: 992px) {\n .d-lg-inline {\n display: inline !important;\n }\n\n .d-lg-inline-block {\n display: inline-block !important;\n }\n\n .d-lg-block {\n display: block !important;\n }\n\n .d-lg-grid {\n display: grid !important;\n }\n\n .d-lg-table {\n display: table !important;\n }\n\n .d-lg-table-row {\n display: table-row !important;\n }\n\n .d-lg-table-cell {\n display: table-cell !important;\n }\n\n .d-lg-flex {\n display: flex !important;\n }\n\n .d-lg-inline-flex {\n display: inline-flex !important;\n }\n\n .d-lg-none {\n display: none !important;\n }\n\n .flex-lg-fill {\n flex: 1 1 auto !important;\n }\n\n .flex-lg-row {\n flex-direction: row !important;\n }\n\n .flex-lg-column {\n flex-direction: column !important;\n }\n\n .flex-lg-row-reverse {\n flex-direction: row-reverse !important;\n }\n\n .flex-lg-column-reverse {\n flex-direction: column-reverse !important;\n }\n\n .flex-lg-grow-0 {\n flex-grow: 0 !important;\n }\n\n .flex-lg-grow-1 {\n flex-grow: 1 !important;\n }\n\n .flex-lg-shrink-0 {\n flex-shrink: 0 !important;\n }\n\n .flex-lg-shrink-1 {\n flex-shrink: 1 !important;\n }\n\n .flex-lg-wrap {\n flex-wrap: wrap !important;\n }\n\n .flex-lg-nowrap {\n flex-wrap: nowrap !important;\n }\n\n .flex-lg-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n\n .justify-content-lg-start {\n justify-content: flex-start !important;\n }\n\n .justify-content-lg-end {\n justify-content: flex-end !important;\n }\n\n .justify-content-lg-center {\n justify-content: center !important;\n }\n\n .justify-content-lg-between {\n justify-content: space-between !important;\n }\n\n .justify-content-lg-around {\n justify-content: space-around !important;\n }\n\n .justify-content-lg-evenly {\n justify-content: space-evenly !important;\n }\n\n .align-items-lg-start {\n align-items: flex-start !important;\n }\n\n .align-items-lg-end {\n align-items: flex-end !important;\n }\n\n .align-items-lg-center {\n align-items: center !important;\n }\n\n .align-items-lg-baseline {\n align-items: baseline !important;\n }\n\n .align-items-lg-stretch {\n align-items: stretch !important;\n }\n\n .align-content-lg-start {\n align-content: flex-start !important;\n }\n\n .align-content-lg-end {\n align-content: flex-end !important;\n }\n\n .align-content-lg-center {\n align-content: center !important;\n }\n\n .align-content-lg-between {\n align-content: space-between !important;\n }\n\n .align-content-lg-around {\n align-content: space-around !important;\n }\n\n .align-content-lg-stretch {\n align-content: stretch !important;\n }\n\n .align-self-lg-auto {\n align-self: auto !important;\n }\n\n .align-self-lg-start {\n align-self: flex-start !important;\n }\n\n .align-self-lg-end {\n align-self: flex-end !important;\n }\n\n .align-self-lg-center {\n align-self: center !important;\n }\n\n .align-self-lg-baseline {\n align-self: baseline !important;\n }\n\n .align-self-lg-stretch {\n align-self: stretch !important;\n }\n\n .order-lg-first {\n order: -1 !important;\n }\n\n .order-lg-0 {\n order: 0 !important;\n }\n\n .order-lg-1 {\n order: 1 !important;\n }\n\n .order-lg-2 {\n order: 2 !important;\n }\n\n .order-lg-3 {\n order: 3 !important;\n }\n\n .order-lg-4 {\n order: 4 !important;\n }\n\n .order-lg-5 {\n order: 5 !important;\n }\n\n .order-lg-last {\n order: 6 !important;\n }\n\n .m-lg-0 {\n margin: 0 !important;\n }\n\n .m-lg-1 {\n margin: 0.25rem !important;\n }\n\n .m-lg-2 {\n margin: 0.5rem !important;\n }\n\n .m-lg-3 {\n margin: 1rem !important;\n }\n\n .m-lg-4 {\n margin: 1.5rem !important;\n }\n\n .m-lg-5 {\n margin: 3rem !important;\n }\n\n .m-lg-auto {\n margin: auto !important;\n }\n\n .mx-lg-0 {\n margin-left: 0 !important;\n margin-right: 0 !important;\n }\n\n .mx-lg-1 {\n margin-left: 0.25rem !important;\n margin-right: 0.25rem !important;\n }\n\n .mx-lg-2 {\n margin-left: 0.5rem !important;\n margin-right: 0.5rem !important;\n }\n\n .mx-lg-3 {\n margin-left: 1rem !important;\n margin-right: 1rem !important;\n }\n\n .mx-lg-4 {\n margin-left: 1.5rem !important;\n margin-right: 1.5rem !important;\n }\n\n .mx-lg-5 {\n margin-left: 3rem !important;\n margin-right: 3rem !important;\n }\n\n .mx-lg-auto {\n margin-left: auto !important;\n margin-right: auto !important;\n }\n\n .my-lg-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n\n .my-lg-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n\n .my-lg-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n\n .my-lg-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n\n .my-lg-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n\n .my-lg-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n\n .my-lg-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n\n .mt-lg-0 {\n margin-top: 0 !important;\n }\n\n .mt-lg-1 {\n margin-top: 0.25rem !important;\n }\n\n .mt-lg-2 {\n margin-top: 0.5rem !important;\n }\n\n .mt-lg-3 {\n margin-top: 1rem !important;\n }\n\n .mt-lg-4 {\n margin-top: 1.5rem !important;\n }\n\n .mt-lg-5 {\n margin-top: 3rem !important;\n }\n\n .mt-lg-auto {\n margin-top: auto !important;\n }\n\n .me-lg-0 {\n margin-left: 0 !important;\n }\n\n .me-lg-1 {\n margin-left: 0.25rem !important;\n }\n\n .me-lg-2 {\n margin-left: 0.5rem !important;\n }\n\n .me-lg-3 {\n margin-left: 1rem !important;\n }\n\n .me-lg-4 {\n margin-left: 1.5rem !important;\n }\n\n .me-lg-5 {\n margin-left: 3rem !important;\n }\n\n .me-lg-auto {\n margin-left: auto !important;\n }\n\n .mb-lg-0 {\n margin-bottom: 0 !important;\n }\n\n .mb-lg-1 {\n margin-bottom: 0.25rem !important;\n }\n\n .mb-lg-2 {\n margin-bottom: 0.5rem !important;\n }\n\n .mb-lg-3 {\n margin-bottom: 1rem !important;\n }\n\n .mb-lg-4 {\n margin-bottom: 1.5rem !important;\n }\n\n .mb-lg-5 {\n margin-bottom: 3rem !important;\n }\n\n .mb-lg-auto {\n margin-bottom: auto !important;\n }\n\n .ms-lg-0 {\n margin-right: 0 !important;\n }\n\n .ms-lg-1 {\n margin-right: 0.25rem !important;\n }\n\n .ms-lg-2 {\n margin-right: 0.5rem !important;\n }\n\n .ms-lg-3 {\n margin-right: 1rem !important;\n }\n\n .ms-lg-4 {\n margin-right: 1.5rem !important;\n }\n\n .ms-lg-5 {\n margin-right: 3rem !important;\n }\n\n .ms-lg-auto {\n margin-right: auto !important;\n }\n\n .p-lg-0 {\n padding: 0 !important;\n }\n\n .p-lg-1 {\n padding: 0.25rem !important;\n }\n\n .p-lg-2 {\n padding: 0.5rem !important;\n }\n\n .p-lg-3 {\n padding: 1rem !important;\n }\n\n .p-lg-4 {\n padding: 1.5rem !important;\n }\n\n .p-lg-5 {\n padding: 3rem !important;\n }\n\n .px-lg-0 {\n padding-left: 0 !important;\n padding-right: 0 !important;\n }\n\n .px-lg-1 {\n padding-left: 0.25rem !important;\n padding-right: 0.25rem !important;\n }\n\n .px-lg-2 {\n padding-left: 0.5rem !important;\n padding-right: 0.5rem !important;\n }\n\n .px-lg-3 {\n padding-left: 1rem !important;\n padding-right: 1rem !important;\n }\n\n .px-lg-4 {\n padding-left: 1.5rem !important;\n padding-right: 1.5rem !important;\n }\n\n .px-lg-5 {\n padding-left: 3rem !important;\n padding-right: 3rem !important;\n }\n\n .py-lg-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n\n .py-lg-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n\n .py-lg-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n\n .py-lg-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n\n .py-lg-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n\n .py-lg-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n\n .pt-lg-0 {\n padding-top: 0 !important;\n }\n\n .pt-lg-1 {\n padding-top: 0.25rem !important;\n }\n\n .pt-lg-2 {\n padding-top: 0.5rem !important;\n }\n\n .pt-lg-3 {\n padding-top: 1rem !important;\n }\n\n .pt-lg-4 {\n padding-top: 1.5rem !important;\n }\n\n .pt-lg-5 {\n padding-top: 3rem !important;\n }\n\n .pe-lg-0 {\n padding-left: 0 !important;\n }\n\n .pe-lg-1 {\n padding-left: 0.25rem !important;\n }\n\n .pe-lg-2 {\n padding-left: 0.5rem !important;\n }\n\n .pe-lg-3 {\n padding-left: 1rem !important;\n }\n\n .pe-lg-4 {\n padding-left: 1.5rem !important;\n }\n\n .pe-lg-5 {\n padding-left: 3rem !important;\n }\n\n .pb-lg-0 {\n padding-bottom: 0 !important;\n }\n\n .pb-lg-1 {\n padding-bottom: 0.25rem !important;\n }\n\n .pb-lg-2 {\n padding-bottom: 0.5rem !important;\n }\n\n .pb-lg-3 {\n padding-bottom: 1rem !important;\n }\n\n .pb-lg-4 {\n padding-bottom: 1.5rem !important;\n }\n\n .pb-lg-5 {\n padding-bottom: 3rem !important;\n }\n\n .ps-lg-0 {\n padding-right: 0 !important;\n }\n\n .ps-lg-1 {\n padding-right: 0.25rem !important;\n }\n\n .ps-lg-2 {\n padding-right: 0.5rem !important;\n }\n\n .ps-lg-3 {\n padding-right: 1rem !important;\n }\n\n .ps-lg-4 {\n padding-right: 1.5rem !important;\n }\n\n .ps-lg-5 {\n padding-right: 3rem !important;\n }\n}\n@media (min-width: 1200px) {\n .d-xl-inline {\n display: inline !important;\n }\n\n .d-xl-inline-block {\n display: inline-block !important;\n }\n\n .d-xl-block {\n display: block !important;\n }\n\n .d-xl-grid {\n display: grid !important;\n }\n\n .d-xl-table {\n display: table !important;\n }\n\n .d-xl-table-row {\n display: table-row !important;\n }\n\n .d-xl-table-cell {\n display: table-cell !important;\n }\n\n .d-xl-flex {\n display: flex !important;\n }\n\n .d-xl-inline-flex {\n display: inline-flex !important;\n }\n\n .d-xl-none {\n display: none !important;\n }\n\n .flex-xl-fill {\n flex: 1 1 auto !important;\n }\n\n .flex-xl-row {\n flex-direction: row !important;\n }\n\n .flex-xl-column {\n flex-direction: column !important;\n }\n\n .flex-xl-row-reverse {\n flex-direction: row-reverse !important;\n }\n\n .flex-xl-column-reverse {\n flex-direction: column-reverse !important;\n }\n\n .flex-xl-grow-0 {\n flex-grow: 0 !important;\n }\n\n .flex-xl-grow-1 {\n flex-grow: 1 !important;\n }\n\n .flex-xl-shrink-0 {\n flex-shrink: 0 !important;\n }\n\n .flex-xl-shrink-1 {\n flex-shrink: 1 !important;\n }\n\n .flex-xl-wrap {\n flex-wrap: wrap !important;\n }\n\n .flex-xl-nowrap {\n flex-wrap: nowrap !important;\n }\n\n .flex-xl-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n\n .justify-content-xl-start {\n justify-content: flex-start !important;\n }\n\n .justify-content-xl-end {\n justify-content: flex-end !important;\n }\n\n .justify-content-xl-center {\n justify-content: center !important;\n }\n\n .justify-content-xl-between {\n justify-content: space-between !important;\n }\n\n .justify-content-xl-around {\n justify-content: space-around !important;\n }\n\n .justify-content-xl-evenly {\n justify-content: space-evenly !important;\n }\n\n .align-items-xl-start {\n align-items: flex-start !important;\n }\n\n .align-items-xl-end {\n align-items: flex-end !important;\n }\n\n .align-items-xl-center {\n align-items: center !important;\n }\n\n .align-items-xl-baseline {\n align-items: baseline !important;\n }\n\n .align-items-xl-stretch {\n align-items: stretch !important;\n }\n\n .align-content-xl-start {\n align-content: flex-start !important;\n }\n\n .align-content-xl-end {\n align-content: flex-end !important;\n }\n\n .align-content-xl-center {\n align-content: center !important;\n }\n\n .align-content-xl-between {\n align-content: space-between !important;\n }\n\n .align-content-xl-around {\n align-content: space-around !important;\n }\n\n .align-content-xl-stretch {\n align-content: stretch !important;\n }\n\n .align-self-xl-auto {\n align-self: auto !important;\n }\n\n .align-self-xl-start {\n align-self: flex-start !important;\n }\n\n .align-self-xl-end {\n align-self: flex-end !important;\n }\n\n .align-self-xl-center {\n align-self: center !important;\n }\n\n .align-self-xl-baseline {\n align-self: baseline !important;\n }\n\n .align-self-xl-stretch {\n align-self: stretch !important;\n }\n\n .order-xl-first {\n order: -1 !important;\n }\n\n .order-xl-0 {\n order: 0 !important;\n }\n\n .order-xl-1 {\n order: 1 !important;\n }\n\n .order-xl-2 {\n order: 2 !important;\n }\n\n .order-xl-3 {\n order: 3 !important;\n }\n\n .order-xl-4 {\n order: 4 !important;\n }\n\n .order-xl-5 {\n order: 5 !important;\n }\n\n .order-xl-last {\n order: 6 !important;\n }\n\n .m-xl-0 {\n margin: 0 !important;\n }\n\n .m-xl-1 {\n margin: 0.25rem !important;\n }\n\n .m-xl-2 {\n margin: 0.5rem !important;\n }\n\n .m-xl-3 {\n margin: 1rem !important;\n }\n\n .m-xl-4 {\n margin: 1.5rem !important;\n }\n\n .m-xl-5 {\n margin: 3rem !important;\n }\n\n .m-xl-auto {\n margin: auto !important;\n }\n\n .mx-xl-0 {\n margin-left: 0 !important;\n margin-right: 0 !important;\n }\n\n .mx-xl-1 {\n margin-left: 0.25rem !important;\n margin-right: 0.25rem !important;\n }\n\n .mx-xl-2 {\n margin-left: 0.5rem !important;\n margin-right: 0.5rem !important;\n }\n\n .mx-xl-3 {\n margin-left: 1rem !important;\n margin-right: 1rem !important;\n }\n\n .mx-xl-4 {\n margin-left: 1.5rem !important;\n margin-right: 1.5rem !important;\n }\n\n .mx-xl-5 {\n margin-left: 3rem !important;\n margin-right: 3rem !important;\n }\n\n .mx-xl-auto {\n margin-left: auto !important;\n margin-right: auto !important;\n }\n\n .my-xl-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n\n .my-xl-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n\n .my-xl-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n\n .my-xl-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n\n .my-xl-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n\n .my-xl-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n\n .my-xl-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n\n .mt-xl-0 {\n margin-top: 0 !important;\n }\n\n .mt-xl-1 {\n margin-top: 0.25rem !important;\n }\n\n .mt-xl-2 {\n margin-top: 0.5rem !important;\n }\n\n .mt-xl-3 {\n margin-top: 1rem !important;\n }\n\n .mt-xl-4 {\n margin-top: 1.5rem !important;\n }\n\n .mt-xl-5 {\n margin-top: 3rem !important;\n }\n\n .mt-xl-auto {\n margin-top: auto !important;\n }\n\n .me-xl-0 {\n margin-left: 0 !important;\n }\n\n .me-xl-1 {\n margin-left: 0.25rem !important;\n }\n\n .me-xl-2 {\n margin-left: 0.5rem !important;\n }\n\n .me-xl-3 {\n margin-left: 1rem !important;\n }\n\n .me-xl-4 {\n margin-left: 1.5rem !important;\n }\n\n .me-xl-5 {\n margin-left: 3rem !important;\n }\n\n .me-xl-auto {\n margin-left: auto !important;\n }\n\n .mb-xl-0 {\n margin-bottom: 0 !important;\n }\n\n .mb-xl-1 {\n margin-bottom: 0.25rem !important;\n }\n\n .mb-xl-2 {\n margin-bottom: 0.5rem !important;\n }\n\n .mb-xl-3 {\n margin-bottom: 1rem !important;\n }\n\n .mb-xl-4 {\n margin-bottom: 1.5rem !important;\n }\n\n .mb-xl-5 {\n margin-bottom: 3rem !important;\n }\n\n .mb-xl-auto {\n margin-bottom: auto !important;\n }\n\n .ms-xl-0 {\n margin-right: 0 !important;\n }\n\n .ms-xl-1 {\n margin-right: 0.25rem !important;\n }\n\n .ms-xl-2 {\n margin-right: 0.5rem !important;\n }\n\n .ms-xl-3 {\n margin-right: 1rem !important;\n }\n\n .ms-xl-4 {\n margin-right: 1.5rem !important;\n }\n\n .ms-xl-5 {\n margin-right: 3rem !important;\n }\n\n .ms-xl-auto {\n margin-right: auto !important;\n }\n\n .p-xl-0 {\n padding: 0 !important;\n }\n\n .p-xl-1 {\n padding: 0.25rem !important;\n }\n\n .p-xl-2 {\n padding: 0.5rem !important;\n }\n\n .p-xl-3 {\n padding: 1rem !important;\n }\n\n .p-xl-4 {\n padding: 1.5rem !important;\n }\n\n .p-xl-5 {\n padding: 3rem !important;\n }\n\n .px-xl-0 {\n padding-left: 0 !important;\n padding-right: 0 !important;\n }\n\n .px-xl-1 {\n padding-left: 0.25rem !important;\n padding-right: 0.25rem !important;\n }\n\n .px-xl-2 {\n padding-left: 0.5rem !important;\n padding-right: 0.5rem !important;\n }\n\n .px-xl-3 {\n padding-left: 1rem !important;\n padding-right: 1rem !important;\n }\n\n .px-xl-4 {\n padding-left: 1.5rem !important;\n padding-right: 1.5rem !important;\n }\n\n .px-xl-5 {\n padding-left: 3rem !important;\n padding-right: 3rem !important;\n }\n\n .py-xl-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n\n .py-xl-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n\n .py-xl-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n\n .py-xl-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n\n .py-xl-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n\n .py-xl-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n\n .pt-xl-0 {\n padding-top: 0 !important;\n }\n\n .pt-xl-1 {\n padding-top: 0.25rem !important;\n }\n\n .pt-xl-2 {\n padding-top: 0.5rem !important;\n }\n\n .pt-xl-3 {\n padding-top: 1rem !important;\n }\n\n .pt-xl-4 {\n padding-top: 1.5rem !important;\n }\n\n .pt-xl-5 {\n padding-top: 3rem !important;\n }\n\n .pe-xl-0 {\n padding-left: 0 !important;\n }\n\n .pe-xl-1 {\n padding-left: 0.25rem !important;\n }\n\n .pe-xl-2 {\n padding-left: 0.5rem !important;\n }\n\n .pe-xl-3 {\n padding-left: 1rem !important;\n }\n\n .pe-xl-4 {\n padding-left: 1.5rem !important;\n }\n\n .pe-xl-5 {\n padding-left: 3rem !important;\n }\n\n .pb-xl-0 {\n padding-bottom: 0 !important;\n }\n\n .pb-xl-1 {\n padding-bottom: 0.25rem !important;\n }\n\n .pb-xl-2 {\n padding-bottom: 0.5rem !important;\n }\n\n .pb-xl-3 {\n padding-bottom: 1rem !important;\n }\n\n .pb-xl-4 {\n padding-bottom: 1.5rem !important;\n }\n\n .pb-xl-5 {\n padding-bottom: 3rem !important;\n }\n\n .ps-xl-0 {\n padding-right: 0 !important;\n }\n\n .ps-xl-1 {\n padding-right: 0.25rem !important;\n }\n\n .ps-xl-2 {\n padding-right: 0.5rem !important;\n }\n\n .ps-xl-3 {\n padding-right: 1rem !important;\n }\n\n .ps-xl-4 {\n padding-right: 1.5rem !important;\n }\n\n .ps-xl-5 {\n padding-right: 3rem !important;\n }\n}\n@media (min-width: 1400px) {\n .d-xxl-inline {\n display: inline !important;\n }\n\n .d-xxl-inline-block {\n display: inline-block !important;\n }\n\n .d-xxl-block {\n display: block !important;\n }\n\n .d-xxl-grid {\n display: grid !important;\n }\n\n .d-xxl-table {\n display: table !important;\n }\n\n .d-xxl-table-row {\n display: table-row !important;\n }\n\n .d-xxl-table-cell {\n display: table-cell !important;\n }\n\n .d-xxl-flex {\n display: flex !important;\n }\n\n .d-xxl-inline-flex {\n display: inline-flex !important;\n }\n\n .d-xxl-none {\n display: none !important;\n }\n\n .flex-xxl-fill {\n flex: 1 1 auto !important;\n }\n\n .flex-xxl-row {\n flex-direction: row !important;\n }\n\n .flex-xxl-column {\n flex-direction: column !important;\n }\n\n .flex-xxl-row-reverse {\n flex-direction: row-reverse !important;\n }\n\n .flex-xxl-column-reverse {\n flex-direction: column-reverse !important;\n }\n\n .flex-xxl-grow-0 {\n flex-grow: 0 !important;\n }\n\n .flex-xxl-grow-1 {\n flex-grow: 1 !important;\n }\n\n .flex-xxl-shrink-0 {\n flex-shrink: 0 !important;\n }\n\n .flex-xxl-shrink-1 {\n flex-shrink: 1 !important;\n }\n\n .flex-xxl-wrap {\n flex-wrap: wrap !important;\n }\n\n .flex-xxl-nowrap {\n flex-wrap: nowrap !important;\n }\n\n .flex-xxl-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n\n .justify-content-xxl-start {\n justify-content: flex-start !important;\n }\n\n .justify-content-xxl-end {\n justify-content: flex-end !important;\n }\n\n .justify-content-xxl-center {\n justify-content: center !important;\n }\n\n .justify-content-xxl-between {\n justify-content: space-between !important;\n }\n\n .justify-content-xxl-around {\n justify-content: space-around !important;\n }\n\n .justify-content-xxl-evenly {\n justify-content: space-evenly !important;\n }\n\n .align-items-xxl-start {\n align-items: flex-start !important;\n }\n\n .align-items-xxl-end {\n align-items: flex-end !important;\n }\n\n .align-items-xxl-center {\n align-items: center !important;\n }\n\n .align-items-xxl-baseline {\n align-items: baseline !important;\n }\n\n .align-items-xxl-stretch {\n align-items: stretch !important;\n }\n\n .align-content-xxl-start {\n align-content: flex-start !important;\n }\n\n .align-content-xxl-end {\n align-content: flex-end !important;\n }\n\n .align-content-xxl-center {\n align-content: center !important;\n }\n\n .align-content-xxl-between {\n align-content: space-between !important;\n }\n\n .align-content-xxl-around {\n align-content: space-around !important;\n }\n\n .align-content-xxl-stretch {\n align-content: stretch !important;\n }\n\n .align-self-xxl-auto {\n align-self: auto !important;\n }\n\n .align-self-xxl-start {\n align-self: flex-start !important;\n }\n\n .align-self-xxl-end {\n align-self: flex-end !important;\n }\n\n .align-self-xxl-center {\n align-self: center !important;\n }\n\n .align-self-xxl-baseline {\n align-self: baseline !important;\n }\n\n .align-self-xxl-stretch {\n align-self: stretch !important;\n }\n\n .order-xxl-first {\n order: -1 !important;\n }\n\n .order-xxl-0 {\n order: 0 !important;\n }\n\n .order-xxl-1 {\n order: 1 !important;\n }\n\n .order-xxl-2 {\n order: 2 !important;\n }\n\n .order-xxl-3 {\n order: 3 !important;\n }\n\n .order-xxl-4 {\n order: 4 !important;\n }\n\n .order-xxl-5 {\n order: 5 !important;\n }\n\n .order-xxl-last {\n order: 6 !important;\n }\n\n .m-xxl-0 {\n margin: 0 !important;\n }\n\n .m-xxl-1 {\n margin: 0.25rem !important;\n }\n\n .m-xxl-2 {\n margin: 0.5rem !important;\n }\n\n .m-xxl-3 {\n margin: 1rem !important;\n }\n\n .m-xxl-4 {\n margin: 1.5rem !important;\n }\n\n .m-xxl-5 {\n margin: 3rem !important;\n }\n\n .m-xxl-auto {\n margin: auto !important;\n }\n\n .mx-xxl-0 {\n margin-left: 0 !important;\n margin-right: 0 !important;\n }\n\n .mx-xxl-1 {\n margin-left: 0.25rem !important;\n margin-right: 0.25rem !important;\n }\n\n .mx-xxl-2 {\n margin-left: 0.5rem !important;\n margin-right: 0.5rem !important;\n }\n\n .mx-xxl-3 {\n margin-left: 1rem !important;\n margin-right: 1rem !important;\n }\n\n .mx-xxl-4 {\n margin-left: 1.5rem !important;\n margin-right: 1.5rem !important;\n }\n\n .mx-xxl-5 {\n margin-left: 3rem !important;\n margin-right: 3rem !important;\n }\n\n .mx-xxl-auto {\n margin-left: auto !important;\n margin-right: auto !important;\n }\n\n .my-xxl-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n\n .my-xxl-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n\n .my-xxl-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n\n .my-xxl-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n\n .my-xxl-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n\n .my-xxl-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n\n .my-xxl-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n\n .mt-xxl-0 {\n margin-top: 0 !important;\n }\n\n .mt-xxl-1 {\n margin-top: 0.25rem !important;\n }\n\n .mt-xxl-2 {\n margin-top: 0.5rem !important;\n }\n\n .mt-xxl-3 {\n margin-top: 1rem !important;\n }\n\n .mt-xxl-4 {\n margin-top: 1.5rem !important;\n }\n\n .mt-xxl-5 {\n margin-top: 3rem !important;\n }\n\n .mt-xxl-auto {\n margin-top: auto !important;\n }\n\n .me-xxl-0 {\n margin-left: 0 !important;\n }\n\n .me-xxl-1 {\n margin-left: 0.25rem !important;\n }\n\n .me-xxl-2 {\n margin-left: 0.5rem !important;\n }\n\n .me-xxl-3 {\n margin-left: 1rem !important;\n }\n\n .me-xxl-4 {\n margin-left: 1.5rem !important;\n }\n\n .me-xxl-5 {\n margin-left: 3rem !important;\n }\n\n .me-xxl-auto {\n margin-left: auto !important;\n }\n\n .mb-xxl-0 {\n margin-bottom: 0 !important;\n }\n\n .mb-xxl-1 {\n margin-bottom: 0.25rem !important;\n }\n\n .mb-xxl-2 {\n margin-bottom: 0.5rem !important;\n }\n\n .mb-xxl-3 {\n margin-bottom: 1rem !important;\n }\n\n .mb-xxl-4 {\n margin-bottom: 1.5rem !important;\n }\n\n .mb-xxl-5 {\n margin-bottom: 3rem !important;\n }\n\n .mb-xxl-auto {\n margin-bottom: auto !important;\n }\n\n .ms-xxl-0 {\n margin-right: 0 !important;\n }\n\n .ms-xxl-1 {\n margin-right: 0.25rem !important;\n }\n\n .ms-xxl-2 {\n margin-right: 0.5rem !important;\n }\n\n .ms-xxl-3 {\n margin-right: 1rem !important;\n }\n\n .ms-xxl-4 {\n margin-right: 1.5rem !important;\n }\n\n .ms-xxl-5 {\n margin-right: 3rem !important;\n }\n\n .ms-xxl-auto {\n margin-right: auto !important;\n }\n\n .p-xxl-0 {\n padding: 0 !important;\n }\n\n .p-xxl-1 {\n padding: 0.25rem !important;\n }\n\n .p-xxl-2 {\n padding: 0.5rem !important;\n }\n\n .p-xxl-3 {\n padding: 1rem !important;\n }\n\n .p-xxl-4 {\n padding: 1.5rem !important;\n }\n\n .p-xxl-5 {\n padding: 3rem !important;\n }\n\n .px-xxl-0 {\n padding-left: 0 !important;\n padding-right: 0 !important;\n }\n\n .px-xxl-1 {\n padding-left: 0.25rem !important;\n padding-right: 0.25rem !important;\n }\n\n .px-xxl-2 {\n padding-left: 0.5rem !important;\n padding-right: 0.5rem !important;\n }\n\n .px-xxl-3 {\n padding-left: 1rem !important;\n padding-right: 1rem !important;\n }\n\n .px-xxl-4 {\n padding-left: 1.5rem !important;\n padding-right: 1.5rem !important;\n }\n\n .px-xxl-5 {\n padding-left: 3rem !important;\n padding-right: 3rem !important;\n }\n\n .py-xxl-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n\n .py-xxl-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n\n .py-xxl-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n\n .py-xxl-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n\n .py-xxl-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n\n .py-xxl-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n\n .pt-xxl-0 {\n padding-top: 0 !important;\n }\n\n .pt-xxl-1 {\n padding-top: 0.25rem !important;\n }\n\n .pt-xxl-2 {\n padding-top: 0.5rem !important;\n }\n\n .pt-xxl-3 {\n padding-top: 1rem !important;\n }\n\n .pt-xxl-4 {\n padding-top: 1.5rem !important;\n }\n\n .pt-xxl-5 {\n padding-top: 3rem !important;\n }\n\n .pe-xxl-0 {\n padding-left: 0 !important;\n }\n\n .pe-xxl-1 {\n padding-left: 0.25rem !important;\n }\n\n .pe-xxl-2 {\n padding-left: 0.5rem !important;\n }\n\n .pe-xxl-3 {\n padding-left: 1rem !important;\n }\n\n .pe-xxl-4 {\n padding-left: 1.5rem !important;\n }\n\n .pe-xxl-5 {\n padding-left: 3rem !important;\n }\n\n .pb-xxl-0 {\n padding-bottom: 0 !important;\n }\n\n .pb-xxl-1 {\n padding-bottom: 0.25rem !important;\n }\n\n .pb-xxl-2 {\n padding-bottom: 0.5rem !important;\n }\n\n .pb-xxl-3 {\n padding-bottom: 1rem !important;\n }\n\n .pb-xxl-4 {\n padding-bottom: 1.5rem !important;\n }\n\n .pb-xxl-5 {\n padding-bottom: 3rem !important;\n }\n\n .ps-xxl-0 {\n padding-right: 0 !important;\n }\n\n .ps-xxl-1 {\n padding-right: 0.25rem !important;\n }\n\n .ps-xxl-2 {\n padding-right: 0.5rem !important;\n }\n\n .ps-xxl-3 {\n padding-right: 1rem !important;\n }\n\n .ps-xxl-4 {\n padding-right: 1.5rem !important;\n }\n\n .ps-xxl-5 {\n padding-right: 3rem !important;\n }\n}\n@media print {\n .d-print-inline {\n display: inline !important;\n }\n\n .d-print-inline-block {\n display: inline-block !important;\n }\n\n .d-print-block {\n display: block !important;\n }\n\n .d-print-grid {\n display: grid !important;\n }\n\n .d-print-table {\n display: table !important;\n }\n\n .d-print-table-row {\n display: table-row !important;\n }\n\n .d-print-table-cell {\n display: table-cell !important;\n }\n\n .d-print-flex {\n display: flex !important;\n }\n\n .d-print-inline-flex {\n display: inline-flex !important;\n }\n\n .d-print-none {\n display: none !important;\n }\n}\n/*# sourceMappingURL=bootstrap-grid.rtl.css.map */","// Container mixins\n\n@mixin make-container($gutter: $container-padding-x) {\n width: 100%;\n padding-right: var(--#{$variable-prefix}gutter-x, #{$gutter});\n padding-left: var(--#{$variable-prefix}gutter-x, #{$gutter});\n margin-right: auto;\n margin-left: auto;\n}\n","// Breakpoint viewport sizes and media queries.\n//\n// Breakpoints are defined as a map of (name: minimum width), order from small to large:\n//\n// (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px)\n//\n// The map defined in the `$grid-breakpoints` global variable is used as the `$breakpoints` argument by default.\n\n// Name of the next breakpoint, or null for the last breakpoint.\n//\n// >> breakpoint-next(sm)\n// md\n// >> breakpoint-next(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// md\n// >> breakpoint-next(sm, $breakpoint-names: (xs sm md lg xl))\n// md\n@function breakpoint-next($name, $breakpoints: $grid-breakpoints, $breakpoint-names: map-keys($breakpoints)) {\n $n: index($breakpoint-names, $name);\n @if not $n {\n @error \"breakpoint `#{$name}` not found in `#{$breakpoints}`\";\n }\n @return if($n < length($breakpoint-names), nth($breakpoint-names, $n + 1), null);\n}\n\n// Minimum breakpoint width. Null for the smallest (first) breakpoint.\n//\n// >> breakpoint-min(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// 576px\n@function breakpoint-min($name, $breakpoints: $grid-breakpoints) {\n $min: map-get($breakpoints, $name);\n @return if($min != 0, $min, null);\n}\n\n// Maximum breakpoint width.\n// The maximum value is reduced by 0.02px to work around the limitations of\n// `min-` and `max-` prefixes and viewports with fractional widths.\n// See https://www.w3.org/TR/mediaqueries-4/#mq-min-max\n// Uses 0.02px rather than 0.01px to work around a current rounding bug in Safari.\n// See https://bugs.webkit.org/show_bug.cgi?id=178261\n//\n// >> breakpoint-max(md, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// 767.98px\n@function breakpoint-max($name, $breakpoints: $grid-breakpoints) {\n $max: map-get($breakpoints, $name);\n @return if($max and $max > 0, $max - .02, null);\n}\n\n// Returns a blank string if smallest breakpoint, otherwise returns the name with a dash in front.\n// Useful for making responsive utilities.\n//\n// >> breakpoint-infix(xs, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// \"\" (Returns a blank string)\n// >> breakpoint-infix(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// \"-sm\"\n@function breakpoint-infix($name, $breakpoints: $grid-breakpoints) {\n @return if(breakpoint-min($name, $breakpoints) == null, \"\", \"-#{$name}\");\n}\n\n// Media of at least the minimum breakpoint width. No query for the smallest breakpoint.\n// Makes the @content apply to the given breakpoint and wider.\n@mixin media-breakpoint-up($name, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($name, $breakpoints);\n @if $min {\n @media (min-width: $min) {\n @content;\n }\n } @else {\n @content;\n }\n}\n\n// Media of at most the maximum breakpoint width. No query for the largest breakpoint.\n// Makes the @content apply to the given breakpoint and narrower.\n@mixin media-breakpoint-down($name, $breakpoints: $grid-breakpoints) {\n $max: breakpoint-max($name, $breakpoints);\n @if $max {\n @media (max-width: $max) {\n @content;\n }\n } @else {\n @content;\n }\n}\n\n// Media that spans multiple breakpoint widths.\n// Makes the @content apply between the min and max breakpoints\n@mixin media-breakpoint-between($lower, $upper, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($lower, $breakpoints);\n $max: breakpoint-max($upper, $breakpoints);\n\n @if $min != null and $max != null {\n @media (min-width: $min) and (max-width: $max) {\n @content;\n }\n } @else if $max == null {\n @include media-breakpoint-up($lower, $breakpoints) {\n @content;\n }\n } @else if $min == null {\n @include media-breakpoint-down($upper, $breakpoints) {\n @content;\n }\n }\n}\n\n// Media between the breakpoint's minimum and maximum widths.\n// No minimum for the smallest breakpoint, and no maximum for the largest one.\n// Makes the @content apply only to the given breakpoint, not viewports any wider or narrower.\n@mixin media-breakpoint-only($name, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($name, $breakpoints);\n $next: breakpoint-next($name, $breakpoints);\n $max: breakpoint-max($next);\n\n @if $min != null and $max != null {\n @media (min-width: $min) and (max-width: $max) {\n @content;\n }\n } @else if $max == null {\n @include media-breakpoint-up($name, $breakpoints) {\n @content;\n }\n } @else if $min == null {\n @include media-breakpoint-down($next, $breakpoints) {\n @content;\n }\n }\n}\n","// Row\n//\n// Rows contain your columns.\n\n@if $enable-grid-classes {\n .row {\n @include make-row();\n\n > * {\n @include make-col-ready();\n }\n }\n}\n\n@if $enable-cssgrid {\n .grid {\n display: grid;\n grid-template-rows: repeat(var(--#{$variable-prefix}rows, 1), 1fr);\n grid-template-columns: repeat(var(--#{$variable-prefix}columns, #{$grid-columns}), 1fr);\n gap: var(--#{$variable-prefix}gap, #{$grid-gutter-width});\n\n @include make-cssgrid();\n }\n}\n\n\n// Columns\n//\n// Common styles for small and large grid columns\n\n@if $enable-grid-classes {\n @include make-grid-columns();\n}\n","// Grid system\n//\n// Generate semantic grid columns with these mixins.\n\n@mixin make-row($gutter: $grid-gutter-width) {\n --#{$variable-prefix}gutter-x: #{$gutter};\n --#{$variable-prefix}gutter-y: 0;\n display: flex;\n flex-wrap: wrap;\n // TODO: Revisit calc order after https://github.com/react-bootstrap/react-bootstrap/issues/6039 is fixed\n margin-top: calc(-1 * var(--#{$variable-prefix}gutter-y)); // stylelint-disable-line function-disallowed-list\n margin-right: calc(-.5 * var(--#{$variable-prefix}gutter-x)); // stylelint-disable-line function-disallowed-list\n margin-left: calc(-.5 * var(--#{$variable-prefix}gutter-x)); // stylelint-disable-line function-disallowed-list\n}\n\n@mixin make-col-ready($gutter: $grid-gutter-width) {\n // Add box sizing if only the grid is loaded\n box-sizing: if(variable-exists(include-column-box-sizing) and $include-column-box-sizing, border-box, null);\n // Prevent columns from becoming too narrow when at smaller grid tiers by\n // always setting `width: 100%;`. This works because we set the width\n // later on to override this initial width.\n flex-shrink: 0;\n width: 100%;\n max-width: 100%; // Prevent `.col-auto`, `.col` (& responsive variants) from breaking out the grid\n padding-right: calc(var(--#{$variable-prefix}gutter-x) * .5); // stylelint-disable-line function-disallowed-list\n padding-left: calc(var(--#{$variable-prefix}gutter-x) * .5); // stylelint-disable-line function-disallowed-list\n margin-top: var(--#{$variable-prefix}gutter-y);\n}\n\n@mixin make-col($size: false, $columns: $grid-columns) {\n @if $size {\n flex: 0 0 auto;\n width: percentage(divide($size, $columns));\n\n } @else {\n flex: 1 1 0;\n max-width: 100%;\n }\n}\n\n@mixin make-col-auto() {\n flex: 0 0 auto;\n width: auto;\n}\n\n@mixin make-col-offset($size, $columns: $grid-columns) {\n $num: divide($size, $columns);\n margin-left: if($num == 0, 0, percentage($num));\n}\n\n// Row columns\n//\n// Specify on a parent element(e.g., .row) to force immediate children into NN\n// numberof columns. Supports wrapping to new lines, but does not do a Masonry\n// style grid.\n@mixin row-cols($count) {\n > * {\n flex: 0 0 auto;\n width: divide(100%, $count);\n }\n}\n\n// Framework grid generation\n//\n// Used only by Bootstrap to generate the correct number of grid classes given\n// any value of `$grid-columns`.\n\n@mixin make-grid-columns($columns: $grid-columns, $gutter: $grid-gutter-width, $breakpoints: $grid-breakpoints) {\n @each $breakpoint in map-keys($breakpoints) {\n $infix: breakpoint-infix($breakpoint, $breakpoints);\n\n @include media-breakpoint-up($breakpoint, $breakpoints) {\n // Provide basic `.col-{bp}` classes for equal-width flexbox columns\n .col#{$infix} {\n flex: 1 0 0%; // Flexbugs #4: https://github.com/philipwalton/flexbugs#flexbug-4\n }\n\n .row-cols#{$infix}-auto > * {\n @include make-col-auto();\n }\n\n @if $grid-row-columns > 0 {\n @for $i from 1 through $grid-row-columns {\n .row-cols#{$infix}-#{$i} {\n @include row-cols($i);\n }\n }\n }\n\n .col#{$infix}-auto {\n @include make-col-auto();\n }\n\n @if $columns > 0 {\n @for $i from 1 through $columns {\n .col#{$infix}-#{$i} {\n @include make-col($i, $columns);\n }\n }\n\n // `$columns - 1` because offsetting by the width of an entire row isn't possible\n @for $i from 0 through ($columns - 1) {\n @if not ($infix == \"\" and $i == 0) { // Avoid emitting useless .offset-0\n .offset#{$infix}-#{$i} {\n @include make-col-offset($i, $columns);\n }\n }\n }\n }\n\n // Gutters\n //\n // Make use of `.g-*`, `.gx-*` or `.gy-*` utilities to change spacing between the columns.\n @each $key, $value in $gutters {\n .g#{$infix}-#{$key},\n .gx#{$infix}-#{$key} {\n --#{$variable-prefix}gutter-x: #{$value};\n }\n\n .g#{$infix}-#{$key},\n .gy#{$infix}-#{$key} {\n --#{$variable-prefix}gutter-y: #{$value};\n }\n }\n }\n }\n}\n\n@mixin make-cssgrid($columns: $grid-columns, $breakpoints: $grid-breakpoints) {\n @each $breakpoint in map-keys($breakpoints) {\n $infix: breakpoint-infix($breakpoint, $breakpoints);\n\n @include media-breakpoint-up($breakpoint, $breakpoints) {\n @if $columns > 0 {\n @for $i from 1 through $columns {\n .g-col#{$infix}-#{$i} {\n grid-column: auto / span $i;\n }\n }\n\n // Start with `1` because `0` is and invalid value.\n // Ends with `$columns - 1` because offsetting by the width of an entire row isn't possible.\n @for $i from 1 through ($columns - 1) {\n .g-start#{$infix}-#{$i} {\n grid-column-start: $i;\n }\n }\n }\n }\n }\n}\n","// Utility generator\n// Used to generate utilities & print utilities\n@mixin generate-utility($utility, $infix, $is-rfs-media-query: false) {\n $values: map-get($utility, values);\n\n // If the values are a list or string, convert it into a map\n @if type-of($values) == \"string\" or type-of(nth($values, 1)) != \"list\" {\n $values: zip($values, $values);\n }\n\n @each $key, $value in $values {\n $properties: map-get($utility, property);\n\n // Multiple properties are possible, for example with vertical or horizontal margins or paddings\n @if type-of($properties) == \"string\" {\n $properties: append((), $properties);\n }\n\n // Use custom class if present\n $property-class: if(map-has-key($utility, class), map-get($utility, class), nth($properties, 1));\n $property-class: if($property-class == null, \"\", $property-class);\n\n // State params to generate pseudo-classes\n $state: if(map-has-key($utility, state), map-get($utility, state), ());\n\n $infix: if($property-class == \"\" and str-slice($infix, 1, 1) == \"-\", str-slice($infix, 2), $infix);\n\n // Don't prefix if value key is null (eg. with shadow class)\n $property-class-modifier: if($key, if($property-class == \"\" and $infix == \"\", \"\", \"-\") + $key, \"\");\n\n @if map-get($utility, rfs) {\n // Inside the media query\n @if $is-rfs-media-query {\n $val: rfs-value($value);\n\n // Do not render anything if fluid and non fluid values are the same\n $value: if($val == rfs-fluid-value($value), null, $val);\n }\n @else {\n $value: rfs-fluid-value($value);\n }\n }\n\n $is-css-var: map-get($utility, css-var);\n $is-local-vars: map-get($utility, local-vars);\n $is-rtl: map-get($utility, rtl);\n\n @if $value != null {\n @if $is-rtl == false {\n /* rtl:begin:remove */\n }\n\n @if $is-css-var {\n .#{$property-class + $infix + $property-class-modifier} {\n --#{$variable-prefix}#{$property-class}: #{$value};\n }\n\n @each $pseudo in $state {\n .#{$property-class + $infix + $property-class-modifier}-#{$pseudo}:#{$pseudo} {\n --#{$variable-prefix}#{$property-class}: #{$value};\n }\n }\n } @else {\n .#{$property-class + $infix + $property-class-modifier} {\n @each $property in $properties {\n @if $is-local-vars {\n @each $local-var, $value in $is-local-vars {\n --#{$variable-prefix}#{$local-var}: #{$value};\n }\n }\n #{$property}: $value if($enable-important-utilities, !important, null);\n }\n }\n\n @each $pseudo in $state {\n .#{$property-class + $infix + $property-class-modifier}-#{$pseudo}:#{$pseudo} {\n @each $property in $properties {\n #{$property}: $value if($enable-important-utilities, !important, null);\n }\n }\n }\n }\n\n @if $is-rtl == false {\n /* rtl:end:remove */\n }\n }\n }\n}\n","// Loop over each breakpoint\n@each $breakpoint in map-keys($grid-breakpoints) {\n\n // Generate media query if needed\n @include media-breakpoint-up($breakpoint) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n // Loop over each utility property\n @each $key, $utility in $utilities {\n // The utility can be disabled with `false`, thus check if the utility is a map first\n // Only proceed if responsive media queries are enabled or if it's the base media query\n @if type-of($utility) == \"map\" and (map-get($utility, responsive) or $infix == \"\") {\n @include generate-utility($utility, $infix);\n }\n }\n }\n}\n\n// RFS rescaling\n@media (min-width: $rfs-mq-value) {\n @each $breakpoint in map-keys($grid-breakpoints) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n @if (map-get($grid-breakpoints, $breakpoint) < $rfs-breakpoint) {\n // Loop over each utility property\n @each $key, $utility in $utilities {\n // The utility can be disabled with `false`, thus check if the utility is a map first\n // Only proceed if responsive media queries are enabled or if it's the base media query\n @if type-of($utility) == \"map\" and map-get($utility, rfs) and (map-get($utility, responsive) or $infix == \"\") {\n @include generate-utility($utility, $infix, true);\n }\n }\n }\n }\n}\n\n\n// Print utilities\n@media print {\n @each $key, $utility in $utilities {\n // The utility can be disabled with `false`, thus check if the utility is a map first\n // Then check if the utility needs print styles\n @if type-of($utility) == \"map\" and map-get($utility, print) == true {\n @include generate-utility($utility, \"-print\");\n }\n }\n}\n"]} \ No newline at end of file diff --git a/samples/web-app-file-storage/src/static/bootstrap/css/bootstrap-reboot.css b/samples/web-app-file-storage/src/static/bootstrap/css/bootstrap-reboot.css new file mode 100644 index 0000000..1207a17 --- /dev/null +++ b/samples/web-app-file-storage/src/static/bootstrap/css/bootstrap-reboot.css @@ -0,0 +1,485 @@ +/*! + * Bootstrap Reboot v5.1.3 (https://getbootstrap.com/) + * Copyright 2011-2021 The Bootstrap Authors + * Copyright 2011-2021 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) + * Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md) + */ +:root { + --bs-blue: #0d6efd; + --bs-indigo: #6610f2; + --bs-purple: #6f42c1; + --bs-pink: #d63384; + --bs-red: #dc3545; + --bs-orange: #fd7e14; + --bs-yellow: #ffc107; + --bs-green: #198754; + --bs-teal: #20c997; + --bs-cyan: #0dcaf0; + --bs-white: #fff; + --bs-gray: #6c757d; + --bs-gray-dark: #343a40; + --bs-gray-100: #f8f9fa; + --bs-gray-200: #e9ecef; + --bs-gray-300: #dee2e6; + --bs-gray-400: #ced4da; + --bs-gray-500: #adb5bd; + --bs-gray-600: #6c757d; + --bs-gray-700: #495057; + --bs-gray-800: #343a40; + --bs-gray-900: #212529; + --bs-primary: #0d6efd; + --bs-secondary: #6c757d; + --bs-success: #198754; + --bs-info: #0dcaf0; + --bs-warning: #ffc107; + --bs-danger: #dc3545; + --bs-light: #f8f9fa; + --bs-dark: #212529; + --bs-primary-rgb: 13, 110, 253; + --bs-secondary-rgb: 108, 117, 125; + --bs-success-rgb: 25, 135, 84; + --bs-info-rgb: 13, 202, 240; + --bs-warning-rgb: 255, 193, 7; + --bs-danger-rgb: 220, 53, 69; + --bs-light-rgb: 248, 249, 250; + --bs-dark-rgb: 33, 37, 41; + --bs-white-rgb: 255, 255, 255; + --bs-black-rgb: 0, 0, 0; + --bs-body-color-rgb: 33, 37, 41; + --bs-body-bg-rgb: 255, 255, 255; + --bs-font-sans-serif: system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", "Liberation Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; + --bs-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; + --bs-gradient: linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0)); + --bs-body-font-family: var(--bs-font-sans-serif); + --bs-body-font-size: 1rem; + --bs-body-font-weight: 400; + --bs-body-line-height: 1.5; + --bs-body-color: #212529; + --bs-body-bg: #fff; +} + +*, +*::before, +*::after { + box-sizing: border-box; +} + +@media (prefers-reduced-motion: no-preference) { + :root { + scroll-behavior: smooth; + } +} + +body { + margin: 0; + font-family: var(--bs-body-font-family); + font-size: var(--bs-body-font-size); + font-weight: var(--bs-body-font-weight); + line-height: var(--bs-body-line-height); + color: var(--bs-body-color); + text-align: var(--bs-body-text-align); + background-color: var(--bs-body-bg); + -webkit-text-size-adjust: 100%; + -webkit-tap-highlight-color: rgba(0, 0, 0, 0); +} + +hr { + margin: 1rem 0; + color: inherit; + background-color: currentColor; + border: 0; + opacity: 0.25; +} + +hr:not([size]) { + height: 1px; +} + +h6, h5, h4, h3, h2, h1 { + margin-top: 0; + margin-bottom: 0.5rem; + font-weight: 500; + line-height: 1.2; +} + +h1 { + font-size: calc(1.375rem + 1.5vw); +} +@media (min-width: 1200px) { + h1 { + font-size: 2.5rem; + } +} + +h2 { + font-size: calc(1.325rem + 0.9vw); +} +@media (min-width: 1200px) { + h2 { + font-size: 2rem; + } +} + +h3 { + font-size: calc(1.3rem + 0.6vw); +} +@media (min-width: 1200px) { + h3 { + font-size: 1.75rem; + } +} + +h4 { + font-size: calc(1.275rem + 0.3vw); +} +@media (min-width: 1200px) { + h4 { + font-size: 1.5rem; + } +} + +h5 { + font-size: 1.25rem; +} + +h6 { + font-size: 1rem; +} + +p { + margin-top: 0; + margin-bottom: 1rem; +} + +abbr[title], +abbr[data-bs-original-title] { + -webkit-text-decoration: underline dotted; + text-decoration: underline dotted; + cursor: help; + -webkit-text-decoration-skip-ink: none; + text-decoration-skip-ink: none; +} + +address { + margin-bottom: 1rem; + font-style: normal; + line-height: inherit; +} + +ol, +ul { + padding-left: 2rem; +} + +ol, +ul, +dl { + margin-top: 0; + margin-bottom: 1rem; +} + +ol ol, +ul ul, +ol ul, +ul ol { + margin-bottom: 0; +} + +dt { + font-weight: 700; +} + +dd { + margin-bottom: 0.5rem; + margin-left: 0; +} + +blockquote { + margin: 0 0 1rem; +} + +b, +strong { + font-weight: bolder; +} + +small { + font-size: 0.875em; +} + +mark { + padding: 0.2em; + background-color: #fcf8e3; +} + +sub, +sup { + position: relative; + font-size: 0.75em; + line-height: 0; + vertical-align: baseline; +} + +sub { + bottom: -0.25em; +} + +sup { + top: -0.5em; +} + +a { + color: #0d6efd; + text-decoration: underline; +} +a:hover { + color: #0a58ca; +} + +a:not([href]):not([class]), a:not([href]):not([class]):hover { + color: inherit; + text-decoration: none; +} + +pre, +code, +kbd, +samp { + font-family: var(--bs-font-monospace); + font-size: 1em; + direction: ltr /* rtl:ignore */; + unicode-bidi: bidi-override; +} + +pre { + display: block; + margin-top: 0; + margin-bottom: 1rem; + overflow: auto; + font-size: 0.875em; +} +pre code { + font-size: inherit; + color: inherit; + word-break: normal; +} + +code { + font-size: 0.875em; + color: #d63384; + word-wrap: break-word; +} +a > code { + color: inherit; +} + +kbd { + padding: 0.2rem 0.4rem; + font-size: 0.875em; + color: #fff; + background-color: #212529; + border-radius: 0.2rem; +} +kbd kbd { + padding: 0; + font-size: 1em; + font-weight: 700; +} + +figure { + margin: 0 0 1rem; +} + +img, +svg { + vertical-align: middle; +} + +table { + caption-side: bottom; + border-collapse: collapse; +} + +caption { + padding-top: 0.5rem; + padding-bottom: 0.5rem; + color: #6c757d; + text-align: left; +} + +th { + text-align: inherit; + text-align: -webkit-match-parent; +} + +thead, +tbody, +tfoot, +tr, +td, +th { + border-color: inherit; + border-style: solid; + border-width: 0; +} + +label { + display: inline-block; +} + +button { + border-radius: 0; +} + +button:focus:not(:focus-visible) { + outline: 0; +} + +input, +button, +select, +optgroup, +textarea { + margin: 0; + font-family: inherit; + font-size: inherit; + line-height: inherit; +} + +button, +select { + text-transform: none; +} + +[role=button] { + cursor: pointer; +} + +select { + word-wrap: normal; +} +select:disabled { + opacity: 1; +} + +[list]::-webkit-calendar-picker-indicator { + display: none; +} + +button, +[type=button], +[type=reset], +[type=submit] { + -webkit-appearance: button; +} +button:not(:disabled), +[type=button]:not(:disabled), +[type=reset]:not(:disabled), +[type=submit]:not(:disabled) { + cursor: pointer; +} + +::-moz-focus-inner { + padding: 0; + border-style: none; +} + +textarea { + resize: vertical; +} + +fieldset { + min-width: 0; + padding: 0; + margin: 0; + border: 0; +} + +legend { + float: left; + width: 100%; + padding: 0; + margin-bottom: 0.5rem; + font-size: calc(1.275rem + 0.3vw); + line-height: inherit; +} +@media (min-width: 1200px) { + legend { + font-size: 1.5rem; + } +} +legend + * { + clear: left; +} + +::-webkit-datetime-edit-fields-wrapper, +::-webkit-datetime-edit-text, +::-webkit-datetime-edit-minute, +::-webkit-datetime-edit-hour-field, +::-webkit-datetime-edit-day-field, +::-webkit-datetime-edit-month-field, +::-webkit-datetime-edit-year-field { + padding: 0; +} + +::-webkit-inner-spin-button { + height: auto; +} + +[type=search] { + outline-offset: -2px; + -webkit-appearance: textfield; +} + +/* rtl:raw: +[type="tel"], +[type="url"], +[type="email"], +[type="number"] { + direction: ltr; +} +*/ +::-webkit-search-decoration { + -webkit-appearance: none; +} + +::-webkit-color-swatch-wrapper { + padding: 0; +} + +::-webkit-file-upload-button { + font: inherit; +} + +::file-selector-button { + font: inherit; +} + +::-webkit-file-upload-button { + font: inherit; + -webkit-appearance: button; +} + +output { + display: inline-block; +} + +iframe { + border: 0; +} + +summary { + display: list-item; + cursor: pointer; +} + +progress { + vertical-align: baseline; +} + +[hidden] { + display: none !important; +} + +/*# sourceMappingURL=bootstrap-reboot.css.map */ \ No newline at end of file diff --git a/samples/web-app-file-storage/src/static/bootstrap/css/bootstrap-reboot.css.map b/samples/web-app-file-storage/src/static/bootstrap/css/bootstrap-reboot.css.map new file mode 100644 index 0000000..71177ef --- /dev/null +++ b/samples/web-app-file-storage/src/static/bootstrap/css/bootstrap-reboot.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["../../scss/bootstrap-reboot.scss","../../scss/_root.scss","bootstrap-reboot.css","../../scss/_reboot.scss","../../scss/vendor/_rfs.scss","../../scss/_variables.scss","../../scss/mixins/_border-radius.scss"],"names":[],"mappings":"AAAA;;;;;;EAAA;ACAA;EAQI,kBAAA;EAAA,oBAAA;EAAA,oBAAA;EAAA,kBAAA;EAAA,iBAAA;EAAA,oBAAA;EAAA,oBAAA;EAAA,mBAAA;EAAA,kBAAA;EAAA,kBAAA;EAAA,gBAAA;EAAA,kBAAA;EAAA,uBAAA;EAIA,sBAAA;EAAA,sBAAA;EAAA,sBAAA;EAAA,sBAAA;EAAA,sBAAA;EAAA,sBAAA;EAAA,sBAAA;EAAA,sBAAA;EAAA,sBAAA;EAIA,qBAAA;EAAA,uBAAA;EAAA,qBAAA;EAAA,kBAAA;EAAA,qBAAA;EAAA,oBAAA;EAAA,mBAAA;EAAA,kBAAA;EAIA,8BAAA;EAAA,iCAAA;EAAA,6BAAA;EAAA,2BAAA;EAAA,6BAAA;EAAA,4BAAA;EAAA,6BAAA;EAAA,yBAAA;EAGF,6BAAA;EACA,uBAAA;EACA,+BAAA;EACA,+BAAA;EAMA,qNAAA;EACA,yGAAA;EACA,yFAAA;EAQA,gDAAA;EACA,yBAAA;EACA,0BAAA;EACA,0BAAA;EACA,wBAAA;EAIA,kBAAA;ACSF;;AC5CA;;;EAGE,sBAAA;AD+CF;;AChCI;EANJ;IAOM,uBAAA;EDoCJ;AACF;;ACvBA;EACE,SAAA;EACA,uCAAA;ECmPI,mCALI;ED5OR,uCAAA;EACA,uCAAA;EACA,2BAAA;EACA,qCAAA;EACA,mCAAA;EACA,8BAAA;EACA,6CAAA;AD0BF;;AChBA;EACE,cAAA;EACA,cE+kB4B;EF9kB5B,8BAAA;EACA,SAAA;EACA,aE8kB4B;AH3jB9B;;AChBA;EACE,WEwb4B;AHra9B;;ACTA;EACE,aAAA;EACA,qBEohB4B;EFjhB5B,gBEohB4B;EFnhB5B,gBEohB4B;AH1gB9B;;ACNA;ECwMQ,iCAAA;AF9LR;AE4BI;EDtCJ;IC+MQ,iBAAA;EFjMN;AACF;;ACVA;ECmMQ,iCAAA;AFrLR;AEmBI;EDjCJ;IC0MQ,eAAA;EFxLN;AACF;;ACdA;EC8LQ,+BAAA;AF5KR;AEUI;ED5BJ;ICqMQ,kBAAA;EF/KN;AACF;;AClBA;ECyLQ,iCAAA;AFnKR;AECI;EDvBJ;ICgMQ,iBAAA;EFtKN;AACF;;ACtBA;ECgLM,kBALI;AFjJV;;ACrBA;EC2KM,eALI;AF7IV;;ACdA;EACE,aAAA;EACA,mBEkU0B;AHjT5B;;ACNA;;EAEE,yCAAA;EAAA,iCAAA;EACA,YAAA;EACA,sCAAA;EAAA,8BAAA;ADSF;;ACHA;EACE,mBAAA;EACA,kBAAA;EACA,oBAAA;ADMF;;ACAA;;EAEE,kBAAA;ADGF;;ACAA;;;EAGE,aAAA;EACA,mBAAA;ADGF;;ACAA;;;;EAIE,gBAAA;ADGF;;ACAA;EACE,gBEuZ4B;AHpZ9B;;ACEA;EACE,qBAAA;EACA,cAAA;ADCF;;ACKA;EACE,gBAAA;ADFF;;ACUA;;EAEE,mBEgY4B;AHvY9B;;ACeA;EC4EM,kBALI;AFlFV;;ACkBA;EACE,cE4b4B;EF3b5B,yBEmc4B;AHld9B;;ACwBA;;EAEE,kBAAA;ECwDI,iBALI;EDjDR,cAAA;EACA,wBAAA;ADrBF;;ACwBA;EAAM,eAAA;ADpBN;;ACqBA;EAAM,WAAA;ADjBN;;ACsBA;EACE,cEpNQ;EFqNR,0BEkMwC;AHrN1C;ACqBE;EACE,cEiMsC;AHpN1C;;AC8BE;EAEE,cAAA;EACA,qBAAA;AD5BJ;;ACmCA;;;;EAIE,qCE6S4B;ED/RxB,cALI;EDPR,+BAAA;EACA,2BAAA;ADhCF;;ACuCA;EACE,cAAA;EACA,aAAA;EACA,mBAAA;EACA,cAAA;ECAI,kBALI;AF9BV;ACwCE;ECLI,kBALI;EDYN,cAAA;EACA,kBAAA;ADtCJ;;AC0CA;ECZM,kBALI;EDmBR,cE1QQ;EF2QR,qBAAA;ADvCF;AC0CE;EACE,cAAA;ADxCJ;;AC4CA;EACE,sBAAA;ECxBI,kBALI;ED+BR,WEvTS;EFwTT,yBE/SS;ECEP,qBAAA;AJqQJ;AC2CE;EACE,UAAA;EC/BE,cALI;EDsCN,gBE0Q0B;AHnT9B;;ACkDA;EACE,gBAAA;AD/CF;;ACqDA;;EAEE,sBAAA;ADlDF;;AC0DA;EACE,oBAAA;EACA,yBAAA;ADvDF;;AC0DA;EACE,mBEwU4B;EFvU5B,sBEuU4B;EFtU5B,cE1VS;EF2VT,gBAAA;ADvDF;;AC8DA;EAEE,mBAAA;EACA,gCAAA;AD5DF;;AC+DA;;;;;;EAME,qBAAA;EACA,mBAAA;EACA,eAAA;AD5DF;;ACoEA;EACE,qBAAA;ADjEF;;ACuEA;EAEE,gBAAA;ADrEF;;AC6EA;EACE,UAAA;AD1EF;;AC+EA;;;;;EAKE,SAAA;EACA,oBAAA;EC9HI,kBALI;EDqIR,oBAAA;AD5EF;;ACgFA;;EAEE,oBAAA;AD7EF;;ACkFA;EACE,eAAA;AD/EF;;ACkFA;EAGE,iBAAA;ADjFF;ACoFE;EACE,UAAA;ADlFJ;;ACyFA;EACE,aAAA;ADtFF;;AC8FA;;;;EAIE,0BAAA;AD3FF;AC8FI;;;;EACE,eAAA;ADzFN;;ACgGA;EACE,UAAA;EACA,kBAAA;AD7FF;;ACkGA;EACE,gBAAA;AD/FF;;ACyGA;EACE,YAAA;EACA,UAAA;EACA,SAAA;EACA,SAAA;ADtGF;;AC8GA;EACE,WAAA;EACA,WAAA;EACA,UAAA;EACA,qBE6J4B;EDhXtB,iCAAA;EDsNN,oBAAA;AD5GF;AE5QI;EDiXJ;ICxMQ,iBAAA;EFuGN;AACF;ACyGE;EACE,WAAA;ADvGJ;;AC8GA;;;;;;;EAOE,UAAA;AD3GF;;AC8GA;EACE,YAAA;AD3GF;;ACoHA;EACE,oBAAA;EACA,6BAAA;ADjHF;;ACyHA;;;;;;;CAAA;AAWA;EACE,wBAAA;ADzHF;;AC8HA;EACE,UAAA;AD3HF;;ACiIA;EACE,aAAA;AD9HF;;AC6HA;EACE,aAAA;AD9HF;;ACoIA;EACE,aAAA;EACA,0BAAA;ADjIF;;ACsIA;EACE,qBAAA;ADnIF;;ACwIA;EACE,SAAA;ADrIF;;AC4IA;EACE,kBAAA;EACA,eAAA;ADzIF;;ACiJA;EACE,wBAAA;AD9IF;;ACsJA;EACE,wBAAA;ADnJF","file":"bootstrap-reboot.css","sourcesContent":["/*!\n * Bootstrap Reboot v5.1.3 (https://getbootstrap.com/)\n * Copyright 2011-2021 The Bootstrap Authors\n * Copyright 2011-2021 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md)\n */\n\n@import \"functions\";\n@import \"variables\";\n@import \"mixins\";\n@import \"root\";\n@import \"reboot\";\n",":root {\n // Note: Custom variable values only support SassScript inside `#{}`.\n\n // Colors\n //\n // Generate palettes for full colors, grays, and theme colors.\n\n @each $color, $value in $colors {\n --#{$variable-prefix}#{$color}: #{$value};\n }\n\n @each $color, $value in $grays {\n --#{$variable-prefix}gray-#{$color}: #{$value};\n }\n\n @each $color, $value in $theme-colors {\n --#{$variable-prefix}#{$color}: #{$value};\n }\n\n @each $color, $value in $theme-colors-rgb {\n --#{$variable-prefix}#{$color}-rgb: #{$value};\n }\n\n --#{$variable-prefix}white-rgb: #{to-rgb($white)};\n --#{$variable-prefix}black-rgb: #{to-rgb($black)};\n --#{$variable-prefix}body-color-rgb: #{to-rgb($body-color)};\n --#{$variable-prefix}body-bg-rgb: #{to-rgb($body-bg)};\n\n // Fonts\n\n // Note: Use `inspect` for lists so that quoted items keep the quotes.\n // See https://github.com/sass/sass/issues/2383#issuecomment-336349172\n --#{$variable-prefix}font-sans-serif: #{inspect($font-family-sans-serif)};\n --#{$variable-prefix}font-monospace: #{inspect($font-family-monospace)};\n --#{$variable-prefix}gradient: #{$gradient};\n\n // Root and body\n // stylelint-disable custom-property-empty-line-before\n // scss-docs-start root-body-variables\n @if $font-size-root != null {\n --#{$variable-prefix}root-font-size: #{$font-size-root};\n }\n --#{$variable-prefix}body-font-family: #{$font-family-base};\n --#{$variable-prefix}body-font-size: #{$font-size-base};\n --#{$variable-prefix}body-font-weight: #{$font-weight-base};\n --#{$variable-prefix}body-line-height: #{$line-height-base};\n --#{$variable-prefix}body-color: #{$body-color};\n @if $body-text-align != null {\n --#{$variable-prefix}body-text-align: #{$body-text-align};\n }\n --#{$variable-prefix}body-bg: #{$body-bg};\n // scss-docs-end root-body-variables\n // stylelint-enable custom-property-empty-line-before\n}\n","/*!\n * Bootstrap Reboot v5.1.3 (https://getbootstrap.com/)\n * Copyright 2011-2021 The Bootstrap Authors\n * Copyright 2011-2021 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md)\n */\n:root {\n --bs-blue: #0d6efd;\n --bs-indigo: #6610f2;\n --bs-purple: #6f42c1;\n --bs-pink: #d63384;\n --bs-red: #dc3545;\n --bs-orange: #fd7e14;\n --bs-yellow: #ffc107;\n --bs-green: #198754;\n --bs-teal: #20c997;\n --bs-cyan: #0dcaf0;\n --bs-white: #fff;\n --bs-gray: #6c757d;\n --bs-gray-dark: #343a40;\n --bs-gray-100: #f8f9fa;\n --bs-gray-200: #e9ecef;\n --bs-gray-300: #dee2e6;\n --bs-gray-400: #ced4da;\n --bs-gray-500: #adb5bd;\n --bs-gray-600: #6c757d;\n --bs-gray-700: #495057;\n --bs-gray-800: #343a40;\n --bs-gray-900: #212529;\n --bs-primary: #0d6efd;\n --bs-secondary: #6c757d;\n --bs-success: #198754;\n --bs-info: #0dcaf0;\n --bs-warning: #ffc107;\n --bs-danger: #dc3545;\n --bs-light: #f8f9fa;\n --bs-dark: #212529;\n --bs-primary-rgb: 13, 110, 253;\n --bs-secondary-rgb: 108, 117, 125;\n --bs-success-rgb: 25, 135, 84;\n --bs-info-rgb: 13, 202, 240;\n --bs-warning-rgb: 255, 193, 7;\n --bs-danger-rgb: 220, 53, 69;\n --bs-light-rgb: 248, 249, 250;\n --bs-dark-rgb: 33, 37, 41;\n --bs-white-rgb: 255, 255, 255;\n --bs-black-rgb: 0, 0, 0;\n --bs-body-color-rgb: 33, 37, 41;\n --bs-body-bg-rgb: 255, 255, 255;\n --bs-font-sans-serif: system-ui, -apple-system, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", \"Liberation Sans\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n --bs-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n --bs-gradient: linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));\n --bs-body-font-family: var(--bs-font-sans-serif);\n --bs-body-font-size: 1rem;\n --bs-body-font-weight: 400;\n --bs-body-line-height: 1.5;\n --bs-body-color: #212529;\n --bs-body-bg: #fff;\n}\n\n*,\n*::before,\n*::after {\n box-sizing: border-box;\n}\n\n@media (prefers-reduced-motion: no-preference) {\n :root {\n scroll-behavior: smooth;\n }\n}\n\nbody {\n margin: 0;\n font-family: var(--bs-body-font-family);\n font-size: var(--bs-body-font-size);\n font-weight: var(--bs-body-font-weight);\n line-height: var(--bs-body-line-height);\n color: var(--bs-body-color);\n text-align: var(--bs-body-text-align);\n background-color: var(--bs-body-bg);\n -webkit-text-size-adjust: 100%;\n -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\n\nhr {\n margin: 1rem 0;\n color: inherit;\n background-color: currentColor;\n border: 0;\n opacity: 0.25;\n}\n\nhr:not([size]) {\n height: 1px;\n}\n\nh6, h5, h4, h3, h2, h1 {\n margin-top: 0;\n margin-bottom: 0.5rem;\n font-weight: 500;\n line-height: 1.2;\n}\n\nh1 {\n font-size: calc(1.375rem + 1.5vw);\n}\n@media (min-width: 1200px) {\n h1 {\n font-size: 2.5rem;\n }\n}\n\nh2 {\n font-size: calc(1.325rem + 0.9vw);\n}\n@media (min-width: 1200px) {\n h2 {\n font-size: 2rem;\n }\n}\n\nh3 {\n font-size: calc(1.3rem + 0.6vw);\n}\n@media (min-width: 1200px) {\n h3 {\n font-size: 1.75rem;\n }\n}\n\nh4 {\n font-size: calc(1.275rem + 0.3vw);\n}\n@media (min-width: 1200px) {\n h4 {\n font-size: 1.5rem;\n }\n}\n\nh5 {\n font-size: 1.25rem;\n}\n\nh6 {\n font-size: 1rem;\n}\n\np {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nabbr[title],\nabbr[data-bs-original-title] {\n text-decoration: underline dotted;\n cursor: help;\n text-decoration-skip-ink: none;\n}\n\naddress {\n margin-bottom: 1rem;\n font-style: normal;\n line-height: inherit;\n}\n\nol,\nul {\n padding-left: 2rem;\n}\n\nol,\nul,\ndl {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n margin-bottom: 0;\n}\n\ndt {\n font-weight: 700;\n}\n\ndd {\n margin-bottom: 0.5rem;\n margin-left: 0;\n}\n\nblockquote {\n margin: 0 0 1rem;\n}\n\nb,\nstrong {\n font-weight: bolder;\n}\n\nsmall {\n font-size: 0.875em;\n}\n\nmark {\n padding: 0.2em;\n background-color: #fcf8e3;\n}\n\nsub,\nsup {\n position: relative;\n font-size: 0.75em;\n line-height: 0;\n vertical-align: baseline;\n}\n\nsub {\n bottom: -0.25em;\n}\n\nsup {\n top: -0.5em;\n}\n\na {\n color: #0d6efd;\n text-decoration: underline;\n}\na:hover {\n color: #0a58ca;\n}\n\na:not([href]):not([class]), a:not([href]):not([class]):hover {\n color: inherit;\n text-decoration: none;\n}\n\npre,\ncode,\nkbd,\nsamp {\n font-family: var(--bs-font-monospace);\n font-size: 1em;\n direction: ltr /* rtl:ignore */;\n unicode-bidi: bidi-override;\n}\n\npre {\n display: block;\n margin-top: 0;\n margin-bottom: 1rem;\n overflow: auto;\n font-size: 0.875em;\n}\npre code {\n font-size: inherit;\n color: inherit;\n word-break: normal;\n}\n\ncode {\n font-size: 0.875em;\n color: #d63384;\n word-wrap: break-word;\n}\na > code {\n color: inherit;\n}\n\nkbd {\n padding: 0.2rem 0.4rem;\n font-size: 0.875em;\n color: #fff;\n background-color: #212529;\n border-radius: 0.2rem;\n}\nkbd kbd {\n padding: 0;\n font-size: 1em;\n font-weight: 700;\n}\n\nfigure {\n margin: 0 0 1rem;\n}\n\nimg,\nsvg {\n vertical-align: middle;\n}\n\ntable {\n caption-side: bottom;\n border-collapse: collapse;\n}\n\ncaption {\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n color: #6c757d;\n text-align: left;\n}\n\nth {\n text-align: inherit;\n text-align: -webkit-match-parent;\n}\n\nthead,\ntbody,\ntfoot,\ntr,\ntd,\nth {\n border-color: inherit;\n border-style: solid;\n border-width: 0;\n}\n\nlabel {\n display: inline-block;\n}\n\nbutton {\n border-radius: 0;\n}\n\nbutton:focus:not(:focus-visible) {\n outline: 0;\n}\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n margin: 0;\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n}\n\nbutton,\nselect {\n text-transform: none;\n}\n\n[role=button] {\n cursor: pointer;\n}\n\nselect {\n word-wrap: normal;\n}\nselect:disabled {\n opacity: 1;\n}\n\n[list]::-webkit-calendar-picker-indicator {\n display: none;\n}\n\nbutton,\n[type=button],\n[type=reset],\n[type=submit] {\n -webkit-appearance: button;\n}\nbutton:not(:disabled),\n[type=button]:not(:disabled),\n[type=reset]:not(:disabled),\n[type=submit]:not(:disabled) {\n cursor: pointer;\n}\n\n::-moz-focus-inner {\n padding: 0;\n border-style: none;\n}\n\ntextarea {\n resize: vertical;\n}\n\nfieldset {\n min-width: 0;\n padding: 0;\n margin: 0;\n border: 0;\n}\n\nlegend {\n float: left;\n width: 100%;\n padding: 0;\n margin-bottom: 0.5rem;\n font-size: calc(1.275rem + 0.3vw);\n line-height: inherit;\n}\n@media (min-width: 1200px) {\n legend {\n font-size: 1.5rem;\n }\n}\nlegend + * {\n clear: left;\n}\n\n::-webkit-datetime-edit-fields-wrapper,\n::-webkit-datetime-edit-text,\n::-webkit-datetime-edit-minute,\n::-webkit-datetime-edit-hour-field,\n::-webkit-datetime-edit-day-field,\n::-webkit-datetime-edit-month-field,\n::-webkit-datetime-edit-year-field {\n padding: 0;\n}\n\n::-webkit-inner-spin-button {\n height: auto;\n}\n\n[type=search] {\n outline-offset: -2px;\n -webkit-appearance: textfield;\n}\n\n/* rtl:raw:\n[type=\"tel\"],\n[type=\"url\"],\n[type=\"email\"],\n[type=\"number\"] {\n direction: ltr;\n}\n*/\n::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n::-webkit-color-swatch-wrapper {\n padding: 0;\n}\n\n::file-selector-button {\n font: inherit;\n}\n\n::-webkit-file-upload-button {\n font: inherit;\n -webkit-appearance: button;\n}\n\noutput {\n display: inline-block;\n}\n\niframe {\n border: 0;\n}\n\nsummary {\n display: list-item;\n cursor: pointer;\n}\n\nprogress {\n vertical-align: baseline;\n}\n\n[hidden] {\n display: none !important;\n}\n\n/*# sourceMappingURL=bootstrap-reboot.css.map */\n","// stylelint-disable declaration-no-important, selector-no-qualifying-type, property-no-vendor-prefix\n\n\n// Reboot\n//\n// Normalization of HTML elements, manually forked from Normalize.css to remove\n// styles targeting irrelevant browsers while applying new styles.\n//\n// Normalize is licensed MIT. https://github.com/necolas/normalize.css\n\n\n// Document\n//\n// Change from `box-sizing: content-box` so that `width` is not affected by `padding` or `border`.\n\n*,\n*::before,\n*::after {\n box-sizing: border-box;\n}\n\n\n// Root\n//\n// Ability to the value of the root font sizes, affecting the value of `rem`.\n// null by default, thus nothing is generated.\n\n:root {\n @if $font-size-root != null {\n font-size: var(--#{$variable-prefix}root-font-size);\n }\n\n @if $enable-smooth-scroll {\n @media (prefers-reduced-motion: no-preference) {\n scroll-behavior: smooth;\n }\n }\n}\n\n\n// Body\n//\n// 1. Remove the margin in all browsers.\n// 2. As a best practice, apply a default `background-color`.\n// 3. Prevent adjustments of font size after orientation changes in iOS.\n// 4. Change the default tap highlight to be completely transparent in iOS.\n\n// scss-docs-start reboot-body-rules\nbody {\n margin: 0; // 1\n font-family: var(--#{$variable-prefix}body-font-family);\n @include font-size(var(--#{$variable-prefix}body-font-size));\n font-weight: var(--#{$variable-prefix}body-font-weight);\n line-height: var(--#{$variable-prefix}body-line-height);\n color: var(--#{$variable-prefix}body-color);\n text-align: var(--#{$variable-prefix}body-text-align);\n background-color: var(--#{$variable-prefix}body-bg); // 2\n -webkit-text-size-adjust: 100%; // 3\n -webkit-tap-highlight-color: rgba($black, 0); // 4\n}\n// scss-docs-end reboot-body-rules\n\n\n// Content grouping\n//\n// 1. Reset Firefox's gray color\n// 2. Set correct height and prevent the `size` attribute to make the `hr` look like an input field\n\nhr {\n margin: $hr-margin-y 0;\n color: $hr-color; // 1\n background-color: currentColor;\n border: 0;\n opacity: $hr-opacity;\n}\n\nhr:not([size]) {\n height: $hr-height; // 2\n}\n\n\n// Typography\n//\n// 1. Remove top margins from headings\n// By default, `

`-`

` all receive top and bottom margins. We nuke the top\n// margin for easier control within type scales as it avoids margin collapsing.\n\n%heading {\n margin-top: 0; // 1\n margin-bottom: $headings-margin-bottom;\n font-family: $headings-font-family;\n font-style: $headings-font-style;\n font-weight: $headings-font-weight;\n line-height: $headings-line-height;\n color: $headings-color;\n}\n\nh1 {\n @extend %heading;\n @include font-size($h1-font-size);\n}\n\nh2 {\n @extend %heading;\n @include font-size($h2-font-size);\n}\n\nh3 {\n @extend %heading;\n @include font-size($h3-font-size);\n}\n\nh4 {\n @extend %heading;\n @include font-size($h4-font-size);\n}\n\nh5 {\n @extend %heading;\n @include font-size($h5-font-size);\n}\n\nh6 {\n @extend %heading;\n @include font-size($h6-font-size);\n}\n\n\n// Reset margins on paragraphs\n//\n// Similarly, the top margin on `

`s get reset. However, we also reset the\n// bottom margin to use `rem` units instead of `em`.\n\np {\n margin-top: 0;\n margin-bottom: $paragraph-margin-bottom;\n}\n\n\n// Abbreviations\n//\n// 1. Duplicate behavior to the data-bs-* attribute for our tooltip plugin\n// 2. Add the correct text decoration in Chrome, Edge, Opera, and Safari.\n// 3. Add explicit cursor to indicate changed behavior.\n// 4. Prevent the text-decoration to be skipped.\n\nabbr[title],\nabbr[data-bs-original-title] { // 1\n text-decoration: underline dotted; // 2\n cursor: help; // 3\n text-decoration-skip-ink: none; // 4\n}\n\n\n// Address\n\naddress {\n margin-bottom: 1rem;\n font-style: normal;\n line-height: inherit;\n}\n\n\n// Lists\n\nol,\nul {\n padding-left: 2rem;\n}\n\nol,\nul,\ndl {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n margin-bottom: 0;\n}\n\ndt {\n font-weight: $dt-font-weight;\n}\n\n// 1. Undo browser default\n\ndd {\n margin-bottom: .5rem;\n margin-left: 0; // 1\n}\n\n\n// Blockquote\n\nblockquote {\n margin: 0 0 1rem;\n}\n\n\n// Strong\n//\n// Add the correct font weight in Chrome, Edge, and Safari\n\nb,\nstrong {\n font-weight: $font-weight-bolder;\n}\n\n\n// Small\n//\n// Add the correct font size in all browsers\n\nsmall {\n @include font-size($small-font-size);\n}\n\n\n// Mark\n\nmark {\n padding: $mark-padding;\n background-color: $mark-bg;\n}\n\n\n// Sub and Sup\n//\n// Prevent `sub` and `sup` elements from affecting the line height in\n// all browsers.\n\nsub,\nsup {\n position: relative;\n @include font-size($sub-sup-font-size);\n line-height: 0;\n vertical-align: baseline;\n}\n\nsub { bottom: -.25em; }\nsup { top: -.5em; }\n\n\n// Links\n\na {\n color: $link-color;\n text-decoration: $link-decoration;\n\n &:hover {\n color: $link-hover-color;\n text-decoration: $link-hover-decoration;\n }\n}\n\n// And undo these styles for placeholder links/named anchors (without href).\n// It would be more straightforward to just use a[href] in previous block, but that\n// causes specificity issues in many other styles that are too complex to fix.\n// See https://github.com/twbs/bootstrap/issues/19402\n\na:not([href]):not([class]) {\n &,\n &:hover {\n color: inherit;\n text-decoration: none;\n }\n}\n\n\n// Code\n\npre,\ncode,\nkbd,\nsamp {\n font-family: $font-family-code;\n @include font-size(1em); // Correct the odd `em` font sizing in all browsers.\n direction: ltr #{\"/* rtl:ignore */\"};\n unicode-bidi: bidi-override;\n}\n\n// 1. Remove browser default top margin\n// 2. Reset browser default of `1em` to use `rem`s\n// 3. Don't allow content to break outside\n\npre {\n display: block;\n margin-top: 0; // 1\n margin-bottom: 1rem; // 2\n overflow: auto; // 3\n @include font-size($code-font-size);\n color: $pre-color;\n\n // Account for some code outputs that place code tags in pre tags\n code {\n @include font-size(inherit);\n color: inherit;\n word-break: normal;\n }\n}\n\ncode {\n @include font-size($code-font-size);\n color: $code-color;\n word-wrap: break-word;\n\n // Streamline the style when inside anchors to avoid broken underline and more\n a > & {\n color: inherit;\n }\n}\n\nkbd {\n padding: $kbd-padding-y $kbd-padding-x;\n @include font-size($kbd-font-size);\n color: $kbd-color;\n background-color: $kbd-bg;\n @include border-radius($border-radius-sm);\n\n kbd {\n padding: 0;\n @include font-size(1em);\n font-weight: $nested-kbd-font-weight;\n }\n}\n\n\n// Figures\n//\n// Apply a consistent margin strategy (matches our type styles).\n\nfigure {\n margin: 0 0 1rem;\n}\n\n\n// Images and content\n\nimg,\nsvg {\n vertical-align: middle;\n}\n\n\n// Tables\n//\n// Prevent double borders\n\ntable {\n caption-side: bottom;\n border-collapse: collapse;\n}\n\ncaption {\n padding-top: $table-cell-padding-y;\n padding-bottom: $table-cell-padding-y;\n color: $table-caption-color;\n text-align: left;\n}\n\n// 1. Removes font-weight bold by inheriting\n// 2. Matches default `` alignment by inheriting `text-align`.\n// 3. Fix alignment for Safari\n\nth {\n font-weight: $table-th-font-weight; // 1\n text-align: inherit; // 2\n text-align: -webkit-match-parent; // 3\n}\n\nthead,\ntbody,\ntfoot,\ntr,\ntd,\nth {\n border-color: inherit;\n border-style: solid;\n border-width: 0;\n}\n\n\n// Forms\n//\n// 1. Allow labels to use `margin` for spacing.\n\nlabel {\n display: inline-block; // 1\n}\n\n// Remove the default `border-radius` that macOS Chrome adds.\n// See https://github.com/twbs/bootstrap/issues/24093\n\nbutton {\n // stylelint-disable-next-line property-disallowed-list\n border-radius: 0;\n}\n\n// Explicitly remove focus outline in Chromium when it shouldn't be\n// visible (e.g. as result of mouse click or touch tap). It already\n// should be doing this automatically, but seems to currently be\n// confused and applies its very visible two-tone outline anyway.\n\nbutton:focus:not(:focus-visible) {\n outline: 0;\n}\n\n// 1. Remove the margin in Firefox and Safari\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n margin: 0; // 1\n font-family: inherit;\n @include font-size(inherit);\n line-height: inherit;\n}\n\n// Remove the inheritance of text transform in Firefox\nbutton,\nselect {\n text-transform: none;\n}\n// Set the cursor for non-` + + + + + +

+ + +
+ +
+ + +
+ +
+ + +
+ + + + diff --git a/samples/web-app-managed-identity/README.md b/samples/web-app-managed-identity/README.md index 7990bb0..8ec9b16 100644 --- a/samples/web-app-managed-identity/README.md +++ b/samples/web-app-managed-identity/README.md @@ -2,7 +2,7 @@ This sample demonstrates a Python Flask single-page web application called *Vacation Planner* hosted on an [Azure Kubernetes Service (AKS)](https://learn.microsoft.com/en-us/azure/aks/what-is-aks) cluster in the cloud on Azure or locally in the LocalStack emulator for Azure. The app runs in a dedicated namespace and stores activity data in the `activities` container of an [Azure Blob Storage](https://learn.microsoft.com/en-us/azure/storage/blobs/storage-blobs-introduction) account. -Unlike the [`web-app-storage-account`](../web-app-storage-account/) sample, which uses a connection string, this sample authenticates to the storage account without any secret, using [Microsoft Entra Workload ID](https://learn.microsoft.com/en-us/azure/aks/workload-identity-overview). A [user-assigned managed identity](https://learn.microsoft.com/en-us/entra/identity/managed-identities-azure-resources/overview) is federated with a Kubernetes service account, so the pod obtains Microsoft Entra tokens through the cluster's OIDC issuer and accesses the storage account with its RBAC role assignment. +Unlike the [`web-app-blob-storage`](../web-app-blob-storage/) sample, which uses a connection string, this sample authenticates to the storage account without any secret, using [Microsoft Entra Workload ID](https://learn.microsoft.com/en-us/azure/aks/workload-identity-overview). A [user-assigned managed identity](https://learn.microsoft.com/en-us/entra/identity/managed-identities-azure-resources/overview) is federated with a Kubernetes service account, so the pod obtains Microsoft Entra tokens through the cluster's OIDC issuer and accesses the storage account with its RBAC role assignment. Optionally, when `DEPLOY_GATEWAY="true"` in [`00-variables.sh`](scripts/00-variables.sh), the sample also exposes the app on a public hostname through the [Gateway API](https://gateway-api.sigs.k8s.io/), with an A record created in an [Azure DNS](https://learn.microsoft.com/en-us/azure/dns/dns-overview) zone and a TLS certificate issued via [cert-manager](https://cert-manager.io/). diff --git a/scripts/01-system-assigned-managed-identity.sh b/scripts/01-system-assigned-managed-identity.sh index a54b135..ee42e81 100755 --- a/scripts/01-system-assigned-managed-identity.sh +++ b/scripts/01-system-assigned-managed-identity.sh @@ -418,6 +418,44 @@ else echo "[$bastion_subnet_name] bastion subnet already exists in the [$virtual_network_name] virtual network" fi +# Enable the Microsoft.Storage service endpoint on the node subnets. +# An Azure Files NFS share can only be reached from a virtual network, so the Azure Files CSI +# driver needs this endpoint to mount an NFS volume on a node. SMB shares do not require it. +for node_subnet_name in $system_subnet_name $user_subnet_name; do + echo "Checking if the [Microsoft.Storage] service endpoint is enabled on the [$node_subnet_name] subnet..." + current_service_endpoints=$(az network vnet subnet show \ + --name $node_subnet_name \ + --vnet-name $virtual_network_name \ + --resource-group $resource_group_name \ + --query "serviceEndpoints[].service" \ + --output tsv \ + --only-show-errors 2>/dev/null) + + if echo "$current_service_endpoints" | grep -qx "Microsoft.Storage"; then + echo "The [Microsoft.Storage] service endpoint is already enabled on the [$node_subnet_name] subnet" + continue + fi + + echo "Enabling the [Microsoft.Storage] service endpoint on the [$node_subnet_name] subnet..." + + # --service-endpoints replaces the entire list, so the endpoints already on the subnet are + # passed along with the new one. $current_service_endpoints is deliberately left unquoted: + # it must word-split into one argument per endpoint, and expand to nothing when empty. + az network vnet subnet update \ + --name $node_subnet_name \ + --vnet-name $virtual_network_name \ + --resource-group $resource_group_name \ + --service-endpoints $current_service_endpoints Microsoft.Storage \ + --only-show-errors 1>/dev/null + + if [[ $? == 0 ]]; then + echo "The [Microsoft.Storage] service endpoint was successfully enabled on the [$node_subnet_name] subnet" + else + echo "Failed to enable the [Microsoft.Storage] service endpoint on the [$node_subnet_name] subnet" + exit + fi +done + # Retrieve the virtual network resource ID virtual_network_id=$(az network vnet show \ --name $virtual_network_name \ @@ -564,6 +602,48 @@ else echo "[$aks_cluster_name] aks cluster already exists in the [$resource_group_name] resource group" fi +# Make sure the Azure Files CSI driver and the CSI snapshot controller are enabled on the cluster. +# AKS enables the storage drivers by default, which is why `az aks create` exposes only --disable-* +# flags for them and --enable-file-driver exists solely on `az aks update`. Checking them here +# documents that the samples mounting an Azure file share (samples/web-app-file-storage) depend on +# the driver, and repairs a cluster where it was turned off. The update runs only when needed, +# because `az aks update` is a long-running operation. +echo "Checking if the Azure Files CSI driver is enabled on the [$aks_cluster_name] AKS cluster..." +file_csi_driver_enabled=$(az aks show \ + --name $aks_cluster_name \ + --resource-group $resource_group_name \ + --query storageProfile.fileCsiDriver.enabled \ + --output tsv \ + --only-show-errors 2>/dev/null) + +snapshot_controller_enabled=$(az aks show \ + --name $aks_cluster_name \ + --resource-group $resource_group_name \ + --query storageProfile.snapshotController.enabled \ + --output tsv \ + --only-show-errors 2>/dev/null) + +if [[ "$file_csi_driver_enabled" == 'true' && "$snapshot_controller_enabled" == 'true' ]]; then + echo "The Azure Files CSI driver and the CSI snapshot controller are already enabled on the [$aks_cluster_name] AKS cluster" +else + echo "Enabling the Azure Files CSI driver and the CSI snapshot controller on the [$aks_cluster_name] AKS cluster..." + + az aks update \ + --name $aks_cluster_name \ + --resource-group $resource_group_name \ + --enable-file-driver \ + --enable-snapshot-controller \ + --yes \ + --only-show-errors 1>/dev/null + + if [[ $? == 0 ]]; then + echo "The Azure Files CSI driver and the CSI snapshot controller were successfully enabled on the [$aks_cluster_name] AKS cluster" + else + echo "Failed to enable the Azure Files CSI driver on the [$aks_cluster_name] AKS cluster" + exit + fi +fi + # Retrieve the cluster identity principal ID echo "Retrieving principalId for the [$aks_cluster_name] AKS cluster identity..." cluster_identity_principal_id=$(az aks show \ @@ -771,3 +851,17 @@ else echo "Failed to retrieve the credentials for the [$aks_cluster_name] cluster" exit fi + +# Print the storage drivers enabled on the cluster, followed by the storage classes they provide. +# The four azurefile* classes come from the Azure Files CSI driver and are what the +# samples/web-app-file-storage sample provisions its volumes from. +echo "Storage profile of the [$aks_cluster_name] AKS cluster:" +az aks show \ + --name $aks_cluster_name \ + --resource-group $resource_group_name \ + --query storageProfile \ + --output yaml \ + --only-show-errors + +echo "Storage classes of the [$aks_cluster_name] AKS cluster:" +kubectl get storageclass diff --git a/scripts/01-user-assigned-managed-identity.sh b/scripts/01-user-assigned-managed-identity.sh index 27a1b54..549c101 100755 --- a/scripts/01-user-assigned-managed-identity.sh +++ b/scripts/01-user-assigned-managed-identity.sh @@ -419,6 +419,44 @@ else echo "[$bastion_subnet_name] bastion subnet already exists in the [$virtual_network_name] virtual network" fi +# Enable the Microsoft.Storage service endpoint on the node subnets. +# An Azure Files NFS share can only be reached from a virtual network, so the Azure Files CSI +# driver needs this endpoint to mount an NFS volume on a node. SMB shares do not require it. +for node_subnet_name in $system_subnet_name $user_subnet_name; do + echo "Checking if the [Microsoft.Storage] service endpoint is enabled on the [$node_subnet_name] subnet..." + current_service_endpoints=$(az network vnet subnet show \ + --name $node_subnet_name \ + --vnet-name $virtual_network_name \ + --resource-group $resource_group_name \ + --query "serviceEndpoints[].service" \ + --output tsv \ + --only-show-errors 2>/dev/null) + + if echo "$current_service_endpoints" | grep -qx "Microsoft.Storage"; then + echo "The [Microsoft.Storage] service endpoint is already enabled on the [$node_subnet_name] subnet" + continue + fi + + echo "Enabling the [Microsoft.Storage] service endpoint on the [$node_subnet_name] subnet..." + + # --service-endpoints replaces the entire list, so the endpoints already on the subnet are + # passed along with the new one. $current_service_endpoints is deliberately left unquoted: + # it must word-split into one argument per endpoint, and expand to nothing when empty. + az network vnet subnet update \ + --name $node_subnet_name \ + --vnet-name $virtual_network_name \ + --resource-group $resource_group_name \ + --service-endpoints $current_service_endpoints Microsoft.Storage \ + --only-show-errors 1>/dev/null + + if [[ $? == 0 ]]; then + echo "The [Microsoft.Storage] service endpoint was successfully enabled on the [$node_subnet_name] subnet" + else + echo "Failed to enable the [Microsoft.Storage] service endpoint on the [$node_subnet_name] subnet" + exit + fi +done + # Retrieve the virtual network resource ID virtual_network_id=$(az network vnet show \ --name $virtual_network_name \ @@ -624,6 +662,48 @@ else echo "[$aks_cluster_name] aks cluster already exists in the [$resource_group_name] resource group" fi +# Make sure the Azure Files CSI driver and the CSI snapshot controller are enabled on the cluster. +# AKS enables the storage drivers by default, which is why `az aks create` exposes only --disable-* +# flags for them and --enable-file-driver exists solely on `az aks update`. Checking them here +# documents that the samples mounting an Azure file share (samples/web-app-file-storage) depend on +# the driver, and repairs a cluster where it was turned off. The update runs only when needed, +# because `az aks update` is a long-running operation. +echo "Checking if the Azure Files CSI driver is enabled on the [$aks_cluster_name] AKS cluster..." +file_csi_driver_enabled=$(az aks show \ + --name $aks_cluster_name \ + --resource-group $resource_group_name \ + --query storageProfile.fileCsiDriver.enabled \ + --output tsv \ + --only-show-errors 2>/dev/null) + +snapshot_controller_enabled=$(az aks show \ + --name $aks_cluster_name \ + --resource-group $resource_group_name \ + --query storageProfile.snapshotController.enabled \ + --output tsv \ + --only-show-errors 2>/dev/null) + +if [[ "$file_csi_driver_enabled" == 'true' && "$snapshot_controller_enabled" == 'true' ]]; then + echo "The Azure Files CSI driver and the CSI snapshot controller are already enabled on the [$aks_cluster_name] AKS cluster" +else + echo "Enabling the Azure Files CSI driver and the CSI snapshot controller on the [$aks_cluster_name] AKS cluster..." + + az aks update \ + --name $aks_cluster_name \ + --resource-group $resource_group_name \ + --enable-file-driver \ + --enable-snapshot-controller \ + --yes \ + --only-show-errors 1>/dev/null + + if [[ $? == 0 ]]; then + echo "The Azure Files CSI driver and the CSI snapshot controller were successfully enabled on the [$aks_cluster_name] AKS cluster" + else + echo "Failed to enable the Azure Files CSI driver on the [$aks_cluster_name] AKS cluster" + exit + fi +fi + # Retrieve the node resource group name and ID echo "Retrieving the node resource group name for the [$aks_cluster_name] AKS cluster..." node_resource_group_name=$(az aks show \ @@ -881,3 +961,17 @@ else echo "Failed to retrieve the credentials for the [$aks_cluster_name] cluster" exit fi + +# Print the storage drivers enabled on the cluster, followed by the storage classes they provide. +# The four azurefile* classes come from the Azure Files CSI driver and are what the +# samples/web-app-file-storage sample provisions its volumes from. +echo "Storage profile of the [$aks_cluster_name] AKS cluster:" +az aks show \ + --name $aks_cluster_name \ + --resource-group $resource_group_name \ + --query storageProfile \ + --output yaml \ + --only-show-errors + +echo "Storage classes of the [$aks_cluster_name] AKS cluster:" +kubectl get storageclass From eca3044d82c51630c84de8e3ecebdb46a6331d41 Mon Sep 17 00:00:00 2001 From: Paolo Salvatori Date: Thu, 6 Aug 2026 10:36:24 +0200 Subject: [PATCH 2/6] Fixes from verifying all four combinations end to end The local smoke test mounted its activities directory from /tmp, which the app then rejected as not writable: the container runs as uid 1000 and the directory has to be world-writable, which is a poor fit for a directory shared with every other user on the machine (and not shared with the Docker daemon on every setup). It now lives under the user's cache directory. Also records what the teardown leaves behind: the reclaim policy deletes the file share the CSI driver created, but not the storage account it created for it. Co-Authored-By: Claude Opus 5 --- samples/web-app-file-storage/README.md | 8 +++++++- .../scripts/03-run-docker-container.sh | 6 +++++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/samples/web-app-file-storage/README.md b/samples/web-app-file-storage/README.md index b2b8b18..bc67da7 100644 --- a/samples/web-app-file-storage/README.md +++ b/samples/web-app-file-storage/README.md @@ -127,7 +127,13 @@ kubectl delete pv vacation-planner-file-pv --ignore-not-found kubectl delete storageclass vacation-planner-file-nfs --ignore-not-found ``` -The volume is created with `persistentVolumeReclaimPolicy: Retain`, so deleting it leaves the file share and the activities in place: the same share is picked up again the next time the sample is deployed. In dynamic mode the storage class reclaim policy is `Delete`, so the share the driver created goes away with the claim. +The volume is created with `persistentVolumeReclaimPolicy: Retain`, so deleting it leaves the file share and the activities in place: the same share is picked up again the next time the sample is deployed. In dynamic mode the storage class reclaim policy is `Delete`, so the share the driver created goes away with the claim, while the storage account it created in the node resource group stays behind (the driver never deletes an account). Delete it by hand, or delete the whole resource group, when you are done: + +```bash +az storage account list \ + --resource-group $(az aks show --name local-aks-test --resource-group local-rg --query nodeResourceGroup --output tsv) \ + --output table +``` ## Running on Azure diff --git a/samples/web-app-file-storage/scripts/03-run-docker-container.sh b/samples/web-app-file-storage/scripts/03-run-docker-container.sh index de57b4e..071a1a9 100755 --- a/samples/web-app-file-storage/scripts/03-run-docker-container.sh +++ b/samples/web-app-file-storage/scripts/03-run-docker-container.sh @@ -9,7 +9,11 @@ cd "$CURRENT_DIR" || exit # Local smoke test: no Azure resource is involved. In the cluster the app writes to an Azure file # share mounted by the Azure Files CSI driver, and here it writes to a directory on the host mounted # at the same path, which is all the app knows about its storage. -ACTIVITIES_HOST_DIR="${TMPDIR:-/tmp}/${IMAGE_NAME}-activities" +# +# Under the user's cache directory rather than /tmp: the directory has to be world-writable for the +# container's non-root user to write to it, and /tmp is shared with every other user on the machine. +# A private cache directory is also shared with the Docker daemon by default on Docker Desktop. +ACTIVITIES_HOST_DIR="${XDG_CACHE_HOME:-$HOME/.cache}/${IMAGE_NAME}/activities" echo "Creating the local activities directory [$ACTIVITIES_HOST_DIR]..." mkdir -p "$ACTIVITIES_HOST_DIR" From d8032c8b14b73e3a5319afaaea039951c84e4a9d Mon Sep 17 00:00:00 2001 From: Paolo Salvatori Date: Thu, 6 Aug 2026 11:37:38 +0200 Subject: [PATCH 3/6] Update the architecture diagrams New diagrams for the Azure Files sample and for the two blob-backed samples, which until now shared a single generic one. Co-Authored-By: Claude Opus 5 --- .../images/architecture.png | Bin 36997 -> 36963 bytes .../images/architecture.png | Bin 36997 -> 38170 bytes .../images/architecture.png | Bin 36997 -> 41535 bytes 3 files changed, 0 insertions(+), 0 deletions(-) diff --git a/samples/web-app-blob-storage/images/architecture.png b/samples/web-app-blob-storage/images/architecture.png index 5218f655dd8f160281a3aac9d545c3592e5107f9..40618b4d616a9e381ff68840dc1da589dd7cde6e 100644 GIT binary patch delta 14216 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 delta 14265 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 X0b1avJG~3*1|%z~BvC46^6mcsb|lb_ diff --git a/samples/web-app-file-storage/images/architecture.png b/samples/web-app-file-storage/images/architecture.png index 5218f655dd8f160281a3aac9d545c3592e5107f9..1987668093155907fda0a64ff2912d101b089978 100644 GIT binary patch delta 15578 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 delta 14395 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 literal 36997 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 From 9c7cfc3465ea38925f5cb1017359091e118e468b Mon Sep 17 00:00:00 2001 From: Paolo Salvatori Date: Thu, 6 Aug 2026 11:48:14 +0200 Subject: [PATCH 4/6] Add a license, a security policy, and CI that guards both The repository is about to be made public and had no LICENSE, no security policy and no CI at all. * LICENSE: MIT, matching the sibling localstack-samples/localstack-azure-samples repository. * SECURITY.md: what these samples are (demo code with throwaway demo credentials, security trade-offs chosen for clarity) and how to report a vulnerability privately through GitHub. Enabling private vulnerability reporting in the repository settings is a prerequisite for that link to work. * .github/workflows/lint_workflows.yml: actionlint and zizmor over the repository's own workflows. * .github/workflows/pre-commit.yml plus .pre-commit-config.yaml: gitleaks for secret scanning and zizmor, the same two hooks the sibling repository uses. All three are copied from that sibling repository, including its SHA-pinned action references. Verified locally: pre-commit run --all-files passes (gitleaks reports no hardcoded secrets across the repository, so no allowlist is needed) and actionlint accepts both workflows. shellcheck, markdownlint and terraform fmt hooks are deliberately left out: the ~60 shell scripts here are written in a house style that those tools flag in the hundreds, which would turn CI red on day one. Bringing that corpus into line is separate work. Co-Authored-By: Claude Opus 5 --- .github/workflows/lint_workflows.yml | 40 ++++++++++++++++++++++++++++ .github/workflows/pre-commit.yml | 32 ++++++++++++++++++++++ .pre-commit-config.yaml | 10 +++++++ LICENSE | 21 +++++++++++++++ SECURITY.md | 18 +++++++++++++ 5 files changed, 121 insertions(+) create mode 100644 .github/workflows/lint_workflows.yml create mode 100644 .github/workflows/pre-commit.yml create mode 100644 .pre-commit-config.yaml create mode 100644 LICENSE create mode 100644 SECURITY.md diff --git a/.github/workflows/lint_workflows.yml b/.github/workflows/lint_workflows.yml new file mode 100644 index 0000000..b84bf6a --- /dev/null +++ b/.github/workflows/lint_workflows.yml @@ -0,0 +1,40 @@ +name: Lint GitHub Actions workflows + +# Lints the repo's own GitHub Actions workflows: +# - actionlint: workflow syntax, expression and runner-label checks, plus shellcheck on run: blocks +# - zizmor: workflow security (also enforced locally via the pre-commit hook) + +on: + push: + branches: + - main + paths: + - '.github/workflows/**' + pull_request: + paths: + - '.github/workflows/**' + +permissions: {} + +jobs: + lint_workflows: + name: "Run linters" + runs-on: ubuntu-latest + permissions: + contents: read + actions: read + + steps: + - name: Check out repo + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 + with: + persist-credentials: false + + - name: Run actionlint + uses: raven-actions/actionlint@205b530c5d9fa8f44ae9ed59f341a0db994aa6f8 # v2.1.2 + + - name: Run zizmor + uses: zizmorcore/zizmor-action@5f14fd08f7cf1cb1609c1e344975f152c7ee938d # v0.5.6 + with: + # Don't integrate with GitHub Advanced Security + advanced-security: false diff --git a/.github/workflows/pre-commit.yml b/.github/workflows/pre-commit.yml new file mode 100644 index 0000000..5b7646b --- /dev/null +++ b/.github/workflows/pre-commit.yml @@ -0,0 +1,32 @@ +name: Pre-commit Checks + +on: + pull_request: + branches: [ main ] + workflow_dispatch: + +permissions: + contents: read + +jobs: + pre-commit: + name: Run pre-commit hooks + runs-on: ubuntu-latest + + steps: + - name: Checkout repo + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 + with: + persist-credentials: false + + - name: Set up Python + uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6.3.0 + with: + python-version: '3.12' + cache: 'pip' + + - name: Install pre-commit + run: pip install pre-commit + + - name: Run pre-commit + run: pre-commit run --all-files --show-diff-on-failure \ No newline at end of file diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml new file mode 100644 index 0000000..c36160f --- /dev/null +++ b/.pre-commit-config.yaml @@ -0,0 +1,10 @@ +repos: + - repo: https://github.com/zizmorcore/zizmor-pre-commit + rev: v1.25.2 + hooks: + - id: zizmor + + - repo: https://github.com/gitleaks/gitleaks + rev: v8.30.1 + hooks: + - id: gitleaks \ No newline at end of file diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..468bf5e --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2025 LocalStack Samples + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/SECURITY.md b/SECURITY.md new file mode 100644 index 0000000..7ebada5 --- /dev/null +++ b/SECURITY.md @@ -0,0 +1,18 @@ +# Security Policy + +## Scope + +This repository contains **sample code**: end-to-end demonstrations of how to deploy an [Azure Kubernetes Service (AKS)](https://learn.microsoft.com/en-us/azure/aks/what-is-aks) cluster and run a workload on it, against Azure or against the [LocalStack for Azure](https://docs.localstack.cloud/azure/) emulator. It is written to be read and adapted, not to be deployed as-is into production. + +Two consequences worth stating plainly: + +- **The credentials in these samples are throwaway demo values.** Database passwords, admin logins and Flask secret keys are hardcoded so a sample runs with a single command. They protect resources you create in your own subscription for the duration of a demo. Change them before you keep anything around, and never reuse them. +- **Security trade-offs are chosen for clarity.** Public network access, permissive mount options and secrets passed through environment variables all make a sample easier to follow and are called out in the sample's README where they matter. Harden them for real workloads. + +## Reporting a vulnerability + +If you find a vulnerability in this repository, for example a real credential committed by mistake, a script that exfiltrates data, or a dependency with a known exploit, report it privately through GitHub's [private vulnerability reporting](https://docs.github.com/en/code-security/security-advisories/guidance-on-reporting-and-writing-information-about-vulnerabilities/privately-reporting-a-security-vulnerability): open the **Security** tab of this repository and choose **Report a vulnerability**. + +Please do not open a public issue for something exploitable. + +For a vulnerability in LocalStack itself rather than in these samples, see the [LocalStack documentation](https://docs.localstack.cloud/) for the current support channels. From 956e1742fd91cf7fb4dbb3aafdb83ef649a8e68e Mon Sep 17 00:00:00 2001 From: Paolo Salvatori Date: Thu, 6 Aug 2026 11:48:27 +0200 Subject: [PATCH 5/6] Document how to target the emulator with lstk az The repository never said how to point the Azure CLI at the emulator: the root README only offered "point the Azure CLI at the emulator endpoint (typically http://localhost:4566)", which is not something a reader can act on. The wrapper that used to do it, azlocal, is deprecated in favour of `lstk az`. * Root README: a "Run against LocalStack" section with the lstk install options, `localstack start`, `lstk az start-interception` and `lstk az stop-interception`, plus lstk in the prerequisites. Links point at the Azure CLI interception docs, the lstk CLI docs and the lstk repository. * Every other README (9 samples, 13 tutorials): a one-line pointer to that section, with the relative path computed per file. All 22 links were resolved against the file system, and the anchor matches the heading. * tutorials/terraform/tags-labels-taints/providers.tf: the one remaining literal azlocal reference, in a comment about instance discovery, now names `lstk az start-interception`. Also unifies the author email on paolo.salvatori@localstack.cloud: the cert-manager issuer of the managed-identity sample registered its Let's Encrypt account with a personal gmail address. Co-Authored-By: Claude Opus 5 --- README.md | 41 ++++++++++++++++++- samples/web-app-blob-storage/README.md | 2 + .../web-app-cosmosdb-mongodb-api/README.md | 2 + samples/web-app-cosmosdb-nosql-api/README.md | 2 + samples/web-app-file-storage/README.md | 2 + .../web-app-in-cluster-postgresql/README.md | 2 + samples/web-app-managed-identity/README.md | 2 + .../scripts/issuer.yml | 3 +- .../web-app-mysql-flexible-server/README.md | 2 + .../README.md | 2 + samples/web-app-sql-database/README.md | 2 + tutorials/bicep/tags-labels-taints/README.md | 2 + tutorials/ccm/scripts/README.md | 2 + tutorials/gateway-api/scripts/README.md | 2 + tutorials/keda/README.md | 2 + tutorials/keda/event-hubs/README.md | 2 + tutorials/keda/queue-storage/README.md | 2 + tutorials/keda/service-bus/README.md | 2 + tutorials/key-vault-csi-driver/README.md | 2 + tutorials/policies/README.md | 2 + .../calico/calico-policy-tutorial/README.md | 2 + .../policies/cilium/egress-tutorial/README.md | 2 + .../cilium/ingress-tutorial/README.md | 2 + .../terraform/tags-labels-taints/README.md | 2 + .../terraform/tags-labels-taints/providers.tf | 5 ++- 25 files changed, 89 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index ce0acfe..1d2eea7 100644 --- a/README.md +++ b/README.md @@ -25,8 +25,47 @@ This makes it easy to compare how the same application is wired up against diffe - [kubectl](https://kubernetes.io/docs/tasks/tools/) to manage the cluster. - [yq](https://github.com/mikefarah/yq), and (depending on the sample) `sqlcmd` or `psql` on the host machine. - An SSH key pair at `~/.ssh/id_rsa.pub` (used to provision the AKS node pools). +- For local deployments only: the [lstk CLI](https://docs.localstack.cloud/aws/developer-tools/running-localstack/lstk/), which routes Azure CLI calls to the emulator with [`lstk az`](https://docs.localstack.cloud/azure/integrations/az/). -> Running on LocalStack? Point the Azure CLI at the emulator endpoint (typically `http://localhost:4566`) and run the same scripts unchanged. The Azure resource model is emulated locally, so you can iterate on the full deployment without incurring cloud costs. +## Run against LocalStack + +Every sample and tutorial in this repository runs unchanged against [LocalStack for Azure](https://docs.localstack.cloud/azure/), which emulates the Azure resource model locally, so you can iterate on a full deployment without incurring cloud costs. + +Install the [lstk CLI](https://docs.localstack.cloud/aws/developer-tools/running-localstack/lstk/), which routes Azure CLI calls to the emulator: + +```bash +brew install localstack/tap/lstk +``` + +```bash +npm install -g @localstack/lstk +``` + +Alternatively, download a pre-built binary from the [lstk releases page](https://github.com/localstack/lstk/releases). + +Start the emulator and point the Azure CLI at it: + +```bash +# Set your LocalStack auth token +export LOCALSTACK_AUTH_TOKEN= + +# Start the LocalStack Azure emulator +IMAGE_NAME=localstack/localstack-azure localstack start -d +localstack wait -t 60 + +# Route all Azure CLI calls to the emulator +lstk az start-interception +``` + +From here on, run the scripts exactly as documented: `az`, `kubectl`, `terraform` and Bicep all talk to the emulator. To send Azure CLI calls back to Azure: + +```bash +lstk az stop-interception +``` + +For more information, see [Azure CLI interception](https://docs.localstack.cloud/azure/integrations/az/), the [lstk CLI documentation](https://docs.localstack.cloud/aws/developer-tools/running-localstack/lstk/) and the [lstk GitHub repository](https://github.com/localstack/lstk). + +> The first deployment against the emulator downloads and builds container images, which takes a few minutes. Later deployments reuse them and are much faster. ## Create an Azure Kubernetes Service (AKS) cluster diff --git a/samples/web-app-blob-storage/README.md b/samples/web-app-blob-storage/README.md index a293886..27b51f7 100644 --- a/samples/web-app-blob-storage/README.md +++ b/samples/web-app-blob-storage/README.md @@ -11,6 +11,8 @@ Before installing the sample, make sure to create an [Azure Kubernetes Service ( All commands below are run from this sample's `scripts/` folder. +> **Running on LocalStack?** Install the [lstk CLI](https://docs.localstack.cloud/aws/developer-tools/running-localstack/lstk/) and run `lstk az start-interception` to route Azure CLI calls to the emulator. See [Run against LocalStack](../../README.md#run-against-localstack) for the full setup. + ## Architecture The following diagram illustrates the architecture of the solution: diff --git a/samples/web-app-cosmosdb-mongodb-api/README.md b/samples/web-app-cosmosdb-mongodb-api/README.md index 45a4062..46e4612 100644 --- a/samples/web-app-cosmosdb-mongodb-api/README.md +++ b/samples/web-app-cosmosdb-mongodb-api/README.md @@ -11,6 +11,8 @@ Before installing the sample, make sure to create an [Azure Kubernetes Service ( All commands below are run from this sample's `scripts/` folder. +> **Running on LocalStack?** Install the [lstk CLI](https://docs.localstack.cloud/aws/developer-tools/running-localstack/lstk/) and run `lstk az start-interception` to route Azure CLI calls to the emulator. See [Run against LocalStack](../../README.md#run-against-localstack) for the full setup. + ## Architecture The following diagram illustrates the architecture of the solution: diff --git a/samples/web-app-cosmosdb-nosql-api/README.md b/samples/web-app-cosmosdb-nosql-api/README.md index 29fb418..e75016e 100644 --- a/samples/web-app-cosmosdb-nosql-api/README.md +++ b/samples/web-app-cosmosdb-nosql-api/README.md @@ -13,6 +13,8 @@ All commands below are run from this sample's `scripts/` folder. > LocalStack note: when running against the emulator, the `LOCALSTACK_URL` variable in [`00-variables.sh`](scripts/00-variables.sh) triggers installation of the LocalStack root CA so the app trusts the emulated endpoint. Set it to an empty value when targeting real Azure. +> **Running on LocalStack?** Install the [lstk CLI](https://docs.localstack.cloud/aws/developer-tools/running-localstack/lstk/) and run `lstk az start-interception` to route Azure CLI calls to the emulator. See [Run against LocalStack](../../README.md#run-against-localstack) for the full setup. + ## Architecture The following diagram illustrates the architecture of the solution: diff --git a/samples/web-app-file-storage/README.md b/samples/web-app-file-storage/README.md index bc67da7..5f3ff24 100644 --- a/samples/web-app-file-storage/README.md +++ b/samples/web-app-file-storage/README.md @@ -15,6 +15,8 @@ Both scripts check that the Azure Files CSI driver and the CSI snapshot controll All commands below are run from this sample's `scripts/` folder. +> **Running on LocalStack?** Install the [lstk CLI](https://docs.localstack.cloud/aws/developer-tools/running-localstack/lstk/) and run `lstk az start-interception` to route Azure CLI calls to the emulator. See [Run against LocalStack](../../README.md#run-against-localstack) for the full setup. + ## Architecture The following diagram illustrates the architecture of the solution: diff --git a/samples/web-app-in-cluster-postgresql/README.md b/samples/web-app-in-cluster-postgresql/README.md index 47c4741..1083765 100644 --- a/samples/web-app-in-cluster-postgresql/README.md +++ b/samples/web-app-in-cluster-postgresql/README.md @@ -11,6 +11,8 @@ Before installing the sample, make sure to create an [Azure Kubernetes Service ( All commands below are run from this sample's `scripts/` folder. +> **Running on LocalStack?** Install the [lstk CLI](https://docs.localstack.cloud/aws/developer-tools/running-localstack/lstk/) and run `lstk az start-interception` to route Azure CLI calls to the emulator. See [Run against LocalStack](../../README.md#run-against-localstack) for the full setup. + ## Architecture The following diagram illustrates the architecture of the solution: diff --git a/samples/web-app-managed-identity/README.md b/samples/web-app-managed-identity/README.md index 8ec9b16..3c4f172 100644 --- a/samples/web-app-managed-identity/README.md +++ b/samples/web-app-managed-identity/README.md @@ -13,6 +13,8 @@ Before installing the sample, make sure to create an [Azure Kubernetes Service ( Both scripts enable the OIDC issuer and workload identity that this sample relies on. If you enable the Gateway path, also install the [Gateway API](https://gateway-api.sigs.k8s.io/) and [cert-manager](https://cert-manager.io/) add-ons from the root `scripts/` folder. All commands below are run from this sample's `scripts/` folder. +> **Running on LocalStack?** Install the [lstk CLI](https://docs.localstack.cloud/aws/developer-tools/running-localstack/lstk/) and run `lstk az start-interception` to route Azure CLI calls to the emulator. See [Run against LocalStack](../../README.md#run-against-localstack) for the full setup. + ## Architecture The following diagram illustrates the architecture of the solution: diff --git a/samples/web-app-managed-identity/scripts/issuer.yml b/samples/web-app-managed-identity/scripts/issuer.yml index 1284a2b..2d200b1 100644 --- a/samples/web-app-managed-identity/scripts/issuer.yml +++ b/samples/web-app-managed-identity/scripts/issuer.yml @@ -5,7 +5,8 @@ metadata: namespace: vacation-planner-blob spec: acme: - email: paolo.salvatori@gmail.com + # Registration address for the Let's Encrypt account: expiry notices go here + email: paolo.salvatori@localstack.cloud privateKeySecretRef: name: vacation-planner-blob-issuer server: https://acme-v02.api.letsencrypt.org/directory diff --git a/samples/web-app-mysql-flexible-server/README.md b/samples/web-app-mysql-flexible-server/README.md index 8647ffd..faf8cca 100644 --- a/samples/web-app-mysql-flexible-server/README.md +++ b/samples/web-app-mysql-flexible-server/README.md @@ -13,6 +13,8 @@ The `01-deploy-resources.sh` script needs the `mysql` client installed on the ho All commands below are run from this sample's `scripts/` folder. +> **Running on LocalStack?** Install the [lstk CLI](https://docs.localstack.cloud/aws/developer-tools/running-localstack/lstk/) and run `lstk az start-interception` to route Azure CLI calls to the emulator. See [Run against LocalStack](../../README.md#run-against-localstack) for the full setup. + ## Architecture The following diagram illustrates the architecture of the solution: diff --git a/samples/web-app-postgresql-flexible-server/README.md b/samples/web-app-postgresql-flexible-server/README.md index 08d26bc..435c76e 100644 --- a/samples/web-app-postgresql-flexible-server/README.md +++ b/samples/web-app-postgresql-flexible-server/README.md @@ -11,6 +11,8 @@ Before installing the sample, make sure to create an [Azure Kubernetes Service ( All commands below are run from this sample's `scripts/` folder. +> **Running on LocalStack?** Install the [lstk CLI](https://docs.localstack.cloud/aws/developer-tools/running-localstack/lstk/) and run `lstk az start-interception` to route Azure CLI calls to the emulator. See [Run against LocalStack](../../README.md#run-against-localstack) for the full setup. + ## Architecture The following diagram illustrates the architecture of the solution: diff --git a/samples/web-app-sql-database/README.md b/samples/web-app-sql-database/README.md index d5311bc..fc419ac 100644 --- a/samples/web-app-sql-database/README.md +++ b/samples/web-app-sql-database/README.md @@ -11,6 +11,8 @@ Before installing the sample, make sure to create an [Azure Kubernetes Service ( All commands below are run from this sample's `scripts/` folder. +> **Running on LocalStack?** Install the [lstk CLI](https://docs.localstack.cloud/aws/developer-tools/running-localstack/lstk/) and run `lstk az start-interception` to route Azure CLI calls to the emulator. See [Run against LocalStack](../../README.md#run-against-localstack) for the full setup. + ## Architecture The following diagram illustrates the architecture of the solution: diff --git a/tutorials/bicep/tags-labels-taints/README.md b/tutorials/bicep/tags-labels-taints/README.md index 856a3c0..819ccf0 100644 --- a/tutorials/bicep/tags-labels-taints/README.md +++ b/tutorials/bicep/tags-labels-taints/README.md @@ -10,6 +10,8 @@ The stack works against both real Azure and the [LocalStack for Azure](https://d By default the user agent pool carries the `workload=batch` node label, the `dedicated=batch:NoSchedule` node taint, and the `costcenter=1234` scale-set tags, while the system agent pool carries the `team=platform` node label — the values pinned in [main.bicepparam](main.bicepparam). The [deploy.sh](deploy.sh) validation battery then proves, both through the ARM API (`az aks nodepool show`) and through the Kubernetes API (`kubectl get nodes`), that the tags, labels, and taints actually landed on the pools and the nodes. +> **Running on LocalStack?** Install the [lstk CLI](https://docs.localstack.cloud/aws/developer-tools/running-localstack/lstk/) and run `lstk az start-interception` to route Azure CLI calls to the emulator. See [Run against LocalStack](../../../README.md#run-against-localstack) for the full setup. + ## Prerequisites - [Azure CLI](https://learn.microsoft.com/en-us/cli/azure/install-azure-cli) (`az`), logged in to an Azure subscription — or pointed at the LocalStack Azure emulator. The [Bicep CLI](https://learn.microsoft.com/en-us/azure/azure-resource-manager/bicep/install) is installed automatically by `az` on first use. diff --git a/tutorials/ccm/scripts/README.md b/tutorials/ccm/scripts/README.md index f4c556d..e03f619 100644 --- a/tutorials/ccm/scripts/README.md +++ b/tutorials/ccm/scripts/README.md @@ -8,6 +8,8 @@ These scripts exercise that reconcile against the [LocalStack for Azure](https:/ Because the emulated load balancer has no real dataplane, the `EXTERNAL-IP` is a synthetic, non-routable placeholder. To actually reach a workload, use `kubectl port-forward`, which tunnels straight to the pod and bypasses the `EXTERNAL-IP`. +> **Running on LocalStack?** Install the [lstk CLI](https://docs.localstack.cloud/aws/developer-tools/running-localstack/lstk/) and run `lstk az start-interception` to route Azure CLI calls to the emulator. See [Run against LocalStack](../../../README.md#run-against-localstack) for the full setup. + ## Prerequisites - An AKS cluster reachable through `kubectl`, created by [scripts/01-user-assigned-managed-identity.sh](../../../scripts/01-user-assigned-managed-identity.sh). The scripts do not create the cluster; they source `./00-variables.sh`, whose values must match it (`local-aks-test` in resource group `local-rg`, location `ItalyNorth`). diff --git a/tutorials/gateway-api/scripts/README.md b/tutorials/gateway-api/scripts/README.md index 0c07460..a8d5493 100644 --- a/tutorials/gateway-api/scripts/README.md +++ b/tutorials/gateway-api/scripts/README.md @@ -6,6 +6,8 @@ On AKS the [Managed Gateway API installation](https://learn.microsoft.com/en-us/ This tutorial enables the Managed Gateway API on an AKS cluster (or the [LocalStack for Azure](https://docs.localstack.cloud/azure/) emulator), installs [NGINX Gateway Fabric](https://docs.nginx.com/nginx-gateway-fabric/) as the Gateway API implementation, and exposes an [echo-server](https://github.com/Ealenn/Echo-Server) backend through a `Gateway` and an `HTTPRoute`. It then verifies, from the host, that a request for the route's hostname reaches the backend while a request for any other hostname does not, proving the gateway makes the routing decision. There is no cert-manager and no DNS: the hostname is local-only and reached with `kubectl port-forward` and an explicit `Host` header. +> **Running on LocalStack?** Install the [lstk CLI](https://docs.localstack.cloud/aws/developer-tools/running-localstack/lstk/) and run `lstk az start-interception` to route Azure CLI calls to the emulator. See [Run against LocalStack](../../../README.md#run-against-localstack) for the full setup. + ## Prerequisites - An AKS cluster reachable through `kubectl`, created with [scripts/01-user-assigned-managed-identity.sh](../../../scripts/01-user-assigned-managed-identity.sh) (or the system-assigned variant). The values in [00-variables.sh](00-variables.sh) (cluster `local-aks-test`, resource group `local-rg`, location `ItalyNorth`) must match the cluster the script creates; edit them if you changed the cluster script's `prefix`, `suffix`, or `location`. diff --git a/tutorials/keda/README.md b/tutorials/keda/README.md index 5ef9aa4..2b257ec 100644 --- a/tutorials/keda/README.md +++ b/tutorials/keda/README.md @@ -12,6 +12,8 @@ These three tutorials each deploy a Python producer and a Python consumer as con Start with [service-bus](service-bus/) if you are new to KEDA: it is the scenario the Microsoft tutorial [Securely scale your applications using the KEDA add-on and workload identity](https://learn.microsoft.com/en-us/azure/aks/keda-workload-identity) describes. Read [queue-storage](queue-storage/) to see [Microsoft Entra Workload ID](https://learn.microsoft.com/en-us/azure/aks/workload-identity-overview) used for the applications as well, with no data-plane secret anywhere. Read [event-hubs](event-hubs/) to see a checkpoint-based scaler, where the backlog is not a queue depth but the distance between the last enqueued event and what the consumer group has checkpointed. +> **Running on LocalStack?** Install the [lstk CLI](https://docs.localstack.cloud/aws/developer-tools/running-localstack/lstk/) and run `lstk az start-interception` to route Azure CLI calls to the emulator. See [Run against LocalStack](../../README.md#run-against-localstack) for the full setup. + ## One shared managed identity The `keda-operator` service account exists once, in `kube-system`, and the annotation that binds it to a managed identity therefore applies cluster-wide. So the three tutorials deliberately share a single user-assigned managed identity, `local-keda-uami-test`, declared in [00-variables.sh](00-variables.sh): diff --git a/tutorials/keda/event-hubs/README.md b/tutorials/keda/event-hubs/README.md index 6522cc1..4a1bec0 100644 --- a/tutorials/keda/event-hubs/README.md +++ b/tutorials/keda/event-hubs/README.md @@ -6,6 +6,8 @@ This tutorial creates an Event Hubs namespace with one event hub, a dedicated consumer group, and a storage account whose blob container holds that consumer group's checkpoints. It then deploys a Python consumer that starts at **zero replicas**, and a producer that runs as a Kubernetes `Job` and sends a burst of events. KEDA observes the lag, activates the consumer, scales it out while it catches up, and returns it to zero when it has. Everything runs unchanged against a real AKS cluster and against the [LocalStack for Azure](https://docs.localstack.cloud/azure/) emulator. +> **Running on LocalStack?** Install the [lstk CLI](https://docs.localstack.cloud/aws/developer-tools/running-localstack/lstk/) and run `lstk az start-interception` to route Azure CLI calls to the emulator. See [Run against LocalStack](../../../README.md#run-against-localstack) for the full setup. + ## Architecture The producer and the consumer are two workloads in the same Kubernetes namespace inside the AKS cluster. The producer sends events to the event hub, the consumer reads them and records its progress as checkpoints in blob storage, and the KEDA add-on in `kube-system` compares the two to work out the lag that drives the scaling. diff --git a/tutorials/keda/queue-storage/README.md b/tutorials/keda/queue-storage/README.md index e1a43f7..ee7e265 100644 --- a/tutorials/keda/queue-storage/README.md +++ b/tutorials/keda/queue-storage/README.md @@ -9,6 +9,8 @@ A producer Job sends 100 messages, the `ScaledObject` activates the consumer Dep It is the only one of the three KEDA tutorials that uses [Microsoft Entra Workload ID](https://learn.microsoft.com/en-us/azure/aks/workload-identity-overview) end to end. The KEDA scaler **and** both applications authenticate with the same shared user-assigned managed identity, through their own federated identity credentials and their own service accounts, so there is **no connection string and no Kubernetes Secret anywhere in this tutorial**: the only credential is a projected service account token that Kubernetes rotates on its own, and the only Azure grant is one `Storage Queue Data Contributor` role assignment on the storage account. +> **Running on LocalStack?** Install the [lstk CLI](https://docs.localstack.cloud/aws/developer-tools/running-localstack/lstk/) and run `lstk az start-interception` to route Azure CLI calls to the emulator. See [Run against LocalStack](../../../README.md#run-against-localstack) for the full setup. + ## Architecture The producer and the consumer are two workloads in the same Kubernetes namespace inside the AKS cluster, both running as the federated `queue-app` service account. The producer fills the storage queue, the consumer drains it, and the KEDA add-on in `kube-system` reads the queue's depth to decide how many consumer replicas should exist. Every arrow that touches Azure is authenticated with workload identity. diff --git a/tutorials/keda/service-bus/README.md b/tutorials/keda/service-bus/README.md index 9170bc4..1e6ee97 100644 --- a/tutorials/keda/service-bus/README.md +++ b/tutorials/keda/service-bus/README.md @@ -8,6 +8,8 @@ The KEDA operator authenticates to Azure with [Microsoft Entra Workload ID](http The producer and consumer applications themselves use the namespace connection string. That is a deliberate difference from the scaler: the applications speak AMQP, and the emulator's AMQP listener is plain TCP (its connection strings carry `UseDevelopmentEmulator=true`), a mode that has no Microsoft Entra variant. The scaler instead reads the queue's message count over the HTTPS management API, where workload identity works on both targets. The sibling [queue-storage](../queue-storage/) tutorial shows workload identity end to end, for the scaler and for the applications. +> **Running on LocalStack?** Install the [lstk CLI](https://docs.localstack.cloud/aws/developer-tools/running-localstack/lstk/) and run `lstk az start-interception` to route Azure CLI calls to the emulator. See [Run against LocalStack](../../../README.md#run-against-localstack) for the full setup. + ## Architecture The producer and the consumer are two workloads in the same Kubernetes namespace inside the AKS cluster. The producer fills the Service Bus queue, the consumer drains it, and the KEDA add-on in `kube-system` reads the queue's depth to decide how many consumer replicas should exist. diff --git a/tutorials/key-vault-csi-driver/README.md b/tutorials/key-vault-csi-driver/README.md index 3e902d2..dcff0b3 100644 --- a/tutorials/key-vault-csi-driver/README.md +++ b/tutorials/key-vault-csi-driver/README.md @@ -32,6 +32,8 @@ If a secret in an external secrets store is updated after the initial deployment - Still requires accessing managed services such as Azure Service Bus or Azure Storage using their own connection strings from Azure Key Vault. - Cannot utilize Microsoft Entra ID integrated security and managed identities for accessing managed services. +> **Running on LocalStack?** Install the [lstk CLI](https://docs.localstack.cloud/aws/developer-tools/running-localstack/lstk/) and run `lstk az start-interception` to route Azure CLI calls to the emulator. See [Run against LocalStack](../../README.md#run-against-localstack) for the full setup. + ## Identity Access Modes The Azure Key Vault provider for Secrets Store CSI Driver supports more than one way to authenticate to Azure Key Vault. This folder contains two samples, each demonstrating a different identity access mode. Both samples mount the same `username` and `password` secrets into a demo nginx pod, but they differ in how the CSI driver obtains the credentials used to read the secrets from Key Vault. diff --git a/tutorials/policies/README.md b/tutorials/policies/README.md index 6db6758..6e6e621 100644 --- a/tutorials/policies/README.md +++ b/tutorials/policies/README.md @@ -10,6 +10,8 @@ These tutorials each build a policy scenario step by step and verify, from insid | [cilium/egress-tutorial](cilium/egress-tutorial) | Cilium | DNS-aware (FQDN) egress control: an exact hostname, a wildcard pattern, and a pattern locked to a single port. | | [cilium/ingress-tutorial](cilium/ingress-tutorial) | Cilium | Identity-aware ingress, first at L3/L4 (which workloads may connect) and then at L7 (which HTTP calls they may make). | +> **Running on LocalStack?** Install the [lstk CLI](https://docs.localstack.cloud/aws/developer-tools/running-localstack/lstk/) and run `lstk az start-interception` to route Azure CLI calls to the emulator. See [Run against LocalStack](../../README.md#run-against-localstack) for the full setup. + ## Prerequisites - An AKS cluster reachable through `kubectl`, created with the policy engine that matches the tutorial you want to run (Calico for the Calico tutorial, Cilium for the two Cilium tutorials). diff --git a/tutorials/policies/calico/calico-policy-tutorial/README.md b/tutorials/policies/calico/calico-policy-tutorial/README.md index 323fa41..ef60e42 100644 --- a/tutorials/policies/calico/calico-policy-tutorial/README.md +++ b/tutorials/policies/calico/calico-policy-tutorial/README.md @@ -9,6 +9,8 @@ Calico policy is expressed with two [Project Calico](https://docs.tigera.io/cali The demo runs in the `advanced-policy-demo` namespace with an `nginx` Deployment fronted by a ClusterIP Service and a busybox `access` pod used to probe connectivity. +> **Running on LocalStack?** Install the [lstk CLI](https://docs.localstack.cloud/aws/developer-tools/running-localstack/lstk/) and run `lstk az start-interception` to route Azure CLI calls to the emulator. See [Run against LocalStack](../../../../README.md#run-against-localstack) for the full setup. + ## Prerequisites - An AKS cluster reachable through `kubectl`, created with the **Calico** network-policy option of [scripts/01-user-assigned-managed-identity.sh](../../../../scripts/01-user-assigned-managed-identity.sh) (the script's menu offers Azure, Cilium, and Calico network policy; pick Calico). diff --git a/tutorials/policies/cilium/egress-tutorial/README.md b/tutorials/policies/cilium/egress-tutorial/README.md index a9f3656..64ae643 100644 --- a/tutorials/policies/cilium/egress-tutorial/README.md +++ b/tutorials/policies/cilium/egress-tutorial/README.md @@ -4,6 +4,8 @@ This tutorial demonstrates DNS-aware (FQDN) egress control with Cilium on an AKS It uses the Cilium [Star Wars demo](https://cilium.io/blog/2017/5/4/demo-may-the-force-be-with-you/): a `mediabot` pod (labels `org: empire`, `class: mediabot`) in the `starwars` namespace, which issues outbound `curl` calls to GitHub hostnames. Because Cilium enforces FQDN rules by observing DNS, each policy also allows DNS to kube-dns so the pod can still resolve names. The three policies are all named `fqdn`, so each `kubectl apply` overwrites the previous one. +> **Running on LocalStack?** Install the [lstk CLI](https://docs.localstack.cloud/aws/developer-tools/running-localstack/lstk/) and run `lstk az start-interception` to route Azure CLI calls to the emulator. See [Run against LocalStack](../../../../README.md#run-against-localstack) for the full setup. + ## Prerequisites - An AKS cluster reachable through `kubectl`, created with the **Cilium** network-policy option of [scripts/01-user-assigned-managed-identity.sh](../../../../scripts/01-user-assigned-managed-identity.sh) (the script's menu offers Azure, Cilium, and Calico network policy; pick Cilium). diff --git a/tutorials/policies/cilium/ingress-tutorial/README.md b/tutorials/policies/cilium/ingress-tutorial/README.md index 74ff854..39980c5 100644 --- a/tutorials/policies/cilium/ingress-tutorial/README.md +++ b/tutorials/policies/cilium/ingress-tutorial/README.md @@ -16,6 +16,8 @@ An L7 policy adds an HTTP filter so even empire ships may only call `POST /v1/re ![L3/L4/L7 policy](cilium_http_l3_l4_l7_gsg.png) +> **Running on LocalStack?** Install the [lstk CLI](https://docs.localstack.cloud/aws/developer-tools/running-localstack/lstk/) and run `lstk az start-interception` to route Azure CLI calls to the emulator. See [Run against LocalStack](../../../../README.md#run-against-localstack) for the full setup. + ## Prerequisites - An AKS cluster reachable through `kubectl`, created with the **Cilium** network-policy option of [scripts/01-user-assigned-managed-identity.sh](../../../../scripts/01-user-assigned-managed-identity.sh) (the script's menu offers Azure, Cilium, and Calico network policy; pick Cilium). diff --git a/tutorials/terraform/tags-labels-taints/README.md b/tutorials/terraform/tags-labels-taints/README.md index 573dba6..01c502d 100644 --- a/tutorials/terraform/tags-labels-taints/README.md +++ b/tutorials/terraform/tags-labels-taints/README.md @@ -10,6 +10,8 @@ The stack is a Terraform port of the Bicep version in `~/azure/aks/bicep/tags_la By default the user agent pool carries the `workload=batch` node label, the `dedicated=batch:NoSchedule` node taint, and the `costcenter=1234` scale-set tags, while the system agent pool carries the `team=platform` node label — the values pinned in [terraform.tfvars](terraform.tfvars). The [deploy.sh](deploy.sh) validation battery then proves, both through the ARM API (`az aks nodepool show`) and through the Kubernetes API (`kubectl get nodes`), that the tags, labels, and taints actually landed on the pools and the nodes. +> **Running on LocalStack?** Install the [lstk CLI](https://docs.localstack.cloud/aws/developer-tools/running-localstack/lstk/) and run `lstk az start-interception` to route Azure CLI calls to the emulator. See [Run against LocalStack](../../../README.md#run-against-localstack) for the full setup. + ## Prerequisites - [Terraform](https://developer.hashicorp.com/terraform/install) `>= 1.9.0`. The providers are pinned in [providers.tf](providers.tf): [azurerm](https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs) `4.81.0` and [azapi](https://registry.terraform.io/providers/Azure/azapi/latest/docs) `2.10.0`. diff --git a/tutorials/terraform/tags-labels-taints/providers.tf b/tutorials/terraform/tags-labels-taints/providers.tf index a4c46ab..9da475e 100644 --- a/tutorials/terraform/tags-labels-taints/providers.tf +++ b/tutorials/terraform/tags-labels-taints/providers.tf @@ -44,8 +44,9 @@ provider "azurerm" { # azapi does not use azurerm's metadata_host discovery: when targeting the emulator # deploy.sh passes resource_manager_endpoint explicitly and instance discovery is -# disabled (the emulator authority is not known to the Entra metadata service — -# same reason azlocal sets core.instance_discovery=false for the az CLI). +# disabled (the emulator authority is not known to the Entra metadata service, the +# same reason `lstk az start-interception` sets core.instance_discovery=false for +# the az CLI). provider "azapi" { subscription_id = var.subscription_id tenant_id = var.tenant_id From cc5c39401fb6d922f6c99fce868f2a18981862fc Mon Sep 17 00:00:00 2001 From: Paolo Salvatori Date: Thu, 6 Aug 2026 12:00:45 +0200 Subject: [PATCH 6/6] Address the review of the Azure Files sample Six findings from the Copilot review of #23, all verified. Failure paths reported success. `exit` with no status exits with the status of the last command, which on these paths is the `echo` that just announced the failure. Both provisioning scripts now use `exit 1` on every failure path: the two spots the review flagged in each file, and the 21 and 18 pre-existing ones, which have the same defect. The only bare `exit` left in each is the menu's `"Quit")` branch, where exiting 0 is what is meant. The app reported successes that never happened. `write_activity` and `delete_activity` now return whether the share actually changed, and the routes only touch the in-memory list and flash success when it did. Against a read-only share the app now says "Failed to add the activity to the file share." instead of claiming success and showing a row that is not on the share. `delete_activity` separates a file that is already gone (success: another replica may have deleted it, and the UI should converge) from a missing activities directory (failure: the share is not mounted). Deleting by row position could delete the wrong activity. Three replicas share one file share and the list is reloaded on every request, so the position is not stable between rendering a page and submitting a delete from it. `POST /delete` now takes the activity's file name, which the template already carried in `data-id` and now posts as a hidden field. Activity names were only implicitly validated. `os.path.basename(name) != name` did reject every name with a separator, and `..` resolved to a directory that both `open(..., "w")` and `os.remove` refuse, so nothing could escape the share. It was still an implicit guard: `is_activity_name()` now requires the shape this app creates, which rejects the empty name, `.`, `..`, both separators, and any file the app did not write. The init container assumed the activities directory existed. It chowned and seeded it directly, so pointing `ACTIVITIES_DIR` at a subdirectory of the mount, which the app documents as supported, aborted the init container before the app could start. It now runs `mkdir -p` first. Verified by running the manifest's own init script against a root-owned share with `ACTIVITIES_DIR=/data/activities`: it creates the directory, chowns it and the seeded files to 1000:1000, and is idempotent on re-run; the same script without the `mkdir` fails with `chown: cannot access '/data/activities': No such file or directory` and exits 1. Co-Authored-By: Claude Opus 5 --- .../scripts/deployment.yml | 6 + samples/web-app-file-storage/src/app.py | 115 +++++++++++++----- .../src/templates/index.html | 5 +- .../01-system-assigned-managed-identity.sh | 40 +++--- scripts/01-user-assigned-managed-identity.sh | 46 +++---- 5 files changed, 138 insertions(+), 74 deletions(-) diff --git a/samples/web-app-file-storage/scripts/deployment.yml b/samples/web-app-file-storage/scripts/deployment.yml index 293634b..ebac00d 100644 --- a/samples/web-app-file-storage/scripts/deployment.yml +++ b/samples/web-app-file-storage/scripts/deployment.yml @@ -70,6 +70,12 @@ spec: - | set -e + # A no-op when ACTIVITIES_DIR is the mount point itself, which is the default. It + # matters when it points at a subdirectory of the share: that directory has to exist + # before it can be chowned or seeded, and the app is not able to create it as uid 1000 + # on an NFS share owned by root. + mkdir -p "$ACTIVITIES_DIR" + if [ "$FILE_SHARE_PROTOCOL" = "nfs" ]; then echo "Taking ownership of $ACTIVITIES_DIR as uid 1000..." chown 1000:1000 "$ACTIVITIES_DIR" diff --git a/samples/web-app-file-storage/src/app.py b/samples/web-app-file-storage/src/app.py index d6e0121..34cc348 100644 --- a/samples/web-app-file-storage/src/app.py +++ b/samples/web-app-file-storage/src/app.py @@ -118,58 +118,98 @@ def read_activities_from_dir(): except Exception as ex: print(f"An error occurred while reading the activity files: {ex}") -def write_activity(name: str | None, content: str | None): - """Create or overwrite an activity file in the activities directory.""" - global activities_dir +def is_activity_name(name: str | None) -> bool: + """Whether the name is one of this app's activity files, and nothing else. + + Every activity is a file called YYYY-MM-DD-HH-MM-SS-activity.txt directly inside the mounted + share, so requiring that shape is both the read filter and the write guard: it rejects an empty + name, '.' and '..', anything carrying a path separator, and any name the app did not create. + Names arrive from a form field, so they are checked before they ever reach the file system. + """ + if not name or name in (".", ".."): + return False + + if name != os.path.basename(name): + return False + + if os.sep in name or (os.altsep and os.altsep in name): + return False + + return name.endswith(ACTIVITY_FILE_SUFFIX) - # Check if name and content are provided - if not name or not content: - raise ValueError("Both 'name' and 'content' must be provided to write an activity.") +def write_activity(name: str | None, content: str | None) -> bool: + """Create or overwrite an activity file in the activities directory. + Returns whether the activity is on the share, so the caller never reports a success that did not + happen: an unmounted or read-only share has to reach the user, not just the log. + """ + global activities_dir try: + if not content: + raise ValueError("An activity cannot be empty.") + if not activities_dir: raise ValueError("Activities directory is not set. Please call get_activities_dir() first.") - # Reject a name that would escape the activities directory - if os.path.basename(name) != name: - raise ValueError(f"Invalid activity name '{name}': it must not contain a path separator.") + if not is_activity_name(name): + raise ValueError(f"Invalid activity name '{name}'.") - path = os.path.join(activities_dir, name) + path = os.path.join(activities_dir, str(name)) print(f"Writing activity file '{name}' in directory '{activities_dir}'.") with open(path, "w", encoding="utf-8") as file: file.write(content) print(f"Activity file '{name}' written successfully.") + return True except ValueError as ve: print(f"Configuration Error: {ve}") + return False except OSError as ose: print(f"An error occurred while writing the activity file: {ose}") + return False except Exception as ex: print(f"An error occurred while writing the activity file: {ex}") + return False -def delete_activity(name: str): - """Delete an activity file from the activities directory.""" +def delete_activity(name: str | None) -> bool: + """Delete an activity file from the activities directory. + + Returns whether the activity is gone from the share. A file that is already gone counts as gone: + every replica mounts the same share, so another replica may have deleted it a moment earlier, + and the caller should converge on that instead of reporting a failure. + """ global activities_dir try: if not activities_dir: raise ValueError("Activities directory is not set. Please call get_activities_dir() first.") - if os.path.basename(name) != name: - raise ValueError(f"Invalid activity name '{name}': it must not contain a path separator.") + if not is_activity_name(name): + raise ValueError(f"Invalid activity name '{name}'.") - path = os.path.join(activities_dir, name) + path = os.path.join(activities_dir, str(name)) print(f"Deleting activity file '{name}' from directory '{activities_dir}'.") os.remove(path) print(f"Activity file '{name}' deleted successfully.") + return True except ValueError as ve: print(f"Configuration Error: {ve}") + return False except FileNotFoundError: - print(f"Activity file '{name}' does not exist in directory '{activities_dir}'.") + # A missing activities directory is not a deleted activity: the share itself is gone, and + # reporting success would hide that. Only a missing file counts as already deleted. + if activities_dir and not os.path.isdir(activities_dir): + print(f"Activities directory '{activities_dir}' does not exist. Is the Azure file share mounted?") + return False + + print(f"Activity file '{name}' does not exist in directory '{activities_dir}': already deleted.") + return True except OSError as ose: print(f"An error occurred while deleting the activity file: {ose}") + return False except Exception as ex: print(f"An error occurred while deleting the activity file: {ex}") + return False @app.route('/', methods=['GET', 'POST']) def index(): @@ -179,19 +219,23 @@ def index(): if activity: if row_id: # Overwrite the content of the existing activity file in place - write_activity(row_id, activity) - for i, act in enumerate(activities): - if act[0] == row_id: - activities[i] = (row_id, activity) - break - flash('Activity updated successfully.') + if write_activity(row_id, activity): + for i, act in enumerate(activities): + if act[0] == row_id: + activities[i] = (row_id, activity) + break + flash('Activity updated successfully.') + else: + flash('Failed to update the activity on the file share.') else: # Generate a unique file name with a timestamp timestamp = datetime.datetime.now().strftime("%Y-%m-%d-%H-%M-%S") name = f"{timestamp}{ACTIVITY_FILE_SUFFIX}" - write_activity(name, activity) - activities.append((name, activity)) - flash('Activity added successfully.') + if write_activity(name, activity): + activities.append((name, activity)) + flash('Activity added successfully.') + else: + flash('Failed to add the activity to the file share.') return redirect(url_for('index')) # Always reload the activities from the Azure file share on GET @@ -199,12 +243,23 @@ def index(): read_activities_from_dir() return render_template('index.html', activities=activities, pod_name=pod_name) -@app.route('/delete/', methods=['POST']) -def delete(activity_id): - if 0 <= activity_id < len(activities): - delete_activity(activities[activity_id][0]) - activities.pop(activity_id) +@app.route('/delete', methods=['POST']) +def delete(): + # The activity is identified by its file name, never by its position in the rendered page. Every + # replica mounts the same share and reloads it on each GET, so the list can change between + # rendering a page and submitting a delete from it, and an index would then delete whatever + # activity happens to sit at that position now. + name = request.form.get('activity_id', '').strip() + + if delete_activity(name): + for i, act in enumerate(activities): + if act[0] == name: + activities.pop(i) + break flash('Activity deleted successfully.') + else: + flash('Failed to delete the activity from the file share.') + return redirect(url_for('index')) # Initialize the application and the activities directory when the module is loaded. diff --git a/samples/web-app-file-storage/src/templates/index.html b/samples/web-app-file-storage/src/templates/index.html index bd338b7..f06375b 100644 --- a/samples/web-app-file-storage/src/templates/index.html +++ b/samples/web-app-file-storage/src/templates/index.html @@ -70,7 +70,10 @@

🌴 Vacation Planner

-
+ + +