From 24558f951621de908dcc2780f80fdce200d93f4d Mon Sep 17 00:00:00 2001 From: Bryan Sanchez Date: Wed, 3 Jun 2026 18:46:45 +0200 Subject: [PATCH 1/3] Add Terraform modules for Azure resources in web app with MySQL flexible server --- .github/workflows/run-samples.yml | 6 +- README.md | 1 + run-samples.sh | 6 + .../python/README.md | 137 + .../python/bicep/README.md | 95 + .../python/bicep/deploy.sh | 290 + .../python/bicep/main.bicep | 308 + .../python/bicep/main.bicepparam | 19 + .../bicep/modules/app-service-plan.bicep | 154 + .../python/bicep/modules/log-analytics.bicep | 45 + .../bicep/modules/mysql-flexible-server.bicep | 169 + .../bicep/modules/private-dns-zone.bicep | 41 + .../bicep/modules/private-endpoint.bicep | 72 + .../bicep/modules/virtual-network.bicep | 238 + .../python/bicep/modules/web-app.bicep | 212 + .../python/images/vacation-planner.png | Bin 0 -> 85690 bytes .../python/scripts/README.md | 65 + .../python/scripts/call-web-app.sh | 201 + .../python/scripts/deploy.sh | 1068 ++ .../python/scripts/validate.sh | 134 + .../python/src/app.py | 94 + .../python/src/database.py | 163 + .../python/src/gunicorn.conf.py | 18 + .../python/src/requirements.txt | 4 + .../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 + .../python/src/static/favicon.ico | Bin 0 -> 36791 bytes .../python/src/static/style.css | 341 + .../python/src/templates/index.html | 260 + .../python/terraform/README.md | 63 + .../python/terraform/deploy.sh | 220 + .../python/terraform/main.tf | 198 + .../modules/app_service_plan/main.tf | 25 + .../modules/app_service_plan/outputs.tf | 19 + .../modules/app_service_plan/variables.tf | 42 + .../terraform/modules/log_analytics/main.tf | 14 + .../terraform/modules/log_analytics/output.tf | 30 + .../modules/log_analytics/variables.tf | 37 + .../modules/mysql_flexible_server/main.tf | 55 + .../modules/mysql_flexible_server/outputs.tf | 15 + .../mysql_flexible_server/variables.tf | 81 + .../terraform/modules/nat_gateway/main.tf | 42 + .../terraform/modules/nat_gateway/output.tf | 14 + .../modules/nat_gateway/variables.tf | 43 + .../modules/network_security_group/main.tf | 53 + .../modules/network_security_group/outputs.tf | 9 + .../network_security_group/variables.tf | 51 + .../modules/private_dns_zone/main.tf | 26 + .../modules/private_dns_zone/outputs.tf | 9 + .../modules/private_dns_zone/variables.tf | 20 + .../modules/private_endpoint/main.tf | 26 + .../modules/private_endpoint/outputs.tf | 19 + .../modules/private_endpoint/variables.tf | 61 + .../terraform/modules/virtual_network/main.tf | 58 + .../modules/virtual_network/outputs.tf | 19 + .../modules/virtual_network/variables.tf | 40 + .../python/terraform/modules/web_app/main.tf | 81 + .../terraform/modules/web_app/outputs.tf | 24 + .../terraform/modules/web_app/variables.tf | 96 + .../python/terraform/outputs.tf | 27 + .../python/terraform/providers.tf | 24 + .../python/terraform/terraform.tfvars | 3 + .../python/terraform/variables.tf | 206 + 105 files changed, 66147 insertions(+), 1 deletion(-) create mode 100644 samples/web-app-mysql-flexible-server/python/README.md create mode 100644 samples/web-app-mysql-flexible-server/python/bicep/README.md create mode 100755 samples/web-app-mysql-flexible-server/python/bicep/deploy.sh create mode 100644 samples/web-app-mysql-flexible-server/python/bicep/main.bicep create mode 100644 samples/web-app-mysql-flexible-server/python/bicep/main.bicepparam create mode 100644 samples/web-app-mysql-flexible-server/python/bicep/modules/app-service-plan.bicep create mode 100644 samples/web-app-mysql-flexible-server/python/bicep/modules/log-analytics.bicep create mode 100644 samples/web-app-mysql-flexible-server/python/bicep/modules/mysql-flexible-server.bicep create mode 100644 samples/web-app-mysql-flexible-server/python/bicep/modules/private-dns-zone.bicep create mode 100644 samples/web-app-mysql-flexible-server/python/bicep/modules/private-endpoint.bicep create mode 100644 samples/web-app-mysql-flexible-server/python/bicep/modules/virtual-network.bicep create mode 100644 samples/web-app-mysql-flexible-server/python/bicep/modules/web-app.bicep create mode 100644 samples/web-app-mysql-flexible-server/python/images/vacation-planner.png create mode 100644 samples/web-app-mysql-flexible-server/python/scripts/README.md create mode 100755 samples/web-app-mysql-flexible-server/python/scripts/call-web-app.sh create mode 100755 samples/web-app-mysql-flexible-server/python/scripts/deploy.sh create mode 100755 samples/web-app-mysql-flexible-server/python/scripts/validate.sh create mode 100644 samples/web-app-mysql-flexible-server/python/src/app.py create mode 100644 samples/web-app-mysql-flexible-server/python/src/database.py create mode 100644 samples/web-app-mysql-flexible-server/python/src/gunicorn.conf.py create mode 100644 samples/web-app-mysql-flexible-server/python/src/requirements.txt create mode 100644 samples/web-app-mysql-flexible-server/python/src/static/bootstrap/css/bootstrap-grid.css create mode 100644 samples/web-app-mysql-flexible-server/python/src/static/bootstrap/css/bootstrap-grid.css.map create mode 100644 samples/web-app-mysql-flexible-server/python/src/static/bootstrap/css/bootstrap-grid.min.css create mode 100644 samples/web-app-mysql-flexible-server/python/src/static/bootstrap/css/bootstrap-grid.min.css.map create mode 100644 samples/web-app-mysql-flexible-server/python/src/static/bootstrap/css/bootstrap-grid.rtl.css create mode 100644 samples/web-app-mysql-flexible-server/python/src/static/bootstrap/css/bootstrap-grid.rtl.css.map create mode 100644 samples/web-app-mysql-flexible-server/python/src/static/bootstrap/css/bootstrap-grid.rtl.min.css create mode 100644 samples/web-app-mysql-flexible-server/python/src/static/bootstrap/css/bootstrap-grid.rtl.min.css.map create mode 100644 samples/web-app-mysql-flexible-server/python/src/static/bootstrap/css/bootstrap-reboot.css create mode 100644 samples/web-app-mysql-flexible-server/python/src/static/bootstrap/css/bootstrap-reboot.css.map create mode 100644 samples/web-app-mysql-flexible-server/python/src/static/bootstrap/css/bootstrap-reboot.min.css create mode 100644 samples/web-app-mysql-flexible-server/python/src/static/bootstrap/css/bootstrap-reboot.min.css.map create mode 100644 samples/web-app-mysql-flexible-server/python/src/static/bootstrap/css/bootstrap-reboot.rtl.css create mode 100644 samples/web-app-mysql-flexible-server/python/src/static/bootstrap/css/bootstrap-reboot.rtl.css.map create mode 100644 samples/web-app-mysql-flexible-server/python/src/static/bootstrap/css/bootstrap-reboot.rtl.min.css create mode 100644 samples/web-app-mysql-flexible-server/python/src/static/bootstrap/css/bootstrap-reboot.rtl.min.css.map create mode 100644 samples/web-app-mysql-flexible-server/python/src/static/bootstrap/css/bootstrap-utilities.css create mode 100644 samples/web-app-mysql-flexible-server/python/src/static/bootstrap/css/bootstrap-utilities.css.map create mode 100644 samples/web-app-mysql-flexible-server/python/src/static/bootstrap/css/bootstrap-utilities.min.css create mode 100644 samples/web-app-mysql-flexible-server/python/src/static/bootstrap/css/bootstrap-utilities.min.css.map create mode 100644 samples/web-app-mysql-flexible-server/python/src/static/bootstrap/css/bootstrap-utilities.rtl.css create mode 100644 samples/web-app-mysql-flexible-server/python/src/static/bootstrap/css/bootstrap-utilities.rtl.css.map create mode 100644 samples/web-app-mysql-flexible-server/python/src/static/bootstrap/css/bootstrap-utilities.rtl.min.css create mode 100644 samples/web-app-mysql-flexible-server/python/src/static/bootstrap/css/bootstrap-utilities.rtl.min.css.map create mode 100644 samples/web-app-mysql-flexible-server/python/src/static/bootstrap/css/bootstrap.css create mode 100644 samples/web-app-mysql-flexible-server/python/src/static/bootstrap/css/bootstrap.css.map create mode 100644 samples/web-app-mysql-flexible-server/python/src/static/bootstrap/css/bootstrap.min.css create mode 100644 samples/web-app-mysql-flexible-server/python/src/static/bootstrap/css/bootstrap.min.css.map create mode 100644 samples/web-app-mysql-flexible-server/python/src/static/bootstrap/css/bootstrap.rtl.css create mode 100644 samples/web-app-mysql-flexible-server/python/src/static/bootstrap/css/bootstrap.rtl.css.map create mode 100644 samples/web-app-mysql-flexible-server/python/src/static/bootstrap/css/bootstrap.rtl.min.css create mode 100644 samples/web-app-mysql-flexible-server/python/src/static/bootstrap/css/bootstrap.rtl.min.css.map create mode 100644 samples/web-app-mysql-flexible-server/python/src/static/bootstrap/js/bootstrap.bundle.js create mode 100644 samples/web-app-mysql-flexible-server/python/src/static/bootstrap/js/bootstrap.bundle.js.map create mode 100644 samples/web-app-mysql-flexible-server/python/src/static/bootstrap/js/bootstrap.bundle.min.js create mode 100644 samples/web-app-mysql-flexible-server/python/src/static/bootstrap/js/bootstrap.bundle.min.js.map create mode 100644 samples/web-app-mysql-flexible-server/python/src/static/bootstrap/js/bootstrap.esm.js create mode 100644 samples/web-app-mysql-flexible-server/python/src/static/bootstrap/js/bootstrap.esm.js.map create mode 100644 samples/web-app-mysql-flexible-server/python/src/static/bootstrap/js/bootstrap.esm.min.js create mode 100644 samples/web-app-mysql-flexible-server/python/src/static/bootstrap/js/bootstrap.esm.min.js.map create mode 100644 samples/web-app-mysql-flexible-server/python/src/static/bootstrap/js/bootstrap.js create mode 100644 samples/web-app-mysql-flexible-server/python/src/static/bootstrap/js/bootstrap.js.map create mode 100644 samples/web-app-mysql-flexible-server/python/src/static/bootstrap/js/bootstrap.min.js create mode 100644 samples/web-app-mysql-flexible-server/python/src/static/bootstrap/js/bootstrap.min.js.map create mode 100644 samples/web-app-mysql-flexible-server/python/src/static/favicon.ico create mode 100644 samples/web-app-mysql-flexible-server/python/src/static/style.css create mode 100644 samples/web-app-mysql-flexible-server/python/src/templates/index.html create mode 100644 samples/web-app-mysql-flexible-server/python/terraform/README.md create mode 100755 samples/web-app-mysql-flexible-server/python/terraform/deploy.sh create mode 100644 samples/web-app-mysql-flexible-server/python/terraform/main.tf create mode 100644 samples/web-app-mysql-flexible-server/python/terraform/modules/app_service_plan/main.tf create mode 100644 samples/web-app-mysql-flexible-server/python/terraform/modules/app_service_plan/outputs.tf create mode 100644 samples/web-app-mysql-flexible-server/python/terraform/modules/app_service_plan/variables.tf create mode 100644 samples/web-app-mysql-flexible-server/python/terraform/modules/log_analytics/main.tf create mode 100644 samples/web-app-mysql-flexible-server/python/terraform/modules/log_analytics/output.tf create mode 100644 samples/web-app-mysql-flexible-server/python/terraform/modules/log_analytics/variables.tf create mode 100644 samples/web-app-mysql-flexible-server/python/terraform/modules/mysql_flexible_server/main.tf create mode 100644 samples/web-app-mysql-flexible-server/python/terraform/modules/mysql_flexible_server/outputs.tf create mode 100644 samples/web-app-mysql-flexible-server/python/terraform/modules/mysql_flexible_server/variables.tf create mode 100644 samples/web-app-mysql-flexible-server/python/terraform/modules/nat_gateway/main.tf create mode 100644 samples/web-app-mysql-flexible-server/python/terraform/modules/nat_gateway/output.tf create mode 100644 samples/web-app-mysql-flexible-server/python/terraform/modules/nat_gateway/variables.tf create mode 100644 samples/web-app-mysql-flexible-server/python/terraform/modules/network_security_group/main.tf create mode 100644 samples/web-app-mysql-flexible-server/python/terraform/modules/network_security_group/outputs.tf create mode 100644 samples/web-app-mysql-flexible-server/python/terraform/modules/network_security_group/variables.tf create mode 100644 samples/web-app-mysql-flexible-server/python/terraform/modules/private_dns_zone/main.tf create mode 100644 samples/web-app-mysql-flexible-server/python/terraform/modules/private_dns_zone/outputs.tf create mode 100644 samples/web-app-mysql-flexible-server/python/terraform/modules/private_dns_zone/variables.tf create mode 100644 samples/web-app-mysql-flexible-server/python/terraform/modules/private_endpoint/main.tf create mode 100644 samples/web-app-mysql-flexible-server/python/terraform/modules/private_endpoint/outputs.tf create mode 100644 samples/web-app-mysql-flexible-server/python/terraform/modules/private_endpoint/variables.tf create mode 100644 samples/web-app-mysql-flexible-server/python/terraform/modules/virtual_network/main.tf create mode 100644 samples/web-app-mysql-flexible-server/python/terraform/modules/virtual_network/outputs.tf create mode 100644 samples/web-app-mysql-flexible-server/python/terraform/modules/virtual_network/variables.tf create mode 100644 samples/web-app-mysql-flexible-server/python/terraform/modules/web_app/main.tf create mode 100644 samples/web-app-mysql-flexible-server/python/terraform/modules/web_app/outputs.tf create mode 100644 samples/web-app-mysql-flexible-server/python/terraform/modules/web_app/variables.tf create mode 100644 samples/web-app-mysql-flexible-server/python/terraform/outputs.tf create mode 100644 samples/web-app-mysql-flexible-server/python/terraform/providers.tf create mode 100644 samples/web-app-mysql-flexible-server/python/terraform/terraform.tfvars create mode 100644 samples/web-app-mysql-flexible-server/python/terraform/variables.tf diff --git a/.github/workflows/run-samples.yml b/.github/workflows/run-samples.yml index a144a3e..aabbdae 100644 --- a/.github/workflows/run-samples.yml +++ b/.github/workflows/run-samples.yml @@ -120,9 +120,13 @@ jobs: # jq: for parsing JSON responses from Azure CLI. # zip: for packaging function/web apps. # unixodbc-dev & libsnappy-dev: required for Python database drivers (pyodbc, pymongo). + # default-mysql-client: provides the `mysql` CLI used by the MySQL flexible-server sample + # to create the application user and seed the database schema in the local emulator. + # postgresql-client: provides the `psql` CLI used by the PostgreSQL flexible-server sample + # to create the application role and seed the database schema in the local emulator. run: | sudo apt-get update - sudo apt-get install -y jq zip unixodbc-dev libsnappy-dev + sudo apt-get install -y jq zip unixodbc-dev libsnappy-dev default-mysql-client postgresql-client find . -name "*.sh" -exec chmod +x {} + - name: Install Terraform diff --git a/README.md b/README.md index 7e2d4aa..d3962e1 100644 --- a/README.md +++ b/README.md @@ -35,6 +35,7 @@ This repository contains comprehensive sample projects demonstrating how to deve | [Web App and Managed Identities](./samples/web-app-managed-identity/python/README.md) | Azure Web App using Managed Identities | | [Web App and SQL Database ](./samples/web-app-sql-database/python/README.md) | Azure Web App using SQL Database | | [Web App and PostgreSQL Database ](./samples/web-app-postgresql-flexible-server/python/README.md) | Azure Web App using PostgreSQL Database | +| [Web App and MySQL Database ](./samples/web-app-mysql-flexible-server/python/README.md) | Azure Web App using MySQL Database | | [Web App with Custom Docker Image](./samples/web-app-custom-image/python/README.md) | Azure Web App running a custom Docker image | | [ACI and Blob Storage](./samples/aci-blob-storage/python/README.md) | Azure Container Instances with ACR, Key Vault, and Blob Storage | | [Azure Service Bus with Spring Boot](./samples/servicebus/java/README.md) | Azure Service Bus used by a Spring Boot application | diff --git a/run-samples.sh b/run-samples.sh index 6595923..3d8da21 100755 --- a/run-samples.sh +++ b/run-samples.sh @@ -37,6 +37,8 @@ SAMPLES=( "samples/web-app-cosmosdb-mongodb-api/python|bash scripts/deploy.sh|bash scripts/validate.sh && bash scripts/call-web-app.sh" "samples/web-app-managed-identity/python|bash scripts/user-assigned.sh|bash scripts/validate.sh && bash scripts/call-web-app.sh" "samples/web-app-sql-database/python|bash scripts/deploy.sh|bash scripts/validate.sh && bash scripts/get-web-app-url.sh" + "samples/web-app-postgresql-flexible-server/python|bash scripts/deploy.sh|bash scripts/validate.sh && bash scripts/call-web-app.sh" + "samples/web-app-mysql-flexible-server/python|bash scripts/deploy.sh|bash scripts/validate.sh && bash scripts/call-web-app.sh" "samples/web-app-custom-image/python|bash scripts/deploy.sh|bash scripts/validate.sh && bash scripts/call-web-app.sh" "samples/aci-blob-storage/python|bash scripts/deploy.sh|bash scripts/validate.sh" ) @@ -50,6 +52,8 @@ TERRAFORM_SAMPLES=( "samples/web-app-cosmosdb-mongodb-api/python/terraform|bash deploy.sh" "samples/web-app-managed-identity/python/terraform|bash deploy.sh" "samples/web-app-sql-database/python/terraform|bash deploy.sh" + "samples/web-app-postgresql-flexible-server/python/terraform|bash deploy.sh" + "samples/web-app-mysql-flexible-server/python/terraform|bash deploy.sh" "samples/aci-blob-storage/python/terraform|bash deploy.sh" ) @@ -62,6 +66,8 @@ BICEP_SAMPLES=( "samples/function-app-storage-http/dotnet/bicep|bash deploy.sh" "samples/web-app-cosmosdb-mongodb-api/python/bicep|bash deploy.sh" "samples/web-app-managed-identity/python/bicep|bash deploy.sh" + "samples/web-app-postgresql-flexible-server/python/bicep|bash deploy.sh" + "samples/web-app-mysql-flexible-server/python/bicep|bash deploy.sh" "samples/aci-blob-storage/python/bicep|bash deploy.sh" ) diff --git a/samples/web-app-mysql-flexible-server/python/README.md b/samples/web-app-mysql-flexible-server/python/README.md new file mode 100644 index 0000000..8ea20e6 --- /dev/null +++ b/samples/web-app-mysql-flexible-server/python/README.md @@ -0,0 +1,137 @@ +# Azure Web App with Azure Database for MySQL flexible server + +This sample demonstrates a Python Flask single-page web application called *Vacation Planner* hosted on an [Azure Web App](https://learn.microsoft.com/en-us/azure/app-service/overview). The app runs on an Azure App Service Plan and stores activity data in the `activities` table of the `PlannerDB` database on an [Azure Database for MySQL flexible server](https://learn.microsoft.com/en-us/azure/mysql/flexible-server/overview). The server is reached through a [Private Endpoint](https://learn.microsoft.com/azure/private-link/private-endpoint-overview) (group `mysqlServer`) with the `privatelink.mysql.database.azure.com` Private DNS Zone, while a permissive server-level firewall rule lets the deploy machine run the post-create mysql bootstrap that creates the application user and seeds the schema. + +## Architecture + +```mermaid +flowchart LR + user([User]) + + subgraph rg["Resource Group: local-rg"] + direction LR + law["Log Analytics
Workspace"] + nat["NAT Gateway"] + dns["Private DNS Zone
privatelink.mysql.database.azure.com"] + asp["App Service Plan
S1 · Linux"] + mysql[("MySQL Flexible Server
8.0.21 · Burstable B1ms
DB: PlannerDB")] + + subgraph vnet["Virtual Network 10.0.0.0/8"] + direction TB + subgraph appsub["app-subnet 10.0.0.0/24 — delegated to Microsoft.Web/serverFarms"] + webapp["Web App
Vacation Planner
Flask + gunicorn"] + end + subgraph pesub["pe-subnet 10.0.1.0/24"] + pe["Private Endpoint
group: mysqlServer"] + end + end + end + + user -->|HTTP| webapp + webapp -->|"MYSQL_HOST:MYSQL_PORT
(resolved via Private DNS)"| pe + pe -->|Private Link| mysql + dns -.->|A record| pe + dns -.->|linked| vnet + appsub -->|outbound| nat + webapp -.->|hosted on| asp + webapp -.->|diagnostics| law + mysql -.->|diagnostics| law +``` + +The web app enables users to plan and manage vacation activities; all data is persisted in MySQL. The solution is composed of the following Azure resources: + +1. [Azure Resource Group](https://learn.microsoft.com/en-us/azure/azure-resource-manager/management/manage-resource-groups-cli): A logical container scoping all resources in this sample. +2. [Azure Virtual Network](https://learn.microsoft.com/azure/virtual-network/virtual-networks-overview): Hosts two subnets: + - *app-subnet*: Delegated to `Microsoft.Web/serverFarms` for regional VNet integration of the Web App. + - *pe-subnet*: Hosts the Private Endpoint to the MySQL flexible server. +3. [Azure Private DNS Zone](https://learn.microsoft.com/azure/dns/private-dns-privatednszone) `privatelink.mysql.database.azure.com`, linked to the VNet. The Private Endpoint's DNS-zone group auto-registers the `A` record for the server, so the Web App resolves the server's private IP through the VNet. +4. [Azure Private Endpoint](https://learn.microsoft.com/azure/private-link/private-endpoint-overview) (group `mysqlServer`): Secures access to the MySQL flexible server from the VNet. +5. [Azure NAT Gateway](https://learn.microsoft.com/azure/nat-gateway/nat-overview): Deterministic outbound connectivity for both subnets. +6. [Azure Network Security Group](https://learn.microsoft.com/en-us/azure/virtual-network/network-security-groups-overview): One NSG per subnet. +7. [Azure Log Analytics Workspace](https://learn.microsoft.com/azure/azure-monitor/logs/log-analytics-overview): Centralizes diagnostic logs and metrics. +8. [Azure Database for MySQL flexible server](https://learn.microsoft.com/en-us/azure/mysql/flexible-server/overview): Public-access server hosting the `PlannerDB` database. Burstable `Standard_B1ms`, version 8.0.21, 32 GiB storage, 7-day backup retention, HA disabled. A permissive firewall rule (`0.0.0.0–255.255.255.255`) is created so the deploy machine can run the post-create mysql bootstrap; the Web App itself reaches the server through the Private Endpoint. +9. [MySQL database](https://learn.microsoft.com/en-us/azure/mysql/flexible-server/how-to-create-manage-databases) `PlannerDB`: Created at provisioning time; the post-deploy mysql step creates the `activities` table and seeds the demo rows. +10. [Azure App Service Plan](https://learn.microsoft.com/en-us/azure/app-service/overview-hosting-plans): The underlying compute tier that hosts the web application. +11. [Azure Web App](https://learn.microsoft.com/en-us/azure/app-service/overview): Runs the Python Flask *Vacation Planner* app with regional VNet integration into *app-subnet*. The Web App connects to MySQL using a dedicated application user (`testuser`) — the server-admin login is never used at runtime. +12. [App Service Source Control](https://learn.microsoft.com/en-us/rest/api/appservice/web-apps/create-or-update-source-control?view=rest-appservice-2024-11-01): *(Optional)* Configures continuous deployment from a public GitHub repository. + +The deploy scripts follow the same pattern as the sibling [`web-app-postgresql-flexible-server`](../../web-app-postgresql-flexible-server/python/) sample: after provisioning, they (i) connect as the server admin via the public endpoint + firewall rule, (ii) create the application user `testuser` with its own password, (iii) grant privileges on `PlannerDB`, (iv) create the `activities` table, (v) seed sample rows, and (vi) write `MYSQL_USER=testuser` + `MYSQL_PASSWORD` onto the Web App's app settings. The server-admin login is never written into the Web App's runtime configuration. + +## Prerequisites + +- [Azure Subscription](https://azure.microsoft.com/free/) +- [Azure CLI](https://learn.microsoft.com/en-us/cli/azure/install-azure-cli) +- [Python 3.11+](https://www.python.org/downloads/) +- [Flask](https://flask.palletsprojects.com/) +- [PyMySQL](https://pymysql.readthedocs.io/) +- [MySQL client tools](https://dev.mysql.com/downloads/) (`mysql`) — required by the deploy scripts to create the application user and seed data +- [Bicep extension](https://marketplace.visualstudio.com/items?itemName=ms-azuretools.vscode-bicep), if you plan to install the sample via Bicep +- [Terraform](https://developer.hashicorp.com/terraform/downloads), if you plan to install the sample via Terraform + +## Deployment + +Set up the Azure emulator using the LocalStack for Azure Docker image. Before starting, ensure you have a valid `LOCALSTACK_AUTH_TOKEN`. Refer to the [Auth Token guide](https://docs.localstack.cloud/getting-started/auth-token/) to obtain yours. Pull and start the emulator: + +```bash +docker pull localstack/localstack-azure + +export LOCALSTACK_AUTH_TOKEN= +IMAGE_NAME=localstack/localstack-azure localstack start -d +localstack wait -t 60 + +# Route all Azure CLI calls to the LocalStack Azure emulator +azlocal start-interception +``` + +Deploy the application using one of these methods: + +- [Azure CLI Deployment](./scripts/README.md) +- [Bicep Deployment](./bicep/README.md) +- [Terraform Deployment](./terraform/README.md) + +All three variants provision the same topology: VNet + pe-subnet hosting a Private Endpoint targeting a public-access MySQL flexible server, with a Private DNS Zone linked to the VNet. + +> **Note** +> When you deploy the application to LocalStack for Azure for the first time, the initialization process pulls and builds Docker images (LocalStack itself plus the `mysql:8` backing container for the flexible-server emulator). This is a one-time operation — subsequent deployments are much faster. + +## Test + +1. Retrieve the port published and mapped to port 80 by the Docker container hosting the emulated Web App. +2. Open a web browser and navigate to `http://localhost:`. +3. If the deployment was successful, you will see the *Vacation Planner* UI with the seeded activities and can add, edit, and remove activities. + +![Vacation Planner UI](./images/vacation-planner.png) + +You can use the `scripts/call-web-app.sh` Bash script to call the web app from outside the emulator. The script demonstrates four call paths: + +1. **Through the LocalStack for Azure emulator** via the default hostname. +2. **Via localhost and host port** mapped to the container's port `80`. +3. **Via container IP address** on port `80`. +4. **Via the default hostname** `.azurewebsites.azure.localhost.localstack.cloud:4566`. + +## MySQL Tooling + +You can use [MySQL Workbench](https://www.mysql.com/products/workbench/) to explore and manage the deployed database. Connect using: + +| Field | Value | +| -------- | ------------------------------------------------------------------------------ | +| Host | `localhost` | +| Port | (see `docker ps` for the host-mapped port of the backing `mysql:8` container) | +| Database | `PlannerDB` | +| Username | `testuser` *(or `myadmin` for admin operations)* | +| Password | `TestP@ssw0rd123` *(or `P@ssw0rd1234!` for the admin)* | + +Or use the [`mysql`](https://dev.mysql.com/doc/refman/8.0/en/mysql.html) command-line client: + +```bash +MYSQL_PWD='TestP@ssw0rd123' mysql -h localhost -P -u testuser PlannerDB +mysql> SELECT id, username, activity, created_at FROM activities; +``` + +## References + +- [Azure Web Apps Documentation](https://learn.microsoft.com/en-us/azure/app-service/) +- [Azure Database for MySQL — flexible server](https://learn.microsoft.com/en-us/azure/mysql/flexible-server/) +- [Quickstart: Python Flask on Azure](https://learn.microsoft.com/en-us/azure/app-service/quickstart-python?tabs=flask%2Cbrowser) +- [PyMySQL documentation](https://pymysql.readthedocs.io/) +- [LocalStack for Azure](https://docs.localstack.cloud/azure/) diff --git a/samples/web-app-mysql-flexible-server/python/bicep/README.md b/samples/web-app-mysql-flexible-server/python/bicep/README.md new file mode 100644 index 0000000..a01f75a --- /dev/null +++ b/samples/web-app-mysql-flexible-server/python/bicep/README.md @@ -0,0 +1,95 @@ +# Bicep Deployment + +This directory contains the Bicep template and a deployment script for provisioning the sample's Azure resources. For details about the sample application, see [Azure Web App with Azure Database for MySQL flexible server](../README.md). + +## Prerequisites + +- [LocalStack for Azure](https://docs.localstack.cloud/azure/) +- [Visual Studio Code](https://code.visualstudio.com/) + [Bicep extension](https://marketplace.visualstudio.com/items?itemName=ms-azuretools.vscode-bicep) +- [Docker](https://docs.docker.com/get-docker/) +- [Azure CLI](https://learn.microsoft.com/en-us/cli/azure/install-azure-cli) + [Azlocal CLI](https://azure.localstack.cloud/user-guides/sdks/az/) +- [Python 3.12+](https://www.python.org/downloads/) +- [MySQL client (`mysql`)](https://dev.mysql.com/downloads/) +- [`jq`](https://jqlang.org/) + +```bash +pip install azlocal +``` + +## Architecture Overview + +The [`deploy.sh`](deploy.sh) script creates the resource group while the Bicep modules create: + +1. [Azure Virtual Network](https://learn.microsoft.com/azure/virtual-network/virtual-networks-overview) with two subnets: + - *app-subnet*: delegated to `Microsoft.Web/serverFarms` for the Web App's regional VNet integration. + - *pe-subnet*: hosts the Private Endpoint to the MySQL flexible server. +2. [Azure Private DNS Zone](https://learn.microsoft.com/azure/dns/private-dns-privatednszone) `privatelink.mysql.database.azure.com`, linked to the VNet. +3. [Azure Private Endpoint](https://learn.microsoft.com/azure/private-link/private-endpoint-overview) (group `mysqlServer`). +4. [Azure NAT Gateway](https://learn.microsoft.com/azure/nat-gateway/nat-overview). +5. [Network Security Groups](https://learn.microsoft.com/en-us/azure/virtual-network/network-security-groups-overview): one per subnet. +6. [Azure Log Analytics Workspace](https://learn.microsoft.com/azure/azure-monitor/logs/log-analytics-overview). +7. [Azure Database for MySQL flexible server](https://learn.microsoft.com/en-us/azure/mysql/flexible-server/overview): public-access mode, Burstable `Standard_B1ms`, version 8.0.21, 32 GiB, HA disabled. A permissive firewall rule (`0.0.0.0–255.255.255.255`) lets the deploy machine reach the server for the post-create mysql bootstrap. +8. [MySQL database](https://learn.microsoft.com/en-us/azure/mysql/flexible-server/how-to-create-manage-databases) `PlannerDB` (utf8mb4 / `utf8mb4_unicode_ci`). +9. [Azure App Service Plan](https://learn.microsoft.com/en-us/azure/app-service/overview-hosting-plans). +10. [Azure Web App](https://learn.microsoft.com/en-us/azure/app-service/overview) with regional VNet integration into *app-subnet*. The Bicep template sets `MYSQL_HOST`, `MYSQL_PORT`, and `MYSQL_DATABASE` on the Web App but **does not** set `MYSQL_USER` or `MYSQL_PASSWORD` — those are written by `deploy.sh` after the mysql client creates the application user. + +## Configuration + +Update [`main.bicepparam`](main.bicepparam) before deploying. The defaults are: + +```bicep +using 'main.bicep' + +param prefix = 'local' +param suffix = 'test' +param runtimeName = 'python' +param runtimeVersion = '3.13' +param databaseName = 'PlannerDB' +param username = 'paolo' + +param mysqlAdminLogin = 'myadmin' +param mysqlAdminPassword = readEnvironmentVariable('MYSQL_ADMIN_PASSWORD', '') +param mysqlVersion = '8.0.21' +param mysqlSkuTier = 'Burstable' +param mysqlSkuName = 'Standard_B1ms' +param mysqlStorageSizeGB = 32 +param mysqlBackupRetentionDays = 7 +``` + +`mysqlAdminPassword` is read from the `MYSQL_ADMIN_PASSWORD` env var. `deploy.sh` sets a default (`P@ssw0rd1234!`) if not provided; override for non-dev deployments. + +## Deployment + +```bash +# default values +bash deploy.sh + +# override admin and app-user secrets +MYSQL_ADMIN_PASSWORD='' \ +MYSQL_APP_PASSWORD='' \ +bash deploy.sh +``` + +The script will: + +1. Ensure the resource group exists. +2. Validate `main.bicep`. +3. Deploy the template, passing `mysqlAdminPassword`. +4. Use the `mysql` client (connected via the public endpoint + firewall rule) to create the `testuser` user, the `activities` table, and the demo rows. +5. Set the Web App's `MYSQL_USER`/`MYSQL_PASSWORD` to `testuser` / `` — the server admin login is never written to the Web App. +6. Zip the application source under `../src` and deploy it. + +## Verification + +```bash +MYSQL_PWD='TestP@ssw0rd123' mysql -h -P -u testuser PlannerDB \ + -e "SELECT id, username, activity, created_at FROM activities;" +``` + +`` is `3306` in real Azure, or the port suffix of the server's FQDN in LocalStack: + +```bash +az mysql flexible-server show \ + --resource-group local-rg --name local-mysqlflex-test \ + --query fullyQualifiedDomainName --output tsv +``` diff --git a/samples/web-app-mysql-flexible-server/python/bicep/deploy.sh b/samples/web-app-mysql-flexible-server/python/bicep/deploy.sh new file mode 100755 index 0000000..946e72e --- /dev/null +++ b/samples/web-app-mysql-flexible-server/python/bicep/deploy.sh @@ -0,0 +1,290 @@ +#!/bin/bash + +# Variables +PREFIX='local' +SUFFIX='test' +TEMPLATE="main.bicep" +PARAMETERS="main.bicepparam" +RESOURCE_GROUP_NAME="${PREFIX}-rg" +LOCATION="westeurope" +VALIDATE_TEMPLATE=1 +USE_WHAT_IF=0 +SUBSCRIPTION_NAME=$(az account show --query name --output tsv) +MYSQL_ADMIN_USER="myadmin" +MYSQL_ADMIN_PASSWORD="P@ssw0rd1234!" +MYSQL_APP_USER="testuser" +MYSQL_APP_PASSWORD="TestP@ssw0rd123" +CURRENT_DIR="$(cd "$(dirname "$0")" && pwd)" +ZIPFILE="planner_website.zip" + +# Change the current directory to the script's directory +cd "$CURRENT_DIR" || exit + +# Validates if the resource group exists in the subscription, if not creates it +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]..." + + # Create the resource group + 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 + fi +else + echo "Resource group [$RESOURCE_GROUP_NAME] already exists in the subscription [$SUBSCRIPTION_NAME]" +fi + +# Validates the Bicep template +if [[ $VALIDATE_TEMPLATE == 1 ]]; then + if [[ $USE_WHAT_IF == 1 ]]; then + # Execute a deployment What-If operation at resource group scope. + echo "Previewing changes deployed by Bicep template [$TEMPLATE]..." + az deployment group what-if \ + --resource-group $RESOURCE_GROUP_NAME \ + --template-file $TEMPLATE \ + --parameters $PARAMETERS \ + --parameters location=$LOCATION \ + prefix=$PREFIX \ + suffix=$SUFFIX \ + mysqlAdminPassword="$MYSQL_ADMIN_PASSWORD" \ + --only-show-errors + + if [[ $? == 0 ]]; then + echo "Bicep template [$TEMPLATE] validation succeeded" + else + echo "Failed to validate Bicep template [$TEMPLATE]" + exit + fi + else + # Validate the Bicep template + echo "Validating Bicep template [$TEMPLATE]..." + output=$(az deployment group validate \ + --resource-group $RESOURCE_GROUP_NAME \ + --template-file $TEMPLATE \ + --parameters $PARAMETERS \ + --parameters location=$LOCATION \ + prefix=$PREFIX \ + suffix=$SUFFIX \ + mysqlAdminPassword="$MYSQL_ADMIN_PASSWORD" \ + --only-show-errors) + + if [[ $? == 0 ]]; then + echo "Bicep template [$TEMPLATE] validation succeeded" + else + echo "Failed to validate Bicep template [$TEMPLATE]" + echo "$output" + exit + fi + fi +fi + +# Deploy the Bicep template +echo "Deploying Bicep template [$TEMPLATE]..." +if DEPLOYMENT_OUTPUTS=$(az deployment group create \ + --resource-group $RESOURCE_GROUP_NAME \ + --only-show-errors \ + --template-file $TEMPLATE \ + --parameters $PARAMETERS \ + --parameters location=$LOCATION \ + prefix=$PREFIX \ + suffix=$SUFFIX \ + mysqlAdminPassword="$MYSQL_ADMIN_PASSWORD" \ + --query 'properties.outputs' -o json); then + # Extract only the JSON portion (everything from first { to the end) + DEPLOYMENT_JSON=$(echo "$DEPLOYMENT_OUTPUTS" | sed -n '/{/,$ p') + echo "Bicep template [$TEMPLATE] deployed successfully. Outputs:" + echo "$DEPLOYMENT_JSON" | jq . + WEB_APP_NAME=$(echo "$DEPLOYMENT_JSON" | jq -r '.webAppName.value') + MYSQL_SERVER_NAME=$(echo "$DEPLOYMENT_JSON" | jq -r '.mysqlServerName.value') + MYSQL_FQDN_FULL=$(echo "$DEPLOYMENT_JSON" | jq -r '.mysqlFqdn.value') + DATABASE_NAME=$(echo "$DEPLOYMENT_JSON" | jq -r '.databaseName.value') + echo "Deployment details:" + echo "Web App Name: $WEB_APP_NAME" + echo "MySQL Server Name: $MYSQL_SERVER_NAME" + echo "MySQL FQDN: $MYSQL_FQDN_FULL" + echo "Database Name: $DATABASE_NAME" +else + echo "Failed to deploy Bicep template [$TEMPLATE]" + exit 1 +fi + +if [[ -z "$WEB_APP_NAME" || -z "$MYSQL_SERVER_NAME" ]]; then + echo "Web App Name or MySQL Server Name is empty. Exiting." + exit 1 +fi + +# Split host:port — the LocalStack emulator embeds the dynamically allocated TCP-proxy port +# directly in fullyQualifiedDomainName, mirroring the storage / container registry emulators. +# Real Azure returns just the bare host so MYSQL_PORT defaults to 3306. +MYSQL_FQDN="${MYSQL_FQDN_FULL%%:*}" +if [[ "$MYSQL_FQDN_FULL" == *:* ]]; then + MYSQL_PORT="${MYSQL_FQDN_FULL##*:}" +else + MYSQL_PORT=3306 +fi +echo "MySQL host = $MYSQL_FQDN, port = $MYSQL_PORT" + +# Create application user [$MYSQL_APP_USER] on the MySQL flexible server +echo "Creating login [$MYSQL_APP_USER] on the [$MYSQL_SERVER_NAME] MySQL flexible server..." +MYSQL_PWD="$MYSQL_ADMIN_PASSWORD" mysql \ + --host="$MYSQL_FQDN" \ + --port="$MYSQL_PORT" \ + --user="$MYSQL_ADMIN_USER" \ + --protocol=TCP \ + -e "CREATE USER IF NOT EXISTS '$MYSQL_APP_USER'@'%' IDENTIFIED BY '$MYSQL_APP_PASSWORD'; + GRANT ALL PRIVILEGES ON \`$DATABASE_NAME\`.* TO '$MYSQL_APP_USER'@'%'; + FLUSH PRIVILEGES;" + +if [ $? -eq 0 ]; then + echo "Login [$MYSQL_APP_USER] created successfully" +else + echo "Failed to create login [$MYSQL_APP_USER]" + exit 1 +fi + +# Test connection +echo "Testing connection with user [$MYSQL_APP_USER]..." +MYSQL_PWD="$MYSQL_APP_PASSWORD" mysql \ + --host="$MYSQL_FQDN" \ + --port="$MYSQL_PORT" \ + --user="$MYSQL_APP_USER" \ + --protocol=TCP \ + --database="$DATABASE_NAME" \ + -e "SELECT CURRENT_USER() AS user_name, DATABASE() AS db_name, NOW() AS server_time;" + +if [ $? -eq 0 ]; then + echo "Connection test successful with user [$MYSQL_APP_USER]" +else + echo "Connection test failed with user [$MYSQL_APP_USER]" + exit 1 +fi + +# Create [activities] table +echo "Creating [activities] table in the [$DATABASE_NAME] database..." +MYSQL_PWD="$MYSQL_APP_PASSWORD" mysql \ + --host="$MYSQL_FQDN" \ + --port="$MYSQL_PORT" \ + --user="$MYSQL_APP_USER" \ + --protocol=TCP \ + --database="$DATABASE_NAME" \ + -e "CREATE TABLE IF NOT EXISTS activities ( + id VARCHAR(32) NOT NULL, + username VARCHAR(255) NOT NULL, + activity TEXT NOT NULL, + created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + PRIMARY KEY (id), + INDEX idx_activities_username (username), + INDEX idx_activities_created_at (created_at DESC) + );" + +if [ $? -eq 0 ]; then + echo "[activities] table created successfully" +else + echo "Failed to create [activities] table" + exit 1 +fi + +# Insert sample data +echo "Inserting sample data into [activities] table..." +MYSQL_PWD="$MYSQL_APP_PASSWORD" mysql \ + --host="$MYSQL_FQDN" \ + --port="$MYSQL_PORT" \ + --user="$MYSQL_APP_USER" \ + --protocol=TCP \ + --database="$DATABASE_NAME" \ + -e "INSERT IGNORE INTO activities (id, username, activity) VALUES + (MD5('paolo_pisa_seed'), 'paolo', 'Visit the Leaning Tower in Pisa'), + (MD5('paolo_volterra_seed'), 'paolo', 'Explore Etruscan walls in Volterra'), + (MD5('paolo_san_gimignano_seed'), 'paolo', 'Climb Torre Grossa in San Gimignano'), + (MD5('paolo_siena_seed'), 'paolo', 'Walk across Piazza del Campo in Siena'), + (MD5('paolo_montalcino_seed'), 'paolo', 'Taste Brunello wine in Montalcino'), + (MD5('paolo_pienza_seed'), 'paolo', 'Sample Pecorino cheese in Pienza'), + (MD5('paolo_florence_seed'), 'paolo', 'Admire Michelangelo''s David in Florence'), + (MD5('paolo_viareggio_beach_seed'), 'paolo', 'Relax by the beach in Viareggio'), + (MD5('paolo_viareggio_promenade_seed'), 'paolo', 'Stroll along the Viareggio promenade');" + +if [ $? -eq 0 ]; then + echo "Sample data inserted successfully into [activities] table" +else + echo "Failed to insert sample data into [activities] table" + exit 1 +fi + +# Query sample data +echo "Querying sample data from [activities] table..." +MYSQL_PWD="$MYSQL_APP_PASSWORD" mysql \ + --host="$MYSQL_FQDN" \ + --port="$MYSQL_PORT" \ + --user="$MYSQL_APP_USER" \ + --protocol=TCP \ + --database="$DATABASE_NAME" \ + -e "SELECT * FROM activities;" + +if [ $? -eq 0 ]; then + echo "Sample data queried successfully from [activities] table" +else + echo "Failed to query sample data from [activities] table" + exit 1 +fi + +# Set MYSQL_USER + MYSQL_PASSWORD on the web app to point at the application user +echo "Setting MYSQL_USER=[$MYSQL_APP_USER] and MYSQL_PASSWORD on the [$WEB_APP_NAME] web app..." +az webapp config appsettings set \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --name "$WEB_APP_NAME" \ + --settings MYSQL_USER="$MYSQL_APP_USER" MYSQL_PASSWORD="$MYSQL_APP_PASSWORD" \ + --only-show-errors 1>/dev/null + +if [ $? -eq 0 ]; then + echo "MYSQL_USER and MYSQL_PASSWORD set successfully on the [$WEB_APP_NAME] web app" +else + echo "Failed to set MYSQL_USER and MYSQL_PASSWORD on the [$WEB_APP_NAME] web app" + exit 1 +fi + +# Print the application settings of the web app +echo "Retrieving application settings for web app [$WEB_APP_NAME]..." +az webapp config appsettings list \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --name "$WEB_APP_NAME" + +# Change current directory to source folder +cd "../src" || exit + +# Remove any existing zip package of the web app +if [ -f "$ZIPFILE" ]; then + rm "$ZIPFILE" +fi + +# Create the zip package of the web app +echo "Creating zip package of the web app..." +zip -r "$ZIPFILE" app.py database.py gunicorn.conf.py static templates requirements.txt + +# Deploy the web app +# Deploy the web app +echo "Deploying web app [$WEB_APP_NAME] with zip file [$ZIPFILE]..." +az webapp deploy \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --name "$WEB_APP_NAME" \ + --src-path "$ZIPFILE" \ + --type zip \ + --async true 1>/dev/null + +# Remove the zip package of the web app +if [ -f "$ZIPFILE" ]; then + rm "$ZIPFILE" +fi + +# Print the list of resources in the resource group +echo "Listing resources in resource group [$RESOURCE_GROUP_NAME]..." +az resource list --resource-group "$RESOURCE_GROUP_NAME" --output table diff --git a/samples/web-app-mysql-flexible-server/python/bicep/main.bicep b/samples/web-app-mysql-flexible-server/python/bicep/main.bicep new file mode 100644 index 0000000..b6090d1 --- /dev/null +++ b/samples/web-app-mysql-flexible-server/python/bicep/main.bicep @@ -0,0 +1,308 @@ +//******************************************** +// Parameters +//******************************************** +@description('Specifies the prefix for the name of the Azure resources.') +@minLength(2) +param prefix string = take(uniqueString(resourceGroup().id), 4) + +@description('Specifies the suffix for the name of the Azure resources.') +@minLength(2) +param suffix string = take(uniqueString(resourceGroup().id), 4) + +@description('Specifies the location for all resources.') +param location string = resourceGroup().location + +@description('Specifies the tier name for the hosting plan.') +@allowed([ + 'Basic' + 'Standard' + 'Premium' + 'PremiumV2' + 'Premium0V3' + 'PremiumV3' + 'PremiumMV3' +]) +param skuTier string = 'Standard' + +@description('Specifies the SKU name for the hosting plan.') +param skuName string = 'S1' + +@description('Specifies the kind of the hosting plan.') +@allowed(['app','linux']) +param appServicePlanKind string = 'linux' + +@description('Specifies whether the hosting plan is reserved.') +param reserved bool = true + +@description('Specifies whether the hosting plan is zone redundant.') +param zoneRedundant bool = false + +@description('Specifies the language runtime used by the Azure Web App.') +@allowed(['dotnet','python','java','node']) +param runtimeName string + +@description('Specifies the target language version used by the Azure Web App.') +param runtimeVersion string + +@description('Specifies the kind of the web app resource.') +param webAppKind string = 'app,linux' + +@description('Specifies whether HTTPS is enforced for the Azure Web App.') +param httpsOnly bool = false + +@description('Specifies the minimum TLS version for the Azure Web App.') +@allowed(['1.2','1.3']) +param minTlsVersion string = '1.2' + +@description('Specifies whether the public network access is enabled or disabled') +@allowed(['Enabled','Disabled']) +param publicNetworkAccess string = 'Enabled' + +@description('Specifies the optional Git Repo URL.') +param repoUrl string = ' ' + +@description('Specifies the username for the application (used to scope activities).') +param username string = 'paolo' + +// +// MySQL flexible server +// +@description('Administrator login for the MySQL flexible server. Only used by the post-deploy mysql bootstrap; the Web App never authenticates with this account.') +param mysqlAdminLogin string = 'myadmin' + +@description('Administrator login password for the MySQL flexible server.') +@secure() +param mysqlAdminPassword string + +@description('MySQL major version.') +@allowed(['5.7','8.0.21']) +param mysqlVersion string = '8.0.21' + +@description('Compute tier for the MySQL flexible server.') +@allowed(['Burstable','GeneralPurpose','MemoryOptimized']) +param mysqlSkuTier string = 'Burstable' + +@description('Compute SKU name for the MySQL flexible server.') +param mysqlSkuName string = 'Standard_B1ms' + +@description('Storage size in GB for the MySQL flexible server.') +@minValue(20) +@maxValue(16384) +param mysqlStorageSizeGB int = 32 + +@description('Backup retention in days for the MySQL flexible server.') +@minValue(1) +@maxValue(35) +param mysqlBackupRetentionDays int = 7 + +@description('Name of the application database to create on the MySQL flexible server.') +param databaseName string = 'PlannerDB' + +// +// Networking +// +@description('Specifies the name of the virtual network.') +param virtualNetworkName string = '' + +@description('Specifies the address prefixes of the virtual network.') +param virtualNetworkAddressPrefixes string = '10.0.0.0/8' + +@description('Specifies the name of the subnet used by the Web App for the regional virtual network integration.') +param webAppSubnetName string = 'app-subnet' + +@description('Specifies the address prefix of the subnet used by the Web App for the regional virtual network integration.') +param webAppSubnetAddressPrefix string = '10.0.0.0/24' + +@description('Specifies the name of the network security group associated to the subnet hosting the Web App.') +param webAppSubnetNsgName string = '' + +@description('Specifies the name of the subnet that hosts the private endpoint to the MySQL flexible server.') +param peSubnetName string = 'pe-subnet' + +@description('Specifies the address prefix of the private-endpoint subnet.') +param peSubnetAddressPrefix string = '10.0.1.0/24' + +@description('Specifies the name of the NSG associated to the private-endpoint subnet.') +param peSubnetNsgName string = '' + +@description('Specifies the length of the Public IP Prefix.') +@minValue(28) +@maxValue(32) +param natGatewayPublicIpPrefixLength int = 31 + +@description('Specifies the name of the Azure NAT Gateway.') +param natGatewayName string = '' + +@description('Specifies a list of availability zones denoting the zone in which Nat Gateway should be deployed.') +param natGatewayZones array = [] + +@description('Specifies the idle timeout in minutes for the Azure NAT Gateway.') +param natGatewayIdleTimeoutMins int = 30 + +@description('Specifies the name of the private endpoint targeting the MySQL flexible server.') +param mysqlPrivateEndpointName string = '' + +// +// Observability +// +@description('Specifies the name of the Azure Log Analytics resource.') +param logAnalyticsName string = '' + +@description('Specifies the service tier of the workspace.') +@allowed(['Free','Standalone','PerNode','PerGB2018']) +param logAnalyticsSku string = 'PerNode' + +@description('Specifies the workspace data retention in days.') +param logAnalyticsRetentionInDays int = 60 + +@description('Specifies the tags to be applied to the resources.') +param tags object = { + environment: 'test' + iac: 'bicep' +} + +//******************************************** +// Variables +//******************************************** +var webAppName = '${prefix}-webapp-${suffix}' +var appServicePlanName = '${prefix}-app-service-plan-${suffix}' +var mysqlServerName = '${prefix}-mysqlflex-${suffix}' +var privateDnsZoneName = 'privatelink.mysql.database.azure.com' + +// The MySQL flexible-server emulator embeds the LS-side TCP-proxy port directly in +// fullyQualifiedDomainName (e.g. ".mysql.database.localhost.localstack.cloud:4515"). +// Real Azure returns just the bare host on 3306. Split on `:` so the Web App always gets the +// right host + port without any post-deploy shell logic. +var mysqlFqdnParts = split(mysqlServer.outputs.fqdn, ':') +var mysqlHost = mysqlFqdnParts[0] +var mysqlPort = length(mysqlFqdnParts) > 1 ? mysqlFqdnParts[1] : '3306' + +//******************************************** +// Modules and Resources +//******************************************** +module workspace 'modules/log-analytics.bicep' = { + name: 'workspace' + params: { + name: empty(logAnalyticsName) ? toLower('${prefix}-log-analytics-${suffix}') : logAnalyticsName + location: location + tags: tags + sku: logAnalyticsSku + retentionInDays: logAnalyticsRetentionInDays + } +} + +module network 'modules/virtual-network.bicep' = { + name: 'network' + params: { + virtualNetworkName: empty(virtualNetworkName) ? toLower('${prefix}-vnet-${suffix}') : virtualNetworkName + virtualNetworkAddressPrefixes: virtualNetworkAddressPrefixes + webAppSubnetName: webAppSubnetName + webAppSubnetAddressPrefix: webAppSubnetAddressPrefix + webAppSubnetNsgName: empty(webAppSubnetNsgName) ? toLower('${prefix}-webapp-subnet-nsg-${suffix}') : webAppSubnetNsgName + peSubnetName: peSubnetName + peSubnetAddressPrefix: peSubnetAddressPrefix + peSubnetNsgName: empty(peSubnetNsgName) ? toLower('${prefix}-pe-subnet-nsg-${suffix}') : peSubnetNsgName + natGatewayName: empty(natGatewayName) ? toLower('${prefix}-nat-gateway-${suffix}') : natGatewayName + natGatewayZones: natGatewayZones + natGatewayPublicIpPrefixName: toLower('${prefix}-nat-gateway-pip-prefix-${suffix}') + natGatewayPublicIpPrefixLength: natGatewayPublicIpPrefixLength + natGatewayIdleTimeoutMins: natGatewayIdleTimeoutMins + delegationServiceName: 'Microsoft.Web/serverfarms' + workspaceId: workspace.outputs.id + location: location + tags: tags + } +} + +module mysqlServer 'modules/mysql-flexible-server.bicep' = { + name: 'mysqlServer' + params: { + name: mysqlServerName + location: location + administratorLogin: mysqlAdminLogin + administratorLoginPassword: mysqlAdminPassword + version: mysqlVersion + skuTier: mysqlSkuTier + skuName: mysqlSkuName + storageSizeGB: mysqlStorageSizeGB + backupRetentionDays: mysqlBackupRetentionDays + databaseName: databaseName + workspaceId: workspace.outputs.id + tags: tags + } +} + +module privateDnsZone 'modules/private-dns-zone.bicep' = { + name: 'privateDnsZone' + params: { + name: privateDnsZoneName + vnetId: network.outputs.virtualNetworkId + tags: tags + } +} + +module privateEndpoint 'modules/private-endpoint.bicep' = { + name: 'privateEndpoint' + params: { + name: empty(mysqlPrivateEndpointName) + ? toLower('${prefix}-mysql-pe-${suffix}') + : mysqlPrivateEndpointName + privateLinkServiceId: mysqlServer.outputs.id + privateDnsZoneId: privateDnsZone.outputs.id + vnetId: network.outputs.virtualNetworkId + subnetId: network.outputs.peSubnetId + groupIds: [ + 'mysqlServer' + ] + location: location + tags: tags + } +} + +module appServicePlan 'modules/app-service-plan.bicep' = { + name: 'appServicePlan' + params: { + name: appServicePlanName + location: location + skuName: skuName + skuTier: skuTier + kind: appServicePlanKind + reserved: reserved + zoneRedundant: zoneRedundant + workspaceId: workspace.outputs.id + tags: tags + } +} + +module webApp 'modules/web-app.bicep' = { + name: webAppName + params: { + name: webAppName + location: location + kind: webAppKind + httpsOnly: httpsOnly + runtimeName: runtimeName + runtimeVersion: runtimeVersion + minTlsVersion: minTlsVersion + publicNetworkAccess: publicNetworkAccess + repoUrl: repoUrl + virtualNetworkName: network.outputs.virtualNetworkName + subnetName: network.outputs.webAppSubnetName + hostingPlanName: appServicePlan.outputs.name + mysqlHost: mysqlHost + mysqlPort: mysqlPort + mysqlDatabase: mysqlServer.outputs.databaseName + username: username + workspaceId: workspace.outputs.id + tags: tags + } +} + +//******************************************** +// Outputs +//******************************************** +output webAppName string = webApp.outputs.name +output webAppDefaultHostName string = webApp.outputs.defaultHostName +output mysqlServerName string = mysqlServer.outputs.name +output mysqlFqdn string = mysqlServer.outputs.fqdn +output databaseName string = mysqlServer.outputs.databaseName diff --git a/samples/web-app-mysql-flexible-server/python/bicep/main.bicepparam b/samples/web-app-mysql-flexible-server/python/bicep/main.bicepparam new file mode 100644 index 0000000..a46fe67 --- /dev/null +++ b/samples/web-app-mysql-flexible-server/python/bicep/main.bicepparam @@ -0,0 +1,19 @@ +using 'main.bicep' + +param prefix = 'local' +param suffix = 'test' +param runtimeName = 'python' +param runtimeVersion = '3.13' +param databaseName = 'PlannerDB' +param username = 'paolo' + +// MySQL flexible server +param mysqlAdminLogin = 'myadmin' +// Password is supplied at deploy time via the MYSQL_ADMIN_PASSWORD env var +// (see deploy.sh — it passes it as --parameters mysqlAdminPassword=...). Do not commit it here. +param mysqlAdminPassword = readEnvironmentVariable('MYSQL_ADMIN_PASSWORD', '') +param mysqlVersion = '8.0.21' +param mysqlSkuTier = 'Burstable' +param mysqlSkuName = 'Standard_B1ms' +param mysqlStorageSizeGB = 32 +param mysqlBackupRetentionDays = 7 diff --git a/samples/web-app-mysql-flexible-server/python/bicep/modules/app-service-plan.bicep b/samples/web-app-mysql-flexible-server/python/bicep/modules/app-service-plan.bicep new file mode 100644 index 0000000..4b5cfb3 --- /dev/null +++ b/samples/web-app-mysql-flexible-server/python/bicep/modules/app-service-plan.bicep @@ -0,0 +1,154 @@ +//******************************************** +// Parameters +//******************************************** +@description('Specifies the name of the App Service Plan.') +param name string + +@description('Specifies the location.') +param location string = resourceGroup().location + +@description('Specifies the tier name for the hosting plan.') +@allowed([ + 'Basic' + 'Standard' + 'ElasticPremium' + 'Premium' + 'PremiumV2' + 'Premium0V3' + 'PremiumV3' + 'PremiumMV3' + 'Isolated' + 'IsolatedV2' + 'WorkflowStandard' + 'FlexConsumption' +]) +param skuTier string = 'Standard' + +@description('Specifies the SKU name for the hosting plan.') +@allowed([ + 'B1' + 'B2' + 'B3' + 'S1' + 'S2' + 'S3' + 'EP1' + 'EP2' + 'EP3' + 'P1' + 'P2' + 'P3' + 'P1V2' + 'P2V2' + 'P3V2' + 'P0V3' + 'P1V3' + 'P2V3' + 'P3V3' + 'P1MV3' + 'P2MV3' + 'P3MV3' + 'P4MV3' + 'P5MV3' + 'I1' + 'I2' + 'I3' + 'I1V2' + 'I2V2' + 'I3V2' + 'I4V2' + 'I5V2' + 'I6V2' + 'WS1' + 'WS2' + 'WS3' + 'FC1' +]) +param skuName string = 'S1' + +@description('Specifies the kind of the hosting plan.') +@allowed([ + 'app' + 'elastic' + 'functionapp' + 'windows' + 'linux' +]) +param kind string = 'linux' + +@description('Specifies whether the hosting plan is reserved.') +param reserved bool = true + +@description('Specifies whether the hosting plan is zone redundant.') +param zoneRedundant bool = false + +@description('Specifies the resource id of the Log Analytics workspace.') +param workspaceId string + +@description('Specifies the tags to be applied to the resources.') +param tags object = {} + +//******************************************** +// Variables +//******************************************** + +var diagnosticSettingsName = 'default' +var logCategories = [] +var metricCategories = [ + 'AllMetrics' +] +var logs = [ + for category in logCategories: { + category: category + enabled: true + retentionPolicy: { + enabled: true + days: 0 + } + } +] +var metrics = [ + for category in metricCategories: { + category: category + enabled: true + retentionPolicy: { + enabled: true + days: 0 + } + } +] + +//******************************************** +// Resources +//******************************************** +resource appServicePlan 'Microsoft.Web/serverfarms@2024-11-01' = { + name: name + location: location + tags: tags + kind: kind + sku: { + tier: skuTier + name: skuName + } + properties: { + reserved: reserved + zoneRedundant: zoneRedundant + maximumElasticWorkerCount: skuTier == 'FlexConsumption' ? 1 : 20 + } +} + +resource diagnosticSettings 'Microsoft.Insights/diagnosticSettings@2021-05-01-preview' = if(!empty(workspaceId)) { + name: diagnosticSettingsName + scope: appServicePlan + properties: { + workspaceId: workspaceId + logs: logs + metrics: metrics + } +} + +//******************************************** +// Outputs +//******************************************** +output id string = appServicePlan.id +output name string = appServicePlan.name diff --git a/samples/web-app-mysql-flexible-server/python/bicep/modules/log-analytics.bicep b/samples/web-app-mysql-flexible-server/python/bicep/modules/log-analytics.bicep new file mode 100644 index 0000000..2618829 --- /dev/null +++ b/samples/web-app-mysql-flexible-server/python/bicep/modules/log-analytics.bicep @@ -0,0 +1,45 @@ +//******************************************** +// Parameters +//******************************************** +@description('Specifies the name of the Log Analytics workspace.') +param name string + +@description('Specifies the location.') +param location string = resourceGroup().location + +@description('Specifies the service tier of the workspace: Free, Standalone, PerNode, Per-GB.') +@allowed([ + 'Free' + 'Standalone' + 'PerNode' + 'PerGB2018' +]) +param sku string = 'PerNode' + +@description('Specifies the workspace data retention in days. -1 means Unlimited retention for the Unlimited Sku. 730 days is the maximum allowed for all other Skus.') +param retentionInDays int = 60 + +@description('Specifies the resource tags.') +param tags object + +//******************************************** +// Resources +//******************************************** +resource workspace 'Microsoft.OperationalInsights/workspaces@2025-07-01' = { + name: name + tags: tags + location: location + properties: { + sku: { + name: sku + } + retentionInDays: retentionInDays + } +} + +//******************************************** +// Outputs +//******************************************** +output id string = workspace.id +output name string = workspace.name +output customerId string = workspace.properties.customerId diff --git a/samples/web-app-mysql-flexible-server/python/bicep/modules/mysql-flexible-server.bicep b/samples/web-app-mysql-flexible-server/python/bicep/modules/mysql-flexible-server.bicep new file mode 100644 index 0000000..293bf35 --- /dev/null +++ b/samples/web-app-mysql-flexible-server/python/bicep/modules/mysql-flexible-server.bicep @@ -0,0 +1,169 @@ +//******************************************** +// Parameters +//******************************************** +@description('Specifies the name of the Azure Database for MySQL flexible server.') +param name string + +@description('Specifies the location for all resources.') +param location string = resourceGroup().location + +@description('Specifies the administrator login for the MySQL server.') +param administratorLogin string = 'myadmin' + +@description('Specifies the administrator login password for the MySQL server.') +@secure() +param administratorLoginPassword string + +@description('Specifies the MySQL major version.') +@allowed([ + '5.7' + '8.0.21' +]) +param version string = '8.0.21' + +@description('Specifies the compute tier of the server.') +@allowed([ + 'Burstable' + 'GeneralPurpose' + 'MemoryOptimized' +]) +param skuTier string = 'Burstable' + +@description('Specifies the compute SKU name of the server.') +param skuName string = 'Standard_B1ms' + +@description('Specifies the storage size in GB.') +@minValue(20) +@maxValue(16384) +param storageSizeGB int = 32 + +@description('Specifies the backup retention period in days.') +@minValue(1) +@maxValue(35) +param backupRetentionDays int = 7 + +@description('Specifies the name of the database to create on the server.') +param databaseName string = 'PlannerDB' + +@description('Specifies the database charset.') +param databaseCharset string = 'utf8mb4' + +@description('Specifies the database collation.') +param databaseCollation string = 'utf8mb4_unicode_ci' + +@description('Name of the server-level firewall rule that allows the deploy machine and Azure services to reach the server. Defaults to a permissive allow-all rule appropriate for the sample.') +param firewallRuleName string = 'AllowAllIPs' + +@description('Start IP of the firewall rule.') +param firewallStartIp string = '0.0.0.0' + +@description('End IP of the firewall rule.') +param firewallEndIp string = '255.255.255.255' + +@description('Specifies the resource id of the Log Analytics workspace.') +param workspaceId string + +@description('Specifies the tags to be applied to the resources.') +param tags object = {} + +//******************************************** +// Variables +//******************************************** +var diagnosticSettingsName = 'default' +var logCategories = [ + 'MySqlSlowLogs' + 'MySqlAuditLogs' +] +var metricCategories = [ + 'AllMetrics' +] +var logs = [for category in logCategories: { + category: category + enabled: true + retentionPolicy: { + enabled: true + days: 0 + } +}] +var metrics = [for category in metricCategories: { + category: category + enabled: true + retentionPolicy: { + enabled: true + days: 0 + } +}] + +//******************************************** +// Resources +//******************************************** +// Server is created in public-access mode and fronted by a Private Endpoint (see the +// private-endpoint module in main.bicep). The firewall rule lets the deploy machine reach the +// public endpoint just long enough to run the post-deploy mysql bootstrap that creates the +// application user and seed data; the Web App itself reaches the server over the private +// endpoint via the linked Private DNS Zone. +resource server 'Microsoft.DBforMySQL/flexibleServers@2023-12-30' = { + name: toLower(name) + location: location + tags: tags + sku: { + name: skuName + tier: skuTier + } + properties: { + administratorLogin: administratorLogin + administratorLoginPassword: administratorLoginPassword + version: version + createMode: 'Default' + storage: { + storageSizeGB: storageSizeGB + } + backup: { + backupRetentionDays: backupRetentionDays + geoRedundantBackup: 'Disabled' + } + highAvailability: { + mode: 'Disabled' + } + network: { + publicNetworkAccess: 'Enabled' + } + } +} + +resource database 'Microsoft.DBforMySQL/flexibleServers/databases@2023-12-30' = { + parent: server + name: databaseName + properties: { + charset: databaseCharset + collation: databaseCollation + } +} + +resource firewallRule 'Microsoft.DBforMySQL/flexibleServers/firewallRules@2023-12-30' = { + parent: server + name: firewallRuleName + properties: { + startIpAddress: firewallStartIp + endIpAddress: firewallEndIp + } +} + +resource diagnosticSettings 'Microsoft.Insights/diagnosticSettings@2021-05-01-preview' = { + name: diagnosticSettingsName + scope: server + properties: { + workspaceId: workspaceId + logs: logs + metrics: metrics + } +} + +//******************************************** +// Outputs +//******************************************** +output id string = server.id +output name string = server.name +output fqdn string = server.properties.fullyQualifiedDomainName +output databaseId string = database.id +output databaseName string = database.name diff --git a/samples/web-app-mysql-flexible-server/python/bicep/modules/private-dns-zone.bicep b/samples/web-app-mysql-flexible-server/python/bicep/modules/private-dns-zone.bicep new file mode 100644 index 0000000..d849259 --- /dev/null +++ b/samples/web-app-mysql-flexible-server/python/bicep/modules/private-dns-zone.bicep @@ -0,0 +1,41 @@ +//******************************************** +// Parameters +//******************************************** +@description('Specifies the name of the private DNS zone.') +param name string + +@description('Specifies the resource ID of the virtual network where private endpoints will be created.') +param vnetId string + +@description('Specifies the resource tags.') +param tags object + +//******************************************** +// Resources +//******************************************** + +// Private DNS Zones +resource privateDnsZone 'Microsoft.Network/privateDnsZones@2024-06-01' = { + name: name + location: 'global' + tags: tags +} + +// Virtual Network Links +resource privateDnsZoneVirtualNetworkLink 'Microsoft.Network/privateDnsZones/virtualNetworkLinks@2024-06-01' = { + parent: privateDnsZone + name: 'link-to-vnet' + location: 'global' + properties: { + registrationEnabled: false + virtualNetwork: { + id: vnetId + } + } +} + +//******************************************** +// Outputs +//******************************************** +output id string = privateDnsZone.id +output name string = privateDnsZone.name diff --git a/samples/web-app-mysql-flexible-server/python/bicep/modules/private-endpoint.bicep b/samples/web-app-mysql-flexible-server/python/bicep/modules/private-endpoint.bicep new file mode 100644 index 0000000..8fd35b8 --- /dev/null +++ b/samples/web-app-mysql-flexible-server/python/bicep/modules/private-endpoint.bicep @@ -0,0 +1,72 @@ +//******************************************** +// Parameters +//******************************************** +@description('Specifies the name of the private endpoint.') +param name string + +@description('Specifies the location.') +param location string = resourceGroup().location + +@description('Specifies the resource ID of the virtual network where private endpoints will be created.') +param vnetId string + +@description('Specifies the resource ID of the subnet where private endpoints will be created.') +param subnetId string + +@description('Specifies the group IDs for the private link service connection.') +param groupIds array + +@description('Specifies the resource ID of the target resource.') +param privateLinkServiceId string + +@description('Specifies the resource ID of the private DNS zone.') +param privateDnsZoneId string + +@description('Specifies the resource tags.') +param tags object + +//******************************************** +// Resources +//******************************************** + +// Private Endpoints +resource privateEndpoint 'Microsoft.Network/privateEndpoints@2025-05-01' = { + name: name + location: location + tags: tags + properties: { + privateLinkServiceConnections: [ + { + name: '${name}-pls-connection' + properties: { + privateLinkServiceId: privateLinkServiceId + groupIds: groupIds + } + } + ] + subnet: { + id: subnetId + } + } +} + +resource privateDnsZoneGroupName 'Microsoft.Network/privateEndpoints/privateDnsZoneGroups@2025-05-01' = { + parent: privateEndpoint + name: 'private-dns-zone-group' + properties: { + privateDnsZoneConfigs: [ + { + name: 'dnsConfig' + properties: { + privateDnsZoneId: privateDnsZoneId + } + } + ] + } +} + +//******************************************** +// Outputs +//******************************************** +output id string = privateEndpoint.id +output name string = privateEndpoint.name diff --git a/samples/web-app-mysql-flexible-server/python/bicep/modules/virtual-network.bicep b/samples/web-app-mysql-flexible-server/python/bicep/modules/virtual-network.bicep new file mode 100644 index 0000000..9cf440d --- /dev/null +++ b/samples/web-app-mysql-flexible-server/python/bicep/modules/virtual-network.bicep @@ -0,0 +1,238 @@ +//******************************************** +// Parameters +//******************************************** +@description('Specifies the name of the virtual network.') +param virtualNetworkName string + +@description('Specifies the location.') +param location string = resourceGroup().location + +@description('Specifies the address prefixes of the virtual network.') +param virtualNetworkAddressPrefixes string = '10.0.0.0/8' + +@description('Specifies the name of the subnet used by the Web App for the regional virtual network integration.') +param webAppSubnetName string = 'functionAppSubnet' + +@description('Specifies the address prefix of the subnet used by the Web App for the regional virtual network integration.') +param webAppSubnetAddressPrefix string = '10.0.0.0/24' + +@description('Specifies the name of the network security group associated to the subnet hosting the Web App.') +param webAppSubnetNsgName string = '' + +@description('Specifies the name of the subnet that hosts the private endpoint to the MySQL flexible server.') +param peSubnetName string = 'pe-subnet' + +@description('Specifies the address prefix of the subnet that hosts the private endpoint to the MySQL flexible server.') +param peSubnetAddressPrefix string = '10.0.1.0/24' + +@description('Specifies the name of the network security group associated with the private-endpoint subnet.') +param peSubnetNsgName string = '' + +@description('Specifies the name of the Azure NAT Gateway.') +param natGatewayName string + +@description('Specifies a list of availability zones denoting the zone in which Nat Gateway should be deployed.') +param natGatewayZones array = [] + +@description('Specifies the name of the public IP prefix for the Azure NAT Gateway.') +param natGatewayPublicIpPrefixName string + +@description('Specifies the length of the Public IP Prefix.') +@minValue(28) +@maxValue(32) +param natGatewayPublicIpPrefixLength int = 31 + +@description('Specifies the idle timeout in minutes for the Azure NAT Gateway.') +param natGatewayIdleTimeoutMins int = 30 + +@description('Specifies the delegation service name.') +param delegationServiceName string + +@description('Specifies the resource id of the Log Analytics workspace.') +param workspaceId string + +@description('Specifies the resource tags.') +param tags object + +//******************************************** +// Variables +//******************************************** +var diagnosticSettingsName = 'default' +var nsgLogCategories = [ + 'NetworkSecurityGroupEvent' + 'NetworkSecurityGroupRuleCounter' +] +var nsgLogs = [for category in nsgLogCategories: { + category: category + enabled: true + retentionPolicy: { + enabled: true + days: 0 + } +}] +var vnetLogCategories = [ + 'VMProtectionAlerts' +] +var vnetMetricCategories = [ + 'AllMetrics' +] +var vnetLogs = [for category in vnetLogCategories: { + category: category + enabled: true + retentionPolicy: { + enabled: true + days: 0 + } +}] +var vnetMetrics = [for category in vnetMetricCategories: { + category: category + enabled: true + retentionPolicy: { + enabled: true + days: 0 + } +}] + +//******************************************** +// Resources +//******************************************** + +// Virtual Network +resource vnet 'Microsoft.Network/virtualNetworks@2024-03-01' = { + name: virtualNetworkName + location: location + tags: tags + properties: { + addressSpace: { + addressPrefixes: [ + virtualNetworkAddressPrefixes + ] + } + subnets: [ + { + name: webAppSubnetName + properties: { + addressPrefix: webAppSubnetAddressPrefix + privateEndpointNetworkPolicies: 'Disabled' + privateLinkServiceNetworkPolicies: 'Disabled' + networkSecurityGroup: { + id: webAppSubnetNsg.id + } + natGateway: { + id: natGateway.id + } + delegations: [ + { + name: 'delegation' + properties: { + serviceName: delegationServiceName + } + } + ] + } + } + { + name: peSubnetName + properties: { + addressPrefix: peSubnetAddressPrefix + networkSecurityGroup: { + id: peSubnetNsg.id + } + privateEndpointNetworkPolicies: 'Disabled' + privateLinkServiceNetworkPolicies: 'Disabled' + natGateway: { + id: natGateway.id + } + } + } + ] + } +} + +resource webAppSubnetNsg 'Microsoft.Network/networkSecurityGroups@2025-05-01' = { + name: webAppSubnetNsgName + location: location + tags: tags + properties: { + securityRules: [ + ] + } +} + +resource peSubnetNsg 'Microsoft.Network/networkSecurityGroups@2025-05-01' = { + name: peSubnetNsgName + location: location + tags: tags + properties: { + securityRules: [] + } +} + +// NAT Gateway +resource natGatewayPublicIpPrefix 'Microsoft.Network/publicIPPrefixes@2025-05-01' = { + name: natGatewayPublicIpPrefixName + location: location + sku: { + name: 'Standard' + } + zones: !empty(natGatewayZones) ? natGatewayZones : [] + properties: { + publicIPAddressVersion: 'IPv4' + prefixLength: natGatewayPublicIpPrefixLength + } +} + +resource natGateway 'Microsoft.Network/natGateways@2025-05-01' = { + name: natGatewayName + location: location + sku: { + name: 'Standard' + } + zones: !empty(natGatewayZones) ? natGatewayZones : [] + properties: { + publicIpPrefixes: [ + { + id: natGatewayPublicIpPrefix.id + } + ] + idleTimeoutInMinutes: natGatewayIdleTimeoutMins + } +} + +resource peSubnetNsgDiagnosticSettings 'Microsoft.Insights/diagnosticSettings@2021-05-01-preview' = if (!empty(workspaceId)) { + name: diagnosticSettingsName + scope: peSubnetNsg + properties: { + workspaceId: workspaceId + logs: nsgLogs + } +} + +resource webAppSubnetNsgDiagnosticSettings 'Microsoft.Insights/diagnosticSettings@2021-05-01-preview' = if (!empty(workspaceId)) { + name: diagnosticSettingsName + scope: webAppSubnetNsg + properties: { + workspaceId: workspaceId + logs: nsgLogs + } +} + +resource vnetDiagnosticSettings 'Microsoft.Insights/diagnosticSettings@2021-05-01-preview' = if (!empty(workspaceId)) { + name: diagnosticSettingsName + scope: vnet + properties: { + workspaceId: workspaceId + logs: vnetLogs + metrics: vnetMetrics + } +} + +//******************************************** +// Outputs +//******************************************** +output virtualNetworkId string = vnet.id +output virtualNetworkName string = vnet.name +output webAppSubnetId string = resourceId('Microsoft.Network/virtualNetworks/subnets', vnet.name, webAppSubnetName) +output webAppSubnetName string = webAppSubnetName +output peSubnetId string = resourceId('Microsoft.Network/virtualNetworks/subnets', vnet.name, peSubnetName) +output peSubnetName string = peSubnetName diff --git a/samples/web-app-mysql-flexible-server/python/bicep/modules/web-app.bicep b/samples/web-app-mysql-flexible-server/python/bicep/modules/web-app.bicep new file mode 100644 index 0000000..e1a34f3 --- /dev/null +++ b/samples/web-app-mysql-flexible-server/python/bicep/modules/web-app.bicep @@ -0,0 +1,212 @@ +//******************************************** +// Parameters +//******************************************** + +@description('Specifies a globally unique name the Azure Web App.') +param name string + +@description('Specifies the location.') +param location string = resourceGroup().location + +@description('Specifies the kind of the hosting plan.') +@allowed([ + 'app' // Windows Web app + 'app,linux' // Linux Web app + 'app,linux,container' // Linux Container Web app + 'hyperV' // Windows Container Web App + 'app,container,windows' // Windows Container Web App + 'app,linux,kubernetes' // Linux Web App on ARC + 'app,linux,container,kubernetes' // Linux Container Web App on ARC + 'functionapp' // Function Code App + 'functionapp,linux' // Linux Consumption Function app + 'functionapp,linux,container,kubernetes' // Function Container App on ARC + 'functionapp,linux,kubernetes' // Function Code App on ARC +]) +param kind string = 'app,linux' + +@description('Specifies the language runtime used by the Azure Web App.') +@allowed([ + 'dotnet' + 'dotnet-isolated' + 'python' + 'java' + 'node' + 'powerShell' + 'custom' +]) +param runtimeName string + +@description('Specifies the target language version used by the Azure Web App.') +param runtimeVersion string + +@description('Specifies the minimum TLS version for the Azure Web App.') +@allowed([ + '1.2' + '1.3' +]) +param minTlsVersion string = '1.2' + +@description('Specifies whether the public network access is enabled or disabled') +@allowed([ + 'Enabled' + 'Disabled' +]) +param publicNetworkAccess string = 'Enabled' + +@description('Specifies whether HTTPS is enforced for the Azure Web App.') +param httpsOnly bool = true + +@description('Specifies the name of the hosting plan.') +param hostingPlanName string + +@description('Specifies the FQDN of the MySQL flexible server (e.g. .mysql.database.azure.com).') +param mysqlHost string + +@description('Specifies the TCP port the MySQL server listens on. 3306 in real Azure; in the emulator the FQDN encodes the dynamically allocated proxy port and main.bicep splits it.') +param mysqlPort string = '3306' + +@description('Specifies the name of the database to connect to.') +param mysqlDatabase string = 'sampledb' + +@description('Specifies the name of the virtual network.') +param virtualNetworkName string + +@description('Specifies the name of the subnet used by the Web App for the regional virtual network integration.') +param subnetName string + +@description('Specifies the resource id of the Log Analytics workspace.') +param workspaceId string + +@description('Specifies the username for the application.') +param username string = 'paolo' + +@description('Specifies the optional Git Repo URL.') +param repoUrl string = ' ' + +@description('Specifies the resource tags.') +param tags object + +//******************************************** +// Variables +//******************************************** + +// Generates a unique container name for deployments. +var diagnosticSettingsName = 'default' +var logCategories = [ + 'AppServiceHTTPLogs' + 'AppServiceConsoleLogs' + 'AppServiceAppLogs' + 'AppServiceAuditLogs' + 'AppServiceIPSecAuditLogs' + 'AppServicePlatformLogs' + 'AppServiceAuthenticationLogs' +] +var metricCategories = [ + 'AllMetrics' +] +var logs = [ + for category in logCategories: { + category: category + enabled: true + retentionPolicy: { + enabled: true + days: 0 + } + } +] +var metrics = [ + for category in metricCategories: { + category: category + enabled: true + retentionPolicy: { + enabled: true + days: 0 + } + } +] + +//******************************************** +// Resources +//******************************************** + +resource virtualNetwork 'Microsoft.Network/virtualNetworks@2024-05-01' existing = { + name: virtualNetworkName +} + +resource subnet 'Microsoft.Network/virtualNetworks/subnets@2024-05-01' existing = { + parent: virtualNetwork + name: subnetName +} + +resource hostingPlan 'Microsoft.Web/serverfarms@2024-04-01' existing = { + name: hostingPlanName +} + +resource webApp 'Microsoft.Web/sites@2025-03-01' = { + name: name + location: location + tags: tags + kind: kind + properties: { + httpsOnly: httpsOnly + serverFarmId: hostingPlan.id + virtualNetworkSubnetId: subnet.id + outboundVnetRouting: { + allTraffic: true + } + siteConfig: { + linuxFxVersion: toUpper('${runtimeName}|${runtimeVersion}') + minTlsVersion: minTlsVersion + publicNetworkAccess: publicNetworkAccess + } + } + identity: { + type: 'SystemAssigned' + } +} + + +resource configAppSettings 'Microsoft.Web/sites/config@2024-11-01' = { + parent: webApp + name: 'appsettings' + properties: { + SCM_DO_BUILD_DURING_DEPLOYMENT: 'true' + ENABLE_ORYX_BUILD: 'true' + // MYSQL_USER and MYSQL_PASSWORD are NOT set here. The post-deploy script connects to the + // server via the firewall-allowed public endpoint to (a) create the application user + // `testuser` and (b) write `MYSQL_USER` / `MYSQL_PASSWORD` onto this Web App via `az webapp + // config appsettings set`. The server-admin login is never exposed to the Web App at runtime. + MYSQL_HOST: mysqlHost + MYSQL_PORT: mysqlPort + MYSQL_DATABASE: mysqlDatabase + WEBSITES_PORT: '8000' + LOGIN_NAME: username + } +} + +resource webAppSourceControl 'Microsoft.Web/sites/sourcecontrols@2024-11-01' = if (contains(repoUrl,'http')){ + name: 'web' + parent: webApp + properties: { + repoUrl: repoUrl + branch: 'master' + isManualIntegration: true + } +} + +resource diagnosticSettings 'Microsoft.Insights/diagnosticSettings@2021-05-01-preview' = if(!empty(workspaceId)) { + name: diagnosticSettingsName + scope: webApp + properties: { + workspaceId: workspaceId + logs: logs + metrics: metrics + } +} + +//******************************************** +// Outputs +//******************************************** +output id string = webApp.id +output name string = webApp.name +output defaultHostName string = webApp.properties.defaultHostName diff --git a/samples/web-app-mysql-flexible-server/python/images/vacation-planner.png b/samples/web-app-mysql-flexible-server/python/images/vacation-planner.png new file mode 100644 index 0000000000000000000000000000000000000000..a7c515161863487cdc0705e2a8e8c9c4a2bd60b1 GIT binary patch literal 85690 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

A%9I;ra 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⁣46^_T- zzg`?Zh#A`qJ-S+7h_c|-$M+tdM46TIpd~d+I~D$P%l+WXE8<{8IbP6-yLS^`d3jefdvtsjd#jQmksVt zP2vs8k_m8cC@~EOl;yOihx8HFqE8br_Qlzc?CvUccjq*0rZKgUs&WGM@ z>HF2Z6UJ@Dq;+=2stzV4>7;QQVN^*wx?XSNedSomakTfa(m(>=wO>Ld7J1pRr?h*BgkOz)%(Pq z@4cIS#SN+HV(xBxp(BDW{9Q);K6_v0xWo2BzMn8T1+D&6pdfnJ z@Vx(segc~5LmyHyVs6MXl&KK8JK+7cXX0>0KQFnvlR4va#4!Sc6M2RxF>jEy|=>y5s0+F#)W z5?}OgtqQRc&d6QHp25CSJlCo;Vz>QJGBr|3CG5X-|H1}GHf-{nl#CP`ly{MX?y0cc zq(!_;G3g;f9h2OpF8slo6k+$?E9)X(=KD+};L>_W(ru}FR$OR1^n=nx_qp2qz8p(X zj&;pqv40HiEfgv4J8;!y>{8gNQAr~=lwlJ!eOWRM6Rx%*@%HnS$R(oBnS8N8T$#t4 z%7n@0j&}b~4UhpeFqWHCl{M}sEAVkFijx8h3d)dZc71b2Y|1U`4Iy}5$RgRm9l9uU zjhl9M@zJOXt;mlWKQs5P613Z!;f=8;7@<;wth02vt}8_Q9`xisDMo@2eT@OfJzUMeR-f^&W99WCCt66t*8EaF%EG}{R^twhM2~UcM2Bwb4Xc$J^F@5fdAQ5iPvyVHCvUqe zU*-zSip3L25AR&Px@ z`4p%=BBIS37ZZ=DRP3)w;|+4C%E?J%t^$u#x#&_7y^H6A6v3?Ej=d;N1ox$JdJY8l zI}gJd0jKujSu`BUlhx^+-J_hElx1|- z+bI?g$WwTWIyy80<14Q{tN5U0rB`V-zvmX~)CA6Zs~o>|Zu36!T)?`sHN( zSzx~7;}vAh>NNrE5^B(r6aCGiaQlALIr>n)zsjNLb5o|D%WJp*cG0h8R9XzV?*t05 z*~Xolv>`!o^V+3`<>jr(IvtGeP~zsn7x=+4M+eV|Fp@q_$$(1atNkyJ+IFq~~+k8iBD!<3Eq@B?d z`N~DjMtS`-F@{rdd^wFuq}kqkVYd0)wvL>1AtI=Vyi2?hCR6#HGp%cOR9{Pr>z=V7 z=s0ZeoC=k{tR)$^nQWjr6f>9+^er)S?s=>qtLoB$BzCf<{A+WST*WFqK2Cr^ zW%Em2Z^I4x5YAsWzdVwHnoUZI_(r^Na;#XIZ>S7uXM5EWOh1F~Z6qP;7aDX`3k`x> zEpCrBQVdeR8l=u^TT*IaQ()P5(2&Lg^_xvMGemB=>MAHGCM6|>LC`kj zKB>IYC;L3I*7XhE>FX$vp=j|5Y~|D3)AOh5B&t^#mW8akkJ_^lN>8<-!<7chAO)5V z(i~}U=xA)a>L;F(eDO$ei$vQHu7_@kO*T$mD}yw7KCSO_zG**o)EZmXdwWTKE!-;i z*YQ!>HOl?AGX>RPDZ^x=CNTlK>YBQ}wE?Xud4Ib2EB=k{FSN!=m0ewW3O}EczR*iD zvZ(gnD+&lLa-q+^ujVmRzs*q)5DMP&h`p<}g-X+(To%5Q9{r|v;+fDG*s>jj$wB9% zl-AT)Z4}zC!|}na43xNxJ%USHq;=I^oJ4g9+S*X$ zF$Pa4l1MGQ-I2Vb{ql9BL8J|((%#6#BeRr^1b$^F>+kF!qV^iW)v*q#18Slt+WTKph6FyT0c3-?JrF*a?S|172Iz>!(-88;vlSBR&1Jktx2J>oX)Aq7!8elIS+=_!WaspwVw0BaYh47t9c+o5O{)5KSJ>Vt&T7m$LwlI|bs=((@W zro89SZH(7PXGbPHW?5S&%UA@{>LNCMEKPFSW&&K-a#>{f3%R&|`cAV5@!5u%;^oSe zl#JK++Z&e%T%vQ6rPH}`WzF1>64LRC)u>pZ0FjB!IOlDhZ%1^xTL;D&Zr>}d@H%6| zfu9Ow;3&_@hH?tE3W;(Dq8vy~flPnURu-!`4a%3x#O#U?Nz7?g*{D47VFXiZK?L9`u=3 zWZ(*686m$AoE(#$6?Wy6ra~VycUzY&Ov%aN6bU{r;7e}$mW7hs_m_TB$r593g3=xd zNi?b1>MG1!A}VDMr9jW?F|hb*Mu;{FlG9Q%PPpvLDxIh)o2s_2#_+adR47MsM^5<> z8R{mzF;4DZ+fa%e98M`D=NOicKC4^l(gV7Wzw`c{++v{;Z};?|wjyxJlRee_q%;L_|Li^18~!Tt z-a-*N#dNWWCymWF&Tf@_z|yhvWy5ZXQvhAvjn@1seovo+Kwma$k4Khk<%(jm7R)Ri z)`9ZKyE#Bq*rKHSpx)X>n*=RFWDz8;QCiE(xh4PV z0@sKNXO8pEX;CUoi9YpUDVN9(DGurG{U~{Sd;V4OJ*?s!8H8L%a*dn;A#C~Skl&Lg zMR$b7Qg`I2p1R<=0q2Jn4y6Q@V$t-U%~bp{;{(6(twWH)@+RUs=7~D=)sH5oE7gl~ z8dqRrLAQ&Q7l?Su0?{x}XS^_$I(4E-#OkzsSR$ZCmWNO?#+)w%L%%Q4orIGSeGieO z$FiAe_C0DG4v-;ykcOy4AMIq2Qw}|K%8O%=s^#6K|4J~1;rA8@5NE1Wdntw;gMa_y!r9lBTTBe;^N4BvR>tA^~riIaj9xO9UU)y zI$Sex7+GvgbGxGc3ZF8CWLcNgRE_gU?X@2VT2#9HD%lcbjA*L~lOAy1>AnOurOeY| zLnJ&MYA;e~M_Ms-#L#`hUh}!I?(4Ix19sJcB^@`+FhnqdgSrnT?)}s{9o^ zxY^R~h3=Dwyj3Sp`bJW$N*ohuWdQGDWPNr&Th^KJ{M=8PJFbG{y6um#a?83iDmqsT zctqG8)xrBGsp_uf73K4=YCuUe(^+YAR2M31V8G$|_`szrhH+U1f3BY3G3vGKXcwo( ztuzyLtwdfluNmaAqJrw4{L1K6z|4wSVhgomQ>QbCy+`LAFLri{1(=W(r zd+UZ#+`=Bx^V%3H$jghmkqq0|xs$FGyL))Qy`pHfiyYxQ%tIsRSHHN11U|#FeI@NX@R*{0h{Q4}|va;mH4=j=Vy8HaAj zb1N&ic@MXMue{@vgjKhWO^dKUe&n@2uGV_G{9*Zp%<0@%f((M0mqBO8Bgg+oWQ%WW z?<75|O$#5yZu@=0!KLyKtw}m?)7l?uKVs770t7^{IS-C4gF#y*U?sE1#AmXtP2ZNq z20*z8UQfEvMYxs>^Y@{x;5E$&jh3(zrL#s_URNuwZ##e#=c42|Pi-g;TB`VHuBgYnC0wOpz`-_;v%{0(-IU|VdECB;cduRLD^(LqOJ1`oU=d`%gJU7U zi_9c}4o*mnyx!M&yI^8s@X@#SHyo+6Z}NOB@IAYs%rR=qQ*LS8@u5Ndm%N75eAiZK zkO2iQZ2`>lcD-rB9_#cStAPq@PTiCl4M%=1EtTgegAt}%SZ|@zU2pQZQ@N2*u;-7B z>gqwQjoVSl67craq!yT2;z45k*}&lPSiARg`QNHmT+I26-h$ox8dIH1p1GK?HQHy{0yEwPQk*gLyQt_CuZeMn1%XsTljXe;|S10}knu+cSWE9nl zn`_d0xfeRBxPmj&4p(Jjoo*5YH+3Vvg-` zkPNs&RM*4iC9B#ly(;?Xe*gz-K&06U-UCBQ1M6Xs3B3`2V)w73#f(M1zO(b|bAu;E zb*-o(N+{d9W9wMPEAFw|;#CvXMPrdc5VHrN3Z_Ed6#?x7BdJ>{|P;wtM0`8oo2k3ArR%{|BNc zfFa`Oc#`p8z4Tr9{(PpE;)#xI*S7v2yoFK|Ir50_-vO8l;gq-R|AEf@=MOHhLP<{J zxk1`pMu7f-2qi9A|I^4H`61Q`+=787{E7KEn_yZPu6?Rc;}=i(A0g0x{xbji4T^Uf z0ss1XNR;tdRH$avt+UF&T@tZj$_A7Iv2Vb)mP_$H$q%7M@A%gL#k_JEyGryfyzV8; z*Ky*VOy~X6_XA5!sG@?M+OTINl6Yjtel6BM3G~5Ikr;afWm2-AzoCW2kD;i+M z_-Xi{hrmBZORp6By#^qTr!K8Dt!tqdEZebDh7n8ReEOAQv6zG|>JRjsgpdQyfa9O2 zPLzRjbAbY__;*nK`UikLAFymE)Kl+LUa-L}L7@HVHc~Zs3Q+Tl*;hKNlUBTK=s0zm21>q*D%if;S$Tj-Mlp^{k42ETB6-Z>b?*Fm~(*YTQjkuw{ zfB*osR4@W8vU(&8xB%`36xud}u&0z+Za|%9-jvU?mSMY!uDaTcZmH$#T0N=w-3GWc zml6rRAF(XFdW#WnDqXE30&@tTxMfS_|%q{&WLp%+(LmuY_#)9EW@RhA`td$m_fxEq+!do%}v0?sm zQsHKs=f=vq=^wxiH#4mHCs>=-AtIs&c2a&geJijz4Ey$|>C5}}ASO!2F>MVe_kAoeP`ml<}QqTAi=yWx3=4tMj8WZ0UXHCKX9kJ17|AE-z zb;|=59T+KIBWEp7y0Z8OUx8lwJR4pYz=ygV1>|)5_LlN#BDc6z2}i^sx`#du%zB^| zN~~pj|HL)dYOA>R)s{LPEoWKHI&P|iY`X%kDpF{6sGgRQM&`~NtzlcP0(Za1cP2uT zD{_$u7^rLUw{P03VzhT;_~kX}MC~5(j06Q6kXA5^Qj!SQ+~G6r>xmf8AN2s|j%ZK! zOWqh{Dz@;XkzGn*G`Oe1edEo+8+XwX^+~GBMB@SbsYA^38K~NRpD&)Rko_5x&Rck1 z#~HyB6i zMXN8=Ya~^IHCmb`m^`&H@;{{8g3^qCa*889?~s|n8)8%L2(zsv+8F%-sKyI!8SjWu87;ujeZ3y}1hNHsj!z;|7SF;=4U_=5g>y!pGbXm;9za=va=GeCstn zuSNQ-YMp0l=eL@LEj7KOU#47SVqL!{$zwfm*c{+QHj)2`=zH~XU43$&Xy|cAU%b7M z@PhF@4r?oU)37fr==mce(WMl!IHt6RGr+#hq8*c%ckt3Y8>!oCv6C-|`3%rl2FLGi zpZ^X2#nwyo6Dyun_u&wpLtHR=dg>;j`qCJhZfeX~<6d&Jia$7`FXOE1Jiq*CI67;_ zNDr)2yA@3B&yQ@%JgW+2^9Qqe){kgLm|078+fhzJ>I5zu8evy=+aVK0+INXwck{@fS(>>^etr$x zzf6PY-ixs$gGhU=O};Q|CA?|5oWM)sl2K++;|}eO)2$~w*EoSXROoIwr0H4M)P}RI z#mPlyY14reNX)Z;joOPg==keBe2kBp?>QjZHQgthr~G=Iq6z+Xc+<2+frR38<0x`h z5sGAbx2bs2_^u=Mh!0k7I)y^_z=Yirbyr!KF_6t!qT?VjxJXZ?pR9i6pMXOtI>v5s zFi~KlY0>D83b#-VL!_y03Gg`_e7SqVzp;X=YRpI`-hhhp8&~kOs)AMuy*U41B^%|i zIC&NXSD4wyRt*?#sqJ7Wl`XGsIUwuh!!U9^x6pB&*aS%<$eLDt_3}4hUHWJc^-_j) z4MO8>?lfaCVd?)HQFQ?s1teoQQ?=xmY=D1Y^*#JcO=L{8UW~x0dAAHMczwtg4-y3~ zE~7j*qj6c2^H#N^9)Cw4z0U5zV+v=pJMTxBcu)mXkYemTjj2LE$n&#@>J}#?z>Y6> z-}KF^pz-^NMXK6IH)T3+w%A7Ef@( zu8UB@`oj4ld}7x(P}B|cD~=}2pFuU_y71D{VAd4{5o%58;a>D{NI^pO;1(I9ZdeIi zx@jX{`^{;p-V(NTUV>PV=A)NtI!z59%L?wakBc#C&n)(eDfkO{UP1{f&AT`UrkAESp`|5Ti?HpJa&bxF`x~YZop#S<^ZgSCMM;x*BjZ`O=Ri#CIes&m+)FY= zd|Y{_1LD|s3FWAdHeikyN2GKQm6qa8Zysk_kchEmMCtW#>!q-FuyZkHymwu$d&8wt0Yl%(f`^73kME^P+fWD zE}J|O5^gdV!p6(d_o|^Yz7FQQSbV60Qg679lL^ribxGJEye-2lVe1w=*$azCWz@Sz z4W6+-z92Io(hlg)Hwg9I6h24+*1e+N!O7V~D&KC9HGx%NPU2aG=ku1q_hzhXhC?5I zGpP{C*+`9xpYZv-vffjnEB5Pp2A_=3&uPuo+nUIpp?g8zZVR&q3ZtrGyn`H0dA)_7 zicP*2@9#=8RtXLdK_uOIbScOB!Mm!C@vL&yW&UG7iSoQkxtMq70@y?*UeWkt55=p1 z-lAhXNDup}`mwv^cpYf5shlfItzdxb@rRtohsNB!O;Ya5>qZ-0*NHOvW_`z5 z^Rd$7M`tFSu0!pqf(}J`aplf9X{1HtGkkl&LU^$cs{qT!YT4#=rwKMNb#kVe&9t-m zw@I4TT>8t4!#ej2u-1_TJH#p2pB|p?#e>mm87rR{Y@pQ54kkZV8brV|)<7^%oj92D zR$J3zoMMdj=}ejc(BT`Gi(te!MCMzo;!sV>GsQ3Y&;9GCoURdl=KkONd0iHyaer!O zw6@n;47X|Btb@wYAT4Gn4R4_23=YH6>izrvU9vjjUEzJ_oRN$yYFdT0;fOK;V~a^Q z?M9Q>@H?|5kh>YTEb54kQkOksDOw(;y?0b!m7qOxPiU^3e`|@iXBgqbXCU9L#`&eH(|Rkf7b+6RI-|!P z=Ustk>kHFWWo24^x35<)4(T#@Pwpf=|Eqx>*_QA+3bZBHm`&KurfzM&oPS+~%IxdV zxn1~!F7G@jQ!Pc!>u`9!Nto{Q^&cY?k11~vdF2+f;mF18kNfRKpGdFtHSHvqz3r81 z^PW+h*a=wN3x9R;#h>hr0*F6uwWjJM&|DQ*>%kyrH>Gi-J}-NEcH>k&8Ewl&DQW5` z?@aYntk5NhZ4D=c!{)f9HSd8zSqiS0tTHV~79mR@eNLl7gdFmceLGI4C!ISdvo(30 ze06xc=U*r?UXLAFyyc4<-Zjybx6CxfG)h+V`MIN z{!y+^*~DEi;kNT}iYhARLT>YwbAlIPH@7ImxZei!PLcK0*8e?q$28ii3cj?J# zS6l60eX8VOXoT8>C4(EBO;#7}9MKD)ac`;h;TAZ*wSn150@O158twO=m)G3XM1rR= zLTGnD%OWg$tDGJ99s3s0ru17;d@Kx(MK91b#jlS=FgacvTJw7;%V#>Jrp~ft;I}p( zEjgW*JYnFX3y3kkPdxwq_ESZ{Zn;&BET0X5^B1~f)*oj> zXK9WIdUE^dXAQF^QY0}Q_xkMWMt|R2dyfGXy#4{S5hxh1_^XeZ4}*5hNT2=gyD^KZ z8GY?_3By2al$MSOFV1iqbLadPQB0n|yP*%R%`6zQaT=R09684?^G;9K zhktl5FBL=(d$jDW3A^}gI*o*KK9@ihtdfUl>RmgujWJw+{>v?hv;4@lKjJdf{^vgP zJiQCjtisrb8A%0zhxanA`@~zbv#*gmYE4qmdzhdm;`TnG+Y|s_*%!@WJUz9ez=^m` z*90BAj8&H0Uor?jPNGIN>i3Tk7#_JTrX20llik_}ZUE>s(6<>}t?DQ_|9bAL!3U%} zpu)tmDz&QwC~-d5Jc`(EHwZLfrN9;i0dQscDO%iN#$O!?jAWy3MIl;n ziV|BC9P8xJYf#aPN^5#ws$k#kGo>Fm*lz< zRJ#kEkS{TSJ($StL)$}jWC8^z#FE+@d%_JI^5T#F#Cv~flJxvS?KNxcyn4/dev/null 2>&1; then + echo "Error: Docker is not running" >&2 + return 1 + fi + + echo "Looking for containers with names starting with [$app_prefix]..." >&2 + + # Find the container using grep + container_name=$(docker ps --format "{{.Names}}" | grep "^${app_prefix}" | head -1) + + if [ -z "$container_name" ]; then + echo "Error: No running container found with name starting with [$app_prefix]" >&2 + return 1 + fi + + echo "Found matching container [$container_name]" >&2 + echo "$container_name" +} + +get_docker_container_ip_address_by_name() { + local container_name="$1" + local ip_address + + if [ -z "$container_name" ]; then + echo "Error: Container name is required" >&2 + return 1 + fi + + # Get IP address + ip_address=$(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' "$container_name") + + if [ -z "$ip_address" ]; then + echo "Error: Container [$container_name] has no IP address assigned" >&2 + return 1 + fi + + echo "$ip_address" +} + +get_docker_container_port_mapping() { + local container_name="$1" + local container_port="$2" + local host_port + + if [ -z "$container_name" ] || [ -z "$container_port" ]; then + echo "Error: Container name and container port are required" >&2 + return 1 + fi + + # Get host port mapping + host_port=$(docker inspect -f "{{(index (index .NetworkSettings.Ports \"${container_port}/tcp\") 0).HostPort}}" "$container_name") + + if [ -z "$host_port" ]; then + echo "Error: No host port mapping found for container [$container_name] port [$container_port]" >&2 + return 1 + fi + + echo "$host_port" +} + +call_web_app() { + # Web app port + local web_app_port=8000 + + # Get the web app name + echo "Getting web app name..." + web_app_name=$(az webapp list --query '[0].name' --output tsv) + + if [ -n "$web_app_name" ]; then + echo "Web app [$web_app_name] successfully retrieved." + else + echo "Error: No web app found" + exit 1 + fi + + # Get the resource group name + echo "Getting resource group name for web app [$web_app_name]..." + resource_group_name=$(az webapp list --query '[0].resourceGroup' --output tsv) + + if [ -n "$resource_group_name" ]; then + echo "Resource group [$resource_group_name] successfully retrieved." + else + echo "Error: No resource group found for web app [$web_app_name]" + exit 1 + fi + + # Get the the default host name of the web app + echo "Getting the default host name of the web app [$web_app_name]..." + app_host_name=$(az webapp show \ + --name "$web_app_name" \ + --resource-group "$resource_group_name" \ + --query 'defaultHostName' \ + --output tsv) + + if [ -n "$app_host_name" ]; then + echo "Web app default host name [$app_host_name] successfully retrieved." + else + echo "Error: No web app default host name found" + exit 1 + fi + + # Get the Docker container name + echo "Finding container name with prefix [ls-$web_app_name]..." + container_name=$(get_docker_container_name_by_prefix "ls-$web_app_name") + + if [ $? -eq 0 ] && [ -n "$container_name" ]; then + echo "Container [$container_name] found successfully" + else + echo "Failed to get container name" + exit 1 + fi + + # Get the container IP address + echo "Getting IP address for container [$container_name]..." + container_ip=$(get_docker_container_ip_address_by_name "$container_name") + + if [ $? -eq 0 ] && [ -n "$container_ip" ]; then + echo "IP address [$container_ip] retrieved successfully for container [$container_name]" + else + echo "Failed to get container IP address" + exit 1 + fi + + # Get the mapped host port for web app HTTP trigger (internal port 8000) + echo "Getting the host port mapped to internal port $web_app_port in container [$container_name]..." + host_port=$(get_docker_container_port_mapping "$container_name" "$web_app_port") + + if [ $? -eq 0 ] && [ -n "$host_port" ]; then + echo "Mapped host port [$host_port] retrieved successfully for container [$container_name]" + else + echo "Failed to get mapped host port for container [$container_name]" + fi + + # Retrieve LocalStack proxy port + proxy_port=$(curl http://localhost:4566/_localstack/proxy -s | jq '.proxy_port') + + if [ -n "$proxy_port" ]; then + # Call the web app via emulator proxy + echo "Calling web app [$web_app_name] via emulator..." + curl --proxy "http://localhost:$proxy_port/" -s "http://$app_host_name/" 1> /dev/null + + if [ $? == 0 ]; then + echo "Web app call via emulator proxy port [$proxy_port] succeeded." + else + echo "Web app call via emulator proxy port [$proxy_port] failed." + fi + else + echo "Failed to retrieve LocalStack proxy port" + fi + + if [ -n "$container_ip" ]; then + # Call the web app via the container IP address + echo "Calling web app [$web_app_name] via container IP address [$container_ip]..." + curl -s "http://$container_ip:$web_app_port/" 1> /dev/null + + if [ $? == 0 ]; then + echo "Web app call via container IP address [$container_ip] succeeded." + else + echo "Web app call via container IP address [$container_ip] failed." + fi + else + echo "Failed to retrieve container IP address" + fi + + if [ -n "$host_port" ]; then + # Call the web app via the host port + echo "Calling web app [$web_app_name] via host port [$host_port]..." + curl -s "http://127.0.0.1:$host_port/" 1> /dev/null + + if [ $? == 0 ]; then + echo "Web app call via host port [$host_port] succeeded." + else + echo "Web app call via host port [$host_port] failed." + fi + else + echo "Failed to retrieve host port" + fi + + if [ -n "$app_host_name" ]; then + # Call the web app via the default hostname + echo "Calling web app [$web_app_name] via default hostname [$app_host_name]..." + curl -s "http://$app_host_name/" 1> /dev/null + + if [ $? == 0 ]; then + echo "Web app call via default hostname [$app_host_name] succeeded." + else + echo "Web app call via default hostname [$app_host_name] failed." + fi + else + echo "Failed to retrieve web app hostname" + fi +} + +call_web_app \ No newline at end of file diff --git a/samples/web-app-mysql-flexible-server/python/scripts/deploy.sh b/samples/web-app-mysql-flexible-server/python/scripts/deploy.sh new file mode 100755 index 0000000..b92bbdf --- /dev/null +++ b/samples/web-app-mysql-flexible-server/python/scripts/deploy.sh @@ -0,0 +1,1068 @@ +#!/bin/bash + +# Variables +PREFIX='local' +SUFFIX='test' +LOCATION='westeurope' +RESOURCE_GROUP_NAME="${PREFIX}-rg" +LOG_ANALYTICS_NAME="${PREFIX}-log-analytics-${SUFFIX}" +DIAGNOSTIC_SETTINGS_NAME='default' +WEB_APP_SUBNET_NSG_NAME="${PREFIX}-webapp-subnet-nsg-${SUFFIX}" +PE_SUBNET_NSG_NAME="${PREFIX}-pe-subnet-nsg-${SUFFIX}" +NAT_GATEWAY_NAME="${PREFIX}-nat-gateway-${SUFFIX}" +PIP_PREFIX_NAME="${PREFIX}-nat-gateway-pip-prefix-${SUFFIX}" +VIRTUAL_NETWORK_NAME="${PREFIX}-vnet-${SUFFIX}" +VIRTUAL_NETWORK_ADDRESS_PREFIX="10.0.0.0/8" +WEB_APP_SUBNET_NAME="app-subnet" +WEB_APP_SUBNET_PREFIX="10.0.0.0/24" +PE_SUBNET_NAME="pe-subnet" +PE_SUBNET_PREFIX="10.0.1.0/24" +VIRTUAL_NETWORK_LINK_NAME="link-to-vnet" +PRIVATE_DNS_ZONE_NAME="privatelink.mysql.database.azure.com" +PRIVATE_ENDPOINT_NAME="${PREFIX}-mysql-pe-${SUFFIX}" +PRIVATE_ENDPOINT_GROUP="mysqlServer" +PRIVATE_DNS_ZONE_GROUP_NAME="default" +APP_SERVICE_PLAN_NAME="${PREFIX}-app-service-plan-${SUFFIX}" +APP_SERVICE_PLAN_SKU="S1" +WEB_APP_NAME="${PREFIX}-webapp-${SUFFIX}" +MYSQL_SERVER_NAME="${PREFIX}-mysqlflex-${SUFFIX}" +MYSQL_VERSION="8.0.21" +MYSQL_SKU_NAME="Standard_B1ms" +MYSQL_SKU_TIER="Burstable" +MYSQL_STORAGE_SIZE_GB=32 +MYSQL_BACKUP_RETENTION_DAYS=7 +MYSQL_DATABASE_NAME="PlannerDB" +MYSQL_ADMIN_USER="myadmin" +MYSQL_ADMIN_PASSWORD="P@ssw0rd1234!" +MYSQL_APP_USER="testuser" +MYSQL_APP_PASSWORD="TestP@ssw0rd123" +FIREWALL_RULE_NAME="AllowAllIPs" +RUNTIME="python" +RUNTIME_VERSION="3.13" +LOGIN_NAME="paolo" +CURRENT_DIR="$(cd "$(dirname "$0")" && pwd)" +ZIPFILE="planner_website.zip" + +# Change the current directory to the script's directory +cd "$CURRENT_DIR" || exit +# Create a resource group +echo "Creating resource group [$RESOURCE_GROUP_NAME]..." +az group create \ + --name $RESOURCE_GROUP_NAME \ + --location $LOCATION \ + --tags environment=test iac=az-cli \ + --only-show-errors 1>/dev/null + +if [ $? -eq 0 ]; then + echo "Resource group [$RESOURCE_GROUP_NAME] created successfully." +else + echo "Failed to create resource group [$RESOURCE_GROUP_NAME]." + exit 1 +fi + +# Check if the MySQL flexible server already exists +echo "Checking if [$MYSQL_SERVER_NAME] MySQL flexible server already exists in the [$RESOURCE_GROUP_NAME] resource group..." +az mysql flexible-server show \ + --name $MYSQL_SERVER_NAME \ + --resource-group $RESOURCE_GROUP_NAME \ + --only-show-errors &>/dev/null + +if [[ $? != 0 ]]; then + echo "No [$MYSQL_SERVER_NAME] MySQL flexible server already exists in the [$RESOURCE_GROUP_NAME] resource group" + echo "Creating [$MYSQL_SERVER_NAME] MySQL flexible server in the [$RESOURCE_GROUP_NAME] resource group..." + + # Create a MySQL flexible server with public network access + az mysql flexible-server create \ + --name $MYSQL_SERVER_NAME \ + --resource-group $RESOURCE_GROUP_NAME \ + --location $LOCATION \ + --tier $MYSQL_SKU_TIER \ + --sku-name $MYSQL_SKU_NAME \ + --version $MYSQL_VERSION \ + --storage-size $MYSQL_STORAGE_SIZE_GB \ + --backup-retention $MYSQL_BACKUP_RETENTION_DAYS \ + --geo-redundant-backup Disabled \ + --admin-user $MYSQL_ADMIN_USER \ + --admin-password "$MYSQL_ADMIN_PASSWORD" \ + --public-access Enabled \ + --high-availability Disabled \ + --yes \ + --tags environment=test iac=az-cli \ + --only-show-errors 1>/dev/null + + if [ $? -eq 0 ]; then + echo "[$MYSQL_SERVER_NAME] MySQL flexible server successfully created in the [$RESOURCE_GROUP_NAME] resource group" + else + echo "Failed to create [$MYSQL_SERVER_NAME] MySQL flexible server in the [$RESOURCE_GROUP_NAME] resource group" + exit 1 + fi +else + echo "[$MYSQL_SERVER_NAME] MySQL flexible server already exists in the [$RESOURCE_GROUP_NAME] resource group" +fi + +# Retrieve the resource id of the MySQL flexible server +echo "Getting [$MYSQL_SERVER_NAME] MySQL flexible server resource id in the [$RESOURCE_GROUP_NAME] resource group..." +MYSQL_SERVER_ID=$(az mysql flexible-server show \ + --name $MYSQL_SERVER_NAME \ + --resource-group $RESOURCE_GROUP_NAME \ + --query id \ + --output tsv \ + --only-show-errors) + +if [ -n "$MYSQL_SERVER_ID" ]; then + echo "MySQL flexible server resource id retrieved successfully: $MYSQL_SERVER_ID" +else + echo "Failed to retrieve MySQL flexible server resource id." + exit 1 +fi + +# Retrieve the fullyQualifiedDomainName of the MySQL flexible server +echo "Getting [$MYSQL_SERVER_NAME] MySQL flexible server FQDN in the [$RESOURCE_GROUP_NAME] resource group..." +MYSQL_FQDN_FULL=$(az mysql flexible-server show \ + --name $MYSQL_SERVER_NAME \ + --resource-group $RESOURCE_GROUP_NAME \ + --query "fullyQualifiedDomainName" \ + --output tsv \ + --only-show-errors) + +if [ -n "$MYSQL_FQDN_FULL" ]; then + echo "MySQL flexible server FQDN retrieved successfully: $MYSQL_FQDN_FULL" +else + echo "Failed to retrieve MySQL flexible server FQDN." + exit 1 +fi + +# Split host:port — the LocalStack emulator embeds the dynamically allocated TCP-proxy port +# directly in fullyQualifiedDomainName, mirroring the storage / container registry emulators. +# Real Azure returns just the bare host so MYSQL_PORT defaults to 3306. +MYSQL_FQDN="${MYSQL_FQDN_FULL%%:*}" +if [[ "$MYSQL_FQDN_FULL" == *:* ]]; then + MYSQL_PORT="${MYSQL_FQDN_FULL##*:}" +else + MYSQL_PORT=3306 +fi +echo "MySQL host = $MYSQL_FQDN, port = $MYSQL_PORT" + +# Check if the server-level firewall rule already exists +echo "Checking if [$FIREWALL_RULE_NAME] firewall rule already exists on the [$MYSQL_SERVER_NAME] MySQL flexible server..." +az mysql flexible-server firewall-rule show \ + --name $MYSQL_SERVER_NAME \ + --resource-group $RESOURCE_GROUP_NAME \ + --rule-name $FIREWALL_RULE_NAME \ + --only-show-errors &>/dev/null + +if [[ $? != 0 ]]; then + echo "No [$FIREWALL_RULE_NAME] firewall rule already exists on the [$MYSQL_SERVER_NAME] MySQL flexible server" + echo "Creating [$FIREWALL_RULE_NAME] firewall rule on the [$MYSQL_SERVER_NAME] MySQL flexible server..." + + # Create a permissive firewall rule so the deploy machine can run the mysql bootstrap + az mysql flexible-server firewall-rule create \ + --name $MYSQL_SERVER_NAME \ + --resource-group $RESOURCE_GROUP_NAME \ + --rule-name $FIREWALL_RULE_NAME \ + --start-ip-address "0.0.0.0" \ + --end-ip-address "255.255.255.255" \ + --only-show-errors 1>/dev/null + + if [ $? -eq 0 ]; then + echo "[$FIREWALL_RULE_NAME] firewall rule successfully created on the [$MYSQL_SERVER_NAME] MySQL flexible server" + else + echo "Failed to create [$FIREWALL_RULE_NAME] firewall rule on the [$MYSQL_SERVER_NAME] MySQL flexible server" + exit 1 + fi +else + echo "[$FIREWALL_RULE_NAME] firewall rule already exists on the [$MYSQL_SERVER_NAME] MySQL flexible server" +fi + +# Check if the MySQL database already exists +echo "Checking if [$MYSQL_DATABASE_NAME] database already exists on the [$MYSQL_SERVER_NAME] MySQL flexible server..." +az mysql flexible-server db show \ + --server-name $MYSQL_SERVER_NAME \ + --resource-group $RESOURCE_GROUP_NAME \ + --database-name $MYSQL_DATABASE_NAME \ + --only-show-errors &>/dev/null + +if [[ $? != 0 ]]; then + echo "No [$MYSQL_DATABASE_NAME] database already exists on the [$MYSQL_SERVER_NAME] MySQL flexible server" + echo "Creating [$MYSQL_DATABASE_NAME] database on the [$MYSQL_SERVER_NAME] MySQL flexible server..." + + # Create the application database + az mysql flexible-server db create \ + --server-name $MYSQL_SERVER_NAME \ + --resource-group $RESOURCE_GROUP_NAME \ + --database-name $MYSQL_DATABASE_NAME \ + --charset utf8mb4 \ + --collation utf8mb4_unicode_ci \ + --only-show-errors 1>/dev/null + + if [ $? -eq 0 ]; then + echo "[$MYSQL_DATABASE_NAME] database successfully created on the [$MYSQL_SERVER_NAME] MySQL flexible server" + else + echo "Failed to create [$MYSQL_DATABASE_NAME] database on the [$MYSQL_SERVER_NAME] MySQL flexible server" + exit 1 + fi +else + echo "[$MYSQL_DATABASE_NAME] database already exists on the [$MYSQL_SERVER_NAME] MySQL flexible server" +fi + +# Check if the network security group for the web app subnet already exists +echo "Checking if [$WEB_APP_SUBNET_NSG_NAME] network security group for the web app subnet actually exists in the [$RESOURCE_GROUP_NAME] resource group..." +az network nsg show \ + --name "$WEB_APP_SUBNET_NSG_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --only-show-errors &>/dev/null + +if [[ $? != 0 ]]; then + echo "No [$WEB_APP_SUBNET_NSG_NAME] network security group for the web app subnet actually exists in the [$RESOURCE_GROUP_NAME] resource group" + echo "Creating [$WEB_APP_SUBNET_NSG_NAME] network security group for the web app subnet..." + + # Create the network security group for the web app subnet + az network nsg create \ + --name "$WEB_APP_SUBNET_NSG_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --location "$LOCATION" \ + --tags environment=test iac=az-cli \ + --only-show-errors 1>/dev/null + + if [[ $? == 0 ]]; then + echo "[$WEB_APP_SUBNET_NSG_NAME] network security group for the web app subnet successfully created in the [$RESOURCE_GROUP_NAME] resource group" + else + echo "Failed to create [$WEB_APP_SUBNET_NSG_NAME] network security group for the web app subnet in the [$RESOURCE_GROUP_NAME] resource group" + exit 1 + fi +else + echo "[$WEB_APP_SUBNET_NSG_NAME] network security group for the web app subnet already exists in the [$RESOURCE_GROUP_NAME] resource group" +fi + +# Get the resource id of the network security group for the web app subnet +echo "Getting [$WEB_APP_SUBNET_NSG_NAME] network security group for the web app subnet resource id in the [$RESOURCE_GROUP_NAME] resource group..." +WEB_APP_SUBNET_NSG_ID=$(az network nsg show \ + --name "$WEB_APP_SUBNET_NSG_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --query id \ + --output tsv \ + --only-show-errors) + +if [[ -n $WEB_APP_SUBNET_NSG_ID ]]; then + echo "[$WEB_APP_SUBNET_NSG_NAME] network security group for the web app subnet resource id retrieved successfully: $WEB_APP_SUBNET_NSG_ID" +else + echo "Failed to retrieve [$WEB_APP_SUBNET_NSG_NAME] network security group for the web app subnet resource id in the [$RESOURCE_GROUP_NAME] resource group" + exit 1 +fi + +# Check if the network security group for the private endpoint subnet already exists +echo "Checking if [$PE_SUBNET_NSG_NAME] network security group for the private endpoint subnet actually exists in the [$RESOURCE_GROUP_NAME] resource group..." +az network nsg show \ + --name "$PE_SUBNET_NSG_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --only-show-errors &>/dev/null + +if [[ $? != 0 ]]; then + echo "No [$PE_SUBNET_NSG_NAME] network security group for the private endpoint subnet actually exists in the [$RESOURCE_GROUP_NAME] resource group" + echo "Creating [$PE_SUBNET_NSG_NAME] network security group for the private endpoint subnet..." + + # Create the network security group for the private endpoint subnet + az network nsg create \ + --name "$PE_SUBNET_NSG_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --location "$LOCATION" \ + --tags environment=test iac=az-cli \ + --only-show-errors 1>/dev/null + + if [[ $? == 0 ]]; then + echo "[$PE_SUBNET_NSG_NAME] network security group for the private endpoint subnet successfully created in the [$RESOURCE_GROUP_NAME] resource group" + else + echo "Failed to create [$PE_SUBNET_NSG_NAME] network security group for the private endpoint subnet in the [$RESOURCE_GROUP_NAME] resource group" + exit 1 + fi +else + echo "[$PE_SUBNET_NSG_NAME] network security group for the private endpoint subnet already exists in the [$RESOURCE_GROUP_NAME] resource group" +fi + +# Get the resource id of the network security group for the private endpoint subnet +echo "Getting [$PE_SUBNET_NSG_NAME] network security group for the private endpoint subnet resource id in the [$RESOURCE_GROUP_NAME] resource group..." +PE_SUBNET_NSG_ID=$(az network nsg show \ + --name "$PE_SUBNET_NSG_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --query id \ + --output tsv \ + --only-show-errors) + +if [[ -n $PE_SUBNET_NSG_ID ]]; then + echo "[$PE_SUBNET_NSG_NAME] network security group for the private endpoint subnet resource id retrieved successfully: $PE_SUBNET_NSG_ID" +else + echo "Failed to retrieve [$PE_SUBNET_NSG_NAME] network security group for the private endpoint subnet resource id in the [$RESOURCE_GROUP_NAME] resource group" + exit 1 +fi + +# Check if the public IP prefix for the NAT Gateway already exists +echo "Checking if [$PIP_PREFIX_NAME] public IP prefix for the NAT Gateway actually exists in the [$RESOURCE_GROUP_NAME] resource group..." +az network public-ip prefix show \ + --name "$PIP_PREFIX_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --only-show-errors &>/dev/null + +if [[ $? != 0 ]]; then + echo "No [$PIP_PREFIX_NAME] public IP prefix for the NAT Gateway actually exists in the [$RESOURCE_GROUP_NAME] resource group" + echo "Creating [$PIP_PREFIX_NAME] public IP prefix for the NAT Gateway in the [$RESOURCE_GROUP_NAME] resource group..." + + # Create the public IP prefix for the NAT Gateway + az network public-ip prefix create \ + --name "$PIP_PREFIX_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --location "$LOCATION" \ + --length 31 \ + --tags environment=test iac=az-cli \ + --only-show-errors 1>/dev/null + + if [[ $? == 0 ]]; then + echo "[$PIP_PREFIX_NAME] public IP prefix for the NAT Gateway successfully created in the [$RESOURCE_GROUP_NAME] resource group" + else + echo "Failed to create [$PIP_PREFIX_NAME] public IP prefix for the NAT Gateway in the [$RESOURCE_GROUP_NAME] resource group" + exit 1 + fi +else + echo "[$PIP_PREFIX_NAME] public IP prefix for the NAT Gateway already exists in the [$RESOURCE_GROUP_NAME] resource group" +fi + +# Check if the NAT Gateway already exists +echo "Checking if [$NAT_GATEWAY_NAME] NAT Gateway actually exists in the [$RESOURCE_GROUP_NAME] resource group..." +az network nat gateway show \ + --name "$NAT_GATEWAY_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --only-show-errors &>/dev/null + +if [[ $? != 0 ]]; then + echo "No [$NAT_GATEWAY_NAME] NAT Gateway actually exists in the [$RESOURCE_GROUP_NAME] resource group" + echo "Creating [$NAT_GATEWAY_NAME] NAT Gateway in the [$RESOURCE_GROUP_NAME] resource group..." + + # Create the NAT Gateway + az network nat gateway create \ + --name "$NAT_GATEWAY_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --location "$LOCATION" \ + --public-ip-prefixes "$PIP_PREFIX_NAME" \ + --idle-timeout 4 \ + --tags environment=test iac=az-cli \ + --only-show-errors 1>/dev/null + + if [[ $? == 0 ]]; then + echo "[$NAT_GATEWAY_NAME] NAT Gateway successfully created in the [$RESOURCE_GROUP_NAME] resource group" + else + echo "Failed to create [$NAT_GATEWAY_NAME] NAT Gateway in the [$RESOURCE_GROUP_NAME] resource group" + exit 1 + fi +else + echo "[$NAT_GATEWAY_NAME] NAT Gateway already exists in the [$RESOURCE_GROUP_NAME] resource group" +fi + +# Check if the virtual network already exists +echo "Checking if [$VIRTUAL_NETWORK_NAME] virtual network actually exists in the [$RESOURCE_GROUP_NAME] resource group..." +az network vnet show \ + --name "$VIRTUAL_NETWORK_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --only-show-errors &>/dev/null + +if [[ $? != 0 ]]; then + echo "No [$VIRTUAL_NETWORK_NAME] virtual network actually exists in the [$RESOURCE_GROUP_NAME] resource group" + echo "Creating [$VIRTUAL_NETWORK_NAME] virtual network in the [$RESOURCE_GROUP_NAME] resource group..." + + # Create the virtual network + az network vnet create \ + --name "$VIRTUAL_NETWORK_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --location "$LOCATION" \ + --address-prefixes "$VIRTUAL_NETWORK_ADDRESS_PREFIX" \ + --subnet-name "$WEB_APP_SUBNET_NAME" \ + --subnet-prefix "$WEB_APP_SUBNET_PREFIX" \ + --tags environment=test iac=az-cli \ + --only-show-errors 1>/dev/null + + if [[ $? == 0 ]]; then + echo "[$VIRTUAL_NETWORK_NAME] virtual network successfully created in the [$RESOURCE_GROUP_NAME] resource group" + else + echo "Failed to create [$VIRTUAL_NETWORK_NAME] virtual network in the [$RESOURCE_GROUP_NAME] resource group" + exit + fi + + # Update the web app subnet to associate it with the NAT Gateway and the NSG + echo "Associating [$WEB_APP_SUBNET_NAME] subnet with the [$NAT_GATEWAY_NAME] NAT Gateway and the [$WEB_APP_SUBNET_NSG_NAME] network security group..." + + # Update the web app subnet to associate it with the NAT Gateway and the NSG + az network vnet subnet update \ + --name "$WEB_APP_SUBNET_NAME" \ + --vnet-name "$VIRTUAL_NETWORK_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --nat-gateway "$NAT_GATEWAY_NAME" \ + --network-security-group "$WEB_APP_SUBNET_NSG_NAME" \ + --only-show-errors 1>/dev/null + + if [[ $? == 0 ]]; then + echo "[$WEB_APP_SUBNET_NAME] subnet successfully associated with the [$NAT_GATEWAY_NAME] NAT Gateway and the [$WEB_APP_SUBNET_NSG_NAME] network security group" + else + echo "Failed to associate [$WEB_APP_SUBNET_NAME] subnet with the [$NAT_GATEWAY_NAME] NAT Gateway and the [$WEB_APP_SUBNET_NSG_NAME] network security group" + exit 1 + fi +else + echo "[$VIRTUAL_NETWORK_NAME] virtual network already exists in the [$RESOURCE_GROUP_NAME] resource group" +fi + +# Check if the subnet already exists +echo "Checking if [$PE_SUBNET_NAME] subnet actually exists in the [$VIRTUAL_NETWORK_NAME] virtual network..." +az network vnet subnet show \ + --name "$PE_SUBNET_NAME" \ + --vnet-name "$VIRTUAL_NETWORK_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --only-show-errors &>/dev/null + +if [[ $? != 0 ]]; then + echo "No [$PE_SUBNET_NAME] subnet actually exists in the [$VIRTUAL_NETWORK_NAME] virtual network" + echo "Creating [$PE_SUBNET_NAME] subnet in the [$VIRTUAL_NETWORK_NAME] virtual network..." + + # Create the subnet + az network vnet subnet create \ + --name "$PE_SUBNET_NAME" \ + --vnet-name "$VIRTUAL_NETWORK_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --address-prefix "$PE_SUBNET_PREFIX" \ + --network-security-group "$PE_SUBNET_NSG_NAME" \ + --private-endpoint-network-policies "Disabled" \ + --private-link-service-network-policies "Disabled" \ + --only-show-errors 1>/dev/null + + if [[ $? == 0 ]]; then + echo "[$PE_SUBNET_NAME] subnet successfully created in the [$VIRTUAL_NETWORK_NAME] virtual network" + else + echo "Failed to create [$PE_SUBNET_NAME] subnet in the [$VIRTUAL_NETWORK_NAME] virtual network" + exit + fi +else + echo "[$PE_SUBNET_NAME] subnet already exists in the [$VIRTUAL_NETWORK_NAME] virtual network" +fi + +# Retrieve the virtual network resource id +echo "Getting [$VIRTUAL_NETWORK_NAME] virtual network resource id in the [$RESOURCE_GROUP_NAME] resource group..." +VIRTUAL_NETWORK_ID=$(az network vnet show \ + --name "$VIRTUAL_NETWORK_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --only-show-errors \ + --query id \ + --output tsv) + +if [[ -n $VIRTUAL_NETWORK_ID ]]; then + echo "[$VIRTUAL_NETWORK_NAME] virtual network resource id retrieved successfully: $VIRTUAL_NETWORK_ID" +else + echo "Failed to retrieve [$VIRTUAL_NETWORK_NAME] virtual network resource id in the [$RESOURCE_GROUP_NAME] resource group" + exit +fi + +# Check if the private DNS Zone already exists +echo "Checking if [$PRIVATE_DNS_ZONE_NAME] private DNS zone actually exists in the [$RESOURCE_GROUP_NAME] resource group..." +az network private-dns zone show \ + --name "$PRIVATE_DNS_ZONE_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --only-show-errors &>/dev/null + +if [[ $? != 0 ]]; then + echo "No [$PRIVATE_DNS_ZONE_NAME] private DNS zone actually exists in the [$RESOURCE_GROUP_NAME] resource group" + echo "Creating [$PRIVATE_DNS_ZONE_NAME] private DNS zone in the [$RESOURCE_GROUP_NAME] resource group..." + + # Create the private DNS Zone + az network private-dns zone create \ + --name "$PRIVATE_DNS_ZONE_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --tags environment=test iac=az-cli \ + --only-show-errors 1>/dev/null + + if [[ $? == 0 ]]; then + echo "[$PRIVATE_DNS_ZONE_NAME] private DNS zone successfully created in the [$RESOURCE_GROUP_NAME] resource group" + else + echo "Failed to create [$PRIVATE_DNS_ZONE_NAME] private DNS zone in the [$RESOURCE_GROUP_NAME] resource group" + exit + fi +else + echo "[$PRIVATE_DNS_ZONE_NAME] private DNS zone already exists in the [$RESOURCE_GROUP_NAME] resource group" +fi + +# Check if the virtual network link between the private DNS zone and the virtual network already exists +echo "Checking if [$VIRTUAL_NETWORK_LINK_NAME] virtual network link between [$PRIVATE_DNS_ZONE_NAME] private DNS zone and [$VIRTUAL_NETWORK_NAME] virtual network actually exists..." +az network private-dns link vnet show \ + --name "$VIRTUAL_NETWORK_LINK_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --zone-name "$PRIVATE_DNS_ZONE_NAME" \ + --only-show-errors &>/dev/null + +if [[ $? != 0 ]]; then + echo "No [$VIRTUAL_NETWORK_LINK_NAME] virtual network link between [$PRIVATE_DNS_ZONE_NAME] private DNS zone and [$VIRTUAL_NETWORK_NAME] virtual network actually exists" + + echo "Creating [$VIRTUAL_NETWORK_LINK_NAME] virtual network link between [$PRIVATE_DNS_ZONE_NAME] private DNS zone and [$VIRTUAL_NETWORK_NAME] virtual network..." + + # Create the virtual network link between [$PRIVATE_DNS_ZONE_NAME] private DNS zone and [$VIRTUAL_NETWORK_NAME] virtual network + az network private-dns link vnet create \ + --name "$VIRTUAL_NETWORK_LINK_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --zone-name "$PRIVATE_DNS_ZONE_NAME" \ + --virtual-network "$VIRTUAL_NETWORK_ID" \ + --registration-enabled false \ + --only-show-errors 1>/dev/null + + if [[ $? == 0 ]]; then + echo "[$VIRTUAL_NETWORK_LINK_NAME] virtual network link between [$PRIVATE_DNS_ZONE_NAME] private DNS zone and [$VIRTUAL_NETWORK_NAME] virtual network successfully created" + else + echo "Failed to create [$VIRTUAL_NETWORK_LINK_NAME] virtual network link between [$PRIVATE_DNS_ZONE_NAME] private DNS zone and [$VIRTUAL_NETWORK_NAME] virtual network" + exit + fi +else + echo "[$VIRTUAL_NETWORK_LINK_NAME] virtual network link between [$PRIVATE_DNS_ZONE_NAME] private DNS zone and [$VIRTUAL_NETWORK_NAME] virtual network already exists" +fi + +# Check if the private endpoint already exists +echo "Checking if private endpoint [$PRIVATE_ENDPOINT_NAME] exists in the [$RESOURCE_GROUP_NAME] resource group..." +privateEndpointId=$(az network private-endpoint list \ + --resource-group $RESOURCE_GROUP_NAME \ + --only-show-errors \ + --query "[?name=='$PRIVATE_ENDPOINT_NAME'].id" \ + --output tsv) + +if [[ -z $privateEndpointId ]]; then + echo "Private endpoint [$PRIVATE_ENDPOINT_NAME] does not exist in the [$RESOURCE_GROUP_NAME] resource group" + echo "Creating [$PRIVATE_ENDPOINT_NAME] private endpoint for the [$MYSQL_SERVER_NAME] MySQL flexible server in the [$RESOURCE_GROUP_NAME] resource group..." + + # Create a private endpoint for the MySQL flexible server + az network private-endpoint create \ + --name "$PRIVATE_ENDPOINT_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --location "$LOCATION" \ + --vnet-name "$VIRTUAL_NETWORK_NAME" \ + --subnet "$PE_SUBNET_NAME" \ + --private-connection-resource-id "$MYSQL_SERVER_ID" \ + --group-id "$PRIVATE_ENDPOINT_GROUP" \ + --connection-name "mysql-connection" \ + --tags environment=test iac=az-cli \ + --only-show-errors 1>/dev/null + + if [[ $? == 0 ]]; then + echo "Private endpoint [$PRIVATE_ENDPOINT_NAME] successfully created for the [$MYSQL_SERVER_NAME] MySQL flexible server in the [$RESOURCE_GROUP_NAME] resource group" + else + echo "Failed to create a private endpoint for the [$MYSQL_SERVER_NAME] MySQL flexible server in the [$RESOURCE_GROUP_NAME] resource group" + exit + fi +else + echo "Private endpoint [$PRIVATE_ENDPOINT_NAME] already exists in the [$RESOURCE_GROUP_NAME] resource group" +fi + +# Check if the private DNS zone group is already created for the MySQL flexible server private endpoint +echo "Checking if the private DNS zone group [$PRIVATE_DNS_ZONE_GROUP_NAME] for the [$PRIVATE_ENDPOINT_NAME] private endpoint already exists..." +NAME=$(az network private-endpoint dns-zone-group show \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --endpoint-name "$PRIVATE_ENDPOINT_NAME" \ + --name "$PRIVATE_DNS_ZONE_GROUP_NAME" \ + --query name \ + --output tsv \ + --only-show-errors) + +if [[ -z $NAME ]]; then + echo "No private DNS zone group [$PRIVATE_DNS_ZONE_GROUP_NAME] for the [$PRIVATE_ENDPOINT_NAME] private endpoint actually exists" + echo "Creating private DNS zone group [$PRIVATE_DNS_ZONE_GROUP_NAME] for the [$PRIVATE_ENDPOINT_NAME] private endpoint..." + + # Create the private DNS zone group for the MySQL flexible server private endpoint + az network private-endpoint dns-zone-group create \ + --name "$PRIVATE_DNS_ZONE_GROUP_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --endpoint-name "$PRIVATE_ENDPOINT_NAME" \ + --private-dns-zone "$PRIVATE_DNS_ZONE_NAME" \ + --zone-name "mysql-zone" \ + --only-show-errors 1>/dev/null + + if [[ $? == 0 ]]; then + echo "Private DNS zone group [$PRIVATE_DNS_ZONE_GROUP_NAME] for the [$PRIVATE_ENDPOINT_NAME] private endpoint successfully created" + else + echo "Failed to create private DNS zone group [$PRIVATE_DNS_ZONE_GROUP_NAME] for the [$PRIVATE_ENDPOINT_NAME] private endpoint" + exit + fi +else + echo "Private DNS zone group [$PRIVATE_DNS_ZONE_GROUP_NAME] for the [$PRIVATE_ENDPOINT_NAME] private endpoint already exists" +fi + +# Create application user [$MYSQL_APP_USER] on the MySQL flexible server +echo "Creating login [$MYSQL_APP_USER] on the [$MYSQL_SERVER_NAME] MySQL flexible server..." +MYSQL_PWD="$MYSQL_ADMIN_PASSWORD" mysql \ + --host="$MYSQL_FQDN" \ + --port="$MYSQL_PORT" \ + --user="$MYSQL_ADMIN_USER" \ + --protocol=TCP \ + -e "CREATE USER IF NOT EXISTS '$MYSQL_APP_USER'@'%' IDENTIFIED BY '$MYSQL_APP_PASSWORD'; + GRANT ALL PRIVILEGES ON \`$MYSQL_DATABASE_NAME\`.* TO '$MYSQL_APP_USER'@'%'; + FLUSH PRIVILEGES;" + +if [ $? -eq 0 ]; then + echo "Login [$MYSQL_APP_USER] created successfully" +else + echo "Failed to create login [$MYSQL_APP_USER]" + exit 1 +fi + +# Test connection +echo "Testing connection with user [$MYSQL_APP_USER]..." +MYSQL_PWD="$MYSQL_APP_PASSWORD" mysql \ + --host="$MYSQL_FQDN" \ + --port="$MYSQL_PORT" \ + --user="$MYSQL_APP_USER" \ + --protocol=TCP \ + --database="$MYSQL_DATABASE_NAME" \ + -e "SELECT CURRENT_USER() AS user_name, DATABASE() AS db_name, NOW() AS server_time;" + +if [ $? -eq 0 ]; then + echo "Connection test successful with user [$MYSQL_APP_USER]" +else + echo "Connection test failed with user [$MYSQL_APP_USER]" + exit 1 +fi + +# Create [activities] table +echo "Creating [activities] table in the [$MYSQL_DATABASE_NAME] database..." +MYSQL_PWD="$MYSQL_APP_PASSWORD" mysql \ + --host="$MYSQL_FQDN" \ + --port="$MYSQL_PORT" \ + --user="$MYSQL_APP_USER" \ + --protocol=TCP \ + --database="$MYSQL_DATABASE_NAME" \ + -e "CREATE TABLE IF NOT EXISTS activities ( + id VARCHAR(32) NOT NULL, + username VARCHAR(255) NOT NULL, + activity TEXT NOT NULL, + created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + PRIMARY KEY (id), + INDEX idx_activities_username (username), + INDEX idx_activities_created_at (created_at DESC) + );" + +if [ $? -eq 0 ]; then + echo "[activities] table created successfully" +else + echo "Failed to create [activities] table" + exit 1 +fi + +# Insert sample data +echo "Inserting sample data into [activities] table..." +MYSQL_PWD="$MYSQL_APP_PASSWORD" mysql \ + --host="$MYSQL_FQDN" \ + --port="$MYSQL_PORT" \ + --user="$MYSQL_APP_USER" \ + --protocol=TCP \ + --database="$MYSQL_DATABASE_NAME" \ + -e "INSERT IGNORE INTO activities (id, username, activity) VALUES + (MD5('paolo_pisa_seed'), 'paolo', 'Visit the Leaning Tower in Pisa'), + (MD5('paolo_volterra_seed'), 'paolo', 'Explore Etruscan walls in Volterra'), + (MD5('paolo_san_gimignano_seed'), 'paolo', 'Climb Torre Grossa in San Gimignano'), + (MD5('paolo_siena_seed'), 'paolo', 'Walk across Piazza del Campo in Siena'), + (MD5('paolo_montalcino_seed'), 'paolo', 'Taste Brunello wine in Montalcino'), + (MD5('paolo_pienza_seed'), 'paolo', 'Sample Pecorino cheese in Pienza'), + (MD5('paolo_florence_seed'), 'paolo', 'Admire Michelangelo''s David in Florence'), + (MD5('paolo_viareggio_beach_seed'), 'paolo', 'Relax by the beach in Viareggio'), + (MD5('paolo_viareggio_promenade_seed'), 'paolo', 'Stroll along the Viareggio promenade');" + +if [ $? -eq 0 ]; then + echo "Sample data inserted successfully into [activities] table" +else + echo "Failed to insert sample data into [activities] table" + exit 1 +fi + +# Query sample data +echo "Querying sample data from [activities] table..." +MYSQL_PWD="$MYSQL_APP_PASSWORD" mysql \ + --host="$MYSQL_FQDN" \ + --port="$MYSQL_PORT" \ + --user="$MYSQL_APP_USER" \ + --protocol=TCP \ + --database="$MYSQL_DATABASE_NAME" \ + -e "SELECT * FROM activities;" + +if [ $? -eq 0 ]; then + echo "Sample data queried successfully from [activities] table" +else + echo "Failed to query sample data from [activities] table" + exit 1 +fi + +# Create app service plan +echo "Creating app service plan [$APP_SERVICE_PLAN_NAME]..." +az appservice plan create \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --name "$APP_SERVICE_PLAN_NAME" \ + --location "$LOCATION" \ + --sku "$APP_SERVICE_PLAN_SKU" \ + --is-linux \ + --tags environment=test iac=az-cli \ + --only-show-errors 1>/dev/null + +if [ $? -eq 0 ]; then + echo "app service plan [$APP_SERVICE_PLAN_NAME] created successfully." +else + echo "Failed to create app service plan [$APP_SERVICE_PLAN_NAME]." + exit 1 +fi + +# Get the app service plan resource id +echo "Getting [$APP_SERVICE_PLAN_NAME] app service plan resource id in the [$RESOURCE_GROUP_NAME] resource group..." +APP_SERVICE_PLAN_ID=$(az appservice plan show \ + --name "$APP_SERVICE_PLAN_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --query id \ + --output tsv \ + --only-show-errors) + +if [[ -n $APP_SERVICE_PLAN_ID ]]; then + echo "[$APP_SERVICE_PLAN_NAME] app service plan resource id retrieved successfully: $APP_SERVICE_PLAN_ID" +else + echo "Failed to retrieve [$APP_SERVICE_PLAN_NAME] app service plan resource id in the [$RESOURCE_GROUP_NAME] resource group" + exit 1 +fi + +# Create the web app +echo "Creating web app [$WEB_APP_NAME]..." +az webapp create \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --plan "$APP_SERVICE_PLAN_NAME" \ + --name "$WEB_APP_NAME" \ + --runtime "$RUNTIME:$RUNTIME_VERSION" \ + --vnet "$VIRTUAL_NETWORK_NAME" \ + --subnet "$WEB_APP_SUBNET_NAME" \ + --tags environment=test iac=az-cli \ + --only-show-errors 1>/dev/null + +if [ $? -eq 0 ]; then + echo "Web app [$WEB_APP_NAME] created successfully." +else + echo "Failed to create web app [$WEB_APP_NAME]." + exit 1 +fi + +# Get the web app resource id +echo "Getting [$WEB_APP_NAME] web app resource id in the [$RESOURCE_GROUP_NAME] resource group..." +WEB_APP_ID=$(az webapp show \ + --name "$WEB_APP_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --query id \ + --output tsv \ + --only-show-errors) + +if [[ -n $WEB_APP_ID ]]; then + echo "[$WEB_APP_NAME] web app resource id retrieved successfully: $WEB_APP_ID" +else + echo "Failed to retrieve [$WEB_APP_NAME] web app resource id in the [$RESOURCE_GROUP_NAME] resource group" + exit 1 +fi + +# Enabling forced tunneling for web app [$WEB_APP_NAME] to route all outbound traffic through the virtual network... +echo "Enabling forced tunneling for web app [$WEB_APP_NAME] to route all outbound traffic through the virtual network..." + +az resource update \ + --ids "$WEB_APP_ID" \ + --set properties.outboundVnetRouting.allTraffic=true \ + --only-show-errors 1>/dev/null + +if [ $? -eq 0 ]; then + echo "Forced tunneling enabled for web app [$WEB_APP_NAME]." +else + echo "Failed to enable forced tunneling for web app [$WEB_APP_NAME]." + exit 1 +fi + +# Set web app settings +echo "Setting web app settings for [$WEB_APP_NAME]..." +az webapp config appsettings set \ + --name $WEB_APP_NAME \ + --resource-group $RESOURCE_GROUP_NAME \ + --settings \ + SCM_DO_BUILD_DURING_DEPLOYMENT='true' \ + ENABLE_ORYX_BUILD='true' \ + MYSQL_HOST="$MYSQL_FQDN" \ + MYSQL_PORT="$MYSQL_PORT" \ + MYSQL_USER="$MYSQL_APP_USER" \ + MYSQL_PASSWORD="$MYSQL_APP_PASSWORD" \ + MYSQL_DATABASE="$MYSQL_DATABASE_NAME" \ + LOGIN_NAME="$LOGIN_NAME" \ + WEBSITES_PORT="8000" \ + --only-show-errors 1>/dev/null + +if [ $? -eq 0 ]; then + echo "Web app settings for [$WEB_APP_NAME] set successfully." +else + echo "Failed to set web app settings for [$WEB_APP_NAME]." + exit 1 +fi + +# Check if the log analytics workspace already exists +echo "Checking if [$LOG_ANALYTICS_NAME] Log Analytics workspace already exists in the [$RESOURCE_GROUP_NAME] resource group..." +az monitor log-analytics workspace show \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --workspace-name "$LOG_ANALYTICS_NAME" \ + --only-show-errors &>/dev/null + +if [[ $? != 0 ]]; then + echo "No [$LOG_ANALYTICS_NAME] Log Analytics workspace actually exists in the [$RESOURCE_GROUP_NAME] resource group" + echo "Creating [$LOG_ANALYTICS_NAME] Log Analytics workspace in the [$RESOURCE_GROUP_NAME] resource group..." + + # Create the Log Analytics workspace + az monitor log-analytics workspace create \ + --name "$LOG_ANALYTICS_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --location "$LOCATION" \ + --query-access "Enabled" \ + --retention-time 30 \ + --sku "PerNode" \ + --tags environment=test iac=az-cli \ + --only-show-errors 1>/dev/null + + if [[ $? == 0 ]]; then + echo "[$LOG_ANALYTICS_NAME] Log Analytics workspace successfully created in the [$RESOURCE_GROUP_NAME] resource group" + else + echo "Failed to create [$LOG_ANALYTICS_NAME] Log Analytics workspace in the [$RESOURCE_GROUP_NAME] resource group" + exit 1 + fi +else + echo "[$LOG_ANALYTICS_NAME] Log Analytics workspace already exists in the [$RESOURCE_GROUP_NAME] resource group" +fi + +# Check whether the diagnostic settings for the web app already exist +echo "Checking if [$DIAGNOSTIC_SETTINGS_NAME] diagnostic settings for the [$WEB_APP_NAME] web app already exist..." +az monitor diagnostic-settings show \ + --name "$DIAGNOSTIC_SETTINGS_NAME" \ + --resource "$WEB_APP_ID" \ + --only-show-errors &>/dev/null + +if [[ $? != 0 ]]; then + echo "No [$DIAGNOSTIC_SETTINGS_NAME] diagnostic settings for the [$WEB_APP_NAME] web app actually exist" + echo "Creating [$DIAGNOSTIC_SETTINGS_NAME] diagnostic settings for the [$WEB_APP_NAME] web app..." + + # Create the diagnostic settings for the web app to send logs to the Log Analytics workspace + az monitor diagnostic-settings create \ + --name "$DIAGNOSTIC_SETTINGS_NAME" \ + --resource "$WEB_APP_ID" \ + --workspace "$LOG_ANALYTICS_NAME" \ + --logs '[ + {"category": "AppServiceHTTPLogs", "enabled": true}, + {"category": "AppServiceConsoleLogs", "enabled": true}, + {"category": "AppServiceAppLogs", "enabled": true}, + {"category": "AppServiceAuditLogs", "enabled": true}, + {"category": "AppServiceIPSecAuditLogs", "enabled": true}, + {"category": "AppServicePlatformLogs", "enabled": true}, + {"category": "AppServiceAuthenticationLogs", "enabled": true} + ]' \ + --metrics '[ + {"category": "AllMetrics", "enabled": true} + ]' \ + --only-show-errors 1>/dev/null + + + if [[ $? == 0 ]]; then + echo "[$DIAGNOSTIC_SETTINGS_NAME] diagnostic settings for the [$WEB_APP_NAME] web app successfully created" + else + echo "Failed to create [$DIAGNOSTIC_SETTINGS_NAME] diagnostic settings for the [$WEB_APP_NAME] web app" + exit 1 + fi +else + echo "[$DIAGNOSTIC_SETTINGS_NAME] diagnostic settings for the [$WEB_APP_NAME] web app already exist" +fi + +# Check whether the diagnostic settings for the app service plan already exist +echo "Checking if [$DIAGNOSTIC_SETTINGS_NAME] diagnostic settings for the [$APP_SERVICE_PLAN_NAME] app service plan already exist..." +az monitor diagnostic-settings show \ + --name "$DIAGNOSTIC_SETTINGS_NAME" \ + --resource "$APP_SERVICE_PLAN_ID" \ + --only-show-errors &>/dev/null + +if [[ $? != 0 ]]; then + echo "No [$DIAGNOSTIC_SETTINGS_NAME] diagnostic settings for the [$APP_SERVICE_PLAN_NAME] app service plan actually exist" + echo "Creating [$DIAGNOSTIC_SETTINGS_NAME] diagnostic settings for the [$APP_SERVICE_PLAN_NAME] app service plan..." + + # Create the diagnostic settings for the app service plan to send logs to the Log Analytics workspace + az monitor diagnostic-settings create \ + --name "$DIAGNOSTIC_SETTINGS_NAME" \ + --resource "$APP_SERVICE_PLAN_ID" \ + --workspace "$LOG_ANALYTICS_NAME" \ + --metrics '[ + {"category": "AllMetrics", "enabled": true} + ]' \ + --only-show-errors 1>/dev/null + + if [[ $? == 0 ]]; then + echo "[$DIAGNOSTIC_SETTINGS_NAME] diagnostic settings for the [$APP_SERVICE_PLAN_NAME] app service plan successfully created" + else + echo "Failed to create [$DIAGNOSTIC_SETTINGS_NAME] diagnostic settings for the [$APP_SERVICE_PLAN_NAME] app service plan" + exit 1 + fi +else + echo "[$DIAGNOSTIC_SETTINGS_NAME] diagnostic settings for the [$APP_SERVICE_PLAN_NAME] app service plan already exist" +fi + +# Check whether the diagnostic settings for the MySQL flexible server already exist +echo "Checking if [$DIAGNOSTIC_SETTINGS_NAME] diagnostic settings for the [$MYSQL_SERVER_NAME] MySQL flexible server already exist..." +az monitor diagnostic-settings show \ + --name "$DIAGNOSTIC_SETTINGS_NAME" \ + --resource "$MYSQL_SERVER_ID" \ + --only-show-errors &>/dev/null + +if [[ $? != 0 ]]; then + echo "No [$DIAGNOSTIC_SETTINGS_NAME] diagnostic settings for the [$MYSQL_SERVER_NAME] MySQL flexible server actually exist" + echo "Creating [$DIAGNOSTIC_SETTINGS_NAME] diagnostic settings for the [$MYSQL_SERVER_NAME] MySQL flexible server..." + + # Create the diagnostic settings for the MySQL flexible server to send logs to the Log Analytics workspace + az monitor diagnostic-settings create \ + --name "$DIAGNOSTIC_SETTINGS_NAME" \ + --resource "$MYSQL_SERVER_ID" \ + --workspace "$LOG_ANALYTICS_NAME" \ + --logs '[ + {"category": "MySqlSlowLogs", "enabled": true}, + {"category": "MySqlAuditLogs", "enabled": true} + ]' \ + --metrics '[ + {"category": "AllMetrics", "enabled": true} + ]' \ + --only-show-errors 1>/dev/null + + if [[ $? == 0 ]]; then + echo "[$DIAGNOSTIC_SETTINGS_NAME] diagnostic settings for the [$MYSQL_SERVER_NAME] MySQL flexible server successfully created" + else + echo "Failed to create [$DIAGNOSTIC_SETTINGS_NAME] diagnostic settings for the [$MYSQL_SERVER_NAME] MySQL flexible server" + exit 1 + fi +else + echo "[$DIAGNOSTIC_SETTINGS_NAME] diagnostic settings for the [$MYSQL_SERVER_NAME] MySQL flexible server already exist" +fi + +# Check whether the diagnostic settings for the virtual network already exist +echo "Checking if [$DIAGNOSTIC_SETTINGS_NAME] diagnostic settings for the [$VIRTUAL_NETWORK_NAME] virtual network already exist..." +az monitor diagnostic-settings show \ + --name "$DIAGNOSTIC_SETTINGS_NAME" \ + --resource "$VIRTUAL_NETWORK_ID" \ + --only-show-errors &>/dev/null + +if [[ $? != 0 ]]; then + echo "No [$DIAGNOSTIC_SETTINGS_NAME] diagnostic settings for the [$VIRTUAL_NETWORK_NAME] virtual network actually exist" + echo "Creating [$DIAGNOSTIC_SETTINGS_NAME] diagnostic settings for the [$VIRTUAL_NETWORK_NAME] virtual network..." + + # Create the diagnostic settings for the virtual network to send logs to the Log Analytics workspace + az monitor diagnostic-settings create \ + --name "$DIAGNOSTIC_SETTINGS_NAME" \ + --resource "$VIRTUAL_NETWORK_ID" \ + --workspace "$LOG_ANALYTICS_NAME" \ + --logs '[ + {"category": "VMProtectionAlerts", "enabled": true} + ]' \ + --metrics '[ + {"category": "AllMetrics", "enabled": true} + ]' \ + --only-show-errors 1>/dev/null + + if [[ $? == 0 ]]; then + echo "[$DIAGNOSTIC_SETTINGS_NAME] diagnostic settings for the [$VIRTUAL_NETWORK_NAME] virtual network successfully created" + else + echo "Failed to create [$DIAGNOSTIC_SETTINGS_NAME] diagnostic settings for the [$VIRTUAL_NETWORK_NAME] virtual network" + exit 1 + fi +else + echo "[$DIAGNOSTIC_SETTINGS_NAME] diagnostic settings for the [$VIRTUAL_NETWORK_NAME] virtual network already exist" +fi + +# Check whether the diagnostic settings for the network security group for the web app subnet already exist +echo "Checking if [$DIAGNOSTIC_SETTINGS_NAME] diagnostic settings for the [$WEB_APP_SUBNET_NSG_NAME] network security group for the web app subnet already exist..." +az monitor diagnostic-settings show \ + --name "$DIAGNOSTIC_SETTINGS_NAME" \ + --resource "$WEB_APP_SUBNET_NSG_ID" \ + --only-show-errors &>/dev/null + +if [[ $? != 0 ]]; then + echo "No [$DIAGNOSTIC_SETTINGS_NAME] diagnostic settings for the [$WEB_APP_SUBNET_NSG_NAME] network security group for the web app subnet actually exist" + echo "Creating [$DIAGNOSTIC_SETTINGS_NAME] diagnostic settings for the [$WEB_APP_SUBNET_NSG_NAME] network security group for the web app subnet..." + + # Create the diagnostic settings for the network security group for the web app subnet to send logs to the Log Analytics workspace + az monitor diagnostic-settings create \ + --name "$DIAGNOSTIC_SETTINGS_NAME" \ + --resource "$WEB_APP_SUBNET_NSG_ID" \ + --workspace "$LOG_ANALYTICS_NAME" \ + --logs '[ + {"category": "NetworkSecurityGroupEvent", "enabled": true}, + {"category": "NetworkSecurityGroupRuleCounter", "enabled": true} + ]' \ + --only-show-errors 1>/dev/null + + if [[ $? == 0 ]]; then + echo "[$DIAGNOSTIC_SETTINGS_NAME] diagnostic settings for the [$WEB_APP_SUBNET_NSG_NAME] network security group for the web app subnet successfully created" + else + echo "Failed to create [$DIAGNOSTIC_SETTINGS_NAME] diagnostic settings for the [$WEB_APP_SUBNET_NSG_NAME] network security group for the web app subnet" + exit 1 + fi +else + echo "[$DIAGNOSTIC_SETTINGS_NAME] diagnostic settings for the [$WEB_APP_SUBNET_NSG_NAME] network security group for the web app subnet already exist" +fi + +# Check whether the diagnostic settings for the network security group for the private endpoint subnet already exist +echo "Checking if [$DIAGNOSTIC_SETTINGS_NAME] diagnostic settings for the [$PE_SUBNET_NSG_NAME] network security group for the private endpoint subnet already exist..." +az monitor diagnostic-settings show \ + --name "$DIAGNOSTIC_SETTINGS_NAME" \ + --resource "$PE_SUBNET_NSG_ID" \ + --only-show-errors &>/dev/null + +if [[ $? != 0 ]]; then + echo "No [$DIAGNOSTIC_SETTINGS_NAME] diagnostic settings for the [$PE_SUBNET_NSG_NAME] network security group for the private endpoint subnet actually exist" + echo "Creating [$DIAGNOSTIC_SETTINGS_NAME] diagnostic settings for the [$PE_SUBNET_NSG_NAME] network security group for the private endpoint subnet..." + + # Create the diagnostic settings for the network security group for the private endpoint subnet to send logs to the Log Analytics workspace + az monitor diagnostic-settings create \ + --name "$DIAGNOSTIC_SETTINGS_NAME" \ + --resource "$PE_SUBNET_NSG_ID" \ + --workspace "$LOG_ANALYTICS_NAME" \ + --logs '[ + {"category": "NetworkSecurityGroupEvent", "enabled": true}, + {"category": "NetworkSecurityGroupRuleCounter", "enabled": true} + ]' \ + --only-show-errors 1>/dev/null + + if [[ $? == 0 ]]; then + echo "[$DIAGNOSTIC_SETTINGS_NAME] diagnostic settings for the [$PE_SUBNET_NSG_NAME] network security group for the private endpoint subnet successfully created" + else + echo "Failed to create [$DIAGNOSTIC_SETTINGS_NAME] diagnostic settings for the [$PE_SUBNET_NSG_NAME] network security group for the private endpoint subnet" + exit 1 + fi +else + echo "[$DIAGNOSTIC_SETTINGS_NAME] diagnostic settings for the [$PE_SUBNET_NSG_NAME] network security group for the private endpoint subnet already exist" +fi + +# Change current directory to source folder +cd "../src" || exit + +# Remove any existing zip package of the web app +if [ -f "$ZIPFILE" ]; then + rm "$ZIPFILE" +fi + +# Create the zip package of the web app +echo "Creating zip package of the web app..." +zip -r "$ZIPFILE" app.py database.py gunicorn.conf.py static templates requirements.txt + +# List the contents of the zip package +echo "Contents of the zip package [$ZIPFILE]:" +unzip -l "$ZIPFILE" + +# Deploy the web app +echo "Deploying web app [$WEB_APP_NAME] with zip file [$ZIPFILE]..." +echo "Using standard az webapp deploy command for AzureCloud environment." +az webapp deploy \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --name "$WEB_APP_NAME" \ + --src-path "$ZIPFILE" \ + --type zip \ + --async true 1>/dev/null + +# Remove the zip package of the web app +if [ -f "$ZIPFILE" ]; then + rm "$ZIPFILE" +fi + +# Print the list of resources in the resource group +echo "Listing resources in resource group [$RESOURCE_GROUP_NAME]..." +az resource list --resource-group "$RESOURCE_GROUP_NAME" --output table diff --git a/samples/web-app-mysql-flexible-server/python/scripts/validate.sh b/samples/web-app-mysql-flexible-server/python/scripts/validate.sh new file mode 100755 index 0000000..f6a68a0 --- /dev/null +++ b/samples/web-app-mysql-flexible-server/python/scripts/validate.sh @@ -0,0 +1,134 @@ +#!/bin/bash + +# Variables +PREFIX='local' +SUFFIX='test' +RESOURCE_GROUP_NAME="${PREFIX}-rg" +LOG_ANALYTICS_NAME="${PREFIX}-log-analytics-${SUFFIX}" +WEB_APP_SUBNET_NSG_NAME="${PREFIX}-webapp-subnet-nsg-${SUFFIX}" +PE_SUBNET_NSG_NAME="${PREFIX}-pe-subnet-nsg-${SUFFIX}" +NAT_GATEWAY_NAME="${PREFIX}-nat-gateway-${SUFFIX}" +VIRTUAL_NETWORK_NAME="${PREFIX}-vnet-${SUFFIX}" +PRIVATE_DNS_ZONE_NAME="privatelink.mysql.database.azure.com" +PRIVATE_ENDPOINT_NAME="${PREFIX}-mysql-pe-${SUFFIX}" +APP_SERVICE_PLAN_NAME="${PREFIX}-app-service-plan-${SUFFIX}" +WEB_APP_NAME="${PREFIX}-webapp-${SUFFIX}" +MYSQL_SERVER_NAME="${PREFIX}-mysqlflex-${SUFFIX}" +MYSQL_DATABASE_NAME="PlannerDB" +FIREWALL_RULE_NAME="AllowAllIPs" + +# Check resource group +echo -e "[$RESOURCE_GROUP_NAME] resource group:\n" +az group show \ + --name "$RESOURCE_GROUP_NAME" \ + --output table \ + --only-show-errors + +# Check App Service Plan +echo -e "\n[$APP_SERVICE_PLAN_NAME] app service plan:\n" +az appservice plan show \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --name "$APP_SERVICE_PLAN_NAME" \ + --output table \ + --only-show-errors + +# Check Azure Web App +echo -e "\n[$WEB_APP_NAME] web app:\n" +az webapp show \ + --name "$WEB_APP_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --output table \ + --only-show-errors + +# Check Azure Database for MySQL flexible server +echo -e "\n[$MYSQL_SERVER_NAME] MySQL flexible server:\n" +az mysql flexible-server show \ + --name "$MYSQL_SERVER_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --query '{Name:name,Location:location,ResourceGroup:resourceGroup,State:state,Version:version,FQDN:fullyQualifiedDomainName,PublicNetworkAccess:network.publicNetworkAccess}' \ + --output table \ + --only-show-errors + +# Check MySQL database +echo -e "\n[$MYSQL_DATABASE_NAME] MySQL database:\n" +az mysql flexible-server db show \ + --server-name "$MYSQL_SERVER_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --database-name "$MYSQL_DATABASE_NAME" \ + --query '{Name:name,ResourceGroup:resourceGroup,Charset:charset,Collation:collation}' \ + --output table \ + --only-show-errors + +# Check MySQL firewall rule +echo -e "\n[$FIREWALL_RULE_NAME] MySQL firewall rule:\n" +az mysql flexible-server firewall-rule show \ + --name "$MYSQL_SERVER_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --rule-name "$FIREWALL_RULE_NAME" \ + --output table \ + --only-show-errors + +# Check Log Analytics Workspace +echo -e "\n[$LOG_ANALYTICS_NAME] log analytics workspace:\n" +az monitor log-analytics workspace show \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --workspace-name "$LOG_ANALYTICS_NAME" \ + --query '{Name:name,Location:location,ResourceGroup:resourceGroup}' \ + --output table \ + --only-show-errors + +# Check NAT Gateway +echo -e "\n[$NAT_GATEWAY_NAME] nat gateway:\n" +az network nat gateway show \ + --name "$NAT_GATEWAY_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --output table \ + --only-show-errors + +# Check Virtual Network +echo -e "\n[$VIRTUAL_NETWORK_NAME] virtual network:\n" +az network vnet show \ + --name "$VIRTUAL_NETWORK_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --output table \ + --only-show-errors + +# Check Private DNS Zone +echo -e "\n[$PRIVATE_DNS_ZONE_NAME] private dns zone:\n" +az network private-dns zone show \ + --name "$PRIVATE_DNS_ZONE_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --query '{Name:name,ResourceGroup:resourceGroup,RecordSets:recordSets,VirtualNetworkLinks:virtualNetworkLinks}' \ + --output table \ + --only-show-errors + +# Check Private Endpoint +echo -e "\n[$PRIVATE_ENDPOINT_NAME] private endpoint:\n" +az network private-endpoint show \ + --name "$PRIVATE_ENDPOINT_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --output table \ + --only-show-errors + +# Check Web App Subnet NSG +echo -e "\n[$WEB_APP_SUBNET_NSG_NAME] network security group:\n" +az network nsg show \ + --name "$WEB_APP_SUBNET_NSG_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --output table \ + --only-show-errors + +# Check Private Endpoint Subnet NSG +echo -e "\n[$PE_SUBNET_NSG_NAME] network security group:\n" +az network nsg show \ + --name "$PE_SUBNET_NSG_NAME" \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --output table \ + --only-show-errors + +# List resources +echo -e "\n[$RESOURCE_GROUP_NAME] all resources:\n" +az resource list \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --output table \ + --only-show-errors diff --git a/samples/web-app-mysql-flexible-server/python/src/app.py b/samples/web-app-mysql-flexible-server/python/src/app.py new file mode 100644 index 0000000..12b231b --- /dev/null +++ b/samples/web-app-mysql-flexible-server/python/src/app.py @@ -0,0 +1,94 @@ +"""Flask application for managing vacation activities backed by MySQL.""" +import datetime +import hashlib +import logging +import os +from typing import List, Tuple + +from flask import Flask, flash, redirect, render_template, request, url_for + +from database import MySQLClient + +app: Flask = Flask(__name__) +app.secret_key = os.environ.get("SECRET_KEY", os.urandom(24)) + +logging.basicConfig( + level=logging.INFO, + format="%(asctime)s - %(name)s - %(levelname)s - %(message)s", +) +logging.getLogger("urllib3").setLevel(logging.WARNING) +logging.getLogger("werkzeug").setLevel(logging.INFO) +logger = logging.getLogger(__name__) +logger.setLevel(logging.INFO) + + +def make_activity_id(username: str, activity: str) -> str: + """MD5 of username + activity + timestamp — preserves the source sample's ID scheme.""" + timestamp = datetime.datetime.now().isoformat() + return hashlib.md5(f"{username}_{activity}_{timestamp}".encode()).hexdigest() + + +db_client: MySQLClient = MySQLClient.from_env() +db_client.init_schema() + +username = os.environ.get("LOGIN_NAME", "paolo") +if not username or not username.strip(): + raise ValueError("LOGIN_NAME cannot be empty") + +activities: List[Tuple[str, str]] = [] + + +def reload_activities() -> None: + activities.clear() + try: + activities.extend(db_client.list_activities(username)) + except Exception as exc: + logger.error("Failed to load activities: %s", exc) + + +@app.route("/", methods=["GET", "POST"]) +def index(): + if request.method == "POST": + activity = request.form.get("activity") + if activity: + try: + row_id = request.form.get("row_id") + if row_id: + if not row_id.strip(): + raise ValueError("Row ID cannot be empty") + if db_client.update_activity(row_id, activity): + logger.info("Activity updated: %s", row_id) + flash("Activity updated!") + else: + activity_id = make_activity_id(username, activity) + db_client.insert_activity(activity_id, username, activity) + logger.info("Activity added: %s", activity) + flash("Activity added!") + except (ConnectionError, ValueError) as e: + logger.error("Error writing activity: %s", e) + + return redirect(url_for("index")) + + reload_activities() + return render_template("index.html", activities=activities, username=username) + + +@app.route("/favicon.ico") +def favicon(): + return app.send_static_file("favicon.ico") + + +@app.route("/delete/", methods=["POST"]) +def delete(activity_id: int): + if 0 <= activity_id < len(activities): + db_client.delete_activity(activities[activity_id][0]) + flash("Activity deleted.") + return redirect(url_for("index")) + + +debug = os.environ.get("DEBUG", "false").lower() == "true" + +reload_activities() + +if __name__ == "__main__": + app.run(debug=debug) diff --git a/samples/web-app-mysql-flexible-server/python/src/database.py b/samples/web-app-mysql-flexible-server/python/src/database.py new file mode 100644 index 0000000..1a44d9c --- /dev/null +++ b/samples/web-app-mysql-flexible-server/python/src/database.py @@ -0,0 +1,163 @@ +"""MySQL helper for the vacation planner sample. + +Wraps a thin PyMySQL client exposing the same conceptual operations the app needs: + - init_schema() ensure the ``activities`` table exists + - list_activities(username) return [(id, activity_text), ...] for a user + - insert_activity(activity_id, username, activity_text) + - update_activity(activity_id, activity_text) -> int rowcount + - delete_activity(activity_id) -> int rowcount + +Connection is sourced from env vars: MYSQL_HOST, MYSQL_PORT, MYSQL_USER, MYSQL_PASSWORD, +MYSQL_DATABASE. A retry loop is used on startup because the flex server can take a few +seconds to become reachable on the first deploy (especially under LocalStack where the +MySQL container is spun up on first server creation). +""" + +import logging +import os +import time + +import pymysql +from pymysql.err import InterfaceError, OperationalError + +logger = logging.getLogger(__name__) +logger.setLevel(logging.INFO) + + +# Single statement on purpose: PyMySQL's cursor.execute() runs one statement, and MySQL +# has no `CREATE INDEX IF NOT EXISTS`. Declaring the indexes inline keeps the whole DDL +# idempotent — `CREATE TABLE IF NOT EXISTS` is skipped wholesale once the table exists. +# `id` is VARCHAR(32) because the application IDs are MD5 hex digests (32 chars), and MySQL +# cannot use an unbounded TEXT column as a PRIMARY KEY without a prefix length. +_SCHEMA_DDL = """ +CREATE TABLE IF NOT EXISTS activities ( + id VARCHAR(32) NOT NULL, + username VARCHAR(255) NOT NULL, + activity TEXT NOT NULL, + created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + PRIMARY KEY (id), + INDEX idx_activities_username (username), + INDEX idx_activities_created_at (created_at DESC) +) +""" + + +class MySQLClient: + """Light wrapper around PyMySQL with retry-on-startup and per-call connection + management (the sample is low-throughput, so we open a fresh connection per call to + keep the code straightforward — production code would use a pool).""" + + def __init__( + self, + host: str, + port: int, + user: str, + password: str, + database: str, + ) -> None: + self.host = host + self.port = port + self.user = user + self.password = password + self.database = database + + @classmethod + def from_env(cls) -> "MySQLClient": + try: + host = os.environ["MYSQL_HOST"] + port = int(os.environ.get("MYSQL_PORT", "3306")) + user = os.environ["MYSQL_USER"] + password = os.environ["MYSQL_PASSWORD"] + database = os.environ.get("MYSQL_DATABASE", "sampledb") + except KeyError as exc: + raise RuntimeError( + f"Missing required environment variable: {exc.args[0]}. " + "Set MYSQL_HOST, MYSQL_USER, MYSQL_PASSWORD (and optionally MYSQL_PORT, " + "MYSQL_DATABASE)." + ) from exc + return cls(host=host, port=port, user=user, password=password, database=database) + + def _connect(self): + return pymysql.connect( + host=self.host, + port=self.port, + user=self.user, + password=self.password, + database=self.database, + charset="utf8mb4", + connect_timeout=10, + autocommit=False, + ) + + def init_schema(self, retries: int = 30, delay: float = 2.0) -> None: + """Wait for MySQL to accept connections, then create the activities table.""" + last_err: Exception | None = None + for attempt in range(1, retries + 1): + try: + conn = self._connect() + try: + with conn.cursor() as cur: + cur.execute(_SCHEMA_DDL) + conn.commit() + finally: + conn.close() + logger.info("MySQL schema initialized") + return + except (OperationalError, InterfaceError) as exc: + last_err = exc + logger.info("MySQL not ready (attempt %d/%d): %s", attempt, retries, exc) + time.sleep(delay) + raise RuntimeError( + f"MySQL did not become ready after {retries} attempts: {last_err}" + ) + + def list_activities(self, username: str) -> list[tuple[str, str]]: + conn = self._connect() + try: + with conn.cursor() as cur: + cur.execute( + "SELECT id, activity FROM activities WHERE username = %s " + "ORDER BY created_at DESC", + (username,), + ) + return [(row[0], row[1]) for row in cur.fetchall()] + finally: + conn.close() + + def insert_activity(self, activity_id: str, username: str, activity_text: str) -> None: + conn = self._connect() + try: + with conn.cursor() as cur: + cur.execute( + "INSERT IGNORE INTO activities (id, username, activity) " + "VALUES (%s, %s, %s)", + (activity_id, username, activity_text), + ) + conn.commit() + finally: + conn.close() + + def update_activity(self, activity_id: str, activity_text: str) -> int: + conn = self._connect() + try: + with conn.cursor() as cur: + cur.execute( + "UPDATE activities SET activity = %s WHERE id = %s", + (activity_text, activity_id), + ) + rowcount = cur.rowcount + conn.commit() + return rowcount + finally: + conn.close() + + def delete_activity(self, activity_id: str) -> int: + conn = self._connect() + try: + with conn.cursor() as cur: + cur.execute("DELETE FROM activities WHERE id = %s", (activity_id,)) + rowcount = cur.rowcount + conn.commit() + return rowcount + finally: + conn.close() diff --git a/samples/web-app-mysql-flexible-server/python/src/gunicorn.conf.py b/samples/web-app-mysql-flexible-server/python/src/gunicorn.conf.py new file mode 100644 index 0000000..cb87ebc --- /dev/null +++ b/samples/web-app-mysql-flexible-server/python/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-mysql-flexible-server/python/src/requirements.txt b/samples/web-app-mysql-flexible-server/python/src/requirements.txt new file mode 100644 index 0000000..b48a834 --- /dev/null +++ b/samples/web-app-mysql-flexible-server/python/src/requirements.txt @@ -0,0 +1,4 @@ +Flask==3.1.3 +PyMySQL==1.1.1 +gunicorn==26.0.0 +python-dotenv==1.2.2 diff --git a/samples/web-app-mysql-flexible-server/python/src/static/bootstrap/css/bootstrap-grid.css b/samples/web-app-mysql-flexible-server/python/src/static/bootstrap/css/bootstrap-grid.css new file mode 100644 index 0000000..228f23b --- /dev/null +++ b/samples/web-app-mysql-flexible-server/python/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-mysql-flexible-server/python/src/static/bootstrap/css/bootstrap-grid.css.map b/samples/web-app-mysql-flexible-server/python/src/static/bootstrap/css/bootstrap-grid.css.map new file mode 100644 index 0000000..6bcd85c --- /dev/null +++ b/samples/web-app-mysql-flexible-server/python/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-mysql-flexible-server/python/src/static/bootstrap/css/bootstrap-grid.min.css b/samples/web-app-mysql-flexible-server/python/src/static/bootstrap/css/bootstrap-grid.min.css new file mode 100644 index 0000000..16649a6 --- /dev/null +++ b/samples/web-app-mysql-flexible-server/python/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-mysql-flexible-server/python/src/static/bootstrap/css/bootstrap-grid.min.css.map b/samples/web-app-mysql-flexible-server/python/src/static/bootstrap/css/bootstrap-grid.min.css.map new file mode 100644 index 0000000..1e0621c --- /dev/null +++ b/samples/web-app-mysql-flexible-server/python/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-mysql-flexible-server/python/src/static/bootstrap/css/bootstrap-grid.rtl.css b/samples/web-app-mysql-flexible-server/python/src/static/bootstrap/css/bootstrap-grid.rtl.css new file mode 100644 index 0000000..b5b17d7 --- /dev/null +++ b/samples/web-app-mysql-flexible-server/python/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-mysql-flexible-server/python/src/static/bootstrap/css/bootstrap-grid.rtl.css.map b/samples/web-app-mysql-flexible-server/python/src/static/bootstrap/css/bootstrap-grid.rtl.css.map new file mode 100644 index 0000000..d9b546b --- /dev/null +++ b/samples/web-app-mysql-flexible-server/python/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;;EOj1IM;IAOI,oCAAA;EP80IV;;EOr1IM;IAOI,kCAAA;EPk1IV;;EOz1IM;IAOI,yCAAA;EPs1IV;;EO71IM;IAOI,wCAAA;EP01IV;;EOj2IM;IAOI,wCAAA;EP81IV;;EOr2IM;IAOI,kCAAA;EPk2IV;;EOz2IM;IAOI,gCAAA;EPs2IV;;EO72IM;IAOI,8BAAA;EP02IV;;EOj3IM;IAOI,gCAAA;EP82IV;;EOr3IM;IAOI,+BAAA;EPk3IV;;EOz3IM;IAOI,oCAAA;EPs3IV;;EO73IM;IAOI,kCAAA;EP03IV;;EOj4IM;IAOI,gCAAA;EP83IV;;EOr4IM;IAOI,uCAAA;EPk4IV;;EOz4IM;IAOI,sCAAA;EPs4IV;;EO74IM;IAOI,iCAAA;EP04IV;;EOj5IM;IAOI,2BAAA;EP84IV;;EOr5IM;IAOI,iCAAA;EPk5IV;;EOz5IM;IAOI,+BAAA;EPs5IV;;EO75IM;IAOI,6BAAA;EP05IV;;EOj6IM;IAOI,+BAAA;EP85IV;;EOr6IM;IAOI,8BAAA;EPk6IV;;EOz6IM;IAOI,oBAAA;EPs6IV;;EO76IM;IAOI,mBAAA;EP06IV;;EOj7IM;IAOI,mBAAA;EP86IV;;EOr7IM;IAOI,mBAAA;EPk7IV;;EOz7IM;IAOI,mBAAA;EPs7IV;;EO77IM;IAOI,mBAAA;EP07IV;;EOj8IM;IAOI,mBAAA;EP87IV;;EOr8IM;IAOI,mBAAA;EPk8IV;;EOz8IM;IAOI,oBAAA;EPs8IV;;EO78IM;IAOI,0BAAA;EP08IV;;EOj9IM;IAOI,yBAAA;EP88IV;;EOr9IM;IAOI,uBAAA;EPk9IV;;EOz9IM;IAOI,yBAAA;EPs9IV;;EO79IM;IAOI,uBAAA;EP09IV;;EOj+IM;IAOI,uBAAA;EP89IV;;EOr+IM;IAOI,yBAAA;IAAA,0BAAA;EPm+IV;;EO1+IM;IAOI,+BAAA;IAAA,gCAAA;EPw+IV;;EO/+IM;IAOI,8BAAA;IAAA,+BAAA;EP6+IV;;EOp/IM;IAOI,4BAAA;IAAA,6BAAA;EPk/IV;;EOz/IM;IAOI,8BAAA;IAAA,+BAAA;EPu/IV;;EO9/IM;IAOI,4BAAA;IAAA,6BAAA;EP4/IV;;EOngJM;IAOI,4BAAA;IAAA,6BAAA;EPigJV;;EOxgJM;IAOI,wBAAA;IAAA,2BAAA;EPsgJV;;EO7gJM;IAOI,8BAAA;IAAA,iCAAA;EP2gJV;;EOlhJM;IAOI,6BAAA;IAAA,gCAAA;EPghJV;;EOvhJM;IAOI,2BAAA;IAAA,8BAAA;EPqhJV;;EO5hJM;IAOI,6BAAA;IAAA,gCAAA;EP0hJV;;EOjiJM;IAOI,2BAAA;IAAA,8BAAA;EP+hJV;;EOtiJM;IAOI,2BAAA;IAAA,8BAAA;EPoiJV;;EO3iJM;IAOI,wBAAA;EPwiJV;;EO/iJM;IAOI,8BAAA;EP4iJV;;EOnjJM;IAOI,6BAAA;EPgjJV;;EOvjJM;IAOI,2BAAA;EPojJV;;EO3jJM;IAOI,6BAAA;EPwjJV;;EO/jJM;IAOI,2BAAA;EP4jJV;;EOnkJM;IAOI,2BAAA;EPgkJV;;EOvkJM;IAOI,yBAAA;EPokJV;;EO3kJM;IAOI,+BAAA;EPwkJV;;EO/kJM;IAOI,8BAAA;EP4kJV;;EOnlJM;IAOI,4BAAA;EPglJV;;EOvlJM;IAOI,8BAAA;EPolJV;;EO3lJM;IAOI,4BAAA;EPwlJV;;EO/lJM;IAOI,4BAAA;EP4lJV;;EOnmJM;IAOI,2BAAA;EPgmJV;;EOvmJM;IAOI,iCAAA;EPomJV;;EO3mJM;IAOI,gCAAA;EPwmJV;;EO/mJM;IAOI,8BAAA;EP4mJV;;EOnnJM;IAOI,gCAAA;EPgnJV;;EOvnJM;IAOI,8BAAA;EPonJV;;EO3nJM;IAOI,8BAAA;EPwnJV;;EO/nJM;IAOI,0BAAA;EP4nJV;;EOnoJM;IAOI,gCAAA;EPgoJV;;EOvoJM;IAOI,+BAAA;EPooJV;;EO3oJM;IAOI,6BAAA;EPwoJV;;EO/oJM;IAOI,+BAAA;EP4oJV;;EOnpJM;IAOI,6BAAA;EPgpJV;;EOvpJM;IAOI,6BAAA;EPopJV;;EO3pJM;IAOI,qBAAA;EPwpJV;;EO/pJM;IAOI,2BAAA;EP4pJV;;EOnqJM;IAOI,0BAAA;EPgqJV;;EOvqJM;IAOI,wBAAA;EPoqJV;;EO3qJM;IAOI,0BAAA;EPwqJV;;EO/qJM;IAOI,wBAAA;EP4qJV;;EOnrJM;IAOI,0BAAA;IAAA,2BAAA;EPirJV;;EOxrJM;IAOI,gCAAA;IAAA,iCAAA;EPsrJV;;EO7rJM;IAOI,+BAAA;IAAA,gCAAA;EP2rJV;;EOlsJM;IAOI,6BAAA;IAAA,8BAAA;EPgsJV;;EOvsJM;IAOI,+BAAA;IAAA,gCAAA;EPqsJV;;EO5sJM;IAOI,6BAAA;IAAA,8BAAA;EP0sJV;;EOjtJM;IAOI,yBAAA;IAAA,4BAAA;EP+sJV;;EOttJM;IAOI,+BAAA;IAAA,kCAAA;EPotJV;;EO3tJM;IAOI,8BAAA;IAAA,iCAAA;EPytJV;;EOhuJM;IAOI,4BAAA;IAAA,+BAAA;EP8tJV;;EOruJM;IAOI,8BAAA;IAAA,iCAAA;EPmuJV;;EO1uJM;IAOI,4BAAA;IAAA,+BAAA;EPwuJV;;EO/uJM;IAOI,yBAAA;EP4uJV;;EOnvJM;IAOI,+BAAA;EPgvJV;;EOvvJM;IAOI,8BAAA;EPovJV;;EO3vJM;IAOI,4BAAA;EPwvJV;;EO/vJM;IAOI,8BAAA;EP4vJV;;EOnwJM;IAOI,4BAAA;EPgwJV;;EOvwJM;IAOI,0BAAA;EPowJV;;EO3wJM;IAOI,gCAAA;EPwwJV;;EO/wJM;IAOI,+BAAA;EP4wJV;;EOnxJM;IAOI,6BAAA;EPgxJV;;EOvxJM;IAOI,+BAAA;EPoxJV;;EO3xJM;IAOI,6BAAA;EPwxJV;;EO/xJM;IAOI,4BAAA;EP4xJV;;EOnyJM;IAOI,kCAAA;EPgyJV;;EOvyJM;IAOI,iCAAA;EPoyJV;;EO3yJM;IAOI,+BAAA;EPwyJV;;EO/yJM;IAOI,iCAAA;EP4yJV;;EOnzJM;IAOI,+BAAA;EPgzJV;;EOvzJM;IAOI,2BAAA;EPozJV;;EO3zJM;IAOI,iCAAA;EPwzJV;;EO/zJM;IAOI,gCAAA;EP4zJV;;EOn0JM;IAOI,8BAAA;EPg0JV;;EOv0JM;IAOI,gCAAA;EPo0JV;;EO30JM;IAOI,8BAAA;EPw0JV;AACF;AQz2JA;EDyBQ;IAOI,0BAAA;EP60JV;;EOp1JM;IAOI,gCAAA;EPi1JV;;EOx1JM;IAOI,yBAAA;EPq1JV;;EO51JM;IAOI,wBAAA;EPy1JV;;EOh2JM;IAOI,yBAAA;EP61JV;;EOp2JM;IAOI,6BAAA;EPi2JV;;EOx2JM;IAOI,8BAAA;EPq2JV;;EO52JM;IAOI,wBAAA;EPy2JV;;EOh3JM;IAOI,+BAAA;EP62JV;;EOp3JM;IAOI,wBAAA;EPi3JV;AACF","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-mysql-flexible-server/python/src/static/bootstrap/css/bootstrap-grid.rtl.min.css b/samples/web-app-mysql-flexible-server/python/src/static/bootstrap/css/bootstrap-grid.rtl.min.css new file mode 100644 index 0000000..8ec49c7 --- /dev/null +++ b/samples/web-app-mysql-flexible-server/python/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-mysql-flexible-server/python/src/static/bootstrap/css/bootstrap-grid.rtl.min.css.map b/samples/web-app-mysql-flexible-server/python/src/static/bootstrap/css/bootstrap-grid.rtl.min.css.map new file mode 100644 index 0000000..fbf1d00 --- /dev/null +++ b/samples/web-app-mysql-flexible-server/python/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-mysql-flexible-server/python/src/static/bootstrap/css/bootstrap-reboot.css b/samples/web-app-mysql-flexible-server/python/src/static/bootstrap/css/bootstrap-reboot.css new file mode 100644 index 0000000..1207a17 --- /dev/null +++ b/samples/web-app-mysql-flexible-server/python/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-mysql-flexible-server/python/src/static/bootstrap/css/bootstrap-reboot.css.map b/samples/web-app-mysql-flexible-server/python/src/static/bootstrap/css/bootstrap-reboot.css.map new file mode 100644 index 0000000..71177ef --- /dev/null +++ b/samples/web-app-mysql-flexible-server/python/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-mysql-flexible-server/python/terraform/README.md b/samples/web-app-mysql-flexible-server/python/terraform/README.md new file mode 100644 index 0000000..a486d2d --- /dev/null +++ b/samples/web-app-mysql-flexible-server/python/terraform/README.md @@ -0,0 +1,63 @@ +# Terraform Deployment + +This directory contains Terraform modules and a deployment script for provisioning the sample's Azure resources. For details about the sample application, see [Azure Web App with Azure Database for MySQL flexible server](../README.md). + +## Prerequisites + +- [LocalStack for Azure](https://docs.localstack.cloud/azure/) +- [Terraform](https://developer.hashicorp.com/terraform/downloads) (1.5+) +- [Docker](https://docs.docker.com/get-docker/) +- [Azure CLI](https://learn.microsoft.com/en-us/cli/azure/install-azure-cli) + [Azlocal CLI](https://azure.localstack.cloud/user-guides/sdks/az/) +- [Python 3.12+](https://www.python.org/downloads/) +- [MySQL client (`mysql`)](https://dev.mysql.com/downloads/) +- [`jq`](https://jqlang.org/) + +```bash +pip install azlocal +``` + +## Architecture Overview + +The Terraform configuration provisions: + +1. [Azure Resource Group](https://learn.microsoft.com/en-us/azure/azure-resource-manager/management/manage-resource-groups-cli). +2. [Azure Virtual Network](https://learn.microsoft.com/azure/virtual-network/virtual-networks-overview) with two subnets: + - *app-subnet* (delegated to `Microsoft.Web/serverFarms` for the Web App's VNet integration) + - *pe-subnet* (hosts the Private Endpoint to the flex server) +3. [Azure Private DNS Zone](https://learn.microsoft.com/azure/dns/private-dns-privatednszone) `privatelink.mysql.database.azure.com`, linked to the VNet. +4. [Azure Private Endpoint](https://learn.microsoft.com/azure/private-link/private-endpoint-overview) (group `mysqlServer`). +5. [Azure NAT Gateway](https://learn.microsoft.com/azure/nat-gateway/nat-overview). +6. [Network Security Groups](https://learn.microsoft.com/en-us/azure/virtual-network/network-security-groups-overview): one per subnet. +7. [Azure Log Analytics Workspace](https://learn.microsoft.com/azure/azure-monitor/logs/log-analytics-overview). +8. [Azure Database for MySQL flexible server](https://learn.microsoft.com/en-us/azure/mysql/flexible-server/overview): public-access mode, Burstable `Standard_B1ms`, version 8.0.21, 32 GiB, HA disabled. A permissive firewall rule (`AllowAllIPs`, `0.0.0.0–255.255.255.255`) lets the deploy machine reach the server for the post-apply mysql bootstrap. +9. [MySQL database](https://learn.microsoft.com/en-us/azure/mysql/flexible-server/how-to-create-manage-databases) `PlannerDB`. +10. [Azure App Service Plan](https://learn.microsoft.com/en-us/azure/app-service/overview-hosting-plans). +11. [Azure Web App](https://learn.microsoft.com/en-us/azure/app-service/overview) with regional VNet integration. `MYSQL_HOST` / `MYSQL_PORT` / `MYSQL_DATABASE` are written by Terraform; `MYSQL_USER` and `MYSQL_PASSWORD` are written by `deploy.sh` after the mysql client creates the application user. + +## Provisioning Script + +[`deploy.sh`](deploy.sh) performs: + +- `terraform init -upgrade` +- `terraform plan -out=tfplan` (passing `mysql_admin_password`) +- `terraform apply -auto-approve tfplan` +- Reads outputs (`resource_group_name`, `web_app_name`, `mysql_server_name`, `mysql_fqdn`, `mysql_database_name`). +- Connects to the server as the admin via the public endpoint + firewall rule and creates the `testuser` user, grants privileges, creates the `activities` table, and seeds the rows. +- Sets `MYSQL_USER=testuser` + `MYSQL_PASSWORD=` on the Web App via `az webapp config appsettings set`. +- Zips the source under `../src` and deploys via `az webapp deploy`. + +## Variables + +Override any of the variables in [`variables.tf`](variables.tf) by editing [`terraform.tfvars`](terraform.tfvars) or passing `-var` to `terraform plan`. Notable MySQL ones: + +| Variable | Default | Description | +| ----------------------------- | ----------------- | ---------------------------------------- | +| `mysql_admin_login` | `myadmin` | Server administrator login | +| `mysql_admin_password` | `P@ssw0rd1234!` | Server administrator password (sensitive) | +| `mysql_version` | `8.0.21` | MySQL major version | +| `mysql_sku_name` | `B_Standard_B1ms` | Compute SKU | +| `mysql_storage_size_gb` | `32` | Storage size in GB | +| `mysql_backup_retention_days` | `7` | Backup retention | +| `mysql_database_name` | `PlannerDB` | Application database | + +For non-dev deployments, set `mysql_admin_password` via env var: `MYSQL_ADMIN_PASSWORD=... bash deploy.sh`. diff --git a/samples/web-app-mysql-flexible-server/python/terraform/deploy.sh b/samples/web-app-mysql-flexible-server/python/terraform/deploy.sh new file mode 100755 index 0000000..e8cb87f --- /dev/null +++ b/samples/web-app-mysql-flexible-server/python/terraform/deploy.sh @@ -0,0 +1,220 @@ +#!/bin/bash + +# Variables +PREFIX='local' +SUFFIX='test' +LOCATION='westeurope' +MYSQL_ADMIN_USER="myadmin" +MYSQL_ADMIN_PASSWORD="P@ssw0rd1234!" +MYSQL_APP_USER="testuser" +MYSQL_APP_PASSWORD="TestP@ssw0rd123" +CURRENT_DIR="$(cd "$(dirname "$0")" && pwd)" +ZIPFILE="planner_website.zip" + +# Change the current directory to the script's directory +cd "$CURRENT_DIR" || exit + +# Intialize Terraform +echo "Initializing Terraform..." +terraform init -upgrade + +# Run terraform plan and check for errors +echo "Planning Terraform deployment..." +terraform plan -out=tfplan \ + -var "prefix=$PREFIX" \ + -var "suffix=$SUFFIX" \ + -var "location=$LOCATION" \ + -var "mysql_admin_login=$MYSQL_ADMIN_USER" \ + -var "mysql_admin_password=$MYSQL_ADMIN_PASSWORD" + +if [[ $? != 0 ]]; then + echo "Terraform plan failed. Exiting." + exit 1 +fi + +# Apply the Terraform configuration +echo "Applying Terraform configuration..." +terraform apply -auto-approve tfplan + +if [[ $? != 0 ]]; then + echo "Terraform apply failed. Exiting." + exit 1 +fi + +# Get the output values +RESOURCE_GROUP_NAME=$(terraform output -raw resource_group_name) +WEB_APP_NAME=$(terraform output -raw web_app_name) +MYSQL_SERVER_NAME=$(terraform output -raw mysql_server_name) +MYSQL_FQDN_FULL=$(terraform output -raw mysql_fqdn) +DATABASE_NAME=$(terraform output -raw mysql_database_name) + +if [[ -z "$RESOURCE_GROUP_NAME" || -z "$WEB_APP_NAME" || -z "$MYSQL_SERVER_NAME" ]]; then + echo "Resource Group Name, Web App Name, or MySQL Server Name is empty. Exiting." + exit 1 +fi + +# Split host:port — the LocalStack emulator embeds the dynamically allocated TCP-proxy port +# directly in fullyQualifiedDomainName, mirroring the storage / container registry emulators. +# Real Azure returns just the bare host so MYSQL_PORT defaults to 3306. +MYSQL_FQDN="${MYSQL_FQDN_FULL%%:*}" +if [[ "$MYSQL_FQDN_FULL" == *:* ]]; then + MYSQL_PORT="${MYSQL_FQDN_FULL##*:}" +else + MYSQL_PORT=3306 +fi +echo "MySQL host = $MYSQL_FQDN, port = $MYSQL_PORT" + +# Create application user [$MYSQL_APP_USER] on the MySQL flexible server +echo "Creating login [$MYSQL_APP_USER] on the [$MYSQL_SERVER_NAME] MySQL flexible server..." +MYSQL_PWD="$MYSQL_ADMIN_PASSWORD" mysql \ + --host="$MYSQL_FQDN" \ + --port="$MYSQL_PORT" \ + --user="$MYSQL_ADMIN_USER" \ + --protocol=TCP \ + -e "CREATE USER IF NOT EXISTS '$MYSQL_APP_USER'@'%' IDENTIFIED BY '$MYSQL_APP_PASSWORD'; + GRANT ALL PRIVILEGES ON \`$DATABASE_NAME\`.* TO '$MYSQL_APP_USER'@'%'; + FLUSH PRIVILEGES;" + +if [ $? -eq 0 ]; then + echo "Login [$MYSQL_APP_USER] created successfully" +else + echo "Failed to create login [$MYSQL_APP_USER]" + exit 1 +fi + +# Test connection +echo "Testing connection with user [$MYSQL_APP_USER]..." +MYSQL_PWD="$MYSQL_APP_PASSWORD" mysql \ + --host="$MYSQL_FQDN" \ + --port="$MYSQL_PORT" \ + --user="$MYSQL_APP_USER" \ + --protocol=TCP \ + --database="$DATABASE_NAME" \ + -e "SELECT CURRENT_USER() AS user_name, DATABASE() AS db_name, NOW() AS server_time;" + +if [ $? -eq 0 ]; then + echo "Connection test successful with user [$MYSQL_APP_USER]" +else + echo "Connection test failed with user [$MYSQL_APP_USER]" + exit 1 +fi + +# Create [activities] table +echo "Creating [activities] table in the [$DATABASE_NAME] database..." +MYSQL_PWD="$MYSQL_APP_PASSWORD" mysql \ + --host="$MYSQL_FQDN" \ + --port="$MYSQL_PORT" \ + --user="$MYSQL_APP_USER" \ + --protocol=TCP \ + --database="$DATABASE_NAME" \ + -e "CREATE TABLE IF NOT EXISTS activities ( + id VARCHAR(32) NOT NULL, + username VARCHAR(255) NOT NULL, + activity TEXT NOT NULL, + created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + PRIMARY KEY (id), + INDEX idx_activities_username (username), + INDEX idx_activities_created_at (created_at DESC) + );" + +if [ $? -eq 0 ]; then + echo "[activities] table created successfully" +else + echo "Failed to create [activities] table" + exit 1 +fi + +# Insert sample data +echo "Inserting sample data into [activities] table..." +MYSQL_PWD="$MYSQL_APP_PASSWORD" mysql \ + --host="$MYSQL_FQDN" \ + --port="$MYSQL_PORT" \ + --user="$MYSQL_APP_USER" \ + --protocol=TCP \ + --database="$DATABASE_NAME" \ + -e "INSERT IGNORE INTO activities (id, username, activity) VALUES + (MD5('paolo_pisa_seed'), 'paolo', 'Visit the Leaning Tower in Pisa'), + (MD5('paolo_volterra_seed'), 'paolo', 'Explore Etruscan walls in Volterra'), + (MD5('paolo_san_gimignano_seed'), 'paolo', 'Climb Torre Grossa in San Gimignano'), + (MD5('paolo_siena_seed'), 'paolo', 'Walk across Piazza del Campo in Siena'), + (MD5('paolo_montalcino_seed'), 'paolo', 'Taste Brunello wine in Montalcino'), + (MD5('paolo_pienza_seed'), 'paolo', 'Sample Pecorino cheese in Pienza'), + (MD5('paolo_florence_seed'), 'paolo', 'Admire Michelangelo''s David in Florence'), + (MD5('paolo_viareggio_beach_seed'), 'paolo', 'Relax by the beach in Viareggio'), + (MD5('paolo_viareggio_promenade_seed'), 'paolo', 'Stroll along the Viareggio promenade');" + +if [ $? -eq 0 ]; then + echo "Sample data inserted successfully into [activities] table" +else + echo "Failed to insert sample data into [activities] table" + exit 1 +fi + +# Query sample data +echo "Querying sample data from [activities] table..." +MYSQL_PWD="$MYSQL_APP_PASSWORD" mysql \ + --host="$MYSQL_FQDN" \ + --port="$MYSQL_PORT" \ + --user="$MYSQL_APP_USER" \ + --protocol=TCP \ + --database="$DATABASE_NAME" \ + -e "SELECT * FROM activities;" + +if [ $? -eq 0 ]; then + echo "Sample data queried successfully from [activities] table" +else + echo "Failed to query sample data from [activities] table" + exit 1 +fi + +# Set MYSQL_USER + MYSQL_PASSWORD on the web app to point at the application user +echo "Setting MYSQL_USER=[$MYSQL_APP_USER] and MYSQL_PASSWORD on the [$WEB_APP_NAME] web app..." +az webapp config appsettings set \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --name "$WEB_APP_NAME" \ + --settings MYSQL_USER="$MYSQL_APP_USER" MYSQL_PASSWORD="$MYSQL_APP_PASSWORD" \ + --only-show-errors 1>/dev/null + +if [ $? -eq 0 ]; then + echo "MYSQL_USER and MYSQL_PASSWORD set successfully on the [$WEB_APP_NAME] web app" +else + echo "Failed to set MYSQL_USER and MYSQL_PASSWORD on the [$WEB_APP_NAME] web app" + exit 1 +fi + +# Print the application settings of the web app +echo "Retrieving application settings for web app [$WEB_APP_NAME]..." +az webapp config appsettings list \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --name "$WEB_APP_NAME" + +# Change current directory to source folder +cd "../src" || exit + +# Remove any existing zip package of the web app +if [ -f "$ZIPFILE" ]; then + rm "$ZIPFILE" +fi + +# Create the zip package of the web app +echo "Creating zip package of the web app..." +zip -r "$ZIPFILE" app.py database.py gunicorn.conf.py static templates requirements.txt + +# Deploy the web app +# Deploy the web app +echo "Deploying web app [$WEB_APP_NAME] with zip file [$ZIPFILE]..." +az webapp deploy \ + --resource-group "$RESOURCE_GROUP_NAME" \ + --name "$WEB_APP_NAME" \ + --src-path "$ZIPFILE" \ + --type zip \ + --async true 1>/dev/null + +# Remove the zip package of the web app +if [ -f "$ZIPFILE" ]; then + rm "$ZIPFILE" +fi + +# Print the list of resources in the resource group +echo "Listing resources in resource group [$RESOURCE_GROUP_NAME]..." +az resource list --resource-group "$RESOURCE_GROUP_NAME" --output table diff --git a/samples/web-app-mysql-flexible-server/python/terraform/main.tf b/samples/web-app-mysql-flexible-server/python/terraform/main.tf new file mode 100644 index 0000000..5adb26c --- /dev/null +++ b/samples/web-app-mysql-flexible-server/python/terraform/main.tf @@ -0,0 +1,198 @@ +locals { + prefix = lower(var.prefix) + suffix = lower(var.suffix) + resource_group_name = "${var.prefix}-rg" + log_analytics_name = "${local.prefix}-log-analytics-${local.suffix}" + virtual_network_name = "${local.prefix}-vnet-${local.suffix}" + nat_gateway_name = "${local.prefix}-nat-gateway-${local.suffix}" + webapp_subnet_nsg_name = "${local.prefix}-webapp-subnet-nsg-${local.suffix}" + pe_subnet_nsg_name = "${local.prefix}-pe-subnet-nsg-${local.suffix}" + mysql_server_name = "${local.prefix}-mysqlflex-${local.suffix}" + private_endpoint_name = "${local.prefix}-mysql-pe-${local.suffix}" + app_service_plan_name = "${local.prefix}-app-service-plan-${local.suffix}" + web_app_name = "${local.prefix}-webapp-${local.suffix}" + private_dns_zone_name = "privatelink.mysql.database.azure.com" + + # The MySQL flexible-server emulator embeds the LS-side TCP-proxy port directly in + # `fullyQualifiedDomainName` (e.g. ".mysql.database.localhost.localstack.cloud:4515"). + # Real Azure returns just the bare host on 3306. Split on ":" so the Web App always gets the + # right host + port without any post-apply shell logic. + mysql_fqdn_parts = split(":", module.mysql_flexible_server.fqdn) + mysql_host = local.mysql_fqdn_parts[0] + mysql_port = length(local.mysql_fqdn_parts) > 1 ? local.mysql_fqdn_parts[1] : "3306" +} + +data "azurerm_client_config" "current" {} + +resource "azurerm_resource_group" "example" { + name = local.resource_group_name + location = var.location + tags = var.tags +} + +module "log_analytics_workspace" { + source = "./modules/log_analytics" + name = local.log_analytics_name + location = var.location + resource_group_name = azurerm_resource_group.example.name + tags = var.tags +} + +# VNet with two subnets: +# * app-subnet — delegated to Microsoft.Web/serverFarms for the Web App's regional +# VNet integration. Outbound through the NAT Gateway. +# * pe-subnet — hosts the Private Endpoint to the MySQL flexible server (no +# delegation; standard private-link subnet). +module "virtual_network" { + source = "./modules/virtual_network" + resource_group_name = azurerm_resource_group.example.name + location = var.location + vnet_name = local.virtual_network_name + address_space = var.vnet_address_space + log_analytics_workspace_id = module.log_analytics_workspace.id + tags = var.tags + + subnets = [ + { + name : var.webapp_subnet_name + address_prefixes : var.webapp_subnet_address_prefix + private_endpoint_network_policies : "Enabled" + private_link_service_network_policies_enabled : false + delegation : "Microsoft.Web/serverFarms" + }, + { + name : var.pe_subnet_name + address_prefixes : var.pe_subnet_address_prefix + private_endpoint_network_policies : "Enabled" + private_link_service_network_policies_enabled : false + delegation : null + } + ] +} + +module "webapp_subnet_network_security_group" { + source = "./modules/network_security_group" + name = local.webapp_subnet_nsg_name + resource_group_name = azurerm_resource_group.example.name + location = var.location + log_analytics_workspace_id = module.log_analytics_workspace.id + tags = var.tags + subnet_ids = { + (var.webapp_subnet_name) = module.virtual_network.subnet_ids[var.webapp_subnet_name] + } +} + +module "pe_subnet_network_security_group" { + source = "./modules/network_security_group" + name = local.pe_subnet_nsg_name + resource_group_name = azurerm_resource_group.example.name + location = var.location + log_analytics_workspace_id = module.log_analytics_workspace.id + tags = var.tags + subnet_ids = { + (var.pe_subnet_name) = module.virtual_network.subnet_ids[var.pe_subnet_name] + } +} + +module "nat_gateway" { + source = "./modules/nat_gateway" + name = local.nat_gateway_name + resource_group_name = azurerm_resource_group.example.name + location = var.location + sku_name = var.nat_gateway_sku_name + idle_timeout_in_minutes = var.nat_gateway_idle_timeout_in_minutes + zones = var.nat_gateway_zones + subnet_ids = { + (var.webapp_subnet_name) = module.virtual_network.subnet_ids[var.webapp_subnet_name] + } + tags = var.tags +} + +module "private_dns_zone" { + source = "./modules/private_dns_zone" + name = local.private_dns_zone_name + resource_group_name = azurerm_resource_group.example.name + tags = var.tags + virtual_networks_to_link = { + (module.virtual_network.name) = { + subscription_id = data.azurerm_client_config.current.subscription_id + resource_group_name = azurerm_resource_group.example.name + } + } +} + +module "mysql_flexible_server" { + source = "./modules/mysql_flexible_server" + name = local.mysql_server_name + resource_group_name = azurerm_resource_group.example.name + location = azurerm_resource_group.example.location + administrator_login = var.mysql_admin_login + administrator_password = var.mysql_admin_password + mysql_version = var.mysql_version + sku_name = var.mysql_sku_name + storage_size_gb = var.mysql_storage_size_gb + backup_retention_days = var.mysql_backup_retention_days + database_name = var.mysql_database_name + log_analytics_workspace_id = module.log_analytics_workspace.id + tags = var.tags +} + +module "private_endpoint" { + source = "./modules/private_endpoint" + name = local.private_endpoint_name + location = var.location + resource_group_name = azurerm_resource_group.example.name + subnet_id = module.virtual_network.subnet_ids[var.pe_subnet_name] + tags = var.tags + private_connection_resource_id = module.mysql_flexible_server.id + is_manual_connection = false + subresource_name = "mysqlServer" + private_dns_zone_group_name = "private-dns-zone-group" + private_dns_zone_group_ids = [module.private_dns_zone.id] +} + +module "app_service_plan" { + source = "./modules/app_service_plan" + name = local.app_service_plan_name + resource_group_name = azurerm_resource_group.example.name + location = azurerm_resource_group.example.location + sku_name = var.sku_name + os_type = var.os_type + zone_balancing_enabled = var.zone_balancing_enabled + log_analytics_workspace_id = module.log_analytics_workspace.id + tags = var.tags +} + +# Note: MYSQL_USER and MYSQL_PASSWORD are intentionally NOT set here. The post-apply step in +# deploy.sh connects to the server (via the firewall-allowed public endpoint) as the admin, +# creates the application user `testuser`, seeds the schema, and then writes `MYSQL_USER` / +# `MYSQL_PASSWORD` onto this Web App via `az webapp config appsettings set`. The server-admin +# login is never exposed to the Web App at runtime. +module "web_app" { + source = "./modules/web_app" + name = local.web_app_name + resource_group_name = azurerm_resource_group.example.name + location = azurerm_resource_group.example.location + service_plan_id = module.app_service_plan.id + https_only = var.https_only + virtual_network_subnet_id = module.virtual_network.subnet_ids[var.webapp_subnet_name] + vnet_route_all_enabled = true + public_network_access_enabled = var.public_network_access_enabled + always_on = var.always_on + http2_enabled = var.http2_enabled + minimum_tls_version = var.minimum_tls_version + python_version = var.python_version + repo_url = var.repo_url + log_analytics_workspace_id = module.log_analytics_workspace.id + tags = var.tags + + app_settings = { + SCM_DO_BUILD_DURING_DEPLOYMENT = "true" + ENABLE_ORYX_BUILD = "true" + MYSQL_HOST = local.mysql_host + MYSQL_PORT = local.mysql_port + MYSQL_DATABASE = module.mysql_flexible_server.database_name + LOGIN_NAME = var.login_name + WEBSITES_PORT = var.websites_port + } +} diff --git a/samples/web-app-mysql-flexible-server/python/terraform/modules/app_service_plan/main.tf b/samples/web-app-mysql-flexible-server/python/terraform/modules/app_service_plan/main.tf new file mode 100644 index 0000000..98a3e4d --- /dev/null +++ b/samples/web-app-mysql-flexible-server/python/terraform/modules/app_service_plan/main.tf @@ -0,0 +1,25 @@ +resource "azurerm_service_plan" "example" { + name = var.name + resource_group_name = var.resource_group_name + location = var.location + sku_name = var.sku_name + os_type = var.os_type + zone_balancing_enabled = var.zone_balancing_enabled + tags = var.tags + + lifecycle { + ignore_changes = [ + tags + ] + } +} + +resource "azurerm_monitor_diagnostic_setting" "example" { + name = "DiagnosticsSettings" + target_resource_id = azurerm_service_plan.example.id + log_analytics_workspace_id = var.log_analytics_workspace_id + + enabled_metric { + category = "AllMetrics" + } +} \ No newline at end of file diff --git a/samples/web-app-mysql-flexible-server/python/terraform/modules/app_service_plan/outputs.tf b/samples/web-app-mysql-flexible-server/python/terraform/modules/app_service_plan/outputs.tf new file mode 100644 index 0000000..f1455ea --- /dev/null +++ b/samples/web-app-mysql-flexible-server/python/terraform/modules/app_service_plan/outputs.tf @@ -0,0 +1,19 @@ +output "id" { + value = azurerm_service_plan.example.id + description = "Specifies the resource id of the App Service Plan" +} + +output "name" { + value = azurerm_service_plan.example.name + description = "Specifies the name of the App Service Plan" +} + +output "location" { + value = azurerm_service_plan.example.location + description = "Specifies the location of the App Service Plan" +} + +output "resource_group_name" { + value = azurerm_service_plan.example.resource_group_name + description = "Specifies the resource group name of the App Service Plan" +} diff --git a/samples/web-app-mysql-flexible-server/python/terraform/modules/app_service_plan/variables.tf b/samples/web-app-mysql-flexible-server/python/terraform/modules/app_service_plan/variables.tf new file mode 100644 index 0000000..e543066 --- /dev/null +++ b/samples/web-app-mysql-flexible-server/python/terraform/modules/app_service_plan/variables.tf @@ -0,0 +1,42 @@ +variable "resource_group_name" { + description = "(Required) Specifies the name of the resource group." + type = string +} + +variable "location" { + description = "(Required) Specifies the location for the App Service Plan." + type = string +} + +variable "name" { + description = "(Required) Specifies the name of the App Service Plan." + type = string +} + +variable "sku_name" { + description = "(Required) Specifies the SKU name for the App Service Plan." + type = string +} + +variable "os_type" { + description = "(Required) Specifies the O/S type for the App Services to be hosted in this plan." + type = string + default = "Linux" +} + +variable "zone_balancing_enabled" { + description = "(Optional) Should the Service Plan balance across Availability Zones in the region." + type = bool + default = false +} + +variable "tags" { + description = "(Optional) Specifies the tags to be applied to the resources." + type = map(any) + default = {} +} + +variable "log_analytics_workspace_id" { + description = "Specifies the resource id of the Azure Log Analytics workspace." + type = string +} \ No newline at end of file diff --git a/samples/web-app-mysql-flexible-server/python/terraform/modules/log_analytics/main.tf b/samples/web-app-mysql-flexible-server/python/terraform/modules/log_analytics/main.tf new file mode 100644 index 0000000..2f88414 --- /dev/null +++ b/samples/web-app-mysql-flexible-server/python/terraform/modules/log_analytics/main.tf @@ -0,0 +1,14 @@ +resource "azurerm_log_analytics_workspace" "example" { + name = var.name + location = var.location + resource_group_name = var.resource_group_name + sku = var.sku + tags = var.tags + retention_in_days = var.retention_in_days != "" ? var.retention_in_days : null + + lifecycle { + ignore_changes = [ + tags + ] + } +} diff --git a/samples/web-app-mysql-flexible-server/python/terraform/modules/log_analytics/output.tf b/samples/web-app-mysql-flexible-server/python/terraform/modules/log_analytics/output.tf new file mode 100644 index 0000000..fe2c398 --- /dev/null +++ b/samples/web-app-mysql-flexible-server/python/terraform/modules/log_analytics/output.tf @@ -0,0 +1,30 @@ +output "id" { + value = azurerm_log_analytics_workspace.example.id + description = "Specifies the resource id of the log analytics workspace" +} + +output "location" { + value = azurerm_log_analytics_workspace.example.location + description = "Specifies the location of the log analytics workspace" +} + +output "name" { + value = azurerm_log_analytics_workspace.example.name + description = "Specifies the name of the log analytics workspace" +} + +output "resource_group_name" { + value = azurerm_log_analytics_workspace.example.resource_group_name + description = "Specifies the name of the resource group that contains the log analytics workspace" +} + +output "workspace_id" { + value = azurerm_log_analytics_workspace.example.workspace_id + description = "Specifies the workspace id of the log analytics workspace" +} + +output "primary_shared_key" { + value = azurerm_log_analytics_workspace.example.primary_shared_key + description = "Specifies the workspace key of the log analytics workspace" + sensitive = true +} diff --git a/samples/web-app-mysql-flexible-server/python/terraform/modules/log_analytics/variables.tf b/samples/web-app-mysql-flexible-server/python/terraform/modules/log_analytics/variables.tf new file mode 100644 index 0000000..2db6a01 --- /dev/null +++ b/samples/web-app-mysql-flexible-server/python/terraform/modules/log_analytics/variables.tf @@ -0,0 +1,37 @@ +variable "resource_group_name" { + description = "(Required) Specifies the name of the resource group." + type = string +} + +variable "location" { + description = "(Required) Specifies the location of the Azure Log Analytics workspace" + type = string +} + +variable "name" { + description = "(Required) Specifies the name of the Azure Log Analytics workspace" + type = string +} + +variable "sku" { + description = "(Optional) Specifies the sku of the Azure Log Analytics workspace" + type = string + default = "PerGB2018" + + validation { + condition = contains(["Free", "Standalone", "PerNode", "PerGB2018"], var.sku) + error_message = "The log analytics sku is incorrect." + } +} + +variable "tags" { + description = "(Optional) Specifies the tags of the Azure Log Analytics workspace." + type = map(any) + default = {} +} + +variable "retention_in_days" { + description = " (Optional) Specifies the workspace data retention in days. Possible values are either 7 (Free Tier only) or range between 30 and 730." + type = number + default = 30 +} diff --git a/samples/web-app-mysql-flexible-server/python/terraform/modules/mysql_flexible_server/main.tf b/samples/web-app-mysql-flexible-server/python/terraform/modules/mysql_flexible_server/main.tf new file mode 100644 index 0000000..c599dab --- /dev/null +++ b/samples/web-app-mysql-flexible-server/python/terraform/modules/mysql_flexible_server/main.tf @@ -0,0 +1,55 @@ +resource "azurerm_mysql_flexible_server" "this" { + name = var.name + resource_group_name = var.resource_group_name + location = var.location + version = var.mysql_version + administrator_login = var.administrator_login + administrator_password = var.administrator_password + sku_name = var.sku_name + backup_retention_days = var.backup_retention_days + # Public access is enabled by default (no delegated_subnet_id / private_dns_zone_id is set), + # and a permissive firewall rule lets the deploy machine reach the server just long enough to + # run the post-deploy mysql bootstrap. The Web App itself reaches the server through a Private + # Endpoint (see the private_endpoint module in main.tf). + geo_redundant_backup_enabled = false + + storage { + size_gb = var.storage_size_gb + } + + tags = var.tags +} + +resource "azurerm_mysql_flexible_database" "this" { + name = var.database_name + resource_group_name = var.resource_group_name + server_name = azurerm_mysql_flexible_server.this.name + charset = var.database_charset + collation = var.database_collation +} + +resource "azurerm_mysql_flexible_server_firewall_rule" "allow_all" { + name = var.firewall_rule_name + resource_group_name = var.resource_group_name + server_name = azurerm_mysql_flexible_server.this.name + start_ip_address = var.firewall_start_ip + end_ip_address = var.firewall_end_ip +} + +resource "azurerm_monitor_diagnostic_setting" "this" { + name = "DiagnosticsSettings" + target_resource_id = azurerm_mysql_flexible_server.this.id + log_analytics_workspace_id = var.log_analytics_workspace_id + + enabled_log { + category = "MySqlSlowLogs" + } + + enabled_log { + category = "MySqlAuditLogs" + } + + enabled_metric { + category = "AllMetrics" + } +} diff --git a/samples/web-app-mysql-flexible-server/python/terraform/modules/mysql_flexible_server/outputs.tf b/samples/web-app-mysql-flexible-server/python/terraform/modules/mysql_flexible_server/outputs.tf new file mode 100644 index 0000000..cda9c03 --- /dev/null +++ b/samples/web-app-mysql-flexible-server/python/terraform/modules/mysql_flexible_server/outputs.tf @@ -0,0 +1,15 @@ +output "id" { + value = azurerm_mysql_flexible_server.this.id +} + +output "name" { + value = azurerm_mysql_flexible_server.this.name +} + +output "fqdn" { + value = azurerm_mysql_flexible_server.this.fqdn +} + +output "database_name" { + value = azurerm_mysql_flexible_database.this.name +} diff --git a/samples/web-app-mysql-flexible-server/python/terraform/modules/mysql_flexible_server/variables.tf b/samples/web-app-mysql-flexible-server/python/terraform/modules/mysql_flexible_server/variables.tf new file mode 100644 index 0000000..4f6bd59 --- /dev/null +++ b/samples/web-app-mysql-flexible-server/python/terraform/modules/mysql_flexible_server/variables.tf @@ -0,0 +1,81 @@ +variable "name" { + description = "Name of the MySQL flexible server." + type = string +} + +variable "resource_group_name" { + type = string +} + +variable "location" { + type = string +} + +variable "administrator_login" { + type = string +} + +variable "administrator_password" { + type = string + sensitive = true +} + +variable "mysql_version" { + type = string + default = "8.0.21" +} + +variable "sku_name" { + type = string + default = "B_Standard_B1ms" +} + +variable "storage_size_gb" { + type = number + default = 32 +} + +variable "backup_retention_days" { + type = number + default = 7 +} + +variable "database_name" { + type = string + default = "PlannerDB" +} + +variable "database_charset" { + type = string + default = "utf8mb4" +} + +variable "database_collation" { + type = string + default = "utf8mb4_unicode_ci" +} + +variable "firewall_rule_name" { + description = "Server-level firewall rule that allows the deploy machine to run the mysql bootstrap." + type = string + default = "AllowAllIPs" +} + +variable "firewall_start_ip" { + type = string + default = "0.0.0.0" +} + +variable "firewall_end_ip" { + type = string + default = "255.255.255.255" +} + +variable "log_analytics_workspace_id" { + type = string +} + +variable "tags" { + type = map(string) + default = {} +} diff --git a/samples/web-app-mysql-flexible-server/python/terraform/modules/nat_gateway/main.tf b/samples/web-app-mysql-flexible-server/python/terraform/modules/nat_gateway/main.tf new file mode 100644 index 0000000..cc384af --- /dev/null +++ b/samples/web-app-mysql-flexible-server/python/terraform/modules/nat_gateway/main.tf @@ -0,0 +1,42 @@ +resource "azurerm_public_ip" "example" { + name = "${var.name}PublicIp" + location = var.location + resource_group_name = var.resource_group_name + allocation_method = "Static" + sku = "Standard" + zones = var.zones + tags = var.tags + + lifecycle { + ignore_changes = [ + tags + ] + } +} + +resource "azurerm_nat_gateway" "example" { + name = var.name + location = var.location + resource_group_name = var.resource_group_name + sku_name = var.sku_name + idle_timeout_in_minutes = var.idle_timeout_in_minutes + zones = var.zones + tags = var.tags + + lifecycle { + ignore_changes = [ + tags + ] + } +} + +resource "azurerm_nat_gateway_public_ip_association" "example" { + nat_gateway_id = azurerm_nat_gateway.example.id + public_ip_address_id = azurerm_public_ip.example.id +} + +resource "azurerm_subnet_nat_gateway_association" "example" { + for_each = var.subnet_ids + subnet_id = each.value + nat_gateway_id = azurerm_nat_gateway.example.id +} diff --git a/samples/web-app-mysql-flexible-server/python/terraform/modules/nat_gateway/output.tf b/samples/web-app-mysql-flexible-server/python/terraform/modules/nat_gateway/output.tf new file mode 100644 index 0000000..1e3fd03 --- /dev/null +++ b/samples/web-app-mysql-flexible-server/python/terraform/modules/nat_gateway/output.tf @@ -0,0 +1,14 @@ +output "name" { + value = azurerm_nat_gateway.example.name + description = "Specifies the name of the Azure NAT Gateway" +} + +output "id" { + value = azurerm_nat_gateway.example.id + description = "Specifies the resource id of the Azure NAT Gateway" +} + +output "public_ip_address" { + value = azurerm_public_ip.example.ip_address + description = "Contains the public IP address of the Azure NAT Gateway." +} diff --git a/samples/web-app-mysql-flexible-server/python/terraform/modules/nat_gateway/variables.tf b/samples/web-app-mysql-flexible-server/python/terraform/modules/nat_gateway/variables.tf new file mode 100644 index 0000000..c1c8ea5 --- /dev/null +++ b/samples/web-app-mysql-flexible-server/python/terraform/modules/nat_gateway/variables.tf @@ -0,0 +1,43 @@ +variable "resource_group_name" { + description = "(Required) Specifies the name of the resource group." + type = string +} + +variable "location" { + description = "(Required) Specifies the location of the Azure NAT Gateway" + type = string +} + +variable "name" { + description = "(Required) Specifies the name of the Azure NAT Gateway" + type = string +} + +variable "tags" { + description = "(Optional) Specifies the tags of the Azure NAT Gateway" + type = map(any) + default = {} +} + +variable "sku_name" { + description = "(Optional) The SKU which should be used. At this time the only supported value is Standard. Defaults to Standard" + type = string + default = "Standard" +} + +variable "idle_timeout_in_minutes" { + description = "(Optional) The idle timeout which should be used in minutes. Defaults to 4." + type = number + default = 4 +} + +variable "zones" { + description = " (Optional) A list of Availability Zones in which this NAT Gateway should be located. Changing this forces a new NAT Gateway to be created." + type = list(string) + default = [] +} + +variable "subnet_ids" { + description = "(Required) A map of subnet ids to associate with the NAT Gateway" + type = map(string) +} \ No newline at end of file diff --git a/samples/web-app-mysql-flexible-server/python/terraform/modules/network_security_group/main.tf b/samples/web-app-mysql-flexible-server/python/terraform/modules/network_security_group/main.tf new file mode 100644 index 0000000..c649652 --- /dev/null +++ b/samples/web-app-mysql-flexible-server/python/terraform/modules/network_security_group/main.tf @@ -0,0 +1,53 @@ +resource "azurerm_network_security_group" "example" { + name = var.name + resource_group_name = var.resource_group_name + location = var.location + tags = var.tags + + dynamic "security_rule" { + for_each = try(var.security_rules, []) + content { + name = try(security_rule.value.name, null) + priority = try(security_rule.value.priority, null) + direction = try(security_rule.value.direction, null) + access = try(security_rule.value.access, null) + protocol = try(security_rule.value.protocol, null) + source_port_range = try(security_rule.value.source_port_range, null) + source_port_ranges = try(security_rule.value.source_port_ranges, null) + destination_port_range = try(security_rule.value.destination_port_range, null) + destination_port_ranges = try(security_rule.value.destination_port_ranges, null) + source_address_prefix = try(security_rule.value.source_address_prefix, null) + source_address_prefixes = try(security_rule.value.source_address_prefixes, null) + destination_address_prefix = try(security_rule.value.destination_address_prefix, null) + destination_address_prefixes = try(security_rule.value.destination_address_prefixes, null) + source_application_security_group_ids = try(security_rule.value.source_application_security_group_ids, null) + destination_application_security_group_ids = try(security_rule.value.destination_application_security_group_ids, null) + } + } + + lifecycle { + ignore_changes = [ + tags + ] + } +} + +resource "azurerm_subnet_network_security_group_association" "example" { + for_each = var.subnet_ids + subnet_id = each.value + network_security_group_id = azurerm_network_security_group.example.id +} + +resource "azurerm_monitor_diagnostic_setting" "settings" { + name = "DiagnosticsSettings" + target_resource_id = azurerm_network_security_group.example.id + log_analytics_workspace_id = var.log_analytics_workspace_id + + enabled_log { + category = "NetworkSecurityGroupEvent" + } + + enabled_log { + category = "NetworkSecurityGroupRuleCounter" + } +} diff --git a/samples/web-app-mysql-flexible-server/python/terraform/modules/network_security_group/outputs.tf b/samples/web-app-mysql-flexible-server/python/terraform/modules/network_security_group/outputs.tf new file mode 100644 index 0000000..b8ca8d5 --- /dev/null +++ b/samples/web-app-mysql-flexible-server/python/terraform/modules/network_security_group/outputs.tf @@ -0,0 +1,9 @@ +output "name" { + description = "Specifies the name of the network security group" + value = azurerm_network_security_group.example.name +} + +output "id" { + description = "Specifies the resource id of the network security group" + value = azurerm_network_security_group.example.id +} diff --git a/samples/web-app-mysql-flexible-server/python/terraform/modules/network_security_group/variables.tf b/samples/web-app-mysql-flexible-server/python/terraform/modules/network_security_group/variables.tf new file mode 100644 index 0000000..04eb07e --- /dev/null +++ b/samples/web-app-mysql-flexible-server/python/terraform/modules/network_security_group/variables.tf @@ -0,0 +1,51 @@ +variable "name" { + description = "(Required) Specifies the name of the Azure Network Security Group" + type = string +} + +variable "resource_group_name" { + description = "(Required) Specifies the name of the resource group. of the Azure Network Security Group" + type = string +} + +variable "location" { + description = "(Required) Specifies the location of the Azure Network Security Group" + type = string +} + +variable "security_rules" { + description = "(Optional) Specifies the security rules of the Azure Network Security Group" + type = list(object({ + name = string + priority = number + direction = string + access = string + protocol = string + source_port_range = string + source_port_ranges = list(string) + destination_port_range = string + destination_port_ranges = list(string) + source_address_prefix = string + source_address_prefixes = list(string) + destination_address_prefix = string + destination_address_prefixes = list(string) + source_application_security_group_ids = list(string) + destination_application_security_group_ids = list(string) + })) + default = [] +} + +variable "subnet_ids" { + description = "(Required) A map of subnet ids to associate with the Azure Network Security Group" + type = map(string) +} + +variable "tags" { + description = "(Optional) Specifies the tags of the Azure Network Security Group" + default = {} +} + +variable "log_analytics_workspace_id" { + description = "Specifies the resource id of the Azure Log Analytics workspace" + type = string +} diff --git a/samples/web-app-mysql-flexible-server/python/terraform/modules/private_dns_zone/main.tf b/samples/web-app-mysql-flexible-server/python/terraform/modules/private_dns_zone/main.tf new file mode 100644 index 0000000..393f9dc --- /dev/null +++ b/samples/web-app-mysql-flexible-server/python/terraform/modules/private_dns_zone/main.tf @@ -0,0 +1,26 @@ +resource "azurerm_private_dns_zone" "example" { + name = var.name + resource_group_name = var.resource_group_name + tags = var.tags + + lifecycle { + ignore_changes = [ + tags + ] + } +} + +resource "azurerm_private_dns_zone_virtual_network_link" "example" { + for_each = var.virtual_networks_to_link + + name = "link_to_${lower(basename(each.key))}" + resource_group_name = var.resource_group_name + private_dns_zone_name = azurerm_private_dns_zone.example.name + virtual_network_id = "/subscriptions/${each.value.subscription_id}/resourceGroups/${each.value.resource_group_name}/providers/Microsoft.Network/virtualNetworks/${each.key}" + + lifecycle { + ignore_changes = [ + tags + ] + } +} diff --git a/samples/web-app-mysql-flexible-server/python/terraform/modules/private_dns_zone/outputs.tf b/samples/web-app-mysql-flexible-server/python/terraform/modules/private_dns_zone/outputs.tf new file mode 100644 index 0000000..ca141f3 --- /dev/null +++ b/samples/web-app-mysql-flexible-server/python/terraform/modules/private_dns_zone/outputs.tf @@ -0,0 +1,9 @@ +output "name" { + description = "Specifies the name of the private dns zone" + value = azurerm_private_dns_zone.example.name +} + +output "id" { + description = "Specifies the resource id of the private dns zone" + value = azurerm_private_dns_zone.example.id +} diff --git a/samples/web-app-mysql-flexible-server/python/terraform/modules/private_dns_zone/variables.tf b/samples/web-app-mysql-flexible-server/python/terraform/modules/private_dns_zone/variables.tf new file mode 100644 index 0000000..8d0c0cc --- /dev/null +++ b/samples/web-app-mysql-flexible-server/python/terraform/modules/private_dns_zone/variables.tf @@ -0,0 +1,20 @@ +variable "name" { + description = "(Required) Specifies the name of the Azure Private DNS Zone" + type = string +} + +variable "resource_group_name" { + description = "(Required) Specifies the name of the resource group. of the Azure Private DNS Zone" + type = string +} + +variable "tags" { + description = "(Optional) Specifies the tags of the Azure Private DNS Zone" + default = {} +} + +variable "virtual_networks_to_link" { + description = "(Optional) Specifies the subscription id, resource group name, and name of the virtual networks to which create a virtual network link" + type = map(any) + default = {} +} diff --git a/samples/web-app-mysql-flexible-server/python/terraform/modules/private_endpoint/main.tf b/samples/web-app-mysql-flexible-server/python/terraform/modules/private_endpoint/main.tf new file mode 100644 index 0000000..62bfbfb --- /dev/null +++ b/samples/web-app-mysql-flexible-server/python/terraform/modules/private_endpoint/main.tf @@ -0,0 +1,26 @@ +resource "azurerm_private_endpoint" "example" { + name = var.name + location = var.location + resource_group_name = var.resource_group_name + subnet_id = var.subnet_id + tags = var.tags + + private_service_connection { + name = "${var.name}Connection" + private_connection_resource_id = var.private_connection_resource_id + is_manual_connection = var.is_manual_connection + subresource_names = try([var.subresource_name], null) + request_message = try(var.request_message, null) + } + + private_dns_zone_group { + name = var.private_dns_zone_group_name + private_dns_zone_ids = var.private_dns_zone_group_ids + } + + lifecycle { + ignore_changes = [ + tags + ] + } +} diff --git a/samples/web-app-mysql-flexible-server/python/terraform/modules/private_endpoint/outputs.tf b/samples/web-app-mysql-flexible-server/python/terraform/modules/private_endpoint/outputs.tf new file mode 100644 index 0000000..367ab51 --- /dev/null +++ b/samples/web-app-mysql-flexible-server/python/terraform/modules/private_endpoint/outputs.tf @@ -0,0 +1,19 @@ +output "name" { + description = "Specifies the name of the private endpoint." + value = azurerm_private_endpoint.example.name +} + +output "id" { + description = "Specifies the resource id of the private endpoint." + value = azurerm_private_endpoint.example.id +} + +output "private_dns_zone_group" { + description = "Specifies the private dns zone group of the private endpoint." + value = azurerm_private_endpoint.example.private_dns_zone_group +} + +output "private_dns_zone_configs" { + description = "Specifies the private dns zone(s) configuration" + value = azurerm_private_endpoint.example.private_dns_zone_configs +} diff --git a/samples/web-app-mysql-flexible-server/python/terraform/modules/private_endpoint/variables.tf b/samples/web-app-mysql-flexible-server/python/terraform/modules/private_endpoint/variables.tf new file mode 100644 index 0000000..2b7a888 --- /dev/null +++ b/samples/web-app-mysql-flexible-server/python/terraform/modules/private_endpoint/variables.tf @@ -0,0 +1,61 @@ +variable "name" { + description = "(Required) Specifies the name of the Azure Private Endpoint. Changing this forces a new resource to be created." + type = string +} + +variable "resource_group_name" { + description = "(Required) The name of the resource group. Changing this forces a new resource to be created." + type = string +} + +variable "private_connection_resource_id" { + description = "(Required) Specifies the resource id of the private link service" + type = string +} + +variable "location" { + description = "(Required) Specifies the supported Azure location where the resource exists. Changing this forces a new resource to be created." + type = string +} + +variable "subnet_id" { + description = "(Required) Specifies the resource id of the subnet" + type = string +} + +variable "is_manual_connection" { + description = "(Optional) Specifies whether the Azure Private Endpoint connection requires manual approval from the remote resource owner." + type = string + default = false +} + +variable "subresource_name" { + description = "(Optional) Specifies a subresource name which the Azure Private Endpoint is able to connect to." + type = string + default = null +} + +variable "request_message" { + description = "(Optional) Specifies a message passed to the owner of the remote resource when the Azure Private Endpoint attempts to establish the connection to the remote resource." + type = string + default = null +} + +variable "private_dns_zone_group_name" { + description = "(Required) Specifies the Name of the Private DNS Zone Group. Changing this forces a new private_dns_zone_group resource to be created." + type = string +} + +variable "private_dns_zone_group_ids" { + description = "(Required) Specifies the list of Private DNS Zones to include within the private_dns_zone_group." + type = list(string) +} + +variable "tags" { + description = "(Optional) Specifies the tags of the Azure Azure Private Endpoint." + default = {} +} + +variable "private_dns" { + default = {} +} diff --git a/samples/web-app-mysql-flexible-server/python/terraform/modules/virtual_network/main.tf b/samples/web-app-mysql-flexible-server/python/terraform/modules/virtual_network/main.tf new file mode 100644 index 0000000..2b7af04 --- /dev/null +++ b/samples/web-app-mysql-flexible-server/python/terraform/modules/virtual_network/main.tf @@ -0,0 +1,58 @@ +resource "azurerm_virtual_network" "example" { + name = var.vnet_name + address_space = var.address_space + location = var.location + resource_group_name = var.resource_group_name + tags = var.tags + + lifecycle { + ignore_changes = [ + tags + ] + } +} + +resource "azurerm_subnet" "example" { + for_each = { for subnet in var.subnets : subnet.name => subnet if subnet != null } + + name = each.key + resource_group_name = var.resource_group_name + virtual_network_name = azurerm_virtual_network.example.name + address_prefixes = each.value.address_prefixes + private_endpoint_network_policies = each.value.private_endpoint_network_policies + private_link_service_network_policies_enabled = each.value.private_link_service_network_policies_enabled + + dynamic "delegation" { + for_each = each.value.delegation != null ? [each.value.delegation] : [] + content { + name = "delegation" + + service_delegation { + name = delegation.value + } + } + } + + lifecycle { + ignore_changes = [ + delegation + ] + } +} + +resource "azurerm_monitor_diagnostic_setting" "example" { + name = "DiagnosticsSettings" + target_resource_id = azurerm_virtual_network.example.id + log_analytics_workspace_id = var.log_analytics_workspace_id + + # NOTE: we deliberately do NOT add `enabled_metric { category = "AllMetrics" }` here. + # Many Azure subscriptions have a built-in or org-level Azure Policy + # (DeployIfNotExists) that auto-creates a `diagnosticSettings` resource on every new VNet + # forwarding `AllMetrics` to a workspace. Azure rejects a second diag setting that targets + # the same (resource, category, sink) triplet with a 409 Conflict — even if its name is + # different. The policy-managed one already covers AllMetrics; we contribute only the + # VMProtectionAlerts logs (typically NOT included by the default policy). + enabled_log { + category = "VMProtectionAlerts" + } +} diff --git a/samples/web-app-mysql-flexible-server/python/terraform/modules/virtual_network/outputs.tf b/samples/web-app-mysql-flexible-server/python/terraform/modules/virtual_network/outputs.tf new file mode 100644 index 0000000..b464308 --- /dev/null +++ b/samples/web-app-mysql-flexible-server/python/terraform/modules/virtual_network/outputs.tf @@ -0,0 +1,19 @@ +output "name" { + description = "Specifies the name of the virtual network" + value = azurerm_virtual_network.example.name +} + +output "vnet_id" { + description = "Specifies the resource id of the virtual network" + value = azurerm_virtual_network.example.id +} + +output "subnet_ids" { + description = "Contains a list of the the resource id of the subnets" + value = { for subnet in azurerm_subnet.example : subnet.name => subnet.id } +} + +output "subnet_ids_as_list" { + description = "Returns the list of the subnet ids as a list of strings." + value = [for subnet in azurerm_subnet.example : subnet.id] +} diff --git a/samples/web-app-mysql-flexible-server/python/terraform/modules/virtual_network/variables.tf b/samples/web-app-mysql-flexible-server/python/terraform/modules/virtual_network/variables.tf new file mode 100644 index 0000000..f8c0b0e --- /dev/null +++ b/samples/web-app-mysql-flexible-server/python/terraform/modules/virtual_network/variables.tf @@ -0,0 +1,40 @@ +variable "resource_group_name" { + description = "Resource Group name" + type = string +} + +variable "location" { + description = "Location in which to deploy the network" + type = string +} + +variable "vnet_name" { + description = "VNET name" + type = string +} + +variable "address_space" { + description = "VNET address space" + type = list(string) +} + +variable "subnets" { + description = "Subnets configuration" + type = list(object({ + name = string + address_prefixes = list(string) + private_endpoint_network_policies = string + private_link_service_network_policies_enabled = bool + delegation = string + })) +} + +variable "tags" { + description = "(Optional) Specifies the tags of the Azure Virtual Network resource." + default = {} +} + +variable "log_analytics_workspace_id" { + description = "Specifies the resource id of the Azure Log Analytics workspace." + type = string +} diff --git a/samples/web-app-mysql-flexible-server/python/terraform/modules/web_app/main.tf b/samples/web-app-mysql-flexible-server/python/terraform/modules/web_app/main.tf new file mode 100644 index 0000000..64e9176 --- /dev/null +++ b/samples/web-app-mysql-flexible-server/python/terraform/modules/web_app/main.tf @@ -0,0 +1,81 @@ +resource "azurerm_linux_web_app" "example" { + name = var.name + resource_group_name = var.resource_group_name + location = var.location + service_plan_id = var.service_plan_id + https_only = var.https_only + virtual_network_subnet_id = var.virtual_network_subnet_id + public_network_access_enabled = var.public_network_access_enabled + client_affinity_enabled = false + tags = var.tags + + identity { + type = "SystemAssigned" + } + + site_config { + always_on = var.always_on + http2_enabled = var.http2_enabled + minimum_tls_version = var.minimum_tls_version + vnet_route_all_enabled = var.vnet_route_all_enabled + application_stack { + python_version = var.python_version + } + } + + app_settings = var.app_settings + + lifecycle { + ignore_changes = [ + tags + ] + } +} + +# Deploy code from a public GitHub repo +resource "azurerm_app_service_source_control" "example" { + count = var.repo_url == "" ? 0 : 1 + app_id = azurerm_linux_web_app.example.id + repo_url = var.repo_url + branch = var.repo_branch + use_manual_integration = true + use_mercurial = false +} + +resource "azurerm_monitor_diagnostic_setting" "example" { + name = "DiagnosticsSettings" + target_resource_id = azurerm_linux_web_app.example.id + log_analytics_workspace_id = var.log_analytics_workspace_id + + enabled_log { + category = "AppServiceHTTPLogs" + } + + enabled_log { + category = "AppServiceConsoleLogs" + } + + enabled_log { + category = "AppServiceAppLogs" + } + + enabled_log { + category = "AppServiceAuditLogs" + } + + enabled_log { + category = "AppServiceIPSecAuditLogs" + } + + enabled_log { + category = "AppServicePlatformLogs" + } + + enabled_log { + category = "AppServiceAuthenticationLogs" + } + + enabled_metric { + category = "AllMetrics" + } +} \ No newline at end of file diff --git a/samples/web-app-mysql-flexible-server/python/terraform/modules/web_app/outputs.tf b/samples/web-app-mysql-flexible-server/python/terraform/modules/web_app/outputs.tf new file mode 100644 index 0000000..d7b6981 --- /dev/null +++ b/samples/web-app-mysql-flexible-server/python/terraform/modules/web_app/outputs.tf @@ -0,0 +1,24 @@ +output "id" { + value = azurerm_linux_web_app.example.id + description = "Specifies the resource id of the Web App" +} + +output "name" { + value = azurerm_linux_web_app.example.name + description = "Specifies the name of the Web App" +} + +output "default_hostname" { + value = azurerm_linux_web_app.example.default_hostname + description = "Specifies the default hostname of the Web App" +} + +output "outbound_ip_addresses" { + value = azurerm_linux_web_app.example.outbound_ip_addresses + description = "Specifies the outbound IP addresses of the Web App" +} + +output "principal_id" { + value = azurerm_linux_web_app.example.identity[0].principal_id + description = "Specifies the Principal ID of the System Assigned Managed Identity" +} diff --git a/samples/web-app-mysql-flexible-server/python/terraform/modules/web_app/variables.tf b/samples/web-app-mysql-flexible-server/python/terraform/modules/web_app/variables.tf new file mode 100644 index 0000000..a1ea892 --- /dev/null +++ b/samples/web-app-mysql-flexible-server/python/terraform/modules/web_app/variables.tf @@ -0,0 +1,96 @@ +variable "resource_group_name" { + description = "(Required) Specifies the name of the resource group." + type = string +} + +variable "location" { + description = "(Required) Specifies the location for the Web App." + type = string +} + +variable "name" { + description = "(Required) Specifies the name of the Web App." + type = string +} + +variable "service_plan_id" { + description = "(Required) Specifies the ID of the App Service Plan within which to create this Web App." + type = string +} + +variable "https_only" { + description = "(Optional) Specifies whether the Web App requires HTTPS connections." + type = bool + default = false +} + +variable "virtual_network_subnet_id" { + description = "(Optional) The subnet id which will be used by this Web App for regional virtual network integration." + type = string + default = null +} + +variable "vnet_route_all_enabled" { + description = "(Optional) Specifies whether to route all traffic from the Web App into the virtual network. This is only applicable if virtual_network_subnet_id is specified. Defaults to false." + type = bool + default = false +} + +variable "public_network_access_enabled" { + description = "(Optional) Specifies whether the public network access is enabled or disabled." + type = bool + default = true +} + +variable "always_on" { + description = "(Optional) Specifies whether the Web App is Always On enabled." + type = bool + default = true +} + +variable "http2_enabled" { + description = "(Optional) Specifies whether HTTP/2 is enabled for the Web App." + type = bool + default = false +} + +variable "minimum_tls_version" { + description = "(Optional) Specifies the minimum version of TLS required for SSL requests." + type = string + default = "1.2" +} + +variable "python_version" { + description = "(Optional) Specifies the version of Python to run." + type = string + default = "3.12" +} + +variable "app_settings" { + description = "(Optional) A map of key-value pairs for App Settings." + type = map(string) + default = {} +} + +variable "repo_url" { + description = "(Optional) Specifies the Git repository URL." + type = string + default = "" +} + +variable "repo_branch" { + description = "(Optional) Specifies the Git repository branch." + type = string + default = "main" +} + +variable "tags" { + description = "(Optional) Specifies the tags to be applied to the resources." + type = map(any) + default = {} +} + +variable "log_analytics_workspace_id" { + description = "Specifies the resource id of the Azure Log Analytics workspace." + type = string +} diff --git a/samples/web-app-mysql-flexible-server/python/terraform/outputs.tf b/samples/web-app-mysql-flexible-server/python/terraform/outputs.tf new file mode 100644 index 0000000..cd2b742 --- /dev/null +++ b/samples/web-app-mysql-flexible-server/python/terraform/outputs.tf @@ -0,0 +1,27 @@ +output "resource_group_name" { + value = local.resource_group_name +} + +output "mysql_server_name" { + value = module.mysql_flexible_server.name +} + +output "mysql_fqdn" { + value = module.mysql_flexible_server.fqdn +} + +output "mysql_database_name" { + value = module.mysql_flexible_server.database_name +} + +output "app_service_plan_name" { + value = module.app_service_plan.name +} + +output "web_app_name" { + value = module.web_app.name +} + +output "web_app_url" { + value = module.web_app.default_hostname +} diff --git a/samples/web-app-mysql-flexible-server/python/terraform/providers.tf b/samples/web-app-mysql-flexible-server/python/terraform/providers.tf new file mode 100644 index 0000000..3e04500 --- /dev/null +++ b/samples/web-app-mysql-flexible-server/python/terraform/providers.tf @@ -0,0 +1,24 @@ +terraform { + required_providers { + azurerm = { + source = "hashicorp/azurerm" + version = "=4.60.0" + } + } +} + +provider "azurerm" { + features { + resource_group { + prevent_deletion_if_contains_resources = false + } + } + + # Set the hostname of the Azure Metadata Service (for example management.azure.com) + # used to obtain the Cloud Environment when using LocalStack's Azure emulator. + # This allows the provider to correctly identify the environment and avoid making calls to the real Azure endpoints. + metadata_host = "localhost.localstack.cloud:4566" + + # Set the subscription ID to a dummy value when using LocalStack's Azure emulator. + subscription_id = "00000000-0000-0000-0000-000000000000" +} \ No newline at end of file diff --git a/samples/web-app-mysql-flexible-server/python/terraform/terraform.tfvars b/samples/web-app-mysql-flexible-server/python/terraform/terraform.tfvars new file mode 100644 index 0000000..919af4f --- /dev/null +++ b/samples/web-app-mysql-flexible-server/python/terraform/terraform.tfvars @@ -0,0 +1,3 @@ +prefix = "local" +suffix = "test" +location = "westeurope" \ No newline at end of file diff --git a/samples/web-app-mysql-flexible-server/python/terraform/variables.tf b/samples/web-app-mysql-flexible-server/python/terraform/variables.tf new file mode 100644 index 0000000..5e52cbf --- /dev/null +++ b/samples/web-app-mysql-flexible-server/python/terraform/variables.tf @@ -0,0 +1,206 @@ +variable "prefix" { + description = "Prefix for the name of the Azure resources." + type = string + default = "local" + + validation { + condition = var.prefix == null || length(var.prefix) >= 2 + error_message = "The prefix must be at least 2 characters long." + } +} + +variable "suffix" { + description = "Suffix for the name of the Azure resources." + type = string + default = "test" + + validation { + condition = var.suffix == null || length(var.suffix) >= 2 + error_message = "The suffix must be at least 2 characters long." + } +} + +variable "location" { + description = "Specifies the location for all resources." + type = string + default = "westeurope" +} + +# ----------------------------------------------------------------------------- +# MySQL flexible server +# ----------------------------------------------------------------------------- +variable "mysql_admin_login" { + description = "Administrator login for the MySQL flexible server." + type = string + default = "myadmin" +} + +variable "mysql_admin_password" { + description = "Administrator password for the MySQL flexible server. Pass via -var or the MYSQL_ADMIN_PASSWORD env var; do NOT commit." + type = string + sensitive = true + default = "P@ssw0rd1234!" +} + +variable "mysql_version" { + description = "MySQL major version." + type = string + default = "8.0.21" + + validation { + condition = contains(["5.7", "8.0.21"], var.mysql_version) + error_message = "The mysql_version must be one of: 5.7, 8.0.21." + } +} + +variable "mysql_sku_name" { + description = "Compute SKU for the MySQL flexible server (e.g. B_Standard_B1ms)." + type = string + default = "B_Standard_B1ms" +} + +variable "mysql_storage_size_gb" { + description = "Storage size in GB for the MySQL flexible server." + type = number + default = 32 +} + +variable "mysql_backup_retention_days" { + description = "Backup retention period in days for the MySQL flexible server." + type = number + default = 7 +} + +variable "mysql_database_name" { + description = "Name of the application database to create on the MySQL flexible server." + type = string + default = "PlannerDB" +} + +# ----------------------------------------------------------------------------- +# App Service / Web App +# ----------------------------------------------------------------------------- +variable "os_type" { + description = "OS type for the App Service Plan." + type = string + default = "Linux" +} + +variable "zone_balancing_enabled" { + type = bool + default = false +} + +variable "sku_name" { + description = "App Service Plan SKU name." + type = string + default = "S1" +} + +variable "python_version" { + description = "Python runtime version for the Web App." + type = string + default = "3.12" + + validation { + condition = contains(["3.13", "3.12", "3.11", "3.10", "3.9", "3.8", "3.7"], var.python_version) + error_message = "Unsupported python_version." + } +} + +variable "https_only" { + type = bool + default = false +} + +variable "minimum_tls_version" { + type = string + default = "1.2" +} + +variable "always_on" { + type = bool + default = true +} + +variable "http2_enabled" { + type = bool + default = false +} + +variable "public_network_access_enabled" { + type = bool + default = true +} + +variable "repo_url" { + type = string + default = "" + + validation { + condition = var.repo_url == "" || can(regex("^https?://", var.repo_url)) + error_message = "The repo_url must be empty or a valid HTTP/HTTPS URL." + } +} + +variable "login_name" { + description = "Login name for the application (scopes activity ownership)." + type = string + default = "paolo" +} + +variable "websites_port" { + type = number + default = 8000 +} + +variable "tags" { + type = map(string) + default = { + environment = "test" + iac = "terraform" + } +} + +# ----------------------------------------------------------------------------- +# Networking +# ----------------------------------------------------------------------------- +variable "vnet_address_space" { + type = list(string) + default = ["10.0.0.0/8"] +} + +variable "webapp_subnet_name" { + type = string + default = "app-subnet" +} + +variable "webapp_subnet_address_prefix" { + type = list(string) + default = ["10.0.0.0/24"] +} + +variable "pe_subnet_name" { + type = string + default = "pe-subnet" +} + +variable "pe_subnet_address_prefix" { + type = list(string) + default = ["10.0.1.0/24"] +} + +variable "nat_gateway_sku_name" { + type = string + default = "Standard" +} + +variable "nat_gateway_idle_timeout_in_minutes" { + type = number + default = 4 +} + +variable "nat_gateway_zones" { + type = list(string) + default = ["1"] +} From 06ac7af3f316edb9a6351be21c051b483c792d70 Mon Sep 17 00:00:00 2001 From: Bryan Sanchez Date: Thu, 4 Jun 2026 16:44:35 +0200 Subject: [PATCH 2/3] update database name --- .../web-app-mysql-flexible-server/python/README.md | 14 +++++++------- .../python/bicep/README.md | 6 +++--- .../python/bicep/main.bicep | 2 +- .../python/bicep/main.bicepparam | 2 +- .../bicep/modules/mysql-flexible-server.bicep | 2 +- .../python/scripts/README.md | 6 +++--- .../python/scripts/deploy.sh | 2 +- .../python/scripts/validate.sh | 2 +- .../python/terraform/README.md | 4 ++-- .../modules/mysql_flexible_server/variables.tf | 2 +- .../python/terraform/variables.tf | 2 +- 11 files changed, 22 insertions(+), 22 deletions(-) diff --git a/samples/web-app-mysql-flexible-server/python/README.md b/samples/web-app-mysql-flexible-server/python/README.md index 8ea20e6..0b682ff 100644 --- a/samples/web-app-mysql-flexible-server/python/README.md +++ b/samples/web-app-mysql-flexible-server/python/README.md @@ -1,6 +1,6 @@ # Azure Web App with Azure Database for MySQL flexible server -This sample demonstrates a Python Flask single-page web application called *Vacation Planner* hosted on an [Azure Web App](https://learn.microsoft.com/en-us/azure/app-service/overview). The app runs on an Azure App Service Plan and stores activity data in the `activities` table of the `PlannerDB` database on an [Azure Database for MySQL flexible server](https://learn.microsoft.com/en-us/azure/mysql/flexible-server/overview). The server is reached through a [Private Endpoint](https://learn.microsoft.com/azure/private-link/private-endpoint-overview) (group `mysqlServer`) with the `privatelink.mysql.database.azure.com` Private DNS Zone, while a permissive server-level firewall rule lets the deploy machine run the post-create mysql bootstrap that creates the application user and seeds the schema. +This sample demonstrates a Python Flask single-page web application called *Vacation Planner* hosted on an [Azure Web App](https://learn.microsoft.com/en-us/azure/app-service/overview). The app runs on an Azure App Service Plan and stores activity data in the `activities` table of the `plannerdb` database on an [Azure Database for MySQL flexible server](https://learn.microsoft.com/en-us/azure/mysql/flexible-server/overview). The server is reached through a [Private Endpoint](https://learn.microsoft.com/azure/private-link/private-endpoint-overview) (group `mysqlServer`) with the `privatelink.mysql.database.azure.com` Private DNS Zone, while a permissive server-level firewall rule lets the deploy machine run the post-create mysql bootstrap that creates the application user and seeds the schema. ## Architecture @@ -14,7 +14,7 @@ flowchart LR nat["NAT Gateway"] dns["Private DNS Zone
privatelink.mysql.database.azure.com"] asp["App Service Plan
S1 · Linux"] - mysql[("MySQL Flexible Server
8.0.21 · Burstable B1ms
DB: PlannerDB")] + mysql[("MySQL Flexible Server
8.0.21 · Burstable B1ms
DB: plannerdb")] subgraph vnet["Virtual Network 10.0.0.0/8"] direction TB @@ -49,13 +49,13 @@ The web app enables users to plan and manage vacation activities; all data is pe 5. [Azure NAT Gateway](https://learn.microsoft.com/azure/nat-gateway/nat-overview): Deterministic outbound connectivity for both subnets. 6. [Azure Network Security Group](https://learn.microsoft.com/en-us/azure/virtual-network/network-security-groups-overview): One NSG per subnet. 7. [Azure Log Analytics Workspace](https://learn.microsoft.com/azure/azure-monitor/logs/log-analytics-overview): Centralizes diagnostic logs and metrics. -8. [Azure Database for MySQL flexible server](https://learn.microsoft.com/en-us/azure/mysql/flexible-server/overview): Public-access server hosting the `PlannerDB` database. Burstable `Standard_B1ms`, version 8.0.21, 32 GiB storage, 7-day backup retention, HA disabled. A permissive firewall rule (`0.0.0.0–255.255.255.255`) is created so the deploy machine can run the post-create mysql bootstrap; the Web App itself reaches the server through the Private Endpoint. -9. [MySQL database](https://learn.microsoft.com/en-us/azure/mysql/flexible-server/how-to-create-manage-databases) `PlannerDB`: Created at provisioning time; the post-deploy mysql step creates the `activities` table and seeds the demo rows. +8. [Azure Database for MySQL flexible server](https://learn.microsoft.com/en-us/azure/mysql/flexible-server/overview): Public-access server hosting the `plannerdb` database. Burstable `Standard_B1ms`, version 8.0.21, 32 GiB storage, 7-day backup retention, HA disabled. A permissive firewall rule (`0.0.0.0–255.255.255.255`) is created so the deploy machine can run the post-create mysql bootstrap; the Web App itself reaches the server through the Private Endpoint. +9. [MySQL database](https://learn.microsoft.com/en-us/azure/mysql/flexible-server/how-to-create-manage-databases) `plannerdb`: Created at provisioning time; the post-deploy mysql step creates the `activities` table and seeds the demo rows. 10. [Azure App Service Plan](https://learn.microsoft.com/en-us/azure/app-service/overview-hosting-plans): The underlying compute tier that hosts the web application. 11. [Azure Web App](https://learn.microsoft.com/en-us/azure/app-service/overview): Runs the Python Flask *Vacation Planner* app with regional VNet integration into *app-subnet*. The Web App connects to MySQL using a dedicated application user (`testuser`) — the server-admin login is never used at runtime. 12. [App Service Source Control](https://learn.microsoft.com/en-us/rest/api/appservice/web-apps/create-or-update-source-control?view=rest-appservice-2024-11-01): *(Optional)* Configures continuous deployment from a public GitHub repository. -The deploy scripts follow the same pattern as the sibling [`web-app-postgresql-flexible-server`](../../web-app-postgresql-flexible-server/python/) sample: after provisioning, they (i) connect as the server admin via the public endpoint + firewall rule, (ii) create the application user `testuser` with its own password, (iii) grant privileges on `PlannerDB`, (iv) create the `activities` table, (v) seed sample rows, and (vi) write `MYSQL_USER=testuser` + `MYSQL_PASSWORD` onto the Web App's app settings. The server-admin login is never written into the Web App's runtime configuration. +The deploy scripts follow the same pattern as the sibling [`web-app-postgresql-flexible-server`](../../web-app-postgresql-flexible-server/python/) sample: after provisioning, they (i) connect as the server admin via the public endpoint + firewall rule, (ii) create the application user `testuser` with its own password, (iii) grant privileges on `plannerdb`, (iv) create the `activities` table, (v) seed sample rows, and (vi) write `MYSQL_USER=testuser` + `MYSQL_PASSWORD` onto the Web App's app settings. The server-admin login is never written into the Web App's runtime configuration. ## Prerequisites @@ -117,14 +117,14 @@ You can use [MySQL Workbench](https://www.mysql.com/products/workbench/) to expl | -------- | ------------------------------------------------------------------------------ | | Host | `localhost` | | Port | (see `docker ps` for the host-mapped port of the backing `mysql:8` container) | -| Database | `PlannerDB` | +| Database | `plannerdb` | | Username | `testuser` *(or `myadmin` for admin operations)* | | Password | `TestP@ssw0rd123` *(or `P@ssw0rd1234!` for the admin)* | Or use the [`mysql`](https://dev.mysql.com/doc/refman/8.0/en/mysql.html) command-line client: ```bash -MYSQL_PWD='TestP@ssw0rd123' mysql -h localhost -P -u testuser PlannerDB +MYSQL_PWD='TestP@ssw0rd123' mysql -h localhost -P -u testuser plannerdb mysql> SELECT id, username, activity, created_at FROM activities; ``` diff --git a/samples/web-app-mysql-flexible-server/python/bicep/README.md b/samples/web-app-mysql-flexible-server/python/bicep/README.md index a01f75a..e795015 100644 --- a/samples/web-app-mysql-flexible-server/python/bicep/README.md +++ b/samples/web-app-mysql-flexible-server/python/bicep/README.md @@ -29,7 +29,7 @@ The [`deploy.sh`](deploy.sh) script creates the resource group while the Bicep m 5. [Network Security Groups](https://learn.microsoft.com/en-us/azure/virtual-network/network-security-groups-overview): one per subnet. 6. [Azure Log Analytics Workspace](https://learn.microsoft.com/azure/azure-monitor/logs/log-analytics-overview). 7. [Azure Database for MySQL flexible server](https://learn.microsoft.com/en-us/azure/mysql/flexible-server/overview): public-access mode, Burstable `Standard_B1ms`, version 8.0.21, 32 GiB, HA disabled. A permissive firewall rule (`0.0.0.0–255.255.255.255`) lets the deploy machine reach the server for the post-create mysql bootstrap. -8. [MySQL database](https://learn.microsoft.com/en-us/azure/mysql/flexible-server/how-to-create-manage-databases) `PlannerDB` (utf8mb4 / `utf8mb4_unicode_ci`). +8. [MySQL database](https://learn.microsoft.com/en-us/azure/mysql/flexible-server/how-to-create-manage-databases) `plannerdb` (utf8mb4 / `utf8mb4_unicode_ci`). 9. [Azure App Service Plan](https://learn.microsoft.com/en-us/azure/app-service/overview-hosting-plans). 10. [Azure Web App](https://learn.microsoft.com/en-us/azure/app-service/overview) with regional VNet integration into *app-subnet*. The Bicep template sets `MYSQL_HOST`, `MYSQL_PORT`, and `MYSQL_DATABASE` on the Web App but **does not** set `MYSQL_USER` or `MYSQL_PASSWORD` — those are written by `deploy.sh` after the mysql client creates the application user. @@ -44,7 +44,7 @@ param prefix = 'local' param suffix = 'test' param runtimeName = 'python' param runtimeVersion = '3.13' -param databaseName = 'PlannerDB' +param databaseName = 'plannerdb' param username = 'paolo' param mysqlAdminLogin = 'myadmin' @@ -82,7 +82,7 @@ The script will: ## Verification ```bash -MYSQL_PWD='TestP@ssw0rd123' mysql -h -P -u testuser PlannerDB \ +MYSQL_PWD='TestP@ssw0rd123' mysql -h -P -u testuser plannerdb \ -e "SELECT id, username, activity, created_at FROM activities;" ``` diff --git a/samples/web-app-mysql-flexible-server/python/bicep/main.bicep b/samples/web-app-mysql-flexible-server/python/bicep/main.bicep index b6090d1..6be827f 100644 --- a/samples/web-app-mysql-flexible-server/python/bicep/main.bicep +++ b/samples/web-app-mysql-flexible-server/python/bicep/main.bicep @@ -96,7 +96,7 @@ param mysqlStorageSizeGB int = 32 param mysqlBackupRetentionDays int = 7 @description('Name of the application database to create on the MySQL flexible server.') -param databaseName string = 'PlannerDB' +param databaseName string = 'plannerdb' // // Networking diff --git a/samples/web-app-mysql-flexible-server/python/bicep/main.bicepparam b/samples/web-app-mysql-flexible-server/python/bicep/main.bicepparam index a46fe67..6ff84d9 100644 --- a/samples/web-app-mysql-flexible-server/python/bicep/main.bicepparam +++ b/samples/web-app-mysql-flexible-server/python/bicep/main.bicepparam @@ -4,7 +4,7 @@ param prefix = 'local' param suffix = 'test' param runtimeName = 'python' param runtimeVersion = '3.13' -param databaseName = 'PlannerDB' +param databaseName = 'plannerdb' param username = 'paolo' // MySQL flexible server diff --git a/samples/web-app-mysql-flexible-server/python/bicep/modules/mysql-flexible-server.bicep b/samples/web-app-mysql-flexible-server/python/bicep/modules/mysql-flexible-server.bicep index 293bf35..c018353 100644 --- a/samples/web-app-mysql-flexible-server/python/bicep/modules/mysql-flexible-server.bicep +++ b/samples/web-app-mysql-flexible-server/python/bicep/modules/mysql-flexible-server.bicep @@ -43,7 +43,7 @@ param storageSizeGB int = 32 param backupRetentionDays int = 7 @description('Specifies the name of the database to create on the server.') -param databaseName string = 'PlannerDB' +param databaseName string = 'plannerdb' @description('Specifies the database charset.') param databaseCharset string = 'utf8mb4' diff --git a/samples/web-app-mysql-flexible-server/python/scripts/README.md b/samples/web-app-mysql-flexible-server/python/scripts/README.md index 01c8a99..e1f2f53 100644 --- a/samples/web-app-mysql-flexible-server/python/scripts/README.md +++ b/samples/web-app-mysql-flexible-server/python/scripts/README.md @@ -27,10 +27,10 @@ pip install azlocal - *app-subnet*: delegated to `Microsoft.Web/serverFarms` (with NAT gateway). - *pe-subnet*: hosts the Private Endpoint (no delegation; `disable-private-endpoint-network-policies=true`). 6. [Azure Database for MySQL flexible server](https://learn.microsoft.com/en-us/azure/mysql/flexible-server/overview): public-access mode, `Burstable / Standard_B1ms`, version 8.0.21, 32 GiB, HA disabled. With a permissive `AllowAllIPs` firewall rule. -7. The `PlannerDB` [database](https://learn.microsoft.com/en-us/azure/mysql/flexible-server/how-to-create-manage-databases). +7. The `plannerdb` [database](https://learn.microsoft.com/en-us/azure/mysql/flexible-server/how-to-create-manage-databases). 8. [Azure Private DNS Zone](https://learn.microsoft.com/azure/dns/private-dns-privatednszone) `privatelink.mysql.database.azure.com`, linked to the VNet. 9. [Azure Private Endpoint](https://learn.microsoft.com/azure/private-link/private-endpoint-overview) targeting the MySQL server with group `mysqlServer`, plus the DNS-zone group that auto-registers the A record. -10. A separate application user (`testuser`) created via the `mysql` client, with privileges on `PlannerDB`. +10. A separate application user (`testuser`) created via the `mysql` client, with privileges on `plannerdb`. 11. The `activities` table and the seeded rows. 12. [Azure App Service Plan](https://learn.microsoft.com/en-us/azure/app-service/overview-hosting-plans). 13. [Azure Web App](https://learn.microsoft.com/en-us/azure/app-service/overview) with regional VNet integration into *app-subnet*, configured with `MYSQL_HOST`, `MYSQL_PORT`, `MYSQL_USER=testuser`, `MYSQL_PASSWORD`, `MYSQL_DATABASE`, `LOGIN_NAME`, `WEBSITES_PORT`. @@ -58,7 +58,7 @@ bash validate.sh | --------------------- | ------------------ | --------------------------------------------- | | `MYSQL_ADMIN_USER` | `myadmin` | Server administrator login | | `MYSQL_ADMIN_PASSWORD`| `P@ssw0rd1234!` | Server administrator password (sensitive) | -| `MYSQL_DATABASE_NAME` | `PlannerDB` | Application database | +| `MYSQL_DATABASE_NAME` | `plannerdb` | Application database | | `MYSQL_APP_USER` | `testuser` | Application user used by the Web App | | `MYSQL_APP_PASSWORD` | `TestP@ssw0rd123` | Password for the application user | diff --git a/samples/web-app-mysql-flexible-server/python/scripts/deploy.sh b/samples/web-app-mysql-flexible-server/python/scripts/deploy.sh index b92bbdf..b166297 100755 --- a/samples/web-app-mysql-flexible-server/python/scripts/deploy.sh +++ b/samples/web-app-mysql-flexible-server/python/scripts/deploy.sh @@ -31,7 +31,7 @@ MYSQL_SKU_NAME="Standard_B1ms" MYSQL_SKU_TIER="Burstable" MYSQL_STORAGE_SIZE_GB=32 MYSQL_BACKUP_RETENTION_DAYS=7 -MYSQL_DATABASE_NAME="PlannerDB" +MYSQL_DATABASE_NAME="plannerdb" MYSQL_ADMIN_USER="myadmin" MYSQL_ADMIN_PASSWORD="P@ssw0rd1234!" MYSQL_APP_USER="testuser" diff --git a/samples/web-app-mysql-flexible-server/python/scripts/validate.sh b/samples/web-app-mysql-flexible-server/python/scripts/validate.sh index f6a68a0..fe8176a 100755 --- a/samples/web-app-mysql-flexible-server/python/scripts/validate.sh +++ b/samples/web-app-mysql-flexible-server/python/scripts/validate.sh @@ -14,7 +14,7 @@ PRIVATE_ENDPOINT_NAME="${PREFIX}-mysql-pe-${SUFFIX}" APP_SERVICE_PLAN_NAME="${PREFIX}-app-service-plan-${SUFFIX}" WEB_APP_NAME="${PREFIX}-webapp-${SUFFIX}" MYSQL_SERVER_NAME="${PREFIX}-mysqlflex-${SUFFIX}" -MYSQL_DATABASE_NAME="PlannerDB" +MYSQL_DATABASE_NAME="plannerdb" FIREWALL_RULE_NAME="AllowAllIPs" # Check resource group diff --git a/samples/web-app-mysql-flexible-server/python/terraform/README.md b/samples/web-app-mysql-flexible-server/python/terraform/README.md index a486d2d..b86afe4 100644 --- a/samples/web-app-mysql-flexible-server/python/terraform/README.md +++ b/samples/web-app-mysql-flexible-server/python/terraform/README.md @@ -30,7 +30,7 @@ The Terraform configuration provisions: 6. [Network Security Groups](https://learn.microsoft.com/en-us/azure/virtual-network/network-security-groups-overview): one per subnet. 7. [Azure Log Analytics Workspace](https://learn.microsoft.com/azure/azure-monitor/logs/log-analytics-overview). 8. [Azure Database for MySQL flexible server](https://learn.microsoft.com/en-us/azure/mysql/flexible-server/overview): public-access mode, Burstable `Standard_B1ms`, version 8.0.21, 32 GiB, HA disabled. A permissive firewall rule (`AllowAllIPs`, `0.0.0.0–255.255.255.255`) lets the deploy machine reach the server for the post-apply mysql bootstrap. -9. [MySQL database](https://learn.microsoft.com/en-us/azure/mysql/flexible-server/how-to-create-manage-databases) `PlannerDB`. +9. [MySQL database](https://learn.microsoft.com/en-us/azure/mysql/flexible-server/how-to-create-manage-databases) `plannerdb`. 10. [Azure App Service Plan](https://learn.microsoft.com/en-us/azure/app-service/overview-hosting-plans). 11. [Azure Web App](https://learn.microsoft.com/en-us/azure/app-service/overview) with regional VNet integration. `MYSQL_HOST` / `MYSQL_PORT` / `MYSQL_DATABASE` are written by Terraform; `MYSQL_USER` and `MYSQL_PASSWORD` are written by `deploy.sh` after the mysql client creates the application user. @@ -58,6 +58,6 @@ Override any of the variables in [`variables.tf`](variables.tf) by editing [`ter | `mysql_sku_name` | `B_Standard_B1ms` | Compute SKU | | `mysql_storage_size_gb` | `32` | Storage size in GB | | `mysql_backup_retention_days` | `7` | Backup retention | -| `mysql_database_name` | `PlannerDB` | Application database | +| `mysql_database_name` | `plannerdb` | Application database | For non-dev deployments, set `mysql_admin_password` via env var: `MYSQL_ADMIN_PASSWORD=... bash deploy.sh`. diff --git a/samples/web-app-mysql-flexible-server/python/terraform/modules/mysql_flexible_server/variables.tf b/samples/web-app-mysql-flexible-server/python/terraform/modules/mysql_flexible_server/variables.tf index 4f6bd59..2852548 100644 --- a/samples/web-app-mysql-flexible-server/python/terraform/modules/mysql_flexible_server/variables.tf +++ b/samples/web-app-mysql-flexible-server/python/terraform/modules/mysql_flexible_server/variables.tf @@ -42,7 +42,7 @@ variable "backup_retention_days" { variable "database_name" { type = string - default = "PlannerDB" + default = "plannerdb" } variable "database_charset" { diff --git a/samples/web-app-mysql-flexible-server/python/terraform/variables.tf b/samples/web-app-mysql-flexible-server/python/terraform/variables.tf index 5e52cbf..548b8b3 100644 --- a/samples/web-app-mysql-flexible-server/python/terraform/variables.tf +++ b/samples/web-app-mysql-flexible-server/python/terraform/variables.tf @@ -74,7 +74,7 @@ variable "mysql_backup_retention_days" { variable "mysql_database_name" { description = "Name of the application database to create on the MySQL flexible server." type = string - default = "PlannerDB" + default = "plannerdb" } # ----------------------------------------------------------------------------- From 038a3f9587349c23b029a013b7993de5cad2a31c Mon Sep 17 00:00:00 2001 From: Bryan Sanchez Date: Tue, 9 Jun 2026 14:51:05 +0200 Subject: [PATCH 3/3] Refactor code structure --- .../python/README.md | 34 +----------------- .../python/bicep/deploy.sh | 31 +++++++++++++--- .../python/images/architecture.png | Bin 0 -> 229633 bytes .../python/scripts/deploy.sh | 33 ++++++++++++++--- .../python/terraform/deploy.sh | 31 +++++++++++++--- .../python/bicep/deploy.sh | 23 ++++++++++++ 6 files changed, 106 insertions(+), 46 deletions(-) create mode 100644 samples/web-app-mysql-flexible-server/python/images/architecture.png diff --git a/samples/web-app-mysql-flexible-server/python/README.md b/samples/web-app-mysql-flexible-server/python/README.md index 0b682ff..da7e8e8 100644 --- a/samples/web-app-mysql-flexible-server/python/README.md +++ b/samples/web-app-mysql-flexible-server/python/README.md @@ -4,39 +4,7 @@ This sample demonstrates a Python Flask single-page web application called *Vaca ## Architecture -```mermaid -flowchart LR - user([User]) - - subgraph rg["Resource Group: local-rg"] - direction LR - law["Log Analytics
Workspace"] - nat["NAT Gateway"] - dns["Private DNS Zone
privatelink.mysql.database.azure.com"] - asp["App Service Plan
S1 · Linux"] - mysql[("MySQL Flexible Server
8.0.21 · Burstable B1ms
DB: plannerdb")] - - subgraph vnet["Virtual Network 10.0.0.0/8"] - direction TB - subgraph appsub["app-subnet 10.0.0.0/24 — delegated to Microsoft.Web/serverFarms"] - webapp["Web App
Vacation Planner
Flask + gunicorn"] - end - subgraph pesub["pe-subnet 10.0.1.0/24"] - pe["Private Endpoint
group: mysqlServer"] - end - end - end - - user -->|HTTP| webapp - webapp -->|"MYSQL_HOST:MYSQL_PORT
(resolved via Private DNS)"| pe - pe -->|Private Link| mysql - dns -.->|A record| pe - dns -.->|linked| vnet - appsub -->|outbound| nat - webapp -.->|hosted on| asp - webapp -.->|diagnostics| law - mysql -.->|diagnostics| law -``` +![Architecture Diagram](./images/architecture.png) The web app enables users to plan and manage vacation activities; all data is persisted in MySQL. The solution is composed of the following Azure resources: diff --git a/samples/web-app-mysql-flexible-server/python/bicep/deploy.sh b/samples/web-app-mysql-flexible-server/python/bicep/deploy.sh index 946e72e..b398249 100755 --- a/samples/web-app-mysql-flexible-server/python/bicep/deploy.sh +++ b/samples/web-app-mysql-flexible-server/python/bicep/deploy.sh @@ -10,10 +10,10 @@ LOCATION="westeurope" VALIDATE_TEMPLATE=1 USE_WHAT_IF=0 SUBSCRIPTION_NAME=$(az account show --query name --output tsv) -MYSQL_ADMIN_USER="myadmin" -MYSQL_ADMIN_PASSWORD="P@ssw0rd1234!" -MYSQL_APP_USER="testuser" -MYSQL_APP_PASSWORD="TestP@ssw0rd123" +MYSQL_ADMIN_USER="${MYSQL_ADMIN_USER:-myadmin}" +MYSQL_ADMIN_PASSWORD="${MYSQL_ADMIN_PASSWORD:-P@ssw0rd1234!}" +MYSQL_APP_USER="${MYSQL_APP_USER:-testuser}" +MYSQL_APP_PASSWORD="${MYSQL_APP_PASSWORD:-TestP@ssw0rd123}" CURRENT_DIR="$(cd "$(dirname "$0")" && pwd)" ZIPFILE="planner_website.zip" @@ -134,6 +134,29 @@ else fi echo "MySQL host = $MYSQL_FQDN, port = $MYSQL_PORT" +echo "Waiting for the [$MYSQL_SERVER_NAME] MySQL flexible server to accept connections..." +MYSQL_READY=0 +for attempt in $(seq 1 30); do + if MYSQL_PWD="$MYSQL_ADMIN_PASSWORD" mysql \ + --host="$MYSQL_FQDN" \ + --port="$MYSQL_PORT" \ + --user="$MYSQL_ADMIN_USER" \ + --protocol=TCP \ + --connect-timeout=5 \ + -e "SELECT 1;" &>/dev/null; then + MYSQL_READY=1 + echo "MySQL flexible server is accepting connections (attempt $attempt/30)" + break + fi + echo "MySQL flexible server not ready yet (attempt $attempt/30)..." + sleep 2 +done + +if [ "$MYSQL_READY" -ne 1 ]; then + echo "MySQL flexible server did not become reachable after 30 attempts. Exiting." + exit 1 +fi + # Create application user [$MYSQL_APP_USER] on the MySQL flexible server echo "Creating login [$MYSQL_APP_USER] on the [$MYSQL_SERVER_NAME] MySQL flexible server..." MYSQL_PWD="$MYSQL_ADMIN_PASSWORD" mysql \ diff --git a/samples/web-app-mysql-flexible-server/python/images/architecture.png b/samples/web-app-mysql-flexible-server/python/images/architecture.png new file mode 100644 index 0000000000000000000000000000000000000000..10dcc6ff3e484c86e0cd0774467781cd374fc67c GIT binary patch literal 229633 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
lHDsYE%9ooutenpKg~bM2Mt&nmX# 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�`(rSBW6m}wiq492IsbF>7u&lzXDrfOZ<1*_ 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

jb!v~DIVEn$^7CPt4yr8WO} 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 literal 0 HcmV?d00001 diff --git a/samples/web-app-mysql-flexible-server/python/scripts/deploy.sh b/samples/web-app-mysql-flexible-server/python/scripts/deploy.sh index b166297..31095fe 100755 --- a/samples/web-app-mysql-flexible-server/python/scripts/deploy.sh +++ b/samples/web-app-mysql-flexible-server/python/scripts/deploy.sh @@ -31,11 +31,11 @@ MYSQL_SKU_NAME="Standard_B1ms" MYSQL_SKU_TIER="Burstable" MYSQL_STORAGE_SIZE_GB=32 MYSQL_BACKUP_RETENTION_DAYS=7 -MYSQL_DATABASE_NAME="plannerdb" -MYSQL_ADMIN_USER="myadmin" -MYSQL_ADMIN_PASSWORD="P@ssw0rd1234!" -MYSQL_APP_USER="testuser" -MYSQL_APP_PASSWORD="TestP@ssw0rd123" +MYSQL_DATABASE_NAME="${MYSQL_DATABASE_NAME:-plannerdb}" +MYSQL_ADMIN_USER="${MYSQL_ADMIN_USER:-myadmin}" +MYSQL_ADMIN_PASSWORD="${MYSQL_ADMIN_PASSWORD:-P@ssw0rd1234!}" +MYSQL_APP_USER="${MYSQL_APP_USER:-testuser}" +MYSQL_APP_PASSWORD="${MYSQL_APP_PASSWORD:-TestP@ssw0rd123}" FIREWALL_RULE_NAME="AllowAllIPs" RUNTIME="python" RUNTIME_VERSION="3.13" @@ -584,6 +584,29 @@ else echo "Private DNS zone group [$PRIVATE_DNS_ZONE_GROUP_NAME] for the [$PRIVATE_ENDPOINT_NAME] private endpoint already exists" fi +echo "Waiting for the [$MYSQL_SERVER_NAME] MySQL flexible server to accept connections..." +MYSQL_READY=0 +for attempt in $(seq 1 30); do + if MYSQL_PWD="$MYSQL_ADMIN_PASSWORD" mysql \ + --host="$MYSQL_FQDN" \ + --port="$MYSQL_PORT" \ + --user="$MYSQL_ADMIN_USER" \ + --protocol=TCP \ + --connect-timeout=5 \ + -e "SELECT 1;" &>/dev/null; then + MYSQL_READY=1 + echo "MySQL flexible server is accepting connections (attempt $attempt/30)" + break + fi + echo "MySQL flexible server not ready yet (attempt $attempt/30)..." + sleep 2 +done + +if [ "$MYSQL_READY" -ne 1 ]; then + echo "MySQL flexible server did not become reachable after 30 attempts. Exiting." + exit 1 +fi + # Create application user [$MYSQL_APP_USER] on the MySQL flexible server echo "Creating login [$MYSQL_APP_USER] on the [$MYSQL_SERVER_NAME] MySQL flexible server..." MYSQL_PWD="$MYSQL_ADMIN_PASSWORD" mysql \ diff --git a/samples/web-app-mysql-flexible-server/python/terraform/deploy.sh b/samples/web-app-mysql-flexible-server/python/terraform/deploy.sh index e8cb87f..243620f 100755 --- a/samples/web-app-mysql-flexible-server/python/terraform/deploy.sh +++ b/samples/web-app-mysql-flexible-server/python/terraform/deploy.sh @@ -4,10 +4,10 @@ PREFIX='local' SUFFIX='test' LOCATION='westeurope' -MYSQL_ADMIN_USER="myadmin" -MYSQL_ADMIN_PASSWORD="P@ssw0rd1234!" -MYSQL_APP_USER="testuser" -MYSQL_APP_PASSWORD="TestP@ssw0rd123" +MYSQL_ADMIN_USER="${MYSQL_ADMIN_USER:-myadmin}" +MYSQL_ADMIN_PASSWORD="${MYSQL_ADMIN_PASSWORD:-P@ssw0rd1234!}" +MYSQL_APP_USER="${MYSQL_APP_USER:-testuser}" +MYSQL_APP_PASSWORD="${MYSQL_APP_PASSWORD:-TestP@ssw0rd123}" CURRENT_DIR="$(cd "$(dirname "$0")" && pwd)" ZIPFILE="planner_website.zip" @@ -64,6 +64,29 @@ else fi echo "MySQL host = $MYSQL_FQDN, port = $MYSQL_PORT" +echo "Waiting for the [$MYSQL_SERVER_NAME] MySQL flexible server to accept connections..." +MYSQL_READY=0 +for attempt in $(seq 1 30); do + if MYSQL_PWD="$MYSQL_ADMIN_PASSWORD" mysql \ + --host="$MYSQL_FQDN" \ + --port="$MYSQL_PORT" \ + --user="$MYSQL_ADMIN_USER" \ + --protocol=TCP \ + --connect-timeout=5 \ + -e "SELECT 1;" &>/dev/null; then + MYSQL_READY=1 + echo "MySQL flexible server is accepting connections (attempt $attempt/30)" + break + fi + echo "MySQL flexible server not ready yet (attempt $attempt/30)..." + sleep 2 +done + +if [ "$MYSQL_READY" -ne 1 ]; then + echo "MySQL flexible server did not become reachable after 30 attempts. Exiting." + exit 1 +fi + # Create application user [$MYSQL_APP_USER] on the MySQL flexible server echo "Creating login [$MYSQL_APP_USER] on the [$MYSQL_SERVER_NAME] MySQL flexible server..." MYSQL_PWD="$MYSQL_ADMIN_PASSWORD" mysql \ diff --git a/samples/web-app-postgresql-flexible-server/python/bicep/deploy.sh b/samples/web-app-postgresql-flexible-server/python/bicep/deploy.sh index d4ed0a7..7ca3967 100755 --- a/samples/web-app-postgresql-flexible-server/python/bicep/deploy.sh +++ b/samples/web-app-postgresql-flexible-server/python/bicep/deploy.sh @@ -134,6 +134,29 @@ else fi echo "PostgreSQL host = $POSTGRES_FQDN, port = $POSTGRES_PORT" +echo "Waiting for the [$POSTGRES_SERVER_NAME] PostgreSQL flexible server to accept connections..." +POSTGRES_READY=0 +for attempt in $(seq 1 30); do + if PGPASSWORD="$PG_ADMIN_PASSWORD" PGCONNECT_TIMEOUT=5 psql \ + --host="$POSTGRES_FQDN" \ + --port="$POSTGRES_PORT" \ + --username="$PG_ADMIN_USER" \ + --dbname=postgres \ + --no-password \ + -c "SELECT 1;" &>/dev/null; then + POSTGRES_READY=1 + echo "PostgreSQL flexible server is accepting connections (attempt $attempt/30)" + break + fi + echo "PostgreSQL flexible server not ready yet (attempt $attempt/30)..." + sleep 2 +done + +if [ "$POSTGRES_READY" -ne 1 ]; then + echo "PostgreSQL flexible server did not become reachable after 30 attempts. Exiting." + exit 1 +fi + # Create application role [$PG_APP_USER] on the PostgreSQL flexible server echo "Creating login [$PG_APP_USER] on the [$POSTGRES_SERVER_NAME] PostgreSQL flexible server..." PGPASSWORD="$PG_ADMIN_PASSWORD" psql \